Client cleanup

This commit is contained in:
Brett Williams
2023-06-01 15:50:09 -05:00
parent 7040812e71
commit b027a19352

View File

@@ -135,7 +135,11 @@ class ZordonClient:
self.server_tree.selection_set(selected_server) self.server_tree.selection_set(selected_server)
except IndexError: except IndexError:
pass pass
self.start_update_thread()
# start background update
x = threading.Thread(target=self.__background_update)
x.daemon = True
x.start()
def populate_server_tree(self): def populate_server_tree(self):
servers = available_servers() servers = available_servers()
@@ -146,24 +150,30 @@ class ZordonClient:
def server_picked(self, event): def server_picked(self, event):
new_hostname = self.server_tree.selection()[0] new_hostname = self.server_tree.selection()[0]
self.server_proxy.hostname = new_hostname self.server_proxy.hostname = new_hostname
self.job_cache = [] self.job_cache.clear()
self.update_jobs(clear_table=True) self.update_jobs(clear_table=True)
def stop_job(self): def selected_job_id(self):
try:
selected_item = self.job_tree.selection()[0] # Get the selected item selected_item = self.job_tree.selection()[0] # Get the selected item
row_data = self.job_tree.item(selected_item) # Get the text of the selected item row_data = self.job_tree.item(selected_item) # Get the text of the selected item
job_id = row_data['values'][0] job_id = row_data['values'][0]
return job_id
except Exception as e:
return None
def stop_job(self):
job_id = self.selected_job_id()
self.server_proxy.request_data(f'job/{job_id}/cancel?confirm=true') self.server_proxy.request_data(f'job/{job_id}/cancel?confirm=true')
def delete_job(self): def delete_job(self):
selected_item = self.job_tree.selection()[0] # Get the selected item job_id = self.selected_job_id()
row_data = self.job_tree.item(selected_item) # Get the text of the selected item
job_id = row_data['values'][0]
job = next((d for d in self.job_cache if d.get('id') == job_id), None) job = next((d for d in self.job_cache if d.get('id') == job_id), None)
display_name = job['name'] or os.path.basename(job['input_path']) display_name = job['name'] or os.path.basename(job['input_path'])
result = messagebox.askyesno("Confirmation", f"Are you sure you want to delete the job:\n{display_name}?") result = messagebox.askyesno("Confirmation", f"Are you sure you want to delete the job:\n{display_name}?")
if result: if result:
self.server_proxy.request_data(f'job/{job_id}/delete?confirm=true') self.server_proxy.request_data(f'job/{job_id}/delete?confirm=true')
self.job_cache.clear()
self.update_jobs(clear_table=True) self.update_jobs(clear_table=True)
def set_image(self, image): def set_image(self, image):
@@ -173,11 +183,8 @@ class ZordonClient:
self.photo_label.image = thumb_image self.photo_label.image = thumb_image
def on_row_select(self, event): def on_row_select(self, event):
if self.job_tree.selection(): job_id = self.selected_job_id()
selected_item = self.job_tree.selection()[0] # Get the selected item if job_id:
row_data = self.job_tree.item(selected_item) # Get the text of the selected item
job_id = row_data['values'][0]
# update thumb # update thumb
response = self.server_proxy.request(f'job/{job_id}/thumbnail?size=big') response = self.server_proxy.request(f'job/{job_id}/thumbnail?size=big')
if response.ok: if response.ok:
@@ -197,33 +204,20 @@ class ZordonClient:
self.set_image(self.default_image) self.set_image(self.default_image)
def reveal_in_finder(self): def reveal_in_finder(self):
selected_item = self.job_tree.selection()[0] # Get the selected item job = next((d for d in self.job_cache if d.get('id') == self.selected_job_id()), None)
row_data = self.job_tree.item(selected_item) # Get the text of the selected item
job_id = row_data['values'][0]
job = next((d for d in self.job_cache if d.get('id') == job_id), None)
output_dir = os.path.dirname(job['output_path']) output_dir = os.path.dirname(job['output_path'])
subprocess.run(['open', output_dir]) subprocess.run(['open', output_dir])
def open_logs(self): def open_logs(self):
selected_item = self.job_tree.selection()[0] # Get the selected item job = next((d for d in self.job_cache if d.get('id') == self.selected_job_id()), None)
row_data = self.job_tree.item(selected_item) # Get the text of the selected item
job_id = row_data['values'][0]
job = next((d for d in self.job_cache if d.get('id') == job_id), None)
subprocess.run(['open', job['log_path']]) subprocess.run(['open', job['log_path']])
def mainloop(self): def mainloop(self):
self.root.mainloop() self.root.mainloop()
def start_update_thread(self):
x = threading.Thread(target=self.__background_update)
x.daemon = True
x.start()
def __background_update(self): def __background_update(self):
while True: while True:
self.update_jobs(clear_table=False) self.update_jobs()
time.sleep(1) time.sleep(1)
def update_jobs(self, clear_table=False): def update_jobs(self, clear_table=False):
@@ -234,12 +228,13 @@ class ZordonClient:
if values[0] == id: if values[0] == id:
tree.item(item, values=new_values, tags=tags) tree.item(item, values=new_values, tags=tags)
break break
job_fetch = self.server_proxy.get_jobs()
if job_fetch is not None:
if len(job_fetch) < len(self.job_cache) or len(job_fetch) == 0:
clear_table = True
self.job_cache = job_fetch # update the cache only if its good data
if clear_table: if clear_table:
self.job_tree.delete(*self.job_tree.get_children()) self.job_tree.delete(*self.job_tree.get_children())
self.job_cache.clear()
job_fetch = self.server_proxy.get_jobs()
if job_fetch:
self.job_cache = job_fetch # update the cache only if its good data
for job in self.job_cache: for job in self.job_cache:
display_status = job['status'] if job['status'] != 'running' else \ display_status = job['status'] if job['status'] != 'running' else \
('%.0f%%' % (job['percent_complete'] * 100)) # if running, show percentage, otherwise just show status ('%.0f%%' % (job['percent_complete'] * 100)) # if running, show percentage, otherwise just show status