mirror of
https://github.com/blw1138/Zordon.git
synced 2025-12-17 08:48:13 +00:00
Fix issue with client not showing up when no jobs available
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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 = []
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
Reference in New Issue
Block a user