summaryrefslogtreecommitdiff
path: root/CHANGELOG.md
diff options
context:
space:
mode:
authorWarry <FunWarry@users.noreply.github.com>2025-12-03 09:40:49 +0100
committerWarry <FunWarry@users.noreply.github.com>2025-12-03 09:40:49 +0100
commit85f7e33b28985afd62a99d64b3e7a6883d62b072 (patch)
tree07d59dae4ed8be7b03cc2058eefdcf73d69596f6 /CHANGELOG.md
parent0facd232dc089b164acd7255983f8f078aaaa462 (diff)
parentc077e2b4977ea3219bce9a0f7c4518e0838baf87 (diff)
downloadtidal-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.md97
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).