mirror of
https://github.com/g0ldyy/comet.git
synced 2026-01-12 01:16:12 +01:00
refactor: update metadata fetching methods to improve cache handling and streamline parameter usage
This commit is contained in:
@@ -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"]
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user