Merge branch 'devel' of dev.sourcefabric.org:airtime into devel

This commit is contained in:
Martin Konecny 2012-09-13 16:11:15 -04:00
commit d534f22ce4
3 changed files with 45 additions and 18 deletions

View file

@ -41,6 +41,18 @@ airtime2mutagen = {
"MDATA_KEY_COPYRIGHT" : "copyright",
}
class FakeMutagen(dict):
"""
Need this fake mutagen object so that airtime_special functions return a
proper default value instead of throwing an exceptions for files that
mutagen doesn't recognize
"""
def __init__(self,path):
self.path = path
self.mime = True
self.info = True
dict.__init__(self)
# Some airtime attributes are special because they must use the mutagen object
# itself to calculate the value that they need. The lambda associated with each
# key should attempt to extract the corresponding value from the mutagen object
@ -178,14 +190,20 @@ class Metadata(Loggable):
return
# TODO : Simplify the way all of these rules are handled right not it's
# extremely unclear and needs to be refactored.
if full_mutagen is None: raise BadSongFile(fpath)
#if full_mutagen is None: raise BadSongFile(fpath)
if full_mutagen is None: full_mutagen = FakeMutagen(fpath)
self.__metadata = Metadata.airtime_dict(full_mutagen)
# Now we extra the special values that are calculated from the mutagen
# object itself:
for special_key,f in airtime_special.iteritems():
new_val = f(full_mutagen)
if new_val is not None:
self.__metadata[special_key] = new_val
try:
new_val = f(full_mutagen)
if new_val is not None:
self.__metadata[special_key] = new_val
except Exception as e:
self.logger.info("Could not get special key %s for %s" %
(special_key, fpath))
self.logger.info(str(e))
# Finally, we "normalize" all the metadata here:
self.__metadata = mmp.normalized_metadata(self.__metadata, fpath)
# Now we must load the md5: