quick fix on bugs due to Django 1.10

This commit is contained in:
bkfox
2016-08-19 19:35:05 +02:00
parent a82b73f70e
commit ae8162643e
9 changed files with 59 additions and 52 deletions

View File

@ -170,7 +170,9 @@ class Station(programs.Nameable):
@staticmethod
def __mix_logs_and_diff(diffs, logs, count = 0):
"""
Mix together logs and diffusion items ordering by their date.
Mix together logs and diffusion items of the same day,
ordered by their date.
Diffs and Logs are assumed to be ordered by -date, and so is
the resulting list
"""
@ -189,10 +191,15 @@ class Station(programs.Nameable):
if count and len(items) >= count:
break
if diff_ and (not count or len(items) <= count):
logs_ = logs.filter(date__lt = diff_.end)
items.extend(logs_)
if diff_:
if count and len(items) >= count:
return items[:count]
logs_ = logs.filter(date__lt = diff_.end)
else:
logs_ = logs.all()
items.extend(logs_)
return items[:count] if count else items
@ -305,7 +312,8 @@ class Source(programs.Nameable):
program = models.ForeignKey(
programs.Program,
verbose_name = _('related program'),
blank = True, null = True
blank = True, null = True,
limit_choices_to = { 'stream__isnull': False },
)
url = models.TextField(
_('url'),
@ -355,7 +363,7 @@ class Source(programs.Nameable):
self.controller.playlist = [ sound.path for sound in
programs.Sound.objects.filter(
type = programs.Sound.Type.archive,
path__startswith = program.path
program = program,
)
]
return

View File

@ -25,6 +25,14 @@ class Monitor:
Time in seconds before a diffusion that have archives is cancelled
because it has not been played.
"""
sync_timeout = 60*10
"""
Time in minuts before all stream playlists are checked and updated
"""
sync_next = None
"""
Datetime of the next sync
"""
def __init__(self, station, **kwargs):
self.station = station
@ -44,6 +52,7 @@ class Monitor:
return
self.trace()
self.sync_playlists()
self.handle()
def log(self, **kwargs):
@ -112,6 +121,22 @@ class Monitor:
related = track
)
def sync_playlists(self):
"""
Synchronize updated playlists
"""
now = tz.now()
if self.sync_next and self.sync_next < now:
return
self.sync_next = now + tz.timedelta(seconds = self.sync_timeout)
for source in self.station.stream_sources:
playlist = [ sound.path for sound in
source.program.sound_set.all().order_by('path') ]
if playlist != source.controller.playlist:
source.controller.playlist = playlist
def trace_canceled(self):
"""
Check diffusions that should have been played but did not start,

View File

@ -43,7 +43,8 @@ A stream is a source that:
- is interactive
{% endcomment %}
def stream (id, file) =
s = playlist(id = '#{id}_playlist', mode = "random", file)
s = playlist(id = '#{id}_playlist', mode = "random", reload_mode='watch',
file)
interactive_source(id, s)
end
{% endblock %}