]> git.0d.be Git - django-panik-nonstop.git/commitdiff
stamina: allow overflows when all else fails
authorFrédéric Péters <fpeters@0d.be>
Mon, 13 Jul 2020 20:41:41 +0000 (22:41 +0200)
committerFrédéric Péters <fpeters@0d.be>
Mon, 13 Jul 2020 20:41:41 +0000 (22:41 +0200)
nonstop/management/commands/stamina.py

index 3bcd19dfecb443222abe246334d0774e7d4671a6..5f47066aa1c4dcdae59982df34872ad8c1c97299 100644 (file)
@@ -46,7 +46,8 @@ class Command(BaseCommand):
                     track__isnull=False,
                     play_timestamp__gt=datetime.datetime.now() - datetime.timedelta(days=app_settings.NO_REPEAT_DELAY))]
         t0 = datetime.datetime.now()
-        while current_datetime < end_datetime and adjustment_counter < 5:
+        allow_overflow = False
+        while current_datetime < end_datetime:
             if (current_datetime - start_datetime) > max_duration and (
                     (end_datetime - current_datetime) > max_duration_leftover):
                 break
@@ -71,7 +72,7 @@ class Command(BaseCommand):
             playlist.append(track)
             current_datetime = start_datetime + sum(
                     [x.duration for x in playlist], datetime.timedelta(seconds=0))
-            if current_datetime > end_datetime:
+            if current_datetime > end_datetime and not allow_overflow:
                 # last track overshot
                 # 1st strategy: remove last track and try to get a track with
                 # exact remaining time
@@ -91,6 +92,11 @@ class Command(BaseCommand):
                     # reduce playlist further
                     adjustment_counter += 1
                     playlist = playlist[:-1]
+                    if len(playlist) == 0 or adjustment_counter > 5:
+                        # a dedicated sound that ended a bit too early,
+                        # or too many failures to get an appropriate file,
+                        # allow whatever comes.
+                        allow_overflow = True
 
                 current_datetime = start_datetime + sum(
                         [x.duration for x in playlist], datetime.timedelta(seconds=0))