#include <stdio.h>
#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
#include <errno.h>
#include <curl/curl.h>
#include "osm-traces.h"
#include "gpx.h"
#include "background.h"
+#include "preferences.h"
+
+/* params will be osm_traces.username, osm_traces.password */
+/* we have to make sure these don't collide. */
+#define VIKING_OSM_TRACES_PARAMS_GROUP_KEY "osm_traces"
+#define VIKING_OSM_TRACES_PARAMS_NAMESPACE "osm_traces."
/**
* Login to use for OSM uploading.
gchar *track_name;
} OsmTracesInfo;
+static VikLayerParam prefs[] = {
+ { VIKING_OSM_TRACES_PARAMS_NAMESPACE "username", VIK_LAYER_PARAM_STRING, VIK_LAYER_GROUP_NONE, N_("OSM username:"), VIK_LAYER_WIDGET_ENTRY },
+ { VIKING_OSM_TRACES_PARAMS_NAMESPACE "password", VIK_LAYER_PARAM_STRING, VIK_LAYER_GROUP_NONE, N_("OSM password:"), VIK_LAYER_WIDGET_PASSWORD },
+};
+
/**
* Free an OsmTracesInfo struct.
*/
return user_pass;
}
+/* initialisation */
+void osm_traces_init () {
+ /* Preferences */
+ a_preferences_register_group ( VIKING_OSM_TRACES_PARAMS_GROUP_KEY, "OpenStreetMap traces" );
+
+ VikLayerParamData tmp;
+ tmp.s = "";
+ a_preferences_register(prefs, tmp, VIKING_OSM_TRACES_PARAMS_GROUP_KEY);
+ tmp.s = "";
+ a_preferences_register(prefs+1, tmp, VIKING_OSM_TRACES_PARAMS_GROUP_KEY);
+
+}
+
/*
* Upload a file
*/
curl_easy_setopt(curl, CURLOPT_USERPWD, user_pass);
curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, &curl_error_buffer);
+ if (vik_verbose)
+ curl_easy_setopt ( curl, CURLOPT_VERBOSE, 1 );
/* Execute request */
res = curl_easy_perform(curl);
*/
static void osm_traces_upload_thread ( OsmTracesInfo *oti, gpointer threaddata )
{
+ /* Due to OSM limits, we have to enforce ele and time fields */
+ static GpxWritingOptions options = { TRUE, TRUE };
FILE *file = NULL;
gchar *filename = NULL;
int fd;
{
/* Upload only the selected track */
VikTrack *track = vik_trw_layer_get_track(oti->vtl, oti->track_name);
- a_gpx_write_track_file(oti->track_name, track, file);
+ a_gpx_write_track_file_options(&options, oti->track_name, track, file);
}
else
+ {
/* Upload the whole VikTrwLayer */
- a_gpx_write_file(oti->vtl, file);
+ a_gpx_write_file_options(&options, oti->vtl, file);
+ }
/* We can close the file */
/* This also close the associated fd */
fclose(file);
+ file = NULL;
/* finally, upload it */
osm_traces_upload_file(user, password, filename,
GTK_RESPONSE_ACCEPT,
NULL);
+ const gchar *default_user = get_default_user();
+ const gchar *pref_user = a_preferences_get(VIKING_OSM_TRACES_PARAMS_NAMESPACE "username")->s;
+ const gchar *pref_password = a_preferences_get(VIKING_OSM_TRACES_PARAMS_NAMESPACE "password")->s;
const gchar *name = NULL;
GtkWidget *user_label, *user_entry;
GtkWidget *password_label, *password_entry;
user_label = gtk_label_new(_("Email:"));
user_entry = gtk_entry_new();
- if (user != NULL)
+ if (user != NULL && user[0] != '\0')
gtk_entry_set_text(GTK_ENTRY(user_entry), user);
- else
- {
- const gchar *default_user = get_default_user();
- if (default_user != NULL)
- gtk_entry_set_text(GTK_ENTRY(user_entry), default_user);
- }
+ else if (pref_user != NULL && pref_user[0] != '\0')
+ gtk_entry_set_text(GTK_ENTRY(user_entry), pref_user);
+ else if (default_user != NULL)
+ gtk_entry_set_text(GTK_ENTRY(user_entry), default_user);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dia)->vbox), user_label, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dia)->vbox), user_entry, FALSE, FALSE, 0);
gtk_widget_show_all ( user_label );
password_label = gtk_label_new(_("Password:"));
password_entry = gtk_entry_new();
- if (password != NULL)
+ if (password != NULL && password[0] != '\0')
gtk_entry_set_text(GTK_ENTRY(password_entry), password);
+ else if (pref_password != NULL)
+ gtk_entry_set_text(GTK_ENTRY(password_entry), pref_password);
/* This is a password -> invisible */
gtk_entry_set_visibility(GTK_ENTRY(password_entry), FALSE);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dia)->vbox), password_label, FALSE, FALSE, 0);