Add better property for multiple media types
This adds a fun helper method on Scrobble instances to get whatever the type should be based on media_obj
This commit is contained in:
@ -52,28 +52,21 @@ class Scrobble(TimeStampedModel):
|
||||
|
||||
@property
|
||||
def percent_played(self) -> int:
|
||||
if self.playback_position_ticks and self.media_run_time_ticks:
|
||||
if self.playback_position_ticks and self.media_obj.run_time_ticks:
|
||||
return int(
|
||||
(self.playback_position_ticks / self.media_run_time_ticks)
|
||||
(self.playback_position_ticks / self.media_obj.run_time_ticks)
|
||||
* 100
|
||||
)
|
||||
# If we don't have media_run_time_ticks, let's guess from created time
|
||||
# If we don't have media_obj.run_time_ticks, let's guess from created time
|
||||
now = timezone.now()
|
||||
playback_duration = (now - self.created).seconds
|
||||
if playback_duration and self.track.run_time:
|
||||
return int((playback_duration / int(self.track.run_time)) * 100)
|
||||
if playback_duration and self.media_obj.run_time:
|
||||
return int(
|
||||
(playback_duration / int(self.media_obj.run_time)) * 100
|
||||
)
|
||||
|
||||
return 0
|
||||
|
||||
@property
|
||||
def media_run_time_ticks(self) -> int:
|
||||
if self.video:
|
||||
return self.video.run_time_ticks
|
||||
if self.track:
|
||||
return self.track.run_time_ticks
|
||||
# this is hacky, but want to avoid divide by zero
|
||||
return 1
|
||||
|
||||
def is_stale(self, backoff, wait_period) -> bool:
|
||||
scrobble_is_stale = self.in_progress and self.modified > wait_period
|
||||
|
||||
@ -94,16 +87,19 @@ class Scrobble(TimeStampedModel):
|
||||
|
||||
return scrobble_is_stale
|
||||
|
||||
def __str__(self):
|
||||
media = None
|
||||
@property
|
||||
def media_obj(self):
|
||||
media_obj = None
|
||||
if self.video:
|
||||
media = self.video
|
||||
media_obj = self.video
|
||||
if self.track:
|
||||
media = self.track
|
||||
media_obj = self.track
|
||||
if self.podcast_episode:
|
||||
media_obj = self.podcast_episode
|
||||
return media_obj
|
||||
|
||||
return (
|
||||
f"Scrobble of {media} {self.timestamp.year}-{self.timestamp.month}"
|
||||
)
|
||||
def __str__(self):
|
||||
return f"Scrobble of {self.media_obj} {self.timestamp.year}-{self.timestamp.month}"
|
||||
|
||||
@classmethod
|
||||
def create_or_update_for_video(
|
||||
|
||||
@ -194,27 +194,16 @@
|
||||
<ul style="padding-right:10px;">
|
||||
<b>Now playing</b>
|
||||
{% for scrobble in now_playing_list %}
|
||||
{% if scrobble.video %}
|
||||
<div>
|
||||
{{scrobble.video.title}}<br/>
|
||||
<small>{{scrobble.created|naturaltime}}<br/>
|
||||
from {{scrobble.source}}</small>
|
||||
<div class="progress-bar">
|
||||
<span class="progress-bar-fill" style="width: {{scrobble.percent_played}}%;"></span>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if scrobble.track %}
|
||||
<div>
|
||||
{{scrobble.track.title}}<br/>
|
||||
<em>{{scrobble.track.artist}}</em><br/>
|
||||
{{scrobble.media_obj.title}}<br/>
|
||||
{% if scrobble.track %}<em>{{scrobble.track.artist}}</em><br/>{% endif %}
|
||||
{% if scrobble.podcast_episode%}<em>{{scrobble.podcast_episode.podcast}}</em><br/>{% endif %}
|
||||
<small>{{scrobble.created|naturaltime}}<br/>
|
||||
from {{scrobble.source}}</small>
|
||||
<div class="progress-bar" style="margin-right:5px;">
|
||||
<span class="progress-bar-fill" style="width: {{scrobble.percent_played}}%;"></span>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<hr/>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
Reference in New Issue
Block a user