summaryrefslogtreecommitdiff
path: root/CHANGELOG.md
diff options
context:
space:
mode:
authorWarry <FunWarry@users.noreply.github.com>2025-11-29 12:10:06 +0100
committerWarry <FunWarry@users.noreply.github.com>2025-11-29 12:10:06 +0100
commitd2c3e8ab8f1dcaec2b8be7ff9d1fb6c0df2d5296 (patch)
tree2cf51e324cca81e198758e57a1c6e5780627e255 /CHANGELOG.md
parent28a6fe5a7dbadc9532de228a539c47ec49ca4aa2 (diff)
downloadtidal-dl-ng-d2c3e8ab8f1dcaec2b8be7ff9d1fb6c0df2d5296.tar.gz
feat(hover): add track details preview on hover + fix all ruff violations
Implement comprehensive track information display on hover and resolve all code quality issues to achieve complete ruff compliance. MAJOR FEATURES: - Track details preview on hover with rich metadata display - Async BPM fetching with loading indicator - Enhanced metadata utilities with fuzzy matching - TIDAL API extras integration FILES MODIFIED: 15+ files (core, UI, tests, docs) RUFF COMPLIANCE: 0 errors (89+ violations resolved) - Fixed E999 syntax error in metadata_utils.py - Refactored 10+ complex functions (C901) - Updated error handling (S110, S112, SIM105) - Modernized type hints (UP038) - Fixed naming conflicts (A001, F811) BUG FIXES: - Added missing _on_update_cover() method (11 test failures) - Fixed BPM display and async loading - Improved thread safety TESTING: 30 passed, 1 skipped DOCUMENTATION: Windows PowerShell support, tox troubleshooting
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).