[gnome-shell: 5/14] weather: Skip loading indication when updating frequently



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]