Manually add servers (#9)

* Add ability to manually add servers to client

* Misc client cleanup

* Add availability check before adding server to client UI
This commit is contained in:
2023-06-08 08:19:37 -05:00
committed by GitHub
parent f54d665714
commit 05c8ac506c
3 changed files with 35 additions and 16 deletions

View File

@@ -1,12 +1,10 @@
import subprocess
import logging
import requests
import tkinter as tk
import threading
import time
import socket
import os, sys
from tkinter import ttk, messagebox
import os
from tkinter import ttk, messagebox, simpledialog
from PIL import Image, ImageTk
from lib.client.new_job_window import NewJobWindow
from lib.server.server_proxy import RenderServerProxy
@@ -42,6 +40,7 @@ class DashboardWindow:
self.local_host = socket.gethostname()
self.server_proxy = RenderServerProxy(hostname=self.local_host)
self.job_cache = []
self.added_hostnames = []
# Setup zeroconf
self.zeroconf = ZeroconfServer("_zordon._tcp.local.", socket.gethostname(), 8080)
@@ -58,13 +57,21 @@ class DashboardWindow:
server_frame.pack(fill=tk.BOTH, pady=5, padx=5, expand=True)
# Create server tree
self.server_tree = ttk.Treeview(server_frame, show="headings")
self.server_tree.pack(side=tk.LEFT, expand=True, fill=tk.BOTH)
left_frame = tk.Frame(server_frame)
left_frame.pack(side=tk.LEFT, expand=True, fill=tk.BOTH)
self.server_tree = ttk.Treeview(left_frame, show="headings")
self.server_tree.pack(expand=True, fill=tk.BOTH)
self.server_tree["columns"] = ("Server")
self.server_tree.column("Server", width=50)
self.server_tree.bind("<<TreeviewSelect>>", self.server_picked)
self.server_tree.column("Server", width=200)
make_sortable(self.server_tree)
left_button_frame = tk.Frame(left_frame)
left_button_frame.pack(side=tk.BOTTOM, fill=tk.X, expand=False)
# Create buttons
add_server_button = tk.Button(left_button_frame, text="Add Server", command=self.add_server_button)
add_server_button.pack(side=tk.RIGHT, padx=5, pady=5)
# Create separator
separator = ttk.Separator(server_frame, orient=tk.VERTICAL)
@@ -96,7 +103,7 @@ class DashboardWindow:
self.job_tree.pack(fill=tk.BOTH, expand=True)
button_frame = tk.Frame(server_frame)
button_frame.pack(pady=5, fill=tk.BOTH, expand=True)
button_frame.pack(pady=5, fill=tk.X, expand=False)
# Create buttons
self.logs_button = tk.Button(button_frame, text="Logs", command=self.open_logs)
@@ -105,8 +112,6 @@ class DashboardWindow:
self.delete_button = tk.Button(button_frame, text="Delete", command=self.delete_job)
add_job_button = tk.Button(button_frame, text="Add Job", command=self.show_new_job_window)
self.stop_button.config(state='disabled')
# Pack the buttons in the frame
self.stop_button.pack(side=tk.LEFT)
self.stop_button.config(state='disabled')
@@ -123,6 +128,7 @@ class DashboardWindow:
self.root.maxsize(width=2000, height=1200)
self.root.minsize(width=900, height=800)
make_sortable(self.job_tree)
make_sortable(self.server_tree)
# update jobs
self.update_jobs()
@@ -145,6 +151,16 @@ class DashboardWindow:
x.daemon = True
x.start()
def add_server_button(self):
hostname = simpledialog.askstring("Server Hostname", "Enter the server hostname to add:")
if hostname:
hostname = hostname.strip()
if hostname not in self.added_hostnames:
if RenderServerProxy(hostname=hostname).connect():
self.added_hostnames.append(hostname)
else:
messagebox.showerror("Cannot Connect", f"Cannot connect to server at hostname: '{hostname}'")
def server_picked(self, event):
try:
new_hostname = self.server_tree.selection()[0]
@@ -250,7 +266,7 @@ class DashboardWindow:
time.sleep(3)
def update_servers(self):
servers = self.zeroconf.found_clients()
servers = list(set(self.zeroconf.found_clients() + self.added_hostnames))
if len(servers) < len(self.server_tree.get_children()):
self.server_tree.delete(*self.server_tree.get_children())
for hostname in servers:
@@ -268,7 +284,7 @@ class DashboardWindow:
break
hostname = self.server_proxy.hostname
job_fetch = self.server_proxy.get_jobs()
job_fetch = self.server_proxy.get_jobs(ignore_token=clear_table)
# have to check hostname is still valid because of delay in fetching jobs
if hostname == self.server_proxy.hostname:
if job_fetch is not None:
@@ -285,7 +301,9 @@ class DashboardWindow:
job['priority'],
display_status,
job['time_elapsed'],
job['total_frames'])
job['total_frames'],
job['date_created'],
job['owner'])
try:
if self.job_tree.exists(job['id']):
update_row(self.job_tree, job['id'], new_values=values, tags=tags)