#include "curl_download.h"
#define GOOGLE_SEARCH_URL_FMT "http://maps.google.com/maps?q=%s&output=js"
-#define GOOGLE_SEARCH_PATTERN_1 "{center: {lat: "
-#define GOOGLE_SEARCH_PATTERN_2 ",lng: "
+#define GOOGLE_SEARCH_PATTERN_1 "{center:{lat:"
+#define GOOGLE_SEARCH_PATTERN_2 ",lng:"
+#define GOOGLE_SEARCH_NOT_FOUND "around this map area did not match any locations"
static gchar *last_search_str = NULL;
+static VikCoord *last_coord = NULL;
+static gchar *last_successful_search_str = NULL;
+
+static DownloadOptions googlesearch_options = { "http://maps.google.com/", 0 };
+
+gchar * a_googlesearch_get_search_string_for_this_place(VikWindow *vw)
+{
+ if (!last_coord)
+ return NULL;
+
+ VikViewport *vvp = vik_window_viewport(vw);
+ const VikCoord *cur_center = vik_viewport_get_center(vvp);
+ if (vik_coord_equals(cur_center, last_coord)) {
+ return(last_successful_search_str);
+ }
+ else
+ return NULL;
+}
static gboolean prompt_try_again(VikWindow *vw)
{
gchar *search_str = g_strdup ( gtk_entry_get_text ( GTK_ENTRY(search_entry) ) );
- fprintf(stderr, "DEBUG: search_str=[%s]\n", search_str);
-
gtk_widget_destroy(dialog);
if (search_str[0] != '\0') {
gchar lat_buf[32], lon_buf[32];
gchar *s;
- fprintf(stderr, "DEBUG: %s() file_name=%s\n", __PRETTY_FUNCTION__, file_name);
-
lat_buf[0] = lon_buf[0] = '\0';
if ((mf = g_mapped_file_new(file_name, FALSE, NULL)) == NULL) {
len = g_mapped_file_get_length(mf);
text = g_mapped_file_get_contents(mf);
+ if (g_strstr_len(text, len, GOOGLE_SEARCH_NOT_FOUND) != NULL) {
+ found = FALSE;
+ goto done;
+ }
+
if ((pat = g_strstr_len(text, len, GOOGLE_SEARCH_PATTERN_1)) == NULL) {
- fprintf(stderr, "DEBUG: none matched\n");
found = FALSE;
goto done;
}
- fprintf(stderr, "DEBUG: matched PAT_1\n");
pat += strlen(GOOGLE_SEARCH_PATTERN_1);
s = lat_buf;
if (*pat == '-')
found = FALSE;
goto done;
}
- fprintf(stderr, "DEBUG: matched PAT_2\n");
pat += strlen(GOOGLE_SEARCH_PATTERN_2);
s = lon_buf;
ll->lat = g_ascii_strtod(lat_buf, NULL);
ll->lon = g_ascii_strtod(lon_buf, NULL);
- fprintf(stderr, "lat=%f lon=%f\n", ll->lat, ll->lon);
-
done:
g_mapped_file_free(mf);
- fprintf(stderr, "DEBUG: lat=[%s] Lon=[%s]\n", lat_buf, lon_buf);
return (found);
}
escaped_srch_str = uri_escape(srch_str);
- if ((tmp_fd = g_file_open_tmp (NULL, &tmpname, NULL)) == -1) {
+ if ((tmp_fd = g_file_open_tmp ("vikgsearch.XXXXXX", &tmpname, NULL)) == -1) {
g_critical("couldn't open temp file\n");
exit(1);
}
//uri = g_strdup_printf(GOOGLE_SEARCH_URL_FMT, srch_str);
uri = g_strdup_printf(GOOGLE_SEARCH_URL_FMT, escaped_srch_str);
- fprintf(stderr, "DEBUG: search [%s]\n", uri);
-
/* TODO: curl may not be available */
- if (curl_download_uri(uri, tmp_file)) { /* error */
- fprintf(stderr, "DEBUG: download error\n");
+ if (curl_download_uri(uri, tmp_file, &googlesearch_options)) { /* error */
fclose(tmp_file);
ret = -1;
goto done;
vik_coord_load_from_latlon ( coord, vik_viewport_get_coord_mode(vvp), &ll );
+ if (last_coord)
+ g_free(last_coord);
+ last_coord = g_malloc(sizeof(VikCoord));
+ *last_coord = *coord;
+ if (last_successful_search_str)
+ g_free(last_successful_search_str);
+ last_successful_search_str = g_strdup(last_search_str);
+
done:
g_free(escaped_srch_str);
g_free(uri);