mirror of
https://github.com/blw1138/Zordon.git
synced 2025-12-17 08:48:13 +00:00
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:
@@ -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)
|
||||
|
||||
@@ -52,8 +52,8 @@ class RenderServerProxy:
|
||||
def request(self, payload, timeout=5):
|
||||
return requests.get(f'http://{self.hostname}:{self.port}/api/{payload}', timeout=timeout)
|
||||
|
||||
def get_jobs(self, timeout=5):
|
||||
url = f'jobs?token={self.__jobs_cache_token}' if self.__jobs_cache_token else 'jobs'
|
||||
def get_jobs(self, timeout=5, ignore_token=False):
|
||||
url = f'jobs?token={self.__jobs_cache_token}' if self.__jobs_cache_token and not ignore_token else 'jobs'
|
||||
status_result = self.request_data(url, timeout=timeout)
|
||||
all_jobs = None
|
||||
if status_result is not None:
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
from lib.client.dashboard_window import start_client
|
||||
|
||||
if __name__ == '__main__':
|
||||
start_client()
|
||||
start_client()
|
||||
|
||||
Reference in New Issue
Block a user