Add Step 4 fallback: generate key from folder name
- SerieScanner: generate key from folder when no key/data files exist - Handle edge cases: non-Latin characters, special symbols in folder names - anime_service: expose loading_status and loading_error fields - Update tests to match new fallback behavior
This commit is contained in:
@@ -27,6 +27,7 @@ from src.core.providers.base_provider import Loader
|
||||
|
||||
from src.server.database.connection import get_sync_session
|
||||
from src.server.database.service import AnimeSeriesService, EpisodeService
|
||||
from src.core.utils.key_utils import generate_key_from_folder
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
error_logger = logging.getLogger("error")
|
||||
@@ -708,6 +709,31 @@ class SerieScanner:
|
||||
)
|
||||
return Serie.load_from_file(serie_file)
|
||||
|
||||
# Step 4: Generate key from folder name as last resort
|
||||
# This handles edge cases like non-Latin characters or special symbols
|
||||
try:
|
||||
generated_key = generate_key_from_folder(folder_name)
|
||||
year_from_folder = self._extract_year_from_folder_name(folder_name)
|
||||
logger.info(
|
||||
"Generated key for folder '%s' -> key='%s'",
|
||||
folder_name,
|
||||
generated_key
|
||||
)
|
||||
return Serie(
|
||||
key=generated_key,
|
||||
name="", # Name will be fetched from provider if needed
|
||||
site="aniworld.to",
|
||||
folder=folder_name,
|
||||
episodeDict=dict(),
|
||||
year=year_from_folder
|
||||
)
|
||||
except Exception as exc:
|
||||
logger.warning(
|
||||
"Failed to generate key for folder '%s': %s",
|
||||
folder_name,
|
||||
exc
|
||||
)
|
||||
|
||||
return None
|
||||
|
||||
def __get_episode_and_season(self, filename: str) -> tuple[int, int]:
|
||||
|
||||
@@ -528,6 +528,8 @@ class AnimeService:
|
||||
"tmdb_id": db_series.tmdb_id,
|
||||
"tvdb_id": db_series.tvdb_id,
|
||||
"series_id": db_series.id,
|
||||
"loading_status": db_series.loading_status,
|
||||
"loading_error": db_series.loading_error,
|
||||
}
|
||||
|
||||
# Build episodeDict from DB, skipping is_downloaded=True
|
||||
@@ -596,6 +598,8 @@ class AnimeService:
|
||||
"tmdb_id": nfo_data.get("tmdb_id"),
|
||||
"tvdb_id": nfo_data.get("tvdb_id"),
|
||||
"series_id": nfo_data.get("series_id"),
|
||||
"loading_status": nfo_data.get("loading_status"),
|
||||
"loading_error": nfo_data.get("loading_error"),
|
||||
}
|
||||
result_list.append(series_dict)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user