Cache weatherdata if gnome-shell is locked or idle.

merge-requests/218/head
Jens Lody 9 years ago
parent 473a13f970
commit deb140b4c1
  1. 30
      src/extension.js

@ -134,6 +134,8 @@ const OPENWEATHER_CONV_MPS_IN_KNOTS = 1.94384449;
const OPENWEATHER_CONV_MPS_IN_FPS = 3.2808399; const OPENWEATHER_CONV_MPS_IN_FPS = 3.2808399;
let _httpSession; let _httpSession;
let _currentWeatherCache,_forecastWeatherCache;
let _timeCacheCurrentWeather,_timeCacheForecastWeather;
const OpenweatherMenuButton = new Lang.Class({ const OpenweatherMenuButton = new Lang.Class({
Name: 'OpenweatherMenuButton', Name: 'OpenweatherMenuButton',
@ -147,8 +149,6 @@ const OpenweatherMenuButton = new Lang.Class({
this.oldTranslateCondition = this._translate_condition; this.oldTranslateCondition = this._translate_condition;
this.switchProvider(); this.switchProvider();
this.currentWeatherCache = undefined;
this.forecastWeatherCache = undefined;
// Load settings // Load settings
this.loadConfig(); this.loadConfig();
@ -251,6 +251,9 @@ const OpenweatherMenuButton = new Lang.Class({
this.rebuildCurrentWeatherUi(); this.rebuildCurrentWeatherUi();
this.rebuildFutureWeatherUi(); this.rebuildFutureWeatherUi();
this._idle = false;
this._connected = false;
this._network_monitor = Gio.network_monitor_get_default(); this._network_monitor = Gio.network_monitor_get_default();
this._presence = new GnomeSession.Presence(Lang.bind(this, function(proxy, error) { this._presence = new GnomeSession.Presence(Lang.bind(this, function(proxy, error) {
@ -260,9 +263,22 @@ const OpenweatherMenuButton = new Lang.Class({
this._onStatusChanged(status); this._onStatusChanged(status);
})); }));
this._idle = false; this.currentWeatherCache = _currentWeatherCache;
this._connected = false; this.forecastWeatherCache = _forecastWeatherCache;
if (_timeCacheForecastWeather !== undefined)
{
let diff = Math.floor(new Date(new Date() - _timeCacheForecastWeather).getTime() / 1000);
if (diff < this._refresh_interval_forecast)
this.reloadWeatherForecast(this._refresh_interval_forecast - diff);
}
if (_timeCacheCurrentWeather !== undefined)
{
let diff = Math.floor(new Date(new Date() - _timeCacheCurrentWeather).getTime() / 1000);
if (diff < this._refresh_interval_current)
this.reloadWeatherCurrent(this._refresh_interval_current - diff);
}
this._network_monitor_connection = this._network_monitor.connect('network-changed', Lang.bind(this, this._onNetworkStateChanged)); this._network_monitor_connection = this._network_monitor.connect('network-changed', Lang.bind(this, this._onNetworkStateChanged));
this._checkConnectionState(); this._checkConnectionState();
this.menu.connect('open-state-changed', Lang.bind(this, this.recalcLayout)); this.menu.connect('open-state-changed', Lang.bind(this, this.recalcLayout));
@ -277,6 +293,9 @@ const OpenweatherMenuButton = new Lang.Class({
}, },
stop: function() { stop: function() {
_forecastWeatherCache = this.forecastWeatherCache;
_currentWeatherCache = this.currentWeatherCache;
if (_httpSession !== undefined) if (_httpSession !== undefined)
_httpSession.abort(); _httpSession.abort();
@ -961,6 +980,7 @@ const OpenweatherMenuButton = new Lang.Class({
}, },
load_json_async: function(url, params, fun) { load_json_async: function(url, params, fun) {
// log(new Error().fileName+':'+new Error().lineNumber+new Error().stack);
// log(new Error().fileName+':'+new Error().lineNumber+' => url = '+url); // log(new Error().fileName+':'+new Error().lineNumber+' => url = '+url);
if (_httpSession === undefined) { if (_httpSession === undefined) {
_httpSession = new Soup.Session(); _httpSession = new Soup.Session();
@ -1159,6 +1179,7 @@ const OpenweatherMenuButton = new Lang.Class({
Mainloop.source_remove(this._timeoutCurrent); Mainloop.source_remove(this._timeoutCurrent);
this._timeoutCurrent = undefined; this._timeoutCurrent = undefined;
} }
_timeCacheCurrentWeather = new Date();
this._timeoutCurrent = Mainloop.timeout_add_seconds(interval, Lang.bind(this, function() { this._timeoutCurrent = Mainloop.timeout_add_seconds(interval, Lang.bind(this, function() {
// only invalidate cached data, if we can connect the weather-providers server // only invalidate cached data, if we can connect the weather-providers server
if (this._connected && !this._idle) if (this._connected && !this._idle)
@ -1173,6 +1194,7 @@ const OpenweatherMenuButton = new Lang.Class({
Mainloop.source_remove(this._timeoutForecast); Mainloop.source_remove(this._timeoutForecast);
this._timeoutForecast = undefined; this._timeoutForecast = undefined;
} }
_timeCacheForecastWeather = new Date();
this._timeoutForecast = Mainloop.timeout_add_seconds(interval, Lang.bind(this, function() { this._timeoutForecast = Mainloop.timeout_add_seconds(interval, Lang.bind(this, function() {
// only invalidate cached data, if we can connect the weather-providers server // only invalidate cached data, if we can connect the weather-providers server
if (this._connected && !this._idle) if (this._connected && !this._idle)

Loading…
Cancel
Save