Clean up code for manaul scrobblign
This commit is contained in:
@ -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
|
||||||
|
|||||||
@ -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)
|
||||||
|
|
||||||
|
|||||||
@ -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 = {
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user