Improve time representation in main window

This commit is contained in:
Brett Williams
2026-01-04 20:21:37 -06:00
parent a036b8244f
commit 2691c759ad
3 changed files with 35 additions and 35 deletions

View File

@@ -52,10 +52,9 @@ class NewRenderJobForm(QWidget):
self.priority_input = None
self.end_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_browse_button = None
self.job_name_input = None
self.tabs = None
# Job / Server Data
@@ -96,6 +95,17 @@ class NewRenderJobForm(QWidget):
load_file_layout.addLayout(progress_layout)
# 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.addWidget(QLabel("File:"))
self.scene_file_input = QLineEdit()
@@ -104,7 +114,10 @@ class NewRenderJobForm(QWidget):
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_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.tabs)
@@ -141,12 +154,12 @@ class NewRenderJobForm(QWidget):
self.output_settings_group = QWidget()
output_settings_layout = QVBoxLayout(self.output_settings_group)
# Render Name
render_name_layout = QHBoxLayout()
render_name_layout.addWidget(QLabel("Render name:"))
self.render_name_input = QLineEdit()
render_name_layout.addWidget(self.render_name_input)
output_settings_layout.addLayout(render_name_layout)
# # Render Name
# render_name_layout = QHBoxLayout()
# render_name_layout.addWidget(QLabel("Render name:"))
# self.job_name_input = QLineEdit()
# render_name_layout.addWidget(self.job_name_input)
# output_settings_layout.addLayout(render_name_layout)
# File Format
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 = output_name.replace(' ', '_')
self.render_name_input.setText(output_name)
self.job_name_input.setText(output_name)
file_name = self.scene_file_input.text()
# setup bg worker
@@ -317,7 +330,7 @@ class NewRenderJobForm(QWidget):
def browse_output_path(self):
directory = QFileDialog.getExistingDirectory(self, "Select Output Directory")
if directory:
self.render_name_input.setText(directory)
self.job_name_input.setText(directory)
def args_help_button_clicked(self):
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(),
'args': {'raw': self.window.raw_args.text(),
'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(),
'end_frame': self.window.end_frame_input.value(),
'priority': self.window.priority_input.currentIndex() + 1,
'notes': self.window.notes_input.toPlainText(),
'enable_split_jobs': self.window.enable_splitjobs.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
for i in range(self.window.engine_options_layout.count()):

View File

@@ -2,7 +2,6 @@
import ast
import datetime
import io
import json
import logging
import os
import sys
@@ -10,6 +9,7 @@ import threading
import time
import PIL
import humanize
from PIL import Image
from PyQt6.QtCore import Qt, QByteArray, QBuffer, QIODevice, QThread
from PyQt6.QtGui import QPixmap, QImage, QFont, QIcon
@@ -18,10 +18,8 @@ from PyQt6.QtWidgets import QMainWindow, QWidget, QHBoxLayout, QListWidget, QTab
QFileDialog
from src.api.api_server import API_VERSION
from src.api.serverproxy_manager import ServerProxyManager
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.console_window import ConsoleWindow
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.statusbar import StatusBar
from src.ui.widgets.toolbar import ToolBar
from src.api.serverproxy_manager import ServerProxyManager
from src.utilities.misc_helper import launch_url, iso_datestring_to_formatted_datestring
from src.utilities.misc_helper import get_time_elapsed, resources_dir, is_localhost
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
logger = logging.getLogger()
@@ -310,11 +310,12 @@ class MainWindow(QMainWindow):
engine_name = f"{job.get('engine', '')}-{job.get('engine_version')}"
priority = str(job.get('priority', ''))
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),
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):
self.job_list_view.setItem(row, col, item)

View File

@@ -249,20 +249,6 @@ def num_to_alphanumeric(num):
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():
"""Cross-platform GPU information retrieval"""