[gnome-shell: 5/14] weather: Skip loading indication when updating frequently
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell: 5/14] weather: Skip loading indication when updating frequently
- Date: Wed, 1 Mar 2017 09:59:17 +0000 (UTC)
commit 0e0caee6ba5425a2a7da4d43e65884834d281c7f
Author: Florian Müllner <fmuellner gnome org>
Date: Sat Feb 25 01:36:47 2017 +0100
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 files changed, 13 insertions(+), 1 deletions(-)
---
diff --git a/js/misc/weather.js b/js/misc/weather.js
index f645222..2ea90d3 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() {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]