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()):  | 
