From 607341aa7e70d09d3eea9d4e77a1d706223fb1cd Mon Sep 17 00:00:00 2001 From: Bob Bobs Date: Tue, 19 Aug 2025 13:42:19 -0700 Subject: [PATCH 1/3] fix: add periodic yield to save_new_files --- src/tagstudio/core/utils/refresh_dir.py | 13 +++++++------ src/tagstudio/qt/ts_qt.py | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/tagstudio/core/utils/refresh_dir.py b/src/tagstudio/core/utils/refresh_dir.py index ddbff94e1..71f5748ff 100644 --- a/src/tagstudio/core/utils/refresh_dir.py +++ b/src/tagstudio/core/utils/refresh_dir.py @@ -36,9 +36,12 @@ class RefreshDirTracker: def files_count(self) -> int: return len(self.files_not_in_library) - def save_new_files(self): + def save_new_files(self) -> Iterator[int]: """Save the list of files that are not in the library.""" - if self.files_not_in_library: + index = 0 + while index < len(self.files_not_in_library): + yield index + end = min(len(self.files_not_in_library), index + 200) entries = [ Entry( path=entry_path, @@ -46,14 +49,12 @@ def save_new_files(self): fields=[], date_added=dt.now(), ) - for entry_path in self.files_not_in_library + for entry_path in self.files_not_in_library[index:end] ] self.library.add_entries(entries) - + index = end self.files_not_in_library = [] - yield - def refresh_dir(self, lib_path: Path) -> Iterator[int]: """Scan a directory for files, and add those relative filenames to internal variables.""" if self.library.library_dir is None: diff --git a/src/tagstudio/qt/ts_qt.py b/src/tagstudio/qt/ts_qt.py index e91f9c36d..f1d62ff7a 100644 --- a/src/tagstudio/qt/ts_qt.py +++ b/src/tagstudio/qt/ts_qt.py @@ -1051,7 +1051,7 @@ def add_new_files_runnable(self, tracker: RefreshDirTracker): pw.show() iterator.value.connect( - lambda: ( + lambda _count: ( pw.update_label( Translations.format( "entries.running.dialog.new_entries", total=f"{files_count:n}" From 52bfc536d15ea3249eb017667d3103dd2ae1e783 Mon Sep 17 00:00:00 2001 From: Bob Bobs Date: Thu, 11 Sep 2025 12:56:35 -0700 Subject: [PATCH 2/3] move refresh_dir.py --- src/tagstudio/core/{utils/refresh_dir.py => library/refresh.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/tagstudio/core/{utils/refresh_dir.py => library/refresh.py} (100%) diff --git a/src/tagstudio/core/utils/refresh_dir.py b/src/tagstudio/core/library/refresh.py similarity index 100% rename from src/tagstudio/core/utils/refresh_dir.py rename to src/tagstudio/core/library/refresh.py From 9d731ff72bd14562e57bfe92fd4a13608ceb3393 Mon Sep 17 00:00:00 2001 From: Bob Bobs Date: Thu, 11 Sep 2025 13:15:33 -0700 Subject: [PATCH 3/3] use variable for batch size --- src/tagstudio/core/library/refresh.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/tagstudio/core/library/refresh.py b/src/tagstudio/core/library/refresh.py index cf8ee9863..1b2115cdd 100644 --- a/src/tagstudio/core/library/refresh.py +++ b/src/tagstudio/core/library/refresh.py @@ -17,6 +17,7 @@ from tagstudio.core.library.alchemy.models import Entry from tagstudio.core.library.ignore import PATH_GLOB_FLAGS, Ignore, ignore_to_glob from tagstudio.core.utils.silent_subprocess import silent_run # pyright: ignore +from tagstudio.core.utils.types import unwrap logger = structlog.get_logger(__name__) @@ -32,14 +33,16 @@ def files_count(self) -> int: def save_new_files(self) -> Iterator[int]: """Save the list of files that are not in the library.""" + batch_size = 200 + index = 0 while index < len(self.files_not_in_library): yield index - end = min(len(self.files_not_in_library), index + 200) + end = min(len(self.files_not_in_library), index + batch_size) entries = [ Entry( path=entry_path, - folder=self.library.folder, # pyright: ignore[reportArgumentType] + folder=unwrap(self.library.folder), fields=[], date_added=dt.now(), )