9.6 KiB
9.6 KiB
Changelog
Document Purpose
This document tracks all notable changes to the Aniworld project.
What This Document Contains
- Version History: All released versions with dates
- Added Features: New functionality in each release
- Changed Features: Modifications to existing features
- Deprecated Features: Features marked for removal
- Removed Features: Features removed from the codebase
- Fixed Bugs: Bug fixes with issue references
- Security Fixes: Security-related changes
- Breaking Changes: Changes requiring user action
What This Document Does NOT Contain
- Internal refactoring details (unless user-facing)
- Commit-level changes
- Work-in-progress features
- Roadmap or planned features
Target Audience
- All users and stakeholders
- Operators planning upgrades
- Developers tracking changes
- Support personnel
Format
This changelog follows Keep a Changelog principles and adheres to Semantic Versioning.
[1.3.1] - 2026-02-22
Added
- Temp file cleanup after every download (
src/core/providers/aniworld_provider.py,src/core/providers/enhanced_provider.py): Module-level helper_cleanup_temp_file()removes the working temp file and any yt-dlp.partfragments after each download attempt — on success, on failure, and on exceptions (includingBrokenPipeErrorand cancellation). Ensures that no partial files accumulate in./Temp/across multiple runs. - Temp folder purge on server start (
src/server/fastapi_app.py): The FastAPI lifespan startup now iterates./Temp/and deletes every file and sub-directory before the rest of the initialisation sequence runs. If the folder does not exist it is created. Errors are caught and logged as warnings so that they never abort startup.
[1.3.0] - 2026-02-22
Added
- NFO tag completeness (
nfo_mapper.py): All 17 required NFO tags are now explicitly populated during creation:originaltitle,sorttitle,year,plot,outline,tagline,runtime,premiered,status,imdbid,genre,studio,country,actor,watched,dateadded,mpaa. src/core/utils/nfo_mapper.py: New module containingtmdb_to_nfo_model(),_extract_rating_by_country(), and_extract_fsk_rating(). Extracted fromNFOServiceto keep files under 500 lines and isolate pure mapping logic.- US MPAA rating:
_extract_rating_by_country(ratings, "US")now maps the US TMDB content rating to the<mpaa>NFO tag. NfoRepairService(src/core/services/nfo_repair_service.py): New service that detects incompletetvshow.nfofiles and triggers TMDB re-fetch. Providesparse_nfo_tags(),find_missing_tags(),nfo_needs_repair(), andNfoRepairService.repair_series(). 13 required tags are checked.perform_nfo_repair_scan()startup hook (src/server/services/initialization_service.py): New async function called during application startup. Iterates every series directory, checks whethertvshow.nfois missing required tags usingnfo_needs_repair(), and either queues the series for background reload (when abackground_loaderis provided) or callsNfoRepairService.repair_series()directly. Skips gracefully whentmdb_api_keyoranime_directoryis not configured.- NFO repair wired into startup lifespan (
src/server/fastapi_app.py):perform_nfo_repair_scan(background_loader)is called at the end of the FastAPI lifespan startup, afterperform_media_scan_if_needed, ensuring every existing series NFO is checked and repaired on each server start.
Changed
NFOService._tmdb_to_nfo_model()andNFOService._extract_fsk_rating()moved tosrc/core/utils/nfo_mapper.pyas module-level functionstmdb_to_nfo_model()and_extract_fsk_rating().src/core/services/nfo_service.pyreduced from 640 → 471 lines.
[Unreleased] - 2026-01-18
Added
- Cron-based Scheduler: Replaced the asyncio sleep-loop with APScheduler's
AsyncIOScheduler + CronTrigger- Schedule rescans at a specific time of day (
HH:MM) on selected days of the week - New
SchedulerConfigfields:schedule_time(default"03:00"),schedule_days(default all 7),auto_download_after_rescan(defaultfalse) - Old
interval_minutesfield retained for backward compatibility
- Schedule rescans at a specific time of day (
- Auto-download after rescan: When
auto_download_after_rescanis enabled, missing episodes are automatically queued for download after each scheduled rescan - Day-of-week UI: New day-of-week pill toggles (Mon–Sun) in the Settings → Scheduler section
- Live config reload: POST
/api/scheduler/configreschedules the APScheduler job without restarting the application - Enriched API response: GET/POST
/api/scheduler/confignow returns{"success", "config", "status"}envelope includingnext_run,last_run, andscan_in_progress
Changed
- Scheduler API response format: previously returned flat config; now returns
{"success": true, "config": {...}, "status": {...}} reload_config()is now a synchronous method accepting aSchedulerConfigargument (previously async, no arguments)- Dependencies: added
APScheduler>=3.10.4torequirements.txt
Fixed
- Series Visibility: Fixed issue where series added to the database weren't appearing in the API/UI
- Series are now loaded from database into SeriesApp's in-memory cache on startup
- Added
_load_series_from_db()call after initial database sync in FastAPI lifespan
- Episode Tracking: Fixed missing episodes not being saved to database when adding new series
- Missing episodes are now persisted to the
episodestable after the targeted scan - Episodes are properly synced during rescan operations (added/removed based on filesystem state)
- Missing episodes are now persisted to the
- Database Synchronization: Improved data consistency between database and in-memory cache
- Rescan process properly updates episodes: adds new missing episodes, removes downloaded ones
- All series operations now maintain database and cache synchronization
Technical Details
- Modified
src/server/fastapi_app.pyto load series from database after sync - Modified
src/server/api/anime.pyto save scanned episodes to database - Episodes table properly tracks missing episodes with automatic cleanup
Sections for Each Release
## [Version] - YYYY-MM-DD
### Added
- New features
### Changed
- Changes to existing functionality
### Deprecated
- Features that will be removed in future versions
### Removed
- Features removed in this release
### Fixed
- Bug fixes
### Security
- Security-related fixes
Unreleased
Changes that are in development but not yet released.
Added
- Comprehensive Test Suite: Created 1,070+ tests across 4 priority tiers
- TIER 1 (Critical): 159 tests - Scheduler, NFO batch operations, download queue, persistence
- TIER 2 (High Priority): 390 tests - JavaScript framework, dark mode, setup page, settings modal, WebSocket, queue UI
- TIER 3 (Medium Priority): 156 tests - WebSocket load, concurrent operations, retry logic, NFO performance, series parsing, TMDB integration
- TIER 4 (Polish): 426 tests - Internationalization (89), user preferences (68), accessibility (250+), media server compatibility (19)
- Frontend Testing Infrastructure: Vitest for unit tests, Playwright for E2E tests
- Security Test Coverage: Complete testing for authentication, authorization, CSRF, XSS, SQL injection
- Performance Validation: WebSocket load (200+ concurrent clients), batch operations, concurrent access
- Accessibility Tests: WCAG 2.1 AA compliance testing (keyboard navigation, ARIA labels, screen readers)
- Media Server Compatibility: NFO format validation for Kodi, Plex, Jellyfin, and Emby
Changed
- Updated testing documentation (TESTING_COMPLETE.md, instructions.md) to reflect 100% completion of all test tiers
Fixed
- Enhanced Anime Add Flow: Automatic database persistence, targeted episode scanning, and folder creation with sanitized names
- Filesystem utility module (
src/server/utils/filesystem.py) withsanitize_folder_name(),is_safe_path(), andcreate_safe_folder()functions Serie.sanitized_folderproperty for generating filesystem-safe folder names from display namesSerieScanner.scan_single_series()method for targeted scanning of individual anime without full library rescan- Add series API response now includes
missing_episodeslist andtotal_missingcount - Database transaction support with
@transactionaldecorator andatomic()context manager - Transaction propagation modes (REQUIRED, REQUIRES_NEW, NESTED) for fine-grained control
- Savepoint support for nested transactions with partial rollback capability
TransactionManagerhelper class for manual transaction control- Bulk operations:
bulk_mark_downloaded,bulk_delete,clear_allfor batch processing rotate_sessionatomic operation for secure session rotation- Transaction utilities:
is_session_in_transaction,get_session_transaction_depth get_transactional_sessionfor sessions without auto-commit
Changed
QueueRepository.save_item()now uses atomic transactions for data consistencyQueueRepository.clear_all()now uses atomic transactions for all-or-nothing behavior- Service layer documentation updated to reflect transaction-aware design
Fixed
- Scan status indicator now correctly shows running state after page reload during active scan
- Improved reliability of process status updates in the UI header
Version History
To be documented as versions are released.