]> git.parisson.com Git - telemeta.git/commitdiff
add audio metadata tagging after streaming a compressed media : timeside trunk ...
authoryomguy <yomguy@parisson.com>
Thu, 12 May 2011 20:39:36 +0000 (22:39 +0200)
committeryomguy <yomguy@parisson.com>
Thu, 12 May 2011 20:39:36 +0000 (22:39 +0200)
fix instruments and locations __unicode__ methods
cleanup

telemeta/models/__init__.py
telemeta/models/instrument.py
telemeta/models/location.py
telemeta/models/media.py
telemeta/templates/telemeta_default/mediaitem_copy.html
telemeta/templates/telemeta_default/mediaitem_edit.html
telemeta/web/base.py

index 9bec6cce797c00c8efcf6ec637263535253da5d4..bd207dc757a3d983841aec6c07e7761a9bc4fd50 100644 (file)
@@ -38,5 +38,6 @@ from telemeta.models.instrument import *
 from telemeta.models.enum import *
 from telemeta.models.system import *
 from telemeta.models.query import *
+from telemeta.models.dublincore import *
 
 
index 4e4b98378fde59dc5e5bb8523b3a7d7d842b9fcc..037d1bad4aa4887d58e2086f3d552ac00c034d61 100644 (file)
@@ -66,6 +66,10 @@ class InstrumentRelation(ModelCore):
     class Meta(MetaCore):
         db_table = 'instrument_relations'
         unique_together = (('instrument', 'parent_instrument'),)
+    
+    def __unicode__(self):
+        sep = ' > '
+        return self.parent_instrument.name + sep + self.instrument.name
 
 class InstrumentAliasRelation(ModelCore):
     "Instrument family other name"
@@ -74,6 +78,10 @@ class InstrumentAliasRelation(ModelCore):
     instrument = ForeignKey('InstrumentAlias', related_name="relation", 
                             verbose_name=_('instrument'))
 
+    def __unicode__(self):
+        sep = ' : '
+        return self.alias.name + sep + self.instrument.name
+        
     class Meta(MetaCore):
         db_table = 'instrument_alias_relations'
         unique_together = (('alias', 'instrument'),)
index 131cb68275c341deddda24b3fd220d1d84d5f3f8..85bbc6bca10671082049636b17bfffa6c0a81a4a 100644 (file)
@@ -147,6 +147,9 @@ class LocationType(ModelCore):
     code = CharField(_('identifier'), max_length=64, unique=True, required=True)
     name = CharField(_('name'), max_length=150, required=True)
 
+    def __unicode__(self):
+        return self.name
+        
     class Meta(MetaCore):
         db_table = 'location_types'
 
index 537bdd971c7a7234eb3d538fe4d8f3ccadbc7586..4a0489a67dbfd035240b64b25f185cba38d9a24a 100644 (file)
@@ -416,3 +416,50 @@ class Search(ModelCore):
         return self.keywords
 
 
+class DublinCoreToFormatMetadata(object):
+    """ a mapping class to get item DublinCore metadata dictionaries 
+    in various audio metadata format (MP3, OGG, etc...)"""
+    
+    metadata_mapping = { 
+                    'mp3' : {
+                         'title': 'TIT2', #title2
+                         'creator': 'TCOM', #composer
+                         'creator': 'TPE1', #lead
+                         'identifier': 'UFID', #unique ID
+                         'relation': 'TALB', #album
+                         'type': 'TCON', #genre
+                         'publisher': 'TPUB', #publisher
+                         'date': 'TDRC', #year
+#                         'coverage': 'COMM',  #comment
+                         }, 
+                    'ogg': {
+                        'creator': 'artist',
+                        'relation': 'album', 
+                        'all': 'all', 
+                       }, 
+                    'flac': {
+                        'creator': 'artist',
+                        'relation': 'album', 
+                        'all': 'all', 
+                       }, 
+                    }
+    
+    def __init__(self, format):
+        self.format = format
+        
+    def get_metadata(self, dc_metadata):
+        mapp = self.metadata_mapping[self.format]
+        metadata = {}
+        keys_done = []
+        for data in dc_metadata:
+            key = data[0]
+            value = data[1]
+            if value:
+                if key == 'date':
+                    value = value.split(';')[0].split('=')[1].split('-')[0]
+                if key in mapp:
+                    metadata[mapp[key]] = str(value)
+                elif 'all' in mapp.keys():
+                    metadata[key] = str(value)
+                keys_done.append(key)
+        return metadata
index b302714b2604079733efef6b2c43882f1ca5ce3f..f50285d1dc0a19366bcee3d0f865b4c29daef333 100644 (file)
@@ -29,7 +29,9 @@
             <tr><td class="error">{{ field.errors }}</td></tr>
             <td>{{ field.label_tag }}:</td>
              {% if field.html_name == "collection" %}
-              <td>{{ field }} <br />&nbsp;{% trans "Title" %} : {{ item.collection.title }}</td>
+              <td>&nbsp;{% trans "Title" %} : {{ item.collection.title }}<br />
+                  &nbsp;{% trans "Code" %} : {{ item.collection.code }}<br />
+                  {{ field }}</td>    
              {% else %}
               <td>{{ field }}</td>
              {% endif %}
index afa7f6f0bfa533e041827c1fd370793311581dc8..eca8d5ef661869c5c3358d85a9642d388bc1192a 100644 (file)
@@ -24,7 +24,9 @@
             <td> {{ item.file.name }} <br /> {{ field }}</td>
             {% else %}
             {% if field.html_name == "collection" %}
-            <td>{{ field }} <br />&nbsp;{% trans "Title" %} : {{ item.collection.title }}</td>
+            <td>&nbsp;{% trans "Title" %} : {{ item.collection.title }}<br />
+                &nbsp;{% trans "Code" %} : {{ item.collection.code }}<br />
+                {{ field }}</td>
             {% else %}
             <td>{{ field }}</td>
             {% endif %}
index 5d90945fdb17ac4b22e787dc0aac3f943c76094a..dbbd2466b9182a4d62fd997bb918b2e7fff3cbdc 100644 (file)
@@ -274,18 +274,13 @@ class WebView(object):
         analyzers = self.item_analyze(item)
         playlists = self.get_playlists(request)
         public_access = self.get_public_access(item.public_access, item.recorded_from_date, item.recorded_to_date)
-        
-        translation_list = ['OK', 'Cancel', 'Item' 'Marker', 'added to playlist']
-        translations = {}
-        for term in translation_list:
-            translations[term] = ugettext(term)
                 
         return render(request, template,
                     {'item': item, 'export_formats': formats,
                     'visualizers': graphers, 'visualizer_id': grapher_id,'analysers': analyzers,
                     'audio_export_enabled': getattr(settings, 'TELEMETA_DOWNLOAD_ENABLED', True),
                     'previous' : previous, 'next' : next, 'marker': marker_id, 'playlists' : playlists, 
-                    'public_access': public_access, 'translations': translations, 
+                    'public_access': public_access,
                     })
     
     def get_public_access(self, access, date_from, date_to):
@@ -531,8 +526,10 @@ class WebView(object):
                 media = self.cache_export.dir + os.sep + file
                 proc = encoder(media, streaming=True)
                 proc.setup(channels=decoder.channels(), samplerate=decoder.samplerate())
-#                metadata = dublincore.express_item(item).to_list()
-#                enc.set_metadata(metadata)
+                dc_metadata = dublincore.express_item(item).to_list()
+                mapping = DublinCoreToFormatMetadata(extension)
+                metadata = mapping.get_metadata(dc_metadata)
+                proc.set_metadata(metadata)
                 response = HttpResponse(stream_from_processor(decoder, proc), mimetype = mime_type)
             else:
                 # cache > stream