Force utf8 in string encoding. Still incorrect values with umlauts
[mussorgsky] / src / album_art_spec.py
index 67b68b1..4735c65 100644 (file)
@@ -6,51 +6,53 @@ import string
 COVERS_LOCATION = os.getenv ("HOME") + "/.cache/media-art/"
 THUMBS_LOCATION = os.getenv ("HOME") + "/.thumbnails/cropped/"
 
+# Hardcoded locations for testing in scratchbox 
+#
+#COVERS_LOCATION = "/home/user/.cache/media-art/"
+#THUMBS_LOCATION = "/home/user/.thumbnails/cropped/"
+
 def getCoverArtFileName (album):
     """Returns the cover art's filename that is formed from the album name."""
-    print "Calculating album art for " + album
-    album = unicode (album)
+    album = unicode (album, "utf8")
     albumString=dropInsideContent(album,"[","]" )
     albumString=dropInsideContent(albumString,"{","}" )
-    albumString=dropInsideContent(albumString,"(",")" )    
-    albumString=albumString.strip('()_{}[]!@#$^&*+=|\\/"\'?<>~`')
-    albumString=albumString.lstrip(' ')
-    albumString=albumString.rstrip(' ')
+    albumString=dropInsideContent(albumString,"(",")" )
+    for special_char in '()_{}[]!@#$^&*+=|\\/"\'?<>~`':
+        albumString=albumString.replace(special_char, "")
     albumString=dropInsideContent(albumString,"{","}" )
     albumString=albumString.lower()
     albumString=string.replace(albumString,"\t"," ")
-    albumString=string.replace(albumString,"  "," ")    
-    
+    albumString=" ".join (albumString.split ())
     try:
-        print "Trying NFKD"
-        albumString=unicodedata.normalize('NFKD',albumString).encode()
+        albumString=unicodedata.normalize('NFKD',albumString).encode("utf8")
         albumString=albumString.encode()
-        print albumString
     except:
         try:
-            print "Trying latin-1"
             albumString=albumString.encode('latin-1', 'ignore')
             albumString=unicodedata.normalize('NFKD',albumString).encode("ascii")
             albumString=str(albumString)
             print albumString
         except Exception, e:
-            albumString="unknown"
-            print "unknown" + str(e)
+            albumString=str(albumString)
+            print "DEBUG: Using plain string"
     if len(albumString)==0: albumString=" "
      
     albumMD5=md5.new(albumString).hexdigest()    
     emptyMD5=md5.new(" ").hexdigest()
     albumArt=COVERS_LOCATION + "album-" + emptyMD5 + "-" + albumMD5 + ".jpeg"
-    print "Album art:" + albumArt
     return albumArt
 
 
 def getCoverArtThumbFileName (album):
     artFile = getCoverArtFileName(album)
-    thumbFile = THUMBS_LOCATION + md5.new(artFile).hexdigest()+".jpeg"
+    if not artFile.startswith ("file://"):
+        artFile = "file://" + artFile
+    thumbFile = THUMBS_LOCATION + md5.new(artFile).hexdigest() + ".jpeg"
     return thumbFile
 
 def get_thumb_filename_for_path (path):
+    if not path.startswith ("file://"):
+        path = "file://" + path
     thumbnail = THUMBS_LOCATION + md5.new (path).hexdigest () + ".jpeg"
     return thumbnail
 
@@ -60,3 +62,23 @@ def dropInsideContent(s, startMarker, endMarker):
     if startPos>0 and endPos>0 and endPos>startPos:
             return s[0:startPos]+s[endPos+1:len(s)]
     return s
+
+if __name__ == "__main__":
+    import sys
+    from optparse import OptionParser
+
+    parser = OptionParser()
+    parser.add_option ("-a", "--artist", dest="artist", type="string",
+                       help="ARTIST to look for", metavar="ARTIST")
+    parser.add_option ("-b", "--album", dest="album", type="string",
+                       help="ALBUM to look for", metavar="ALBUM")
+
+    (options, args) = parser.parse_args ()
+    print options
+    if (not options.artist and not options.album):
+        parser.print_help ()
+        sys.exit (-1)
+
+    print "Album art        :", getCoverArtFileName (options.album)
+    print "Thumbnail (album):", getCoverArtThumbFileName (options.album)
+    print "Thumbnail (path) :", get_thumb_filename_for_path (getCoverArtFileName(options.album))