Progress timer
authorKristoffer Grönlund <kristoffer.gronlund@purplescout.se>
Fri, 1 Jan 2010 16:57:48 +0000 (17:57 +0100)
committerKristoffer Grönlund <kristoffer.gronlund@purplescout.se>
Sat, 2 Jan 2010 23:37:45 +0000 (00:37 +0100)
jamaui/playerwindow.py

index 57ea13f..ceeb549 100644 (file)
@@ -22,6 +22,7 @@
 #  (based on http://pygstdocs.berlios.de/pygst-tutorial/seeking.html)
 #
 import gtk
 #  (based on http://pygstdocs.berlios.de/pygst-tutorial/seeking.html)
 #
 import gtk
+import gobject
 import hildon
 from settings import settings
 from postoffice import postoffice
 import hildon
 from settings import settings
 from postoffice import postoffice
@@ -49,6 +50,8 @@ class PlayerWindow(hildon.StackableWindow):
         self.playlist_pos = gtk.Label()
         self.track = gtk.Label()
         self.progress = hildon.GtkHScale()
         self.playlist_pos = gtk.Label()
         self.track = gtk.Label()
         self.progress = hildon.GtkHScale()
+        self.progress.set_draw_value(False)
+        self.progress.set_range(0.0, 1.0)
         self.artist = gtk.Label()
         self.album = gtk.Label()
 
         self.artist = gtk.Label()
         self.album = gtk.Label()
 
@@ -59,6 +62,8 @@ class PlayerWindow(hildon.StackableWindow):
         else:
             self.set_labels('', '', '', 0, 0)
 
         else:
             self.set_labels('', '', '', 0, 0)
 
+        self._position_timer = None
+
         vbox2.pack_start(self.track, True)
         vbox2.pack_start(self.artist, False)
         vbox2.pack_start(self.album, False)
         vbox2.pack_start(self.track, True)
         vbox2.pack_start(self.artist, False)
         vbox2.pack_start(self.album, False)
@@ -125,6 +130,28 @@ class PlayerWindow(hildon.StackableWindow):
         else:
             settings.volume = widget.get_level()/100.0
 
         else:
             settings.volume = widget.get_level()/100.0
 
+    def on_position_timeout(self):
+        if the_player.playing():
+            self.set_position(*the_player.get_position_duration())
+        return True
+
+    def start_position_timer(self):
+        if self._position_timer is not None:
+            self.stop_position_timer()
+        self._position_timer = gobject.timeout_add(1000, self.on_position_timeout)
+
+    def stop_position_timer(self):
+        if self._position_timer is not None:
+            gobject.source_remove(self._position_timer)
+            self._position_timer = None
+
+    def clear_position(self):
+        self.progress.set_value(0)
+
+    def set_position(self, time_elapsed, total_time):
+        value = (float(time_elapsed) / float(total_time)) if total_time else 0
+        self.progress.set_value( value )
+
     def update_state(self):
         item = self.playlist.current()
         if item:
     def update_state(self):
         item = self.playlist.current()
         if item:
@@ -147,13 +174,17 @@ class PlayerWindow(hildon.StackableWindow):
 
     def play_tracks(self, tracks):
         self.playlist = Playlist(tracks)
 
     def play_tracks(self, tracks):
         self.playlist = Playlist(tracks)
+        self.clear_position()
+        self.start_position_timer()
         self.player.play(self.playlist)
         self.update_state()
 
     def on_play(self, button):
         self.player.play(self.playlist)
         self.player.play(self.playlist)
         self.update_state()
 
     def on_play(self, button):
         self.player.play(self.playlist)
+        self.start_position_timer()
         self.update_state()
     def on_pause(self, button):
         self.update_state()
     def on_pause(self, button):
+        self.stop_position_timer()
         self.player.pause()
     def on_prev(self, button):
         self.player.prev()
         self.player.pause()
     def on_prev(self, button):
         self.player.prev()
@@ -162,6 +193,8 @@ class PlayerWindow(hildon.StackableWindow):
         self.player.next()
         self.update_state()
     def on_stop(self, button):
         self.player.next()
         self.update_state()
     def on_stop(self, button):
+        self.stop_position_timer()
+        self.clear_position()
         self.player.stop()
 
 def open_playerwindow(tracks=None):
         self.player.stop()
 
 def open_playerwindow(tracks=None):