fix: don't add tags to previous selections

This commit is contained in:
Travis Abendshien
2025-01-03 01:39:06 -08:00
parent b03211e7e7
commit 56a80ff13c
3 changed files with 29 additions and 27 deletions

View File

@@ -780,7 +780,7 @@ class Library:
self,
entry_ids: list[int] | int,
field: BaseField,
content: str | datetime | set[Tag],
content: str | datetime,
):
if isinstance(entry_ids, int):
entry_ids = [entry_ids]
@@ -840,24 +840,12 @@ class Library:
field_id = field_id.name
field = self.get_value_type(field_id)
field_model: TextField | DatetimeField # | TagBoxField
field_model: TextField | DatetimeField
if field.type in (FieldTypeEnum.TEXT_LINE, FieldTypeEnum.TEXT_BOX):
field_model = TextField(
type_key=field.key,
value=value or "",
)
# elif field.type == FieldTypeEnum.TAGS:
# field_model = TagBoxField(
# type_key=field.key,
# )
#
# if value:
# assert isinstance(value, list)
# with Session(self.engine) as session:
# for tag_id in list(set(value)):
# tag = session.scalar(select(Tag).where(Tag.id == tag_id))
# field_model.tags.add(tag)
# session.flush()
elif field.type == FieldTypeEnum.DATETIME:
field_model = DatetimeField(

View File

@@ -111,17 +111,16 @@ class FieldContainers(QWidget):
self.selected = [self.lib.get_entry_full(entry.id)]
logger.info(
"[FieldContainers] Updating Selection",
entry=entry,
path=entry.path,
fields=entry.fields,
tags=entry.tags,
)
entry_ = self.selected[0]
container_len: int = len(entry_.fields)
# for index, tag in enumerate(entry_.tags):
# self.write_tag_container(index, )
# TODO: Break up into categories
container_index = 0
# Write tag container(s)
if entry_.tags:
categories = self.get_tag_categories(entry_.tags)
for cat, tags in sorted(categories.items(), key=lambda kv: (kv[0] is None, kv)):
@@ -130,16 +129,18 @@ class FieldContainers(QWidget):
)
container_index += 1
container_len += 1
# Write field container(s)
for index, field in enumerate(entry_.fields, start=container_index):
self.write_container(index, field, is_mixed=False)
# Hide leftover containers
# Hide leftover container(s)
if len(self.containers) > container_len:
for i, c in enumerate(self.containers):
if i > (container_len - 1):
c.setHidden(True)
def get_tag_categories(self, tags: set[Tag]) -> dict[Tag, set[Tag | None]]:
"""Get a dictionary of category tags mapped to their respective tags."""
cats: dict[Tag, set[Tag | None]] = {}
cats[None] = set()
@@ -151,6 +152,7 @@ class FieldContainers(QWidget):
cats[p_tag] = set()
logger.info("Blank Tag Categories", cats=cats)
# Add tags to any applicable categories
for tag in tags:
is_general = True
for p_tag in list(cats.keys()):
@@ -167,6 +169,7 @@ class FieldContainers(QWidget):
if is_general:
cats[None].add(tag)
# Remove unused categories
empty: list[Tag] = []
for k, v in list(cats.items()):
if not v:
@@ -183,7 +186,9 @@ class FieldContainers(QWidget):
def add_field_to_selected(self, field_list: list):
"""Add list of entry fields to one or more selected items."""
logger.info(
"[FieldContainers][add_field_to_selected]", selected=self.selected, fields=field_list
"[FieldContainers][add_field_to_selected]",
selected=[x.path for x in self.selected],
fields=field_list,
)
for entry in self.selected:
for field_item in field_list:
@@ -194,7 +199,11 @@ class FieldContainers(QWidget):
def add_tags_to_selected(self, tags: list[int]):
"""Add list of tags to one or more selected items."""
logger.info("[FieldContainers][add_tags_to_selected]", selected=self.selected, tags=tags)
logger.info(
"[FieldContainers][add_tags_to_selected]",
selected=[x.path for x in self.selected],
tags=tags,
)
for entry in self.selected:
self.lib.add_tags_to_entry(
entry.id,
@@ -377,6 +386,7 @@ class FieldContainers(QWidget):
inner_widget = container.get_inner_widget()
if isinstance(inner_widget, TagBoxWidget):
logger.warning("recycling")
inner_widget.set_tags(tags)
try:
inner_widget.updated.disconnect()
@@ -384,6 +394,7 @@ class FieldContainers(QWidget):
logger.error("[FieldContainers] Failed to disconnect inner_container.updated")
else:
logger.warning("creating new")
inner_widget = TagBoxWidget(
tags,
"Tags",
@@ -408,7 +419,11 @@ class FieldContainers(QWidget):
def remove_field(self, field: BaseField):
"""Remove a field from all selected Entries."""
logger.info("[FieldContainers] Removing Field", field=field, selected=self.selected)
logger.info(
"[FieldContainers] Removing Field",
field=field,
selected=[x.path for x in self.selected],
)
entry_ids = [e.id for e in self.selected]
self.lib.remove_entry_field(field, entry_ids)

View File

@@ -5,6 +5,7 @@
import traceback
import typing
from pathlib import Path
from warnings import catch_warnings
import structlog
from PySide6.QtCore import Qt, Signal
@@ -161,9 +162,8 @@ class PreviewPanel(QWidget):
self.add_field_button.clicked.connect(self.add_field_modal.show)
def update_add_tag_button(self, entry: Entry):
# if self.add_tag_modal.is_connected:
# self.add_tag_modal.done.disconnect()
if self.add_tag_button.is_connected:
with catch_warnings(record=True):
self.add_tag_modal.widget.tag_chosen.disconnect()
self.add_tag_button.clicked.disconnect()
self.add_tag_modal.widget.tag_chosen.connect(
@@ -172,11 +172,10 @@ class PreviewPanel(QWidget):
self.fields.update_from_entry(entry),
)
)
# self.add_tag_modal.is_connected = True
self.add_tag_button.clicked.connect(
lambda: (
# self.add_tag_modal.widget.update_tags(),
self.add_tag_modal.widget.update_tags(),
self.add_tag_modal.show(),
)
)