ladish/ladish_control

143 lines
4.1 KiB
Plaintext
Raw Normal View History

#!/usr/bin/env python
# LASH
#
# Copyright (C) 2008 Nedko Arnaudov <nedko@arnaudov.name>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
control_interface_name = 'org.ladish.Control'
service_name = 'org.ladish'
import sys
import os
import time
from traceback import print_exc
import dbus
def bool_convert(str_value):
if str_value.lower() == "false":
return False
if str_value.lower() == "off":
return False
if str_value.lower() == "no":
return False
if str_value == "0":
return False
if str_value.lower() == "(null)":
return False
return bool(str_value)
def dbus_type_to_python_type(dbus_value):
if type(dbus_value) == dbus.Boolean:
return bool(dbus_value)
if type(dbus_value) == dbus.Int32 or type(dbus_value) == dbus.UInt32:
return int(dbus_value)
return dbus_value
def dbus_type_to_type_string(dbus_value):
if type(dbus_value) == dbus.Boolean:
return "bool"
if type(dbus_value) == dbus.Int32:
return "sint"
if type(dbus_value) == dbus.UInt32:
return "uint"
if type(dbus_value) == dbus.Byte:
return "char"
if type(dbus_value) == dbus.String:
return "str"
return None # throw exception here?
def dbus_typesig_to_type_string(type_char):
type_char = str(type_char)
if type_char == 'i':
return "sint"
if type_char == 'u':
return "uint"
if type_char == 'y':
return "char"
if type_char == 's':
return "str"
if type_char == 'b':
return "bool"
print 'shit'
return None # throw exception here?
def main():
if len(sys.argv) == 1:
print "Usage: %s [command] [command] ..." % os.path.basename(sys.argv[0])
print "Commands:"
2009-07-31 01:44:51 +03:00
print " exit - exit ladish dbus service"
print " studios - list studios"
print " apps - list apps"
print " load <studioname> - load studio"
sys.exit(0)
bus = dbus.SessionBus()
lash = None
# check arguments
index = 1
while index < len(sys.argv):
arg = sys.argv[index]
index += 1
try:
if not lash:
lash = bus.get_object(service_name, "/")
control_iface = dbus.Interface(lash, control_interface_name)
if arg == "exit":
print "--- exit"
control_iface.Exit()
time.sleep(1)
# we have deactivated the object and we need to get new connection if there are more commands
lash = None
control_iface = None
2009-07-31 01:44:51 +03:00
elif arg == 'studios':
print "--- studio list"
for studio in control_iface.GetStudioList():
print studio
elif arg == 'apps':
print "--- app list"
for app in control_iface.GetApplicationList():
print app
elif arg == 'load':
if index >= len(sys.argv):
2009-07-31 01:44:51 +03:00
print "load studio command requires studio name argument"
sys.exit()
arg = sys.argv[index]
index += 1
open_options = {}
#open_options["option1"] = "asd"
#open_options["option2"] = True
2009-07-31 01:44:51 +03:00
control_iface.LoadStudio(arg, open_options)
else:
print "Unknown command '%s'" % arg
except dbus.DBusException, e:
print "DBus exception: %s" % str(e)
if __name__ == '__main__':
main()