8.5 KiB
8.5 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.
[Unreleased] - 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.
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.