Fix: Remove episodes from missing list on download/rescan
- Update _update_series_in_db to sync missing episodes bidirectionally - Add delete_by_series_and_episode method to EpisodeService - Remove downloaded episodes from DB after successful download - Clear anime service cache when episodes are removed - Fix tests to use 'message' instead of 'detail' in API responses - Mock DB operations in rescan tests
This commit is contained in:
@@ -393,6 +393,51 @@ class EpisodeService:
|
||||
)
|
||||
return result.rowcount > 0
|
||||
|
||||
@staticmethod
|
||||
async def delete_by_series_and_episode(
|
||||
db: AsyncSession,
|
||||
series_key: str,
|
||||
season: int,
|
||||
episode_number: int,
|
||||
) -> bool:
|
||||
"""Delete episode by series key, season, and episode number.
|
||||
|
||||
Used to remove episodes from the missing list when they are
|
||||
downloaded successfully.
|
||||
|
||||
Args:
|
||||
db: Database session
|
||||
series_key: Unique provider key for the series
|
||||
season: Season number
|
||||
episode_number: Episode number within season
|
||||
|
||||
Returns:
|
||||
True if deleted, False if not found
|
||||
"""
|
||||
# First get the series by key
|
||||
series = await AnimeSeriesService.get_by_key(db, series_key)
|
||||
if not series:
|
||||
logger.warning(
|
||||
f"Series not found for key: {series_key}"
|
||||
)
|
||||
return False
|
||||
|
||||
# Then delete the episode
|
||||
result = await db.execute(
|
||||
delete(Episode).where(
|
||||
Episode.series_id == series.id,
|
||||
Episode.season == season,
|
||||
Episode.episode_number == episode_number,
|
||||
)
|
||||
)
|
||||
deleted = result.rowcount > 0
|
||||
if deleted:
|
||||
logger.info(
|
||||
f"Removed episode from missing list: "
|
||||
f"{series_key} S{season:02d}E{episode_number:02d}"
|
||||
)
|
||||
return deleted
|
||||
|
||||
|
||||
# ============================================================================
|
||||
# Download Queue Service
|
||||
|
||||
Reference in New Issue
Block a user