@@ -926,18 +926,31 @@ def _search_api(
926926 self ,
927927 query_type : Literal ["recording" , "release" ],
928928 filters : dict [str , str ],
929+ advanced : bool = True ,
930+ * args ,
929931 ) -> list [JSONDict ]:
930932 """Perform MusicBrainz API search and return results.
931933
932934 Execute a search against the MusicBrainz API for recordings or releases
933- using the provided criteria. Handles API errors by converting them into
934- MusicBrainzAPIError exceptions with contextual information.
935+ using the provided criteria.
935936 """
936- query = " AND " .join (
937- f'{ k } :"{ _v } "'
938- for k , v in filters .items ()
939- if (_v := v .lower ().strip ())
940- )
937+ if advanced :
938+ query = " AND " .join (
939+ f'{ k } :"{ _v } "'
940+ for k , v in filters .items ()
941+ if (_v := v .lower ().strip ())
942+ )
943+ else :
944+ params = itertools .chain (
945+ (str (arg ) for arg in args ),
946+ (
947+ f'{ k } :"{ _v } "'
948+ for k , v in filters .items ()
949+ if (_v := v .lower ().strip ())
950+ ),
951+ )
952+ query = " " .join (params )
953+
941954 self ._log .debug (
942955 "Searching for MusicBrainz {}s with: {!r}" , query_type , query
943956 )
@@ -953,7 +966,15 @@ def candidates(
953966 va_likely : bool ,
954967 ) -> Iterable [AlbumInfo ]:
955968 criteria = self .get_album_criteria (items , artist , album , va_likely )
956- release_ids = (r ["id" ] for r in self ._search_api ("release" , criteria ))
969+ release_ids = [r ["id" ] for r in self ._search_api ("release" , criteria )]
970+
971+ if len (release_ids ) == 0 and "artist" in criteria :
972+ # try a less advanced search if va_likely is False
973+ del criteria ["artist" ]
974+ release_ids = [
975+ r ["id" ]
976+ for r in self ._search_api ("release" , criteria , False , artist )
977+ ]
957978
958979 for id_ in release_ids :
959980 with suppress (HTTPNotFoundError ):
0 commit comments