refactor: update metadata fetching methods to improve cache handling and streamline parameter usage

This commit is contained in:
g0ldyy
2026-01-08 15:32:48 +01:00
parent cbc13f7630
commit 1011cd1419
3 changed files with 31 additions and 13 deletions
+7 -8
View File
@@ -193,8 +193,8 @@ async def stream(
}
# Check if metadata is already cached
cached_metadata = await metadata_scraper.get_cached(
id, season if "kitsu" not in media_id else 1, episode
cached_metadata = await metadata_scraper.get_from_cache_by_media_id(
media_id, id, season, episode
)
# Quick check for "fresh" cached torrents to decide if we need to re-scrape.
@@ -240,7 +240,7 @@ async def stream(
cache_is_stale = fresh_cached_count == 0
# If both metadata and fresh torrents are cached, skip lock entirely
if cached_metadata is not None and fresh_cached_count > 0:
if cached_metadata is not None and not cache_is_stale:
logger.log("SCRAPER", f"🚀 Fast path: using cached data for {media_id}")
metadata, aliases = cached_metadata[0], cached_metadata[1]
# Variables for fast path
@@ -265,14 +265,14 @@ async def stream(
waited_for_other_scrape = True
# After waiting, re-check cached metadata
cached_metadata = await metadata_scraper.get_cached(
id, season if "kitsu" not in media_id else 1, episode
cached_metadata = await metadata_scraper.get_from_cache_by_media_id(
media_id, id, season, episode
)
if lock_acquired:
# We have the lock, scrape metadata normally
metadata, aliases = await metadata_scraper.fetch_metadata_and_aliases(
media_type, media_id
media_type, media_id, id, season, episode
)
elif cached_metadata is not None:
# Use cached metadata after waiting
@@ -280,7 +280,7 @@ async def stream(
else:
# No cached metadata available, fallback to scraping
metadata, aliases = await metadata_scraper.fetch_metadata_and_aliases(
media_type, media_id
media_type, media_id, id, season, episode
)
if metadata is None:
if lock_acquired and scrape_lock:
@@ -308,7 +308,6 @@ async def stream(
logger.log("SCRAPER", f"🔍 Starting search for {log_title}")
id, season, episode = parse_media_id(media_type, media_id)
media_only_id = id
debrid_service = config["debridService"]
+2 -2
View File
@@ -328,7 +328,7 @@ class BackgroundScraperWorker:
async def _scrape_movie(self, media_id: str, title: str, year: int):
metadata, aliases = await self.metadata_scraper.fetch_aliases_with_metadata(
"movie", media_id, title, year
"movie", media_id, title, year, id=media_id
)
manager = TorrentManager(
@@ -359,7 +359,7 @@ class BackgroundScraperWorker:
series_media_id = f"{media_id}:1:1"
metadata, aliases = await self.metadata_scraper.fetch_aliases_with_metadata(
"series", series_media_id, title, year, year_end
"series", series_media_id, title, year, year_end, id=media_id
)
for episode in episodes:
+22 -3
View File
@@ -41,8 +41,25 @@ class MetadataScraper:
else _CACHE_INSERT_POSTGRESQL
)
async def fetch_metadata_and_aliases(self, media_type: str, media_id: str):
id, season, episode = parse_media_id(media_type, media_id)
async def get_from_cache_by_media_id(
self, media_id: str, id: str, season: int | None, episode: int | None
):
provider = self._extract_provider(media_id)
cache_id = f"{provider}:{id}" if provider else id
cache_season = 1 if provider == "kitsu" else season
return await self.get_cached(cache_id, cache_season, episode)
async def fetch_metadata_and_aliases(
self,
media_type: str,
media_id: str,
id: str | None = None,
season: int | None = None,
episode: int | None = None,
):
if id is None:
id, season, episode = parse_media_id(media_type, media_id)
provider = self._extract_provider(media_id)
cache_id = f"{provider}:{id}" if provider else id
@@ -144,12 +161,14 @@ class MetadataScraper:
title: str,
year: int,
year_end: int = None,
id: str | None = None,
):
"""
Fetch only aliases for media when we already have the metadata from another source.
This method will cache the provided metadata along with the scraped aliases.
"""
id, _, _ = parse_media_id(media_type, media_id)
if id is None:
id, _, _ = parse_media_id(media_type, media_id)
provider = self._extract_provider(media_id)
cache_id = f"{provider}:{id}" if provider else id