4595 Commits

Author SHA1 Message Date
Šarūnas Nejus
30ab81eb5b Extract UserError from beets.ui to a new beets.exceptions module.
Update all references in core, plugins, and tests to import UserError
from the new location. This centralizes exception handling and improves
code organization.
2026-05-16 11:18:51 +01:00
Šarūnas Nejus
d4f7f9ffd5 Fix types 2026-05-14 14:54:40 +01:00
ShimmerGlass
65ccaf1408 fix(mbsync): do not clear metadata if import.from_scratch is set
if import.from_scratch was set in the config, runnning mbsync would
clear any metadata not provided by MBz (replay gain, lyrics, genres...).
we now ignore this setting when running mbsync to preserve metadata.

Fixes: #6613
2026-05-13 18:06:08 +02:00
ShimmerGlass
ec1c25644d fix(duplicates): output format
* the pugin used an empty format string unless --count was provided,
  resulting in outputs like `: 1`. it now correctly displays duplicated
  items.
* --count was ignored (aside from above bug), and item count was always
  appended to output.
2026-05-11 22:43:53 +02:00
Martin Caspersen
5342d9bc76 Merge remote-tracking branch 'fork/master' into fix/mbpseudo-raw-data 2026-05-08 12:25:49 +02:00
Šarūnas Nejus
86813678d7 Use pipeline.mutator_stage instead of a Generator 2026-05-06 15:30:51 +01:00
Šarūnas Nejus
ec940e8b61 Remove redundant param provision to encode 2026-05-06 15:30:51 +01:00
Šarūnas Nejus
dd33fef52e Remove redundant param provision to should_transcode 2026-05-06 15:30:51 +01:00
Šarūnas Nejus
e574e86887 Replace get_format with command attribute 2026-05-06 15:30:51 +01:00
Šarūnas Nejus
34772d2684 Replace _get_opts_and_config with attributes 2026-05-06 15:30:50 +01:00
Šarūnas Nejus
ee895efd2d Handle opts using the config 2026-05-06 15:30:10 +01:00
Šarūnas Nejus
b15006ca11 Remove dependency on global config 2026-05-06 15:30:10 +01:00
Šarūnas Nejus
241eb6db09 Fix typing issues 2026-05-06 15:30:10 +01:00
Šarūnas Nejus
33efc2bd19 Add types 2026-05-06 15:30:10 +01:00
Šarūnas Nejus
10d0f37793 Merge branch 'master' into fix/badfiles-quiet-mode 2026-05-02 22:35:41 +01:00
ShimmerGlass
cc63a4e9b9 fix(MusicBrainz): date parsing fix
Correctly handle release dates where leading or
intermediate components are missing, e.g. 2008-??-02
2026-05-02 16:26:48 +02:00
Eyüp Can Akman
382ec79fe0 badfiles: address review feedback 2026-05-01 17:01:47 +03:00
Eyüp Can Akman
811593a1ee badfiles: respect import.quiet during import hook
The import hook prompted for input even when quiet mode was active, so
non-interactive imports blocked on the corrupt-file dialog. Return early
from `on_import_task_before_choice` when `import.quiet` is set so the
importer falls back to its summary judgment.
2026-05-01 17:01:47 +03:00
Alok Saboo
e84ce4198a Revert unrelated docstring reformatting 2026-04-29 08:33:31 -04:00
Alok Saboo
f459edbbd4 Merge upstream master and fix changelog.rst
Sync with upstream beets/master and resolve changelog conflict,
keeping only the Spotify batch entry in the Unreleased section.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 21:12:30 -04:00
Eyüp Can Akman
88be3023bb lyrics: handle apostrophes in musixmatch slug
The musixmatch URL slug builder did not replace curly apostrophes
(U+2018, U+2019) before applying the whitespace-to-dash rule, so titles
like "If They're Shooting at You" produced a slug with the raw quote
preserved and the lookup failed.

Add a REPLACEMENTS entry that maps both curly quote codepoints to a
dash before the rest of the substitutions run.
2026-04-28 17:27:28 +03:00
Alok Saboo
4ddef8cda6 Merge branch 'master' into spotify_batch 2026-04-26 09:47:58 -04:00
Šarūnas Nejus
343190f04a Add smartplaylist_update to support events 2026-04-25 20:29:16 +01:00
Šarūnas Nejus
8809de2f7b Define set_item_uri 2026-04-25 20:29:16 +01:00
Šarūnas Nejus
8c1bda5077 Simplify variables 2026-04-25 20:29:16 +01:00
Šarūnas Nejus
2b70a2982a Create write_playlist method 2026-04-25 20:29:16 +01:00
Šarūnas Nejus
ca09026864 Move extm3u comment generation to PlaylistItem 2026-04-25 20:29:16 +01:00
Šarūnas Nejus
01172b9e80 Validate output format early 2026-04-25 20:29:16 +01:00
Šarūnas Nejus
50afcea6e9 Simplify get_playlist_items 2026-04-25 20:29:16 +01:00
Šarūnas Nejus
470f30c6b8 Define a function to get playlist items 2026-04-25 20:29:16 +01:00
Šarūnas Nejus
02e593b4a1 Simplify variable handling 2026-04-25 20:29:16 +01:00
Šarūnas Nejus
2e650b9d49 Set playlist_count 2026-04-25 20:29:16 +01:00
Šarūnas Nejus
5c225aa7df Simplify pretend handling 2026-04-25 20:29:16 +01:00
shara987
24f79fb4cb zero: fix ruff formatting 2026-04-25 16:28:06 +01:00
shara987
419175ee55 zero: updated comment 2026-04-25 16:28:06 +01:00
shara987
b78ab89d14 zero: fix ruff formatting 2026-04-25 16:28:06 +01:00
shara987
79efb53537 zero:implemented cleaner code for artwork field aliasing 2026-04-25 16:28:06 +01:00
shara987
ba48bf8480 zero: fix ruff formatting 2026-04-25 16:28:06 +01:00
shara987
a0041356cd zero: treat 'images' and 'art' as aliases in keep_fields
Fixes #3532: when 'images' is listed in keep_fields, embedded album
art was still being removed because the plugin didn't recognize 'art'
as an alias for 'images'. Now both fields are kept when either appears
in keep_fields.
2026-04-25 16:28:06 +01:00
Šarūnas Nejus
556780ea7e Keep unique ft artists 2026-04-25 16:04:58 +01:00
Alok Saboo
e0aec44aee Merge branch 'master' into spotify_batch 2026-04-20 18:05:40 -04:00
Sebastian Mohr
eaf1f00424 warning instead of raising errors. 2026-04-20 20:55:47 +02:00
Sebastian Mohr
aa18e2e4e8 Auth flow should open browser if possible. 2026-04-20 20:55:47 +02:00
Sebastian Mohr
7509fca2ca Moved beets ui import to top. 2026-04-20 20:55:47 +02:00
Sebastian Mohr
55da1cb5a5 Use get_json where applicable and simplified iso 8601 parsing. 2026-04-20 20:55:47 +02:00
Sebastian Mohr
815dce4b3e renamed hashmaps to *_by_id from *_lookup 2026-04-20 20:55:47 +02:00
Sebastian Mohr
830c14a5bb Added retry logic to TidalSession and added RequestHandler abstraction
to api layer.
2026-04-20 20:55:47 +02:00
Sebastian Mohr
2afa774126 Move auth flow to use requests-oauth. 2026-04-20 20:55:47 +02:00
Sebastian Mohr
2c24b93ca7 Another subset of review comments from @snejus:
- Renamed _extract_* methods to _parse_*
- Renamed release to date_parts
- Using .get instead of .request("GET"...)
2026-04-20 20:55:47 +02:00
Sebastian Mohr
b9949ccae5 A subset of review comments from @snejus:
- Renamed id to _id
- Aligned line breaks for some comment with actual ruff line length
- Removed comment dividers
- Removed a number of unnecessary or duplicate comments
2026-04-20 20:55:47 +02:00