summaryrefslogtreecommitdiff
path: root/chimere/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/models.py')
-rw-r--r--chimere/models.py48
1 files changed, 32 insertions, 16 deletions
diff --git a/chimere/models.py b/chimere/models.py
index 6b7ffb9..63529ee 100644
--- a/chimere/models.py
+++ b/chimere/models.py
@@ -593,7 +593,7 @@ class MultimediaType(models.Model):
def get_tuples(cls):
vals = cls.objects.filter(available=True).order_by('media_type',
'name')
- tuples, c_tpe = [('', '--')], None
+ tuples, c_tpe = [('', _("Automatic recognition"))], None
media_type_dct = dict(cls.MEDIA_TYPES)
for tpe, pk, name in [(media_type_dct[v.media_type], v.pk, v.name)
for v in vals]:
@@ -635,7 +635,7 @@ class MultimediaFile(models.Model):
name = models.CharField(_(u"Name"), max_length=150)
url = models.URLField(_(u"Url"), max_length=200)
order = models.IntegerField(_(u"Order"), default=1)
- multimedia_type = models.ForeignKey(MultimediaType)
+ multimedia_type = models.ForeignKey(MultimediaType, blank=True, null=True)
miniature = models.BooleanField(_(u"Display inside the description?"),
default=settings.CHIMERE_MINIATURE_BY_DEFAULT)
marker = models.ForeignKey(Marker, related_name='multimedia_files')
@@ -647,24 +647,40 @@ 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)
-
def multimediafile_post_save(sender, **kwargs):
if not kwargs['instance'] or not kwargs['created']:
return
multimediafile = kwargs['instance']
+ # auto recognition of file types
+ if not multimediafile.multimedia_type:
+ url = multimediafile.url
+ for mm_type in IFRAME_LINKS:
+ res, embeded_url = IFRAME_LINKS[mm_type]
+ if [r for r in res if r.search(url)]:
+ multimedia_type = MultimediaType.objects.get(
+ name__iexact=mm_type)
+ multimediafile.multimedia_type = multimedia_type
+ if not multimediafile.multimedia_type:
+ ext = url.split(".")[-1]
+ q = MultimediaExtension.objects.filter(name__iendswith=ext)
+ if q.count():
+ multimediafile.multimedia_type = q.all()[0].multimedia_type
+ else:
+ # default to an iframe
+ multimediafile.multimedia_type = \
+ MultimediaType.objects.filter(name__iexact='iframe').all()[0]
+ # manage iframe of video providers
+ if multimediafile.multimedia_type.name.lower() in IFRAME_LINKS:
+ regexps, lnk = IFRAME_LINKS[multimediafile.multimedia_type.name.lower()]
+ key = None
+ for regexp in regexps:
+ key = regexp.findall(multimediafile.url)
+ if key:
+ key = key[0]
+ break
+ if key:
+ multimediafile.url = lnk % key
+
mfs = MultimediaFile.objects.filter(marker=multimediafile.marker).exclude(
pk=multimediafile.pk).order_by('order')
for idx, mf in enumerate(mfs.all()):