diff options
| author | Warry <FunWarry@users.noreply.github.com> | 2025-12-03 09:40:49 +0100 |
|---|---|---|
| committer | Warry <FunWarry@users.noreply.github.com> | 2025-12-03 09:40:49 +0100 |
| commit | 85f7e33b28985afd62a99d64b3e7a6883d62b072 (patch) | |
| tree | 07d59dae4ed8be7b03cc2058eefdcf73d69596f6 /CHANGELOG.md | |
| parent | 0facd232dc089b164acd7255983f8f078aaaa462 (diff) | |
| parent | c077e2b4977ea3219bce9a0f7c4518e0838baf87 (diff) | |
| download | tidal-dl-ng-85f7e33b28985afd62a99d64b3e7a6883d62b072.tar.gz | |
Merge branch 'feature/informations-window' into fusion-refafac-setings
# Conflicts:
# .gitignore
Diffstat (limited to 'CHANGELOG.md')
| -rw-r--r-- | CHANGELOG.md | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 36af948..d843aa6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,100 @@ +# v0.31.5 (Unreleased) + +## New Features + +- **Quick View on Hover** (GUI): Revolutionary hover preview system for track metadata + + - Tabbed interface with Details and Cover Art tabs + - Instant metadata display on hover (no clicks required) + - Debounced events (350ms) to prevent UI flickering + - Zero additional API calls - uses pre-loaded track data + - Displays: Title, Artists, Album, Codec, Bitrate, Duration, BPM, ISRC, Release Date, Popularity + - **BPM Loading Indicator**: Shows `⏳ Loading...` while fetching BPM asynchronously + - Graceful handling of missing metadata + +- **Enhanced BPM Support** (GUI): + - BPM now loaded asynchronously from TIDAL API raw JSON data + - Visual loading indicator (`⏳ Loading...`) while fetching + - Smart caching prevents redundant API calls + - Thread-safe callback system using Qt signals + - Displays actual BPM value (e.g., "136") when available + - Shows `—` when BPM is not provided by TIDAL + +## Improvements + +- **Code Cleanup & Optimization**: + + - **Removed all debug logs** from console output for production-ready experience + - Application now runs silently with clean console (only "All setup." message) + - Removed unused code: `_extract_from_raw()` method and redundant helper functions + - Simplified error handling with silent exceptions for expected errors (widgets deleted, etc.) + - **Removed 150+ lines of debug/logging code** across multiple files + +- **Code Refactoring & Architecture**: + + - Created `helper/metadata_utils.py` module for reusable metadata utilities + - Created `cache.py` module for LRU cache implementations + - Created `ui/media_details_helper.py` for media details population + ét - Created `gui_covers.py` with `CoverManager` class for cover management + - Removed ~340 lines of duplicated code from `info_tab_widget.py` + - Extracted helper functions: `safe_str()`, `find_attr()`, `search_in_data()`, `extract_names_from_mixed()` + - Improved maintainability and testability of metadata extraction logic + - **gui.py reduced from 2828 to ~2640 lines (-188 lines, -6.6%)** + - All cover-related logic centralized in CoverManager + +- **Performance & Stability**: + + - Thread-safe track extras cache with automatic cleanup + - **Cover pixmap cache (LRU, 100 entries)** for instant display on re-hover + - **Background cover preloading** when opening playlists (first 50 tracks) + - Smart cache checks before launching download threads + - Skip re-display if cover already shown (0ms overhead) + - Graceful shutdown handling for background workers + - Proper cleanup of event filters on application exit + - Better error handling for widget lifecycle and API failures + - Protected against RuntimeError when widgets deleted during shutdown + - **Fixed BPM display issue**: BPM callback now properly invoked in main thread using Qt signals + +- **UI/UX Improvements**: + - BPM field shows loading state instead of blank placeholder + - Immediate visual feedback when hovering tracks + - Smooth asynchronous data loading without blocking UI + - Cache system ensures instant display on re-hover + +## Bug Fixes + +- **Fixed BPM not displaying**: Corrected callback invocation from worker thread to main thread +- **Fixed Qt threading issues**: Replaced `QMetaObject.invokeMethod` with direct signal-based approach +- **Fixed "widgets deleted during extras apply"**: Changed from QueuedConnection to direct call +- **Fixed race conditions**: Proper thread-safe callback storage and invocation + +## Not Displayed (API Limitations) + +Certain metadata fields are **not displayed** because they are generally **not provided** by the public TIDAL API and are therefore **not applicable** in this interface: + +- ❌ Genres +- ❌ Label +- ❌ Producers +- ❌ Composers + +For details, see `docs/missing_metadata.md`. + +## Technical Details + +- New components: `InfoTabWidget`, `HoverManager`, `TrackInfoFormatter`, `CoverManager` +- Event filtering on tree view viewport for precise hover detection +- Signal-based architecture for decoupled communication +- Qt Signal (`s_invoke_callback`) for thread-safe callback invocation +- Worker thread pattern for async API calls without blocking UI +- Full conformance to AGENTS.md standards (type hints, docstrings, tests) + +## Documentation + +- Updated `docs/missing_metadata.md` with current API limitations +- Created `docs/feature_hover_info.md` with comprehensive feature documentation +- Added technical architecture diagrams and troubleshooting guides +- Documented BPM loading flow and caching strategy + # v0.4.11 - Fixes regarding empty metadata tags (also fixes #1). |
