basic room management D-Bus interface

This commit is contained in:
Nedko Arnaudov 2010-01-10 18:26:34 +02:00
parent 0a60fa61a6
commit c460646179
2 changed files with 118 additions and 2 deletions

View File

@ -2,7 +2,7 @@
/*
* LADI Session Handler (ladish)
*
* Copyright (C) 2008, 2009 Nedko Arnaudov <nedko@arnaudov.name>
* Copyright (C) 2008, 2009, 2010 Nedko Arnaudov <nedko@arnaudov.name>
* Copyright (C) 2008 Juuso Alasuutari <juuso.alasuutari@gmail.com>
*
**************************************************************************
@ -280,6 +280,78 @@ fail:
return;
}
static void ladish_get_room_list(struct dbus_method_call * call_ptr)
{
DBusMessageIter iter, array_iter;
call_ptr->reply = dbus_message_new_method_return(call_ptr->message);
if (call_ptr->reply == NULL)
{
goto fail;
}
dbus_message_iter_init_append(call_ptr->reply, &iter);
if (!dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "(sa{sv})", &array_iter))
{
goto fail_unref;
}
if (!dbus_message_iter_close_container(&iter, &array_iter))
{
goto fail_unref;
}
return;
fail_unref:
dbus_message_unref(call_ptr->reply);
call_ptr->reply = NULL;
fail:
log_error("Ran out of memory trying to construct method return");
}
static void ladish_delete_room(struct dbus_method_call * call_ptr)
{
const char * name;
dbus_error_init(&g_dbus_error);
if (!dbus_message_get_args(call_ptr->message, &g_dbus_error, DBUS_TYPE_STRING, &name, DBUS_TYPE_INVALID))
{
lash_dbus_error(call_ptr, LASH_DBUS_ERROR_INVALID_ARGS, "Invalid arguments to method \"%s\": %s", call_ptr->method_name, g_dbus_error.message);
dbus_error_free(&g_dbus_error);
return;
}
log_info("Delete room request (%s)", name);
{
method_return_new_void(call_ptr);
}
}
static void ladish_new_room(struct dbus_method_call * call_ptr)
{
const char * name;
dbus_error_init(&g_dbus_error);
if (!dbus_message_get_args(call_ptr->message, &g_dbus_error, DBUS_TYPE_STRING, &name, DBUS_TYPE_INVALID))
{
lash_dbus_error(call_ptr, LASH_DBUS_ERROR_INVALID_ARGS, "Invalid arguments to method \"%s\": %s", call_ptr->method_name, g_dbus_error.message);
dbus_error_free(&g_dbus_error);
return;
}
log_info("New room request (%s)", name);
{
method_return_new_void(call_ptr);
}
}
static void ladish_exit(struct dbus_method_call * call_ptr)
{
log_info("Exit command received through D-Bus");
@ -334,6 +406,18 @@ METHOD_ARGS_BEGIN(GetApplicationList, "Get list of applications that can be laun
METHOD_ARG_DESCRIBE_OUT("applications", "a(sa{sv})", "List of applications, name and properties")
METHOD_ARGS_END
METHOD_ARGS_BEGIN(GetRoomList, "Get list of rooms")
METHOD_ARG_DESCRIBE_OUT("room_list", "a(sa{sv})", "List of rooms, name and properties")
METHOD_ARGS_END
METHOD_ARGS_BEGIN(NewRoom, "New room")
METHOD_ARG_DESCRIBE_IN("room_name", "s", "Name of the room")
METHOD_ARGS_END
METHOD_ARGS_BEGIN(DeleteRoom, "Delete room")
METHOD_ARG_DESCRIBE_IN("room_name", "s", "Name of room to delete")
METHOD_ARGS_END
METHOD_ARGS_BEGIN(Exit, "Tell ladish D-Bus service to exit")
METHOD_ARGS_END
@ -344,6 +428,9 @@ METHODS_BEGIN
METHOD_DESCRIBE(LoadStudio, ladish_load_studio)
METHOD_DESCRIBE(DeleteStudio, ladish_delete_studio)
METHOD_DESCRIBE(GetApplicationList, ladish_get_application_list)
METHOD_DESCRIBE(GetRoomList, ladish_get_room_list)
METHOD_DESCRIBE(NewRoom, ladish_new_room)
METHOD_DESCRIBE(DeleteRoom, ladish_delete_room)
METHOD_DESCRIBE(Exit, ladish_exit)
METHODS_END

View File

@ -2,7 +2,7 @@
#
# LADI Session Handler (ladish)
#
# Copyright (C) 2008, 2009 Nedko Arnaudov <nedko@arnaudov.name>
# Copyright (C) 2008, 2009, 2010 Nedko Arnaudov <nedko@arnaudov.name>
#
#*************************************************************************
# This file contains code of the commandline control app
@ -110,6 +110,9 @@ def main():
print(" srename <studioname> - rename studio")
print(" sstart - start studio")
print(" sstop - stop studio")
print(" rlist - list rooms")
print(" rdel <roomname> - delete room")
print(" rnew <roomname> - new room")
sys.exit(0)
bus = dbus.SessionBus()
@ -181,6 +184,32 @@ def main():
print("yes")
else:
print("no")
elif arg == 'rlist':
print("--- room list")
for studio in control_iface.GetRoomList():
name = studio[0]
mtime = studio[1]['Modification Time']
print('"%s" last modified on %s' % (name, time.ctime(mtime)))
elif arg == 'rnew':
print("--- room new")
if index >= len(sys.argv):
print("new room command requires room name argument")
sys.exit()
arg = sys.argv[index]
index += 1
control_iface.NewRoom(arg)
elif arg == 'rdel':
print("--- room delete")
if index >= len(sys.argv):
print("delete room command requires studio name argument")
sys.exit()
arg = sys.argv[index]
index += 1
control_iface.DeleteRoom(arg)
else:
if not studio_obj:
studio_obj = bus.get_object(service_name, studio_object_path)