This commit is contained in:
2026-02-07 14:58:13 -08:00
parent c8230cbb42
commit 60c2cc062c
9 changed files with 69 additions and 78 deletions

View File

@@ -14,6 +14,31 @@ import httpx
from SYS.logger import debug, log
from SYS.utils_constant import mime_maps
_KNOWN_EXTS = {
str(info.get("ext") or "").strip().lstrip(".")
for category in mime_maps.values()
for info in category.values()
if isinstance(info, dict) and info.get("ext")
}
def _resolve_ext_from_meta(meta: Dict[str, Any], mime_type: Optional[str]) -> str:
ext = str(meta.get("ext") or "").strip().lstrip(".")
if ext and ext not in _KNOWN_EXTS:
ext = ""
if ext.lower() == "ebook":
ext = ""
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 = str(info.get("ext", "")).strip().lstrip(".")
break
if ext:
break
return ext
from Store._base import Store
_HYDRUS_INIT_CHECK_CACHE: dict[tuple[str,
@@ -67,6 +92,16 @@ class HydrusNetwork(Store):
store_name = getattr(self, "NAME", None) or "unknown"
return f"[hydrusnetwork:{store_name}]"
def _append_access_key(self, url: str) -> str:
if not url:
return url
if "access_key=" in url:
return url
if not getattr(self, "API", None):
return url
separator = "&" if "?" in url else "?"
return f"{url}{separator}access_key={quote(str(self.API))}"
def __new__(cls, *args: Any, **kwargs: Any) -> "HydrusNetwork":
instance = super().__new__(cls)
name = kwargs.get("NAME")
@@ -1105,17 +1140,7 @@ class HydrusNetwork(Store):
if not isinstance(meta, dict):
continue
mime_type = meta.get("mime")
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 = str(info.get("ext",
"")
).strip().lstrip(".")
break
if ext:
break
ext = _resolve_ext_from_meta(meta, mime_type)
if _normalize_ext_filter(ext) != ext_filter:
continue
@@ -1168,6 +1193,8 @@ class HydrusNetwork(Store):
item_url = meta.get("known_urls") or meta.get("urls") or meta.get("url") or []
if not item_url:
item_url = meta.get("file_url") or f"{self.URL.rstrip('/')}/view_file?hash={hash_hex}"
if isinstance(item_url, str) and "/view_file" in item_url:
item_url = self._append_access_key(item_url)
results.append(
{
@@ -1181,7 +1208,7 @@ class HydrusNetwork(Store):
"tag": all_tags,
"file_id": file_id,
"mime": mime_type,
"ext": ext,
"ext": _resolve_ext_from_meta(meta, mime_type),
}
)
@@ -1312,15 +1339,7 @@ class HydrusNetwork(Store):
# Prefer Hydrus-provided extension (e.g. ".webm"); fall back to MIME map.
mime_type = meta.get("mime")
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 = str(info.get("ext", "")).strip().lstrip(".")
break
if ext:
break
ext = _resolve_ext_from_meta(meta, mime_type)
# Filter results based on query type
# If user provided explicit namespace (has ':'), don't do substring filtering
@@ -1331,6 +1350,8 @@ class HydrusNetwork(Store):
item_url = meta.get("known_urls") or meta.get("urls") or meta.get("url") or []
if not item_url:
item_url = meta.get("file_url") or f"{self.URL.rstrip('/')}/view_file?hash={hash_hex}"
if isinstance(item_url, str) and "/view_file" in item_url:
item_url = self._append_access_key(item_url)
if has_namespace:
# Explicit namespace search - already filtered by Hydrus tag search

View File

@@ -101,20 +101,7 @@ def _required_keys_for(store_cls: Type[BaseStore]) -> list[str]:
return keys
except Exception:
pass
# Legacy __new__.keys support
keys = getattr(store_cls.__new__, "keys", None)
if keys is None:
return []
if isinstance(keys, dict):
return [str(k) for k in keys.keys()]
if isinstance(keys, (list, tuple, set, frozenset)):
return [str(k) for k in keys]
if isinstance(keys, str):
return [keys]
raise TypeError(
f"Unsupported __new__.keys type for {store_cls.__name__}: {type(keys)}"
)
return []
# Store type names that have been converted to providers-only.