Просмотр исходного кода

[locations] Tigten up how we finish locations

Colin Powell 1 год назад
Родитель
Сommit
36bc1c2e95
2 измененных файлов с 21 добавлено и 15 удалено
  1. 20 14
      vrobbler/apps/scrobbles/models.py
  2. 1 1
      vrobbler/apps/scrobbles/utils.py

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

@@ -776,21 +776,27 @@ class Scrobble(TimeStampedModel):
             .first()
         )
 
-        geo_loc_has_not_moved = False
-        if key == "geo_location" and not cls.has_moved(media, user_id):
-            # We have a new location, but have not moved from it,
-            # don't proceed with scrobbling, but update the last GeoLoc
-            geo_loc_has_not_moved = True
-            if not scrobble:
-                scrobble = (
-                    cls.objects.filter(
-                        media_type=cls.MediaType.GEO_LOCATION, user_id=user_id
-                    )
-                    .order_by("-timestamp")
-                    .first()
+        moved_location = False
+        if key == "geo_location":
+            # For geo locations, we always only care about our last location
+            scrobble = (
+                cls.objects.filter(
+                    media_type=cls.MediaType.GEO_LOCATION, user_id=user_id
                 )
-
-        if scrobble and (scrobble.can_be_updated or geo_loc_has_not_moved):
+                .order_by("-timestamp")
+                .first()
+            )
+            if scrobble and scrobble.media_obj == media:
+                # If scrobble loc and new loc are identical, we haven't moved
+                moved_location = False
+            else:
+                # We have a new location, but have not moved from it,
+                # don't proceed with scrobbling, but update the last GeoLoc
+                moved_location = cls.has_moved(media, user_id)
+            if scrobble and moved_location:
+                check_scrobble_for_finish(scrobble, force_finish=True)
+
+        if scrobble and (scrobble.can_be_updated or not moved_location):
             source = scrobble_data["source"]
             mtype = media.__class__.__name__
             logger.info(

+ 1 - 1
vrobbler/apps/scrobbles/utils.py

@@ -92,7 +92,7 @@ def check_scrobble_for_finish(
     scrobble: "Scrobble", force_to_100=False, force_finish=False
 ) -> None:
     completion_percent = scrobble.media_obj.COMPLETION_PERCENT
-    if scrobble.media_type == "GeoLocation":
+    if scrobble.media_type == "GeoLocation" and not force_finish:
         logger.info(
             f"{scrobble.id} not complete, GeoLocs are completed when new one is created"
         )