[gnome-shell] weather: Handle GeoClue not responding



commit ce5875f365b5c615a4bc36479cbd02736703688b
Author: Sebastian Keller <sebastian-keller gmx de>
Date:   Sat Mar 11 13:46:10 2017 +0100

    weather: Handle GeoClue not responding
    
    If GeoClue is not responding for some reason, the callback of
    Geoclue.Simple.new would not get called, meaning that _gclueFailed
    remains false. This is preventing the fallback to the most recently
    used location in gnome-weather, because it requires _gclueFailed to be
    true (or auto-location to be disabled). So neither code path sets a
    location and the libgweather default (New York City) is being used
    instead.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=779898

 js/misc/weather.js |   20 +++++++++-----------
 1 files changed, 9 insertions(+), 11 deletions(-)
---
diff --git a/js/misc/weather.js b/js/misc/weather.js
index 2ea90d3..36346ad 100644
--- a/js/misc/weather.js
+++ b/js/misc/weather.js
@@ -24,7 +24,7 @@ const WeatherClient = new Lang.Class({
 
         this._gclueService = null;
         this._gclueStarted = false;
-        this._gclueFailed = false;
+        this._gclueStarting = false;
         this._gclueLocationChangedId = 0;
 
         this._world = GWeather.Location.get_world();
@@ -125,21 +125,21 @@ const WeatherClient = new Lang.Class({
     },
 
     _startGClueService: function() {
-        if (this._gclueStarted)
+        if (this._gclueStarting)
             return;
 
-        this._gclueStarted = true;
+        this._gclueStarting = true;
+
         Geoclue.Simple.new('org.gnome.Shell', Geoclue.AccuracyLevel.CITY, null,
             (o, res) => {
                 try {
                     this._gclueService = Geoclue.Simple.new_finish(res);
                 } catch(e) {
                     log('Failed to connect to Geoclue2 service: ' + e.message);
-                    this._gclueFailed = true;
                     this._setLocation(this._mostRecentLocation);
                     return;
                 }
-
+                this._gclueStarted = true;
                 this._gclueService.get_client().distance_threshold = 100;
                 this._updateLocationMonitoring();
             });
@@ -163,12 +163,10 @@ const WeatherClient = new Lang.Class({
 
         this._updateLocationMonitoring();
 
-        if (this._useAutoLocation) {
-            if (!this._gclueStarted)
-                this._startGClueService();
-        } else {
+        if (this._useAutoLocation)
+            this._startGClueService();
+        else
             this._setLocation(this._mostRecentLocation);
-        }
     },
 
     _onLocationsChanged: function(settings, key) {
@@ -183,7 +181,7 @@ const WeatherClient = new Lang.Class({
 
         this._mostRecentLocation = mostRecentLocation;
 
-        if (!this._useAutoLocation || this._gclueFailed)
+        if (!this._useAutoLocation || !this._gclueStarted)
             this._setLocation(this._mostRecentLocation);
     }
 });


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]