summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chimere/fixtures/initial_data.json22
-rw-r--r--chimere/models.py30
2 files changed, 51 insertions, 1 deletions
diff --git a/chimere/fixtures/initial_data.json b/chimere/fixtures/initial_data.json
index 629c092..6195e7e 100644
--- a/chimere/fixtures/initial_data.json
+++ b/chimere/fixtures/initial_data.json
@@ -1027,5 +1027,27 @@
"name": "Iframe",
"mime_type": ""
}
+ },
+ {
+ "pk": 11,
+ "model": "chimere.multimediatype",
+ "fields": {
+ "available": true,
+ "media_type": "V",
+ "iframe": true,
+ "name": "Dailymotion",
+ "mime_type": ""
+ }
+ },
+ {
+ "pk": 12,
+ "model": "chimere.multimediatype",
+ "fields": {
+ "available": true,
+ "media_type": "V",
+ "iframe": true,
+ "name": "Vimeo",
+ "mime_type": ""
+ }
}
]
diff --git a/chimere/models.py b/chimere/models.py
index 6ca2771..da9104d 100644
--- a/chimere/models.py
+++ b/chimere/models.py
@@ -20,7 +20,7 @@
"""
Models description
"""
-import os, string, json
+import os, string, json, re
import lxml.etree as ElementTree
from datetime import datetime, timedelta
from subprocess import Popen, PIPE
@@ -374,6 +374,20 @@ class MultimediaType(models.Model):
def __unicode__(self):
return self.name
+IFRAME_LINKS = {
+ 'youtube':((re.compile(r'youtube.com\/watch\?v=([A-Za-z0-9]*)'),
+ re.compile(r'youtu.be\/([A-Za-z0-9]*)'),
+ re.compile(r'youtube.com\/embed\/([A-Za-z0-9]*)')),
+ "http://www.youtube.com/embed/%s"),
+ 'dailymotion':((re.compile(r'dailymotion.com/video/([A-Za-z0-9]*)_[A-Za-z0-9_-]*'),
+ re.compile(r'dailymotion.com/embed/video/([A-Za-z0-9]*)'),
+ re.compile("http://www.dailymotion.com/embed/video/%s")),
+ 'http://www.dailymotion.com/embed/video/%s'),
+ 'vimeo':((re.compile(r'vimeo.com/([A-Za-z0-9]*)'),
+ re.compile(r'vimeo.com/video/([A-Za-z0-9]*)')),
+ "http://player.vimeo.com/video/%s")
+}
+
class MultimediaFile(models.Model):
name = models.CharField(_(u"Name"), max_length=150, blank=True, null=True)
url = models.CharField(_(u"Url"), max_length=200)
@@ -383,6 +397,20 @@ class MultimediaFile(models.Model):
def __unicode__(self):
return self.name or u""
+ def save(self, *args, **kwargs):
+ # manage iframe of video providers
+ if self.multimedia_type.name.lower() in IFRAME_LINKS:
+ regexps, lnk = IFRAME_LINKS[self.multimedia_type.name.lower()]
+ key = None
+ for regexp in regexps:
+ key = regexp.findall(self.url)
+ if key:
+ key = key[0]
+ break
+ if key:
+ self.url = lnk % key
+ super(MultimediaFile, self).save(*args, **kwargs)
+
class PictureFile(models.Model):
name = models.CharField(_(u"Name"), max_length=150, blank=True, null=True)
picture = models.ImageField(_(u"Image"), upload_to='upload',