diff options
| -rw-r--r-- | chimere/fixtures/initial_data.json | 22 | ||||
| -rw-r--r-- | chimere/models.py | 30 |
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', |
