diff --git a/vrobbler/apps/scrobbles/scrobblers.py b/vrobbler/apps/scrobbles/scrobblers.py index 1993525..98a4ebf 100644 --- a/vrobbler/apps/scrobbles/scrobblers.py +++ b/vrobbler/apps/scrobbles/scrobblers.py @@ -77,6 +77,12 @@ def mopidy_scrobble_media(post_data: dict, user_id: int) -> Scrobble: media_obj = PodcastEpisode.find_or_create(**parsed_data) else: # TODO this kind of sucks, there's gotta be a way to get this in one shot + media_obj = Track.find_or_create( + title=post_data.get("name", ""), + artist_name=post_data.get("artist", ""), + album_name=post_data.get("album", ""), + run_time_seconds=post_data.get("run_time", 900000), + ) try: album_id = ( Album.objects.filter(name=post_data.get("album", "")) @@ -85,12 +91,6 @@ def mopidy_scrobble_media(post_data: dict, user_id: int) -> Scrobble: ) except Exception: pass - media_obj = Track.find_or_create( - title=post_data.get("name", ""), - artist_name=post_data.get("artist", ""), - album_name=post_data.get("album", ""), - run_time_seconds=post_data.get("run_time", 900000), - ) log = {} try: @@ -144,6 +144,7 @@ def jellyfin_scrobble_media( post_data.get(JELLYFIN_POST_KEYS.get("PLAYBACK_POSITION_TICKS"), 1) / 10000000 ) + album_id = None if media_type == Scrobble.MediaType.VIDEO: imdb_id = post_data.get("Provider_imdb", "") media_obj = Video.find_or_create(imdb_id) @@ -156,6 +157,14 @@ def jellyfin_scrobble_media( post_data.get("RunTime", 900000) ), ) + try: + album_id = ( + Album.objects.filter(name=post_data.get("Album", "")) + .first() + .id + ) + except Exception: + pass # A hack because we don't worry about updating music ... we either finish it or we don't playback_position_seconds = 0 @@ -172,13 +181,17 @@ def jellyfin_scrobble_media( elif post_data.get("NotificationType") == "PlaybackStop": playback_status = "stopped" + log = {"raw_data": post_data} + if album_id: + log["album_id"] = album_id + return media_obj.scrobble_for_user( user_id, source=post_data.get(JELLYFIN_POST_KEYS.get("SOURCE")), source_id=post_data.get(JELLYFIN_POST_KEYS.get("MEDIA_SOURCE_ID")), playback_position_seconds=playback_position_seconds, status=playback_status, - log={"album_id": media_obj.album_id, "raw_data": post_data}, + log=log, )