fix: sync export folder when selecting a file in a side-by-side list; tighten guardrail; rename per-tab attr
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -3406,7 +3406,7 @@ class PlaylistWidget(QListWidget):
|
|||||||
self._missing: set[str] = set() # paths not present on disk
|
self._missing: set[str] = set() # paths not present on disk
|
||||||
self._pinned: bool = False # shown in the side-by-side view
|
self._pinned: bool = False # shown in the side-by-side view
|
||||||
self._tab_folder: bool = False # append this tab's name to export folder
|
self._tab_folder: bool = False # append this tab's name to export folder
|
||||||
self._export_folder: str = "" # per-tab export destination
|
self._dest_folder: str = "" # per-tab export destination
|
||||||
self._label: str = "" # tab name (source of truth across views)
|
self._label: str = "" # tab name (source of truth across views)
|
||||||
self._visible: list[str | None] = [] # rows shown; None = separator row
|
self._visible: list[str | None] = [] # rows shown; None = separator row
|
||||||
self._selected_path: str | None = None
|
self._selected_path: str | None = None
|
||||||
@@ -4947,7 +4947,7 @@ class MainWindow(QMainWindow):
|
|||||||
return
|
return
|
||||||
pw = self._playlist
|
pw = self._playlist
|
||||||
if pw is not None:
|
if pw is not None:
|
||||||
pw._export_folder = text
|
pw._dest_folder = text
|
||||||
self._save_playlist_tabs()
|
self._save_playlist_tabs()
|
||||||
|
|
||||||
def _sync_folder_field_to_tab(self) -> None:
|
def _sync_folder_field_to_tab(self) -> None:
|
||||||
@@ -4955,7 +4955,7 @@ class MainWindow(QMainWindow):
|
|||||||
pw = self._playlist
|
pw = self._playlist
|
||||||
if pw is None:
|
if pw is None:
|
||||||
return
|
return
|
||||||
folder = getattr(pw, "_export_folder", "") or self._settings.value(
|
folder = getattr(pw, "_dest_folder", "") or self._settings.value(
|
||||||
"export_folder", str(Path.home()))
|
"export_folder", str(Path.home()))
|
||||||
if folder != self._txt_folder.text():
|
if folder != self._txt_folder.text():
|
||||||
self._syncing_folder = True
|
self._syncing_folder = True
|
||||||
@@ -4994,7 +4994,7 @@ class MainWindow(QMainWindow):
|
|||||||
# Inherit the current folder field (overwritten on load). _txt_folder may
|
# Inherit the current folder field (overwritten on load). _txt_folder may
|
||||||
# not exist yet during the bootstrap tab built before widgets are wired.
|
# not exist yet during the bootstrap tab built before widgets are wired.
|
||||||
_fld = getattr(self, "_txt_folder", None)
|
_fld = getattr(self, "_txt_folder", None)
|
||||||
pw._export_folder = _fld.text() if _fld is not None else ""
|
pw._dest_folder = _fld.text() if _fld is not None else ""
|
||||||
pw._label = label or f"List {len(self._pws) + 1}"
|
pw._label = label or f"List {len(self._pws) + 1}"
|
||||||
self._pws.append(pw)
|
self._pws.append(pw)
|
||||||
if separators:
|
if separators:
|
||||||
@@ -5268,7 +5268,7 @@ class MainWindow(QMainWindow):
|
|||||||
"separators": sorted(pw._separators_before),
|
"separators": sorted(pw._separators_before),
|
||||||
"pinned": pw._pinned,
|
"pinned": pw._pinned,
|
||||||
"tab_folder": pw._tab_folder,
|
"tab_folder": pw._tab_folder,
|
||||||
"export_folder": pw._export_folder,
|
"export_folder": pw._dest_folder,
|
||||||
} for pw in self._pws]
|
} for pw in self._pws]
|
||||||
cur = self._pws.index(self._active_pw) if self._active_pw in self._pws else 0
|
cur = self._pws.index(self._active_pw) if self._active_pw in self._pws else 0
|
||||||
data = {"tabs": tabs, "current": cur}
|
data = {"tabs": tabs, "current": cur}
|
||||||
@@ -5312,7 +5312,7 @@ class MainWindow(QMainWindow):
|
|||||||
separators=t.get("separators", []), select=False)
|
separators=t.get("separators", []), select=False)
|
||||||
pw._pinned = bool(t.get("pinned"))
|
pw._pinned = bool(t.get("pinned"))
|
||||||
pw._tab_folder = bool(t.get("tab_folder"))
|
pw._tab_folder = bool(t.get("tab_folder"))
|
||||||
pw._export_folder = t.get("export_folder") or self._settings.value(
|
pw._dest_folder = t.get("export_folder") or self._settings.value(
|
||||||
"export_folder", str(Path.home()))
|
"export_folder", str(Path.home()))
|
||||||
cur = min(max(0, data.get("current", 0)), len(self._pws) - 1)
|
cur = min(max(0, data.get("current", 0)), len(self._pws) - 1)
|
||||||
finally:
|
finally:
|
||||||
@@ -5551,7 +5551,10 @@ class MainWindow(QMainWindow):
|
|||||||
return # ignore auto-selection while rebuilding tabs
|
return # ignore auto-selection while rebuilding tabs
|
||||||
# The list that emitted this becomes the active pane (side-by-side).
|
# The list that emitted this becomes the active pane (side-by-side).
|
||||||
sender = self.sender()
|
sender = self.sender()
|
||||||
if isinstance(sender, PlaylistWidget) and sender in self._pws:
|
if isinstance(sender, PlaylistWidget) and sender in self._pws and sender is not self._active_pw:
|
||||||
|
self._active_pw = sender
|
||||||
|
self._sync_folder_field_to_tab()
|
||||||
|
elif isinstance(sender, PlaylistWidget) and sender in self._pws:
|
||||||
self._active_pw = sender
|
self._active_pw = sender
|
||||||
if not os.path.isfile(path):
|
if not os.path.isfile(path):
|
||||||
self._show_status(f"File not found: {os.path.basename(path)}", 5000)
|
self._show_status(f"File not found: {os.path.basename(path)}", 5000)
|
||||||
@@ -7385,7 +7388,8 @@ class MainWindow(QMainWindow):
|
|||||||
# appear anywhere in the destination — likely a mismatched tab/folder.
|
# appear anywhere in the destination — likely a mismatched tab/folder.
|
||||||
vid_parent = os.path.basename(os.path.dirname(self._file_path))
|
vid_parent = os.path.basename(os.path.dirname(self._file_path))
|
||||||
vid_tok = _norm_token(vid_parent)
|
vid_tok = _norm_token(vid_parent)
|
||||||
if len(vid_tok) >= 3 and vid_tok not in _norm_token(folder):
|
folder_tokens = [_norm_token(p) for p in folder.split(os.sep) if p]
|
||||||
|
if len(vid_tok) >= 3 and not any(vid_tok in ft for ft in folder_tokens):
|
||||||
resp = QMessageBox.question(
|
resp = QMessageBox.question(
|
||||||
self, "Export folder mismatch",
|
self, "Export folder mismatch",
|
||||||
f"The loaded video is under:\n {vid_parent}\n\n"
|
f"The loaded video is under:\n {vid_parent}\n\n"
|
||||||
|
|||||||
Reference in New Issue
Block a user