fix: preview panel + main window fixes and optimizations (#700)

* fix: only update file preview when necessary

* fix: don't update thumb from tag_box callbacks

* fix: reset preview panel and filters when loading new library

* fix: clear library state on close; close old library on open

* fix: reset scrollbar position on library close
This commit is contained in:
Travis Abendshien
2025-01-22 16:00:01 -08:00
committed by GitHub
parent 16fb0290a0
commit 857f40f2e3
5 changed files with 27 additions and 12 deletions

View File

@@ -226,7 +226,7 @@ class FoldersToTagsModal(QWidget):
def on_apply(self, event):
folders_to_tags(self.library)
self.close()
self.driver.preview_panel.update_widgets()
self.driver.preview_panel.update_widgets(update_preview=False)
def on_open(self, event):
for i in reversed(range(self.scroll_layout.count())):

View File

@@ -463,7 +463,7 @@ class QtDriver(DriverMixin, QObject):
self.autofill_action.triggered.connect(
lambda: (
self.run_macros(MacroID.AUTOFILL, self.selected),
self.preview_panel.update_widgets(),
self.preview_panel.update_widgets(update_preview=False),
)
)
macros_menu.addAction(self.autofill_action)
@@ -638,7 +638,6 @@ class QtDriver(DriverMixin, QObject):
self.main_window.pagination.index.connect(lambda i: self.page_move(page_id=i))
self.splash.finish(self.main_window)
self.preview_panel.update_widgets()
def show_grid_filenames(self, value: bool):
for thumb in self.item_thumbs:
@@ -678,6 +677,13 @@ class QtDriver(DriverMixin, QObject):
self.settings.setValue(SettingItems.LAST_LIBRARY, str(self.lib.library_dir))
self.settings.sync()
# Reset library state
self.preview_panel.update_widgets()
self.main_window.searchField.setText("")
scrollbar: QScrollArea = self.main_window.scrollArea
scrollbar.verticalScrollBar().setValue(0)
self.filter = FilterState.show_all()
self.lib.close()
self.thumb_job_queue.queue.clear()
@@ -748,7 +754,7 @@ class QtDriver(DriverMixin, QObject):
item.thumb_button.set_selected(True)
self.set_macro_menu_viability()
self.preview_panel.update_widgets()
self.preview_panel.update_widgets(update_preview=False)
def clear_select_action_callback(self):
self.selected.clear()
@@ -761,7 +767,7 @@ class QtDriver(DriverMixin, QObject):
def show_tag_database(self):
self.modal = PanelModal(
widget=TagDatabasePanel(self.lib),
done_callback=self.preview_panel.update_widgets,
done_callback=lambda: self.preview_panel.update_widgets(update_preview=False),
has_save=False,
)
Translations.translate_with_setter(self.modal.setTitle, "tag_manager.title")
@@ -1421,6 +1427,9 @@ class QtDriver(DriverMixin, QObject):
)
self.main_window.repaint()
if self.lib.library_dir:
self.close_library()
open_status: LibraryStatus = None
try:
open_status = self.lib.open_library(path)

View File

@@ -502,7 +502,7 @@ class ItemThumb(FlowWidget):
self.lib.remove_tags_from_entry(entry_id, tag_id)
if self.driver.preview_panel.is_open:
self.driver.preview_panel.update_widgets()
self.driver.preview_panel.update_widgets(update_preview=False)
def mouseMoveEvent(self, event): # noqa: N802
if event.buttons() is not Qt.MouseButton.LeftButton:

View File

@@ -131,8 +131,13 @@ class PreviewPanel(QWidget):
root_layout.addWidget(splitter)
root_layout.addWidget(add_buttons_container)
def update_widgets(self) -> bool:
"""Render the panel widgets with the newest data from the Library."""
def update_widgets(self, update_preview: bool = True) -> bool:
"""Render the panel widgets with the newest data from the Library.
Args:
update_preview(bool): Should the file preview be updated?
(Only works with one or more items selected)
"""
# No Items Selected
try:
if len(self.driver.selected) == 0:
@@ -151,8 +156,9 @@ class PreviewPanel(QWidget):
filepath: Path = self.lib.library_dir / entry.path
ext: str = filepath.suffix.lower()
stats: dict = self.thumb.update_preview(filepath, ext)
self.file_attrs.update_stats(filepath, ext, stats)
if update_preview:
stats: dict = self.thumb.update_preview(filepath, ext)
self.file_attrs.update_stats(filepath, ext, stats)
self.file_attrs.update_date_label(filepath)
self.fields.update_from_entry(entry_id)
self.update_add_tag_button(entry_id)

View File

@@ -63,7 +63,7 @@ class TagBoxWidget(FieldWidget):
tag_widget.on_remove.connect(
lambda tag_id=tag.id: (
self.remove_tag(tag_id),
self.driver.preview_panel.update_widgets(),
self.driver.preview_panel.update_widgets(update_preview=False),
)
)
tag_widget.on_edit.connect(lambda t=tag: self.edit_tag(t))
@@ -77,7 +77,7 @@ class TagBoxWidget(FieldWidget):
build_tag_panel,
tag.name, # TODO - display name including parent tags
"Edit Tag",
done_callback=self.driver.preview_panel.update_widgets,
done_callback=lambda: self.driver.preview_panel.update_widgets(update_preview=False),
has_save=True,
)
# TODO - this was update_tag()