]> git.parisson.com Git - deefuzzer.git/commitdiff
Fixes multiple regression issues with new MediaBase class
authorachbed <github@achbed.org>
Wed, 28 Jan 2015 06:13:21 +0000 (00:13 -0600)
committerachbed <github@achbed.org>
Wed, 28 Jan 2015 06:13:21 +0000 (00:13 -0600)
Additional logging on failure to track issues with media classes

Signed-off-by: achbed <github@achbed.org>
deefuzzer/station.py
deefuzzer/tools/mediabase.py
deefuzzer/tools/mp3.py
deefuzzer/tools/ogg.py

index 62724340fb22c1b29bd92e4e7a794e384b9e0441..d91477923435f3d47eb1c656f00e9bce2377b3c4 100644 (file)
@@ -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 += '</table>'
 
             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)
index ef71132a00412d092756b9175fca360ea06d3ddd..ee74697dc87bd3dea5a5b1274e8b4f8e78d17b46 100644 (file)
@@ -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 += ' - '
index a1cafd09b461644e53cacac2826ffb07b8693972..bc14cd61d6fb7c86730d8fd4084da5ffc4b29a86 100644 (file)
@@ -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
index 93ec0d8bc599b2c79fd3c768aab480249b24b194..8f9adea371354d0d1bd433297bebd011e4b235ff 100644 (file)
@@ -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]