From e8a1d1b49da80105dfff84ebfd71320f500a87ed Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Mon, 25 Oct 2010 23:47:12 +0200 Subject: [PATCH] Add error callback and switch to using uridecodebin --- mopidy/scanner.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/mopidy/scanner.py b/mopidy/scanner.py index 6b2798ef..298d81d8 100644 --- a/mopidy/scanner.py +++ b/mopidy/scanner.py @@ -12,12 +12,15 @@ import threading from mopidy.utils.path import path_to_uri, find_files class Scanner(object): - def __init__(self, folder, callback): + def __init__(self, folder, data_callback, error_callback=None): self.uris = [path_to_uri(f) for f in find_files(folder)] - self.callback = callback + self.data_callback = data_callback + self.error_callback = error_callback self.loop = gobject.MainLoop() - self.pipe = gst.element_factory_make('playbin2') + self.uribin = gst.element_factory_make('uridecodebin') + self.pipe = gst.element_factory_make('pipeline') + self.pipe.add(self.uribin) bus = self.pipe.get_bus() bus.add_signal_watch() @@ -28,18 +31,22 @@ class Scanner(object): def process_tags(self, bus, message): data = message.parse_tag() - self.callback(dict([(k, data[k]) for k in data.keys()])) + self.data_callback(dict([(k, data[k]) for k in data.keys()])) self.next_uri() def process_error(self, bus, message): - print message.parse_error() + if self.error_callback: + uri = self.uribin.get_property('uri') + error = message.parse_error() + self.error_callback(uri, *error) + self.next_uri() def next_uri(self): if not self.uris: return self.stop() self.pipe.set_state(gst.STATE_NULL) - self.pipe.set_property('uri', self.uris.pop()) + self.uribin.set_property('uri', self.uris.pop()) self.pipe.set_state(gst.STATE_PAUSED) def start(self):