1 # -*- coding: utf-8 -*-
2 from PySide.QtCore import QRegExp
7 MULTIWHITE = re.compile ("\s\s+")
9 MEDIAART_PATH = os.path.join (os.environ["HOME"], ".cache", "media-art")
10 GENERATED_PATH = os.path.join (os.environ["HOME"], ".cache", "music-suite", "generated")
11 THUMB_PATH = os.path.join (os.environ["HOME"], ".cache", "music-suite", "thumbnails")
14 # Python translation of :
15 # https://qt.gitorious.org/qt/qt/blobs/d12681a4cf1227d0e92fc7cf12aa3977e6ffe3fe/src/corelib/tools/qhash.cpp#line76
19 if isinstance (inputstr, str):
21 elif isinstance (inputstr, unicode):
22 instr = inputstr.encode ("utf8")
27 for i in range (0, len (instr)):
28 h = (h << 4) + ord(instr[i])
29 h ^= (h & 0xf0000000) >> 23
35 def __init__ (self, album, artist, flavor="common", aaType="album"):
37 self.albumMD5 = self.__get_md5 (album)
39 self.artistMD5 = self.__get_md5 (artist)
40 self.flavor = "common"
43 def get_media_art_path (self):
45 The raw media-art downloaded or taken from the folder with the music files
47 filename = "album-" + self.artistMD5 + "-" + self.albumMD5 + ".jpeg"
48 return os.path.join (MEDIAART_PATH, filename)
50 def get_generated (self):
51 filename = str (qhash (self.album + self.artist + self.flavor + self.aaType)) + ".png"
52 return os.path.join (GENERATED_PATH, self.flavor, filename)
54 def get_thumbnail (self):
55 filename = str (qhash (self.album + self.artist + self.flavor + self.aaType)) + ".jpeg"
56 return os.path.join (THUMB_PATH, self.flavor, filename)
60 def __get_md5 (self, something):
61 if not something or len (something) == 0:
64 # This can very probably be done with the native python regexp
65 blocks = QRegExp ("(\\([^\\)]*\\))" +
69 something = blocks.replace (something, "")
71 evilchars = QRegExp ("[\\(\\)\\_\\{\\}\\[\\]\\!\\@\\#\\$\\^\\&\\*\\+\\=\\|\\\\\\/\\\"\\'\\?\\<\\>\\~\\`]+")
72 something = evilchars.replace (something, "")
75 something = MULTIWHITE.sub (" ", something)
76 something = something.strip ()
78 md5 = hashlib.md5 (something.lower ().encode ("utf-8"))
79 return md5.hexdigest ()
82 if __name__ == "__main__":
84 aa = AlbumArt ("Breakfast in america", "Björk")
85 print "Source: \"" + aa.get_media_art_path () + "\""
86 print "Generated: \"" + aa.get_generated () + "\""
87 print "Thumbnail: \"" + aa.get_thumbnail () + "\""