From 4bb4f649cedb320df70dd05e98e21c863773b290 Mon Sep 17 00:00:00 2001 From: achbed Date: Tue, 27 Jan 2015 23:34:37 -0600 Subject: [PATCH] Additional cleanup of MediaBase.metadata instances, calls, and methods Fixed exception failure in URLReader class Fixed two outstanding MediaBase reference issues in station.py Signed-off-by: achbed --- deefuzzer/player.py | 6 ++++-- deefuzzer/station.py | 4 ++-- deefuzzer/tools/mediabase.py | 41 +++++++++++++++++------------------- deefuzzer/tools/mp3.py | 16 ++------------ deefuzzer/tools/ogg.py | 4 ++-- deefuzzer/tools/webm.py | 1 - 6 files changed, 29 insertions(+), 43 deletions(-) diff --git a/deefuzzer/player.py b/deefuzzer/player.py index 27bab04..ac7fe06 100644 --- a/deefuzzer/player.py +++ b/deefuzzer/player.py @@ -37,6 +37,7 @@ # Author: Guillaume Pellerin from relay import * +import time class Player: @@ -120,7 +121,8 @@ class FileReader: class URLReader: def __init__(self, relay): - self.relay = urllib.urlopen(relay) + self.__relayparam = relay + self.relay = urllib.urlopen(self.__relayparam) self.rec_mode = 0 def set_recorder(self, recorder, mode=1): @@ -135,7 +137,7 @@ class URLReader: except: while True: try: - self.relay = urllib.urlopen(relay) + self.relay = urllib.urlopen(self.__relayparam) chunk = self.relay.read(size) break except: diff --git a/deefuzzer/station.py b/deefuzzer/station.py index 1e2ae72..6272434 100644 --- a/deefuzzer/station.py +++ b/deefuzzer/station.py @@ -694,10 +694,10 @@ class Station(Thread): self.prefix = '#nowplaying' self.get_currentsongmeta() - self.metadata_file = self.metadata_dir + os.sep + self.current_media_obj[0].file_name + '.xml' + 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[0].file_name)) + % (self.id, self.current_media_obj.file_name)) self.player.set_media(self.media) self.q.get(1) diff --git a/deefuzzer/tools/mediabase.py b/deefuzzer/tools/mediabase.py index 4474e63..ef71132 100644 --- a/deefuzzer/tools/mediabase.py +++ b/deefuzzer/tools/mediabase.py @@ -36,16 +36,6 @@ class MediaBase(object): self.info = None self.bitrate = 0 self.length = 0 - self.metadata = { - 'title': '', - 'artist': '', - 'album': '', - 'date': '', - 'comment': '', - 'country': '', - 'genre': '', - 'copyright': '' - } # sourceobj contains the metadata information for the referenced object self.sourceobj = {} @@ -55,6 +45,7 @@ class MediaBase(object): self.file_title = '' self.file_ext = '' self.size = 0 + self.metadata = {} # A more cross-platform way to do this self.cache_dir = tempfile.gettempdir() @@ -79,22 +70,28 @@ class MediaBase(object): """Sets an alternate location for temporary cache files used in this media object""" self.cache_dir = path - def get_file_metadata(self): - """Returns the metadata for the media, filtered by the tagdata dictionary for this media type""" - metadata = {} + def get_file_metadata(self, clear_cache=False): + """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() + return self.metadata + + 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(): - metadata[key] = '' + self.metadata[key] = '' try: - metadata[key] = self.sourceobj[key][0] + self.metadata[key] = self.sourceobj[key][0] except: try: if self.tagdata[key] != '': - metadata[key] = self.sourceobj[self.tagdata[key]][0] + self.metadata[key] = self.sourceobj[self.tagdata[key]][0] except: pass - return metadata - def __get_metadata_value(self, key, clean=False): + def get_metadata_value(self, key, clean=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.""" if key not in self.metadata: @@ -106,18 +103,18 @@ class MediaBase(object): def get_title(self): """Returns the cleaned title for this media""" - return self.__get_metadata_value('title', True) + return self.get_metadata_value('title', True) def get_artist(self): """Returns the cleaned artist for this media""" - return self.__get_metadata_value('artist', True) + return self.get_metadata_value('artist', True) def get_song(self, usefn=True): """Returns a string in the form "artist - title" for this media. If either artist or title are blank, only the non-blank field is returned. If both fields are blank, and the usefn parameter is True, then the filename is returned instead. Otherwise, an empty string is returned.""" - a = self.__get_metadata_value('artist', True) - t = self.__get_metadata_value('title', True) + 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') r = a diff --git a/deefuzzer/tools/mp3.py b/deefuzzer/tools/mp3.py index fbb1020..a1cafd0 100644 --- a/deefuzzer/tools/mp3.py +++ b/deefuzzer/tools/mp3.py @@ -82,25 +82,13 @@ class Mp3(MediaBase): except: pass self.length = datetime.timedelta(0, self.info.length) - try: - self.metadata = self.get_file_metadata() - except: - self.metadata = { - 'title': '', - 'artist': '', - 'album': '', - 'date': '', - 'comment': '', - 'country': '', - 'genre': '', - 'copyright': '' - } + 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(mediabase) + self.size = os.path.getsize(self.media) 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 c9834c8..93ec0d8 100644 --- a/deefuzzer/tools/ogg.py +++ b/deefuzzer/tools/ogg.py @@ -72,12 +72,12 @@ 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.metadata = self.get_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] self.file_ext = self.media_info[2] - self.size = os.path.getsize(media) + self.size = os.path.getsize(self.media) def get_file_info(self): try: diff --git a/deefuzzer/tools/webm.py b/deefuzzer/tools/webm.py index fc7d25e..f39eff0 100644 --- a/deefuzzer/tools/webm.py +++ b/deefuzzer/tools/webm.py @@ -55,5 +55,4 @@ class WebM(MediaBase): self.media = media self.source = self.media - self.metadata = {} self.file_name, self.file_title, self.file_ext = get_file_info(media) -- 2.39.5