| @@ -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() | |||