Configurable library directory in Settings > Paths
Browse button to pick a custom library save directory. Applied on startup via set_library_dir(). Restart required.
This commit is contained in:
parent
c9fe8fa8a0
commit
f8582e83fa
@ -39,8 +39,19 @@ def thumbnails_dir() -> Path:
|
|||||||
return 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:
|
def saved_dir() -> Path:
|
||||||
"""Return the saved images directory."""
|
"""Return the saved images directory."""
|
||||||
|
if _library_dir_override:
|
||||||
|
path = _library_dir_override
|
||||||
|
else:
|
||||||
path = data_dir() / "saved"
|
path = data_dir() / "saved"
|
||||||
path.mkdir(parents=True, exist_ok=True)
|
path.mkdir(parents=True, exist_ok=True)
|
||||||
return path
|
return path
|
||||||
|
|||||||
@ -205,6 +205,11 @@ class BooruApp(QMainWindow):
|
|||||||
self.resize(1200, 800)
|
self.resize(1200, 800)
|
||||||
|
|
||||||
self._db = Database()
|
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._current_site: Site | None = None
|
||||||
self._posts: list[Post] = []
|
self._posts: list[Post] = []
|
||||||
self._current_page = 1
|
self._current_page = 1
|
||||||
|
|||||||
@ -307,6 +307,18 @@ class SettingsDialog(QDialog):
|
|||||||
|
|
||||||
layout.addLayout(form)
|
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 = QPushButton("Open Data Folder")
|
||||||
open_btn.clicked.connect(self._open_data_folder)
|
open_btn.clicked.connect(self._open_data_folder)
|
||||||
layout.addWidget(open_btn)
|
layout.addWidget(open_btn)
|
||||||
@ -554,6 +566,12 @@ class SettingsDialog(QDialog):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
QMessageBox.warning(self, "Error", str(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:
|
def _open_data_folder(self) -> None:
|
||||||
from PySide6.QtGui import QDesktopServices
|
from PySide6.QtGui import QDesktopServices
|
||||||
from PySide6.QtCore import QUrl
|
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("default_score", str(self._default_score.value()))
|
||||||
self._db.set_setting("preload_thumbnails", "1" if self._preload.isChecked() else "0")
|
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("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("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("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")
|
self._db.set_setting("clear_cache_on_exit", "1" if self._clear_on_exit.isChecked() else "0")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user