diff options
| author | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-03-09 17:01:13 +0100 |
|---|---|---|
| committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-03-09 17:01:13 +0100 |
| commit | 3c662eea0d80a8451506e22d4743fb77dd0011fc (patch) | |
| tree | de660c373b95fde184baae5e777e7534ca473569 | |
| parent | 72d8868224f99011a5e57109309d238f42fcbc8f (diff) | |
| download | Chimère-3c662eea0d80a8451506e22d4743fb77dd0011fc.tar.bz2 Chimère-3c662eea0d80a8451506e22d4743fb77dd0011fc.zip | |
Better management of external video provider
| -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', |
