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:
+20 -1
View File
@@ -41,7 +41,24 @@ class MetadataScraper:
else _CACHE_INSERT_POSTGRESQL
)
async def fetch_metadata_and_aliases(self, media_type: str, media_id: str):
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)
@@ -144,11 +161,13 @@ 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.
"""
if id is None:
id, _, _ = parse_media_id(media_type, media_id)
provider = self._extract_provider(media_id)