feat: resize short-side field with QSettings persistence
This commit is contained in:
@@ -12,7 +12,7 @@ from PyQt6.QtWidgets import (
|
|||||||
QLabel, QPushButton, QLineEdit, QFileDialog, QFrame, QStatusBar,
|
QLabel, QPushButton, QLineEdit, QFileDialog, QFrame, QStatusBar,
|
||||||
QListWidget, QListWidgetItem, QAbstractItemView, QSplitter, QToolTip,
|
QListWidget, QListWidgetItem, QAbstractItemView, QSplitter, QToolTip,
|
||||||
)
|
)
|
||||||
from PyQt6.QtCore import Qt, QThread, QTimer, pyqtSignal
|
from PyQt6.QtCore import Qt, QThread, QTimer, pyqtSignal, QSettings
|
||||||
from PyQt6.QtGui import QPainter, QColor, QPen, QDragEnterEvent, QDropEvent, QCursor, QFont
|
from PyQt6.QtGui import QPainter, QColor, QPen, QDragEnterEvent, QDropEvent, QCursor, QFont
|
||||||
import mpv
|
import mpv
|
||||||
|
|
||||||
@@ -151,14 +151,17 @@ class ExportWorker(QThread):
|
|||||||
finished = pyqtSignal(str) # output path
|
finished = pyqtSignal(str) # output path
|
||||||
error = pyqtSignal(str) # error message
|
error = pyqtSignal(str) # error message
|
||||||
|
|
||||||
def __init__(self, input_path: str, start: float, output_path: str):
|
def __init__(self, input_path: str, start: float, output_path: str,
|
||||||
|
short_side: int | None = None):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self._input = input_path
|
self._input = input_path
|
||||||
self._start = start
|
self._start = start
|
||||||
self._output = output_path
|
self._output = output_path
|
||||||
|
self._short_side = short_side
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
cmd = build_ffmpeg_command(self._input, self._start, self._output)
|
cmd = build_ffmpeg_command(self._input, self._start, self._output,
|
||||||
|
self._short_side)
|
||||||
try:
|
try:
|
||||||
result = subprocess.run(cmd, capture_output=True, text=True, timeout=120)
|
result = subprocess.run(cmd, capture_output=True, text=True, timeout=120)
|
||||||
if result.returncode == 0:
|
if result.returncode == 0:
|
||||||
@@ -455,6 +458,15 @@ class MainWindow(QMainWindow):
|
|||||||
self._btn_folder = QPushButton("Browse")
|
self._btn_folder = QPushButton("Browse")
|
||||||
self._btn_folder.clicked.connect(self._pick_folder)
|
self._btn_folder.clicked.connect(self._pick_folder)
|
||||||
|
|
||||||
|
self._settings = QSettings("8cut", "8cut")
|
||||||
|
self._txt_resize = QLineEdit()
|
||||||
|
self._txt_resize.setPlaceholderText("px (opt.)")
|
||||||
|
self._txt_resize.setMaximumWidth(70)
|
||||||
|
self._txt_resize.setText(self._settings.value("resize_short_side", ""))
|
||||||
|
self._txt_resize.textChanged.connect(
|
||||||
|
lambda v: self._settings.setValue("resize_short_side", v)
|
||||||
|
)
|
||||||
|
|
||||||
self._lbl_next = QLabel()
|
self._lbl_next = QLabel()
|
||||||
self._update_next_label()
|
self._update_next_label()
|
||||||
|
|
||||||
@@ -479,6 +491,8 @@ class MainWindow(QMainWindow):
|
|||||||
export_row.addWidget(QLabel("Folder:"))
|
export_row.addWidget(QLabel("Folder:"))
|
||||||
export_row.addWidget(self._txt_folder, stretch=1)
|
export_row.addWidget(self._txt_folder, stretch=1)
|
||||||
export_row.addWidget(self._btn_folder)
|
export_row.addWidget(self._btn_folder)
|
||||||
|
export_row.addWidget(QLabel("Short side:"))
|
||||||
|
export_row.addWidget(self._txt_resize)
|
||||||
export_row.addWidget(self._lbl_next)
|
export_row.addWidget(self._lbl_next)
|
||||||
export_row.addWidget(self._btn_export)
|
export_row.addWidget(self._btn_export)
|
||||||
|
|
||||||
@@ -588,10 +602,20 @@ class MainWindow(QMainWindow):
|
|||||||
self._txt_name.text() or "clip",
|
self._txt_name.text() or "clip",
|
||||||
self._export_counter,
|
self._export_counter,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
raw = self._txt_resize.text().strip()
|
||||||
|
try:
|
||||||
|
short_side = int(raw) if raw else None
|
||||||
|
if short_side is not None and short_side <= 0:
|
||||||
|
short_side = None
|
||||||
|
except ValueError:
|
||||||
|
short_side = None
|
||||||
|
|
||||||
self._btn_export.setEnabled(False)
|
self._btn_export.setEnabled(False)
|
||||||
self.statusBar().showMessage(f"Exporting {os.path.basename(output)}…")
|
self.statusBar().showMessage(f"Exporting {os.path.basename(output)}…")
|
||||||
|
|
||||||
self._export_worker = ExportWorker(self._file_path, self._cursor, output)
|
self._export_worker = ExportWorker(self._file_path, self._cursor, output,
|
||||||
|
short_side)
|
||||||
self._export_worker.finished.connect(self._on_export_done)
|
self._export_worker.finished.connect(self._on_export_done)
|
||||||
self._export_worker.error.connect(self._on_export_error)
|
self._export_worker.error.connect(self._on_export_error)
|
||||||
self._export_worker.start()
|
self._export_worker.start()
|
||||||
|
|||||||
Reference in New Issue
Block a user