Parcourir la source

[scrobbles] Add back some nice to have methods

Colin Powell il y a 3 semaines
Parent
commit
e4fd9479f6
2 fichiers modifiés avec 45 ajouts et 4 suppressions
  1. 36 0
      vrobbler/apps/scrobbles/mixins.py
  2. 9 4
      vrobbler/apps/scrobbles/models.py

+ 36 - 0
vrobbler/apps/scrobbles/mixins.py

@@ -147,6 +147,42 @@ class ScrobblableItem(TimeStampedModel):
         )
         return Scrobble.create_or_update(self, user_id, scrobble_data)
 
+    @property
+    def start_url(self):
+        return reverse("scrobbles:start", kwargs={"uuid": self.uuid})
+
+    @property
+    def strings(self) -> ScrobblableConstants:
+        return ScrobblableConstants()
+
+    @property
+    def primary_image_url(self) -> str:
+        logger.warning(f"Not implemented yet")
+        return ""
+
+    @property
+    def logdata_cls(self) -> None:
+        from scrobbles.dataclasses import BaseLogData
+
+        return BaseLogData
+
+    @property
+    def subtitle(self) -> str:
+        return ""
+
+    @property
+    def run_time_seconds(self) -> int:
+        run_time = 900
+        if self.base_run_time_seconds:
+            run_time = self.base_run_time_seconds
+        return run_time
+
+    @property
+    def is_long_play_media(self) -> bool:
+        if not self.logdata_cls:
+            return False
+        return "long_play_complete" in self.logdata_cls.__dataclass_fields__
+
 
 # DEPRECATED
 class ScrobblableMixin(TimeStampedModel):

+ 9 - 4
vrobbler/apps/scrobbles/models.py

@@ -511,7 +511,7 @@ class Scrobble(TimeStampedModel):
         ScrobblableItem,
         null=True,
         on_delete=models.CASCADE,
-        related_name="scrobbles",
+        related_name="scrobble_set",
     )
     media_type = models.CharField(
         max_length=14,
@@ -863,8 +863,13 @@ class Scrobble(TimeStampedModel):
         return pages_read
 
     @property
-    def is_long_play(self) -> bool:
-        return self.media_obj.__class__.__name__ in LONG_PLAY_MEDIA.values()
+    def long_play_complete(self) -> bool: 
+        if not self.item.is_long_play_media:
+            raise Exception("Is not long play media")
+        if not self.log:
+            return True
+
+        return self.log.get("long_play_complete", False)
 
     @property
     def elapsed_time(self) -> int | None:
@@ -894,7 +899,7 @@ class Scrobble(TimeStampedModel):
         run_time_secs = self.media_obj.run_time_seconds
         percent = int((playback_seconds / run_time_secs) * 100)
 
-        if self.is_long_play:
+        if self.item.is_long_play_media:
             long_play_secs = 0
             if self.previous and not self.previous.long_play_complete:
                 long_play_secs = self.previous.long_play_seconds or 0