int main (int argc, char **argv) { FILE* stream = stdin; gchar* filename = NULL; GOptionEntry entries[] = { { "file", 'f', 0, G_OPTION_ARG_FILENAME, &filename, "file constaining metar observations", NULL }, { NULL } }; GOptionContext* context; GError* error = NULL; char buf[BUFLEN]; int len; GWeatherInfo *info; context = g_option_context_new ("- test libgweather metar parser"); g_option_context_add_main_entries (context, entries, NULL); g_option_context_parse (context, &argc, &argv, &error); if (error) { perror (error->message); return error->code; } if (filename) { stream = fopen (filename, "r"); if (!stream) { perror ("fopen"); return -1; } } else { fprintf (stderr, "Enter a METAR string...\n"); } while (fgets (buf, sizeof (buf), stream)) { len = strlen (buf); if (buf[len - 1] == '\n') { buf[--len] = '\0'; } printf ("\n%s\n", buf); /* a bit hackish... */ info = g_object_new (GWEATHER_TYPE_INFO, NULL); info->priv->valid = 1; metar_parse (buf, info); printf ("Returned info:\n"); printf (" update: %s", ctime (&info->priv->update)); printf (" sky: %s\n", gweather_info_get_sky (info)); printf (" cond: %s\n", gweather_info_get_conditions (info)); printf (" temp: %s\n", gweather_info_get_temp (info)); printf (" dewp: %s\n", gweather_info_get_dew (info)); printf (" wind: %s\n", gweather_info_get_wind (info)); printf (" pressure: %s\n", gweather_info_get_pressure (info)); printf (" vis: %s\n", gweather_info_get_visibility (info)); // TODO: retrieve location's lat/lon to display sunrise/set times } return 0; }
static void update_finish (GWeatherInfo *info, gpointer data) { static int gw_fault_counter = 0; #ifdef HAVE_LIBNOTIFY char *message, *detail; #endif char *s; GWeatherApplet *gw_applet = (GWeatherApplet *)data; gint nxtSunEvent; const gchar *icon_name; /* Update timer */ if (gw_applet->timeout_tag > 0) g_source_remove(gw_applet->timeout_tag); if (g_settings_get_boolean (gw_applet->applet_settings, "auto-update")) { gw_applet->timeout_tag = g_timeout_add_seconds (g_settings_get_int (gw_applet->applet_settings, "auto-update-interval"), timeout_cb, gw_applet); nxtSunEvent = gweather_info_next_sun_event(gw_applet->gweather_info); if (nxtSunEvent >= 0) gw_applet->suncalc_timeout_tag = g_timeout_add_seconds (nxtSunEvent, suncalc_timeout_cb, gw_applet); } if ((TRUE == gweather_info_is_valid (info)) || (gw_fault_counter >= MAX_CONSECUTIVE_FAULTS)) { gw_fault_counter = 0; icon_name = gweather_info_get_icon_name (gw_applet->gweather_info); gtk_image_set_from_icon_name (GTK_IMAGE(gw_applet->image), icon_name, GTK_ICON_SIZE_BUTTON); gtk_label_set_text (GTK_LABEL (gw_applet->label), gweather_info_get_temp_summary( gw_applet->gweather_info)); s = gweather_info_get_weather_summary (gw_applet->gweather_info); gtk_widget_set_tooltip_text (GTK_WIDGET (gw_applet->applet), s); g_free (s); /* Update dialog -- if one is present */ if (gw_applet->details_dialog) { gweather_dialog_update (GWEATHER_DIALOG (gw_applet->details_dialog)); } /* update applet */ place_widgets(gw_applet); #ifdef HAVE_LIBNOTIFY if (g_settings_get_boolean (gw_applet->applet_settings, "show-notifications")) { NotifyNotification *n; /* Show notifications if possible */ if (!notify_is_initted ()) notify_init (_("Weather Forecast")); if (notify_is_initted ()) { GError *error = NULL; const char *icon; /* Show notification */ message = g_strdup_printf ("%s: %s", gweather_info_get_location_name (info), gweather_info_get_sky (info)); detail = g_strdup_printf ( _("City: %s\nSky: %s\nTemperature: %s"), gweather_info_get_location_name (info), gweather_info_get_sky (info), gweather_info_get_temp_summary (info)); icon = gweather_info_get_icon_name (gw_applet->gweather_info); if (icon == NULL) icon = "stock-unknown"; n = notify_notification_new (message, detail, icon); notify_notification_show (n, &error); if (error) { g_warning ("%s", error->message); g_error_free (error); } g_free (message); g_free (detail); } } #endif } else { /* there has been an error during retrival * just update the fault counter */ gw_fault_counter++; } }