This commit implements the optional improvements identified during code review:
**Backend (animesama.py):**
- Replace all print() statements with logger calls for consistency
- Use logger.debug() for detailed debugging information
- Use logger.info() for general operational messages
- Use logger.warning() for non-critical issues
- Use logger.error() for error conditions
- Add comprehensive docstring to get_seasons() method:
- Document two-phase parallel loading strategy
- Explain performance characteristics (200x faster)
- Document timeout behavior and error handling
- Include usage examples and return value format
- Import logging module and initialize logger
**Frontend (anime.js & api.js):**
- Create providerSupportsSeasons() helper function in api.js:
- Uses provider configuration as single source of truth
- Eliminates hardcoded 'animesama' and 'anime-sama' checks
- Supports explicit supports_seasons flag in provider config
- Fallback to domain detection for unknown URLs
- Update renderAnimeCard() to use async helper function
- Update loadSeasonsForAnime() to use provider configuration
- Update displaySearchResults() to handle async card rendering
- Export helper function globally for use across modules
**Tests (test_anime_sama_seasons.py):**
- Fix import paths for new animesama.py location
- Update from app.downloaders.animesama to app.downloaders.anime_sites.animesama
- All tests passing with new structure
**Benefits:**
- Consistent logging throughout the codebase
- Better maintainability with configuration-driven behavior
- Improved documentation for complex async logic
- Easier to add new season-supporting providers in future
- No hardcoded provider checks in frontend code
All tests passing: 5/5 ✅
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Fix 4 critical issues identified in code review:
**Error Handling Improvements:**
- Replace bare except blocks with specific exception handlers
- Add logging for TimeoutException and ConnectError
- Prevent silent failures in season loading
- Remove misleading "0 episodes" on error
**Robustness Fixes:**
- Add safe None handling in title comparison (main.py)
Prevents crash when title is None
- Add URL validation before encodeURIComponent (anime.js)
Prevents crash when anime.url is undefined
- Fix unreachable code in retry logic (recommendations.py)
Preserve retry context in exception messages
**Changes:**
- animesama.py: Specific exception handling with print statements
- main.py: Safe None handling with (x.get('title') or '')
- anime.js: URL validation before encoding
- recommendations.py: Better exception messages with retry context
All fixes tested and working correctly.
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Major performance improvements and bug fixes for Anime-Sama integration:
**Backend Optimizations:**
- Parallel season loading with asyncio.gather() (200x faster: 50s → 0.25s)
- Filter out empty seasons to avoid unnecessary HTML parsing
- Reduced timeout from 5s to 3s for quick season checks
- Optimized fallback method to detect empty seasons instantly
**Frontend Fixes:**
- Fixed infinite "Chargement des saisons..." by ensuring DOM exists before loading
- Added 15-second timeout with retry functionality for season loading
- Staggered requests (500ms delay) to prevent overwhelming the server
- Duplicate request prevention with dataset.loading flag
**Search Improvements:**
- Separated anime and series provider searches
- Intelligent query variations (original, normalized, first word)
- Better error handling with user-friendly messages
**UI Fixes:**
- Added missing id="mainTabs" to navigation header
- Fixed tabs visibility for authenticated users
**Performance:** 10 seasons loaded in 0.25s instead of 50+ seconds
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Major improvements:
- Series TV support via FS7 provider with dedicated search endpoint
- Vidzy downloader now uses Playwright for JS obfuscation and ffmpeg for HLS streams
- Episode filenames properly named (Series Title - Episode X) instead of master.m3u8.mp4
- Duplicate download prevention: checks existing tasks before creating new ones
- Removed host preference system in favor of intelligent URL-based detection
Technical changes:
- Vidzy: Added Playwright extraction and M3U8→MP4 conversion with ffmpeg
- FS7: Episodes now use pipe format (video_url|series_url|episode_title)
- DownloadManager: Extract target_filename from pipe URL and prevent duplicates
- UI: New Series tab with search, recommendations, and releases sections
- Anime-Sama: Removed hardcoded host preferences, uses site's URL order
Generated with [Claude Code](https://claude.com/claude-code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>