From 0e0caee6ba5425a2a7da4d43e65884834d281c7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sat, 25 Feb 2017 01:36:47 +0100 Subject: [PATCH] weather: Skip loading indication when updating frequently Weather conditions - at least as far as online services are concerned - don't usually change in a couple of minutes. So when updating shortly after a previous update, assume the current conditions are still valid and trigger an update without showing a loading indication. This should help a bit with not getting stuck permanently in loading state when on a shitty network. https://bugzilla.gnome.org/show_bug.cgi?id=754031 --- js/misc/weather.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/js/misc/weather.js b/js/misc/weather.js index f645222e4..2ea90d312 100644 --- a/js/misc/weather.js +++ b/js/misc/weather.js @@ -2,17 +2,22 @@ const Geoclue = imports.gi.Geoclue; const Gio = imports.gi.Gio; +const GLib = imports.gi.GLib; const GWeather = imports.gi.GWeather; const Lang = imports.lang; const Signals = imports.signals; const Util = imports.misc.util; +// Minimum time between updates to show loading indication +const UPDATE_THRESHOLD = 10 * GLib.TIME_SPAN_MINUTE; + const WeatherClient = new Lang.Class({ Name: 'WeatherClient', _init: function() { this._loading = false; + this._lastUpdate = GLib.DateTime.new_from_unix_local(0); this._useAutoLocation = false; this._mostRecentLocation = null; @@ -29,6 +34,7 @@ const WeatherClient = new Lang.Class({ GWeather.Provider.OWM; this._weatherInfo = new GWeather.Info({ enabled_providers: providers }); this._weatherInfo.connect_after('updated', () => { + this._lastUpdate = GLib.DateTime.new_now_local(); this.emit('changed'); }); @@ -58,7 +64,13 @@ const WeatherClient = new Lang.Class({ }, update: function() { - this._loadInfo(); + let now = GLib.DateTime.new_now_local(); + // Update without loading indication if the current info is recent enough + if (this._weatherInfo.is_valid() && + now.difference(this._lastUpdate) < UPDATE_THRESHOLD) + this._weatherInfo.update(); + else + this._loadInfo(); }, _loadInfo: function() {