summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Balneaves <[email protected]>2017-03-29 09:36:20 -0500
committerraveit65 <[email protected]>2017-07-23 14:34:45 +0200
commit97326e615fffaef92669dbe82c8955c2c2e2edda (patch)
tree7a304026d35b671b9214dae751dca9053840d513
parentf34162f526a49e4302f6b87c82825f316408c745 (diff)
downloadlibmateweather-97326e615fffaef92669dbe82c8955c2c2e2edda.tar.bz2
libmateweather-97326e615fffaef92669dbe82c8955c2c2e2edda.tar.xz
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
-rw-r--r--libmateweather/weather.c38
-rw-r--r--libmateweather/weather.h2
2 files changed, 40 insertions, 0 deletions
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 {