*
* Created by Quy Tonthat <qtonthat@gmail.com>
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
#include <stdlib.h>
+#include <stdio.h>
#include <string.h>
+#include <glib.h>
+#include <glib/gstdio.h>
#include <glib/gprintf.h>
+#include <glib/gi18n.h>
#include "viking.h"
#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, a_check_map_file };
+
+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)
{
gboolean ret = TRUE;
dialog = gtk_dialog_new_with_buttons ( "", GTK_WINDOW(vw), 0, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL );
- gtk_window_set_title(GTK_WINDOW(dialog), "Search");
+ gtk_window_set_title(GTK_WINDOW(dialog), _("Search"));
- GtkWidget *search_label = gtk_label_new("I don't know that place. Do you want another search?");
+ GtkWidget *search_label = gtk_label_new(_("I don't know that place. Do you want another search?"));
gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), search_label, FALSE, FALSE, 5 );
gtk_widget_show_all(dialog);
GtkWidget *dialog = NULL;
dialog = gtk_dialog_new_with_buttons ( "", GTK_WINDOW(vw), 0, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL );
- gtk_window_set_title(GTK_WINDOW(dialog), "Search");
+ gtk_window_set_title(GTK_WINDOW(dialog), _("Search"));
- GtkWidget *search_label = gtk_label_new("Enter address or place name:");
+ GtkWidget *search_label = gtk_label_new(_("Enter address or place name:"));
GtkWidget *search_entry = gtk_entry_new();
if (last_search_str)
gtk_entry_set_text(GTK_ENTRY(search_entry), last_search_str);
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) {
- g_critical("couldn't map temp file\n");
+ g_critical(_("couldn't map temp file"));
exit(1);
}
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) {
- g_critical("couldn't open temp file\n");
+ if ((tmp_fd = g_file_open_tmp ("vikgsearch.XXXXXX", &tmpname, NULL)) == -1) {
+ g_critical(_("couldn't open temp file"));
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);
+ tmp_file = NULL;
ret = -1;
goto done;
}
fclose(tmp_file);
+ tmp_file = NULL;
if (!parse_file_for_latlon(tmpname, &ll)) {
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);
- remove(tmpname);
+ g_remove(tmpname);
g_free(tmpname);
return ret;
}