From: achbed Date: Wed, 28 Jan 2015 06:13:21 +0000 (-0600) Subject: Fixes multiple regression issues with new MediaBase class X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=b778ce16e11561784546e0ee9d71efc07d936fec;p=deefuzzer.git Fixes multiple regression issues with new MediaBase class Additional logging on failure to track issues with media classes Signed-off-by: achbed --- diff --git a/deefuzzer/station.py b/deefuzzer/station.py index 6272434..d914779 100644 --- a/deefuzzer/station.py +++ b/deefuzzer/station.py @@ -547,10 +547,10 @@ class Station(Thread): file_meta = Ogg(media) elif file_ext.lower() == 'webm' or mimetypes.guess_type(media)[0] == 'video/webm': file_meta = WebM(media) - except: + except Exception, e: + self._err('Could not get specific media type class for %s' % (media)) + self._err('Error: %s' % (str(e))) pass - file_meta.metadata['filename'] = file_name.decode("utf-8") # decode needed for some weird filenames - file_meta.metadata['filepath'] = media.decode("utf-8") # decode needed for some weird filenames self.q.task_done() media_objs.append(file_meta) return media_objs @@ -589,6 +589,12 @@ class Station(Thread): media_description += media_description_item % (key.capitalize(), media.metadata[key]) json_item[key] = media.metadata[key] + if self.feeds_showfilepath: + media_description += media_description_item % ('Filepath', media.media) + json_item['filepath'] = media.media + if self.feeds_showfilename: + media_description += media_description_item % ('Filename', media.file_name) + json_item['filename'] = media.file_name media_description += '' title, artist, song = self.get_songmeta(media) @@ -686,18 +692,24 @@ class Station(Thread): m = self.media_to_objs([self.media]) self.current_media_obj = m[0] except: + self._info("Failed to get media object for %s" % (self.media)) pass self.title, self.artist, self.song = self.get_songmeta(self.current_media_obj) def set_read_mode(self): self.prefix = '#nowplaying' - self.get_currentsongmeta() - - self.metadata_file = self.metadata_dir + os.sep + self.current_media_obj.file_name + '.xml' - self.update_feeds([self.current_media_obj], self.feeds_current_file, '(currently playing)') - self._info('DeeFuzzing: id = %s, name = %s' - % (self.id, self.current_media_obj.file_name)) + + try: + self.get_currentsongmeta() + fn = self.current_media_obj.file_name + if fn: + self.metadata_file = self.metadata_dir + os.sep + fn + '.xml' + self.update_feeds([self.current_media_obj], self.feeds_current_file, '(currently playing)') + if fn: + self._info('DeeFuzzing: id = %s, name = %s' % (self.id, fn)) + except: + pass self.player.set_media(self.media) self.q.get(1) diff --git a/deefuzzer/tools/mediabase.py b/deefuzzer/tools/mediabase.py index ef71132..ee74697 100644 --- a/deefuzzer/tools/mediabase.py +++ b/deefuzzer/tools/mediabase.py @@ -28,12 +28,12 @@ class MediaBase(object): # tagdata contains a dictionary of tags to use to gather metadata from the sourceobj self.tagdata = {} - self.media = None + self.media = '' self.item_id = '' - self.source = None + self.source = '' self.options = {} self.bitrate_default = 0 - self.info = None + self.info = {} self.bitrate = 0 self.length = 0 @@ -74,10 +74,10 @@ class MediaBase(object): """Returns the metadata for the media, filtered by the tagdata dictionary for this media type. Return value is read from cache if possible (or unless clear_cache is set to True)""" if not self.metadata or clear_cache: - self.__read_file_metadata() + self.read_file_metadata() return self.metadata - def __read_file_metadata(self): + def read_file_metadata(self): """Reads the metadata for the media, filtered by the tagdata dictionary for this media type""" self.metadata = {} for key in self.tagdata.keys(): @@ -85,18 +85,26 @@ class MediaBase(object): try: self.metadata[key] = self.sourceobj[key][0] except: - try: - if self.tagdata[key] != '': - self.metadata[key] = self.sourceobj[self.tagdata[key]][0] - except: - pass + pass + + try: + if self.tagdata[key] != '' and self.metadata[key] == "": + self.metadata[key] = self.sourceobj[self.tagdata[key]][0] + except: + pass - def get_metadata_value(self, key, clean=False): + def get_metadata_value(self, key, clean=False, clear_cache=False): """Returns a metadata value for a give key. If clean is True, then the resulting string will - be cleaned before it is returned. If the key does not exist, an empty string is returned.""" + be cleaned before it is returned. If the key does not exist, an empty string is returned. Return + value is read from cache if possible (or unless clear_cache is set to True)""" + if not self.metadata or clear_cache: + self.read_file_metadata() + if key not in self.metadata: return '' r = self.metadata[key] + if not r: + r = ""; if clean: r = r.replace('_',' ').strip() return r.encode('utf-8') @@ -116,7 +124,8 @@ class MediaBase(object): a = self.get_metadata_value('artist', True) t = self.get_metadata_value('title', True) if len(a) == 0 and len(t) == 0 and usefn: - a = self.file_name.encode('utf-8') + if self.file_name: + a = self.file_name.encode('utf-8') r = a if len(a) > 0 and len(t) > 0: r += ' - ' diff --git a/deefuzzer/tools/mp3.py b/deefuzzer/tools/mp3.py index a1cafd0..bc14cd6 100644 --- a/deefuzzer/tools/mp3.py +++ b/deefuzzer/tools/mp3.py @@ -81,14 +81,14 @@ class Mp3(MediaBase): self.bitrate = int(self.info.bitrate / 1024) except: pass - self.length = datetime.timedelta(0, self.info.length) - self.__read_file_metadata() self.media_info = get_file_info(self.media) self.file_name = self.media_info[0] self.file_title = self.media_info[1] self.file_ext = self.media_info[2] self.size = os.path.getsize(self.media) + self.length = datetime.timedelta(0, self.info.length) + self.read_file_metadata() def write_tags(self): """Write all ID3v2.4 tags by mapping dub2id3_dict dictionnary with the diff --git a/deefuzzer/tools/ogg.py b/deefuzzer/tools/ogg.py index 93ec0d8..8f9adea 100644 --- a/deefuzzer/tools/ogg.py +++ b/deefuzzer/tools/ogg.py @@ -72,7 +72,7 @@ class Ogg(MediaBase): self.info = self.sourceobj.info self.bitrate = int(str(self.info.bitrate)[:-3]) self.length = datetime.timedelta(0, self.info.length) - self.__read_file_metadata() + self.read_file_metadata() self.media_info = get_file_info(self.media) self.file_name = self.media_info[0] self.file_title = self.media_info[1]