mirror of
https://github.com/blw1138/Zordon.git
synced 2025-12-17 16:58:12 +00:00
Update jobs on background thread
This commit is contained in:
@@ -220,7 +220,7 @@ class ZordonClient:
|
||||
while True:
|
||||
self.update_jobs()
|
||||
self.update_servers()
|
||||
time.sleep(1)
|
||||
time.sleep(3)
|
||||
|
||||
def update_servers(self):
|
||||
servers = self.zeroconf.found_clients()
|
||||
@@ -232,34 +232,43 @@ class ZordonClient:
|
||||
|
||||
def update_jobs(self, clear_table=False):
|
||||
|
||||
def update_row(tree, id, new_values, tags=None):
|
||||
for item in tree.get_children():
|
||||
values = tree.item(item, "values")
|
||||
if values[0] == id:
|
||||
tree.item(item, values=new_values, tags=tags)
|
||||
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
|
||||
def update_jobs_inner():
|
||||
def update_row(tree, id, new_values, tags=None):
|
||||
for item in tree.get_children():
|
||||
values = tree.item(item, "values")
|
||||
if values[0] == id:
|
||||
tree.item(item, values=new_values, tags=tags)
|
||||
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:
|
||||
self.job_tree.delete(*self.job_tree.get_children())
|
||||
self.job_cache = job_fetch # update the cache only if its good data
|
||||
for job in self.job_cache:
|
||||
display_status = job['status'] if job['status'] != 'running' else \
|
||||
('%.0f%%' % (job['percent_complete'] * 100)) # if running, show percentage, otherwise just show status
|
||||
tags = (job['status'],)
|
||||
values = (job['id'],
|
||||
job['name'] or os.path.basename(job['input_path']),
|
||||
job['renderer'] + "-" + job['renderer_version'],
|
||||
job['priority'],
|
||||
display_status,
|
||||
job['time_elapsed'],
|
||||
job['total_frames'])
|
||||
try:
|
||||
if self.job_tree.exists(job['id']):
|
||||
update_row(self.job_tree, job['id'], new_values=values, tags=tags)
|
||||
else:
|
||||
self.job_tree.insert("", tk.END, iid=job['id'], values=values, tags=tags)
|
||||
except tk.TclError:
|
||||
pass
|
||||
|
||||
if clear_table:
|
||||
self.job_tree.delete(*self.job_tree.get_children())
|
||||
for job in self.job_cache:
|
||||
display_status = job['status'] if job['status'] != 'running' else \
|
||||
('%.0f%%' % (job['percent_complete'] * 100)) # if running, show percentage, otherwise just show status
|
||||
tags = (job['status'],)
|
||||
values = (job['id'],
|
||||
job['name'] or os.path.basename(job['input_path']),
|
||||
job['renderer'] + "-" + job['renderer_version'],
|
||||
job['priority'],
|
||||
display_status,
|
||||
job['time_elapsed'],
|
||||
job['total_frames'])
|
||||
if self.job_tree.exists(job['id']):
|
||||
update_row(self.job_tree, job['id'], new_values=values, tags=tags)
|
||||
else:
|
||||
self.job_tree.insert("", tk.END, iid=job['id'], values=values, tags=tags)
|
||||
|
||||
x = threading.Thread(target=update_jobs_inner)
|
||||
x.daemon = True
|
||||
x.start()
|
||||
|
||||
def show_new_job_window(self):
|
||||
new_window = tk.Toplevel(self.root)
|
||||
|
||||
@@ -34,15 +34,16 @@ 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):
|
||||
all_jobs = self.request_data('jobs')
|
||||
sorted_jobs = []
|
||||
if all_jobs:
|
||||
def get_jobs(self, timeout=5):
|
||||
all_jobs = self.request_data('jobs', timeout=timeout)
|
||||
if all_jobs is not None:
|
||||
sorted_jobs = []
|
||||
for status_category in categories:
|
||||
found_jobs = [x for x in all_jobs if x['status'] == status_category.value]
|
||||
if found_jobs:
|
||||
sorted_jobs.extend(found_jobs)
|
||||
return sorted_jobs
|
||||
all_jobs = sorted_jobs
|
||||
return all_jobs
|
||||
|
||||
def get_data(self, timeout=5):
|
||||
all_data = self.request_data('full_status', timeout=timeout)
|
||||
|
||||
@@ -48,8 +48,9 @@ class ZeroconfServer():
|
||||
def _browse_services(self):
|
||||
browser = ServiceBrowser(self.zeroconf, self.service_type, [self._on_service_discovered])
|
||||
|
||||
def _on_service_discovered(self, zeroconf, service_type, name, state_change=None):
|
||||
def _on_service_discovered(self, zeroconf, service_type, name, state_change):
|
||||
info = zeroconf.get_service_info(service_type, name)
|
||||
logger.debug(f"Zeroconf: {name} {state_change}")
|
||||
if service_type == self.service_type:
|
||||
if state_change == ServiceStateChange.Added or state_change == ServiceStateChange.Updated:
|
||||
self.client_cache[name] = info
|
||||
|
||||
Reference in New Issue
Block a user