feat: 支持 TheMovieDb 识别缓存管理

This commit is contained in:
jxxghp
2026-07-13 09:48:08 +08:00
parent 51a7120c79
commit 29068a5846
4 changed files with 224 additions and 0 deletions

View File

@@ -27,6 +27,7 @@ class TmdbCache(metaclass=WeakSingleton):
_tmdb_cache_expire: bool = True
def __init__(self):
"""初始化 TMDB 识别缓存并恢复本地持久化数据。"""
self.maxsize = settings.CONF.douban
self.ttl = settings.CONF.meta
self.region = "__tmdb_cache__"
@@ -44,6 +45,33 @@ class TmdbCache(metaclass=WeakSingleton):
"""
with lock:
self._cache.clear()
self.save(force=True)
def list_items(self) -> list[dict]:
"""
返回可供管理界面展示的 TMDB 识别缓存列表。
"""
with lock:
cache_items = []
for key, value in self._cache.items():
if not isinstance(value, dict):
continue
media_type = value.get("type")
if not isinstance(media_type, MediaType):
try:
media_type = MediaType(media_type)
except (TypeError, ValueError):
media_type = None
cache_items.append({
"key": key,
"tmdb_id": value.get("id") or 0,
"title": value.get("title") or "",
"year": value.get("year") or "",
"media_type": media_type.to_agent() if media_type else "unknown",
"poster_path": value.get("poster_path") or "",
"backdrop_path": value.get("backdrop_path") or "",
})
return sorted(cache_items, key=lambda item: item["key"])
@staticmethod
def __get_key(meta: MetaBase) -> str:
@@ -71,6 +99,7 @@ class TmdbCache(metaclass=WeakSingleton):
redis_data = self._cache.get(key)
if redis_data:
self._cache.delete(key)
self.save(force=True)
return redis_data
return {}
@@ -156,4 +185,5 @@ class TmdbCache(metaclass=WeakSingleton):
pickle.dump(new_meta_data, f, pickle.HIGHEST_PROTOCOL) # type: ignore
def __del__(self):
"""实例释放前保存非 Redis 缓存。"""
self.save()