mirror of
https://github.com/blw1138/Zordon.git
synced 2026-02-05 05:36:09 +00:00
Improve time representation in main window
This commit is contained in:
@@ -52,10 +52,9 @@ class NewRenderJobForm(QWidget):
|
|||||||
self.priority_input = None
|
self.priority_input = None
|
||||||
self.end_frame_input = None
|
self.end_frame_input = None
|
||||||
self.start_frame_input = None
|
self.start_frame_input = None
|
||||||
self.render_name_input = None
|
self.job_name_input = None
|
||||||
self.scene_file_input = None
|
self.scene_file_input = None
|
||||||
self.scene_file_browse_button = None
|
self.scene_file_browse_button = None
|
||||||
self.job_name_input = None
|
|
||||||
self.tabs = None
|
self.tabs = None
|
||||||
|
|
||||||
# Job / Server Data
|
# Job / Server Data
|
||||||
@@ -96,6 +95,17 @@ class NewRenderJobForm(QWidget):
|
|||||||
load_file_layout.addLayout(progress_layout)
|
load_file_layout.addLayout(progress_layout)
|
||||||
|
|
||||||
# Scene File
|
# Scene File
|
||||||
|
job_overview_group = QGroupBox("Project File")
|
||||||
|
file_group_layout = QVBoxLayout(job_overview_group)
|
||||||
|
|
||||||
|
# Job Name
|
||||||
|
job_name_layout = QHBoxLayout()
|
||||||
|
job_name_layout.addWidget(QLabel("Job name:"))
|
||||||
|
self.job_name_input = QLineEdit()
|
||||||
|
job_name_layout.addWidget(self.job_name_input)
|
||||||
|
file_group_layout.addLayout(job_name_layout)
|
||||||
|
|
||||||
|
# Job File
|
||||||
scene_file_picker_layout = QHBoxLayout()
|
scene_file_picker_layout = QHBoxLayout()
|
||||||
scene_file_picker_layout.addWidget(QLabel("File:"))
|
scene_file_picker_layout.addWidget(QLabel("File:"))
|
||||||
self.scene_file_input = QLineEdit()
|
self.scene_file_input = QLineEdit()
|
||||||
@@ -104,7 +114,10 @@ class NewRenderJobForm(QWidget):
|
|||||||
self.scene_file_browse_button.clicked.connect(self.browse_scene_file)
|
self.scene_file_browse_button.clicked.connect(self.browse_scene_file)
|
||||||
scene_file_picker_layout.addWidget(self.scene_file_input)
|
scene_file_picker_layout.addWidget(self.scene_file_input)
|
||||||
scene_file_picker_layout.addWidget(self.scene_file_browse_button)
|
scene_file_picker_layout.addWidget(self.scene_file_browse_button)
|
||||||
main_layout.addLayout(scene_file_picker_layout)
|
file_group_layout.addLayout(scene_file_picker_layout)
|
||||||
|
|
||||||
|
main_layout.addWidget(job_overview_group)
|
||||||
|
|
||||||
main_layout.addWidget(self.load_file_group)
|
main_layout.addWidget(self.load_file_group)
|
||||||
main_layout.addWidget(self.tabs)
|
main_layout.addWidget(self.tabs)
|
||||||
|
|
||||||
@@ -141,12 +154,12 @@ class NewRenderJobForm(QWidget):
|
|||||||
self.output_settings_group = QWidget()
|
self.output_settings_group = QWidget()
|
||||||
output_settings_layout = QVBoxLayout(self.output_settings_group)
|
output_settings_layout = QVBoxLayout(self.output_settings_group)
|
||||||
|
|
||||||
# Render Name
|
# # Render Name
|
||||||
render_name_layout = QHBoxLayout()
|
# render_name_layout = QHBoxLayout()
|
||||||
render_name_layout.addWidget(QLabel("Render name:"))
|
# render_name_layout.addWidget(QLabel("Render name:"))
|
||||||
self.render_name_input = QLineEdit()
|
# self.job_name_input = QLineEdit()
|
||||||
render_name_layout.addWidget(self.render_name_input)
|
# render_name_layout.addWidget(self.job_name_input)
|
||||||
output_settings_layout.addLayout(render_name_layout)
|
# output_settings_layout.addLayout(render_name_layout)
|
||||||
|
|
||||||
# File Format
|
# File Format
|
||||||
file_format_layout = QHBoxLayout()
|
file_format_layout = QHBoxLayout()
|
||||||
@@ -306,7 +319,7 @@ class NewRenderJobForm(QWidget):
|
|||||||
|
|
||||||
output_name, _ = os.path.splitext(os.path.basename(self.scene_file_input.text()))
|
output_name, _ = os.path.splitext(os.path.basename(self.scene_file_input.text()))
|
||||||
output_name = output_name.replace(' ', '_')
|
output_name = output_name.replace(' ', '_')
|
||||||
self.render_name_input.setText(output_name)
|
self.job_name_input.setText(output_name)
|
||||||
file_name = self.scene_file_input.text()
|
file_name = self.scene_file_input.text()
|
||||||
|
|
||||||
# setup bg worker
|
# setup bg worker
|
||||||
@@ -317,7 +330,7 @@ class NewRenderJobForm(QWidget):
|
|||||||
def browse_output_path(self):
|
def browse_output_path(self):
|
||||||
directory = QFileDialog.getExistingDirectory(self, "Select Output Directory")
|
directory = QFileDialog.getExistingDirectory(self, "Select Output Directory")
|
||||||
if directory:
|
if directory:
|
||||||
self.render_name_input.setText(directory)
|
self.job_name_input.setText(directory)
|
||||||
|
|
||||||
def args_help_button_clicked(self):
|
def args_help_button_clicked(self):
|
||||||
url = (f'http://{self.server_proxy.hostname}:{self.server_proxy.port}/api/engine/'
|
url = (f'http://{self.server_proxy.hostname}:{self.server_proxy.port}/api/engine/'
|
||||||
@@ -480,14 +493,14 @@ class SubmitWorker(QThread):
|
|||||||
'engine_version': self.window.engine_version_combo.currentText(),
|
'engine_version': self.window.engine_version_combo.currentText(),
|
||||||
'args': {'raw': self.window.raw_args.text(),
|
'args': {'raw': self.window.raw_args.text(),
|
||||||
'export_format': self.window.file_format_combo.currentText()},
|
'export_format': self.window.file_format_combo.currentText()},
|
||||||
'output_path': self.window.render_name_input.text(),
|
'output_path': self.window.job_name_input.text(),
|
||||||
'start_frame': self.window.start_frame_input.value(),
|
'start_frame': self.window.start_frame_input.value(),
|
||||||
'end_frame': self.window.end_frame_input.value(),
|
'end_frame': self.window.end_frame_input.value(),
|
||||||
'priority': self.window.priority_input.currentIndex() + 1,
|
'priority': self.window.priority_input.currentIndex() + 1,
|
||||||
'notes': self.window.notes_input.toPlainText(),
|
'notes': self.window.notes_input.toPlainText(),
|
||||||
'enable_split_jobs': self.window.enable_splitjobs.isChecked(),
|
'enable_split_jobs': self.window.enable_splitjobs.isChecked(),
|
||||||
'split_jobs_same_os': self.window.splitjobs_same_os.isChecked(),
|
'split_jobs_same_os': self.window.splitjobs_same_os.isChecked(),
|
||||||
'name': self.window.render_name_input.text()}
|
'name': self.window.job_name_input.text()}
|
||||||
|
|
||||||
# get the dynamic args
|
# get the dynamic args
|
||||||
for i in range(self.window.engine_options_layout.count()):
|
for i in range(self.window.engine_options_layout.count()):
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
import ast
|
import ast
|
||||||
import datetime
|
import datetime
|
||||||
import io
|
import io
|
||||||
import json
|
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
@@ -10,6 +9,7 @@ import threading
|
|||||||
import time
|
import time
|
||||||
|
|
||||||
import PIL
|
import PIL
|
||||||
|
import humanize
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
from PyQt6.QtCore import Qt, QByteArray, QBuffer, QIODevice, QThread
|
from PyQt6.QtCore import Qt, QByteArray, QBuffer, QIODevice, QThread
|
||||||
from PyQt6.QtGui import QPixmap, QImage, QFont, QIcon
|
from PyQt6.QtGui import QPixmap, QImage, QFont, QIcon
|
||||||
@@ -18,10 +18,8 @@ from PyQt6.QtWidgets import QMainWindow, QWidget, QHBoxLayout, QListWidget, QTab
|
|||||||
QFileDialog
|
QFileDialog
|
||||||
|
|
||||||
from src.api.api_server import API_VERSION
|
from src.api.api_server import API_VERSION
|
||||||
|
from src.api.serverproxy_manager import ServerProxyManager
|
||||||
from src.render_queue import RenderQueue
|
from src.render_queue import RenderQueue
|
||||||
from src.utilities.misc_helper import get_time_elapsed, resources_dir, is_localhost
|
|
||||||
from src.utilities.status_utils import RenderStatus
|
|
||||||
from src.utilities.zeroconf_server import ZeroconfServer
|
|
||||||
from src.ui.add_job_window import NewRenderJobForm
|
from src.ui.add_job_window import NewRenderJobForm
|
||||||
from src.ui.console_window import ConsoleWindow
|
from src.ui.console_window import ConsoleWindow
|
||||||
from src.ui.engine_browser import EngineBrowserWindow
|
from src.ui.engine_browser import EngineBrowserWindow
|
||||||
@@ -30,8 +28,10 @@ from src.ui.widgets.menubar import MenuBar
|
|||||||
from src.ui.widgets.proportional_image_label import ProportionalImageLabel
|
from src.ui.widgets.proportional_image_label import ProportionalImageLabel
|
||||||
from src.ui.widgets.statusbar import StatusBar
|
from src.ui.widgets.statusbar import StatusBar
|
||||||
from src.ui.widgets.toolbar import ToolBar
|
from src.ui.widgets.toolbar import ToolBar
|
||||||
from src.api.serverproxy_manager import ServerProxyManager
|
from src.utilities.misc_helper import get_time_elapsed, resources_dir, is_localhost
|
||||||
from src.utilities.misc_helper import launch_url, iso_datestring_to_formatted_datestring
|
from src.utilities.misc_helper import launch_url
|
||||||
|
from src.utilities.status_utils import RenderStatus
|
||||||
|
from src.utilities.zeroconf_server import ZeroconfServer
|
||||||
from src.version import APP_NAME
|
from src.version import APP_NAME
|
||||||
|
|
||||||
logger = logging.getLogger()
|
logger = logging.getLogger()
|
||||||
@@ -310,11 +310,12 @@ class MainWindow(QMainWindow):
|
|||||||
engine_name = f"{job.get('engine', '')}-{job.get('engine_version')}"
|
engine_name = f"{job.get('engine', '')}-{job.get('engine_version')}"
|
||||||
priority = str(job.get('priority', ''))
|
priority = str(job.get('priority', ''))
|
||||||
total_frames = str(job.get('total_frames', ''))
|
total_frames = str(job.get('total_frames', ''))
|
||||||
date_created_string = iso_datestring_to_formatted_datestring(job['date_created'])
|
converted_time = datetime.datetime.fromisoformat(job['date_created'])
|
||||||
|
humanized_time = humanize.naturaltime(converted_time)
|
||||||
|
|
||||||
items = [QTableWidgetItem(job['id']), QTableWidgetItem(name), QTableWidgetItem(engine_name),
|
items = [QTableWidgetItem(job['id']), QTableWidgetItem(name), QTableWidgetItem(engine_name),
|
||||||
QTableWidgetItem(priority), QTableWidgetItem(display_status), QTableWidgetItem(time_elapsed),
|
QTableWidgetItem(priority), QTableWidgetItem(display_status), QTableWidgetItem(time_elapsed),
|
||||||
QTableWidgetItem(total_frames), QTableWidgetItem(date_created_string)]
|
QTableWidgetItem(total_frames), QTableWidgetItem(humanized_time)]
|
||||||
|
|
||||||
for col, item in enumerate(items):
|
for col, item in enumerate(items):
|
||||||
self.job_list_view.setItem(row, col, item)
|
self.job_list_view.setItem(row, col, item)
|
||||||
|
|||||||
@@ -249,20 +249,6 @@ def num_to_alphanumeric(num):
|
|||||||
return result[::-1] # Reverse the result to get the correct alphanumeric string
|
return result[::-1] # Reverse the result to get the correct alphanumeric string
|
||||||
|
|
||||||
|
|
||||||
def iso_datestring_to_formatted_datestring(iso_date_string):
|
|
||||||
from dateutil import parser
|
|
||||||
import pytz
|
|
||||||
|
|
||||||
# Parse the ISO date string into a datetime object and convert timezones
|
|
||||||
date = parser.isoparse(iso_date_string).astimezone(pytz.UTC)
|
|
||||||
local_timezone = datetime.now().astimezone().tzinfo
|
|
||||||
date_local = date.astimezone(local_timezone)
|
|
||||||
|
|
||||||
# Format the date to the desired readable yet sortable format with 12-hour time
|
|
||||||
formatted_date = date_local.strftime('%Y-%m-%d %I:%M %p')
|
|
||||||
|
|
||||||
return formatted_date
|
|
||||||
|
|
||||||
def get_gpu_info():
|
def get_gpu_info():
|
||||||
"""Cross-platform GPU information retrieval"""
|
"""Cross-platform GPU information retrieval"""
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user