cablegates/pandora/item/tasks.py

75 lines
2.4 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
# vi:si:et:sw=4:sts=4:ts=4
from datetime import timedelta
from celery.decorators import task, periodic_task
from django.db.models import Q
import models
@periodic_task(run_every=timedelta(days=1))
def cronjob(**kwargs):
print "do some cleanup stuff once a day"
2011-01-01 11:44:42 +00:00
2010-09-10 15:12:22 +00:00
@task(ignore_resulsts=True, queue='default')
def update_poster(itemId):
2010-09-23 16:01:48 +00:00
item = models.Item.objects.get(itemId=itemId)
2010-12-01 00:00:33 +00:00
item.make_poster(True)
2011-01-21 10:49:24 +00:00
item.make_icon()
2010-09-10 15:12:22 +00:00
2011-01-01 11:44:42 +00:00
@task(ignore_resulsts=True, queue='default')
2011-01-16 13:28:57 +00:00
def update_external(itemId):
item = models.Item.objects.get(itemId=itemId)
2011-01-16 13:28:57 +00:00
item.update_external()
2011-01-01 11:44:42 +00:00
@task(queue="encoding")
def update_streams(itemId):
'''
create stream, extract timeline and create derivatives
'''
item = models.Item.objects.get(itemId=itemId)
if item.files.filter(is_main=True, is_video=True, available=False).count() == 0:
item.update_streams()
return True
def load_subtitles(itemId):
item = models.Item.objects.get(itemId=itemId)
layer = models.Layer.objects.get(name='subtitles')
models.Annotation.objects.filter(layer=layer,item=item).delete()
offset = 0
2011-06-02 08:19:15 +00:00
language = ''
languages = [f.language for f in item.files.filter(is_main=True, is_subtitle=True,
available=True)]
if languages:
if 'en' in languages:
language = 'en'
else:
language = languages[0]
for f in item.files.filter(is_main=True, is_subtitle=True,
available=True, language=language).order_by('part'):
user = f.instances.all()[0].volume.user
for data in f.srt(offset):
annotation = models.Annotation(
item=f.item,
layer=layer,
start=data['in'],
end=data['out'],
value=data['value'],
user=user
)
annotation.save()
duration = item.files.filter(Q(is_audio=True)|Q(is_video=True)) \
2011-06-02 08:19:15 +00:00
.filter(is_main=True, available=True, part=f.part)
if duration:
duration = duration[0].duration
else:
models.Annotation.objects.filter(layer=layer,item=item).delete()
break
offset += duration
2011-06-02 08:19:15 +00:00
item.update_find()