[tracks] Fix adding tracks without mopidy_uri

This commit is contained in:
2026-06-05 14:41:37 -04:00
parent dcc7229e90
commit ec219ef3ea
5 changed files with 141 additions and 68 deletions

View File

@ -992,46 +992,11 @@ def add_to_mopidy_queue(request, uuid):
)
return redirect("scrobbles:detail", uuid=uuid)
raw_data = scrobble.log.get("raw_data", {})
mopidy_uri = raw_data.get("mopidy_uri")
logger.debug(mopidy_uri)
if not mopidy_uri:
messages.add_message(
request,
messages.ERROR,
"No Mopidy URI found for this scrobble.",
)
return redirect("scrobbles:detail", uuid=uuid)
rpc_url = mopidy_url.rstrip("/") + "/rpc"
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "core.tracklist.add",
"params": {"uris": [mopidy_uri]},
}
try:
resp = requests.post(rpc_url, json=payload, timeout=10)
resp.raise_for_status()
rpc_result = resp.json()
if rpc_result.get("error"):
messages.add_message(
request,
messages.ERROR,
f'Mopidy error: {rpc_result["error"]}',
)
else:
msg = f'Added "{scrobble.media_obj}" to Mopidy queue.'
messages.add_message(request, messages.SUCCESS, msg)
except requests.RequestException as e:
messages.add_message(
request,
messages.ERROR,
f"Failed to contact Mopidy: {e}",
)
from scrobbles.tasks import add_scrobble_to_mopidy_queue as task
task.delay(scrobble.id)
msg = f'Adding "{scrobble.media_obj}" to Mopidy queue.'
messages.add_message(request, messages.SUCCESS, msg)
return redirect("scrobbles:detail", uuid=uuid)
@ -1055,13 +1020,13 @@ def add_to_mopidy_monthly_playlist(request, uuid):
now = now_user_timezone(profile)
playlist_name = DateFormat(now).format(pattern)
from scrobbles.utils import add_track_to_mopidy_monthly_playlist
from scrobbles.tasks import add_scrobble_to_mopidy_monthly_playlist as task
add_track_to_mopidy_monthly_playlist(scrobble)
task.delay(scrobble.id)
messages.add_message(
request,
messages.SUCCESS,
f'Added "{scrobble.media_obj}" to monthly playlist "{playlist_name}".',
f'Adding "{scrobble.media_obj}" to monthly playlist "{playlist_name}".',
)
return redirect("scrobbles:detail", uuid=uuid)
@ -1275,6 +1240,17 @@ class ScrobbleDetailView(DetailView):
user=self.request.user, **{fk_field: media_obj}
).exists()
if media_type == "Track" and media_obj:
scrobbles = Scrobble.objects.filter(
track=media_obj, user=self.object.user
).order_by("-timestamp")[:20]
context["has_mopidy_uri"] = any(
(s.log or {}).get("raw_data", {}).get("mopidy_uri")
for s in scrobbles
)
else:
context["has_mopidy_uri"] = False
return context