summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Grandin <grandinp@gmail.com>2017-05-25 22:43:12 -0700
committerPierre Grandin <grandinp@gmail.com>2017-05-25 22:43:12 -0700
commitd9de140c3d3f02198e53c2d251db93cf3d10db27 (patch)
tree5840d0b5caa42c57e037b6cf3be1c4273cd11bf1
parent73fa9004e7b393aba7c47dfb2ddf8201f0173b4f (diff)
downloadnavit-dbus_bookmark.tar.gz
Added code to route to a bookmark via dbusdbus_bookmark
-rw-r--r--navit/binding/dbus/binding_dbus.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/navit/binding/dbus/binding_dbus.c b/navit/binding/dbus/binding_dbus.c
index ed239948f..92ef9f407 100644
--- a/navit/binding/dbus/binding_dbus.c
+++ b/navit/binding/dbus/binding_dbus.c
@@ -1436,6 +1436,59 @@ request_navit_route_export_gpx(DBusConnection *connection, DBusMessage *message)
}
/**
+ * @brief Look for the bookmark passed in parameters, and route to it if found
+ * @param connection The DBusConnection object through which a message arrived
+ * @param message The DBusMessage including the 'bookmark_name' parameter
+ * @returns An empty reply if everything went right, otherwise DBUS_HANDLER_RESULT_NOT_YET_HANDLED
+ */
+static DBusHandlerResult
+request_bookmarks_set_as_destination(DBusConnection *connection, DBusMessage *message)
+{
+ char * bookmark_name;
+ struct navit *navit;
+ DBusMessageIter iter;
+
+ struct attr attr,mattr;
+ struct navigation * nav = NULL;
+ struct item *item;
+ struct coord c;
+ struct pcoord pc;
+
+ navit = object_get_from_message(message, "navit");
+ if (! navit)
+ return dbus_error_invalid_object_path(connection, message);
+
+ pc.pro = transform_get_projection(navit_get_trans(navit));
+
+ dbus_message_iter_init(message, &iter);
+ dbus_message_iter_get_basic(&iter, &bookmark_name);
+
+ dbg(lvl_debug, "Looking for %s\n", bookmark_name);
+
+ if(navit_get_attr(navit, attr_bookmarks, &mattr, NULL) ) {
+ bookmarks_item_rewind(mattr.u.bookmarks);
+ while ((item=bookmarks_get_item(mattr.u.bookmarks))) {
+ dbg(lvl_debug, "trying to get label for %p\n", item);
+ if (!item_attr_get(item, attr_label, &attr)) continue;
+ dbg(lvl_debug,"full_label: %s\n", attr.u.str);
+ if (!strcmp(attr.u.str, bookmark_name)) {
+ dbg(lvl_debug, "Bookmark found, setting as destination\n");
+ if (item_coord_get(item, &c, 1)) {
+ pc.x = c.x;
+ pc.y = c.y;
+ dbg(lvl_debug, "coords : %i x %i\n", pc.x, pc.y);
+ navit_set_destination(navit, &pc, attr.u.str, 1);
+ break;
+ }
+ }
+ }
+ }
+
+ return empty_reply(connection, message);
+}
+
+
+/**
* @brief Exports the current route as a GeoJSON file
* @param connection The DBusConnection object through which a message arrived
* @param message The DBusMessage including the 'filename' parameter
@@ -1950,6 +2003,7 @@ struct dbus_method {
{"", "callback_new", "s", "signalname", "o", "callback",request_callback_new},
{"", "callback_attr_new", "ss", "signalname,attribute", "o", "callback",request_callback_new},
{"", "search_list_new", "o", "mapset", "o", "search",request_search_list_new},
+ {".bookmarks", "set_as_destination", "s", "bookmark_name", "", "", request_bookmarks_set_as_destination},
{".callback","destroy", "", "", "", "", request_callback_destroy},
{".graphics","get_data", "s", "type", "ay", "data", request_graphics_get_data},
{".graphics","set_attr", "sv", "attribute,value", "", "", request_graphics_set_attr},