From a2e48e1032d3d0d45e56fe64661c47edc015c8bd Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Tue, 25 Mar 2025 15:46:44 +0000 Subject: [PATCH] Add artist and release mbids to listenbrainz scobbles (#2048) * Chore: bump models to 1.1.41 Set various new fields to None * Add artist and release mbids to listenbrainz scobbles https://github.com/music-assistant/models/pull/63 adds the relevant fields to `MediaItemPlaybackProgressReport`. --- music_assistant/controllers/player_queues.py | 10 +++++++--- music_assistant/providers/audiobookshelf/parsers.py | 1 + music_assistant/providers/filesystem_local/__init__.py | 1 + .../providers/listenbrainz_scrobble/__init__.py | 2 ++ .../providers/opensubsonic/sonic_provider.py | 1 + music_assistant/providers/test/__init__.py | 1 + pyproject.toml | 2 +- requirements_all.txt | 2 +- tests/core/test_scrobbler.py | 2 ++ 9 files changed, 17 insertions(+), 5 deletions(-) diff --git a/music_assistant/controllers/player_queues.py b/music_assistant/controllers/player_queues.py index a68620a4..d7d1ecce 100644 --- a/music_assistant/controllers/player_queues.py +++ b/music_assistant/controllers/player_queues.py @@ -1952,6 +1952,8 @@ class PlayerQueuesController(CoreController): is_playing=is_playing, ) ) + + album = getattr(item_to_report.media_item, "album", None) # signal 'media item played' event, # which is useful for plugins that want to do scrobbling self.mass.signal_event( @@ -1962,11 +1964,13 @@ class PlayerQueuesController(CoreController): media_type=item_to_report.media_item.media_type, name=item_to_report.media_item.name, artist=getattr(item_to_report.media_item, "artist_str", None), - album=( - album.name - if (album := getattr(item_to_report.media_item, "album", None)) + artist_mbids=( + [a.mbid for a in artists if a.mbid] + if (artists := getattr(item_to_report.media_item, "artists", None)) else None ), + album=(album.name if album else None), + album_mbid=(album.mbid if album else None), image_url=( self.mass.metadata.get_image_url(item_to_report.media_item.image, size=512) if item_to_report.media_item.image diff --git a/music_assistant/providers/audiobookshelf/parsers.py b/music_assistant/providers/audiobookshelf/parsers.py index c1f2258b..9ca6d1af 100644 --- a/music_assistant/providers/audiobookshelf/parsers.py +++ b/music_assistant/providers/audiobookshelf/parsers.py @@ -113,6 +113,7 @@ def parse_podcast_episode( provider=lookup_key, name=episode.title, duration=int(episode.duration), + publish_date=None, position=position, podcast=ItemMapping( item_id=prov_podcast_id, diff --git a/music_assistant/providers/filesystem_local/__init__.py b/music_assistant/providers/filesystem_local/__init__.py index d4194b1c..1034b2be 100644 --- a/music_assistant/providers/filesystem_local/__init__.py +++ b/music_assistant/providers/filesystem_local/__init__.py @@ -1188,6 +1188,7 @@ class LocalFileSystemProvider(MusicProvider): provider=self.instance_id, name=tags.title, sort_name=tags.title_sort, + publish_date=None, provider_mappings={ ProviderMapping( item_id=file_item.relative_path, diff --git a/music_assistant/providers/listenbrainz_scrobble/__init__.py b/music_assistant/providers/listenbrainz_scrobble/__init__.py index c3823f5d..f560ed6f 100644 --- a/music_assistant/providers/listenbrainz_scrobble/__init__.py +++ b/music_assistant/providers/listenbrainz_scrobble/__init__.py @@ -108,7 +108,9 @@ class ListenBrainzEventHandler(ScrobblerHelper): return Listen( track_name=report.name, artist_name=report.artist, + artist_mbids=report.artist_mbids, release_name=report.album, + release_mbid=report.album_mbid, recording_mbid=report.mbid, listening_from="music-assistant", ) diff --git a/music_assistant/providers/opensubsonic/sonic_provider.py b/music_assistant/providers/opensubsonic/sonic_provider.py index 30af6369..8eeb6fb0 100644 --- a/music_assistant/providers/opensubsonic/sonic_provider.py +++ b/music_assistant/providers/opensubsonic/sonic_provider.py @@ -349,6 +349,7 @@ class OpenSonicProvider(MusicProvider): name=sonic_episode.title, position=pos, podcast=self._parse_podcast(sonic_channel), + publish_date=None, provider_mappings={ ProviderMapping( item_id=eid, diff --git a/music_assistant/providers/test/__init__.py b/music_assistant/providers/test/__init__.py index a5687fb1..494f17f8 100644 --- a/music_assistant/providers/test/__init__.py +++ b/music_assistant/providers/test/__init__.py @@ -315,6 +315,7 @@ class TestProvider(MusicProvider): provider=self.lookup_key, name=f"Test PodcastEpisode {podcast_id}-{episode_idx}", duration=60, + publish_date=None, podcast=ItemMapping( item_id=podcast_id, provider=self.lookup_key, diff --git a/pyproject.toml b/pyproject.toml index a5eb2122..cdc0cfe7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,7 +24,7 @@ dependencies = [ "ifaddr==0.2.0", "mashumaro==3.15", "music-assistant-frontend==2.14.0", - "music-assistant-models==1.1.40", + "music-assistant-models==1.1.41", "mutagen==1.47.0", "orjson==3.10.15", "pillow==11.1.0", diff --git a/requirements_all.txt b/requirements_all.txt index cdf69720..e2d1a44f 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -27,7 +27,7 @@ ifaddr==0.2.0 liblistenbrainz==0.5.6 mashumaro==3.15 music-assistant-frontend==2.14.0 -music-assistant-models==1.1.40 +music-assistant-models==1.1.41 mutagen==1.47.0 orjson==3.10.15 pillow==11.1.0 diff --git a/tests/core/test_scrobbler.py b/tests/core/test_scrobbler.py index 21d8d6eb..2f73c48e 100644 --- a/tests/core/test_scrobbler.py +++ b/tests/core/test_scrobbler.py @@ -97,7 +97,9 @@ def create_report( media_type=MediaType.TRACK, name="track", artist=None, + artist_mbids=None, album=None, + album_mbid=None, image_url=None, duration=duration, mbid="", -- 2.34.1