f
This commit is contained in:
@@ -1897,7 +1897,8 @@ class ItemDetailView(ResultTable):
|
|||||||
"""Render the item details panel above the standard results table."""
|
"""Render the item details panel above the standard results table."""
|
||||||
from rich.table import Table as RichTable
|
from rich.table import Table as RichTable
|
||||||
from rich.panel import Panel
|
from rich.panel import Panel
|
||||||
from rich.console import Group, Columns
|
from rich.console import Group
|
||||||
|
from rich.columns import Columns
|
||||||
from rich.text import Text
|
from rich.text import Text
|
||||||
|
|
||||||
# 1. Create Detail Grid
|
# 1. Create Detail Grid
|
||||||
|
|||||||
@@ -101,7 +101,20 @@ class Get_Note(Cmdlet):
|
|||||||
store_registry = Store(config)
|
store_registry = Store(config)
|
||||||
any_notes = False
|
any_notes = False
|
||||||
display_items: List[Dict[str, Any]] = []
|
display_items: List[Dict[str, Any]] = []
|
||||||
note_table: Optional[ResultTable] = None
|
|
||||||
|
# We assume single subject for get-note detail view
|
||||||
|
main_res = results[0]
|
||||||
|
|
||||||
|
from SYS.result_table import ItemDetailView, extract_item_metadata
|
||||||
|
metadata = extract_item_metadata(main_res)
|
||||||
|
|
||||||
|
note_table = (
|
||||||
|
ItemDetailView("Notes", item_metadata=metadata)
|
||||||
|
.set_table("note")
|
||||||
|
.set_value_case("preserve")
|
||||||
|
.set_preserve_order(True)
|
||||||
|
)
|
||||||
|
note_table.set_source_command("get-note", [])
|
||||||
|
|
||||||
for res in results:
|
for res in results:
|
||||||
if not isinstance(res, dict):
|
if not isinstance(res, dict):
|
||||||
@@ -126,6 +139,12 @@ class Get_Note(Cmdlet):
|
|||||||
if not resolved_hash:
|
if not resolved_hash:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
# Update metadata if we resolved a hash that wasn't in source
|
||||||
|
if resolved_hash and not metadata.get("Hash"):
|
||||||
|
metadata["Hash"] = resolved_hash
|
||||||
|
if store_name and not metadata.get("Store"):
|
||||||
|
metadata["Store"] = store_name
|
||||||
|
|
||||||
try:
|
try:
|
||||||
backend = store_registry[store_name]
|
backend = store_registry[store_name]
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
@@ -148,13 +167,6 @@ class Get_Note(Cmdlet):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
any_notes = True
|
any_notes = True
|
||||||
if note_table is None:
|
|
||||||
note_table = (
|
|
||||||
ResultTable("note")
|
|
||||||
.set_table("note")
|
|
||||||
.set_value_case("preserve")
|
|
||||||
.set_preserve_order(True)
|
|
||||||
)
|
|
||||||
# Emit each note as its own row so CLI renders a proper note table
|
# Emit each note as its own row so CLI renders a proper note table
|
||||||
for k in sorted(notes.keys(), key=lambda x: str(x).lower()):
|
for k in sorted(notes.keys(), key=lambda x: str(x).lower()):
|
||||||
v = notes.get(k)
|
v = notes.get(k)
|
||||||
@@ -176,13 +188,18 @@ class Get_Note(Cmdlet):
|
|||||||
}
|
}
|
||||||
display_items.append(payload)
|
display_items.append(payload)
|
||||||
if note_table is not None:
|
if note_table is not None:
|
||||||
note_table.add_result(payload)
|
row = note_table.add_row()
|
||||||
|
row.add_column("Name", str(k))
|
||||||
|
row.add_column("Text", preview.strip())
|
||||||
|
|
||||||
ctx.emit(payload)
|
ctx.emit(payload)
|
||||||
|
|
||||||
|
# Always set the table overlay even if empty to show item details
|
||||||
|
ctx.set_last_result_table_overlay(note_table, display_items, subject=result)
|
||||||
|
|
||||||
if not any_notes:
|
if not any_notes:
|
||||||
ctx.emit("No notes found.")
|
log("No notes found.")
|
||||||
elif note_table is not None:
|
|
||||||
ctx.set_last_result_table(note_table, display_items, subject=result)
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -499,20 +499,6 @@ def _run(result: Any, _args: Sequence[str], config: Dict[str, Any]) -> int:
|
|||||||
if not found_relationships:
|
if not found_relationships:
|
||||||
log(f"Hydrus relationships fetch failed: {exc}", file=sys.stderr)
|
log(f"Hydrus relationships fetch failed: {exc}", file=sys.stderr)
|
||||||
|
|
||||||
if not found_relationships:
|
|
||||||
try:
|
|
||||||
from rich.panel import Panel
|
|
||||||
from SYS.rich_display import stdout_console
|
|
||||||
|
|
||||||
title = source_title or (hash_hex[:16] + "..." if hash_hex else "Item")
|
|
||||||
stdout_console().print(
|
|
||||||
Panel(f"{title} has no relationships",
|
|
||||||
title="Relationships")
|
|
||||||
)
|
|
||||||
except Exception:
|
|
||||||
log("No relationships found.")
|
|
||||||
return 0
|
|
||||||
|
|
||||||
# Display results
|
# Display results
|
||||||
from SYS.result_table import ItemDetailView, extract_item_metadata
|
from SYS.result_table import ItemDetailView, extract_item_metadata
|
||||||
|
|
||||||
@@ -580,11 +566,15 @@ def _run(result: Any, _args: Sequence[str], config: Dict[str, Any]) -> int:
|
|||||||
f"hash:{item['hash']}"]
|
f"hash:{item['hash']}"]
|
||||||
)
|
)
|
||||||
|
|
||||||
ctx.set_last_result_table(table, pipeline_results)
|
# Ensure empty state is still navigable/visible
|
||||||
|
ctx.set_last_result_table_overlay(table, pipeline_results)
|
||||||
from SYS.rich_display import stdout_console
|
from SYS.rich_display import stdout_console
|
||||||
|
|
||||||
stdout_console().print(table)
|
stdout_console().print(table)
|
||||||
|
|
||||||
|
if not found_relationships:
|
||||||
|
log("No relationships found.")
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1753,10 +1753,7 @@ def _run(result: Any, args: Sequence[str], config: Dict[str, Any]) -> int:
|
|||||||
storage = Store(config)
|
storage = Store(config)
|
||||||
backend = storage[store_name]
|
backend = storage[store_name]
|
||||||
current, source = backend.get_tag(file_hash, config=config)
|
current, source = backend.get_tag(file_hash, config=config)
|
||||||
|
current = list(current or [])
|
||||||
if not current:
|
|
||||||
log("No tags found", file=sys.stderr)
|
|
||||||
return 1
|
|
||||||
|
|
||||||
service_name = ""
|
service_name = ""
|
||||||
except KeyError:
|
except KeyError:
|
||||||
|
|||||||
@@ -453,13 +453,14 @@ class Get_Url(Cmdlet):
|
|||||||
# Use overlay mode to avoid "merging" with the previous status/table state.
|
# Use overlay mode to avoid "merging" with the previous status/table state.
|
||||||
# This is idiomatic for detail views and prevents the search table from being
|
# This is idiomatic for detail views and prevents the search table from being
|
||||||
# contaminated by partial re-renders.
|
# contaminated by partial re-renders.
|
||||||
ctx.set_last_result_table_overlay(table if items else None, items, subject=result)
|
ctx.set_last_result_table_overlay(table, items, subject=result)
|
||||||
|
|
||||||
# Emit items at the end for pipeline continuity
|
# Emit items at the end for pipeline continuity
|
||||||
for item in items:
|
for item in items:
|
||||||
ctx.emit(item)
|
ctx.emit(item)
|
||||||
|
|
||||||
if not items:
|
if not items:
|
||||||
|
# Still log it but the panel will show the item context
|
||||||
log("No url found", file=sys.stderr)
|
log("No url found", file=sys.stderr)
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
Reference in New Issue
Block a user