This commit is contained in:
2026-01-07 05:09:59 -08:00
parent edc33f4528
commit f0799191ff
10 changed files with 956 additions and 353 deletions

View File

@@ -135,6 +135,8 @@ class HydrusNetwork(Store):
instance_name=self.NAME
)
self._service_key_cache: Dict[str, Optional[str]] = {}
# Best-effort total count (used for startup diagnostics). Avoid heavy payloads.
# Some Hydrus setups appear to return no count via the CBOR client for this endpoint,
# so prefer a direct JSON request with a short timeout.
@@ -143,6 +145,30 @@ class HydrusNetwork(Store):
except Exception:
pass
def _get_service_key(self, service_name: str, *, refresh: bool = False) -> Optional[str]:
"""Resolve (and cache) the Hydrus service key for the given service name."""
normalized = str(service_name or "my tags").strip()
if not normalized:
normalized = "my tags"
cache_key = normalized.lower()
if not refresh and cache_key in self._service_key_cache:
return self._service_key_cache[cache_key]
client = self._client
if client is None:
self._service_key_cache[cache_key] = None
return None
try:
from API import HydrusNetwork as hydrus_wrapper
resolved = hydrus_wrapper.get_tag_service_key(client, normalized)
except Exception:
resolved = None
self._service_key_cache[cache_key] = resolved
return resolved
def get_total_count(self, *, refresh: bool = False) -> Optional[int]:
"""Best-effort total file count for this Hydrus instance.
@@ -1404,8 +1430,6 @@ class HydrusNetwork(Store):
where source is always "hydrus"
"""
try:
from API import HydrusNetwork as hydrus_wrapper
file_hash = str(file_identifier or "").strip().lower()
if len(file_hash) != 64 or not all(ch in "0123456789abcdef"
for ch in file_hash):
@@ -1441,9 +1465,8 @@ class HydrusNetwork(Store):
)
return [], "unknown"
# Extract tags using service name
service_name = "my tags"
service_key = hydrus_wrapper.get_tag_service_key(client, service_name)
service_name = kwargs.get("service_name") or "my tags"
service_key = self._get_service_key(service_name)
# Extract tags from metadata
tags = self._extract_tags_from_hydrus_meta(meta, service_key, service_name)
@@ -1495,14 +1518,7 @@ class HydrusNetwork(Store):
return True
service_key: Optional[str] = None
try:
from API import HydrusNetwork as hydrus_wrapper
service_key = hydrus_wrapper.get_tag_service_key(
client, service_name
)
except Exception:
service_key = None
service_key = self._get_service_key(service_name)
mutate_success = False
if service_key: