Skip to content

Commit 08d0b44

Browse files
committed
chore: merge
1 parent 92f5094 commit 08d0b44

2 files changed

Lines changed: 40 additions & 47 deletions

File tree

src/tagstudio/qt/controllers/field_list_controller.py

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,8 @@
1515
QWidget,
1616
)
1717

18-
from tagstudio.core.library.alchemy.enums import FieldTypeEnum
1918
from tagstudio.core.library.alchemy.fields import (
2019
BaseField,
21-
BaseFieldTemplate,
2220
DatetimeField,
2321
TextField,
2422
)
@@ -171,7 +169,7 @@ def write_container(self, index: int, field: BaseField, is_mixed: bool = False)
171169
window_title=f"Edit {field.name}", # TODO: Localize this
172170
save_callback=( # pyright: ignore[reportArgumentType]
173171
lambda content: (
174-
self.update_text_field(field, content, is_multiline=False),
172+
self.model.update_text_field(field, content, is_multiline=False),
175173
self.update_from_entry(self.model.cached_entries[0].id),
176174
)
177175
),
@@ -210,7 +208,7 @@ def write_container(self, index: int, field: BaseField, is_mixed: bool = False)
210208
window_title=f"Edit {field.name}", # TODO: Localize this
211209
save_callback=( # pyright: ignore[reportArgumentType]
212210
lambda content: (
213-
self.update_text_field(field, content, is_multiline=True),
211+
self.model.update_text_field(field, content, is_multiline=True),
214212
self.update_from_entry(self.model.cached_entries[0].id),
215213
)
216214
),
@@ -248,7 +246,7 @@ def write_container(self, index: int, field: BaseField, is_mixed: bool = False)
248246
title=f"Edit {field.name}",
249247
save_callback=( # pyright: ignore[reportArgumentType]
250248
lambda content: (
251-
self.update_datetime_field(field, content),
249+
self.model.update_datetime_field(field, content),
252250
self.update_from_entry(self.model.cached_entries[0].id),
253251
)
254252
),
@@ -344,17 +342,3 @@ def write_tag_container(
344342
container.set_field_widget(mixed_tags_widget)
345343

346344
container.setHidden(False)
347-
348-
def update_text_field(self, field: TextField, value: str, is_multiline: bool) -> None:
349-
"""Update a text field across selected entries."""
350-
entry_ids: list[int] = [e.id for e in self.cached_entries]
351-
assert entry_ids, "No entries selected"
352-
353-
self.__lib.update_text_field(entry_ids, field, value, is_multiline)
354-
355-
def update_datetime_field(self, field: DatetimeField, value: str):
356-
"""Update a datetime field across selected entries."""
357-
entry_ids = [e.id for e in self.__model.cached_entries]
358-
assert entry_ids, "No entries selected"
359-
360-
self.__lib.update_datetime_field(entry_ids, field, dt.fromisoformat(value))

src/tagstudio/qt/models/field_list_model.py

Lines changed: 37 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,19 @@
1+
# SPDX-FileCopyrightText: (c) TagStudio Contributors
2+
# SPDX-License-Identifier: GPL-3.0-only
3+
14
import typing
5+
from datetime import datetime as dt
26

37
import structlog
48
from PySide6.QtCore import Qt
5-
6-
from tagstudio.core.library.alchemy.fields import BaseField, DatetimeField, TextField
9+
from PySide6.QtWidgets import QListWidgetItem
10+
11+
from tagstudio.core.library.alchemy.fields import (
12+
BaseField,
13+
BaseFieldTemplate,
14+
DatetimeField,
15+
TextField,
16+
)
717
from tagstudio.core.library.alchemy.library import Library
818
from tagstudio.core.library.alchemy.models import Entry, Tag
919

@@ -22,7 +32,7 @@ def __init__(self, driver: "QtDriver") -> None:
2232
self.mixed_fields: list = []
2333
self.cached_entries: list[Entry] = []
2434

25-
def add_field_to_selected(self, field_list: list) -> None:
35+
def add_field_to_selected(self, field_list: list[QListWidgetItem]) -> None:
2636
"""Add list of entry fields to one or more selected items.
2737
2838
Uses the current driver selection, NOT the field containers cache.
@@ -33,11 +43,14 @@ def add_field_to_selected(self, field_list: list) -> None:
3343
fields=field_list,
3444
)
3545
for entry_id in self.__driver.selected:
36-
for field_item in field_list:
37-
self.__lib.add_field_to_entry(
38-
entry_id,
39-
field_id=field_item.data(Qt.ItemDataRole.UserRole),
46+
for field in field_list:
47+
template: BaseFieldTemplate = field.data(Qt.ItemDataRole.UserRole)
48+
logger.info(
49+
"[FieldListModel][add_field_to_selected] Adding field",
50+
name=template.name,
51+
type=template.class_name,
4052
)
53+
self.__lib.add_field_to_entries(entry_id, template.to_field())
4154

4255
def add_tags_to_selected(self, tags: int | list[int]) -> None:
4356
"""Add list of tags to one or more selected items.
@@ -54,13 +67,25 @@ def add_tags_to_selected(self, tags: int | list[int]) -> None:
5467
tags=tags,
5568
)
5669

57-
self.__lib.add_tags_to_entries(
58-
self.__driver.selected,
59-
tag_ids=tags,
60-
)
61-
70+
selected = self.__driver.selected
71+
self.__driver.main_window.thumb_layout.add_tags(selected, tags)
72+
self.__lib.add_tags_to_entries(selected, tag_ids=tags)
6273
self.__driver.emit_badge_signals(tags, emit_on_absent=False)
6374

75+
def update_text_field(self, field: TextField, value: str, is_multiline: bool) -> None:
76+
"""Update a text field across selected entries."""
77+
entry_ids: list[int] = [e.id for e in self.cached_entries]
78+
assert entry_ids, "No entries selected"
79+
80+
self.__lib.update_text_field(entry_ids, field, value, is_multiline)
81+
82+
def update_datetime_field(self, field: DatetimeField, value: str) -> None:
83+
"""Update a datetime field across selected entries."""
84+
entry_ids: list[int] = [e.id for e in self.cached_entries]
85+
assert entry_ids, "No entries selected"
86+
87+
self.__lib.update_datetime_field(entry_ids, field, dt.fromisoformat(value))
88+
6489
def remove_field(self, field: BaseField) -> None:
6590
"""Remove a field from all selected Entries."""
6691
logger.info(
@@ -72,22 +97,6 @@ def remove_field(self, field: BaseField) -> None:
7297
entry_ids: list[int] = [entry.id for entry in self.cached_entries]
7398
self.__lib.remove_entry_field(field, entry_ids)
7499

75-
def update_field(self, field: BaseField, content: str) -> None:
76-
"""Update a field in all selected Entries, given a field object."""
77-
assert isinstance(
78-
field,
79-
TextField | DatetimeField,
80-
), f"instance: {type(field)}"
81-
82-
entry_ids: list[int] = [e.id for e in self.cached_entries]
83-
84-
assert entry_ids, "No entries selected"
85-
self.__lib.update_entry_field(
86-
entry_ids,
87-
field,
88-
content,
89-
)
90-
91100
def get_tag_categories(self, tags: set[Tag]) -> dict[Tag | None, set[Tag]]:
92101
"""Get a dictionary of category tags mapped to their respective tags.
93102

0 commit comments

Comments
 (0)