New albumArt path calculation
authorIvan Frade <ivan.frade@gmail.com>
Tue, 5 Jul 2011 07:22:10 +0000 (10:22 +0300)
committerIvan Frade <ivan.frade@gmail.com>
Tue, 5 Jul 2011 07:22:10 +0000 (10:22 +0300)
src/qml/albumArt.py [new file with mode: 0644]

diff --git a/src/qml/albumArt.py b/src/qml/albumArt.py
new file mode 100644 (file)
index 0000000..74a6432
--- /dev/null
@@ -0,0 +1,88 @@
+# -*- coding: utf-8 -*-
+from PySide.QtCore import QRegExp
+import re
+import hashlib
+import os
+
+MULTIWHITE = re.compile ("\s\s+")
+
+MEDIAART_PATH = os.path.join (os.environ["HOME"], ".cache", "media-art")
+GENERATED_PATH = os.path.join (os.environ["HOME"], ".cache", "music-suite",  "generated")
+THUMB_PATH = os.path.join (os.environ["HOME"], ".cache", "music-suite", "thumbnails")
+
+#
+# Python translation of :
+# https://qt.gitorious.org/qt/qt/blobs/d12681a4cf1227d0e92fc7cf12aa3977e6ffe3fe/src/corelib/tools/qhash.cpp#line76
+#
+def qhash (inputstr):
+
+    if isinstance (inputstr, str):
+        instr = inputstr 
+    elif isinstance (inputstr, unicode):
+        instr = inputstr.encode ("utf8")
+    else:
+        return -1
+
+    h = 0x00000000
+    for i in range (0, len (instr)):
+        h = (h << 4) + ord(instr[i])
+        h ^= (h & 0xf0000000) >> 23
+        h &= 0x0fffffff
+
+    return h
+
+class AlbumArt:
+    def __init__ (self, album, artist, flavor="common", aaType="album"):
+        self.album = album
+        self.albumMD5 = self.__get_md5 (album)
+        self.artist = artist
+        self.artistMD5 = self.__get_md5 (artist)
+        self.flavor = "common"
+        self.aaType = "album"
+
+    def get_media_art_path (self):
+        """
+        The raw media-art downloaded or taken from the folder with the music files
+        """
+        filename = "album-" + self.artistMD5 + "-" + self.albumMD5 + ".jpeg"
+        return os.path.join (MEDIAART_PATH, filename)
+
+    def get_generated (self):
+        filename = str (qhash (self.album + self.artist + self.flavor + self.aaType)) + ".png"
+        return os.path.join (GENERATED_PATH, self.flavor, filename)
+
+    def get_thumbnail (self):
+        filename = str (qhash (self.album + self.artist + self.flavor + self.aaType)) + ".jpeg"
+        return os.path.join (THUMB_PATH, self.flavor, filename)
+        
+
+
+    def __get_md5 (self, something):
+        if not something or len (something) == 0:
+            something = " "
+        else:
+            # This can very probably be done with the native python regexp
+            blocks = QRegExp ("(\\([^\\)]*\\))" + 
+                              "|(\\[[^\\]]*\\])" +
+                              "|(\\{[^\\}]*\\})" +
+                              "|(\\<[^\\>]*\\>)")
+            something = blocks.replace (something, "")
+
+            evilchars = QRegExp ("[\\(\\)\\_\\{\\}\\[\\]\\!\\@\\#\\$\\^\\&\\*\\+\\=\\|\\\\\\/\\\"\\'\\?\\<\\>\\~\\`]+")
+            something = evilchars.replace (something, "")
+            
+
+            something = MULTIWHITE.sub (" ", something)
+            something = something.strip ()
+
+            md5 = hashlib.md5 (something.lower ().encode ("utf-8"))
+            return md5.hexdigest ()
+            
+
+if __name__ == "__main__":
+
+    aa = AlbumArt ("Breakfast in america", "Björk")
+    print "Source:  \"" + aa.get_media_art_path () + "\""
+    print "Generated:  \"" + aa.get_generated () + "\""
+    print "Thumbnail:  \"" + aa.get_thumbnail () + "\""
+