hh
This commit is contained in:
@@ -369,11 +369,12 @@ class Add_File(Cmdlet):
|
||||
# Many add-file flows don't emit intermediate items, so without steps the pipe can look "stuck".
|
||||
use_steps = False
|
||||
steps_started = False
|
||||
step2_done = False
|
||||
step3_done = False
|
||||
try:
|
||||
ui, _ = progress.ui_and_pipe_index()
|
||||
use_steps = (ui is not None) and (len(items_to_process) == 1)
|
||||
if use_steps:
|
||||
progress.begin_steps(5)
|
||||
steps_started = True
|
||||
except Exception:
|
||||
use_steps = False
|
||||
|
||||
@@ -545,10 +546,8 @@ class Add_File(Cmdlet):
|
||||
temp_dir_to_cleanup: Optional[Path] = None
|
||||
delete_after_item = delete_after
|
||||
try:
|
||||
if use_steps and (not steps_started):
|
||||
progress.begin_steps(5)
|
||||
if use_steps and steps_started:
|
||||
progress.step("resolving source")
|
||||
steps_started = True
|
||||
|
||||
media_path, file_hash, temp_dir_to_cleanup = self._resolve_source(
|
||||
item, path_arg, pipe_obj, config, store_instance=storage_registry
|
||||
@@ -560,32 +559,20 @@ class Add_File(Cmdlet):
|
||||
failures += 1
|
||||
continue
|
||||
|
||||
# Update pipe_obj with resolved path
|
||||
pipe_obj.path = str(media_path)
|
||||
|
||||
# When using -path (filesystem export), allow all file types.
|
||||
# When using -store (backend), restrict to SUPPORTED_MEDIA_EXTENSIONS.
|
||||
allow_all_files = not (location and is_storage_backend_location)
|
||||
if not self._validate_source(media_path, allow_all_extensions=allow_all_files):
|
||||
failures += 1
|
||||
continue
|
||||
|
||||
if use_steps and steps_started:
|
||||
progress.step("hashing file")
|
||||
|
||||
# Update pipe_obj with resolved path
|
||||
pipe_obj.path = str(media_path)
|
||||
|
||||
# When using -path (filesystem export), allow all file types.
|
||||
# When using -store (backend), restrict to SUPPORTED_MEDIA_EXTENSIONS.
|
||||
allow_all_files = not (location and is_storage_backend_location)
|
||||
if not self._validate_source(media_path, allow_all_extensions=allow_all_files):
|
||||
failures += 1
|
||||
continue
|
||||
|
||||
if use_steps and steps_started and (not step2_done):
|
||||
if not file_hash:
|
||||
progress.step("hashing file")
|
||||
progress.step("ingesting file")
|
||||
step2_done = True
|
||||
|
||||
# Update pipe_obj with resolved path
|
||||
pipe_obj.path = str(media_path)
|
||||
|
||||
# When using -path (filesystem export), allow all file types.
|
||||
# When using -store (backend), restrict to SUPPORTED_MEDIA_EXTENSIONS.
|
||||
allow_all_files = not (location and is_storage_backend_location)
|
||||
if not self._validate_source(media_path, allow_all_extensions=allow_all_files):
|
||||
failures += 1
|
||||
continue
|
||||
|
||||
if provider_name:
|
||||
if str(provider_name).strip().lower() == "matrix":
|
||||
@@ -690,9 +677,8 @@ class Add_File(Cmdlet):
|
||||
seen: set[str] = set()
|
||||
hashes = [h for h in hashes if not (h in seen or seen.add(h))]
|
||||
|
||||
if use_steps and steps_started and (not step3_done):
|
||||
if use_steps and steps_started:
|
||||
progress.step("refreshing display")
|
||||
step3_done = True
|
||||
|
||||
refreshed_items = Add_File._try_emit_search_file_by_hashes(
|
||||
store=str(location),
|
||||
@@ -700,6 +686,7 @@ class Add_File(Cmdlet):
|
||||
config=config,
|
||||
store_instance=storage_registry,
|
||||
)
|
||||
debug(f"[add-file] Internal refresh returned refreshed_items count={len(refreshed_items) if refreshed_items else 0}")
|
||||
if not refreshed_items:
|
||||
# Fallback: at least show the add-file payloads as a display overlay
|
||||
from SYS.result_table import ResultTable
|
||||
@@ -756,7 +743,7 @@ class Add_File(Cmdlet):
|
||||
from cmdlet.search_file import CMDLET as search_file_cmdlet
|
||||
|
||||
query = "hash:" + ",".join(hashes)
|
||||
args = ["-store", str(store), query]
|
||||
args = ["-store", str(store), "-internal-refresh", query]
|
||||
debug(f'[add-file] Refresh: search-file -store {store} "{query}"')
|
||||
|
||||
# Run search-file under a temporary stage context so its ctx.emit() calls
|
||||
|
||||
@@ -258,9 +258,6 @@ class search_file(Cmdlet):
|
||||
try:
|
||||
results_list: List[Dict[str, Any]] = []
|
||||
|
||||
from SYS import result_table
|
||||
|
||||
importlib.reload(result_table)
|
||||
from SYS.result_table import ResultTable
|
||||
|
||||
provider_text = str(provider_name or "").strip()
|
||||
@@ -453,8 +450,8 @@ class search_file(Cmdlet):
|
||||
args_list = [str(arg) for arg in (args or [])]
|
||||
|
||||
refresh_mode = any(
|
||||
str(a).strip().lower() in {"--refresh",
|
||||
"-refresh"} for a in args_list
|
||||
str(a).strip().lower() in {"--refresh", "-refresh", "-internal-refresh"}
|
||||
for a in args_list
|
||||
)
|
||||
|
||||
def _format_command_title(command: str, raw_args: List[str]) -> str:
|
||||
@@ -470,7 +467,7 @@ class search_file(Cmdlet):
|
||||
|
||||
cleaned = [
|
||||
str(a) for a in (raw_args or [])
|
||||
if str(a).strip().lower() not in {"--refresh", "-refresh"}
|
||||
if str(a).strip().lower() not in {"--refresh", "-refresh", "-internal-refresh"}
|
||||
]
|
||||
if not cleaned:
|
||||
return command
|
||||
@@ -626,6 +623,10 @@ class search_file(Cmdlet):
|
||||
continue
|
||||
|
||||
if not library_root:
|
||||
# Internal refreshes should not trigger config panels or stop progress.
|
||||
if "-internal-refresh" in args_list:
|
||||
return 1
|
||||
|
||||
from SYS import pipeline as ctx_mod
|
||||
progress = None
|
||||
if hasattr(ctx_mod, "get_pipeline_state"):
|
||||
@@ -641,19 +642,16 @@ class search_file(Cmdlet):
|
||||
# Use context manager to ensure database is always closed
|
||||
with API_folder_store(library_root) as db:
|
||||
try:
|
||||
db.insert_worker(
|
||||
worker_id,
|
||||
"search-file",
|
||||
title=f"Search: {query}",
|
||||
description=f"Query: {query}",
|
||||
pipe=ctx.get_current_command_text(),
|
||||
)
|
||||
if "-internal-refresh" not in args_list:
|
||||
db.insert_worker(
|
||||
worker_id,
|
||||
"search-file",
|
||||
title=f"Search: {query}",
|
||||
description=f"Query: {query}",
|
||||
pipe=ctx.get_current_command_text(),
|
||||
)
|
||||
|
||||
results_list = []
|
||||
from SYS import result_table
|
||||
import importlib
|
||||
|
||||
importlib.reload(result_table)
|
||||
from SYS.result_table import ResultTable
|
||||
|
||||
table = ResultTable(command_title)
|
||||
@@ -802,6 +800,16 @@ class search_file(Cmdlet):
|
||||
if found_any:
|
||||
table.title = command_title
|
||||
|
||||
# Add-file refresh quality-of-life: if exactly 1 item is being refreshed,
|
||||
# show the detailed item panel instead of a single-row table.
|
||||
if refresh_mode and len(results_list) == 1:
|
||||
try:
|
||||
from SYS.rich_display import render_item_details_panel
|
||||
render_item_details_panel(results_list[0])
|
||||
table._rendered_by_cmdlet = True
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if refresh_mode:
|
||||
ctx.set_last_result_table_preserve_history(
|
||||
table,
|
||||
@@ -918,6 +926,15 @@ class search_file(Cmdlet):
|
||||
|
||||
table.title = command_title
|
||||
|
||||
# If exactly 1 item is being refreshed, show the detailed item panel.
|
||||
if refresh_mode and len(results_list) == 1:
|
||||
try:
|
||||
from SYS.rich_display import render_item_details_panel
|
||||
render_item_details_panel(results_list[0])
|
||||
table._rendered_by_cmdlet = True
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if refresh_mode:
|
||||
ctx.set_last_result_table_preserve_history(table, results_list)
|
||||
else:
|
||||
|
||||
Reference in New Issue
Block a user