Browse Source

[scrobbles] Allow skipping checks for existing scrobbles

Colin Powell 2 days ago
parent
commit
f91b127a2c
1 changed files with 25 additions and 20 deletions
  1. 25 20
      vrobbler/apps/scrobbles/models.py

+ 25 - 20
vrobbler/apps/scrobbles/models.py

@@ -1087,6 +1087,7 @@ class Scrobble(TimeStampedModel):
         key = media_class_to_foreign_key(media.__class__.__name__)
         media_query = models.Q(**{key: media})
         scrobble_data[key + "_id"] = media.id
+        skip_in_progress_check = kwargs.get("skip_in_progress_check", False)
 
         # Find our last scrobble of this media item (track, video, etc)
         scrobble = (
@@ -1110,27 +1111,31 @@ class Scrobble(TimeStampedModel):
             )
             return scrobble
 
-        logger.info(
-            f"[create_or_update] check for existing scrobble to update ",
-            extra={
-                "scrobble_id": scrobble.id if scrobble else None,
-                "media_type": mtype,
-                "media_id": media.id,
-                "scrobble_data": scrobble_data,
-            },
-        )
-        scrobble_data["playback_status"] = scrobble_data.pop("status", None)
-        # If it's marked as stopped, send it through our update mechanism, which will complete it
-        if scrobble and (
-            scrobble.can_be_updated
-            or scrobble_data["playback_status"] == "stopped"
-        ):
-            if "log" in scrobble_data.keys() and scrobble.log:
-                scrobble_data["log"] = scrobble.log | scrobble_data["log"]
-            return scrobble.update(scrobble_data)
+        if not skip_in_progress_check:
+            logger.info(
+                f"[create_or_update] check for existing scrobble to update ",
+                extra={
+                    "scrobble_id": scrobble.id if scrobble else None,
+                    "media_type": mtype,
+                    "media_id": media.id,
+                    "scrobble_data": scrobble_data,
+                },
+            )
+            scrobble_data["playback_status"] = scrobble_data.pop(
+                "status", None
+            )
+            # If it's marked as stopped, send it through our update mechanism, which will complete it
+            if scrobble and (
+                scrobble.can_be_updated
+                or scrobble_data["playback_status"] == "stopped"
+            ):
+                if "log" in scrobble_data.keys() and scrobble.log:
+                    scrobble_data["log"] = scrobble.log | scrobble_data["log"]
+                return scrobble.update(scrobble_data)
+
+            # Discard status before creating
+            scrobble_data.pop("playback_status")
 
-        # Discard status before creating
-        scrobble_data.pop("playback_status")
         logger.info(
             f"[scrobbling] creating new scrobble",
             extra={