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
|
# Check if metadata is already cached
|
||||||
cached_metadata = await metadata_scraper.get_cached(
|
cached_metadata = await metadata_scraper.get_from_cache_by_media_id(
|
||||||
id, season if "kitsu" not in media_id else 1, episode
|
media_id, id, season, episode
|
||||||
)
|
)
|
||||||
|
|
||||||
# Quick check for "fresh" cached torrents to decide if we need to re-scrape.
|
# 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
|
cache_is_stale = fresh_cached_count == 0
|
||||||
|
|
||||||
# If both metadata and fresh torrents are cached, skip lock entirely
|
# 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}")
|
logger.log("SCRAPER", f"🚀 Fast path: using cached data for {media_id}")
|
||||||
metadata, aliases = cached_metadata[0], cached_metadata[1]
|
metadata, aliases = cached_metadata[0], cached_metadata[1]
|
||||||
# Variables for fast path
|
# Variables for fast path
|
||||||
@@ -265,14 +265,14 @@ async def stream(
|
|||||||
waited_for_other_scrape = True
|
waited_for_other_scrape = True
|
||||||
|
|
||||||
# After waiting, re-check cached metadata
|
# After waiting, re-check cached metadata
|
||||||
cached_metadata = await metadata_scraper.get_cached(
|
cached_metadata = await metadata_scraper.get_from_cache_by_media_id(
|
||||||
id, season if "kitsu" not in media_id else 1, episode
|
media_id, id, season, episode
|
||||||
)
|
)
|
||||||
|
|
||||||
if lock_acquired:
|
if lock_acquired:
|
||||||
# We have the lock, scrape metadata normally
|
# We have the lock, scrape metadata normally
|
||||||
metadata, aliases = await metadata_scraper.fetch_metadata_and_aliases(
|
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:
|
elif cached_metadata is not None:
|
||||||
# Use cached metadata after waiting
|
# Use cached metadata after waiting
|
||||||
@@ -280,7 +280,7 @@ async def stream(
|
|||||||
else:
|
else:
|
||||||
# No cached metadata available, fallback to scraping
|
# No cached metadata available, fallback to scraping
|
||||||
metadata, aliases = await metadata_scraper.fetch_metadata_and_aliases(
|
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 metadata is None:
|
||||||
if lock_acquired and scrape_lock:
|
if lock_acquired and scrape_lock:
|
||||||
@@ -308,7 +308,6 @@ async def stream(
|
|||||||
|
|
||||||
logger.log("SCRAPER", f"🔍 Starting search for {log_title}")
|
logger.log("SCRAPER", f"🔍 Starting search for {log_title}")
|
||||||
|
|
||||||
id, season, episode = parse_media_id(media_type, media_id)
|
|
||||||
media_only_id = id
|
media_only_id = id
|
||||||
|
|
||||||
debrid_service = config["debridService"]
|
debrid_service = config["debridService"]
|
||||||
|
|||||||
@@ -328,7 +328,7 @@ class BackgroundScraperWorker:
|
|||||||
|
|
||||||
async def _scrape_movie(self, media_id: str, title: str, year: int):
|
async def _scrape_movie(self, media_id: str, title: str, year: int):
|
||||||
metadata, aliases = await self.metadata_scraper.fetch_aliases_with_metadata(
|
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(
|
manager = TorrentManager(
|
||||||
@@ -359,7 +359,7 @@ class BackgroundScraperWorker:
|
|||||||
series_media_id = f"{media_id}:1:1"
|
series_media_id = f"{media_id}:1:1"
|
||||||
|
|
||||||
metadata, aliases = await self.metadata_scraper.fetch_aliases_with_metadata(
|
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:
|
for episode in episodes:
|
||||||
|
|||||||
@@ -41,8 +41,25 @@ class MetadataScraper:
|
|||||||
else _CACHE_INSERT_POSTGRESQL
|
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(
|
||||||
id, season, episode = parse_media_id(media_type, 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)
|
provider = self._extract_provider(media_id)
|
||||||
cache_id = f"{provider}:{id}" if provider else id
|
cache_id = f"{provider}:{id}" if provider else id
|
||||||
@@ -144,12 +161,14 @@ class MetadataScraper:
|
|||||||
title: str,
|
title: str,
|
||||||
year: int,
|
year: int,
|
||||||
year_end: int = None,
|
year_end: int = None,
|
||||||
|
id: str | None = None,
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
Fetch only aliases for media when we already have the metadata from another source.
|
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.
|
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)
|
provider = self._extract_provider(media_id)
|
||||||
cache_id = f"{provider}:{id}" if provider else id
|
cache_id = f"{provider}:{id}" if provider else id
|
||||||
|
|||||||
Reference in New Issue
Block a user