]> git.parisson.com Git - telemeta.git/commitdiff
pick item views from dev
authorGuillaume Pellerin <yomguy@parisson.com>
Wed, 12 Mar 2014 08:40:24 +0000 (09:40 +0100)
committerGuillaume Pellerin <yomguy@parisson.com>
Wed, 12 Mar 2014 08:40:47 +0000 (09:40 +0100)
telemeta/views/core.py
telemeta/views/item.py

index da6375d60436d4e2340585f53be2ecfaa728b791..21d637b5ec1bea1a3c6acf57e11c82d981184011 100644 (file)
@@ -242,26 +242,15 @@ def check_related_media(medias):
             media.title = title.replace('\n', '').strip()
             media.save()
 
-def auto_code(collection):
-    items = collection.items.all()
-    suffixes = []
-
-    if items:
-        for item in items:
-            if '_' in item.public_id:
-                try:
-                    split = item.public_id.split('_')
-                    suffix = int(split[-1])
-                    prefix = split[:-1]
-                except:
-                    suffix = 999
-
-                suffixes.append(suffix)
-
-    if suffixes:
-        return collection.code + '_' + str(max(suffixes)+1)
-    else:
-        return collection.code + '_'
+def auto_code(resources, base_code):
+    index = 1
+    while True:
+        code = base_code + '_' + str(index)
+        r = resources.filter(code=code)
+        if not r:
+            break
+        index += 1
+    return code
 
 
 def get_room(content_type=None, id=None, name=None):
index 39b6bc38f51507803258dffa5983715e84093899..99329d607a243f2c2c10aa4f28e40374a89a132a 100644 (file)
@@ -135,10 +135,11 @@ class ItemView(object):
 
         previous, next = self.item_previous_next(item)
 
-        mime_type = item.mime_type
-        if mime_type and mime_type != 'none' :
-            if 'quicktime' in mime_type:
-                mime_type = 'video/mp4'
+        mime_type = self.item_analyze(item)
+
+        #FIXME: use mimetypes.guess_type
+        if 'quicktime' in mime_type:
+            mime_type = 'video/mp4'
 
         playlists = get_playlists(request)
         related_media = MediaItemRelated.objects.filter(item=item)
@@ -171,10 +172,11 @@ class ItemView(object):
 
         previous, next = self.item_previous_next(item)
 
-        mime_type = item.mime_type
-        if mime_type:
-            if 'quicktime' in mime_type:
-                mime_type = 'video/mp4'
+        mime_type = self.item_analyze(item)
+
+        #FIXME: use mimetypes.guess_type
+        if 'quicktime' in mime_type:
+            mime_type = 'video/mp4'
 
         format, created = Format.objects.get_or_create(item=item)
 
@@ -243,7 +245,7 @@ class ItemView(object):
         if public_id:
             collection = MediaCollection.objects.get(public_id=public_id)
             items = MediaItem.objects.filter(collection=collection)
-            code = auto_code(collection)
+            code = auto_code(items, collection.code)
             item = MediaItem(collection=collection, code=code)
             format, created = Format.objects.get_or_create(item=item)
             access = get_item_access(item, request.user)
@@ -316,12 +318,11 @@ class ItemView(object):
                     keyword.save()
 
                 item.set_revision(request.user)
-
                 return redirect('telemeta-item-detail', code)
         else:
             item = MediaItem.objects.get(public_id=public_id)
             items = MediaItem.objects.filter(collection=item.collection)
-            item.code = auto_code(item.collection)
+            item.code = auto_code(items, item.collection.code)
             item.approx_duration = ''
             item_form = MediaItemForm(instance=item, prefix='item')
             format, created = Format.objects.get_or_create(item=item)
@@ -347,7 +348,7 @@ class ItemView(object):
     def item_analyze(self, item):
         analyses = item.analysis.all()
         mime_type = ''
-
+        
         if analyses:
             for analysis in analyses:
                 if not item.approx_duration and analysis.analyzer_id == 'duration':
@@ -357,9 +358,8 @@ class ItemView(object):
                     time = ':'.join(time)
                     item.approx_duration = time
                     item.save()
-                elif not analysis.value and analysis.analyzer_id == 'mime_type' :
-                    analysis.value = item.mime_type
-                    analysis.save()
+                if analysis.analyzer_id == 'mime_type':
+                    mime_type = analysis.value
         else:
             analyzers = []
             analyzers_sub = []
@@ -374,7 +374,7 @@ class ItemView(object):
                     subpipe = analyzer()
                     analyzers_sub.append(subpipe)
                     pipe = pipe | subpipe
-
+                
                 default_grapher = self.get_grapher(self.default_grapher_id)                
                 for size in self.default_grapher_sizes:
                     width = size.split('x')[0]
@@ -394,9 +394,8 @@ class ItemView(object):
                     f.close()
 
                 mime_type = mimetypes.guess_type(source)[0]
-
                 analysis = MediaItemAnalysis(item=item, name='MIME type',
-                                             analyzer_id='mime_type', unit='', value=item.mime_type)
+                                             analyzer_id='mime_type', unit='', value=mime_type)
                 analysis.save()
                 analysis = MediaItemAnalysis(item=item, name='Channels',
                                              analyzer_id='channels',
@@ -425,12 +424,10 @@ class ItemView(object):
                                 analyzer_id=result.id, unit=result.unit, value = unicode(value))
                         analysis.save()
 
-                analyses = MediaItemAnalysis.objects.filter(item=item)
-
-#                TODO: parse tags on first load
+#                FIXME: parse tags on first load
 #                tags = decoder.tags
 
-        return analyses
+        return mime_type
 
     def item_analyze_xml(self, request, public_id):
         item = MediaItem.objects.get(public_id=public_id)
@@ -531,7 +528,7 @@ class ItemView(object):
         else:
             flag = flag[0]
 
-        format = item.mime_type
+        format = self.item_analyze(item)
         dc_metadata = dublincore.express_item(item).to_list()
         mapping = DublinCoreToFormatMetadata(extension)
         metadata = mapping.get_metadata(dc_metadata)