From f8582e83fa89e5374df6090ce28b54925654bcfa Mon Sep 17 00:00:00 2001 From: pax Date: Sun, 5 Apr 2026 02:01:44 -0500 Subject: [PATCH] Configurable library directory in Settings > Paths Browse button to pick a custom library save directory. Applied on startup via set_library_dir(). Restart required. --- booru_viewer/core/config.py | 13 ++++++++++++- booru_viewer/gui/app.py | 5 +++++ booru_viewer/gui/settings.py | 19 +++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/booru_viewer/core/config.py b/booru_viewer/core/config.py index c9852ca..1c10856 100644 --- a/booru_viewer/core/config.py +++ b/booru_viewer/core/config.py @@ -39,9 +39,20 @@ def thumbnails_dir() -> Path: return path +_library_dir_override: Path | None = None + + +def set_library_dir(path: Path | None) -> None: + global _library_dir_override + _library_dir_override = path + + def saved_dir() -> Path: """Return the saved images directory.""" - path = data_dir() / "saved" + if _library_dir_override: + path = _library_dir_override + else: + path = data_dir() / "saved" path.mkdir(parents=True, exist_ok=True) return path diff --git a/booru_viewer/gui/app.py b/booru_viewer/gui/app.py index f89dcc1..66f75cd 100644 --- a/booru_viewer/gui/app.py +++ b/booru_viewer/gui/app.py @@ -205,6 +205,11 @@ class BooruApp(QMainWindow): self.resize(1200, 800) self._db = Database() + # Apply custom library directory if set + lib_dir = self._db.get_setting("library_dir") + if lib_dir: + from ..core.config import set_library_dir + set_library_dir(Path(lib_dir)) self._current_site: Site | None = None self._posts: list[Post] = [] self._current_page = 1 diff --git a/booru_viewer/gui/settings.py b/booru_viewer/gui/settings.py index aad208b..122260b 100644 --- a/booru_viewer/gui/settings.py +++ b/booru_viewer/gui/settings.py @@ -307,6 +307,18 @@ class SettingsDialog(QDialog): layout.addLayout(form) + # Library directory (editable) + lib_row = QHBoxLayout() + from ..core.config import saved_dir + current_lib = self._db.get_setting("library_dir") or str(saved_dir()) + self._library_dir = QLineEdit(current_lib) + lib_row.addWidget(self._library_dir, stretch=1) + browse_lib_btn = QPushButton("Browse...") + browse_lib_btn.clicked.connect(self._browse_library_dir) + lib_row.addWidget(browse_lib_btn) + layout.addWidget(QLabel("Library directory (restart required):")) + layout.addLayout(lib_row) + open_btn = QPushButton("Open Data Folder") open_btn.clicked.connect(self._open_data_folder) layout.addWidget(open_btn) @@ -554,6 +566,12 @@ class SettingsDialog(QDialog): except Exception as e: QMessageBox.warning(self, "Error", str(e)) + def _browse_library_dir(self) -> None: + from PySide6.QtWidgets import QFileDialog + path = QFileDialog.getExistingDirectory(self, "Select Library Directory", self._library_dir.text()) + if path: + self._library_dir.setText(path) + def _open_data_folder(self) -> None: from PySide6.QtGui import QDesktopServices from PySide6.QtCore import QUrl @@ -628,6 +646,7 @@ class SettingsDialog(QDialog): self._db.set_setting("default_score", str(self._default_score.value())) self._db.set_setting("preload_thumbnails", "1" if self._preload.isChecked() else "0") self._db.set_setting("prefetch_adjacent", "1" if self._prefetch.isChecked() else "0") + self._db.set_setting("library_dir", self._library_dir.text().strip()) self._db.set_setting("max_cache_mb", str(self._max_cache.value())) self._db.set_setting("auto_evict", "1" if self._auto_evict.isChecked() else "0") self._db.set_setting("clear_cache_on_exit", "1" if self._clear_on_exit.isChecked() else "0")