summaryrefslogtreecommitdiff
path: root/coverart.py
diff options
context:
space:
mode:
authorJon Bergli Heier <snakebite@jvnv.net>2012-12-16 11:53:03 +0100
committerJon Bergli Heier <snakebite@jvnv.net>2012-12-16 11:53:03 +0100
commit3072dcabb7f8d35f21ebfaeae53a1218ecd9d43e (patch)
treecc117e7da3923bc7948c0ce19cac985a297c4468 /coverart.py
parentb96cdbf27095f57c4800f1295ddc76482ba62443 (diff)
Added album view.
Diffstat (limited to 'coverart.py')
-rw-r--r--coverart.py73
1 files changed, 73 insertions, 0 deletions
diff --git a/coverart.py b/coverart.py
new file mode 100644
index 0000000..1d6fc3f
--- /dev/null
+++ b/coverart.py
@@ -0,0 +1,73 @@
+#!/usr/bin/env python2
+
+import db, mutagen, os
+from config import config
+from PIL import Image
+
+try:
+ import cStringIO as StringIO
+except ImportError:
+ import StringIO
+
+def get_coverart(album, ignorecache = False):
+ covercache_dir = config.get('covercache_dir')
+ covercache = os.path.join(covercache_dir, '%d.jpg' % album.id)
+
+ def makecover(fileobj):
+ im = Image.open(fileobj)
+ im.thumbnail((128, 128), Image.ANTIALIAS)
+ im.save(covercache)
+ return covercache
+
+ if not ignorecache and os.path.exists(covercache):
+ return covercache
+
+ if not len(album.tracks):
+ return
+
+ track = album.tracks[0]
+ try:
+ f = mutagen.File(track.get_path())
+ except:
+ f = None
+ if hasattr(f, 'pictures') and len(f.pictures):
+ p = f.pictures[0]
+ s = StringIO.StringIO(p.data)
+ return makecover(s)
+
+ dirname = os.path.dirname(track.get_path())
+ files = os.listdir(dirname)
+ files.sort()
+ cover = []
+ for f in files:
+ filename = os.path.join(dirname, f)
+ if os.path.isdir(filename):
+ print filename
+ if os.path.isdir(filename) and f.lower() in ('scans', 'jpg', 'jpeg', 'img', 'image', 'cover', 'covers'):
+ files.extend(os.path.join(f, x) for x in os.listdir(filename))
+ files.sort()
+ if not os.path.isfile(filename):
+ continue
+ extensions = ('.jpg', '.jpeg', '.png', '.bmp')
+ root, ext = os.path.splitext(f)
+ # Ignore non-image files
+ if not ext.lower() in extensions:
+ continue
+ if os.path.split(root)[-1].lower() in ('cover', 'cover-large', 'cover-front'):
+ cover.insert(0, f)
+ elif 'cover' in f.lower() and not len(cover):
+ cover.append(f)
+ elif not len(cover):
+ cover.append(f)
+
+ while len(cover):
+ filename = os.path.join(dirname, cover.pop(0))
+ return makecover(open(filename, 'rb'))
+
+def main():
+ session = db.Session()
+ for album in session.query(db.Album):
+ get_coverart(album, True)
+
+if __name__ == '__main__':
+ main()