Add:binding_dbus:Avoid some Polymorphisms
authormartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>
Tue, 3 Nov 2009 09:07:04 +0000 (09:07 +0000)
committermartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>
Tue, 3 Nov 2009 09:07:04 +0000 (09:07 +0000)
git-svn-id: https://navit.svn.sourceforge.net/svnroot/navit/trunk@2719 ffa7fe5e-494d-0410-b361-a75ebd5db220

navit/navit/binding/dbus/binding_dbus.c
navit/navit/binding/dbus/test.py

index fd642f2..e9477cd 100644 (file)
@@ -290,7 +290,6 @@ request_config_attr_iter(DBusConnection *connection, DBusMessage *message)
 {
        DBusMessage *reply;
        struct attr_iter *attr_iter=config_attr_iter_new();
-       dbg(0,"iter=%p\n", attr_iter);
        char *opath=object_new("config_attr_iter",attr_iter);
        reply = dbus_message_new_method_return(message);
        dbus_message_append_args(reply, DBUS_TYPE_OBJECT_PATH, &opath, DBUS_TYPE_INVALID);
@@ -625,6 +624,35 @@ request_navit_get_attr(DBusConnection *connection, DBusMessage *message)
        return empty_reply(connection, message);
 }
 
+static DBusHandlerResult
+request_navit_attr_iter(DBusConnection *connection, DBusMessage *message)
+{
+       DBusMessage *reply;
+       struct attr_iter *attr_iter=navit_attr_iter_new();
+       char *opath=object_new("navit_attr_iter",attr_iter);
+       reply = dbus_message_new_method_return(message);
+       dbus_message_append_args(reply, DBUS_TYPE_OBJECT_PATH, &opath, DBUS_TYPE_INVALID);
+       dbus_connection_send (connection, reply, NULL);
+       dbus_message_unref (reply);
+
+       return DBUS_HANDLER_RESULT_HANDLED;
+}
+
+static DBusHandlerResult
+request_navit_attr_iter_destroy(DBusConnection *connection, DBusMessage *message)
+{
+       struct attr_iter *attr_iter;
+       DBusMessageIter iter;
+
+       dbus_message_iter_init(message, &iter);
+       attr_iter=object_get_from_message_arg(&iter, "navit_attr_iter");
+       if (! attr_iter)
+               return dbus_error_invalid_object_path_parameter(connection, message);
+       navit_attr_iter_destroy(attr_iter);
+
+       return empty_reply(connection, message);
+}
+
 static int
 decode_attr(DBusMessage *message, struct attr *attr)
 {
@@ -903,7 +931,8 @@ struct dbus_method {
 } dbus_methods[] = {
        {"",        "attr_iter",           "",        "",                                        "o",  "attr_iter",  request_config_attr_iter},
        {"",        "attr_iter_destroy",   "o",       "attr_iter",                               "",   "",      request_config_attr_iter_destroy},
-       {"",        "get_attr",            "so",      "attrname,attr_iter",                      "sv", "attrname,value",request_config_get_attr},
+       {"",        "get_attr",            "s",       "attrname,attr_iter",                      "sv", "attrname,value",request_config_get_attr},
+       {"",        "get_attr_wi",         "so",      "attrname,attr_iter",                      "sv", "attrname,value",request_config_get_attr},
        {".navit",  "draw",                "",        "",                                        "",   "",      request_navit_draw},
        {".navit",  "add_message",         "s",       "message",                                 "",   "",      request_navit_add_message},
        {".navit",  "set_center",          "s",       "(coordinates)",                           "",   "",      request_navit_set_center},
@@ -914,7 +943,10 @@ struct dbus_method {
        {".navit",  "zoom",                "i(ii)",   "factor(pixel_x,pixel_y)",                 "",   "",      request_navit_zoom},
        {".navit",  "zoom",                "i",       "factor",                                  "",   "",      request_navit_zoom},
        {".navit",  "resize",              "ii",      "upperleft,lowerright",                    "",   "",      request_navit_resize},
-       {".navit",  "get_attr",            "s",       "attribute",                               "v",  "value", request_navit_get_attr},
+       {".navit",  "attr_iter",           "",        "",                                        "o",  "attr_iter",  request_navit_attr_iter},
+       {".navit",  "attr_iter_destroy",   "o",       "attr_iter",                               "",   "",      request_navit_attr_iter_destroy},
+       {".navit",  "get_attr",            "s",       "attribute",                               "sv",  "attrname,value", request_navit_get_attr},
+       {".navit",  "get_attr_wi",         "so",      "attribute",                               "sv",  "attrname,value", request_navit_get_attr},
        {".navit",  "set_attr",            "sv",      "attribute,value",                         "",   "",      request_navit_set_attr},
        {".navit",  "set_position",        "s",       "(coordinates)",                           "",   "",      request_navit_set_position},
        {".navit",  "set_position",        "(is)",    "(projection,coordinated)",                "",   "",      request_navit_set_position},
index 7d9bd1c..740f000 100755 (executable)
@@ -5,7 +5,7 @@ conn = bus.get_object('org.navit_project.navit',
                        '/org/navit_project/navit')
 iface = dbus.Interface(conn, dbus_interface='org.navit_project.navit');
 iter=iface.attr_iter();
-navit=bus.get_object('org.navit_project.navit', conn.get_attr("navit",iter)[1]);
+navit=bus.get_object('org.navit_project.navit', conn.get_attr_wi("navit",iter)[1]);
 iface.attr_iter_destroy(iter);
 navit_iface = dbus.Interface(navit, dbus_interface='org.navit_project.navit.navit');
 navit_iface.set_center((1,0x138a4a,0x5d773f));