diff options
Diffstat (limited to 'chimere/models.py')
-rw-r--r-- | chimere/models.py | 48 |
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()): |