aboutsummaryrefslogtreecommitdiffstats
path: root/astro/foxtrotgps
diff options
context:
space:
mode:
authorGleb Smirnoff <glebius@FreeBSD.org>2015-05-22 16:41:09 +0800
committerGleb Smirnoff <glebius@FreeBSD.org>2015-05-22 16:41:09 +0800
commitc12a08e67df9df0f48a4c0e1326d80b4e19493c4 (patch)
treee2acfa8524f006775772ea0b6ee567d15c99ab9d /astro/foxtrotgps
parentb1769550df7c2ed418363132cf44050fdaad3779 (diff)
downloadfreebsd-ports-gnome-c12a08e67df9df0f48a4c0e1326d80b4e19493c4.tar.gz
freebsd-ports-gnome-c12a08e67df9df0f48a4c0e1326d80b4e19493c4.tar.zst
freebsd-ports-gnome-c12a08e67df9df0f48a4c0e1326d80b4e19493c4.zip
Provide patch from future version to fix yournavigation.org API.
PR: 200366 Approved by: Craig Whipp <crwhipp gmail.com> (maintainer)
Diffstat (limited to 'astro/foxtrotgps')
-rw-r--r--astro/foxtrotgps/Makefile1
-rw-r--r--astro/foxtrotgps/files/patch-src_tracks.c123
2 files changed, 124 insertions, 0 deletions
diff --git a/astro/foxtrotgps/Makefile b/astro/foxtrotgps/Makefile
index 47393ef9897b..289c494e2e0f 100644
--- a/astro/foxtrotgps/Makefile
+++ b/astro/foxtrotgps/Makefile
@@ -3,6 +3,7 @@
PORTNAME= foxtrotgps
PORTVERSION= 1.2.0
+PORTREVISION= 1
CATEGORIES= astro geography
MASTER_SITES= http://www.foxtrotgps.org/releases/
diff --git a/astro/foxtrotgps/files/patch-src_tracks.c b/astro/foxtrotgps/files/patch-src_tracks.c
new file mode 100644
index 000000000000..b31601124a4b
--- /dev/null
+++ b/astro/foxtrotgps/files/patch-src_tracks.c
@@ -0,0 +1,123 @@
+--- src/tracks.c.orig 2015-05-21 11:26:32 UTC
++++ src/tracks.c
+@@ -41,8 +41,10 @@ bbox_t get_track_bbox(GSList *track);
+ GSList * load_log_file_into_list(char *file);
+ GSList * load_gpx_file_into_list(char *file);
+ GSList * load_ols_XML_file_into_list(char *file);
++GSList * load_kml_XML_file_into_list(char *file);
+ GSList * parse_gpx_nodes(xmlNode *node);
+ GSList * parse_ols_XML_nodes(xmlNode *node);
++GSList * parse_kml_XML_nodes(xmlNode *node);
+
+ void * fetch_track_thread(void *ptr);
+ void * fetch_openrouteservice_track_thread(void *ptr);
+@@ -662,6 +664,30 @@ load_ols_XML_string_into_list(char *ols_
+ }
+
+ GSList *
++load_kml_XML_string_into_list(char *kml_string)
++{
++ GSList *list = NULL;
++ xmlDoc *doc = NULL;
++ xmlNode *root_element = NULL;
++
++ if(!kml_string) return NULL;
++
++ LIBXML_TEST_VERSION
++
++ doc = xmlReadMemory(kml_string, strlen(kml_string), "noname.xml", NULL, 0);
++
++ if (doc == NULL) {
++ fprintf (stderr, _("Failed to parse document\n"));
++ } else {
++ root_element = xmlDocGetRootElement(doc);
++ list = parse_kml_XML_nodes(root_element);
++ xmlFreeDoc(doc);
++ }
++
++ return list;
++}
++
++GSList *
+ parse_gpx_nodes(xmlNode *node)
+ {
+ xmlNode *cur_node = NULL;
+@@ -754,6 +780,60 @@ parse_ols_XML_nodes(xmlNode *node)
+ return list;
+ }
+
++GSList *
++parse_kml_XML_nodes(xmlNode *node)
++{
++ xmlNode *cur_node = NULL;
++ GSList *list = NULL;
++
++ for (cur_node = node; cur_node; cur_node = cur_node->next)
++ {
++ if (xmlStrEqual(cur_node->name, BAD_CAST "Placemark"))
++ {
++ xmlNode *geometry_node = cur_node->children;
++ while (geometry_node != NULL)
++ {
++ if (xmlStrEqual(geometry_node->name, BAD_CAST "LineString"))
++ {
++ xmlNode *inner_cur_node = geometry_node->children;
++ while (inner_cur_node != NULL)
++ {
++ if (xmlStrEqual(inner_cur_node->name, BAD_CAST "coordinates")) {
++ char** lonlatlist;
++ lonlatlist = g_strsplit(xmlNodeGetContent(inner_cur_node), "\n", -1);
++ for(unsigned int i = 0; lonlatlist[i]; i++){
++ g_strchug(lonlatlist[i]);
++ g_strchomp(lonlatlist[i]);
++ char** lonlat = g_strsplit(lonlatlist[i], ",", 2);
++ if (lonlat[0])
++ {
++ double lat, lon;
++ lon = atof(lonlat[0]);
++ if (lonlat[1])
++ {
++ trackpoint_t *tp = g_new0(trackpoint_t,1);
++ lat = atof(lonlat[1]);
++ tp->lat = deg2rad(lat);
++ tp->lon = deg2rad(lon);
++ list = g_slist_append(list, tp);
++ }
++ }
++ g_strfreev (lonlat);
++ }
++ g_strfreev (lonlatlist);
++ }
++ inner_cur_node = inner_cur_node->next;
++ }
++ }
++ geometry_node = geometry_node->next;
++ }
++ }
++ list = g_slist_concat(list, parse_kml_XML_nodes(cur_node->children));
++ }
++
++ return list;
++}
++
+
+ void
+ fetch_track(GtkWidget *widget, char *service, char *start, char *end)
+@@ -796,7 +876,7 @@ void fetch_yournavigation_track(GtkWidge
+ dialog10 = widget;
+ printf("%s(): %s, %s\n",__PRETTY_FUNCTION__, start, end);
+
+- url = g_strdup_printf("http://www.yournavigation.org/api/dev/gosmore.php?format=gpx&flat=%s&flon=%s&tlat=%s&tlon=%s&v=motorcar&fast=1&layer=mapnik",startlatstr, startlonstr, endlatstr, endlonstr);
++ url = g_strdup_printf("http://www.yournavigation.org/api/1.0/gosmore.php?format=kml&flat=%s&flon=%s&tlat=%s&tlon=%s&v=motorcar&fast=1&layer=mapnik",startlatstr, startlonstr, endlatstr, endlonstr);
+ if (!g_thread_create(&fetch_track_thread, (void *)url, FALSE, NULL) != 0)
+ g_warning("### can't create route thread\n");
+ }
+@@ -1002,7 +1082,7 @@ fetch_track_thread(void *ptr)
+
+ printf("HTTP-GET: size: %d, statuscode %d \n", (int)reply->size, (int)reply->status_code);
+
+- loaded_track = load_gpx_string_into_list(reply->data);
++ loaded_track = load_kml_XML_string_into_list(reply->data);
+ process_fetched_track(reply, true);
+
+ return NULL;