From ed12a21a4db77ec805c830f27a15135f1b8dfe5c Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Mon, 11 Apr 2022 11:15:05 +0200 Subject: [PATCH] Look for substitutes for unavailable items while syncing (#255) * Look for substitutes for unavailable items while syncing * change log for unavailable track --- music_assistant/controllers/music/__init__.py | 14 ++++++++++++-- music_assistant/controllers/stream.py | 8 +++----- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/music_assistant/controllers/music/__init__.py b/music_assistant/controllers/music/__init__.py index ae00a096..fced39d9 100755 --- a/music_assistant/controllers/music/__init__.py +++ b/music_assistant/controllers/music/__init__.py @@ -399,6 +399,9 @@ class MusicController: db_item = await controller.get( prov_item.item_id, prov_item.provider, details=prov_item ) + elif not db_item or not db_item.available: + # use auto matching magic to find a substitute for missing item + db_item = await controller.add(prov_item) elif not db_item: # for other mediatypes its enough to simply dump the item in the db db_item = await controller.add_db_item(prov_item) @@ -431,8 +434,12 @@ class MusicController: db_track = await self.tracks.get_db_item_by_prov_id( album_track.provider, album_track.item_id ) - if not db_track: + if not db_track or not db_track.available: + # use auto matching magic to find a substitute for missing track + db_track = await self.tracks.add(album_track) + elif not db_track: db_track = await self.tracks.add_db_item(album_track) + # add track to album_tracks await self.mass.music.albums.add_db_album_track( db_album.item_id, @@ -455,7 +462,10 @@ class MusicController: db_track = await self.tracks.get_db_item_by_prov_id( playlist_track.provider, playlist_track.item_id ) - if not db_track: + if not db_track or not db_track.available: + # use auto matching magic to find a substitute for missing track + db_track = await self.tracks.add(playlist_track) + elif not db_track: db_track = await self.tracks.add_db_item(playlist_track) assert playlist_track.position is not None await self.playlists.add_db_playlist_track( diff --git a/music_assistant/controllers/stream.py b/music_assistant/controllers/stream.py index 2f9897d8..c7ef8683 100644 --- a/music_assistant/controllers/stream.py +++ b/music_assistant/controllers/stream.py @@ -371,11 +371,9 @@ class StreamController: self.mass, queue_track, queue.queue_id, lazy=track_count == 1 ) except MediaNotFoundError as err: - self.logger.error(str(err), exc_info=err) - streamdetails = None - - if not streamdetails: - self.logger.warning("Skip track due to missing streamdetails") + self.logger.warning( + "Skip track due to missing streamdetails", exc_info=err + ) continue # check the PCM samplerate/bitrate -- 2.34.1