Clean up display of last scrobbles
This commit is contained in:
@ -19,6 +19,10 @@ class Album(TimeStampedModel):
|
|||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
@property
|
||||||
|
def mb_link(self):
|
||||||
|
return f"https://musicbrainz.org/release/{self.musicbrainz_id}"
|
||||||
|
|
||||||
|
|
||||||
class Artist(TimeStampedModel):
|
class Artist(TimeStampedModel):
|
||||||
name = models.CharField(max_length=255)
|
name = models.CharField(max_length=255)
|
||||||
@ -27,6 +31,10 @@ class Artist(TimeStampedModel):
|
|||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
@property
|
||||||
|
def mb_link(self):
|
||||||
|
return f"https://musicbrainz.org/artist/{self.musicbrainz_id}"
|
||||||
|
|
||||||
|
|
||||||
class Track(TimeStampedModel):
|
class Track(TimeStampedModel):
|
||||||
title = models.CharField(max_length=255, **BNULL)
|
title = models.CharField(max_length=255, **BNULL)
|
||||||
@ -39,6 +47,10 @@ class Track(TimeStampedModel):
|
|||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.title} by {self.artist}"
|
return f"{self.title} by {self.artist}"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def mb_link(self):
|
||||||
|
return f"https://musicbrainz.org/recording/{self.musicbrainz_id}"
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def find_or_create(
|
def find_or_create(
|
||||||
cls, artist_dict: Dict, album_dict: Dict, track_dict: Dict
|
cls, artist_dict: Dict, album_dict: Dict, track_dict: Dict
|
||||||
|
|||||||
@ -16,6 +16,9 @@ class Series(TimeStampedModel):
|
|||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
def imdb_link(self):
|
||||||
|
return f"https://www.imdb.com/title/{self.imdb_id}"
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name_plural = "series"
|
verbose_name_plural = "series"
|
||||||
|
|
||||||
@ -54,6 +57,8 @@ class Video(TimeStampedModel):
|
|||||||
return f"{self.tv_series} - Season {self.season_number}, Episode {self.episode_number}"
|
return f"{self.tv_series} - Season {self.season_number}, Episode {self.episode_number}"
|
||||||
return self.title
|
return self.title
|
||||||
|
|
||||||
|
def imdb_link(self):
|
||||||
|
return f"https://www.imdb.com/title/{self.imdb_id}"
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def find_or_create(cls, data_dict: Dict) -> "Video":
|
def find_or_create(cls, data_dict: Dict) -> "Video":
|
||||||
@ -75,7 +80,9 @@ class Video(TimeStampedModel):
|
|||||||
|
|
||||||
if data_dict.get("ItemType", "") == "Episode":
|
if data_dict.get("ItemType", "") == "Episode":
|
||||||
series_name = data_dict.get("SeriesName", "")
|
series_name = data_dict.get("SeriesName", "")
|
||||||
series, series_created = Series.objects.get_or_create(name=series_name)
|
series, series_created = Series.objects.get_or_create(
|
||||||
|
name=series_name
|
||||||
|
)
|
||||||
if series_created:
|
if series_created:
|
||||||
logger.debug(f"Created new series {series}")
|
logger.debug(f"Created new series {series}")
|
||||||
else:
|
else:
|
||||||
@ -87,7 +94,6 @@ class Video(TimeStampedModel):
|
|||||||
video_dict["episode_number"] = data_dict.get("EpisodeNumber", "")
|
video_dict["episode_number"] = data_dict.get("EpisodeNumber", "")
|
||||||
video_dict["season_number"] = data_dict.get("SeasonNumber", "")
|
video_dict["season_number"] = data_dict.get("SeasonNumber", "")
|
||||||
|
|
||||||
|
|
||||||
video, created = cls.objects.get_or_create(**video_dict)
|
video, created = cls.objects.get_or_create(**video_dict)
|
||||||
if created:
|
if created:
|
||||||
logger.debug(f"Created new video: {video}")
|
logger.debug(f"Created new video: {video}")
|
||||||
|
|||||||
@ -79,6 +79,7 @@ INSTALLED_APPS = [
|
|||||||
"django.contrib.messages",
|
"django.contrib.messages",
|
||||||
"django.contrib.staticfiles",
|
"django.contrib.staticfiles",
|
||||||
"django.contrib.sites",
|
"django.contrib.sites",
|
||||||
|
"django.contrib.humanize",
|
||||||
"django_filters",
|
"django_filters",
|
||||||
"django_extensions",
|
"django_extensions",
|
||||||
'rest_framework.authtoken',
|
'rest_framework.authtoken',
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% load humanize %}
|
||||||
|
|
||||||
{% block title %}{% endblock %}
|
{% block title %}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
@ -10,8 +12,8 @@
|
|||||||
<dl class="latest-scrobble">
|
<dl class="latest-scrobble">
|
||||||
<dt>{{scrobble.video.title}} - {{scrobble.video}}</dt>
|
<dt>{{scrobble.video.title}} - {{scrobble.video}}</dt>
|
||||||
<dd>
|
<dd>
|
||||||
{{scrobble.timestamp|date:"D, M j Y"}} |
|
Started {{scrobble.created|naturaltime}} from {{scrobble.source}}
|
||||||
<a href="https://www.imdb.com/title/{{scrobble.video.imdb_id}}">IMDB</a>
|
|
||||||
<div class="progress-bar">
|
<div class="progress-bar">
|
||||||
<span class="progress-bar-fill" style="width: {{scrobble.percent_played}}%;"></span>
|
<span class="progress-bar-fill" style="width: {{scrobble.percent_played}}%;"></span>
|
||||||
</div>
|
</div>
|
||||||
@ -22,8 +24,7 @@
|
|||||||
<dl class="latest-scrobble">
|
<dl class="latest-scrobble">
|
||||||
<dt>{{scrobble.track.title}} by {{scrobble.track.artist}} from {{scrobble.track.album}}</dt>
|
<dt>{{scrobble.track.title}} by {{scrobble.track.artist}} from {{scrobble.track.album}}</dt>
|
||||||
<dd>
|
<dd>
|
||||||
{{scrobble.timestamp|date:"D, M j Y"}} |
|
Started {{scrobble.created|naturaltime}} from {{scrobble.source}}
|
||||||
<a href="https://www.imdb.com/title/{{scrobble.track.musicbrainz_id}}">MusicBrainz</a>
|
|
||||||
<div class="progress-bar">
|
<div class="progress-bar">
|
||||||
<span class="progress-bar-fill" style="width: {{scrobble.percent_played}}%;"></span>
|
<span class="progress-bar-fill" style="width: {{scrobble.percent_played}}%;"></span>
|
||||||
</div>
|
</div>
|
||||||
@ -37,12 +38,12 @@
|
|||||||
<ul>
|
<ul>
|
||||||
{% for scrobble in object_list %}
|
{% for scrobble in object_list %}
|
||||||
<li>
|
<li>
|
||||||
{{scrobble.timestamp|date:"D, M j Y"}}:
|
{{scrobble.timestamp|naturaltime}}:
|
||||||
{% if scrobble.video %}
|
{% if scrobble.video %}
|
||||||
📼 <a href="https://www.imdb.com/title/{{scrobble.video.imdb_id}}">{{scrobble.video}}{% if scrobble.video.video_type == 'E' %} - {{scrobble.video.title}}{% endif %}</a></li>
|
🎥 watched <a href="{{scrobble.video.imdb_link}}">{{scrobble.video}}{% if scrobble.video.video_type == 'E' %} - {{scrobble.video.title}}{% endif %}</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if scrobble.track %}
|
{% if scrobble.track %}
|
||||||
🎶 <a href="https://musicbrainz.org/recording/{{scrobble.track.album.musicbrainz_id}}">{{scrobble.track}} by {{scrobble.track.artist}}</a></li>
|
🎶 listened to <a href="{{scrobble.track.mb_link}}">{{scrobble.track.title}}</a> by <a href="{{scrobble.track.artist.mb_link}}">{{scrobble.track.artist}}</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
Reference in New Issue
Block a user