-static void
-gps_init_spotter_network_frame(GritsPluginGPS *gps_state, GtkWidget *gbox)
-{
- /* Spotter network control box with enable checkbox, active
- * checkbox, and sn ID entry
- */
- GtkWidget *gps_sn_frame = gtk_frame_new ("SpotterNetwork Control");
- GtkWidget *sbox = gtk_vbox_new (FALSE, 2);
- gtk_container_add (GTK_CONTAINER (gps_sn_frame), sbox);
-
- /* create spotter network update checkbox */
- gps_state->ui.gps_sn_checkbox = gtk_check_button_new_with_label("Update SpotterNetwork");
- g_signal_connect (G_OBJECT (gps_state->ui.gps_sn_checkbox), "clicked",
- G_CALLBACK (on_gps_sn_clicked_event),
- (gpointer)gps_state);
- gtk_box_pack_start (GTK_BOX(sbox), gps_state->ui.gps_sn_checkbox,
- FALSE, FALSE, 0);
-
- /* Create spotter network active checkbox */
- gps_state->ui.gps_sn_active_checkbox = gtk_check_button_new_with_label("Active");
- g_signal_connect (G_OBJECT (gps_state->ui.gps_sn_active_checkbox),
- "clicked",
- G_CALLBACK (on_gps_sn_active_clicked_event),
- (gpointer)gps_state);
- gtk_box_pack_start (GTK_BOX(sbox),
- gps_state->ui.gps_sn_active_checkbox,
- FALSE, FALSE, 0);
-
- /* Create spotter network ID entry box and label */
- GtkWidget *ebox = gtk_hbox_new (FALSE, 2);
- GtkWidget *sn_label = gtk_label_new ("SpotterID:");
- gtk_box_pack_start (GTK_BOX(ebox), sn_label, FALSE, FALSE, 0);
- gps_state->ui.gps_sn_entry = gtk_entry_new();
- gtk_box_pack_start (GTK_BOX(ebox), gps_state->ui.gps_sn_entry,
- FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX(sbox), ebox, FALSE, FALSE, 0);
-
- gtk_box_pack_start (GTK_BOX(gbox), gps_sn_frame, FALSE, FALSE, 0);
-}
-
-static gboolean
-on_gps_sn_clicked_event (GtkWidget *widget, gpointer user_data)
-{
- GritsPluginGPS *gps_state = (GritsPluginGPS *)user_data;
- g_debug("on_gps_sn_clicked_event called");
-
- /* When pressed, log a position report to spotternetwork and
- * schedule another one for the future.
- */
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) {
- /* Change naumber of concurrent connections option? */
- assert(gps_state->ui.soup_session == NULL);
- gps_state->ui.soup_session = soup_session_async_new_with_options(
- SOUP_SESSION_USER_AGENT,
- "Mozilla/5.0 (Windows; U; Windows NT 5.1; "
- "en-US; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11",
- NULL);
-
- /* XXX don't log right away to give the user a chance to cancel */
- gps_update_sn(gps_state);
- gps_state->ui.gps_sn_timeout_id = g_timeout_add(
- GPS_SN_UPDATE_INTERVAL*1000,
- gps_update_sn, gps_state);
- } else {
- /* stop any pending timer events */
- g_source_remove(gps_state->ui.gps_sn_timeout_id);
- gps_state->ui.gps_sn_timeout_id = 0;
- soup_session_abort(gps_state->ui.soup_session);
- g_object_unref(gps_state->ui.soup_session);
- gps_state->ui.soup_session = NULL;
- }
-
- return FALSE;
-}
-
-static gboolean
-on_gps_sn_active_clicked_event (GtkWidget *widget, gpointer user_data)
-{
- GritsPluginGPS *gps_state = (GritsPluginGPS *)user_data;
-
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) {
- gps_state->ui.gps_sn_active = TRUE;
- } else {
- gps_state->ui.gps_sn_active = FALSE;
- }
-
- return FALSE;
-}
-
-/* Send position report to spotternetwork */
-static gboolean
-gps_update_sn(gpointer user_data)
-{
- GritsPluginGPS *gps_state = (GritsPluginGPS *)user_data;
- struct gps_data_t *gps_data = &gps_state->gps_data;
- SoupMessage *msg;
- char uri[256];
-
- /* Make sure gps data is valid */
- if (!gps_data_is_valid(gps_data)) {
- g_warning("Skipping SpotterNetwork update, GPS data is invalid!");
- GPS_STATUS(gps_state, "Skipped SpotterNetwork update, "
- "GPS data is invalid!");
- return TRUE;
- }
-
- /* Make sure SpotterNetwork ID is valid */
- if (gtk_entry_get_text_length(GTK_ENTRY(gps_state->ui.gps_sn_entry)) == 0) {
- g_warning("Skipping SpotterNetwork update, ID \"%s\" is invalid!",
- gtk_entry_get_text(GTK_ENTRY(gps_state->ui.gps_sn_entry)));
- GPS_STATUS(gps_state, "Skipping SpotterNetwork update, "
- "ID \"%s\" is invalid!",
- gtk_entry_get_text(GTK_ENTRY(gps_state->ui.gps_sn_entry)));
- return TRUE;
- }
-
- snprintf(uri, sizeof(uri),
- "%s?lat=%lf&lon=%lf&elev=%lf&dir=%lf&mph=%lf&gps=1&active=%d&ver=1&id=%s",
- GPS_SN_URI,
- gps_data->fix.latitude,
- gps_data->fix.longitude,
- gps_data->fix.altitude * METERS_TO_FEET,
- gps_data->fix.track,
- gps_data->fix.speed,
- gps_state->gps_sn_active == TRUE ? 1 : 0,
- gtk_entry_get_text(GTK_ENTRY(gps_state->ui.gps_sn_entry)));
-
- g_debug("gps_update_sn called uri: %s", uri);
-
- msg = soup_message_new (SOUP_METHOD_GET, uri);
- if (msg) {
- soup_session_queue_message (gps_state->ui.soup_session, msg,
- gps_sn_update_complete, gps_state);
- } else {
- g_warning("unable to create spotternetwork message");
- }
-
- /* reschedule next update */
- return TRUE;
-}
-
-static void
-gps_sn_update_complete (SoupSession *session, SoupMessage *msg, gpointer user_data)
-{
- if (SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) {
- g_debug("gps_sn_update_complete: %s",
- msg->response_body->data);
- GPS_STATUS(gps_state, "Updated SpotterNetwork.");
- } else {
- GPS_STATUS(gps_state, "Could not update SpotterNetwork: %s",
- msg->reason_phrase);
- g_warning("Could not update SpotterNetwork: %s",
- msg->reason_phrase);
- }
-}
-
-