895e91ebd11b5c006416fdd389eea34b4095e1f6
[mussorgsky] / src / album_art_spec.py
1 import os
2 import md5
3 import unicodedata
4 import string
5
6 COVERS_LOCATION = os.getenv ("HOME") + "/.cache/media-art/"
7 THUMBS_LOCATION = os.getenv ("HOME") + "/.thumbnails/cropped/"
8
9 # Hardcoded locations for testing in scratchbox 
10 #
11 #COVERS_LOCATION = "/home/user/.cache/media-art/"
12 #THUMBS_LOCATION = "/home/user/.thumbnails/cropped/"
13
14 def getCoverArtFileName (album):
15     """Returns the cover art's filename that is formed from the album name."""
16     album = unicode (album)
17     albumString=dropInsideContent(album,"[","]" )
18     albumString=dropInsideContent(albumString,"{","}" )
19     albumString=dropInsideContent(albumString,"(",")" )
20     for special_char in '()_{}[]!@#$^&*+=|\\/"\'?<>~`':
21         albumString=albumString.replace(special_char, "")
22     albumString=dropInsideContent(albumString,"{","}" )
23     albumString=albumString.lower()
24     albumString=string.replace(albumString,"\t"," ")
25     albumString=" ".join (albumString.split ())
26     try:
27         albumString=unicodedata.normalize('NFKD',albumString).encode()
28         albumString=albumString.encode()
29     except:
30         try:
31             albumString=albumString.encode('latin-1', 'ignore')
32             albumString=unicodedata.normalize('NFKD',albumString).encode("ascii")
33             albumString=str(albumString)
34             print albumString
35         except Exception, e:
36             albumString=str(albumString)
37             print "DEBUG: Using plain string"
38     if len(albumString)==0: albumString=" "
39      
40     albumMD5=md5.new(albumString).hexdigest()    
41     emptyMD5=md5.new(" ").hexdigest()
42     albumArt=COVERS_LOCATION + "album-" + emptyMD5 + "-" + albumMD5 + ".jpeg"
43     return albumArt
44
45
46 def getCoverArtThumbFileName (album):
47     artFile = getCoverArtFileName(album)
48     if not artFile.startswith ("file://"):
49         artFile = "file://" + artFile
50     thumbFile = THUMBS_LOCATION + md5.new(artFile).hexdigest() + ".jpeg"
51     return thumbFile
52
53 def get_thumb_filename_for_path (path):
54     if not path.startswith ("file://"):
55         path = "file://" + path
56     thumbnail = THUMBS_LOCATION + md5.new (path).hexdigest () + ".jpeg"
57     return thumbnail
58
59 def dropInsideContent(s, startMarker, endMarker):
60     startPos=s.find(startMarker)
61     endPos=s.find(endMarker)
62     if startPos>0 and endPos>0 and endPos>startPos:
63             return s[0:startPos]+s[endPos+1:len(s)]
64     return s
65
66 if __name__ == "__main__":
67     import sys
68     from optparse import OptionParser
69
70     parser = OptionParser()
71     parser.add_option ("-a", "--artist", dest="artist", type="string",
72                        help="ARTIST to look for", metavar="ARTIST")
73     parser.add_option ("-b", "--album", dest="album", type="string",
74                        help="ALBUM to look for", metavar="ALBUM")
75
76     (options, args) = parser.parse_args ()
77     print options
78     if (not options.artist and not options.album):
79         parser.print_help ()
80         sys.exit (-1)
81
82     print "Album art        :", getCoverArtFileName (options.album)
83     print "Thumbnail (album):", getCoverArtThumbFileName (options.album)
84     print "Thumbnail (path) :", get_thumb_filename_for_path (getCoverArtFileName(options.album))