Skip to content

Commit 4d882a7

Browse files
authored
fix: 'Add Tag to Selected' action fails (#1224)
* Fix * Fix preview panel being reset * Fix 'Add Tag to Selected' not emitting badge signals
1 parent 4c0cb16 commit 4d882a7

File tree

2 files changed

+29
-28
lines changed

2 files changed

+29
-28
lines changed

src/tagstudio/qt/mixed/field_containers.py

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from warnings import catch_warnings
1111

1212
import structlog
13-
from PySide6.QtCore import Qt, Signal
13+
from PySide6.QtCore import Qt
1414
from PySide6.QtGui import QGuiApplication
1515
from PySide6.QtWidgets import (
1616
QFrame,
@@ -22,7 +22,6 @@
2222
QWidget,
2323
)
2424

25-
from tagstudio.core.constants import TAG_ARCHIVED, TAG_FAVORITE
2625
from tagstudio.core.enums import Theme
2726
from tagstudio.core.library.alchemy.enums import FieldTypeEnum
2827
from tagstudio.core.library.alchemy.fields import (
@@ -51,9 +50,6 @@
5150
class FieldContainers(QWidget):
5251
"""The Preview Panel Widget."""
5352

54-
favorite_updated = Signal(bool)
55-
archived_updated = Signal(bool)
56-
5753
def __init__(self, library: Library, driver: "QtDriver"):
5854
super().__init__()
5955

@@ -131,7 +127,7 @@ def update_granular(
131127
container_index += 1
132128
container_len += 1
133129
if update_badges:
134-
self.emit_badge_signals({t.id for t in entry_tags})
130+
self.driver.emit_badge_signals({t.id for t in entry_tags})
135131

136132
# Write field container(s)
137133
for index, field in enumerate(entry_fields, start=container_index):
@@ -242,7 +238,7 @@ def add_tags_to_selected(self, tags: int | list[int]):
242238
self.driver.selected,
243239
tag_ids=tags,
244240
)
245-
self.emit_badge_signals(tags, emit_on_absent=False)
241+
self.driver.emit_badge_signals(tags, emit_on_absent=False)
246242

247243
def write_container(self, index: int, field: BaseField, is_mixed: bool = False):
248244
"""Update/Create data for a FieldContainer.
@@ -493,16 +489,3 @@ def remove_message_box(self, prompt: str, callback: Callable) -> None:
493489
result = remove_mb.exec_()
494490
if result == QMessageBox.ButtonRole.ActionRole.value:
495491
callback()
496-
497-
def emit_badge_signals(self, tag_ids: list[int] | set[int], emit_on_absent: bool = True):
498-
"""Emit any connected signals for updating badge icons."""
499-
logger.info("[emit_badge_signals] Emitting", tag_ids=tag_ids, emit_on_absent=emit_on_absent)
500-
if TAG_ARCHIVED in tag_ids:
501-
self.archived_updated.emit(True) # noqa: FBT003
502-
elif emit_on_absent:
503-
self.archived_updated.emit(False) # noqa: FBT003
504-
505-
if TAG_FAVORITE in tag_ids:
506-
self.favorite_updated.emit(True) # noqa: FBT003
507-
elif emit_on_absent:
508-
self.favorite_updated.emit(False) # noqa: FBT003

src/tagstudio/qt/ts_qt.py

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,9 @@ class QtDriver(DriverMixin, QObject):
177177

178178
SIGTERM = Signal()
179179

180+
favorite_updated = Signal(bool)
181+
archived_updated = Signal(bool)
182+
180183
tag_manager_panel: PanelModal | None = None
181184
color_manager_panel: TagColorManager | None = None
182185
ignore_modal: PanelModal | None = None
@@ -357,8 +360,9 @@ def start(self) -> None:
357360
self.tag_manager_panel = PanelModal(
358361
widget=TagDatabasePanel(self, self.lib),
359362
title=Translations["tag_manager.title"],
360-
done_callback=lambda checked=False,
361-
s=self.selected: self.main_window.preview_panel.set_selection(s, update_preview=False),
363+
done_callback=lambda checked=False: (
364+
self.main_window.preview_panel.set_selection(self.selected, update_preview=False)
365+
),
362366
has_save=False,
363367
)
364368

@@ -369,9 +373,9 @@ def start(self) -> None:
369373
self.add_tag_modal = TagSearchModal(self.lib, is_tag_chooser=True)
370374
self.add_tag_modal.tsp.set_driver(self)
371375
self.add_tag_modal.tsp.tag_chosen.connect(
372-
lambda t, s=self.selected: (
373-
self.add_tags_to_selected_callback(t),
374-
self.main_window.preview_panel.set_selection(s),
376+
lambda chosen_tag: (
377+
self.add_tags_to_selected_callback([chosen_tag]),
378+
self.main_window.preview_panel.set_selection(self.selected),
375379
)
376380
)
377381

@@ -559,12 +563,12 @@ def create_about_modal():
559563

560564
self.main_window.search_field.textChanged.connect(self.update_completions_list)
561565

562-
self.main_window.preview_panel.field_containers_widget.archived_updated.connect(
566+
self.archived_updated.connect(
563567
lambda hidden: self.update_badges(
564568
{BadgeType.ARCHIVED: hidden}, origin_id=0, add_tags=False
565569
)
566570
)
567-
self.main_window.preview_panel.field_containers_widget.favorite_updated.connect(
571+
self.favorite_updated.connect(
568572
lambda hidden: self.update_badges(
569573
{BadgeType.FAVORITE: hidden}, origin_id=0, add_tags=False
570574
)
@@ -800,6 +804,19 @@ def backup_library(self):
800804
)
801805
)
802806

807+
def emit_badge_signals(self, tag_ids: list[int] | set[int], emit_on_absent: bool = True):
808+
"""Emit any connected signals for updating badge icons."""
809+
logger.info("[emit_badge_signals] Emitting", tag_ids=tag_ids, emit_on_absent=emit_on_absent)
810+
if TAG_ARCHIVED in tag_ids:
811+
self.archived_updated.emit(True) # noqa: FBT003
812+
elif emit_on_absent:
813+
self.archived_updated.emit(False) # noqa: FBT003
814+
815+
if TAG_FAVORITE in tag_ids:
816+
self.favorite_updated.emit(True) # noqa: FBT003
817+
elif emit_on_absent:
818+
self.favorite_updated.emit(False) # noqa: FBT003
819+
803820
def add_tag_action_callback(self):
804821
panel = BuildTagPanel(self.lib)
805822
self.modal = PanelModal(
@@ -848,9 +865,10 @@ def clear_select_action_callback(self):
848865
self.main_window.preview_panel.set_selection(self.selected)
849866

850867
def add_tags_to_selected_callback(self, tag_ids: list[int]):
851-
selected = self.selected
868+
selected: list[int] = self.selected
852869
self.main_window.thumb_layout.add_tags(selected, tag_ids)
853870
self.lib.add_tags_to_entries(selected, tag_ids)
871+
self.emit_badge_signals(tag_ids)
854872

855873
def delete_files_callback(self, origin_path: str | Path, origin_id: int | None = None):
856874
"""Callback to send on or more files to the system trash.

0 commit comments

Comments
 (0)