Skip to content

Commit 2bc240e

Browse files
committed
Always emit official releases if no pseudo-releases found
1 parent c4bda5a commit 2bc240e

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

beetsplug/mbpseudo.py

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,10 @@
2929
from beets.plugins import find_plugins
3030
from beetsplug._typing import JSONDict
3131

32+
_STATUS_PSEUDO = "Pseudo-Release"
3233

34+
35+
# TODO listen for import start and warn if MB plugin found but not before us
3336
class MusicBrainzPseudoReleasePlugin(MetadataSourcePlugin):
3437
def __init__(self, *args, **kwargs) -> None:
3538
super().__init__(*args, **kwargs)
@@ -47,9 +50,10 @@ def __init__(self, *args, **kwargs) -> None:
4750
self._log.debug("Desired scripts: {0}", self._scripts)
4851

4952
def _intercept_mb_releases(self, data: JSONDict):
50-
album_id = data["id"] if ("id" in data) else None
53+
album_id = data["id"] if "id" in data else None
5154
if (
52-
not isinstance(album_id, str)
55+
self._has_desired_script(data)
56+
or not isinstance(album_id, str)
5357
or album_id in self._pseudo_release_ids
5458
):
5559
return None
@@ -68,6 +72,14 @@ def _intercept_mb_releases(self, data: JSONDict):
6872

6973
return None
7074

75+
def _has_desired_script(self, release: JSONDict) -> bool:
76+
if len(self._scripts) == 0:
77+
return False
78+
elif script := release.get("text-representation", {}).get("script"):
79+
return script in self._scripts
80+
else:
81+
return False
82+
7183
def _wanted_pseudo_release_id(
7284
self,
7385
relation: JSONDict,
@@ -81,11 +93,7 @@ def _wanted_pseudo_release_id(
8193
return None
8294

8395
release = relation["release"]
84-
script = release.get("text-representation", {}).get(
85-
"script", self._scripts[0]
86-
)
87-
88-
if "id" in release and script in self._scripts:
96+
if "id" in release and self._has_desired_script(release):
8997
return release["id"]
9098
else:
9199
return None
@@ -101,7 +109,7 @@ def _intercept_mb_candidates(self, info: AlbumInfo):
101109
)
102110
self._intercepted_candidates[info.album_id] = info.copy()
103111

104-
elif info.get("albumstatus", "") == "Pseudo-Release":
112+
elif info.get("albumstatus", "") == _STATUS_PSEUDO:
105113
self._purge_intercepted_pseudo_releases(info)
106114

107115
def candidates(
@@ -175,7 +183,7 @@ def candidates(
175183
items, official_candidates
176184
)
177185

178-
if not self.config.get().get("include_official_releases"):
186+
if recursion and not self.config.get().get("include_official_releases"):
179187
official_candidates = []
180188

181189
self._log.debug(
@@ -233,7 +241,7 @@ def _mb_plugin_simulation_matched(
233241
)
234242
matched = True
235243

236-
if official_candidate.get("albumstatus", "") == "Pseudo-Release":
244+
if official_candidate.get("albumstatus", "") == _STATUS_PSEUDO:
237245
self._purge_intercepted_pseudo_releases(official_candidate)
238246

239247
return matched

0 commit comments

Comments
 (0)