dfdf
This commit is contained in:
@@ -48,7 +48,6 @@ class Add_File(Cmdlet):
|
||||
arg=[
|
||||
SharedArgs.PATH,
|
||||
SharedArgs.STORE,
|
||||
SharedArgs.HASH,
|
||||
CmdletArg(name="provider", type="string", required=False, description="File hosting provider (e.g., 0x0)", alias="prov"),
|
||||
CmdletArg(
|
||||
name="room",
|
||||
@@ -1746,6 +1745,62 @@ class Add_File(Cmdlet):
|
||||
# Prepare metadata from pipe_obj and sidecars
|
||||
tags, url, title, f_hash = Add_File._prepare_metadata(result, media_path, pipe_obj, config)
|
||||
|
||||
# If we're moving/copying from one store to another, also copy the source store's
|
||||
# existing associated URLs so they aren't lost.
|
||||
try:
|
||||
from metadata import normalize_urls
|
||||
|
||||
source_store = None
|
||||
source_hash = None
|
||||
if isinstance(result, dict):
|
||||
source_store = result.get("store")
|
||||
source_hash = result.get("hash")
|
||||
if not source_store:
|
||||
source_store = getattr(pipe_obj, "store", None)
|
||||
if not source_hash:
|
||||
source_hash = getattr(pipe_obj, "hash", None)
|
||||
if (not source_hash) and isinstance(pipe_obj.extra, dict):
|
||||
source_hash = pipe_obj.extra.get("hash")
|
||||
|
||||
source_store = str(source_store or "").strip()
|
||||
source_hash = str(source_hash or "").strip().lower()
|
||||
if (
|
||||
source_store
|
||||
and source_hash
|
||||
and len(source_hash) == 64
|
||||
and source_store.lower() != str(backend_name or "").strip().lower()
|
||||
):
|
||||
source_backend = None
|
||||
try:
|
||||
if source_store in store.list_backends():
|
||||
source_backend = store[source_store]
|
||||
except Exception:
|
||||
source_backend = None
|
||||
|
||||
if source_backend is not None:
|
||||
try:
|
||||
src_urls = normalize_urls(source_backend.get_url(source_hash) or [])
|
||||
except Exception:
|
||||
src_urls = []
|
||||
|
||||
try:
|
||||
dst_urls = normalize_urls(url or [])
|
||||
except Exception:
|
||||
dst_urls = []
|
||||
|
||||
merged: list[str] = []
|
||||
seen: set[str] = set()
|
||||
for u in list(dst_urls or []) + list(src_urls or []):
|
||||
if not u:
|
||||
continue
|
||||
if u in seen:
|
||||
continue
|
||||
seen.add(u)
|
||||
merged.append(u)
|
||||
url = merged
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Collect relationship pairs for post-ingest DB/API persistence.
|
||||
if collect_relationship_pairs is not None:
|
||||
rels = Add_File._get_relationships(result, pipe_obj)
|
||||
|
||||
Reference in New Issue
Block a user