Bladeren bron

[scrobbles] Add two new methods to Scrobble model

Colin Powell 1 maand geleden
bovenliggende
commit
7207ca385e
1 gewijzigde bestanden met toevoegingen van 17 en 1 verwijderingen
  1. 17 1
      vrobbler/apps/scrobbles/models.py

+ 17 - 1
vrobbler/apps/scrobbles/models.py

@@ -844,6 +844,12 @@ class Scrobble(TimeStampedModel):
     def is_long_play(self) -> bool:
         return self.media_obj.__class__.__name__ in LONG_PLAY_MEDIA.values()
 
+    @property
+    def elapsed_time(self) -> int | None:
+        if self.played_to_completion:
+            return self.playback_position_seconds
+        return (timezone.now() - self.timestamp).seconds
+
     @property
     def percent_played(self) -> int:
         if not self.media_obj:
@@ -857,7 +863,7 @@ class Scrobble(TimeStampedModel):
 
         playback_seconds = self.playback_position_seconds
         if not playback_seconds:
-            playback_seconds = (timezone.now() - self.timestamp).seconds
+            playback_seconds = self.elapsed_time
 
         run_time_secs = self.media_obj.run_time_seconds
         percent = int((playback_seconds / run_time_secs) * 100)
@@ -973,6 +979,16 @@ class Scrobble(TimeStampedModel):
         )
         return True
 
+    @classmethod
+    def by_date(cls, media_type: str = "Track"):
+        cls.objects.filter(media_type=media_type).values(
+            "timestamp__date"
+        ).annotate(count=models.Count("id")).values(
+            "timestamp__date", "count"
+        ).order_by(
+            "-count",
+        )
+
     @property
     def media_obj(self):
         media_obj = None