diff --git a/libsaria/audio/__init__.py b/libsaria/audio/__init__.py index 2cced114..db5431bc 100644 --- a/libsaria/audio/__init__.py +++ b/libsaria/audio/__init__.py @@ -2,6 +2,7 @@ __all__ = ['audio'] +import gst import libsaria call = libsaria.event.call expand = libsaria.path.expand @@ -55,9 +56,9 @@ def get_progress(): def get_time(): global audio global tdelta - pos = audio.position() - if pos == 0: + if audio.get_state() == gst.STATE_NULL: return "" + pos = audio.position() pos /= 1000 time = str(tdelta(microseconds=pos)) time = time.rsplit('.', 1)[0] diff --git a/libsaria/audio/audio.py b/libsaria/audio/audio.py index c1839c7a..64dcd193 100644 --- a/libsaria/audio/audio.py +++ b/libsaria/audio/audio.py @@ -9,6 +9,7 @@ player = None time = None bus = None length = None +call = libsaria.event.call # An init function for faster startup def init(): diff --git a/ocarina/body/footer/__init__.py b/ocarina/body/footer/__init__.py index c6d09f64..0a6cc8d4 100644 --- a/ocarina/body/footer/__init__.py +++ b/ocarina/body/footer/__init__.py @@ -1,7 +1,10 @@ # Bryan Schumaker (11/25/2010) import gtk +import gobject + import tiny +from libsaria import audio footer = gtk.VBox() hsep = gtk.HSeparator() @@ -11,12 +14,21 @@ footer.pack_start(hsep, True, True) footer.pack_start(tiny.tiny, True, True) footer.show() +def update_pos(): + time = audio.get_time() + tiny.update_pos(time) + return True +gobject.timeout_add(500, update_pos) + def on_play(): tiny.on_play() def on_pause(): tiny.on_pause() +def on_load(): + tiny.on_load() + #import gtk #import pango #import ocarina diff --git a/ocarina/body/footer/tiny.py b/ocarina/body/footer/tiny.py index 6bbd7ba9..75e17464 100644 --- a/ocarina/body/footer/tiny.py +++ b/ocarina/body/footer/tiny.py @@ -3,19 +3,28 @@ import gtk import pango import ocarina +import libsaria from ocarina.body import button tiny = gtk.HBox() + now_playing = gtk.Label(ocarina.__vers__) now_playing.set_ellipsize(pango.ELLIPSIZE_END) now_playing.show() +cur_pos = gtk.Label() +duration = gtk.Label() +cur_pos.show() +duration.show() + def add_button(name, button_func, show = True): b = button_func(show) globals()[name] = b tiny.pack_start(b, False, False) -tiny.pack_start(now_playing, True, True) +tiny.pack_start(now_playing, True, True) +tiny.pack_start( cur_pos, False, False) +tiny.pack_start( duration, False, False) add_button( "REWIND", button.rewind_button) add_button("FORWARD", button.forward_button) add_button( "PLAY", button.play_button) @@ -24,6 +33,9 @@ add_button( "STOP", button.stop_button) add_button( "NEXT", button.next_button) tiny.show() +def update_pos(pos): + cur_pos.set_text(pos) + def on_play(): PLAY.hide() PAUSE.show() @@ -31,3 +43,9 @@ def on_play(): def on_pause(): PLAY.show() PAUSE.hide() + +load_attrs = ("title", "artist", "lenstr") +def on_load(): + title, artist, lenstr = libsaria.sources.get_attrs(*load_attrs) + now_playing.set_text("%s %s" % (title, artist)) + duration.set_text(" / %s" % lenstr) diff --git a/ocarina/callbacks.py b/ocarina/callbacks.py index 40e70906..c674ff42 100644 --- a/ocarina/callbacks.py +++ b/ocarina/callbacks.py @@ -18,6 +18,7 @@ def on_stop(*args): footer.on_pause() invite("POSTSTOP", on_stop) -def on_next(*args): +def on_load(*args): + footer.on_load() queue.refresh() -invite("POSTNEXT", on_next) +invite("POSTLOAD", on_load) diff --git a/ocarina/components/label.py b/ocarina/components/label.py index 018904f4..861f946d 100644 --- a/ocarina/components/label.py +++ b/ocarina/components/label.py @@ -17,21 +17,6 @@ def set_fns(): get_attrs = libsaria.sources.get_attrs invite("POSTSTART", set_fns) - -class TimeLabel(gtk.Label): - def __init__(self): - gtk.Label.__init__(self) - gobject.timeout_add(500, self.update) - self.show() - - def update(self): - global get_time - time = get_time() - if time == "": - time = "00:00" - self.set_text(time + " ") - return True - class AttrLabel(gtk.Alignment): def __init__(self, attr, other = None): gtk.Alignment.__init__(self, 0, 0.5, 0, 0) @@ -74,7 +59,3 @@ class CountLabel(AttrLabel): class LengthLabel(AttrLabel): def __init__(self): AttrLabel.__init__(self, "lenstr", "Length:") - -class LengthLabel2(AttrLabel): - def __init__(self): - AttrLabel.__init__(self, "lenstr", "/")