Add OGG mimetype in maemo
[mussorgsky] / src / mutagen_backend.py
1 #!/usr/bin/env python2.5
2 import mutagen
3
4 class MutagenBackend ():
5
6     #
7     # Maybe all this can be simplified using mutagen.File
8     #
9     def __init__ (self):
10         self.formats = {"audio/mpeg": self.__id3_writer ,
11                         "audio/x-ms-wma" : self.__wma_writer ,
12                         "audio/x-flac" : self.__autoguess_writer ,
13                         "audio/ogg" : self.__autoguess_writer ,
14                         "audio/x-vorbis+ogg" : self.__autoguess_writer, 
15                         "audio/ogg+vorbis" : self.__autoguess_writer }
16
17     def get_supported_mimes (self):
18         return self.formats.keys ()
19
20     def save_metadata_on_file (self, filename, mime, artist, title, album):
21         if (self.formats.has_key (mime)):
22             return self.formats[mime] (filename, artist, title, album)
23         else:
24             return False
25
26     def __id3_writer (self, filename, artist, title, album):
27         from mutagen.mp3 import MP3
28         from mutagen.easyid3 import EasyID3
29         audio = MP3 (filename, ID3=EasyID3)
30         try:
31             audio.add_tags (ID3=EasyID3)
32             print "Adding tags to %s" % (filename)
33         except mutagen.id3.error:
34             # It already has tags!
35             pass
36
37         audio["artist"] = artist
38         audio["title"] = title
39         audio["album"] = album
40         try:
41             audio.save()
42             return True
43         except:
44             return False
45
46     def __wma_writer (self, filename, artist, title, album):
47         from mutagen.asf import ASF
48         audio = ASF (filename)
49         audio["Author"] = artist
50         audio["Title"] = title
51         audio["WM/AlbumTitle"] = album
52         try:
53             audio.save()
54             return True
55         except:
56             return False
57
58     def __autoguess_writer (self, filename, artist, title, album):
59         audio = mutagen.File (filename)
60         audio["artist"] = artist
61         audio["title"] = title
62         audio["album"] = album
63         try:
64             audio.save()
65             return True
66         except:
67             return False
68     
69 if __name__ == "__main__":
70
71     pass
72     ## TEST_FILE = "test-files/strange.mp3"
73     ## TEST_FILE_TO_BREAK = "test-files/strange-fixed.mp3"
74
75     ## out = open (TEST_FILE_TO_BREAK, 'w')
76     ## out.write (open (TEST_FILE,'r').read ())
77     ## out.close ()
78     
79     ## writer.save_metadata_on_file (TEST_FILE_TO_BREAK, "audio/mpeg",
80     ##                               "artist_test", "title_test", "album_test")
81     ## verify (TEST_FILE_TO_BREAK, "artist_test", "title_test", "album_test")
82     
83     ## writer.save_metadata_on_file (TEST_FILE_TO_BREAK, "audio/mpeg",
84     ##                               "artist_test_2", "title_test_2", "album_2")
85     ## verify (TEST_FILE_TO_BREAK, "artist_test_2", "title_test_2", "album_2")
86
87
88
89     ## READONLY_FILE = "test-files/no-write.mp3"
90     ## assert not writer.save_metadata_on_file (READONLY_FILE, "audio/mpeg",
91     ##                                          "artist_test", "title_test", "album_test")
92
93
94     ## WMA_FILE = "test-files/hooverphonic.wma"
95     ## assert writer.save_metadata_on_file (WMA_FILE, "audio/x-ms-wma",
96     ##                               "artist_wma", "title_wma", "album_wma")
97     ## verify_wma (WMA_FILE, "artist_wma", "title_wma", "album_wma")
98
99     ## assert writer.save_metadata_on_file (WMA_FILE, "audio/x-ms-wma",
100     ##                               "artist_wma_2", "title_wma_2", "album_wma_2")
101     ## verify_wma (WMA_FILE, "artist_wma_2", "title_wma_2", "album_wma_2")