Move the qml/* files to the src folder. Now it is the main version
[mussorgsky] / src / albumArt.py
1 # -*- coding: utf-8 -*-
2 from PySide.QtCore import QRegExp
3 import re
4 import hashlib
5 import os
6
7 MULTIWHITE = re.compile ("\s\s+")
8
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")
12
13 #
14 # Python translation of :
15 # https://qt.gitorious.org/qt/qt/blobs/d12681a4cf1227d0e92fc7cf12aa3977e6ffe3fe/src/corelib/tools/qhash.cpp#line76
16 #
17 def qhash (inputstr):
18
19     if isinstance (inputstr, str):
20         instr = inputstr 
21     elif isinstance (inputstr, unicode):
22         instr = inputstr.encode ("utf8")
23     else:
24         return -1
25
26     h = 0x00000000
27     for i in range (0, len (instr)):
28         h = (h << 4) + ord(instr[i])
29         h ^= (h & 0xf0000000) >> 23
30         h &= 0x0fffffff
31
32     return h
33
34 class AlbumArt:
35     def __init__ (self, album, artist, flavor="common", aaType="album"):
36         self.album = album
37         self.albumMD5 = self.__get_md5 (album)
38         self.artist = artist
39         self.artistMD5 = self.__get_md5 (artist)
40         self.flavor = "common"
41         self.aaType = "album"
42
43     def get_media_art_path (self):
44         """
45         The raw media-art downloaded or taken from the folder with the music files
46         """
47         filename = "album-" + self.artistMD5 + "-" + self.albumMD5 + ".jpeg"
48         return os.path.join (MEDIAART_PATH, filename)
49
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)
53
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)
57         
58
59
60     def __get_md5 (self, something):
61         if not something or len (something) == 0:
62             something = " "
63         else:
64             # This can very probably be done with the native python regexp
65             blocks = QRegExp ("(\\([^\\)]*\\))" + 
66                               "|(\\[[^\\]]*\\])" +
67                               "|(\\{[^\\}]*\\})" +
68                               "|(\\<[^\\>]*\\>)")
69             something = blocks.replace (something, "")
70
71             evilchars = QRegExp ("[\\(\\)\\_\\{\\}\\[\\]\\!\\@\\#\\$\\^\\&\\*\\+\\=\\|\\\\\\/\\\"\\'\\?\\<\\>\\~\\`]+")
72             something = evilchars.replace (something, "")
73             
74
75             something = MULTIWHITE.sub (" ", something)
76             something = something.strip ()
77
78             md5 = hashlib.md5 (something.lower ().encode ("utf-8"))
79             return md5.hexdigest ()
80             
81
82 if __name__ == "__main__":
83
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 () + "\""
88