X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=extras%2Fdbus-vlc.py;h=673bbf43e15edf776f61f08f809c37d0d80c36fa;hb=ec49740468c885f4c3dfc76754088fbf68bb502b;hp=23f8f24c098b61b89181df9ff641f3e924b0c6e2;hpb=8808f2f00382381aee410f4b6af310920fe3f217;p=vlc diff --git a/extras/dbus-vlc.py b/extras/dbus-vlc.py index 23f8f24c09..673bbf43e1 100755 --- a/extras/dbus-vlc.py +++ b/extras/dbus-vlc.py @@ -20,72 +20,96 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. # +# +# NOTE: this controller is a SAMPLE, and thus doesn't implement all the D-Bus Media Player specification. http://wiki.videolan.org/index.php/DBus-spec +# This is an unfinished document (on the 12/06/2006) and has been designed to be as general as possible. +# So don't expect that much from this, but basic capabilities should work out of the box (Play/Pause/Next/Add) +# +# Also notice it has been designed first for a previous specificaiton, and thus some code may not work/be disabled +# import dbus import dbus.glib import gtk import gtk.glade import egg.trayicon +import gobject import os global position +global timer +#global playing def itemchange_handler(item): + gobject.timeout_add( 2000, timeset) l_item.set_text(item) bus = dbus.SessionBus() -remote_object = bus.get_object("org.videolan.vlc", "/org/videolan/vlc") -interface = dbus.Interface(remote_object, "org.videolan.vlc") +player_o = bus.get_object("org.freedesktop.MediaPlayer", "/Player") +tracklist_o = bus.get_object("org.freedesktop.MediaPlayer", "/TrackList") + +tracklist = dbus.Interface(tracklist_o, "org.freedesktop.MediaPlayer") +player = dbus.Interface(player_o, "org.freedesktop.MediaPlayer") try: - remote_object.connect_to_signal("ItemChange", itemchange_handler, dbus_interface="org.videolan.vlc") + player_o.connect_to_signal("TrackChange", itemchange_handler, dbus_interface="org.freedesktop.MediaPlayer") except: True -def AddMRL(widget): +def AddTrack(widget): mrl = e_mrl.get_text() if mrl != None and mrl != "": - interface.AddMRL(mrl, True) + tracklist.AddTrack(mrl, True) else: mrl = bt_file.get_filename() if mrl != None and mrl != "": - interface.AddMRL("directory://" + mrl, True) + tracklist.AddTrack("directory://" + mrl, True) def Next(widget): - interface.Next() + player.Next(reply_handler=(lambda *args: None), error_handler=(lambda *args: None)) update(0) def Prev(widget): - interface.Prev() + player.Prev(reply_handler=(lambda *args: None), error_handler=(lambda *args: None)) update(0) def Stop(widget): - interface.Stop() + player.Stop(reply_handler=(lambda *args: None), error_handler=(lambda *args: None)) update(0) def update(widget): - itemchange_handler(str(interface.GetPlayingItem())) - vol.set_value(interface.VolumeGet()) +# itemchange_handler(str(player.GetPlayingItem())) + vol.set_value(player.VolumeGet()) GetPlayStatus(0) def GetPlayStatus(widget): - status = str(interface.GetPlayStatus()) - if status == "playing": + global playing + status = str(player.GetStatus()) + if status == 0: img_bt_toggle.set_from_stock("gtk-media-pause", gtk.ICON_SIZE_SMALL_TOOLBAR) + playing = True else: img_bt_toggle.set_from_stock("gtk-media-play", gtk.ICON_SIZE_SMALL_TOOLBAR) + playing = False def Quit(widget): - interface.Quit() + player.Quit(reply_handler=(lambda *args: None), error_handler=(lambda *args: None)) l_item.set_text("") -def TogglePause(widget): - if interface.TogglePause() == True: - img_bt_toggle.set_from_stock(gtk.STOCK_MEDIA_PAUSE, gtk.ICON_SIZE_SMALL_TOOLBAR) - else: - img_bt_toggle.set_from_stock(gtk.STOCK_MEDIA_PLAY, gtk.ICON_SIZE_SMALL_TOOLBAR) +def Pause(widget): + player.Pause() +# img_bt_toggle.set_from_stock(gtk.STOCK_MEDIA_PAUSE, gtk.ICON_SIZE_SMALL_TOOLBAR) +# img_bt_toggle.set_from_stock(gtk.STOCK_MEDIA_PLAY, gtk.ICON_SIZE_SMALL_TOOLBAR) update(0) -def volchange(widget): - interface.VolumeSet(vol.get_value_as_int()) +def volchange(widget, data): + player.VolumeSet(vol.get_value_as_int(), reply_handler=(lambda *args: None), error_handler=(lambda *args: None)) + +def timechange(widget, x=None, y=None): + player.PositionSet(time_s.get_value(), reply_handler=(lambda *args: None), error_handler=(lambda *args: None)) + +def timeset(): +# global playing + time_s.set_value(player.PositionGet()) +# return playing def expander(widget): if exp.get_expanded() == False: @@ -138,6 +162,8 @@ menu = xml.get_widget('menu1') menuitem = xml.get_widget('menuquit') vlcicon = xml.get_widget('eventicon') vol = xml.get_widget('vol') +time_s = xml.get_widget('time_s') +time_l = xml.get_widget('time_l') window.connect('delete_event', delete_event) window.connect('destroy', destroy) @@ -153,18 +179,15 @@ eventbox.add(image) image.set_from_icon_name("vlc", gtk.ICON_SIZE_MENU) tray.show_all() -def fuck(): - return - def icon_clicked(widget, event): update(0) -menu.attach_to_widget(eventbox, fuck) +menu.attach_to_widget(eventbox,None) bt_close.connect('clicked', destroy) bt_quit.connect('clicked', Quit) -bt_mrl.connect('clicked', AddMRL) -bt_toggle.connect('clicked', TogglePause) +bt_mrl.connect('clicked', AddTrack) +bt_toggle.connect('clicked', Pause) bt_next.connect('clicked', Next) bt_prev.connect('clicked', Prev) bt_stop.connect('clicked', Stop) @@ -172,7 +195,12 @@ exp.connect('activate', expander) menuitem.connect('activate', destroy) vlcicon.set_events(gtk.gdk.BUTTON_PRESS_MASK) vlcicon.connect('button_press_event', icon_clicked) -vol.connect('value-changed', volchange) +vol.connect('change-value', volchange) +vol.connect('scroll-event', volchange) +time_s.connect('adjust-bounds', timechange) + +time_s.set_update_policy(gtk.UPDATE_DISCONTINUOUS) +gobject.timeout_add( 2000, timeset) library = "/media/mp3"