This commit is contained in:
nose
2025-11-27 10:59:01 -08:00
parent e9b505e609
commit 9eff65d1af
30 changed files with 2099 additions and 1095 deletions

View File

@@ -49,6 +49,7 @@ class TagItem:
hash_hex: Optional[str] = None
source: str = "hydrus"
service_name: Optional[str] = None
file_path: Optional[str] = None
def __post_init__(self):
# Make ResultTable happy by adding standard fields
@@ -101,7 +102,9 @@ def _emit_tags_as_table(
hash_hex: Optional[str],
source: str = "hydrus",
service_name: Optional[str] = None,
config: Dict[str, Any] = None
config: Dict[str, Any] = None,
item_title: Optional[str] = None,
file_path: Optional[str] = None
) -> None:
"""Emit tags as TagItem objects and display via ResultTable.
@@ -111,7 +114,13 @@ def _emit_tags_as_table(
from result_table import ResultTable
# Create ResultTable with just tag column (no title)
table = ResultTable("Tags", max_columns=1)
table_title = "Tags"
if item_title:
table_title = f"Tags: {item_title}"
if hash_hex:
table_title += f" [{hash_hex[:8]}]"
table = ResultTable(table_title, max_columns=1)
table.set_source_command("get-tag", [])
# Create TagItem for each tag
@@ -123,6 +132,7 @@ def _emit_tags_as_table(
hash_hex=hash_hex,
source=source,
service_name=service_name,
file_path=file_path,
)
tag_items.append(tag_item)
table.add_result(tag_item)
@@ -1069,6 +1079,7 @@ def _run(result: Any, args: Sequence[str], config: Dict[str, Any]) -> int:
# Try Hydrus first (always prioritize if available and has hash)
use_hydrus = False
hydrus_meta = None # Cache the metadata from first fetch
client = None
if hash_hex and hydrus_available:
try:
client = hydrus.get_client(config)
@@ -1093,7 +1104,8 @@ def _run(result: Any, args: Sequence[str], config: Dict[str, Any]) -> int:
try:
# Use cached metadata from above, don't fetch again
service_name = hydrus.get_tag_service_name(config)
client = hydrus.get_client(config)
if client is None:
client = hydrus.get_client(config)
service_key = hydrus.get_tag_service_key(client, service_name)
current = _extract_my_tags_from_hydrus_meta(hydrus_meta, service_key, service_name)
source = "hydrus"
@@ -1148,10 +1160,13 @@ def _run(result: Any, args: Sequence[str], config: Dict[str, Any]) -> int:
return 1
# Always output to ResultTable (pipeline mode only)
# Extract title for table header
item_title = get_field(result, "title", None) or get_field(result, "name", None) or get_field(result, "filename", None)
if source == "hydrus":
_emit_tags_as_table(current, hash_hex=hash_hex, source="hydrus", service_name=service_name, config=config)
_emit_tags_as_table(current, hash_hex=hash_hex, source="hydrus", service_name=service_name, config=config, item_title=item_title)
else:
_emit_tags_as_table(current, hash_hex=hash_hex, source="local", service_name=None, config=config)
_emit_tags_as_table(current, hash_hex=hash_hex, source="local", service_name=None, config=config, item_title=item_title, file_path=str(local_path) if local_path else None)
# If emit requested or store key provided, emit payload
if emit_mode: