When importing compilations, albumartist_sort, albumartists_sort,
albumartist_credit, albumartists_credit, and albumartists were
hardcoded to "Various Artists" instead of using the user-configured
va_name setting. This also fixes the same issue in the beatport plugin.
Fixes#6316
* official/master: (54 commits)
Require data_source in album_for_id and track_for_id functions
Invoke album_matched hook from AlbumMatch.__post_init__
Refactor match_by_id
Take data source into account when deciding duplicate candidates
Return album candidates from multiple sources when matching by IDs
Add a test to reproduce the issue
Move assignment tests to test/autotag/test_match.py
Pulled latest changelog and added my entry to 'Unreleased > Bug fixes' section.
Moved changelog note to top, under Unreleased.
This PR improves the regex detection used for the drive_sep_replace default.
This PR improves the regex detection used for the drive_sep_replace default.
refactor: Use deprecate_for_user for beatport/bpsync deprecation warnings
Fix docs: use single-line deprecated directive compatible with docstrfmt
Fix docs formatting for beatport and bpsync rst files
Deprecate beatport and bpsync plugins
Update changelog.rst
try to fix fish plugin
Make get_search_query_with_filters abstract
Document new methods
Document shared metadata search plugin workflow
...
These functions now accept both an ID and data_source parameter,
enabling plugins like mbsync and missing to retrieve metadata from the
correct source.
Update mbsync and missing plugins to use the restored functions with
explicit data_source parameters. Add data_source validation to prevent
lookups when the source is not specified.
Add get_metadata_source helper function to retrieve plugins by their
data_source name, cached for performance.
Beatport has retired the API these plugins rely on, making them
non-functional. Add deprecation warnings and update documentation
to reflect the current state.
Fixes#3862
Move MusicBrainzPlugin to SearchApiMetadataSourcePlugin hooks.
Keep entity mapping and criteria in provider-specific hooks.
Update typing and tests for the candidate search path.
Move search orchestration into SearchApiMetadataSourcePlugin.
Migrate Deezer, Spotify, and Discogs to provider hooks.
Keep query handling, logging, and limits centralized.
- Add `LyricsMetadataInFlexFieldsMigration` to extract legacy source
URLs and language metadata from lyrics text into flex attributes
- Add `Lyrics.from_legacy_text` to parse legacy lyrics format
- Move `with_row_factory` context manager up to base `Migration` class
- Rename `migrate_table` to `migrate_model` and pass model class
instead of table name string. This is so that the migration can access
both `_table` and `_flex_table` attributes.
- Make `langdetect` import optional in `Lyrics.__post_init__`: users may
not have have the dependency installed, and we do not want the
migration to fail because of that.
- Move `BACKEND_BY_NAME` to module level for use outside plugin class
* Introduce a `Lyrics` dataclass to carry text, source URL, and language
metadata through fetch, translation, and storage paths.
* Return `Lyrics` from backends and plugin lookup methods instead of raw
tuples/strings.
* Store backend name in `lyrics_source` derived from fetched URL root
domain.
* Simplify translator flow to operate on `Lyrics`, reuse line splitting,
append translations in-place, and record translation language
metadata.
When lyrics.synced is enabled, avoid replacing existing synced lyrics with
newly fetched unsynced lyrics, even with force enabled.
Allow replacement when the new lyrics are also synced, or when synced mode
is disabled.