summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libmateweather/weather-metar.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/libmateweather/weather-metar.c b/libmateweather/weather-metar.c
index dabca3a..d25a432 100644
--- a/libmateweather/weather-metar.c
+++ b/libmateweather/weather-metar.c
@@ -523,15 +523,20 @@ metar_finish (GObject *source, GAsyncResult *result, gpointer data)
loc = info->location;
- searchkey = g_strdup_printf ("<raw_text>METAR %s", loc->code);
-
response_body = g_bytes_get_data (bytes, &len);
end = response_body + len;
+ /* Try METAR first, then SPECI */
+ searchkey = g_strdup_printf ("<raw_text>METAR %s", loc->code);
p = xstrnstr (response_body, len, searchkey);
+ if (!p) {
+ g_free (searchkey);
+ searchkey = g_strdup_printf ("<raw_text>SPECI %s", loc->code);
+ p = xstrnstr (response_body, len, searchkey);
+ }
+
if (p) {
p += WEATHER_LOCATION_CODE_LEN + 11;
- endtag = strstr (p, "</raw_text>");
endtag = xstrnstr (p, end - p, "</raw_text>");
if (endtag)
metar = g_strndup (p, endtag - p);
@@ -539,7 +544,10 @@ metar_finish (GObject *source, GAsyncResult *result, gpointer data)
metar = g_strndup (p, end - p);
success = metar_parse (metar, info);
g_free (metar);
- } else if (!xstrnstr (response_body, len, "aviationweather.gov")) {
+ }
+ g_free (searchkey);
+
+ if (!success && !xstrnstr (response_body, len, "aviationweather.gov")) {
/* The response doesn't even seem to have come from NOAA...
* most likely it is a wifi hotspot login page. Call that a
* network error.