Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ def merge_dupe_entries(self):
)

for i, entries in enumerate(self.groups):
yield i
remove_ids = entries[1:]
logger.info("Removing entries group", ids=remove_ids)
self.library.remove_entries([e.id for e in remove_ids])
yield i - 1 # The -1 waits for the next step to finish
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,12 @@ def refresh_ignored_entries(self) -> Iterator[int]:
library_dir: Path = unwrap(self.lib.library_dir)

for i, entry in enumerate(self.lib.all_entries()):
yield i
if not Ignore.compiled_patterns:
# If the compiled_patterns has malfunctioned, don't consider that a false positive
yield i
elif Ignore.compiled_patterns.match(library_dir / entry.path):
self.ignored_entries.append(entry)
yield i

def remove_ignored_entries(self) -> None:
self.lib.remove_entries(list(map(lambda ignored: ignored.id, self.ignored_entries)))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,10 @@ def refresh_unlinked_files(self) -> Iterator[int]:

self.unlinked_entries = []
for i, entry in enumerate(self.lib.all_entries()):
yield i
full_path = unwrap(self.lib.library_dir) / entry.path
if not full_path.exists() or not full_path.is_file():
self.unlinked_entries.append(entry)
yield i

def match_unlinked_file_entry(self, match_entry: Entry) -> list[Path]:
"""Try and match unlinked file entries with matching results in the library directory.
Expand Down Expand Up @@ -68,6 +68,7 @@ def fix_unlinked_entries(self) -> Iterator[int]:
self.files_fixed_count = 0
matched_entries: list[Entry] = []
for i, entry in enumerate(self.unlinked_entries):
yield i
item_matches = self.match_unlinked_file_entry(entry)
if len(item_matches) == 1:
logger.info(
Expand All @@ -84,7 +85,6 @@ def fix_unlinked_entries(self) -> Iterator[int]:
continue
self.files_fixed_count += 1
matched_entries.append(entry)
yield i

for entry in matched_entries:
self.unlinked_entries.remove(entry)
Expand Down
6 changes: 3 additions & 3 deletions src/tagstudio/qt/mixed/drop_import_modal.py
Original file line number Diff line number Diff line change
Expand Up @@ -168,9 +168,9 @@ def begin_transfer(self, choice: DuplicateChoice | None = None):
def displayed_text(x):
return Translations.format(
"drop_import.progress.label.singular"
if x[0] + 1 == 1
if x[0] == 1
else "drop_import.progress.label.plural",
count=x[0] + 1,
count=x[0],
suffix=f" {x[1]} {self.choice.value}" if self.choice else "",
)

Expand All @@ -194,6 +194,7 @@ def copy_files(self):
file_count = 0
duplicated_files_progress = 0
for file in self.files:
yield [file_count, duplicated_files_progress]
if file.is_dir():
continue

Expand All @@ -214,7 +215,6 @@ def copy_files(self):
shutil.copyfile(file, unwrap(self.driver.lib.library_dir) / dest_file)

file_count += 1
yield [file_count, duplicated_files_progress]

def _get_relative_path(self, path: Path) -> Path:
for dir in self.dirs_in_root:
Expand Down
4 changes: 2 additions & 2 deletions src/tagstudio/qt/mixed/mirror_entries_modal.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ def refresh_list(self):
def mirror_entries(self):
def displayed_text(x):
return Translations.format(
"entries.mirror.label", idx=x + 1, count=self.tracker.groups_count
"entries.mirror.label", idx=x, total=self.tracker.groups_count
)

pw = ProgressWidget(
Expand All @@ -95,9 +95,9 @@ def mirror_entries_runnable(self):
mirrored: list = []
lib = self.driver.lib
for i, entries in enumerate(self.tracker.groups):
yield i
lib.mirror_entry_fields(*entries)
sleep(0.005)
yield i

for d in mirrored:
self.tracker.groups.remove(d)
9 changes: 6 additions & 3 deletions src/tagstudio/qt/mixed/progress_bar.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,17 @@ def update_progress(self, value: int):

def _update_progress_unknown_iterable(self, value):
if hasattr(value, "__getitem__"):
self.update_progress(value[0] + 1)
self.update_progress(value[0])
else:
self.update_progress(value + 1)
self.update_progress(value)

def from_iterable_function(
self, function: Callable, update_label_callback: Callable | None, *done_callbacks
):
"""Display the progress widget from a threaded iterable function."""
"""Display the progress widget from a threaded iterable function.

Method expects the iterable to yield the number of completed objects.
"""
iterator = FunctionIterator(function)
iterator.value.connect(lambda x: self._update_progress_unknown_iterable(x))
if update_label_callback:
Expand Down