# 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()))
+# 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, 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_label() == "More":
+ if exp.get_expanded() == False:
exp.set_label("Less")
else:
exp.set_label("More")
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)
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)
menuitem.connect('activate', destroy)
vlcicon.set_events(gtk.gdk.BUTTON_PRESS_MASK)
vlcicon.connect('button_press_event', icon_clicked)
+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"