#
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
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__':