Warry
30476d3c78
chore: Remove outdated git package source from poetry.lock
2025-12-03 14:42:33 +01:00
Warry
4dec762168
Initial snapshot for Poetry lock
2025-12-03 13:50:34 +01:00
Warry
d622fe4cd1
refactor: Improve hover manager cleanup and event filtering logic
2025-12-03 13:20:08 +01:00
Warry
7b70f9e2d3
refactor: Improve hover manager cleanup and event filtering logic
2025-12-03 12:54:38 +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
c077e2b497
Merge remote-tracking branch 'warry-github/master' into feature/informations-window
...
# Conflicts:
# CONTRIBUTING.md
# README.md
2025-12-03 09:35:42 +01:00
Warry
e89be804fd
Merge remote-tracking branch 'warry-github/master' into feature/json-downloaded
...
# Conflicts:
# README.md
2025-12-03 09:32:08 +01:00
Warry
0facd232dc
Merge remote-tracking branch 'warry-github/master' into feature/refactor-settings-ui
2025-12-03 09:25:37 +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
exislow and GitHub
45977986df
Merge pull request #668 from jotalevi/hide-ffmpeg-flash
...
fix(ffmpeg): prevent terminal window flash on Windows during media conversion
2025-11-29 17:05:03 +01:00
exislow and GitHub
98da6bc795
Merge pull request #665 from jotalevi/clarity-check-and-grammar-fixes
...
Clarity and grammar
2025-11-29 17:03:45 +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
E.J. Talevi
4b9a4062d2
fix(ffmpeg): prevent terminal window flash on Windows during media conversion
2025-11-26 04:48:30 -03:00
E.J. Talevi
adfa0c6bb3
fix(ffmpeg): prevent terminal window flash on Windows during media conversion
2025-11-26 04:42:29 -03:00
E.J. Talevi
0e74ac32d6
Added clarity and grammar fixes to documentation and to some strings on the program itself.
2025-11-25 23:56:56 -03:00
exislow and GitHub
28a6fe5a7d
Merge pull request #647 from exislow:612-adding-of-artist_id
...
feat(media): ✨ add support for retrieving album and track artist IDs
2025-11-13 08:53:45 +01:00
Robert Honz
017aa17155
feat(media): ✨ add support for retrieving album and track artist IDs
...
* Implemented logic to return `album_artist_id` for `Album` instances.
* Added functionality to retrieve `track_artist_id` for `Track` instances.
2025-11-13 08:52:58 +01:00
Robert Honz
b9ede6603e
🌟 Version bumped to v0.31.4
2025-11-13 08:35:39 +01:00
Robert Honz
5cdf482ef9
refactor(downloader): 🔧 reorganize TrackStreamInfo class and imports
...
* Moved `TrackStreamInfo` class definition from `download.py` to `downloader.py`.
* Removed redundant `dataclass` import from `download.py`.
* Updated import statements to maintain clarity and organization.
2025-11-13 08:33:59 +01:00
exislow and GitHub
0939bc0742
Merge pull request #626 from Rikrdoga:Dolby_Atmos
...
Fix(Atmos): Resolve Race Condition and Optimize Session Switching for Atmos Downloads
2025-11-13 08:32:26 +01:00
Rikrdoga
4f0026fada
Create TrackStreamInfo dataclass & Add proper docstrings
2025-11-12 15:18:35 -06:00
exislow and GitHub
048cb13ad3
Merge pull request #646 from exislow:download-context-menu
...
Download-context-menu
2025-11-12 15:34:27 +01:00
Robert Honz
d06dfa90a8
feat(gui): ✨ add functionality to download albums from favorites
...
- Introduced a new context menu option to download all albums from selected favorites.
- Implemented methods to handle downloading albums from favorite albums, artists, and tracks.
- Enhanced logging for better tracking of the download process and errors.
2025-11-12 15:31:44 +01:00
Robert Honz
03266db087
feat(gui): ✨ add favorites download functionality
...
* Implemented `on_download_favorites` method to allow users to download all items from a favorites category.
* Added context menu option for downloading all items from favorites.
* Enhanced error handling and logging for better user feedback.
2025-11-12 15:27:05 +01:00
Robert Honz
3f936038ae
feat(gui): ✨ add folder support for media downloads
...
* Implemented context menu options for downloading playlists and albums from folders.
* Added methods to fetch playlists and tracks from a folder.
* Enhanced user experience by allowing bulk downloads from folder structures.
2025-11-12 15:20:11 +01:00
exislow and GitHub
be59cf1684
Merge pull request #644 from exislow:folders
...
feat(gui): ✨ enhance user media handling with folder support
2025-11-12 15:06:18 +01:00
Robert Honz
9baea9b82c
feat(gui): ✨ enhance user media handling with folder support
...
* Updated `user_media_lists` to return a dictionary containing both `playlists` and `mixes`, including `Folder` objects.
* Modified `on_populate_tree_lists` to handle `Folder` items and display their contents.
* Introduced new methods for loading and displaying folder contents in the user interface.
2025-11-12 15:05:20 +01:00
Robert Honz
554a42860e
chore: 📝 add comprehensive coding standards and guidelines
...
* Introduced a new `AGENTS.md` file containing detailed coding standards for the project.
* Covers topics such as Python version support, naming conventions, type annotations, error handling, and best practices.
* Aims to improve code quality, maintainability, and team consistency.
2025-11-12 14:18:41 +01:00
exislow and GitHub
ab10926656
Merge pull request #643 from exislow/pagination
...
chore: 🔧 update function names in FAVORITES for consistency
2025-11-12 14:09:57 +01:00
Robert Honz
f488316a42
chore: 🔧 update function names in FAVORITES for consistency
...
* Changed `function_name` for `fav_tracks`, `fav_artists`, and `fav_albums` to use paginated versions.
* Ensures uniformity in function naming across favorites.
2025-11-12 14:09:22 +01:00
exislow and GitHub
df2b5e1ef9
Merge pull request #625 from talios/feature/klrrwxuwvrty
...
Add format place holder for album_type
2025-11-12 09:37:11 +01:00
Mark Derricutt
5d573c57c9
Add format place holder for album_type
...
This commit exposes the album type as a configuration placeholder.
Fixes #595
Change-Id: Ife8832534861fc01da5d68c37be6c7476a6a6964
2025-11-05 09:21:00 +13:00
Rikrdoga
af58b0a83d
Resolve Race Condition and Optimize Session Switching for Atmos Downloads
2025-11-04 12:36:27 -06:00
exislow and GitHub
6e665bcd45
Merge pull request #613 from jbrower2/patch-1
...
Fix album_artist substitution
2025-10-26 15:37:35 +01:00
Jeff Brower and GitHub
be43c3f616
Fix album_artist substitution
...
For albums that are listed with a non-"main" artist first (ex: 37691520), the album artist replacement was returning an empty string. This isn't a problem with the default settings, but if you format albums into `{album_artist}/...`, the path becomes `/...` in this case, and is interpreted as an absolute path instead of a relative one, causing the download to fail.
This changes the logic so that if the `first_only` flag is passed, it will return after the first artist is actually added to the list, no longer returning an empty string.
2025-10-26 10:33:07 -04:00
Robert Honz
3bd41f2139
chore: ✨ update header in README for improved branding
...
* Changed the header format to include an icon for better visual appeal.
* Ensures consistency with the overall project branding.
2025-10-26 09:59:51 +01:00
Robert Honz
c1af2a8adf
🌟 Version bumped to v0.31.3
2025-10-26 09:54:11 +01:00
Robert Honz
7b72146092
chore: 🔧 update Python version requirements in README
...
* Updated the requirements section to include support for Python 3.13.
* Clarified compatibility for users regarding Python versions.
2025-10-26 09:52:42 +01:00
Robert Honz
2d60f54b39
docs: 📚 update README for Dolby Atmos support and build instructions
...
* Added information on downloading Dolby Atmos files.
* Updated build instructions for macOS and added options for Windows and Linux.
* Corrected the build status badge link in the README.
2025-10-22 23:05:04 +02:00
Robert Honz
777a5e394d
chore(gui): 🎨 update data file inclusion pattern for icons
...
* Adjusted the pattern for including icon files to ensure proper matching.
* This change enhances the flexibility of file inclusion during the build process.
2025-10-22 22:50:25 +02: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
exislow and GitHub
0cf3516fb0
Merge pull request #573 from Rikrdoga/Dolby_Atmos
...
Implement Dolby Atmos Support & API Key Selection
2025-10-22 21:34:02 +02:00
Winman486
e9070eef66
refactor: Make rate limiting configurable and move session validation to Tidal class
...
- Add api_rate_limit_batch_size and api_rate_limit_delay_sec to Settings (cfg.py)
- Move validate_session() and is_authentication_error() to Tidal class (config.py)
- Update _load_albums_with_rate_limiting() to use config values instead of hardcoded 20/3
- Update _handle_album_load_error() to use Tidal.is_authentication_error()
- Remove _validate_session() from gui.py (now uses Tidal.validate_session())
- Addresses maintainer feedback: configurable tweaking variables and proper separation of concerns
2025-10-21 15:23:18 -05: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