Преглед на файлове

Add notes to scrobble model

Colin Powell преди 2 години
родител
ревизия
38f40e014a
променени са 2 файла, в които са добавени 40 реда и са изтрити 2 реда
  1. 21 0
      vrobbler/apps/scrobbles/migrations/0030_scrobble_notes.py
  2. 19 2
      vrobbler/apps/scrobbles/models.py

+ 21 - 0
vrobbler/apps/scrobbles/migrations/0030_scrobble_notes.py

@@ -0,0 +1,21 @@
+# Generated by Django 4.1.5 on 2023-03-11 22:33
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        (
+            "scrobbles",
+            "0029_remove_scrobble_video_game_minutes_played_and_more",
+        ),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name="scrobble",
+            name="notes",
+            field=models.TextField(blank=True, null=True),
+        ),
+    ]

+ 19 - 2
vrobbler/apps/scrobbles/models.py

@@ -417,6 +417,7 @@ class Scrobble(TimeStampedModel):
     source = models.CharField(max_length=255, **BNULL)
     source_id = models.TextField(**BNULL)
     scrobble_log = models.TextField(**BNULL)
+    notes = models.TextField(**BNULL)
 
     # Fields for keeping track long content like books and games
     book_pages_read = models.IntegerField(**BNULL)
@@ -466,6 +467,10 @@ class Scrobble(TimeStampedModel):
             return self.book_pages_read - self.previous.book_pages_read
         return self.book_pages_read
 
+    @property
+    def is_long_play(self) -> bool:
+        return self.media_obj.__class__.__name__ in LONG_PLAY_MEDIA.values()
+
     @property
     def percent_played(self) -> int:
         if not self.media_obj:
@@ -482,8 +487,20 @@ class Scrobble(TimeStampedModel):
             playback_ticks = (timezone.now() - self.timestamp).seconds * 1000
 
         percent = int((playback_ticks / self.media_obj.run_time_ticks) * 100)
-        if percent > 100:
-            percent = 100
+
+        if self.is_long_play:
+            run_time_secs = int(self.media_obj.run_time)
+            playback_secs = (timezone.now() - self.timestamp).seconds
+            long_play_secs = 0
+            if self.previous and not self.previous.long_play_complete:
+                long_play_secs = self.previous.long_play_seconds or 0
+            percent = int(
+                ((playback_secs + long_play_secs) / run_time_secs) * 100
+            )
+
+        # if percent > 100:
+        #    percent = 100
+
         return percent
 
     @property