mirror of
https://github.com/denizsafak/abogen.git
synced 2026-07-18 13:40:27 +02:00
queue manager UI - a simple listwidget - #30
This commit is contained in:
+27
-4
@@ -4,6 +4,7 @@ import tempfile
|
|||||||
import platform
|
import platform
|
||||||
import base64
|
import base64
|
||||||
import re
|
import re
|
||||||
|
from abogen.queue_manager_gui import QueueManager
|
||||||
from abogen.queued_item import QueuedItem
|
from abogen.queued_item import QueuedItem
|
||||||
import hf_tracker
|
import hf_tracker
|
||||||
import hashlib # Added for cache path generation
|
import hashlib # Added for cache path generation
|
||||||
@@ -823,11 +824,13 @@ class abogen(QWidget):
|
|||||||
# Manage queue button
|
# Manage queue button
|
||||||
self.btn_manage_queue = QPushButton("Manage Queue", self)
|
self.btn_manage_queue = QPushButton("Manage Queue", self)
|
||||||
self.btn_manage_queue.setFixedHeight(40)
|
self.btn_manage_queue.setFixedHeight(40)
|
||||||
|
self.btn_manage_queue.setEnabled(False)
|
||||||
self.btn_manage_queue.clicked.connect(self.manage_queue)
|
self.btn_manage_queue.clicked.connect(self.manage_queue)
|
||||||
queue_row.addWidget(self.btn_manage_queue)
|
queue_row.addWidget(self.btn_manage_queue)
|
||||||
# Start queue button
|
# Start queue button
|
||||||
self.btn_start_queue = QPushButton("Start Queue", self)
|
self.btn_start_queue = QPushButton("Start Queue", self)
|
||||||
self.btn_start_queue.setFixedHeight(40)
|
self.btn_start_queue.setFixedHeight(40)
|
||||||
|
self.btn_start_queue.setEnabled(False)
|
||||||
self.btn_start_queue.clicked.connect(self.start_queue)
|
self.btn_start_queue.clicked.connect(self.start_queue)
|
||||||
queue_row.addWidget(self.btn_start_queue)
|
queue_row.addWidget(self.btn_start_queue)
|
||||||
controls_layout.addLayout(queue_row)
|
controls_layout.addLayout(queue_row)
|
||||||
@@ -1263,6 +1266,20 @@ class abogen(QWidget):
|
|||||||
self.progress_bar.repaint()
|
self.progress_bar.repaint()
|
||||||
QApplication.processEvents()
|
QApplication.processEvents()
|
||||||
|
|
||||||
|
def enable_disable_queue_buttons(self):
|
||||||
|
enabled = bool(self.queued_items)
|
||||||
|
self.btn_start_queue.setEnabled(enabled)
|
||||||
|
self.btn_manage_queue.setEnabled(enabled)
|
||||||
|
|
||||||
|
def enqueue(self, item : QueuedItem):
|
||||||
|
self.queued_items.append(item)
|
||||||
|
self.update_log((f"Enqueued: {item.file_name}", True))
|
||||||
|
# enable start queue button, manage queue button
|
||||||
|
self.enable_disable_queue_buttons()
|
||||||
|
|
||||||
|
def get_queue(self):
|
||||||
|
return self.queued_items
|
||||||
|
|
||||||
def add_to_queue(self):
|
def add_to_queue(self):
|
||||||
if not self.selected_file:
|
if not self.selected_file:
|
||||||
self.input_box.set_error("Please add a file.")
|
self.input_box.set_error("Please add a file.")
|
||||||
@@ -1280,16 +1297,22 @@ class abogen(QWidget):
|
|||||||
output_folder=self.selected_output_folder,
|
output_folder=self.selected_output_folder,
|
||||||
subtitle_mode=actual_subtitle_mode, # TODO copy from start_conversion
|
subtitle_mode=actual_subtitle_mode, # TODO copy from start_conversion
|
||||||
output_format=self.selected_format,
|
output_format=self.selected_format,
|
||||||
total_char_count=self.char_count
|
total_char_count=self.char_count,
|
||||||
|
use_gpu=self.gpu_ok
|
||||||
)
|
)
|
||||||
self.queued_items.append(item)
|
self.enqueue(item)
|
||||||
|
|
||||||
def manage_queue(self):
|
def manage_queue(self):
|
||||||
if not self.queued_items:
|
if not self.queued_items:
|
||||||
self.input_box.set_error("Queue is empty.")
|
self.input_box.set_error("Queue is empty.")
|
||||||
return
|
return
|
||||||
# TODO show a dialog to manage the queue
|
# show a dialog to manage the queue
|
||||||
pass
|
dialog = QueueManager(self, self.queued_items)
|
||||||
|
if dialog.exec_() == QDialog.Accepted:
|
||||||
|
# TODO take the new queue
|
||||||
|
self.queued_items = dialog.get_queue()
|
||||||
|
# re-enable/disable buttons based on queue state
|
||||||
|
self.enable_disable_queue_buttons()
|
||||||
|
|
||||||
def start_queue(self):
|
def start_queue(self):
|
||||||
if not self.queued_items:
|
if not self.queued_items:
|
||||||
|
|||||||
@@ -0,0 +1,69 @@
|
|||||||
|
# a simple window with a list of items in the queue, no checkboxes
|
||||||
|
# button to remove an item from the queue
|
||||||
|
# button to clear the queue
|
||||||
|
|
||||||
|
from PyQt5.QtWidgets import (
|
||||||
|
QWidget,
|
||||||
|
QDialog,
|
||||||
|
QVBoxLayout,
|
||||||
|
QDialogButtonBox,
|
||||||
|
QLabel,
|
||||||
|
QCheckBox,
|
||||||
|
QSlider,
|
||||||
|
QPushButton,
|
||||||
|
QHBoxLayout,
|
||||||
|
QMessageBox,
|
||||||
|
QListWidget,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class QueueManager(QDialog):
|
||||||
|
def __init__(self, parent, queue: list, title="Queue Manager", size=(400, 300)):
|
||||||
|
super().__init__()
|
||||||
|
self.queue = queue
|
||||||
|
self.parent = parent
|
||||||
|
layout = QVBoxLayout()
|
||||||
|
# list of queued items
|
||||||
|
self.listwidget = QListWidget()
|
||||||
|
self.listwidget.setSelectionMode(QListWidget.SingleSelection)
|
||||||
|
self.listwidget.setAlternatingRowColors(True)
|
||||||
|
# add queue items to the list
|
||||||
|
self.process_queue()
|
||||||
|
|
||||||
|
layout.addWidget(self.listwidget)
|
||||||
|
# add remove item button
|
||||||
|
remove_button = QPushButton("Remove")
|
||||||
|
remove_button.clicked.connect(self.remove_item)
|
||||||
|
layout.addWidget(remove_button)
|
||||||
|
# add clear queue button
|
||||||
|
clear_button = QPushButton("Clear Queue")
|
||||||
|
clear_button.clicked.connect(self.clear_queue)
|
||||||
|
layout.addWidget(clear_button)
|
||||||
|
|
||||||
|
|
||||||
|
buttons = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel, self)
|
||||||
|
buttons.accepted.connect(self.accept)
|
||||||
|
buttons.rejected.connect(self.reject)
|
||||||
|
|
||||||
|
layout.addWidget(buttons)
|
||||||
|
|
||||||
|
self.setLayout(layout)
|
||||||
|
|
||||||
|
self.setWindowTitle(title)
|
||||||
|
self.setMinimumSize(*size)
|
||||||
|
|
||||||
|
def process_queue(self):
|
||||||
|
"""Process the queue items."""
|
||||||
|
if not self.queue:
|
||||||
|
return
|
||||||
|
for item in self.queue:
|
||||||
|
self.listwidget.addItem(item.file_name)
|
||||||
|
|
||||||
|
# self.listwidget.clicked.connect(self.clicked)
|
||||||
|
|
||||||
|
def remove_item(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def clear_queue(self):
|
||||||
|
self.queue.clear()
|
||||||
|
self.listwidget.clear()
|
||||||
Reference in New Issue
Block a user