Clean up code for manaul scrobblign

This commit is contained in:
2023-04-11 18:08:43 -04:00
parent 4e38605008
commit 7db98f0979
5 changed files with 30 additions and 41 deletions

View File

@ -8,6 +8,13 @@ LONG_PLAY_MEDIA = {
"books": "Book", "books": "Book",
} }
MANUAL_SCROBBLE_FNS = {
"-v": "manual_scrobble_video_game",
"-b": "manual_scrobble_book",
"-s": "manual_scrobble_sport_event",
"-i": "manual_scrobble_video",
}
class AsTsvColumn(Enum): class AsTsvColumn(Enum):
ARTIST_NAME = 0 ARTIST_NAME = 0

View File

@ -639,9 +639,9 @@ class Scrobble(TimeStampedModel):
scrobble_data.pop("mopidy_status", None) scrobble_data.pop("mopidy_status", None)
scrobble_data.pop("jellyfin_status", None) scrobble_data.pop("jellyfin_status", None)
source = scrobble_data["source"] source = scrobble_data["source"]
mtype = media.__class__.__name__
logger.info( logger.info(
f"Creating for {media.id} - {source}", f"[scrobbling] creating for {mtype} {media.id} from {source}"
{"scrobble_data": scrobble_data, "media": media},
) )
return cls.create(scrobble_data) return cls.create(scrobble_data)

View File

@ -17,6 +17,9 @@ from sports.models import SportEvent
from videos.models import Video from videos.models import Video
from videogames.models import VideoGame from videogames.models import VideoGame
from books.models import Book from books.models import Book
from vrobbler.apps.books.openlibrary import lookup_book_from_openlibrary
from vrobbler.apps.sports.thesportsdb import lookup_event_from_thesportsdb
from vrobbler.apps.videogames.howlongtobeat import lookup_game_from_hltb
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -166,7 +169,7 @@ def jellyfin_scrobble_video(data_dict: dict, user_id: Optional[int]):
def manual_scrobble_video(imdb_id: str, user_id: int): def manual_scrobble_video(imdb_id: str, user_id: int):
video = Video.find_or_create({"imdb_id": imdb_id}) video = Video.find_or_create(imdb_id)
# When manually scrobbling, try finding a source from the series # When manually scrobbling, try finding a source from the series
if video.tv_series: if video.tv_series:
@ -182,15 +185,16 @@ def manual_scrobble_video(imdb_id: str, user_id: int):
return Scrobble.create_or_update(video, user_id, scrobble_dict) return Scrobble.create_or_update(video, user_id, scrobble_dict)
def manual_scrobble_event(data_dict: dict, user_id: Optional[int]): def manual_scrobble_event(thesportsdb_id: str, user_id: int):
data_dict = lookup_event_from_thesportsdb(thesportsdb_id)
event = SportEvent.find_or_create(data_dict) event = SportEvent.find_or_create(data_dict)
scrobble_dict = build_scrobble_dict(data_dict, user_id) scrobble_dict = build_scrobble_dict(data_dict, user_id)
return Scrobble.create_or_update(event, user_id, scrobble_dict) return Scrobble.create_or_update(event, user_id, scrobble_dict)
def manual_scrobble_video_game(data_dict: dict, user_id: Optional[int]): def manual_scrobble_video_game(hltb_id: str, user_id: int):
data_dict = lookup_game_from_hltb(hltb_id)
game = VideoGame.find_or_create(data_dict) game = VideoGame.find_or_create(data_dict)
scrobble_dict = { scrobble_dict = {
@ -205,7 +209,8 @@ def manual_scrobble_video_game(data_dict: dict, user_id: Optional[int]):
return Scrobble.create_or_update(game, user_id, scrobble_dict) return Scrobble.create_or_update(game, user_id, scrobble_dict)
def manual_scrobble_book(data_dict: dict, user_id: Optional[int]): def manual_scrobble_book(openlibrary_id: str, user_id: int):
data_dict = lookup_book_from_openlibrary(openlibrary_id)
book = Book.find_or_create(data_dict) book = Book.find_or_create(data_dict)
scrobble_dict = { scrobble_dict = {

View File

@ -33,6 +33,7 @@ from scrobbles.constants import (
JELLYFIN_AUDIO_ITEM_TYPES, JELLYFIN_AUDIO_ITEM_TYPES,
JELLYFIN_VIDEO_ITEM_TYPES, JELLYFIN_VIDEO_ITEM_TYPES,
LONG_PLAY_MEDIA, LONG_PLAY_MEDIA,
MANUAL_SCROBBLE_FNS,
) )
from scrobbles.export import export_scrobbles from scrobbles.export import export_scrobbles
from scrobbles.forms import ExportScrobbleForm, ScrobbleForm from scrobbles.forms import ExportScrobbleForm, ScrobbleForm
@ -47,9 +48,6 @@ from scrobbles.scrobblers import (
jellyfin_scrobble_track, jellyfin_scrobble_track,
jellyfin_scrobble_video, jellyfin_scrobble_video,
manual_scrobble_book, manual_scrobble_book,
manual_scrobble_event,
manual_scrobble_video,
manual_scrobble_video_game,
mopidy_scrobble_podcast, mopidy_scrobble_podcast,
mopidy_scrobble_track, mopidy_scrobble_track,
) )
@ -58,10 +56,6 @@ from scrobbles.tasks import (
process_lastfm_import, process_lastfm_import,
process_tsv_import, process_tsv_import,
) )
from sports.thesportsdb import lookup_event_from_thesportsdb
from videogames.howlongtobeat import lookup_game_from_hltb
from books.openlibrary import lookup_book_from_openlibrary
from scrobbles.utils import ( from scrobbles.utils import (
get_long_plays_completed, get_long_plays_completed,
get_long_plays_in_progress, get_long_plays_in_progress,
@ -209,32 +203,12 @@ class ManualScrobbleView(FormView):
template_name = "scrobbles/manual_form.html" template_name = "scrobbles/manual_form.html"
def form_valid(self, form): def form_valid(self, form):
item_str = form.cleaned_data.get("item_id") item_str = form.cleaned_data.get("item_id")
key = item_str[:2] logger.debug(f"Looking for scrobblable media with input {item_str}")
item_id = item_str[3:]
data_dict = None
if key == "-v": key, item_id = item_str[:2], item_str[3:]
logger.debug(f"Looking for video game with ID {item_id}") scrobble_fn = MANUAL_SCROBBLE_FNS[key]
data_dict = lookup_game_from_hltb(item_id.replace("-v", "")) eval(scrobble_fn)(item_id, self.request.user.id)
if data_dict:
manual_scrobble_video_game(data_dict, self.request.user.id)
if key == "-b":
logger.debug(f"Looking for book with ID {item_id}")
data_dict = lookup_book_from_openlibrary(item_id.replace("-b", ""))
if data_dict:
manual_scrobble_book(data_dict, self.request.user.id)
if key == "-s":
logger.debug(f"Looking for sport event with ID {item_id}")
data_dict = lookup_event_from_thesportsdb(item_id)
if data_dict:
manual_scrobble_event(data_dict, self.request.user.id)
if key == "-i":
manual_scrobble_video(item_id, self.request.user.id)
return HttpResponseRedirect(self.request.META.get("HTTP_REFERER")) return HttpResponseRedirect(self.request.META.get("HTTP_REFERER"))
@ -349,7 +323,6 @@ def mopidy_webhook(request):
try: try:
data_dict = json.loads(request.data) data_dict = json.loads(request.data)
except TypeError: except TypeError:
logger.warning("Received Mopidy data as dict, rather than a string")
data_dict = request.data data_dict = request.data
# For making things easier to build new input processors # For making things easier to build new input processors

View File

@ -10,7 +10,11 @@ logger = logging.getLogger(__name__)
def lookup_video_from_imdb(name_or_id: str, kind: str = "movie") -> dict: def lookup_video_from_imdb(name_or_id: str, kind: str = "movie") -> dict:
name_or_id = name_or_id.strip("tt")
# Very few video titles start with tt, but IMDB IDs often come in with it
if name_or_id.startswith("tt"):
name_or_id = name_or_id[2:]
video_dict = {} video_dict = {}
imdb_id = None imdb_id = None