PadmaClip and PadmaVideo as two separate classes
This commit is contained in:
parent
e543589c83
commit
9e3a4aa979
|
@ -2,7 +2,7 @@ from django.contrib import admin
|
||||||
from models import *
|
from models import *
|
||||||
from markitup.widgets import MarkItUpWidget
|
from markitup.widgets import MarkItUpWidget
|
||||||
from django.contrib.contenttypes import generic
|
from django.contrib.contenttypes import generic
|
||||||
from padmavideos.models import PadmaVideo
|
from padmavideos.models import PadmaVideo, PadmaClip
|
||||||
|
|
||||||
class AudioInline(admin.StackedInline):
|
class AudioInline(admin.StackedInline):
|
||||||
model = Audio
|
model = Audio
|
||||||
|
@ -13,7 +13,7 @@ class ImageInline(admin.StackedInline):
|
||||||
extra = 3
|
extra = 3
|
||||||
|
|
||||||
class PadmaVideoInline(generic.GenericStackedInline):
|
class PadmaVideoInline(generic.GenericStackedInline):
|
||||||
model = PadmaVideo
|
model = PadmaClip
|
||||||
extra = 3
|
extra = 3
|
||||||
|
|
||||||
class DocumentInline(admin.StackedInline):
|
class DocumentInline(admin.StackedInline):
|
||||||
|
|
|
@ -126,7 +126,14 @@ class Training(models.Model):
|
||||||
until_when = models.DateField(blank=True, null=True)
|
until_when = models.DateField(blank=True, null=True)
|
||||||
|
|
||||||
|
|
||||||
|
class Play(models.Model):
|
||||||
|
pass
|
||||||
|
# title
|
||||||
|
# author
|
||||||
|
|
||||||
|
|
||||||
class Production(models.Model):
|
class Production(models.Model):
|
||||||
|
play = models.ForeignKey("Play", null=True, blank=True)
|
||||||
name = models.CharField(max_length=255, db_index=True)
|
name = models.CharField(max_length=255, db_index=True)
|
||||||
language = models.ForeignKey("Language", blank=True, null=True)
|
language = models.ForeignKey("Language", blank=True, null=True)
|
||||||
group = models.ForeignKey("TheatreGroup")
|
group = models.ForeignKey("TheatreGroup")
|
||||||
|
|
|
@ -9,24 +9,21 @@ from app.models import ItfModel
|
||||||
from django.core.files import File
|
from django.core.files import File
|
||||||
from django.core.files.temp import NamedTemporaryFile
|
from django.core.files.temp import NamedTemporaryFile
|
||||||
import urllib2
|
import urllib2
|
||||||
|
from decimal import Decimal
|
||||||
|
|
||||||
PANDORA_BASE = 'pad.ma'
|
PANDORA_BASE = 'pad.ma'
|
||||||
|
|
||||||
class PadmaVideo(ItfModel):
|
class PadmaVideo(ItfModel):
|
||||||
embed_code = models.TextField()
|
# embed_code = models.TextField()
|
||||||
url = models.CharField(max_length=512, editable=False)
|
# url = models.CharField(max_length=512, editable=False)
|
||||||
title = models.CharField(max_length=512, blank=True)
|
title = models.CharField(max_length=512, blank=True)
|
||||||
poster = models.ImageField(blank=True, upload_to='upload/padmaposters/')
|
poster = models.ImageField(blank=True, upload_to='upload/padmaposters/')
|
||||||
padma_id = models.CharField(editable=False, max_length=8, db_index=True)
|
padma_id = models.CharField(editable=False, max_length=16, unique=True, db_index=True)
|
||||||
time_in = models.IntegerField(null=True, editable=False)
|
duration = models.DecimalField(max_digits=16, decimal_places=3, editable=False)
|
||||||
time_out = models.IntegerField(null=True, editable=False)
|
|
||||||
width = models.IntegerField(null=True, editable=False)
|
width = models.IntegerField(null=True, editable=False)
|
||||||
height = models.IntegerField(null=True, editable=False)
|
height = models.IntegerField(null=True, editable=False)
|
||||||
data = DictField(default={}, editable=False)
|
data = DictField(default={}, editable=False)
|
||||||
layers = DictField(default={}, editable=False)
|
layers = DictField(default={}, editable=False)
|
||||||
content_type = models.ForeignKey(ContentType)
|
|
||||||
object_id = models.PositiveIntegerField()
|
|
||||||
content_object = generic.GenericForeignKey('content_type', 'object_id')
|
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.padma_id
|
return self.padma_id
|
||||||
|
@ -43,6 +40,7 @@ class PadmaVideo(ItfModel):
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
'''
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
embed_code = self.embed_code
|
embed_code = self.embed_code
|
||||||
regex = r'\<iframe width=\"([0-9]{1,3})\" height\=\"([0-9]{1,3})\" src\=\"http\:\/\/pad.ma\/([A-Z]{1,8})\/embed\?in\=([0-9].*?)\&out\=([0-9].*?)\&view\=video\" frameborder\=\"0\" allowfullscreen></iframe>'
|
regex = r'\<iframe width=\"([0-9]{1,3})\" height\=\"([0-9]{1,3})\" src\=\"http\:\/\/pad.ma\/([A-Z]{1,8})\/embed\?in\=([0-9].*?)\&out\=([0-9].*?)\&view\=video\" frameborder\=\"0\" allowfullscreen></iframe>'
|
||||||
|
@ -55,7 +53,7 @@ class PadmaVideo(ItfModel):
|
||||||
self.url = "http://%s/%s/" % (PANDORA_BASE, self.padma_id,) #FIXME time_in, time_out
|
self.url = "http://%s/%s/" % (PANDORA_BASE, self.padma_id,) #FIXME time_in, time_out
|
||||||
self.get_padma_data()
|
self.get_padma_data()
|
||||||
super(PadmaVideo, self).save(*args, **kwargs)
|
super(PadmaVideo, self).save(*args, **kwargs)
|
||||||
|
'''
|
||||||
|
|
||||||
def get_padma_data(self, update_poster=True):
|
def get_padma_data(self, update_poster=True):
|
||||||
api = ox.api.API("http://%s/api" % PANDORA_BASE)
|
api = ox.api.API("http://%s/api" % PANDORA_BASE)
|
||||||
|
@ -65,8 +63,7 @@ class PadmaVideo(ItfModel):
|
||||||
})['data']
|
})['data']
|
||||||
if not self.title:
|
if not self.title:
|
||||||
self.title = self.data['title']
|
self.title = self.data['title']
|
||||||
if self.time_in == self.time_out:
|
self.duration = Decimal(str(self.data['duration']))
|
||||||
self.time_out = int(self.data['duration'])
|
|
||||||
if update_poster:
|
if update_poster:
|
||||||
self.update_poster()
|
self.update_poster()
|
||||||
self.layers = api.get({
|
self.layers = api.get({
|
||||||
|
@ -77,9 +74,40 @@ class PadmaVideo(ItfModel):
|
||||||
|
|
||||||
#ref: http://djangosnippets.org/snippets/2587/
|
#ref: http://djangosnippets.org/snippets/2587/
|
||||||
def update_poster(self):
|
def update_poster(self):
|
||||||
poster_time = int((self.time_in + self.time_out) / 2)
|
#poster_time = int((self.time_in + self.time_out) / 2)
|
||||||
|
poster_time = self.data['posterFrame']
|
||||||
url = 'http://%s/%s/480p%d.jpg' % (PANDORA_BASE, self.padma_id, poster_time,)
|
url = 'http://%s/%s/480p%d.jpg' % (PANDORA_BASE, self.padma_id, poster_time,)
|
||||||
img_temp = NamedTemporaryFile(delete=True)
|
img_temp = NamedTemporaryFile(delete=True)
|
||||||
img_temp.write(urllib2.urlopen(url).read())
|
img_temp.write(urllib2.urlopen(url).read())
|
||||||
img_temp.flush()
|
img_temp.flush()
|
||||||
self.poster.save("%s.jpg" % self.padma_id, File(img_temp), save=False)
|
self.poster.save("%s.jpg" % self.padma_id, File(img_temp), save=False)
|
||||||
|
|
||||||
|
|
||||||
|
class PadmaClip(ItfModel):
|
||||||
|
padmavideo = models.ForeignKey(PadmaVideo, editable=False)
|
||||||
|
embed_code = models.TextField()
|
||||||
|
time_in = models.DecimalField(max_digits=16, decimal_places=3, editable=False)
|
||||||
|
time_out = models.DecimalField(max_digits=16, decimal_places=3, editable=False)
|
||||||
|
content_type = models.ForeignKey(ContentType)
|
||||||
|
object_id = models.PositiveIntegerField()
|
||||||
|
content_object = generic.GenericForeignKey('content_type', 'object_id')
|
||||||
|
|
||||||
|
def save(self, *args, **kwargs):
|
||||||
|
embed_code = self.embed_code
|
||||||
|
regex = r'\<iframe width=\"([0-9]{1,3})\" height\=\"([0-9]{1,3})\" src\=\"http\:\/\/pad.ma\/([A-Z]{1,8})\/embed\?in\=([0-9\.].*?)\&out\=([0-9\.].*?)\&view\=video\" frameborder\=\"0\" allowfullscreen></iframe>'
|
||||||
|
match = re.match(regex, embed_code)
|
||||||
|
if not match:
|
||||||
|
raise ValidationError("Invalid Embed Code")
|
||||||
|
width, height, padma_id, time_in, time_out = match.groups()
|
||||||
|
self.time_in = Decimal(time_in)
|
||||||
|
self.time_out = Decimal(time_out)
|
||||||
|
try:
|
||||||
|
padmaVideo = PadmaVideo.objects.get(padma_id=padma_id)
|
||||||
|
created = True
|
||||||
|
except PadmaVideo.DoesNotExist:
|
||||||
|
padmaVideo = PadmaVideo(padma_id=padma_id)
|
||||||
|
created = False
|
||||||
|
padmaVideo.get_padma_data(update_poster=created) #update poster only if video is freshly created
|
||||||
|
padmaVideo.save()
|
||||||
|
self.padmavideo = padmaVideo
|
||||||
|
super(PadmaClip, self).save(*args, **kwargs)
|
Loading…
Reference in New Issue
Block a user