weather: Track whether a location was set

Setting GWeatherInfo:location to null helpfully doesn't mean
"no location", but "NYC". This obviously isn't what we want
to show users, so track the location validity separately and
consider it when updating the label shown to users.

https://bugzilla.gnome.org/show_bug.cgi?id=780252
This commit is contained in:
Florian Müllner 2017-03-19 14:42:35 +01:00
parent a786f0bcd2
commit d393ca4f09
2 changed files with 12 additions and 0 deletions

View File

@ -17,6 +17,7 @@ const WeatherClient = new Lang.Class({
_init: function() { _init: function() {
this._loading = false; this._loading = false;
this._locationValid = false;
this._lastUpdate = GLib.DateTime.new_from_unix_local(0); this._lastUpdate = GLib.DateTime.new_from_unix_local(0);
this._useAutoLocation = false; this._useAutoLocation = false;
@ -55,6 +56,10 @@ const WeatherClient = new Lang.Class({
return this._loading; return this._loading;
}, },
get hasLocation() {
return this._locationValid;
},
get info() { get info() {
return this._weatherInfo; return this._weatherInfo;
}, },
@ -64,6 +69,9 @@ const WeatherClient = new Lang.Class({
}, },
update: function() { update: function() {
if (!this._locationValid)
return;
let now = GLib.DateTime.new_now_local(); let now = GLib.DateTime.new_now_local();
// Update without loading indication if the current info is recent enough // Update without loading indication if the current info is recent enough
if (this._weatherInfo.is_valid() && if (this._weatherInfo.is_valid() &&
@ -101,6 +109,7 @@ const WeatherClient = new Lang.Class({
this._weatherInfo.abort(); this._weatherInfo.abort();
this._weatherInfo.set_location(location); this._weatherInfo.set_location(location);
this._locationValid = (location != null);
if (location) if (location)
this._loadInfo(); this._loadInfo();

View File

@ -296,6 +296,9 @@ const WeatherSection = new Lang.Class({
}, },
_getLabelText: function() { _getLabelText: function() {
if (!this._weatherClient.hasLocation)
return _("Select a location…");
if (this._weatherClient.loading) if (this._weatherClient.loading)
return _("Loading…"); return _("Loading…");