chore: update watchlist features and fixes

This commit is contained in:
root
2026-02-28 09:22:57 +00:00
parent 4c96d0c1c5
commit 20bcc75b9b
64 changed files with 5193 additions and 77 deletions
+37 -6
View File
@@ -41,15 +41,28 @@ class EpisodeChecker:
# Import here to avoid circular imports
from app.downloaders import get_downloader
from urllib.parse import unquote
# Decode URL if it's encoded (handles double-encoded URLs)
anime_url = item.anime_url
try:
# Try to decode - if already decoded, this will be a no-op
decoded_url = unquote(anime_url)
# Handle double encoding
if '%' in decoded_url:
decoded_url = unquote(decoded_url)
anime_url = decoded_url
except Exception as e:
logger.warning(f"Could not decode URL: {e}, using original")
# Get the appropriate downloader
downloader = get_downloader(item.anime_url)
downloader = get_downloader(anime_url)
if not downloader:
logger.error(f"No downloader found for URL: {item.anime_url}")
logger.error(f"No downloader found for URL: {anime_url}")
return []
# Get episodes list
episodes = await downloader.get_episodes(item.anime_url, item.lang)
episodes = await downloader.get_episodes(anime_url, item.lang)
if not episodes:
logger.warning(f"No episodes found for {item.anime_title}")
return []
@@ -57,7 +70,14 @@ class EpisodeChecker:
# Filter new episodes
new_episodes = []
for ep in episodes:
ep_num = ep.get('episode_number', 0)
# Handle both 'episode' (from anime-sama) and 'episode_number' keys
ep_num_raw = ep.get('episode_number') or ep.get('episode')
# Convert to int (handles string episode numbers like "01", "02")
try:
ep_num = int(str(ep_num_raw).lstrip('0') or '0')
except (ValueError, TypeError):
ep_num = 0
if ep_num > item.last_episode_downloaded:
new_episodes.append(NewEpisodeInfo(
episode_number=ep_num,
@@ -113,15 +133,26 @@ class EpisodeChecker:
try:
# Import here to avoid circular imports
from app.downloaders import get_downloader
from urllib.parse import unquote
downloader = get_downloader(item.anime_url)
# Decode URL if it's encoded
anime_url = item.anime_url
try:
decoded_url = unquote(anime_url)
if '%' in decoded_url:
decoded_url = unquote(decoded_url)
anime_url = decoded_url
except Exception:
pass
downloader = get_downloader(anime_url)
# Download each new episode
for ep_info in episodes:
try:
logger.info(f"Downloading {item.anime_title} Episode {ep_info.episode_number}")
# Get download link
# Get download link - episode_url may be pipe-separated with multiple sources
download_link, filename = await downloader.get_download_link(ep_info.episode_url)
# Create download task