]> git.sesse.net Git - vlc/blobdiff - extras/dbus-vlc.py
Add a module_Exists() function for Simple_Prefs. Don't use too much this function.
[vlc] / extras / dbus-vlc.py
index 23f8f24c098b61b89181df9ff641f3e924b0c6e2..673bbf43e15edf776f61f08f809c37d0d80c36fa 100755 (executable)
 #  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"