* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
+#include "config.h"
+#ifdef VIK_CONFIG_GEOCACHES
#include <string.h>
#include "viking.h"
} datasource_gc_widgets_t;
-gpointer datasource_gc_add_widgets ( GtkWidget *dialog, VikViewport *vvp );
+static gpointer datasource_gc_init ( );
+static void datasource_gc_add_setup_widgets ( GtkWidget *dialog, VikViewport *vvp, gpointer user_data );
static void datasource_gc_get_cmd_string ( datasource_gc_widgets_t *widgets, gchar **cmd, gchar **input_type );
-static void datasource_gc_first_cleanup ( gpointer data );
+static void datasource_gc_cleanup ( gpointer data );
+static gchar *datasource_gc_check_existence ();
VikDataSourceInterface vik_datasource_gc_interface = {
- "Acquire from gc",
+ "Download Geocaches",
+ "Geocaching.com Caches",
VIK_DATASOURCE_SHELL_CMD,
VIK_DATASOURCE_ADDTOLAYER,
- (VikDataSourceAddWidgetsFunc) datasource_gc_add_widgets,
+ (VikDataSourceInitFunc) datasource_gc_init,
+ (VikDataSourceCheckExistenceFunc) datasource_gc_check_existence,
+ (VikDataSourceAddSetupWidgetsFunc) datasource_gc_add_setup_widgets,
(VikDataSourceGetCmdStringFunc) datasource_gc_get_cmd_string,
- (VikDataSourceFirstCleanupFunc) datasource_gc_first_cleanup,
(VikDataSourceProgressFunc) NULL,
(VikDataSourceAddProgressWidgetsFunc) NULL,
- (VikDataSourceCleanupFunc) NULL
+ (VikDataSourceCleanupFunc) datasource_gc_cleanup
};
-
-gpointer datasource_gc_add_widgets ( GtkWidget *dialog, VikViewport *vvp )
+static gpointer datasource_gc_init ( )
{
datasource_gc_widgets_t *widgets = g_malloc(sizeof(*widgets));
+ return widgets;
+}
+
+static gchar *datasource_gc_check_existence ()
+{
+ gchar *gcget_location = g_find_program_in_path("gcget");
+ if ( gcget_location ) {
+ g_free(gcget_location);
+ return NULL;
+ }
+ return g_strdup("Can't find gcget in path! Check that you have installed gcget correctly.");
+}
+
+static void datasource_gc_add_setup_widgets ( GtkWidget *dialog, VikViewport *vvp, gpointer user_data )
+{
+ datasource_gc_widgets_t *widgets = (datasource_gc_widgets_t *)user_data;
GtkWidget *num_label, *center_label;
struct LatLon ll;
gchar *s_ll;
gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), center_label, FALSE, FALSE, 5 );
gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), widgets->center_entry, FALSE, FALSE, 5 );
gtk_widget_show_all(dialog);
- return widgets;
}
static void datasource_gc_get_cmd_string ( datasource_gc_widgets_t *widgets, gchar **cmd, gchar **input_type )
{
- /* TODO: special characters handling!!! */
/* TODO: we don't actually need GPSBabel... :-) */
- *cmd = g_strdup_printf( "gcget %s %d", gtk_entry_get_text ( GTK_ENTRY(widgets->center_entry) ), gtk_spin_button_get_value_as_int ( GTK_SPIN_BUTTON(widgets->num_spin) ) );
+ gchar *safe_string = g_shell_quote ( gtk_entry_get_text ( GTK_ENTRY(widgets->center_entry) ) );
+ *cmd = g_strdup_printf( "gcget %s %d", safe_string, gtk_spin_button_get_value_as_int ( GTK_SPIN_BUTTON(widgets->num_spin) ) );
*input_type = g_strdup("geo");
+ g_free ( safe_string );
}
-static void datasource_gc_first_cleanup ( gpointer data )
+static void datasource_gc_cleanup ( gpointer data )
{
g_free ( data );
}
+#endif /* VIK_CONFIG_GEOCACHES */