Ver código fonte

[tasks] Finish task based on timestamp, not now

Colin Powell 2 meses atrás
pai
commit
42699f84d2

+ 5 - 5
vrobbler/apps/scrobbles/models.py

@@ -1140,9 +1140,9 @@ class Scrobble(TimeStampedModel):
         if existing_locations := location.in_proximity(named=True):
             existing_location = existing_locations.first()
             ts = int(pendulum.now().timestamp())
-            scrobble.log[
-                ts
-            ] = f"Location {location.id} too close to this scrobble"
+            scrobble.log[ts] = (
+                f"Location {location.id} too close to this scrobble"
+            )
             scrobble.save(update_fields=["log"])
             logger.info(
                 f"[scrobbling] finished - found existing named location",
@@ -1216,8 +1216,8 @@ class Scrobble(TimeStampedModel):
         send_notifications_for_scrobble(scrobble.id)
         return scrobble
 
-    def stop(self, force_finish=False) -> None:
-        self.stop_timestamp = timezone.now()
+    def stop(self, timestamp=None, force_finish=False) -> None:
+        self.stop_timestamp = timestamp or timezone.now()
         self.played_to_completion = True
         self.in_progress = False
 

+ 4 - 3
vrobbler/apps/scrobbles/scrobblers.py

@@ -1,3 +1,4 @@
+from datetime import datetime
 import logging
 import re
 from typing import Optional
@@ -326,7 +327,7 @@ def manual_scrobble_from_url(
 
 
 def todoist_scrobble_task_finish(
-    todoist_task: dict, user_id: int
+    todoist_task: dict, user_id: int, timestamp: datetime
 ) -> Optional[Scrobble]:
     scrobble = Scrobble.objects.filter(
         user_id=user_id,
@@ -341,7 +342,7 @@ def todoist_scrobble_task_finish(
         )
         return
 
-    scrobble.stop(force_finish=True)
+    scrobble.stop(timestamp=timestamp, force_finish=True)
 
     return scrobble
 
@@ -447,7 +448,7 @@ def todoist_scrobble_task(
                 "todoist_id": todoist_task["todoist_id"],
             },
         )
-        return todoist_scrobble_task_finish(todoist_task, user_id)
+        return todoist_scrobble_task_finish(todoist_task, user_id, timestamp)
 
     # Default to create new scrobble "if not in_progress_scrobble and in_progress_in_todoist"
     # TODO Should use updated_at from TOdoist, but parsing isn't working