Wrong assignment of Category id during update fixed
Redesigned playlist explorer with dedicated sidebar navigation, panel-based layout organization, and improved content categorization (Live, Video, Series)
- **B+Tree Storage Engine Optimizations**:
- Transitioned to a **Slotted Page Architecture**, significantly improving space utilization and allowing for variable-length keys.
- Implemented **Adaptive LZ4 Compression** for stored values, optimizing disk footprint.
- Refactored I/O layer for **Atomic Writes** and file locking, ensuring data integrity during parallel access or power loss.
- Introduced **B+Tree Compaction** to reclaim space after deletions or mass updates.
- Added **Batch Upsert** functionality for much higher throughput during mass inserts/updates.
- !BREAKING CHANGE! Redesigned Favorites handling: replaced the implicit `create_alias` flag with an explicit `add_favourite(group_name)` script function.
- Mapping & Filtering Enhancements:
- Integrated `match_as_ascii` flag for robust, accent-independent text matching (e.g., matching "Cinema" against "Cinéma").
- `match_as_ascii` is supported in mapping filters, mapper scripts, and favorites.
- `ValueProvider` and `ValueAccessor` now support on-the-fly deunicoding.
Breaking Changes
- Data format changed — you must clear your data folder and refresh playlists.
- Batch inputs now require a non-empty name (affects playlist UUIDs).
- New DB viewer options expose on-disk DB content (see CLI).
New Features
- Rich, typed stream metadata and improved info documents for Live/Video/Series.
- New PTT title parser extracting detailed title metadata (year, TMDB, episodes).
- CLI DB viewer: --dbx and --dbm to inspect local DB files.
Improvements
- Numeric channel numbers (tvg-chno), better playlist download/persistence, STRM naming/quality.
- MIME-aware resource caching and more permissive config handling for missing fields.
- BPlusTree Enhancements: Implemented a disk-backed, DFS iterator (BPlusTreeDiskIterator) and its owned variant (BPlusTreeDiskIteratorOwned) for efficient sequential access using the block cache.
- Repository Migration: Refactored m3u_repository.rs, xtream_repository.rs, and playlist_repository.rs to use B+ Trees directly.
- Iterator Refactoring: Updated m3u_playlist_iterator.rs and xtream_playlist_iterator.rs to utilize the new disk-backed iterators.
- Cleanup: Officially removed the IndexedDocument abstraction and associated files/constants, reducing architectural complexity.
- Verification: Confirmed full system integrity with a passing suite of 8 integration/unit tests in the release profile.
- Concurrency Safety: Implemented an advisory FileLock mechanism for all write operations, ensuring only one process can update the tree at a time.
- Strict Error Handling: Replaced all remaining unwrap and default fallback logic with explicit error propagation (?). Invariant violations now return descriptive DataCorruption or InvalidData errors instead of silent failures.
- Locking Recursion Fix: Resolved the recursion issue by allowing internal unlocked access for the compact process while maintaining external protection.
- Full Verification: All 7 integration tests passed, confirming that the system is now 100% memory-safe, crash-safe, and concurrency-robust.
- Atomic & Crash Resistant: Uses COW with a final 8-byte header swap.
- Space Efficient: Features a compact() method to reclaim space from old versions.
- LRU Block Cache: Implemented a manual cache using IndexMap (4MB capacity) to maintain fast query performance.
- Serialization Overflow Protection: Added critical checks to prevent data corruption if node metadata exceeds the 4KB block size.
- Stable Order Calculations: Refined calc_order with safety margins to ensure robust persistence.
- Surgical Overwrites: BPlusTreeUpdate now checks the number of 4KB blocks occupied by the old value. If the new value fits within those same blocks, it is overwritten in-place instead of appending to the end of the file.
- Zero Fragmentation: This optimization keeps the file size stable when updating existing records with same or smaller sized data.
- Predictable Growth: The file only grows to the end when a value truly exceeds its allocated space.
- Performance: We've eliminated redundant vec! allocations in the update loop by reusing internal buffers.