]> git.0d.be Git - django-panik-nonstop.git/blobdiff - nonstop/views.py
catch mutagen errors on invalid files
[django-panik-nonstop.git] / nonstop / views.py
index bdfe00da6213efb76dd2e81c035c06f8ddc109c8..9fee775620b6c2dbccb497297905c2993c3847e9 100644 (file)
@@ -584,18 +584,28 @@ class UploadTracksView(FormView):
         if not form.is_valid():
             return self.form_invalid(form)
         missing_metadata = []
+        invalid_files = []
         metadatas = {}
         for f in tracks:
             with tempfile.NamedTemporaryFile(prefix='track-upload') as tmpfile:
                 tmpfile.write(f.read())
                 f.seek(0)
-                metadata = mutagen.File(tmpfile.name, easy=True)
+                try:
+                    metadata = mutagen.File(tmpfile.name, easy=True)
+                except Exception as e:
+                    logger.info('error reading file (%s)' % e)
+                    invalid_files.append(f.name)
             if not metadata or not metadata.get('artist') or not metadata.get('title'):
                 missing_metadata.append(f.name)
             else:
                 metadatas[f.name] = metadata
-        if missing_metadata:
-            form.add_error('tracks', _('Missing metadata in: ') + ', '.join(missing_metadata))
+        if missing_metadata or invalid_files:
+            messages = []
+            if missing_metadata:
+                messages.append(_('Missing metadata in: ') + ', '.join(missing_metadata))
+            if invalid_files:
+                messages.append(_('Unreadable metadata in: ') + ', '.join(invalid_files))
+            form.add_error('tracks', ' / '.join([str(x) for x in messages]))
             return self.form_invalid(form)
 
         for f in tracks: