diff --git a/python/sessionmanager.py b/python/sessionmanager.py index 22c3147..19c1e91 100755 --- a/python/sessionmanager.py +++ b/python/sessionmanager.py @@ -7,6 +7,14 @@ from optparse import OptionParser from ConfigParser import SafeConfigParser import os +try: + import dbus.service + import gobject + have_dbus = True +except: + have_dbus = False + + SESSION_PATH="/home/torbenh/jackSessions/" defaults = { "jackclientname": "sessionmanager", "sessiondir": "~/jackSessions" } @@ -30,11 +38,15 @@ class SessionManager( object ): print "Sessiondir %s does not exist. Creating it..."%self.sessiondir os.mkdir( self.sessiondir ) + def list_projects( self ): + files = os.listdir( self.sessiondir ) + files = filter( lambda x: os.path.isdir( os.path.join( self.sessiondir, x ) ), files ) + return files def load_session( self, name ): if not os.path.exists( self.sessiondir+name+"/session.xml" ): print "Session %s does not exist"%name - return + return -1 sd = state.SessionDom( self.sessiondir+name+"/session.xml" ) @@ -98,12 +110,13 @@ class SessionManager( object ): print "session restored..." + return 0 def save_session( self, name ): if os.path.exists( self.sessiondir+name ): print "session %s already exists" - return + return -1 os.mkdir( self.sessiondir+name ) g=self.cl.get_graph() notify = self.cl.session_save( self.sessiondir+name+"/" ) @@ -132,13 +145,43 @@ class SessionManager( object ): f.close() print sd.get_xml() + return 0 def exit( self ): self.cl.close() +if have_dbus: + class DbusSM( dbus.service.Object ): + def __init__( self, sm ): + self.sm = sm + dbus.service.Object.__init__( self, None, + "/org/jackaudio/sessionmanager", + dbus.service.BusName( "org.jackaudio.sessionmanager", bus=dbus.SessionBus() ) ) + @dbus.service.method( dbus_interface="org.jackaudio.sessionmanager", + in_signature="s", out_signature="i" ) + def save_as( self, name ): + return self.sm.save_session( name ) + + @dbus.service.method( dbus_interface="org.jackaudio.sessionmanager", + in_signature="s", out_signature="i" ) + def load( self, name ): + return self.sm.load_session( name ) + + @dbus.service.method( dbus_interface="org.jackaudio.sessionmanager", + in_signature="", out_signature="as" ) + def list( self ): + return self.sm.list_projects() + + @dbus.service.method( dbus_interface="org.jackaudio.sessionmanager", + in_signature="", out_signature="" ) + def daemon_quit( self ): + loop.quit() + oparser = OptionParser() -#oparser.add_option( "--dbus", action="store_true", dest="dbus", default=False, -# help="Use DBUS to issue commands to a running instance" ) +oparser.add_option( "--nodbus", action="store_false", dest="dbus", default=have_dbus, + help="Dont use DBUS to issue commands to a running instance" ) +oparser.add_option( "--daemon", action="store_true", dest="daemon", default=False, + help="Start in daemon mode, and listen for dbus commands" ) #oparser.add_option( "--save", action="store_true", dest="save", default=False, # help="Tell SessionManger to save." ) oparser.add_option( "--saveas", action="store", type="string", dest="saveas", @@ -147,6 +190,10 @@ oparser.add_option( "--saveas", action="store", type="string", dest="saveas", #oparser.add_option( "--quit", action="store_true", dest="quit", default=False, # help="Tell SessionManager to Save And Quit" ) +oparser.add_option( "--list", action="store_true", dest="list", default=False, + help="List Projects" ) +oparser.add_option( "--quitdaemon", action="store_true", dest="quitdaemon", default=False, + help="Tell SessionManager Daemon to Exit" ) #oparser.add_option( "--quitas", action="store", dest="quitas", type="string", # help="SaveAs And Quit" ) oparser.add_option( "--load", action="store", dest="load", type="string", @@ -154,14 +201,41 @@ oparser.add_option( "--load", action="store", dest="load", type="string", (opt,args) = oparser.parse_args() -sm = SessionManager() +if not opt.dbus: + sm = SessionManager() + if opt.saveas: + sm.save_session( opt.saveas ) + + if opt.load: + sm.load_session( opt.load ) + sm.exit() +else: + if opt.daemon: + sm = SessionManager() + from dbus.mainloop.glib import DBusGMainLoop + DBusGMainLoop(set_as_default=True) + dbsm = DbusSM( sm ) + loop = gobject.MainLoop() + loop.run() + + sm.exit() + else: + session_bus = dbus.SessionBus() + sm_proxy = session_bus.get_object( "org.jackaudio.sessionmanager", "/org/jackaudio/sessionmanager" ) + sm_iface = dbus.Interface( sm_proxy, "org.jackaudio.sessionmanager" ) + if opt.saveas: + sm_iface.save_as( opt.saveas ) + if opt.load: + sm_iface.load( opt.load ) + if opt.list: + projects = sm_iface.list() + for i in projects: + print i + + if opt.quitdaemon: + sm_iface.quit() -if opt.saveas: - sm.save_session( opt.saveas ) -if opt.load: - sm.load_session( opt.load ) -sm.exit()