* 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.
- 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)
* 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 `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.
* Prevent writing `CoverDimensions.PxORIGIN` to metadata to avoid exceeding max file size (>16Mb).
* Ensure correct cover image is used based on `cover_dimension` settings.
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.
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.
* 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.
* 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.