padma videos attached to talks
This commit is contained in:
parent
780e39d736
commit
55c548c872
|
@ -30,7 +30,7 @@ class MeetingSponsorInline(admin.StackedInline):
|
|||
|
||||
|
||||
class TalkAdmin(admin.ModelAdmin):
|
||||
inlines = [AudioInline, ImageInline, DocumentInline]
|
||||
inlines = [PadmaVideoInline, AudioInline, ImageInline, DocumentInline]
|
||||
save_on_top = True
|
||||
list_display = ('__unicode__', 'presenter', 'session',)
|
||||
list_filter = ['session']
|
||||
|
@ -64,7 +64,7 @@ class ProjectAdmin(admin.ModelAdmin):
|
|||
save_on_top = True
|
||||
|
||||
class SessionAdmin(admin.ModelAdmin):
|
||||
inlines = [PadmaVideoInline]
|
||||
# inlines = [PadmaVideoInline]
|
||||
search_fields = ('title', 'intro',)
|
||||
list_filter = ['day']
|
||||
list_display = ('__unicode__',)
|
||||
|
|
|
@ -132,6 +132,7 @@ class Talk(models.Model):
|
|||
intro = models.TextField(blank=True, null=True)
|
||||
presenter = models.CharField(max_length=255, blank=True)
|
||||
session = models.ForeignKey('Session') # name of meeting - name of session
|
||||
videos = generic.GenericRelation(PadmaVideo)
|
||||
|
||||
def __unicode__(self):
|
||||
return "%s - %s" % (self.session.day.meeting.title, self.title) # name of meeting - name of session
|
||||
|
@ -151,7 +152,7 @@ class Session(models.Model):
|
|||
intro = models.TextField(blank=True, null=True)
|
||||
day = models.ForeignKey('MeetingDay')
|
||||
session_no = models.IntegerField(blank=True, null=True)
|
||||
videos = generic.GenericRelation(PadmaVideo)
|
||||
# videos = generic.GenericRelation(PadmaVideo)
|
||||
|
||||
def __unicode__(self):
|
||||
return "%s - %s" % (self.day.meeting.title, self.title) # name of meeting - name of session
|
||||
|
|
0
itf/padmavideos/__init__.py
Normal file
0
itf/padmavideos/__init__.py
Normal file
85
itf/padmavideos/models.py
Normal file
85
itf/padmavideos/models.py
Normal file
|
@ -0,0 +1,85 @@
|
|||
from django.db import models
|
||||
from ox.django.fields import DictField
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.contrib.contenttypes import generic
|
||||
from django.forms import ValidationError
|
||||
import re
|
||||
import ox
|
||||
from app.models import ItfModel
|
||||
from django.core.files import File
|
||||
from django.core.files.temp import NamedTemporaryFile
|
||||
import urllib2
|
||||
|
||||
PANDORA_BASE = 'pad.ma'
|
||||
|
||||
class PadmaVideo(ItfModel):
|
||||
embed_code = models.TextField()
|
||||
url = models.CharField(max_length=512, editable=False)
|
||||
title = models.CharField(max_length=512, blank=True)
|
||||
poster = models.ImageField(blank=True, upload_to='upload/padmaposters/')
|
||||
padma_id = models.CharField(editable=False, max_length=8, db_index=True)
|
||||
time_in = models.IntegerField(null=True, editable=False)
|
||||
time_out = models.IntegerField(null=True, editable=False)
|
||||
width = models.IntegerField(null=True, editable=False)
|
||||
height = models.IntegerField(null=True, editable=False)
|
||||
data = 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):
|
||||
return self.padma_id
|
||||
|
||||
def get_dict(self):
|
||||
return {
|
||||
'embed_code': self.embed_code,
|
||||
'url': self.url,
|
||||
'title': self.title,
|
||||
'data': self.data,
|
||||
'time_in': self.time_in,
|
||||
'time_out': self.time_out,
|
||||
'layers':self.layers
|
||||
|
||||
}
|
||||
|
||||
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")
|
||||
self.width, self.height, self.padma_id, self.time_in, self.time_out = match.groups()
|
||||
self.time_in = int(self.time_in)
|
||||
self.time_out = int(self.time_out)
|
||||
self.url = "http://%s/%s/" % (PANDORA_BASE, self.padma_id,) #FIXME time_in, time_out
|
||||
self.get_padma_data()
|
||||
super(PadmaVideo, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
def get_padma_data(self, update_poster=True):
|
||||
api = ox.api.API("http://%s/api" % PANDORA_BASE)
|
||||
self.data = api.get({
|
||||
'id': self.padma_id,
|
||||
'keys': []
|
||||
})['data']
|
||||
if not self.title:
|
||||
self.title = self.data['title']
|
||||
if self.time_in == self.time_out:
|
||||
self.time_out = int(self.data['duration'])
|
||||
if update_poster:
|
||||
self.update_poster()
|
||||
self.layers = api.get({
|
||||
'id': self.padma_id,
|
||||
'keys': ['layers']
|
||||
})
|
||||
return self
|
||||
|
||||
#ref: http://djangosnippets.org/snippets/2587/
|
||||
def update_poster(self):
|
||||
poster_time = int((self.time_in + self.time_out) / 2)
|
||||
url = 'http://%s/%s/480p%d.jpg' % (PANDORA_BASE, self.padma_id, poster_time,)
|
||||
img_temp = NamedTemporaryFile(delete=True)
|
||||
img_temp.write(urllib2.urlopen(url).read())
|
||||
img_temp.flush()
|
||||
self.poster.save("%s.jpg" % self.padma_id, File(img_temp), save=False)
|
|
@ -45,7 +45,7 @@
|
|||
{% for s in sponsors %}
|
||||
{% thumbnail s.logo "120" crop="center" as thumb %}
|
||||
{% if s.url %} <a href="{{ s.url }}" target="_blank"> {% endif %}
|
||||
<img alt="{{ s.name }}" src="{{ thumb.url }}" />
|
||||
<img alt="{{ s.name }}" src="{{ thumb.url }}" /> <br />
|
||||
{% if s.url %} </a> {% endif %}
|
||||
{% endthumbnail %}
|
||||
|
||||
|
@ -70,13 +70,7 @@
|
|||
<div class="sessionIntro">
|
||||
{{ s.intro|markdown }}
|
||||
</div>
|
||||
{% ifnotequal s.videos.all|length 0 %}
|
||||
<div class="padmaVideos">
|
||||
{% for v in s.videos.all %}
|
||||
{{ v.embed_code|safe }}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endifnotequal %}
|
||||
|
||||
{% ifnotequal s.talks|length 0 %}
|
||||
<ul class="talks">
|
||||
{% for talk in s.talks %}
|
||||
|
@ -105,6 +99,14 @@
|
|||
{% endfor %}
|
||||
</span>
|
||||
{{ talk.title }} by {{ talk.presenter }}
|
||||
|
||||
{% ifnotequal talk.videos.all|length 0 %}
|
||||
<div class="padmaVideos">
|
||||
{% for v in talk.videos.all %}
|
||||
{{ v.embed_code|safe }}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endifnotequal %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
|
Loading…
Reference in New Issue
Block a user