]> git.parisson.com Git - telemeta.git/commitdiff
get first right MP3 imports
authoryomguy <yomguy@parisson.com>
Sat, 11 Jun 2011 00:18:41 +0000 (02:18 +0200)
committeryomguy <yomguy@parisson.com>
Sat, 11 Jun 2011 00:18:41 +0000 (02:18 +0200)
telemeta/__init__.py
tools/scripts/telemeta-media-link.py

index 52997a8b105074163e4c4fa050cb9fdbc611a658..fe56514c34c15d2f101053300c0ce24e8b854b11 100644 (file)
@@ -12,7 +12,7 @@ U{http://telemeta.org}
 """
 
 __docformat__ = 'epytext en'
-__version__ = '0.9'
+__version__ = '0.9.5'
 __url__ = 'http://telemeta.org'
 __copyright__ = '(C) 2007-2011 Parisson'
 __license__ = 'CeCILL-2'
index 8b607e5abe7411358d4eae265a0176bcec1668f5..70c26aa3722cef781252adecf854deab975e37f0 100755 (executable)
 #
 
 import os
+import re
 import sys
 import logging
 import datetime
+import timeside
+from django.utils import html
 from django.core.management import setup_environ
 from django.core.files.base import ContentFile
 
@@ -38,62 +41,81 @@ class Logger:
 
 class TelemetaMediaImport:
 
-    def __init__(self, collection, media_dir, log_file):
+    def __init__(self, media_dir, log_file):
         self.logger = Logger(log_file)
-        self.media_dir = media_dir + os.sep + 'items'
+        self.media_dir = media_dir
         self.medias = self.get_medias()
-        self.buffer_size = 0x1000
-        self.media_item_dir = 'items/'
-        self.collection_name = collection
-        self.collection = self.set_collection(self.collection_name)
-
     
     def get_medias(self):
-        medias = []
-        list = os.listdir(self.media_dir)
-        for element in list:
-            if os.path.isfile(self.media_dir+os.sep+element):
-                medias.append(element)
-        return medias
+        os.chdir(self.media_dir)
+        file_list = []
+        for root, dirs, files in os.walk('.'):
+            for file in files:
+                path = root + os.sep + file
+                if not os.sep+'.' in path:
+                    file_list.append({'root': root, 'file': file})
+        return file_list
         
     def set_collection(self, collection_name):
-        import telemeta.models
-        collections = telemeta.models.media.MediaCollection.objects.filter(code=collection_name)
+        if not collection_name:
+            collection_name = 'Unkown'
+        code = collection_name.replace(' ','_')
+        code = code.replace("'",'_')
+        code = re.escape(code)
+        code = code.replace("\\",'')
+        code = code.replace("(",'_')
+        code = code.replace(")",'_')
+        code = code.replace(",",'_')
+        print code
+        #code = html.escape(code)
+        from telemeta.models.media import MediaCollection
+        collections = MediaCollection.objects.filter(code=code)
         if not collections:
-            c = telemeta.models.media.MediaCollection(code=collection_name)
-            c.title = collection_name
-            c.save()
-            msg = 'added'
-            self.logger.write_info(collection_name, msg)
-            collection = c
+            collection = MediaCollection(code=code,title=collection_name)
+            collection.save()
+            msg = 'created'
+            self.logger.write_info('collection ' + collection_name, msg)
         else:
             collection = collections[0]
         return collection
 
     def media_import(self):
-        import telemeta.models
+        from telemeta.models.media import MediaItem
         for media in self.medias:
-            filename,  ext = os.path.splitext(media)
-            item = telemeta.models.media.MediaItem.objects.filter(code=filename)
+            path = media['root'] + os.sep + media['file']
+            print 'checking ' + path
+            filename,  ext = os.path.splitext(media['file'])
+            item = MediaItem.objects.filter(code=filename)
             if not item:
-                print media
-                item = telemeta.models.media.MediaItem(collection=self.collection, code=filename)
-                item.title = filename
-                item.file = self.media_item_dir + media
+                print 'importing ' + path
+                decoder = timeside.decoder.FileDecoder(path)
+                obj = timeside.decoder.metadata.Mp3Metadata(path)
+                metadata = obj.metadata()
+                print metadata
+                collection = self.set_collection(metadata['album'])
+                item = MediaItem(collection=collection)
+                item.title = metadata['title']
+                item.author = metadata['artist']
+                #item.generic_style = metadata.genre
+                date = metadata['date']
+                if not date or date == '0000':
+                    date = '1900'
+                if not len(date) > 4:
+                    item.recorded_from_date = date + '-01-01'
+                item.file = path
                 item.save()
-                msg = 'added item : ' + filename
-                self.logger.write_info(self.collection_name, msg)
+                msg = 'added item : ' + path
+                self.logger.write_info(collection.code, msg)
 
 
 def run():
-    collection = sys.argv[-2]
-    project_dir = sys.argv[-3]
+    project_dir = sys.argv[-2]
     log_file = sys.argv[-1]
     sys.path.append(project_dir)
     import settings
     setup_environ(settings)
     media_dir = settings.MEDIA_ROOT
-    t = TelemetaMediaImport(collection, media_dir, log_file)
+    t = TelemetaMediaImport(media_dir, log_file)
     t.media_import()
 
 if __name__ == '__main__':