X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/4c77d5e0aec3c7aab32965ca4e02abb17bb6108f..80471a6a905e00bf80ad04fa2061f88ea81f15cb:/src/osm-traces.c diff --git a/src/osm-traces.c b/src/osm-traces.c index 017f7be4..cd410f39 100644 --- a/src/osm-traces.c +++ b/src/osm-traces.c @@ -24,9 +24,6 @@ #include #include -#include -#include -#include #include #include @@ -42,6 +39,12 @@ #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. @@ -70,6 +73,11 @@ typedef struct _OsmTracesInfo { 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. */ @@ -122,6 +130,19 @@ static gchar *get_login() 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 */ @@ -181,6 +202,8 @@ void osm_traces_upload_file(const char *user, 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); @@ -214,6 +237,8 @@ void osm_traces_upload_file(const char *user, */ 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; @@ -239,15 +264,18 @@ static void osm_traces_upload_thread ( OsmTracesInfo *oti, gpointer threaddata ) { /* 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, @@ -277,6 +305,9 @@ static void osm_traces_upload_viktrwlayer ( VikTrwLayer *vtl, const gchar *track 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; @@ -290,14 +321,12 @@ static void osm_traces_upload_viktrwlayer ( VikTrwLayer *vtl, const gchar *track 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 ); @@ -308,8 +337,10 @@ static void osm_traces_upload_viktrwlayer ( VikTrwLayer *vtl, const gchar *track 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);