From 97326e615fffaef92669dbe82c8955c2c2e2edda Mon Sep 17 00:00:00 2001 From: Scott Balneaves Date: Wed, 29 Mar 2017 09:36:20 -0500 Subject: Start reducing weather spam by creating intial cut of weather_info_equal () function that will help apps determine if two WeatherInfo instances are 'the same' enough to not bother with a notification --- libmateweather/weather.c | 38 ++++++++++++++++++++++++++++++++++++++ libmateweather/weather.h | 2 ++ 2 files changed, 40 insertions(+) diff --git a/libmateweather/weather.c b/libmateweather/weather.c index 8ffbfde..71d43a4 100644 --- a/libmateweather/weather.c +++ b/libmateweather/weather.c @@ -1656,3 +1656,41 @@ _weather_internal_check (void) g_assert (G_N_ELEMENTS (conditions_str) == PHENOMENON_LAST); g_assert (G_N_ELEMENTS (conditions_str[0]) == QUALIFIER_LAST); } + +/** + * weather_info_equal: + * @info1: WeatherInfo to compare + * @info2: WeatherInfo to compare + * + * Returns: gboolean indicating if the two info's are "equal" (i.e. basic + * weather attributes are the same) + */ + +gboolean +weather_info_equal (WeatherInfo *info1, WeatherInfo *info2) +{ + g_return_val_if_fail (info1 != NULL, FALSE); + g_return_val_if_fail (info2 != NULL, FALSE); + g_return_val_if_fail (info1->valid, FALSE); + g_return_val_if_fail (info2->valid, FALSE); + + /* + * This function is intended to be used to reduce notification spam. + * the idea is that unless there's a significant change to either + * temp, windspeed, or conditions, there's no need to issue a notification + * to the user. + */ + + if (info1->temp != info2->temp) + return FALSE; + if (info1->wind != info2->wind) + return FALSE; + if (info1->windspeed != info2->windspeed) + return FALSE; + if (info1->cond.significant != info2->cond.significant) + return FALSE; + if (info1->cond.phenomenon != info2->cond.phenomenon) + return FALSE; + + return TRUE; +} diff --git a/libmateweather/weather.h b/libmateweather/weather.h index 204e095..d30b39f 100644 --- a/libmateweather/weather.h +++ b/libmateweather/weather.h @@ -176,6 +176,8 @@ gchar * weather_info_get_weather_summary(WeatherInfo *info); const gchar * weather_info_get_icon_name (WeatherInfo *info); gint weather_info_next_sun_event (WeatherInfo *info); +gboolean weather_info_equal (WeatherInfo *info1, WeatherInfo *info2); + /* values retrieving functions */ enum _WeatherWindDirection { -- cgit v1.2.1