forked from 0x2620/pandora
include next item tv api
This commit is contained in:
parent
615860a7e8
commit
a2b7cc9744
1 changed files with 21 additions and 14 deletions
|
@ -31,23 +31,28 @@ class Channel(models.Model):
|
||||||
items = Item.objects.filter(rendered=True, level__lte=cansee, sort__duration__gt=0)
|
items = Item.objects.filter(rendered=True, level__lte=cansee, sort__duration__gt=0)
|
||||||
if items.count() == 0:
|
if items.count() == 0:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
program = self.program.order_by('-start')
|
program = self.program.order_by('-start')
|
||||||
changed = False
|
changed = False
|
||||||
while program.count() < 1 or program[0].end < now:
|
play_now = program.filter(start__lte=now, end__gt=now).first()
|
||||||
|
while not play_now or not play_now.next():
|
||||||
|
played = self.program.filter(run=self.run)
|
||||||
|
if played.exists():
|
||||||
not_played = items.exclude(program__in=self.program.filter(run=self.run))
|
not_played = items.exclude(program__in=self.program.filter(run=self.run))
|
||||||
not_played_count = not_played.count()
|
not_played_count = not_played.count()
|
||||||
if not_played_count == 0:
|
if not_played_count == 0:
|
||||||
self.run += 1
|
self.run += 1
|
||||||
changed = True
|
changed = True
|
||||||
|
else:
|
||||||
|
changed = True
|
||||||
|
if changed:
|
||||||
not_played = items
|
not_played = items
|
||||||
not_played_count = not_played.count()
|
not_played_count = not_played.count()
|
||||||
if not_played_count > 1:
|
if not_played_count > 1 and program.exists():
|
||||||
not_played = not_played.exclude(id=program[0].id)
|
not_played = not_played.exclude(id=program[0].id)
|
||||||
not_played_count = not_played.count()
|
not_played_count = not_played.count()
|
||||||
item = not_played[randint(0, not_played_count-1)]
|
item = not_played[randint(0, not_played_count-1)]
|
||||||
if program.count() > 0:
|
if program.exists():
|
||||||
start = program.aggregate(Max('end'))['end__max']
|
start = program.order_by('-end')[0].end
|
||||||
else:
|
else:
|
||||||
start = now
|
start = now
|
||||||
p = Program()
|
p = Program()
|
||||||
|
@ -58,9 +63,10 @@ class Channel(models.Model):
|
||||||
p.channel = self
|
p.channel = self
|
||||||
p.save()
|
p.save()
|
||||||
program = self.program.order_by('-start')
|
program = self.program.order_by('-start')
|
||||||
|
play_now = program.filter(start__lte=now, end__gt=now).first()
|
||||||
if changed:
|
if changed:
|
||||||
self.save()
|
self.save()
|
||||||
return program[0]
|
return play_now
|
||||||
|
|
||||||
def json(self, user):
|
def json(self, user):
|
||||||
now = datetime.now()
|
now = datetime.now()
|
||||||
|
@ -82,6 +88,9 @@ class Program(models.Model):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "%s %s" % (self.item, self.start)
|
return "%s %s" % (self.item, self.start)
|
||||||
|
|
||||||
|
def next(self):
|
||||||
|
return self.channel.program.filter(start__gte=self.end).order_by('start').first()
|
||||||
|
|
||||||
def json(self, user, current=False):
|
def json(self, user, current=False):
|
||||||
item_json = self.item.json()
|
item_json = self.item.json()
|
||||||
r = {
|
r = {
|
||||||
|
@ -92,8 +101,6 @@ class Program(models.Model):
|
||||||
r['layers'] = self.item.get_layers(user)
|
r['layers'] = self.item.get_layers(user)
|
||||||
r['streams'] = [s.file.oshash for s in self.item.streams()]
|
r['streams'] = [s.file.oshash for s in self.item.streams()]
|
||||||
if current:
|
if current:
|
||||||
#requires python2.7
|
r['position'] = (current - self.start).total_seconds()
|
||||||
#r['position'] = (current - self.start).total_seconds()
|
r['next'] = self.next().json(user)
|
||||||
td = current - self.start
|
|
||||||
r['position'] = td.seconds + td.days * 24 * 3600 + float(td.microseconds)/10**6
|
|
||||||
return r
|
return r
|
||||||
|
|
Loading…
Reference in a new issue