Warry
f413240b51
feat: Enhance playlist management and GUI logic
...
- Improved playlist item fetching by adding robust pagination and low-level request hooks for better testing and flexibility.
- Refactored track ID extraction logic into reusable helpers for clarity.
- Improved initialization for dialog components to avoid circular dependencies in the GUI.
- Added new unit tests to validate playlist operations, including track addition/removal and API integration.
- Updated metadata functions to simplify dictionary access using `.get` for better readability.
- Ensured PySide6 system dependencies are installed in GitHub Actions to address CI compatibility issues.
- Streamlined UI package initialization to improve modularity and robustness of imports.
2025-12-29 20:05:34 +01:00
Warry
296c6c7d6b
feat: Add playlist management functionality and compliance checks
...
- Introduced a new "Playlists" column in results view with visual indicators for membership.
- Added `playlist_api.py` to handle playlist-related operations (fetch, add, remove tracks).
- Implemented `PlaylistManagerDialog` for seamless playlist addition/removal with caching.
- Integrated compliance check script (`check_agents_compliance.py`) for ensuring coding standards.
- Added extensive documentation (`playlist_membership_manager.md`) covering architecture and flow.
- Updated GUI logic and QStandardItemModel setup to include playlist data.
- Included unit tests for playlist management components and API.
2025-12-29 17:37:39 +01:00
Warry
c1d40619aa
Merge branch 'feature/json-downloaded' into fusion-refac-&-info
...
# Conflicts:
# .gitignore
# README.md
# tidal_dl_ng/gui.py
2025-12-03 11:41:18 +01:00
Warry
85f7e33b28
Merge branch 'feature/informations-window' into fusion-refafac-setings
...
# Conflicts:
# .gitignore
2025-12-03 09:40:49 +01:00
Warry
121dbb788d
feat: refactor settings UI with category navigation and add Delimiters page
...
Closes #640
## Changes
### UI Refactoring
- Replace monolithic settings dialog with category-based navigation
- Add QListWidget (lw_categories) for category selection on the left
- Add QStackedWidget (sw_categories) for content pages on the right
- Organize settings into 5 distinct pages:
- Flags (14 checkboxes)
- Quality (3 combo boxes)
- Numbers (2 spin boxes)
- Paths & Formats (7 line edits + 2 browse buttons)
- Delimiters (4 line edits) — NEW
### New Feature: Delimiters Category
- Add customizable separators for artists in metadata and filenames:
- metadata_delimiter_artist
- metadata_delimiter_album_artist
- filename_delimiter_artist
- filename_delimiter_album_artist
- Auto-integration with DialogPreferences via parameters_line_edit
- Line edits with max width 100px for compact display
### Styling
- Apply dark theme to settings dialog:
- Category list: #2b2b2b background, #3d5a80 selection, #3a3a3a hover
- Settings area: #333333 background, styled GroupBoxes (#3a3a3a)
- Light text (#e0e0e0) for better contrast
- Add spacing property (6px) to category list for better readability
- Style QListWidget items with padding (4px 3px) and margin (2px 0px)
### Testing
- Add comprehensive test suite (61 tests total):
- test_settings_ui.py: UI and basic integration (14 tests)
- test_settings_dialog_structure.py: detailed structure validation (20 tests)
- test_dialog_preferences_integration.py: DialogPreferences integration (14 tests)
- test_delimiters_category.py: new Delimiters page validation (13 tests)
- Fix ruff issues (F841, S108) in test files
- All tests passing with 100% success rate
### Documentation
- Add docs/refactor_settings_ui.md: comprehensive refactor overview
- Add docs/delimiters_category.md: Delimiters feature documentation
- Add docs/ui_styles.md: dark theme style guide
- Add docs/testing_summary.md: testing overview and commands
### Code Quality
- Apply ruff/black/pyupgrade via pre-commit hooks
- Fix F841 (unused variable) in test_dialog_preferences_integration.py
- Fix S108 (insecure temp path) using Path.home() in test_settings_ui.py
- End-of-file fixes applied automatically
## Files Modified
- tidal_dl_ng/ui/dialog_settings.ui (complete restructure)
- tidal_dl_ng/ui/dialog_settings.py (auto-generated from .ui)
- tidal_dl_ng/dialog.py (add 4 delimiter params + Delimiters category)
- tests/* (4 new test files with 61 tests)
- docs/* (4 new documentation files)
## Impact
- Improved UX: intuitive category navigation, better visual organization
- Extensibility: easy to add new settings pages/categories
- Quality: comprehensive test coverage ensures robustness
- User flexibility: customizable separators for metadata and filenames
## Technical Notes
- QStackedWidget pages indexed 0-4 matching category list order
- Navigation via QListWidget::currentRowChanged signal
- Automatic save/load through existing DialogPreferences methods
- No breaking changes to existing settings or configuration
## Testing Commands
```powershell
poetry run pre-commit run -a
poetry run pytest -q
2025-11-30 15:37:32 +01:00
Warry
4f2eaececc
feat: Add download history tracking with duplicate prevention
...
Implement comprehensive download history system with JSON persistence
and duplicate prevention capabilities.
Features:
- Persistent JSON-based download history with atomic writes
- Duplicate prevention toggle in Tools menu
- Thread-safe operations with proper locking
- Automatic corruption recovery with backup creation
- Import/Export functionality for history portability
- Statistics view grouped by source (playlist, album, mix)
- Green console messages for improved visibility
- Custom exception handling for better error reporting
Technical Details:
- HistoryService singleton with O(1) track lookups
- Track-centric JSON structure for performance
- Atomic file operations to prevent data corruption
- Custom HistoryFormatError exception class
- Complexity reduction through helper methods
- Full AGENTS.md compliance (ruff, black, type hints)
UI Changes:
- Added "Tools" menu with two actions:
- "View Download History..." - Opens history dialog
- "Prevent Duplicate Downloads" - Toggle with persistence
- New Download History dialog with:
- Tree view grouped by source
- Statistics display
- Import/Export buttons
- Clear history option
- Open folder functionality
Files Added:
- tidal_dl_ng/history.py (438 lines)
- tidal_dl_ng/dialog_history.py (325 lines)
- tidal_dl_ng/ui/dialog_history.py
- tidal_dl_ng/ui/dialog_history.ui
- tests/test_history_service.py (38 tests)
- tests/test_download_duplicate_prevention.py (10 tests)
- tests/test_gui_duplicate_prevention.py (22 tests)
- tests/test_logger_configuration.py (20 tests)
- FEATURE_DOCUMENTATION.md (900+ lines)
- tests/README.md
- CODE_QUALITY_COMPLIANCE.md
- FINAL_SUMMARY.md
Files Modified:
- tidal_dl_ng/download.py - History integration
- tidal_dl_ng/gui.py - Tools menu and handlers
- tidal_dl_ng/logger.py - Green INFO messages
Testing:
- 91 tests total, all passing (100% pass rate)
- Full test coverage for all new functionality
- Thread safety validated with concurrent tests
- Corruption recovery tested
- Import/Export functionality verified
Quality:
- Zero ruff violations (full AGENTS.md compliance)
- All pre-commit hooks passing
- Type hints on all functions
- Google-style docstrings throughout
- Black formatted
- Security reviewed (subprocess usage annotated)
Performance:
- O(1) track existence checks via dict
- Atomic writes prevent corruption
- Minimal memory footprint (~100 bytes per track)
- Fast startup (<50ms for 1000 tracks)
Breaking Changes: None
Backward Compatible: Yes (legacy format auto-migrated)
2025-11-29 18:04:54 +01:00
Warry
8905ac7e75
feat: enable rich text links for metadata fields and add search functionality
...
- Introduced clickable metadata links (tracks, albums, artists, playlists, videos).
- Left-click triggers in-app search; Ctrl+click or right-click opens browser search.
- Enhanced label interactions and added tooltips for actionable fields.
- Simplified artist, album, and playlist rendering with rich links.
- Extended search functionality with URL-safe encoding and type mapping.
2025-11-29 14:15:51 +01:00
Warry
c4d999e8dc
fix: correct find_attr calls to use variadic args instead of list
...
After refactoring find_attr signature from list to *args, forgot to update
the call sites. Track number and other metadata were not displaying due to
passing list instead of individual arguments.
2025-11-29 12:30:43 +01:00
Warry
d2c3e8ab8f
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
2025-11-29 12:10:06 +01:00
Robert Honz
23d1b61e1e
chore(ui): 🎨 update application icons for improved visual consistency
...
* Replaced multiple icon files in the UI.
* Ensured all icon sizes are updated to maintain a cohesive look across the application.
2025-10-22 22:42:29 +02:00
Robert Honz
8f0c784187
refactor(gui): ✨ update album download options and improve session validation
...
* Added a new action to download all albums in a playlist.
* Removed the deprecated `validate_session` method and replaced it with a direct call to `self.tidal.session.check_login()`.
* Adjusted the UI layout in `dialog_settings` to accommodate new options and improved sizing.
2025-10-22 21:52:20 +02:00
exislow and GitHub
b485292807
Merge pull request #596 from Winman486/fix/rate-limiting-playlist-downloads
...
Fix/rate limiting playlist downloads
2025-10-22 21:38:30 +02:00
Rikrdoga
e266149684
Move credentials to constants, improve docs (tidal_obj), and clean up Atmos legacy code
2025-10-21 11:58:34 -06:00
Rikrdoga
cb32c2fa8b
Refactor Dolby Atmos Implementation
2025-10-20 20:23:14 -06:00
Winman486
3c835c2d19
Merge upstream/master and resolve conflicts
...
- Resolved conflict in dialog_settings.py (kept both cb_use_primary_album_artist and cb_mark_explicit checkboxes)
- Fixed code quality issues found by make check:
* Removed duplicate on_download_album_from_track function (F811)
* Updated isinstance calls to use X | Y syntax instead of (X, Y) (UP038)
* Fixed unused loop variable album_stub (B007)
* Applied automatic formatting fixes (black, prettier, trailing whitespace)
- Only remaining issue is C901 complexity warning in on_download_all_albums_from_playlist (expected per maintainer feedback)
2025-10-20 16:12:46 -05:00
Rikrdoga
2c2cc0283a
Refactor Dolby Atmos feature to be internal and seamless
2025-10-20 10:47:43 -06:00
Rikrdoga
302b552ed7
Add support for Dolby Atmos
2025-10-20 10:33:01 -06:00
Robert Honz
8c361249ed
fix(cfg): 🐛 update mark_explicit default value and improve help text
...
* Set default value of `mark_explicit` to `False`.
* Update help text to clarify that marking explicit tracks applies only to metadata.
2025-10-20 08:20:20 +02:00
Trubo
2402550884
Add a checkbox to settings that toggles the explicit symbol in track titles
2025-10-19 18:16:19 -05:00
Winman486
ac3bf51c56
feat(gui): add 'Download Full Album', 'Download All Albums', and 'Single album folder (primary artist)' preference
2025-10-17 15:17:02 -05:00
Robert Honz
2594232cb9
Queue button should indicate the action that will occur when clicked — currently it shows present state
...
Fixes #561
2025-10-17 11:55:39 +02:00
Robert Honz
ef507b56ed
feat(gui): enhance app icons with multi-resolution support
...
Improves the application's icon handling by introducing multi-resolution
support, replacing a single PNG file with multiple resolution-specific icons.
- ✨ **Added** multiple resolution icons (16x16, 32x32, 48x48, 64x64, 256x256, 512x512).
- 🔄 **Updated** GUI setup to use multi-resolution icons for better scalability.
- 🗑️ **Removed** the old single-resolution `icon.png`.
This update ensures better compatibility and visual quality across
different platforms and screen resolutions.
2025-08-12 16:02:41 +02:00
Robert Honz
0684994850
✨ Downloads can be now paused / resumed. Fixes #149 & 324
...
👷 Shutdown is handled more gracefully.
2025-03-03 09:31:37 +01:00
Robert Honz
2055606d0b
👷 File extension guesser improved. Fixes #322
2025-01-12 17:42:09 +01:00
Robert Honz
107afd5e3a
✨ Config options created for symlinking tracks and playlist creation.
2024-12-16 08:14:39 +01:00
Robert Honz
5768edacc5
✨ Multithreaded downloads implemented (for Playlists, Albums etc.). Fixes #180
2024-12-15 23:35:10 +01:00
Robert Honz
b8091e233b
✨ Album track number padding can be set. Fixes #142
2024-12-15 20:37:06 +01:00
Robert Honz
33a30537e9
✨ Merge with master.
2024-11-29 17:41:25 +01:00
Robert Honz
5f9cc39ba7
✨ GUI login updated to device mode.
2024-11-13 13:26:46 +01:00
Robert Honz
c1a102f646
✨ Removed complex skipping options in favor of a faster duplicates check / skipping of already present items without download delay.
2024-11-13 09:09:00 +01:00
Robert Honz
618b16257b
✨ Backend and GUI changed to device login. Login dialog needs to be threaded / non blocking.
2024-11-12 19:15:33 +01:00
Robert Honz
24d75a7c20
✨ Options for album art added to GUI. Fixes #125
2024-11-11 10:17:40 +01:00
Robert Honz
f41d65d7d3
Since TIDAL has remove MQA (HI_RES), all traces of MQA have been removed here.
2024-11-06 15:01:18 +01:00
Robert Honz
f46e9cf3e0
✨ Results tree uses View component and displays filter input fields.
2024-05-14 07:31:57 +02:00
Robert Honz
b07c3374b2
✨ FLAC can be extracted from MP4 containers (see options). Downgrade on HI_RES download is possible (see options). Fixes #93 #86
2024-04-21 19:18:05 +02:00
Robert Honz
1ed07912ad
✨ Can add multiple media lists to download queue.
2024-04-01 19:02:00 +02:00
Robert Honz
dd6fb1e85f
✨ Cosmetic changes.
2024-04-01 16:06:02 +02:00
Robert Honz
4478b66c24
✨ Able to remove single items from download queue.
2024-04-01 12:44:41 +02:00
Robert Honz
8e7209f693
✨ Cover will be shown for download queue.
2024-04-01 12:26:10 +02:00
Robert Honz
7df41edc01
✨ Can remove all queue items and finished queue items.
2024-04-01 12:17:46 +02:00
Robert Honz
9dd8f6c856
Merge branch '71-feature-show-queued-downloads'
...
* 71-feature-show-queued-downloads:
✨ Lists can also be downloaded using the "Download List" button.
👌 Reduced network traffic for covers.
✨ Display cover in info area.
✨ Use `Album.image()` to get cover url.
✨ Software named explicitly.
✨ Info pane will be initialized correctly.
✨ Added info pane to GUI.
# Conflicts:
# tidal_dl_ng/gui.py
2024-03-29 12:32:11 +01:00
Robert Honz
ead4b8a905
✨ Lists can also be downloaded using the "Download List" button.
2024-03-29 12:24:42 +01:00
Robert Honz
77ef9ef75e
✨ Can explicitly set ffmpeg path.
2024-03-29 11:17:30 +01:00
Robert Honz
9e27dd39b9
✨ Updates will be automatically checked on startup and can also be checked manually. Version dialog is used to display update information. Fixes #76
2024-03-28 07:44:47 +01:00
Robert Honz
f7361b3078
✨ Use Album.image() to get cover url.
2024-03-25 16:53:27 +01:00
Robert Honz
10e2f39196
✨ Added info pane to GUI.
2024-03-23 14:00:33 +01:00
Robert Honz
12d3360c12
🧑🔧 ️ GUI buttons correctly prefixed with pb.
2024-03-22 15:02:26 +01:00
Robert Honz
4ed2a67e4c
✨ GUI user lists can be reloaded. Logout is possible.
2024-02-05 06:31:18 +01:00
Robert Honz
c71a2bdb0b
✨ Preferences dialog added. Show settings.
2024-02-04 12:19:40 +01:00
Robert Honz
c1442c8942
✨ Login URL will get wrapped.
2024-02-03 09:56:02 +01:00