Šarūnas Nejus
d93ddf8dd4
Do not use explicit indices for logging args when not needed
2025-08-30 23:10:21 +01:00
Šarūnas Nejus
2fccf64efe
Do not use backslashes to deal with long strings
2025-08-30 23:10:20 +01:00
Šarūnas Nejus
1c16b2b308
Replace string concatenation (' + ')
...
- Join hardcoded strings
- Replace concatenated variables with f-strings
2025-08-30 23:10:15 +01:00
Šarūnas Nejus
a7c83d91e9
Replace slightly more advanced attempts to use format calls
2025-08-30 22:35:00 +01:00
Šarūnas Nejus
9352a79e41
Replace percent formatting
2025-08-30 22:35:00 +01:00
Šarūnas Nejus
4a361bd501
Replace format calls with f-strings
2025-08-30 18:42:26 +01:00
Sebastian Mohr
1c0484c4ba
renamed keywords to query_string, shortened query construct expression,
...
removed legacy isinstance check
2025-08-26 13:41:11 +02:00
Sebastian Mohr
f81684e188
Moved construct search into SearchApiMetadataSource to dedupe some
...
deezer and spotify functionalities.
2025-08-26 13:41:11 +02:00
Šarūnas Nejus
e603c2f08e
Merge branch 'master' into chroma-timeout
2025-08-25 23:37:41 +01:00
J0J0 Todos
0dcf7fdc23
lastgenre: Remove leftover/unused REPLACE constant
2025-08-24 09:20:36 +02:00
J0J0 Todos
05a1a95ee9
lastgenre: Dedup combine/resolve/label/format code
2025-08-24 09:20:36 +02:00
J0J0 Todos
d8e90d8e54
lastgenre: Resolve combined genres in each stage
...
To ensure proper fallback to the next stage, in each stage we do a full
combine/resolve/log.
Also we directly return if have satisfied results. As a bonus this
improves readability.
Some duplicate code on the label magic though...
2025-08-24 09:20:36 +02:00
J0J0 Todos
fa8b5d7495
lastgenre: Fix canonicalization of non-valid genres
...
- Remove "early whitelist check", since it breaks canonicalization of
actually unwanted genres (not whitelisted) resolving "up" to parent
genres.
- Remove the filter_valid_genres method entirely and get back to inline
list comprehensions. The caveat is that None genres are not catched
that way (see below, should be one of the last functions that finally
returns lists only)
- Along the way, fix _last_lookup's rearly return to empty list instead
of None.
2025-08-24 09:20:36 +02:00
Rebecca Turner
1786adfff1
chroma: set a default timeout of 10 seconds
...
TODO: Configurable timeouts :)
2025-08-10 23:14:20 -07:00
Šarūnas Nejus
54b31d01e9
Use only plugins/disabled_plugins config in plugin loading
2025-08-09 15:11:58 +01:00
Sebastian Mohr
6c3f93df2c
Replaced find_executable with shutil.which for python 3.12
...
compatibility as distutils was deprecated.
2025-08-09 13:17:27 +02:00
Šarūnas Nejus
9e4559b8e9
Merge branch 'master' into discogs-404
2025-08-08 21:57:46 +01:00
Rebecca Turner
0430bd383a
discogs: don't crash if a release is deleted
2025-08-07 20:25:09 -07:00
Sebastian Mohr
dc6f07d705
Added typing_extensions to all python version. Removed sys.version checks
2025-08-04 11:19:14 +02:00
Martin Atukunda
4a7e474efc
Merge branch 'master' into feature/add-artist-to-item-entry-template
2025-07-18 00:25:42 +03:00
Šarūnas Nejus
3be4a89aee
refactor: convert _types from class attributes to cached properties
...
Convert static _types dictionaries to dynamic cached class properties to
enable proper plugin type inheritance and avoid mutating shared state.
Key changes:
- Replace static _types dicts with @cached_classproperty decorators
- Update cached_classproperty to support proper caching with class names
- Remove manual _types mutation in plugin loading/unloading
- Add pluginload event and cache clearing for proper plugin integration
- Fix test to trigger type checking during item creation
This ensures plugin types are properly inherited through the class
hierarchy and eliminates issues with shared mutable state between
test runs.
2025-07-16 14:45:25 +01:00
Šarūnas Nejus
7509843517
Fix a generic type error and warnings in spotify
2025-07-16 14:15:27 +01:00
Šarūnas Nejus
a5bbe57490
Fix types in test_player
2025-07-16 14:06:34 +01:00
Šarūnas Nejus
816d06f160
Fix plugin types
2025-07-16 14:06:34 +01:00
Sebastian Mohr
f70e5ec758
split imports
2025-07-16 12:07:49 +02:00
Sebastian Mohr
47f8fbe629
Plugin should call super init.
2025-07-16 11:48:34 +02:00
Sebastian Mohr
0c6b383b06
Track info should not be imported from metadata_plugin.
2025-07-16 11:43:17 +02:00
Sebastian Mohr
1d33580b68
Renamed class method to _extract_id.
2025-07-15 15:03:14 +02:00
Sebastian Mohr
3ce33631a6
Renamed import in mbsync and missing plugins.
2025-07-15 15:03:14 +02:00
Sebastian Mohr
3eadf17e8f
Opt in beatport plugin. Also enhanced type hints and minor cleanup for
...
the beatport plugin.
2025-07-15 15:03:14 +02:00
Sebastian Mohr
a97633dbf6
Opt in dicogs plugin.
2025-07-15 15:03:14 +02:00
Sebastian Mohr
6f623ee7b0
Opt in deezer plugin.
2025-07-15 15:03:14 +02:00
Sebastian Mohr
a770cfb669
Opt in chroma plugin.
2025-07-15 15:03:14 +02:00
Sebastian Mohr
b62fb10da8
Opt in musicbrainz plugin.
2025-07-15 15:03:14 +02:00
Sebastian Mohr
fd800dce7c
Opt in spotify plugin and enhanced typing for the search responses.
2025-07-15 15:03:14 +02:00
Martin Atukunda
8126eaa0fa
Merge branch 'master' into feature/add-artist-to-item-entry-template
2025-07-15 13:58:25 +03:00
54562474
48d45b4df7
feat: mpdstats: add config option for played ratio threshold to determine if a
...
track was played or skipped.
2025-07-09 14:16:23 -06:00
Šarūnas Nejus
afe97cf31e
Do not assign args to query
2025-07-08 11:37:34 +01:00
Šarūnas Nejus
4260162d44
Remove all Python 2 references
2025-07-08 11:37:34 +01:00
Šarūnas Nejus
7cada1c9f8
Remove no-op decargs
2025-07-08 11:37:33 +01:00
Nicolas Mémeint
eb497eee1a
Only consider release collections in mbcollection plugin
2025-07-07 13:25:25 +02:00
Sebastian Mohr
50604b0510
Fixed linting issue after rebase.
2025-07-07 11:40:51 +02:00
Sebastian Mohr
04a3dd2169
Adjusted typehint for search api. Removed optional none from filter.
2025-07-07 11:37:02 +02:00
Sebastian Mohr
1f15598294
Moved constants back to top.
2025-07-07 11:37:02 +02:00
Sebastian Mohr
6ab0f8d3a7
Removed old docstring.
2025-07-07 11:37:02 +02:00
Sebastian Mohr
085b89b70b
Minor improvements to deezer plugin typing.
2025-07-07 11:37:02 +02:00
Sebastian Mohr
59ecfd9a49
Moved fetch_data and _get_track function.
2025-07-07 11:36:38 +02:00
Martin Atukunda
a64acf8aa2
Merge branch 'master' into feature/add-artist-to-item-entry-template
2025-07-07 09:35:15 +03:00
J0J0 Todos
cf557fb41b
playlist: Use pathlib.Path and add types for is_m3u_file()
...
Co-authored-by: Šarūnas Nejus <snejus@protonmail.com>
2025-07-07 08:05:47 +02:00
J0J0 Todos
dcd3a9f7f4
playlist: Support m3u8 ending in playlist plugin
2025-07-07 07:58:59 +02:00
Šarūnas Nejus
0de27cbfb3
Merge branch 'master' into feature/add-artist-to-item-entry-template
2025-07-06 16:43:37 +01:00
Šarūnas Nejus
1a045c9166
Copy paste query, types from library to dbcore
2025-07-06 16:03:46 +01:00
Martin Atukunda
54e76368d0
Avoid rendering extraneous separators
...
handling cases where the artist or album data might be missing to avoid
rendering extraneous separators. Suggested by Copilot.
2025-07-06 12:22:02 +03:00
Martin Atukunda
8ea7346575
Merge branch 'master' into feature/add-artist-to-item-entry-template
2025-07-06 12:14:48 +03:00
J0J0 Todos
47eee070ba
duplicates: remove or delete options mutually exclusive
...
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-07-05 07:22:33 +02:00
J0J0 Todos
537a71ff82
duplicates: Add --remove option to duplicates plugin
...
Removes from library but keeps files.
2025-07-05 07:17:59 +02:00
dhruvravii
dd6cb538ac
Fix: Spotify plugin unable to recognize Chinese and Japanese albums. ( #5705 )
...
Fixes an issue where each spotify query was converted to ascii before sending. Adds a
new config option to enable legacy behaviour.
A file called japanese_track_request.json was made to mimic the Spotify
API response since I don't have the credentials. Entries in that will
need to be modified with the actual entries.
Co-authored-by: Sebastian Mohr <sebastian@mohrenclan.de>
Co-authored-by: Sebastian Mohr <39738318+semohr@users.noreply.github.com>
Co-authored-by: J0J0 Todos <2733783+JOJ0@users.noreply.github.com>
2025-07-01 11:08:54 +02:00
Nicolas Mémeint
4893cee5e5
Fix the MusicBrainz search not taking into account the album/recording aliases
2025-06-15 21:33:20 +01:00
Sebastian Mohr
66864fcc27
Minor improvements to spotify plugin typing. ( #5815 )
...
## Description
Added some more typehints to the spotify plugin. Also added a method to
get the tokenfile and changed to logic for the handle_response to use
`requests.request`.
This is done mainly to prepare for
https://github.com/beetbox/beets/pull/5787 , see also
https://github.com/beetbox/beets/pull/5814
2025-06-11 15:19:46 +02:00
Šarūnas Nejus
adbd50b237
Move distance to a separate module
2025-05-31 19:17:43 +01:00
Šarūnas Nejus
509cbdcbe4
Move sanitize_pairs/choices from plugins to util module
2025-05-31 17:55:41 +01:00
Uncorrupt3318
dd2f203090
Feat: Add replace plugin ( #5644 )
...
Adds replace plugin. The plugin allows the user to replace the audio
file of a song, while keeping the tags and file name.
Some music servers keep track of favourite songs via paths and tags. Now
there won't be a need to 'refavourite'. Plus, this skips the
import/merge steps.
2025-05-27 00:17:52 +02:00
wisp3rwind
728076e97d
fetchart: assert some invariants to satisfy mypy
...
Eventually, it would be nice to avoid this by more expressive typings.
For now, avoid such larger refactoring.
2025-05-20 10:06:11 +02:00
wisp3rwind
10d1c51a1d
fetchart: consistently use lazy string formatting for debug logging
2025-05-20 09:23:34 +02:00
wisp3rwind
a6f2389aed
typing: fetchart + tests
2025-05-20 08:57:30 +02:00
wisp3rwind
395aec96a3
fetchart: fixup #5244
...
by restoring config validation and making things more Pythonic
2025-05-20 08:57:30 +02:00
Šarūnas Nejus
e151b4b49b
Implement track_for_id to allow fetching singletons by discogs id
2025-05-19 09:43:56 +01:00
Šarūnas Nejus
d9b67acff5
discogs: simplify getting track from album
2025-05-19 09:43:03 +01:00
Šarūnas Nejus
9cc7ecaceb
discogs: cache TRACK_INDEX_RE
2025-05-19 09:43:03 +01:00
Šarūnas Nejus
8e5858254b
discogs: cache master release lookups
2025-05-19 09:43:03 +01:00
Šarūnas Nejus
12149b3e6d
discogs: remove duplicate error handling
2025-05-19 09:43:03 +01:00
Šarūnas Nejus
09862aeaea
discogs: Add types to public methods
2025-05-19 09:43:01 +01:00
Šarūnas Nejus
9242db04a5
discogs: add configurable search_limit
2025-05-19 09:42:06 +01:00
Šarūnas Nejus
e8e9369bc7
Remove unused extra_tags parameter
2025-05-19 09:18:06 +01:00
Šarūnas Nejus
2ec65ed8ca
Deduplicate candidate methods using _search_api method
2025-05-18 20:09:52 +01:00
Šarūnas Nejus
0102f3ce7d
Take into account va_likely param and remove redundant checks
...
- Instead of checking for empty `artist` query, use `va_likely`
parameter to determine whether we should query for Various Artists or
not.
- `album` / `title` is always a truthy string - no need to handle empty
criteria case
- `tracks` list always has at least one track - no need to check for
`len(items)`
2025-05-18 20:09:52 +01:00
Šarūnas Nejus
6487893315
Synchronise docs with the actual supported extra_tags
2025-05-18 20:09:51 +01:00
Šarūnas Nejus
be74936134
Handle extra_tags the way they used to be handled
2025-05-18 20:09:50 +01:00
Martin Atukunda
7c799beda8
style(plugin/web): run djlint over html to clean it up a bit
2025-05-18 20:59:29 +03:00
Martin Atukunda
992d376d1b
feat(plugin/web): add artist and album to the item entry template
2025-05-18 20:59:29 +03:00
Martin Atukunda
a75d2b4aa6
Update beetsplug/web/static/beets.js
...
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-05-18 17:16:29 +01:00
Martin Atukunda
d1d58569e1
Update beetsplug/web/static/beets.js
...
don't pollute global scope with album_id
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-05-18 17:16:29 +01:00
Martin Atukunda
b0238d934e
feat: plugins/web: use media session api for notifications.
...
The Media Session API provides a way to customize media notifications.
This commit updates the metadata for the media session whenever a new
track (item) starts playing.
https://developer.mozilla.org/en-US/docs/Web/API/Media_Session_API
2025-05-18 17:16:29 +01:00
Šarūnas Nejus
b520981c9c
plugins: restructure id extraction
2025-05-17 14:57:34 +01:00
Sebastian Mohr
a2e316d444
Merge remote-tracking branch 'upstream/master' into importer-restructure
2025-05-17 10:32:50 +02:00
Šarūnas Nejus
f1dc75f743
Fix types in all edited files
2025-05-17 03:32:01 +01:00
Šarūnas Nejus
7ff73d9747
musicbrainz: set default config in the code
2025-05-17 03:31:59 +01:00
Šarūnas Nejus
a538a3a150
musicbrainz: move handling of extra tags to musicbrainz plugin
2025-05-17 03:31:58 +01:00
Šarūnas Nejus
de0958ca65
Use candidate function from plugins instead of hooks
2025-05-17 03:31:57 +01:00
Šarūnas Nejus
2fcb48d7a4
Remove ...for_mbid methods and simplify the rest
2025-05-17 03:31:57 +01:00
Šarūnas Nejus
d8067b219b
musicbrainz: use self.config and self._log
2025-05-17 03:31:57 +01:00
Šarūnas Nejus
fd62d6a0b8
Integrate functionality with BeetsPlugin shenanigans
2025-05-17 03:31:57 +01:00
Šarūnas Nejus
529aaac7dc
Move functionality under MusicBrainzPlugin
2025-05-16 23:08:38 +01:00
Šarūnas Nejus
06dde6e37e
Define MusicBrainzPlugin
2025-05-16 20:17:59 +01:00
Šarūnas Nejus
5dc6f45110
musicbrainz: reorder methods
...
This will make it easier to track changes in later commits.
2025-05-16 19:56:50 +01:00
Šarūnas Nejus
e6e610a3ef
Move musicbrainz to beetsplug directory
2025-05-16 19:56:50 +01:00
Sebastian Mohr
68acaa6470
Renamed all action occurrences with Action.
2025-05-13 13:01:46 +02:00
Šarūnas Nejus
fdc1aba603
Replace typing.cast with explicit type definitions and ignore TC006
2025-05-07 20:39:33 +01:00
Šarūnas Nejus
99dc0861c2
Redact sensitive fields
...
Redacted fields reported by GitHub secrets scanner[1] and a couple of others.
1: https://github.com/beetbox/beets/security/secret-scanning?query=is%3Aclosed
2025-05-07 20:39:32 +01:00
Šarūnas Nejus
c490ac5810
Fix formatting
2025-05-07 10:41:01 +01:00