Browse Source

add dbus stuff...

tags/0.120.1
Torben Hohn 16 years ago
parent
commit
66cc0643e5
1 changed files with 84 additions and 10 deletions
  1. +84
    -10
      python/sessionmanager.py

+ 84
- 10
python/sessionmanager.py View File

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



Loading…
Cancel
Save