]> git.0d.be Git - django-panik-nonstop.git/commitdiff
stamina: wait 7 days before allowing same track wip/stamina
authorFrédéric Péters <fpeters@0d.be>
Thu, 2 Jul 2020 10:46:20 +0000 (12:46 +0200)
committerFrédéric Péters <fpeters@0d.be>
Thu, 2 Jul 2020 11:02:42 +0000 (13:02 +0200)
nonstop/app_settings.py
nonstop/management/commands/stamina.py

index 35f6d402d769e291147441e58aa3d7888f6386e9..0f495a4333b7146344eeb8a9ed823014d82dc88c 100644 (file)
@@ -34,5 +34,9 @@ class AppSettings:
     def ON_AIR_SWITCH_URL(self):
         return self.get_setting('ON_AIR_SWITCH_URL', None)
 
+    @property
+    def NO_REPEAT_DELAY(self):
+        return self.get_setting('NO_REPEAT_DELAY', 7)
+
 
 app_settings = AppSettings()
index 4095b8d014711b406c9ee03be07fc8748d16f585..cf0bb120f194b539161580d1257abbf834e86e26 100644 (file)
@@ -40,6 +40,10 @@ class Command(BaseCommand):
         except AttributeError:
             jingles = []
 
+        recent_tracks_id = [x.track_id for x in
+                SomaLogLine.objects.exclude(on_air=False).filter(
+                    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:
             if (current_datetime - start_datetime) > max_duration and (
@@ -57,8 +61,12 @@ class Command(BaseCommand):
             track = Track.objects.filter(
                     nonstop_zones=zone,
                     duration__isnull=False).exclude(
-                            id__in=[x.id for x in playlist if isinstance(x, Track)]
+                            id__in=recent_tracks_id + [x.id for x in playlist if isinstance(x, Track)]
                     ).order_by('?').first()
+            if track is None:
+                # no track, reduce recent tracks exclusion
+                recent_tracks_id = recent_tracks_id[:len(recent_tracks_id)//2]
+                continue
             playlist.append(track)
             current_datetime = start_datetime + sum(
                     [x.duration for x in playlist], datetime.timedelta(seconds=0))
@@ -72,7 +80,7 @@ class Command(BaseCommand):
                         duration__gte=remaining_time,
                         duration__lt=remaining_time + datetime.timedelta(seconds=1)
                         ).exclude(
-                            id__in=[x.id for x in playlist if isinstance(x, Track)]
+                            id__in=recent_tracks_id + [x.id for x in playlist if isinstance(x, Track)]
                         ).order_by('?').first()
                 if track:
                     # found a track