Updated album-art thumbnail path calculation
[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     albumString=albumString.strip('()_{}[]!@#$^&*+=|\\/"\'?<>~`')
21     albumString=albumString.lstrip(' ')
22     albumString=albumString.rstrip(' ')
23     albumString=dropInsideContent(albumString,"{","}" )
24     albumString=albumString.lower()
25     albumString=string.replace(albumString,"\t"," ")
26     albumString=string.replace(albumString,"  "," ")    
27     
28     try:
29         albumString=unicodedata.normalize('NFKD',albumString).encode()
30         albumString=albumString.encode()
31     except:
32         try:
33             albumString=albumString.encode('latin-1', 'ignore')
34             albumString=unicodedata.normalize('NFKD',albumString).encode("ascii")
35             albumString=str(albumString)
36             print albumString
37         except Exception, e:
38             albumString=str(albumString)
39             print "DEBUG: Using plain string"
40     if len(albumString)==0: albumString=" "
41      
42     albumMD5=md5.new(albumString).hexdigest()    
43     emptyMD5=md5.new(" ").hexdigest()
44     albumArt=COVERS_LOCATION + "album-" + emptyMD5 + "-" + albumMD5 + ".jpeg"
45     return albumArt
46
47
48 def getCoverArtThumbFileName (album):
49     artFile = getCoverArtFileName(album)
50     if not artFile.startswith ("file://"):
51         artFile = "file://" + artFile
52     thumbFile = THUMBS_LOCATION + md5.new(artFile).hexdigest() + ".jpeg"
53     return thumbFile
54
55 def get_thumb_filename_for_path (path):
56     if not path.startswith ("file://"):
57         path = "file://" + path
58     thumbnail = THUMBS_LOCATION + md5.new (path).hexdigest () + ".jpeg"
59     return thumbnail
60
61 def dropInsideContent(s, startMarker, endMarker):
62     startPos=s.find(startMarker)
63     endPos=s.find(endMarker)
64     if startPos>0 and endPos>0 and endPos>startPos:
65             return s[0:startPos]+s[endPos+1:len(s)]
66     return s
67
68 if __name__ == "__main__":
69     import sys
70     from optparse import OptionParser
71
72     parser = OptionParser()
73     parser.add_option ("-a", "--artist", dest="artist", type="string",
74                        help="ARTIST to look for", metavar="ARTIST")
75     parser.add_option ("-b", "--album", dest="album", type="string",
76                        help="ALBUM to look for", metavar="ALBUM")
77
78     (options, args) = parser.parse_args ()
79     print options
80     if (not options.artist and not options.album):
81         parser.print_help ()
82         sys.exit (-1)
83
84     print "Album art        :", getCoverArtFileName (options.album)
85     print "Thumbnail (album):", getCoverArtThumbFileName (options.album)
86     print "Thumbnail (path) :", get_thumb_filename_for_path (getCoverArtFileName(options.album))