Jelajahi Sumber

Fix scrobbing pages

Colin Powell 2 tahun lalu
induk
melakukan
ee01ffa4ad

+ 1 - 0
vrobbler/apps/books/admin.py

@@ -22,6 +22,7 @@ class AuthorAdmin(admin.ModelAdmin):
 class PageAdmin(admin.ModelAdmin):
     date_hierarchy = "created"
     list_filter = ("book",)
+    ordering = ("book", "number")
 
 
 @admin.register(Book)

+ 4 - 2
vrobbler/apps/books/koreader.py

@@ -130,6 +130,7 @@ def build_scrobbles_from_pages(
     new_scrobbles = []
 
     new_scrobbles = []
+    pages_created = []
     for page_row in rows:
         koreader_id = page_row[KoReaderPageStatColumn.ID_BOOK.value]
         page_number = page_row[KoReaderPageStatColumn.PAGE.value]
@@ -147,8 +148,9 @@ def build_scrobbles_from_pages(
                 KoReaderPageStatColumn.DURATION.value
             ]
             page.save(update_fields=["start_time", "duration_seconds"])
-            page.refresh_from_db()
+            pages_created.append(page)
 
+    for page in pages_created:
         if page.is_scrobblable:
             # Page number is a placeholder, we'll re-preocess this after creation
             logger.debug(
@@ -161,7 +163,7 @@ def build_scrobbles_from_pages(
                 timestamp=page.start_time,
                 played_to_completion=True,
                 in_progress=False,
-                book_pages_read=page_number,
+                book_pages_read=page.number,
                 long_play_complete=False,
             )
             new_scrobbles.append(new_scrobble)

+ 2 - 2
vrobbler/apps/books/models.py

@@ -231,7 +231,7 @@ class Page(TimeStampedModel):
 
     @property
     def seconds_to_next_page(self) -> int:
-        seconds = 0
+        seconds = 999999  # Effectively infnity time as we have no next
         if not self.end_time:
             self._set_end_time()
         if self.next:
@@ -265,7 +265,7 @@ class Page(TimeStampedModel):
 
     def _set_end_time(self) -> None:
         if self.end_time:
-            return self.end_time
+            return
 
         self.end_time = self.start_time + timedelta(
             seconds=self.duration_seconds