*
* 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 "util.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 "not understand the location"
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);
- VikCoord *cur_center = vik_viewport_get_center(vvp);
+ const VikCoord *cur_center = vik_viewport_get_center(vvp);
if (vik_coord_equals(cur_center, last_coord)) {
return(last_successful_search_str);
}
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);
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) {
found = FALSE;
goto done;
}
-gchar *uri_escape(gchar *str)
-{
- gchar *esc_str = g_malloc(3*strlen(str));
- gchar *dst = esc_str;
- gchar *src;
-
- for (src = str; *src; src++) {
- if (*src == ' ')
- *dst++ = '+';
- else if (g_ascii_isalnum(*src))
- *dst++ = *src;
- else {
- g_sprintf(dst, "%%%02X", *src);
- dst += 3;
- }
- }
-
- return(esc_str);
-}
-
static int google_search_get_coord(VikWindow *vw, VikViewport *vvp, gchar *srch_str, VikCoord *coord)
{
FILE *tmp_file;
int ret = 0; /* OK */
struct LatLon ll;
+ g_debug("%s: raw search: %s", __FUNCTION__, srch_str);
+
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");
+ g_debug("%s: escaped search: %s", __FUNCTION__, escaped_srch_str);
+
+ 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, escaped_srch_str);
/* TODO: curl may not be available */
- if (curl_download_uri(uri, tmp_file)) { /* error */
- fprintf(stderr, "DEBUG: %s() download error\n", __PRETTY_FUNCTION__);
+ 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;
done:
g_free(escaped_srch_str);
g_free(uri);
- remove(tmpname);
+ g_remove(tmpname);
g_free(tmpname);
return ret;
}