Fix issue with client not showing up when no jobs available

This commit is contained in:
Brett Williams
2023-06-01 14:37:26 -05:00
parent 1598a26525
commit 7040812e71
5 changed files with 26 additions and 13 deletions

View File

@@ -40,6 +40,8 @@ def available_servers():
class ZordonClient: class ZordonClient:
default_image = Image.open("../server/static/images/desktop.png")
def __init__(self): def __init__(self):
servers = available_servers() servers = available_servers()
@@ -56,6 +58,7 @@ class ZordonClient:
photo_pad.pack(fill=tk.BOTH, pady=5, padx=5) photo_pad.pack(fill=tk.BOTH, pady=5, padx=5)
self.photo_label = tk.Label(photo_pad, height=500) self.photo_label = tk.Label(photo_pad, height=500)
self.photo_label.pack(fill=tk.BOTH, expand=True) self.photo_label.pack(fill=tk.BOTH, expand=True)
self.set_image(self.default_image)
server_frame = tk.LabelFrame(self.root, text="Server") server_frame = tk.LabelFrame(self.root, text="Server")
server_frame.pack(fill=tk.BOTH, pady=5, padx=5, expand=True) server_frame.pack(fill=tk.BOTH, pady=5, padx=5, expand=True)
@@ -117,12 +120,15 @@ class ZordonClient:
self.root.minsize(width=900, height=1000) self.root.minsize(width=900, height=1000)
make_sortable(self.job_tree) make_sortable(self.job_tree)
# update jobs
self.update_jobs() self.update_jobs()
try: try:
selected_job = self.job_tree.get_children()[0] selected_job = self.job_tree.get_children()[0]
self.job_tree.selection_set(selected_job) self.job_tree.selection_set(selected_job)
except IndexError: except IndexError:
pass pass
# update servers
self.populate_server_tree() self.populate_server_tree()
try: try:
selected_server = self.server_tree.get_children()[0] selected_server = self.server_tree.get_children()[0]
@@ -160,6 +166,12 @@ class ZordonClient:
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.update_jobs(clear_table=True) self.update_jobs(clear_table=True)
def set_image(self, image):
thumb_image = ImageTk.PhotoImage(image)
if thumb_image:
self.photo_label.configure(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(): if self.job_tree.selection():
selected_item = self.job_tree.selection()[0] # Get the selected item selected_item = self.job_tree.selection()[0] # Get the selected item
@@ -167,24 +179,22 @@ class ZordonClient:
job_id = row_data['values'][0] job_id = row_data['values'][0]
# update thumb # update thumb
thumb_url = f'http://{self.server_proxy.hostname}:{self.server_proxy.port}/ui/job/{job_id}/thumbnail?size=big' response = self.server_proxy.request(f'job/{job_id}/thumbnail?size=big')
response = requests.get(thumb_url) if response.ok:
if response.status_code == 200:
try: try:
import io import io
image_data = response.content image_data = response.content
image = Image.open(io.BytesIO(image_data)) image = Image.open(io.BytesIO(image_data))
thumb_image = ImageTk.PhotoImage(image) self.set_image(image)
if thumb_image:
self.photo_label.configure(image=thumb_image)
self.photo_label.image = thumb_image
except Exception as e: except Exception as e:
print(f"error getting image: {e}") print(f"error getting image: {e}")
# update button status # update button status
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)
button_state = 'normal' if job['status'] == 'running' else 'disabled' button_state = 'normal' if job and job['status'] == 'running' else 'disabled'
self.stop_button.config(state=button_state) self.stop_button.config(state=button_state)
else:
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 selected_item = self.job_tree.selection()[0] # Get the selected item

View File

@@ -24,13 +24,16 @@ class RenderServerProxy:
def request_data(self, payload, timeout=5): def request_data(self, payload, timeout=5):
try: try:
req = requests.get(f'http://{self.hostname}:{self.port}/api/{payload}', timeout=timeout) req = self.request(payload, timeout)
if req.ok: if req.ok:
return req.json() return req.json()
except Exception as e: except Exception as e:
pass pass
return None return None
def request(self, payload, timeout=5):
return requests.get(f'http://{self.hostname}:{self.port}/api/{payload}', timeout=timeout)
def get_jobs(self): def get_jobs(self):
all_jobs = self.request_data('jobs') all_jobs = self.request_data('jobs')
sorted_jobs = [] sorted_jobs = []

View File

@@ -42,8 +42,8 @@ class BaseRenderWorker(Base):
input_path = Column(String) input_path = Column(String)
output_path = Column(String) output_path = Column(String)
date_created = Column(DateTime) date_created = Column(DateTime)
start_time = Column(DateTime) start_time = Column(DateTime, nullable=True)
end_time = Column(DateTime) end_time = Column(DateTime, nullable=True)
renderer = Column(String) renderer = Column(String)
renderer_version = Column(String) renderer_version = Column(String)
priority = Column(Integer) priority = Column(Integer)

View File

@@ -68,7 +68,7 @@ def job_detail(job_id):
job=found_job, renderer_info=renderer_info()) job=found_job, renderer_info=renderer_info())
@server.route('/ui/job/<job_id>/thumbnail') @server.route('/api/job/<job_id>/thumbnail')
def job_thumbnail(job_id): def job_thumbnail(job_id):
big_thumb = request.args.get('size', False) == "big" big_thumb = request.args.get('size', False) == "big"
found_job = RenderQueue.job_with_id(job_id, none_ok=True) found_job = RenderQueue.job_with_id(job_id, none_ok=True)

View File

@@ -2,7 +2,7 @@ const grid = new gridjs.Grid({
columns: [ columns: [
{ data: (row) => row.id, { data: (row) => row.id,
name: 'Thumbnail', name: 'Thumbnail',
formatter: (cell) => gridjs.html(`<img src="/ui/job/${cell}/thumbnail" style='width: 200px; min-width: 120px;'>`), formatter: (cell) => gridjs.html(`<img src="/api/job/${cell}/thumbnail" style='width: 200px; min-width: 120px;'>`),
sort: {enabled: false} sort: {enabled: false}
}, },
{ id: 'name', { id: 'name',