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
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
# 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))