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.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()):

View File

@@ -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)

View File

@@ -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"""