This commit is contained in:
2025-12-23 18:13:10 +01:00
parent 32dc893434
commit 9b071fe370
9 changed files with 172 additions and 5 deletions

View File

@@ -81,6 +81,7 @@ class AnimeSummary(BaseModel):
site: Provider site URL
folder: Filesystem folder name (metadata only)
missing_episodes: Episode dictionary mapping seasons to episode numbers
has_missing: Boolean flag indicating if series has missing episodes
link: Optional link to the series page (used when adding new series)
"""
key: str = Field(
@@ -103,6 +104,10 @@ class AnimeSummary(BaseModel):
...,
description="Episode dictionary: {season: [episode_numbers]}"
)
has_missing: bool = Field(
default=False,
description="Whether the series has any missing episodes"
)
link: Optional[str] = Field(
default="",
description="Link to the series page (for adding new series)"
@@ -117,6 +122,7 @@ class AnimeSummary(BaseModel):
"site": "aniworld.to",
"folder": "beheneko the elf girls cat (2025)",
"missing_episodes": {"1": [1, 2, 3, 4]},
"has_missing": True,
"link": "https://aniworld.to/anime/stream/beheneko"
}
}
@@ -181,11 +187,14 @@ async def list_anime(
_auth: dict = Depends(require_auth),
series_app: Any = Depends(get_series_app),
) -> List[AnimeSummary]:
"""List library series that still have missing episodes.
"""List all library series with their missing episodes status.
Returns AnimeSummary objects where `key` is the primary identifier
used for all operations. The `folder` field is metadata only and
should not be used for lookups.
All series are returned, with `has_missing` flag indicating whether
a series has any missing episodes.
Args:
page: Page number for pagination (must be positive)
@@ -204,6 +213,7 @@ async def list_anime(
- site: Provider site
- folder: Filesystem folder name (metadata only)
- missing_episodes: Dict mapping seasons to episode numbers
- has_missing: Whether the series has any missing episodes
Raises:
HTTPException: When the underlying lookup fails or params invalid.
@@ -264,11 +274,11 @@ async def list_anime(
)
try:
# Get missing episodes from series app
# Get all series from series app
if not hasattr(series_app, "list"):
return []
series = series_app.list.GetMissingEpisode()
series = series_app.list.GetList()
summaries: List[AnimeSummary] = []
for serie in series:
# Get all properties from the serie object
@@ -281,6 +291,9 @@ async def list_anime(
# Convert episode dict keys to strings for JSON serialization
missing_episodes = {str(k): v for k, v in episode_dict.items()}
# Determine if series has missing episodes
has_missing = bool(episode_dict)
summaries.append(
AnimeSummary(
key=key,
@@ -288,6 +301,7 @@ async def list_anime(
site=site,
folder=folder,
missing_episodes=missing_episodes,
has_missing=has_missing,
)
)

View File

@@ -565,7 +565,8 @@ class AniWorldApp {
site: anime.site,
folder: anime.folder,
episodeDict: episodeDict,
missing_episodes: totalMissing
missing_episodes: totalMissing,
has_missing: anime.has_missing || totalMissing > 0
};
});
} else if (data.status === 'success') {