- 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.
* 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.
* 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.
* 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.
* 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.
* Changed `function_name` for `fav_tracks`, `fav_artists`, and `fav_albums` to use paginated versions.
* Ensures uniformity in function naming across favorites.
* 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.
* Adjusted the pattern for including icon files to ensure proper matching.
* This change enhances the flexibility of file inclusion during the build process.
* 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.
* Added `Ansi2HTMLConverter` to convert ANSI color codes in log messages to HTML.
* Updated the `MainWindow` class to utilize the new converter for displaying logs.
* Removed dependency on `coloredlogs.converter` for log message display.
* Refactored the menu action for downloading the full album from a track.
* Enhanced the docstring for `on_download_album_from_track` to clarify its functionality and error handling.
* Updated the sorting method for track paths to check for the presence of `st_birthtime`.
* If `st_birthtime` is not available, fallback to using `st_ctime` for sorting.
* Changed sorting method from `os.path.getctime` to `x.stat().st_birthtime` for better accuracy in track creation time.
* This improves the reliability of track order when not dealing with albums.
* Added `license` and `license-files` fields to ensure proper licensing information is included.
* Removed outdated classifier for license to maintain accuracy.
* Added `explicit` attribute to the `Metadata` class.
* Updated the constructor to initialize `explicit` with a default value of `False`.
* Modified the metadata saving process to include explicit rating in tags.
* Introduced `lyrics_synced` and `lyrics_unsynced` fields in the `Metadata` class.
* Updated the `Download` class to handle both synced and unsynced lyrics from the track.
* Enhanced metadata writing to include `UNSYNCEDLYRICS` in the tags.
* Introduced `MetadataTargetUPC` enum for target metadata tags.
* Added `METADATA_LOOKUP_UPC` dictionary for mapping file formats to UPC tags.
* Updated `Metadata` class to include `target_upc` for dynamic UPC tag assignment.
* Enhanced `Settings` class to allow configuration of `metadata_target_upc`.
* Updated `format_path_media` and related functions to accept customizable delimiters for artist names.
* Modified `Settings` class to include `filename_delimiter_artist` and `filename_delimiter_album_artist`.
* Enhanced `name_builder_artist` and `name_builder_album_artist` functions to utilize the new delimiters.
* Introduced `metadata_delimiter_artist` and `metadata_delimiter_album_artist` settings.
* Updated `name_builder_artist` and `name_builder_album_artist` functions to utilize the new delimiters.
* This allows users to specify their preferred delimiter for artist names in metadata.
* Updated exception handling in the `login` method to catch all exceptions instead of just `HTTPError` and `JSONDecodeError`.
* This change ensures that any unexpected errors during the login process are handled gracefully, improving the robustness of the application.
* Updated `tidalapi` from version `0.8.7` to `0.8.8` in `pyproject.toml`.
* Updated package version in `poetry.lock` to reflect the change.
* Added new file hashes for the updated version.
- requests from 2.32.4 to 2.32.5
- rich from 14.1.0 to 14.2.0
- typer from 0.16.0 to 0.19.2
- tidalapi from 0.8.5 to 0.8.7
- pytest from 8.4.1 to 8.4.2
- mypy from 1.17.1 to 1.18.1
- tox from 4.28.4 to 4.31.0
- pyupgrade from 3.20.0 to 3.21.0
- isort from 6.0.1 to 7.0.0
- pylint from 3.3.8 to 4.0.1
- pillow from 11.3.0 to 12.0.0
- pytest-cov from 6.2.1 to 7.0.0
- black from 25.1.0 to 25.9.0
- nuitka from 2.7.11 to latest
* Added a section addressing the terminal flashing issue when running the app on Windows.
* Provided a link to issue #103 for further details.
* Explained that this occurs due to the Python `ffmpeg` library when `extract_flac` is activated.
* Added a missing line in the `MainWindow` constructor to ensure proper settings initialization.
* Removed unnecessary blank line in the `closeEvent` method for cleaner code.
* Changed type hint for `paths` from `[Path]` to `list[Path]`.
* Simplified the check for `pyproject.toml` existence.
* Enhanced error handling in metadata retrieval with specific exceptions.
* Updated the `update_available` function signature for clarity.
* Adjusted the logic in `path_file_sanitize` to ensure the sanitized filename correctly appends the file suffix after the placeholder.
* This change prevents potential filename issues when handling file paths.
* Prevent writing `CoverDimensions.PxORIGIN` to metadata to avoid exceeding max file size (>16Mb).
* Ensure correct cover image is used based on `cover_dimension` settings.
* Introduced `url_ending_clean` to sanitize URLs by removing trailing "/u" or "?u".
* Updated `_process_url` and GUI search logic to utilize cleaned URLs for better validation and processing.
* Clarified the placeholder instructions for the "What happened?" field in the bug report template.
* Ensured consistency in language and improved readability for users submitting bug reports.
This commit refactors the codebase to improve readability and maintainability by updating enums and type annotations:
- ✨ **Replaced `StrEnum` attributes**: Removed explicit type declarations for enum values to simplify the code.
- 🛠️ **Introduced `AudioExtensionsValid` enum**: Added a new enum for valid audio file extensions.
- 🔄 **Enhanced type annotations**: Updated `FAVORITES` dictionary to include specific type hints for clarity.
- 🧹 **Updated references**: Replaced outdated `AudioExtensions` usage with the new `AudioExtensionsValid`.
These changes improve code clarity, enforce stricter typing, and enhance extensibility.
Introduces a new configuration option, `metadata_write_url`, to control whether the media file URL is included in metadata. Updates logic to respect this setting.
- ✨ **Feature**: Adds `metadata_write_url` to enable/disable URL writing in metadata.
- 🔧 **Logic Update**: Adjusts URL handling to check the new setting before including it.
- 📝 **Documentation**: Updates help descriptions to explain the new option.
This change improves flexibility in metadata customization.
Adds functionality to handle original image dimensions (`origin`) for album cover downloads.
- ✨ Added `PxORIGIN` option to cover dimension constants.
- 🔄 Updated cover image URL logic to support original dimensions.
- 🛠️ Improved cover data handling for more flexible metadata embedding.
This enhances customization and fidelity in cover image management.
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.
This update introduces support for handling date-related format strings, improving the flexibility of media metadata formatting.
- ✨ **Feature**: Adds `_format_dates` function to handle date-related strings like `album_date`.
- 🛠️ **Enhancement**: Refactors `_format_durations` by isolating date-related logic into a new function.
- 📅 **Improvement**: Supports formatting `album_year` and `album_date` with proper checks for `Album` and `Track` types.
This improvement enhances media metadata formatting capabilities for more detailed date information.
Refactors the ID formatting logic to extend support for `video_id` and improve clarity.
- ✨ **Feature:** Adds support for `video_id` in ID formatting logic.
- ♻️ **Refactor:** Updates conditional checks for better readability.
- 🔧 **Metadata:** Updates `poetry.lock` content hash.
These changes enhance functionality and maintainability by accommodating additional media types.
This update introduces support for handling UPCs (Universal Product Codes) in metadata processing. It ensures that UPC information is extracted, stored, and written to the appropriate metadata tags for various formats.
- ✨ **Feature**: Adds UPC field to metadata handling.
- 🛠️ **Enhancement**: Updates metadata initialization to include UPC.
- 🗂️ **Tagging**: Implements UPC writing for supported file formats.
- ✅ **Compatibility**: Ensures proper handling when UPC is absent.
This improvement enhances metadata completeness and compatibility with systems requiring UPC data.
- Bump rich from 14.0.0 to 14.1.0
- Update tidalapi from 0.8.3 to 0.8.5
- Upgrade dev dependencies:
- deptry from 0.23.0 to 0.23.1
- mypy from 1.16.1 to 1.17.1
- pre-commit from 4.2.0 to 4.3.0
- tox from 4.27.0 to 4.28.4
- bandit from 1.8.5 to 1.8.6
- pylint from 3.3.7 to 3.3.8
- pillow from 11.2.1 to 11.3.0
* Added support for building GUI on macOS ARM64, Ubuntu, and Windows platforms.
* Restored previously commented-out build commands for better cross-platform compatibility.
* Eliminated the `gui-macos-dmg-intel` target from the Makefile.
* This target was a workaround for Intel Macs and is no longer necessary.
* Streamlined the `gui-macos-dmg` process for better clarity and maintenance.
* Changed the command to run `create-dmg` with `sudo` to ensure proper permissions on macOS.
* Added a sleep delay of 60 seconds to allow for any necessary processing time.
* Updated the command to `make gui-macos-dmg` for proper packaging.
* Introduced a 60-second delay before creating the DMG to ensure all processes are completed.
* Added a sleep command before creating the `.dmg` file to ensure proper execution.
* Modified the `hdiutil create` command to include `-debug` for troubleshooting.
- Introduced a new workflow for managing releases and test builds.
- Configured jobs for publishing, deploying documentation, and building GUI assets for multiple platforms.
- Set up environment variables and matrix strategy for cross-platform builds.
* Updated the Python version matrix in the tox job to only include 3.12.
* This change simplifies the testing process and focuses on the currently supported version.
Refactors the CLI structure to improve readability and maintainability:
- ♻️ Replaces `dl_fav_group` with `app_dl_fav` for better naming consistency.
- 🛠️ Restructures the `callback_app` function, removing redundancy.
- 🚀 Adds a URL detection mechanism to streamline `dl <URL>` command simulation.
- ✨ Enhances imports by adding `urlparse`.
These updates aim to simplify the codebase and improve user experience.
* Refactored `_handle_track_or_video` and `_handle_album_playlist_mix_artist` to use `typer.Context` instead of `Settings` directly.
* Improved clarity by centralizing settings retrieval through context.
* Adjusted `_process_url` and `_download` functions to align with the new context-based approach.
* Enhanced `_validate_and_prepare_media` method to support additional media types: `Album`, `Playlist`, `UserPlaylist`, and `Mix`.
* Updated media validation checks to ensure proper handling of unavailable media.
* Refactored `_validate_media_instance` to streamline media instance creation and validation.
* Removed redundant `_validate_and_prepare_media_collection` method for cleaner code.
* Improved validation and preparation of media collections for downloads.
* Refactored download context setup and execution logic for better clarity and maintainability.
* Added progress tracking for download tasks and improved handling of download futures.
* Reordered parameters in `item` method for clarity.
* Added `_validate_media_instance` method to streamline media validation.
* Enhanced `_prepare_file_paths_and_skip_logic` for better file handling.
* Introduced `_perform_actual_download` to encapsulate download logic.
* Improved error handling and logging throughout the download process.
* Renamed `_download` to `_get_media_urls` for better clarity on its purpose.
* Simplified URL extraction logic for `Track` and `Video` media types.
* Improved progress setup and error handling in the download process.
* Enhanced `_download_segments` and `_download_postprocess` methods for better readability and maintainability.
* Enhanced wording for better understanding of blank line usage.
* Clarified instructions on updating docstrings during refactoring.
* Specified the use of line comments for complex logic explanations.
* Improved documentation for methods in the `RequestsClient` and `Download` classes.
* Added detailed descriptions, parameters, and return types to enhance code readability and maintainability.
* Updated type hints for various methods in and classes.
* Changed list types from to for better clarity and consistency.
* Improved function signatures to include return types for better type safety.
* Refactored the filter extraction logic to directly use `header.filter_text(i)` for better clarity.
* Updated the filters list to store tuples of index and text, enhancing the data structure used.
* Ensured that the `proxy_model.filters` is set directly, simplifying the code.
* Updated type hints for several methods in `MainWindow` class to improve code clarity and type safety.
* Changed return types to `None` where applicable.
* Refined parameter types for better type checking and consistency.
* Clarified type annotations usage for function parameters, return types, and variables.
* Added guidelines for using blank lines, coroutines, and string interpolation as per PEP standards.
* Added detailed docstrings for methods in the `MainWindow` class.
* Improved clarity on parameters and return types for better understanding.
* Aims to facilitate future development and maintenance.
* Refactored `search_result_to_model` to use type hints with `list` instead of `[*SearchTypes]`.
* Added detailed docstring for better understanding of parameters and return types.
* Extracted logic into helper methods for better readability and maintainability.
* Improved handling of item availability and explicit content representation.
* Changed `item_id` type from `int` to `str` for better consistency.
* Updated related list type from `list[int]` to `list[str]`.
* Added type checks for `media_type`, `item_id`, and `file_template` in `_process_url` for improved error handling.
* Enhanced docstrings for clarity and consistency across functions.
* Removed unused imports to clean up the codebase.
* Improved the structure of the `_download` function for better readability.
* Refined coding guidelines for clarity and structure.
* Added sections for type annotations and docstring requirements.
* Ensured consistency in documentation practices across the project.
* Added detailed docstrings for `format_str_media` and related helper functions.
* Refactored media formatting logic to utilize dedicated functions for better readability and maintainability.
* Improved error handling in media formatting.
* Updated `file_unique_suffix` function to correct the spelling of `separator`.
* Changed "Write docstrings for all public modules, classes, functions, and methods" to "Always write doc strings for all modules, classes, functions, and methods."
* Added missing punctuation for consistency in error handling guidelines.
* Adjusted `requires-python` in `pyproject.toml` to `>=3.12,<3.13`
* Modified `envlist` in `tox.ini` to remove Python 3.13
* Updated `python-versions` in `poetry.lock` to reflect the new constraints
* coloredlogs does not support py3.13, yet, see https://github.com/xolox/python-coloredlogs/issues/119
* Introduced guidelines for naming conventions and error handling.
* Specified the use of `snake_case` for variables, `CamelCase` for classes, and PEP 8 compliance.
* Emphasized the importance of type hints and docstrings in code documentation.