First try at fixing bad MD data from Jellyfin

This commit is contained in:
2023-01-08 19:44:41 -05:00
parent e4027402ed
commit 09e96a55d4
2 changed files with 24 additions and 10 deletions

View File

@ -8,6 +8,7 @@ from django.db.models.fields import timezone
from django.utils import timezone
from django.views.decorators.csrf import csrf_exempt
from django.views.generic.list import ListView
from music.constants import JELLYFIN_POST_KEYS as KEYS
from music.models import Track
from rest_framework import status
from rest_framework.decorators import api_view
@ -18,10 +19,9 @@ from scrobbles.constants import (
)
from scrobbles.models import Scrobble
from scrobbles.serializers import ScrobbleSerializer
from scrobbles.utils import convert_to_seconds
from videos.models import Video
from vrobbler.apps.music.constants import JELLYFIN_POST_KEYS as KEYS
logger = logging.getLogger(__name__)
TRUTHY_VALUES = [
@ -103,11 +103,15 @@ def jellyfin_websocket(request):
"musicbrainz_albumartist_id": data_dict.get(KEYS["ARTIST_MB_ID"]),
}
# Convert ticks from Jellyfin from microseconds to nanoseconds
# Ain't nobody got time for nanoseconds
track_dict = {
"title": data_dict.get("Name", ""),
"musicbrainz_id": data_dict.get(KEYS["TRACK_MB_ID"], None),
"run_time_ticks": data_dict.get(KEYS["RUN_TIME_TICKS"], None),
"run_time": data_dict.get(KEYS["RUN_TIME"], None),
"run_time_ticks": data_dict.get(KEYS["RUN_TIME_TICKS"], None)
// 10000,
"run_time": convert_to_seconds(
data_dict.get(KEYS["RUN_TIME"], None)
),
}
track = Track.find_or_create(artist_dict, album_dict, track_dict)
@ -123,8 +127,11 @@ def jellyfin_websocket(request):
jellyfin_data = {
"user_id": request.user.id,
"timestamp": parse(data_dict.get("UtcTimestamp")),
"playback_position_ticks": data_dict.get("PlaybackPositionTicks"),
"playback_position": data_dict.get("PlaybackPosition"),
"playback_position_ticks": data_dict.get("PlaybackPositionTicks")
// 10000,
"playback_position": convert_to_seconds(
data_dict.get("PlaybackPosition")
),
"source": "Jellyfin",
"source_id": data_dict.get('MediaSourceId'),
"is_paused": data_dict.get("IsPaused") in TRUTHY_VALUES,
@ -136,6 +143,9 @@ def jellyfin_websocket(request):
video, request.user.id, jellyfin_data
)
if track:
# Prefer Jellyfin track IDs to Mopidy, so just overwrite anything in there
track.musicbrainz_id = data_dict.get(KEYS["TRACK_MB_ID"], None)
track.save()
scrobble = Scrobble.create_or_update_for_track(
track, request.user.id, jellyfin_data
)
@ -169,7 +179,6 @@ def mopidy_websocket(request):
track_dict = {
"title": data_dict.get("name"),
"musicbrainz_id": data_dict.get("musicbrainz_track_id"),
"run_time_ticks": data_dict.get("run_time_ticks"),
"run_time": data_dict.get("run_time"),
}
@ -186,6 +195,10 @@ def mopidy_websocket(request):
scrobble = None
if track:
# Mopidy MB ids suck, we'd prefer jellyfin, but we'll take this if we have no other
if not track.musicbrainz_id:
track.musicbrainz_id = data_dict.get("musicbrainz_track_id")
track.save()
scrobble = Scrobble.create_or_update_for_track(
track, request.user.id, mopidy_data
)

View File

@ -5,6 +5,7 @@ from uuid import uuid4
from django.db import models
from django.utils.translation import gettext_lazy as _
from django_extensions.db.models import TimeStampedModel
from scrobbles.utils import convert_to_seconds
logger = logging.getLogger(__name__)
BNULL = {"blank": True, "null": True}
@ -80,8 +81,8 @@ class Video(TimeStampedModel):
"year": data_dict.get("Year", ""),
"overview": data_dict.get("Overview", None),
"tagline": data_dict.get("Tagline", None),
"run_time_ticks": data_dict.get("RunTimeTicks", None),
"run_time": data_dict.get("RunTime", None),
"run_time_ticks": data_dict.get("RunTimeTicks", 0) // 10000,
"run_time": convert_to_seconds(data_dict.get("RunTime", "")),
}
if data_dict.get("ItemType", "") == "Episode":