d
This commit is contained in:
@@ -179,7 +179,7 @@ class HydrusNetwork(Store):
|
||||
try:
|
||||
metadata = client.fetch_file_metadata(hashes=[file_hash])
|
||||
if metadata and isinstance(metadata, dict):
|
||||
files = metadata.get("file_metadata", [])
|
||||
files = metadata.get("metadata", [])
|
||||
if files:
|
||||
file_exists = True
|
||||
log(
|
||||
@@ -376,12 +376,12 @@ class HydrusNetwork(Store):
|
||||
if not pattern or pattern == "*":
|
||||
metadata_list = _iter_url_filtered_metadata(None, want_any=True, fetch_limit=int(limit) if limit else 100)
|
||||
else:
|
||||
# Fast-path: exact URL via /add_url/get_url_files when a full URL is provided.
|
||||
# Fast-path: exact URL via /add_urls/get_url_files when a full URL is provided.
|
||||
try:
|
||||
if pattern.startswith("http://") or pattern.startswith("https://"):
|
||||
from API.HydrusNetwork import HydrusRequestSpec
|
||||
|
||||
spec = HydrusRequestSpec(method="GET", endpoint="/add_url/get_url_files", query={"url": pattern})
|
||||
spec = HydrusRequestSpec(method="GET", endpoint="/add_urls/get_url_files", query={"url": pattern})
|
||||
response = client._perform_request(spec) # type: ignore[attr-defined]
|
||||
hashes: list[str] = []
|
||||
file_ids: list[int] = []
|
||||
@@ -479,8 +479,8 @@ class HydrusNetwork(Store):
|
||||
|
||||
if not isinstance(metadata_list, list):
|
||||
metadata_list = []
|
||||
|
||||
for meta in metadata_list:
|
||||
|
||||
for meta in metadata_list:
|
||||
if len(results) >= limit:
|
||||
break
|
||||
|
||||
@@ -527,14 +527,14 @@ class HydrusNetwork(Store):
|
||||
top_level_tags = meta.get("tags_flat", []) or meta.get("tags", [])
|
||||
_collect(top_level_tags)
|
||||
|
||||
# Resolve extension from MIME type
|
||||
# Prefer Hydrus-provided extension (e.g. ".webm"); fall back to MIME map.
|
||||
mime_type = meta.get("mime")
|
||||
ext = ""
|
||||
if mime_type:
|
||||
ext = str(meta.get("ext") or "").strip().lstrip('.')
|
||||
if not ext and mime_type:
|
||||
for category in mime_maps.values():
|
||||
for _ext_key, info in category.items():
|
||||
if mime_type in info.get("mimes", []):
|
||||
ext = info.get("ext", "").lstrip('.')
|
||||
ext = str(info.get("ext", "")).strip().lstrip('.')
|
||||
break
|
||||
if ext:
|
||||
break
|
||||
@@ -605,8 +605,11 @@ class HydrusNetwork(Store):
|
||||
raise
|
||||
|
||||
def get_file(self, file_hash: str, **kwargs: Any) -> Path | str | None:
|
||||
"""Open file in browser via Hydrus client API URL."""
|
||||
import webbrowser
|
||||
"""Return a browser URL for the file.
|
||||
|
||||
IMPORTANT: this method must be side-effect free (do not auto-open a browser).
|
||||
Only explicit user actions (e.g. the get-file cmdlet) should open files.
|
||||
"""
|
||||
|
||||
debug(f"[HydrusNetwork.get_file] Starting for hash: {file_hash[:12]}...")
|
||||
|
||||
@@ -614,13 +617,6 @@ class HydrusNetwork(Store):
|
||||
base_url = str(self.URL).rstrip('/')
|
||||
access_key = str(self.API)
|
||||
browser_url = f"{base_url}/get_files/file?hash={file_hash}&Hydrus-Client-API-Access-Key={access_key}"
|
||||
debug(f"[HydrusNetwork.get_file] Opening URL: {browser_url}")
|
||||
|
||||
# Open in default browser
|
||||
webbrowser.open(browser_url)
|
||||
debug(f"[HydrusNetwork.get_file] Browser opened successfully")
|
||||
|
||||
# Return the URL string instead of downloading
|
||||
debug(f"[HydrusNetwork.get_file] Returning URL: {browser_url}")
|
||||
return browser_url
|
||||
|
||||
@@ -664,24 +660,28 @@ class HydrusNetwork(Store):
|
||||
if title != f"Hydrus_{file_hash[:12]}":
|
||||
break
|
||||
|
||||
# Determine extension from mime type
|
||||
# Prefer Hydrus-provided extension (e.g. ".webm"); fall back to MIME map if needed.
|
||||
mime_type = meta.get("mime", "")
|
||||
ext = ""
|
||||
if mime_type:
|
||||
from SYS.utils_constant import mime_maps
|
||||
for _category, extensions in mime_maps.items():
|
||||
for extension, mime in extensions.items():
|
||||
if mime == mime_type:
|
||||
ext = extension.lstrip(".")
|
||||
ext_raw = meta.get("ext")
|
||||
ext = str(ext_raw or "").strip().lstrip(".")
|
||||
if not ext and mime_type:
|
||||
try:
|
||||
from SYS.utils_constant import mime_maps
|
||||
for category in mime_maps.values():
|
||||
for _ext_key, info in category.items():
|
||||
if mime_type in info.get("mimes", []):
|
||||
ext = str(info.get("ext", "")).strip().lstrip(".")
|
||||
break
|
||||
if ext:
|
||||
break
|
||||
if ext:
|
||||
break
|
||||
except Exception:
|
||||
ext = ""
|
||||
|
||||
return {
|
||||
"hash": file_hash,
|
||||
"title": title,
|
||||
"ext": ext,
|
||||
"size": meta.get("size", 0),
|
||||
"size": meta.get("size"),
|
||||
"mime": mime_type,
|
||||
}
|
||||
|
||||
@@ -804,13 +804,31 @@ class HydrusNetwork(Store):
|
||||
if len(file_hash) != 64 or not all(ch in "0123456789abcdef" for ch in file_hash):
|
||||
return []
|
||||
|
||||
payload = client.fetch_file_metadata(hashes=[file_hash], include_file_url=True)
|
||||
payload = client.fetch_file_metadata(hashes=[file_hash], include_file_url=False)
|
||||
items = payload.get("metadata") if isinstance(payload, dict) else None
|
||||
if not isinstance(items, list) or not items:
|
||||
return []
|
||||
meta = items[0]
|
||||
url = meta.get("url") or []
|
||||
return list(url)
|
||||
meta = items[0] if isinstance(items[0], dict) else {}
|
||||
|
||||
raw_urls: Any = (
|
||||
meta.get("known_urls")
|
||||
or meta.get("urls")
|
||||
or meta.get("url")
|
||||
or []
|
||||
)
|
||||
if isinstance(raw_urls, str):
|
||||
val = raw_urls.strip()
|
||||
return [val] if val else []
|
||||
if isinstance(raw_urls, list):
|
||||
out: list[str] = []
|
||||
for u in raw_urls:
|
||||
if not isinstance(u, str):
|
||||
continue
|
||||
u = u.strip()
|
||||
if u:
|
||||
out.append(u)
|
||||
return out
|
||||
return []
|
||||
except Exception as exc:
|
||||
debug(f"Hydrus get_url failed: {exc}")
|
||||
return []
|
||||
|
||||
Reference in New Issue
Block a user