From 29bb83d3ffb53b8de7a66b9032caafdee1e5e853 Mon Sep 17 00:00:00 2001 From: socalledtheraven Date: Mon, 4 May 2026 20:46:38 +0100 Subject: [PATCH 1/6] feat: add ability to configure automatic loading of new files over 10000 --- src/tagstudio/qt/global_settings.py | 1 + src/tagstudio/qt/mixed/settings_panel.py | 9 +++++++++ src/tagstudio/qt/ts_qt.py | 4 ++-- src/tagstudio/resources/translations/en.json | 1 + 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/tagstudio/qt/global_settings.py b/src/tagstudio/qt/global_settings.py index 052d815e7..fb96b64ac 100644 --- a/src/tagstudio/qt/global_settings.py +++ b/src/tagstudio/qt/global_settings.py @@ -63,6 +63,7 @@ class GlobalSettings(BaseModel): cached_thumb_quality: int = Field(default=DEFAULT_CACHED_IMAGE_QUALITY) cached_thumb_resolution: int = Field(default=DEFAULT_CACHED_IMAGE_RES) autoplay: bool = Field(default=True) + autoload_new_files: bool = Field(default=False) loop: bool = Field(default=True) show_filenames_in_grid: bool = Field(default=True) page_size: int = Field(default=100) diff --git a/src/tagstudio/qt/mixed/settings_panel.py b/src/tagstudio/qt/mixed/settings_panel.py index 609ed5b05..4f71380f0 100644 --- a/src/tagstudio/qt/mixed/settings_panel.py +++ b/src/tagstudio/qt/mixed/settings_panel.py @@ -176,6 +176,13 @@ def __build_global_settings(self): self.autoplay_checkbox.setChecked(self.driver.settings.autoplay) form_layout.addRow(Translations["media_player.autoplay"], self.autoplay_checkbox) + # Autoload new files + self.autoload_new_files_checkbox = QCheckBox() + self.autoload_new_files_checkbox.setChecked(self.driver.settings.autoload_new_files) + form_layout.addRow( + Translations["media_player.autoload_new_files"], self.autoload_new_files_checkbox + ) + # Show Filenames in Grid self.show_filenames_checkbox = QCheckBox() self.show_filenames_checkbox.setChecked(self.driver.settings.show_filenames_in_grid) @@ -295,6 +302,7 @@ def get_settings(self) -> dict[str, Any]: # pyright: ignore[reportExplicitAny] MIN_THUMB_CACHE_SIZE, ), "autoplay": self.autoplay_checkbox.isChecked(), + "auto_load_new_files": self.autoload_new_files_checkbox.isChecked(), "show_filenames_in_grid": self.show_filenames_checkbox.isChecked(), "page_size": int(self.page_size_line_edit.text()), "infinite_scroll": self.infinite_scroll.isChecked(), @@ -313,6 +321,7 @@ def update_settings(self, driver: "QtDriver"): driver.settings.language = settings["language"] driver.settings.open_last_loaded_on_startup = settings["open_last_loaded_on_startup"] driver.settings.autoplay = settings["autoplay"] + driver.settings.autoload_new_files = settings["auto_load_new_files"] driver.settings.generate_thumbs = settings["generate_thumbs"] driver.settings.thumb_cache_size = settings["thumb_cache_size"] driver.settings.show_filenames_in_grid = settings["show_filenames_in_grid"] diff --git a/src/tagstudio/qt/ts_qt.py b/src/tagstudio/qt/ts_qt.py index 5a7b2fd63..a11e93fda 100644 --- a/src/tagstudio/qt/ts_qt.py +++ b/src/tagstudio/qt/ts_qt.py @@ -1649,8 +1649,8 @@ def _init_library(self, path: Path, open_status: LibraryStatus): Ignore.get_patterns(self.lib.library_dir, include_global=True) self.__reset_navigation() - # TODO - make this call optional - if self.lib.entries_count < 10000: + # Autoloading will happen in both cases, so most users won't need to turn the setting on + if self.lib.entries_count < 10_000 or self.settings.autoload_new_files: self.add_new_files_callback() if self.settings.show_filepath == ShowFilepathOption.SHOW_FULL_PATHS: diff --git a/src/tagstudio/resources/translations/en.json b/src/tagstudio/resources/translations/en.json index cdd46dc11..afa903a79 100644 --- a/src/tagstudio/resources/translations/en.json +++ b/src/tagstudio/resources/translations/en.json @@ -206,6 +206,7 @@ "macros.running.dialog.new_entries": "Running Configured Macros on {count}/{total} New File Entries...", "macros.running.dialog.title": "Running Macros on New Entries", "media_player.autoplay": "Autoplay", + "media_player.autoload_new_files": "Automatically Load New Files", "media_player.loop": "Loop", "menu.delete_selected_files_ambiguous": "Move File(s) to {trash_term}", "menu.delete_selected_files_plural": "Move Files to {trash_term}", From 8c4f73efef01a6c2a840fbeeabcc32bdec8be183 Mon Sep 17 00:00:00 2001 From: socalledtheraven Date: Sat, 9 May 2026 00:59:54 +0100 Subject: [PATCH 2/6] Update src/tagstudio/qt/mixed/settings_panel.py Co-authored-by: Travis Abendshien <46939827+CyanVoxel@users.noreply.github.com> --- src/tagstudio/qt/mixed/settings_panel.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/tagstudio/qt/mixed/settings_panel.py b/src/tagstudio/qt/mixed/settings_panel.py index 4f71380f0..be646849f 100644 --- a/src/tagstudio/qt/mixed/settings_panel.py +++ b/src/tagstudio/qt/mixed/settings_panel.py @@ -176,11 +176,11 @@ def __build_global_settings(self): self.autoplay_checkbox.setChecked(self.driver.settings.autoplay) form_layout.addRow(Translations["media_player.autoplay"], self.autoplay_checkbox) - # Autoload new files - self.autoload_new_files_checkbox = QCheckBox() - self.autoload_new_files_checkbox.setChecked(self.driver.settings.autoload_new_files) + # Scan for new files when a library is opened + self.scan_files_on_open_checkbox = QCheckBox() + self.scan_files_on_open_checkbox.setChecked(self.driver.settings.scan_files_on_open) form_layout.addRow( - Translations["media_player.autoload_new_files"], self.autoload_new_files_checkbox + Translations["settings.scan_files_on_open"], self.scan_files_on_open_checkbox ) # Show Filenames in Grid From 603c1ff5e0de4a0b2738cd0ac4a8904744a3b728 Mon Sep 17 00:00:00 2001 From: socalledtheraven Date: Sat, 9 May 2026 01:00:04 +0100 Subject: [PATCH 3/6] Update src/tagstudio/qt/mixed/settings_panel.py Co-authored-by: Travis Abendshien <46939827+CyanVoxel@users.noreply.github.com> --- src/tagstudio/qt/mixed/settings_panel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tagstudio/qt/mixed/settings_panel.py b/src/tagstudio/qt/mixed/settings_panel.py index be646849f..bb8149877 100644 --- a/src/tagstudio/qt/mixed/settings_panel.py +++ b/src/tagstudio/qt/mixed/settings_panel.py @@ -302,7 +302,7 @@ def get_settings(self) -> dict[str, Any]: # pyright: ignore[reportExplicitAny] MIN_THUMB_CACHE_SIZE, ), "autoplay": self.autoplay_checkbox.isChecked(), - "auto_load_new_files": self.autoload_new_files_checkbox.isChecked(), + "scan_files_on_open": self.scan_files_on_open_checkbox.isChecked(), "show_filenames_in_grid": self.show_filenames_checkbox.isChecked(), "page_size": int(self.page_size_line_edit.text()), "infinite_scroll": self.infinite_scroll.isChecked(), From 6ccdfa3cf6cf91ffe04bc16bb4ea5ea03728f8d3 Mon Sep 17 00:00:00 2001 From: socalledtheraven Date: Sat, 9 May 2026 01:01:46 +0100 Subject: [PATCH 4/6] Renaming things Co-authored-by: Travis Abendshien <46939827+CyanVoxel@users.noreply.github.com> --- src/tagstudio/qt/global_settings.py | 2 +- src/tagstudio/qt/mixed/settings_panel.py | 2 +- src/tagstudio/qt/ts_qt.py | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/tagstudio/qt/global_settings.py b/src/tagstudio/qt/global_settings.py index fb96b64ac..42a7fe381 100644 --- a/src/tagstudio/qt/global_settings.py +++ b/src/tagstudio/qt/global_settings.py @@ -63,7 +63,7 @@ class GlobalSettings(BaseModel): cached_thumb_quality: int = Field(default=DEFAULT_CACHED_IMAGE_QUALITY) cached_thumb_resolution: int = Field(default=DEFAULT_CACHED_IMAGE_RES) autoplay: bool = Field(default=True) - autoload_new_files: bool = Field(default=False) + scan_files_on_open: bool = Field(default=True) loop: bool = Field(default=True) show_filenames_in_grid: bool = Field(default=True) page_size: int = Field(default=100) diff --git a/src/tagstudio/qt/mixed/settings_panel.py b/src/tagstudio/qt/mixed/settings_panel.py index bb8149877..19d337546 100644 --- a/src/tagstudio/qt/mixed/settings_panel.py +++ b/src/tagstudio/qt/mixed/settings_panel.py @@ -321,7 +321,7 @@ def update_settings(self, driver: "QtDriver"): driver.settings.language = settings["language"] driver.settings.open_last_loaded_on_startup = settings["open_last_loaded_on_startup"] driver.settings.autoplay = settings["autoplay"] - driver.settings.autoload_new_files = settings["auto_load_new_files"] + driver.settings.scan_files_on_open = settings["scan_files_on_open"] driver.settings.generate_thumbs = settings["generate_thumbs"] driver.settings.thumb_cache_size = settings["thumb_cache_size"] driver.settings.show_filenames_in_grid = settings["show_filenames_in_grid"] diff --git a/src/tagstudio/qt/ts_qt.py b/src/tagstudio/qt/ts_qt.py index a11e93fda..96f1a1f5d 100644 --- a/src/tagstudio/qt/ts_qt.py +++ b/src/tagstudio/qt/ts_qt.py @@ -1649,8 +1649,8 @@ def _init_library(self, path: Path, open_status: LibraryStatus): Ignore.get_patterns(self.lib.library_dir, include_global=True) self.__reset_navigation() - # Autoloading will happen in both cases, so most users won't need to turn the setting on - if self.lib.entries_count < 10_000 or self.settings.autoload_new_files: + if self.settings.scan_files_on_open: + self.add_new_files_callback() self.add_new_files_callback() if self.settings.show_filepath == ShowFilepathOption.SHOW_FULL_PATHS: From 25729f0e34880083bf36f79ccdcda97acffbc6e9 Mon Sep 17 00:00:00 2001 From: socalledtheraven Date: Sat, 9 May 2026 01:04:00 +0100 Subject: [PATCH 5/6] rename and reorder --- src/tagstudio/resources/translations/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tagstudio/resources/translations/en.json b/src/tagstudio/resources/translations/en.json index afa903a79..0681f8f9a 100644 --- a/src/tagstudio/resources/translations/en.json +++ b/src/tagstudio/resources/translations/en.json @@ -206,7 +206,6 @@ "macros.running.dialog.new_entries": "Running Configured Macros on {count}/{total} New File Entries...", "macros.running.dialog.title": "Running Macros on New Entries", "media_player.autoplay": "Autoplay", - "media_player.autoload_new_files": "Automatically Load New Files", "media_player.loop": "Loop", "menu.delete_selected_files_ambiguous": "Move File(s) to {trash_term}", "menu.delete_selected_files_plural": "Move Files to {trash_term}", @@ -274,6 +273,7 @@ "settings.open_library_on_start": "Open Library on Start", "settings.page_size": "Page Size", "settings.restart_required": "Please restart TagStudio for changes to take effect.", + "settings.scan_files_on_open": "Automatically Load New Files", "settings.show_filenames_in_grid": "Show Filenames in Grid", "settings.show_recent_libraries": "Show Recent Libraries", "settings.splash.label": "Splash Screen", From 029f4573b57b60a4e5f6c1be2599a84ee595a7a9 Mon Sep 17 00:00:00 2001 From: Travis Abendshien <46939827+CyanVoxel@users.noreply.github.com> Date: Sun, 10 May 2026 10:18:21 -0700 Subject: [PATCH 6/6] fix: remove duplicated add_new_files_callback() call --- src/tagstudio/qt/ts_qt.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/tagstudio/qt/ts_qt.py b/src/tagstudio/qt/ts_qt.py index 96f1a1f5d..bf1719cea 100644 --- a/src/tagstudio/qt/ts_qt.py +++ b/src/tagstudio/qt/ts_qt.py @@ -1651,7 +1651,6 @@ def _init_library(self, path: Path, open_status: LibraryStatus): if self.settings.scan_files_on_open: self.add_new_files_callback() - self.add_new_files_callback() if self.settings.show_filepath == ShowFilepathOption.SHOW_FULL_PATHS: library_dir_display = self.lib.library_dir