summaryrefslogtreecommitdiff
path: root/directory.py
diff options
context:
space:
mode:
Diffstat (limited to 'directory.py')
-rw-r--r--directory.py30
1 files changed, 29 insertions, 1 deletions
diff --git a/directory.py b/directory.py
index c7bef2d..2b79126 100644
--- a/directory.py
+++ b/directory.py
@@ -1,4 +1,4 @@
-import os, mimetypes, recode, events, cuesheet, mutagen
+import os, mimetypes, recode, events, cuesheet, mutagen, db
from config import config
@@ -161,3 +161,31 @@ class File(DirectoryEntry):
d = DirectoryEntry.json(self)
d.update({'cached': os.path.exists(cache_path)})
return d
+
+def rec_scan(session, root):
+ directory = db.Directory.get(session, root)
+
+ d = Directory(root, isabs = True)
+ for de in d.listdir():
+ if isinstance(de, Directory):
+ rec_scan(session, de.abs_path)
+ else:
+ print de.metadata
+ artist = db.Artist.get(session, de.metadata['artist']) if 'artist' in de.metadata else None
+ album = db.Album.get(session, de.metadata['album'], artist.id if artist else None) if 'album' in de.metadata else None
+ track = db.Track.get(session, de.metadata['title'] if 'title' in de.metadata else None, None,
+ os.path.basename(de.path), de.track, directory.id, artist.id if artist else None, album.id if album else None)
+
+def scan(root = None):
+ if not root:
+ root = config.get('music_root')
+
+ try:
+ session = db.Session()
+ rec_scan(session, root)
+ session.commit()
+ finally:
+ session.close()
+
+if __name__ == '__main__':
+ scan()