Fixing a Maemo 5 issue
[watersofshiloah] / src / player.py
index 6e61429..561b5c7 100644 (file)
@@ -3,7 +3,11 @@ import logging
 import gobject
 
 import util.misc as misc_utils
 import gobject
 
 import util.misc as misc_utils
-import stream
+try:
+       import stream as _stream
+       stream = _stream # Silence PyFlakes
+except ImportError:
+       import stream_gst as stream
 import stream_index
 import call_monitor
 
 import stream_index
 import call_monitor
 
@@ -31,9 +35,9 @@ class Player(gobject.GObject):
                ),
        }
 
                ),
        }
 
-       STATE_PLAY = stream.GSTStream.STATE_PLAY
-       STATE_PAUSE = stream.GSTStream.STATE_PAUSE
-       STATE_STOP = stream.GSTStream.STATE_STOP
+       STATE_PLAY = stream.Stream.STATE_PLAY
+       STATE_PAUSE = stream.Stream.STATE_PAUSE
+       STATE_STOP = stream.Stream.STATE_STOP
 
        def __init__(self, index):
                gobject.GObject.__init__(self)
 
        def __init__(self, index):
                gobject.GObject.__init__(self)
@@ -44,7 +48,7 @@ class Player(gobject.GObject):
                self._calls = call_monitor.CallMonitor()
                self._calls.connect("call_start", self._on_call_start)
 
                self._calls = call_monitor.CallMonitor()
                self._calls.connect("call_start", self._on_call_start)
 
-               self._stream = stream.GSTStream()
+               self._stream = stream.Stream()
                self._stream.connect("state-change", self._on_stream_state)
                self._stream.connect("eof", self._on_stream_eof)
                self._stream.connect("error", self._on_stream_error)
                self._stream.connect("state-change", self._on_stream_state)
                self._stream.connect("eof", self._on_stream_eof)
                self._stream.connect("error", self._on_stream_error)
@@ -95,17 +99,25 @@ class Player(gobject.GObject):
 
                self._calls.stop()
 
 
                self._calls.stop()
 
-       def back(self):
+       def back(self, forcePlay = False):
                _moduleLogger.info("back")
                assert self._nextSearch is None
                self._nextSearch = stream_index.AsyncWalker(stream_index.get_previous)
                _moduleLogger.info("back")
                assert self._nextSearch is None
                self._nextSearch = stream_index.AsyncWalker(stream_index.get_previous)
-               self._nextSearch.start(self.node, self._on_next_node, self._on_node_search_error)
+               self._nextSearch.start(
+                       self.node,
+                       lambda node: self._on_next_node(node, forcePlay),
+                       self._on_node_search_error
+               )
 
 
-       def next(self):
+       def next(self, forcePlay = False):
                _moduleLogger.info("next")
                assert self._nextSearch is None
                self._nextSearch = stream_index.AsyncWalker(stream_index.get_next)
                _moduleLogger.info("next")
                assert self._nextSearch is None
                self._nextSearch = stream_index.AsyncWalker(stream_index.get_next)
-               self._nextSearch.start(self.node, self._on_next_node, self._on_node_search_error)
+               self._nextSearch.start(
+                       self.node,
+                       lambda node: self._on_next_node(node, forcePlay),
+                       self._on_node_search_error
+               )
 
        def seek(self, percent):
                target = percent * self._stream.duration
 
        def seek(self, percent):
                target = percent * self._stream.duration
@@ -128,12 +140,12 @@ class Player(gobject.GObject):
                self.emit("title_change", self._node)
 
        @misc_utils.log_exception(_moduleLogger)
                self.emit("title_change", self._node)
 
        @misc_utils.log_exception(_moduleLogger)
-       def _on_next_node(self, node):
+       def _on_next_node(self, node, forcePlay):
                self._nextSearch = None
 
                restart = self.state == self.STATE_PLAY
                self._set_piece_by_node(node)
                self._nextSearch = None
 
                restart = self.state == self.STATE_PLAY
                self._set_piece_by_node(node)
-               if restart:
+               if restart or forcePlay:
                        self.play()
 
        @misc_utils.log_exception(_moduleLogger)
                        self.play()
 
        @misc_utils.log_exception(_moduleLogger)
@@ -149,7 +161,7 @@ class Player(gobject.GObject):
        @misc_utils.log_exception(_moduleLogger)
        def _on_stream_eof(self, s, uri):
                _moduleLogger.info("EOF %s" % uri)
        @misc_utils.log_exception(_moduleLogger)
        def _on_stream_eof(self, s, uri):
                _moduleLogger.info("EOF %s" % uri)
-               self.next()
+               self.next(forcePlay = True)
 
        @misc_utils.log_exception(_moduleLogger)
        def _on_stream_error(self, s, error, debug):
 
        @misc_utils.log_exception(_moduleLogger)
        def _on_stream_error(self, s, error, debug):