[brickset] Fix manual scrobbling and admin

This commit is contained in:
2025-06-09 10:36:13 -04:00
parent 8773542099
commit e980e3c5c9
10 changed files with 120 additions and 30 deletions

View File

@ -8,6 +8,7 @@ import pytz
from beers.models import Beer
from boardgames.models import BoardGame
from books.models import Book
from bricksets.models import BrickSet
from dateutil.parser import parse
from django.utils import timezone
from locations.constants import LOCATION_PROVIDERS
@ -23,7 +24,7 @@ from scrobbles.constants import (
SCROBBLE_CONTENT_URLS,
)
from scrobbles.models import Scrobble
from scrobbles.utils import convert_to_seconds
from scrobbles.utils import convert_to_seconds, extract_domain
from sports.models import SportEvent
from sports.thesportsdb import lookup_event_from_thesportsdb
from tasks.models import Task
@ -322,14 +323,12 @@ def manual_scrobble_from_url(
we know about the content type, and routes it to the appropriate media
scrobbler. Otherwise, return nothing."""
content_key = ""
try:
domain = url.split("//")[-1].split("/")[0]
except IndexError:
domain = None
domain = extract_domain(url)
for key, content_url in SCROBBLE_CONTENT_URLS.items():
if domain in content_url:
content_key = key
for key, content_urls in SCROBBLE_CONTENT_URLS.items():
for content_url in content_urls:
if domain in content_url:
content_key = key
item_id = None
if not content_key:
@ -343,8 +342,10 @@ def manual_scrobble_from_url(
except IndexError:
pass
if content_key == "-i":
if content_key == "-i" and "v=" in url:
item_id = url.split("v=")[1].split("&")[0]
elif content_key == "-i" and "title/tt" in url:
item_id = "tt" + str(item_id)
scrobble_fn = MANUAL_SCROBBLE_FNS[content_key]
return eval(scrobble_fn)(item_id, user_id, action=action)
@ -853,3 +854,32 @@ def manual_scrobble_puzzle(
# TODO Kick out a process to enrich the media here, and in every scrobble event
return Scrobble.create_or_update(puzzle, user_id, scrobble_dict)
def manual_scrobble_brickset(
brickset_id: str, user_id: int, action: Optional[str] = None
):
brickset = BrickSet.find_or_create(brickset_id)
if not brickset:
logger.error(f"No brickset found for Brickset ID {brickset_id}")
return
scrobble_dict = {
"user_id": user_id,
"timestamp": timezone.now(),
"playback_position_seconds": 0,
"source": "Vrobbler",
}
logger.info(
"[vrobbler-scrobble] brickset scrobble request received",
extra={
"brickset_id": brickset.id,
"user_id": user_id,
"scrobble_dict": scrobble_dict,
"media_type": Scrobble.MediaType.BRICKSET,
},
)
# TODO Kick out a process to enrich the media here, and in every scrobble event
return Scrobble.create_or_update(brickset, user_id, scrobble_dict)