diff options
author | Andrew Dolgov <[email protected]> | 2018-12-01 17:21:26 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2018-12-01 17:21:26 +0300 |
commit | d86ddbc635376231ba2e0a70c04f526cb9fedd58 (patch) | |
tree | 6bc975b9c984fe815962e5d1afcde5fba1c816c8 /js/functions.js | |
parent | 049a37aa0e7d37cafd979e7d470c7649700b5010 (diff) |
further objectification of JS code
Diffstat (limited to 'js/functions.js')
-rwxr-xr-x | js/functions.js | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/js/functions.js b/js/functions.js index d9778ad22..174dbebfe 100755 --- a/js/functions.js +++ b/js/functions.js @@ -57,6 +57,14 @@ Array.prototype.remove = function(s) { }; const Utils = { + _rpc_seq: 0, + next_seq: function() { + this._rpc_seq += 1; + return this._rpc_seq; + }, + get_seq: function() { + return this._rpc_seq; + }, cleanupMemory: function(root) { const dijits = dojo.query("[widgetid]", dijit.byId(root).domNode).map(dijit.byNode); @@ -127,6 +135,126 @@ const Utils = { return false; }, + handleRpcJson: function(transport) { + + const netalert_dijit = dijit.byId("net-alert"); + let netalert = false; + + if (netalert_dijit) netalert = netalert_dijit.domNode; + + try { + const reply = JSON.parse(transport.responseText); + + if (reply) { + + const error = reply['error']; + + if (error) { + const code = error['code']; + const msg = error['msg']; + + console.warn("[handleRpcJson] received fatal error " + code + "/" + msg); + + if (code != 0) { + fatalError(code, msg); + return false; + } + } + + const seq = reply['seq']; + + if (seq && this.get_seq() != seq) { + console.log("[handleRpcJson] sequence mismatch: " + seq + + " (want: " + this.get_seq() + ")"); + return true; + } + + const message = reply['message']; + + if (message == "UPDATE_COUNTERS") { + console.log("need to refresh counters..."); + setInitParam("last_article_id", -1); + Feeds.requestCounters(true); + } + + const counters = reply['counters']; + + if (counters) + Feeds.parseCounters(counters); + + const runtime_info = reply['runtime-info']; + + if (runtime_info) + Utils.parseRuntimeInfo(runtime_info); + + if (netalert) netalert.hide(); + + return reply; + + } else { + if (netalert) + netalert.show(); + else + notify_error("Communication problem with server."); + } + + } catch (e) { + if (netalert) + netalert.show(); + else + notify_error("Communication problem with server."); + + console.error(e); + } + + return false; + }, + parseRuntimeInfo: function(data) { + + //console.log("parsing runtime info..."); + + for (const k in data) { + const v = data[k]; + + if (k == "dep_ts" && parseInt(getInitParam("dep_ts")) > 0) { + if (parseInt(getInitParam("dep_ts")) < parseInt(v) && getInitParam("reload_on_ts_change")) { + window.location.reload(); + } + } + + if (k == "daemon_is_running" && v != 1) { + notify_error("<span onclick=\"explainError(1)\">Update daemon is not running.</span>", true); + return; + } + + if (k == "update_result") { + const updatesIcon = dijit.byId("updatesIcon").domNode; + + if (v) { + Element.show(updatesIcon); + } else { + Element.hide(updatesIcon); + } + } + + if (k == "daemon_stamp_ok" && v != 1) { + notify_error("<span onclick=\"explainError(3)\">Update daemon is not updating feeds.</span>", true); + return; + } + + if (k == "max_feed_id" || k == "num_feeds") { + if (init_params[k] != v) { + console.log("feed count changed, need to reload feedlist."); + Feeds.reload(); + } + } + + init_params[k] = v; + notify(''); + } + + PluginHost.run(PluginHost.HOOK_RUNTIME_INFO_LOADED, data); + }, }; function report_error(message, filename, lineno, colno, error) { |