Added a mostRecentError field to Weave.Service, which gets set to a string on any error that the user might need to know about; this is queried by the Fennec UI code to disply better error messages.

This commit is contained in:
jonathandicarlo@jonathan-dicarlos-macbook-pro.local 2009-03-04 15:49:58 -08:00
Родитель 8b4994ae22
Коммит fcf55e528f
1 изменённых файлов: 25 добавлений и 5 удалений

Просмотреть файл

@ -118,6 +118,7 @@ WeaveSvc.prototype = {
_loggedIn: false, _loggedIn: false,
_syncInProgress: false, _syncInProgress: false,
_keyGenEnabled: true, _keyGenEnabled: true,
_mostRecentError: null,
__os: null, __os: null,
get _os() { get _os() {
@ -223,6 +224,8 @@ WeaveSvc.prototype = {
get enabled() { return Svc.Prefs.get("enabled"); }, get enabled() { return Svc.Prefs.get("enabled"); },
set enabled(value) { Svc.Prefs.set("enabled", value); }, set enabled(value) { Svc.Prefs.set("enabled", value); },
get mostRecentError() { return this._mostRecentError; },
get schedule() { get schedule() {
if (!this.enabled) if (!this.enabled)
return 0; // manual/off return 0; // manual/off
@ -524,15 +527,23 @@ WeaveSvc.prototype = {
if (typeof(passp) != 'undefined') if (typeof(passp) != 'undefined')
ID.get('WeaveCryptoID').setTempPassword(passp); ID.get('WeaveCryptoID').setTempPassword(passp);
if (!this.username) if (!this.username) {
this._mostRecentError = "No username set.";
throw "No username set, login failed"; throw "No username set, login failed";
if (!this.password) }
if (!this.password) {
this._mostRecentError = "No password set.";
throw "No password given or found in password manager"; throw "No password given or found in password manager";
}
this._log.debug("Logging in user " + this.username); this._log.debug("Logging in user " + this.username);
if (!(yield this.verifyLogin(self.cb, this.username, this.password, true))) if (!(yield this.verifyLogin(self.cb, this.username, this.password, true))) {
this._mostRecentError = "Login failed. Check your username/password/phrase.";
throw "Login failed"; throw "Login failed";
}
this._loggedIn = true; this._loggedIn = true;
this._setSchedule(this.schedule); this._setSchedule(this.schedule);
self.done(true); self.done(true);
@ -579,6 +590,7 @@ WeaveSvc.prototype = {
// abort the server wipe if the GET status was anything other than 404 or 200 // abort the server wipe if the GET status was anything other than 404 or 200
let status = Records.lastResource.lastChannel.responseStatus; let status = Records.lastResource.lastChannel.responseStatus;
if (status != 200 && status != 404) { if (status != 200 && status != 404) {
this._mostRecentError = "Unknown error when downloading metadata.";
this._log.warn("Unknown error while downloading metadata record. " + this._log.warn("Unknown error while downloading metadata record. " +
"Aborting sync."); "Aborting sync.");
self.done(false); self.done(false);
@ -604,6 +616,7 @@ WeaveSvc.prototype = {
"upgrade (" + remoteVersion + " -> " + WEAVE_VERSION + ")"); "upgrade (" + remoteVersion + " -> " + WEAVE_VERSION + ")");
} else if (Svc.Version.compare(remoteVersion, WEAVE_VERSION) > 0) { } else if (Svc.Version.compare(remoteVersion, WEAVE_VERSION) > 0) {
this._mostRecentError = "Client needs to be upgraded.";
this._log.warn("Server data is of a newer Weave version, this client " + this._log.warn("Server data is of a newer Weave version, this client " +
"needs to be upgraded. Aborting sync."); "needs to be upgraded. Aborting sync.");
self.done(false); self.done(false);
@ -634,6 +647,7 @@ WeaveSvc.prototype = {
PubKeys.lastResource.lastChannel.responseStatus); PubKeys.lastResource.lastChannel.responseStatus);
this._log.debug("PrivKey HTTP response status: " + this._log.debug("PrivKey HTTP response status: " +
PrivKeys.lastResource.lastChannel.responseStatus); PrivKeys.lastResource.lastChannel.responseStatus);
this._mostRecentError = "Can't download keys from server.";
self.done(false); self.done(false);
return; return;
} }
@ -641,6 +655,7 @@ WeaveSvc.prototype = {
if (!this._keyGenEnabled) { if (!this._keyGenEnabled) {
this._log.warn("Couldn't download keys from server, and key generation" + this._log.warn("Couldn't download keys from server, and key generation" +
"is disabled. Aborting sync"); "is disabled. Aborting sync");
this._mostRecentError = "No keys. Try syncing from desktop first.";
self.done(false); self.done(false);
return; return;
} }
@ -659,11 +674,13 @@ WeaveSvc.prototype = {
yield PubKeys.uploadKeypair(self.cb, keys); yield PubKeys.uploadKeypair(self.cb, keys);
ret = true; ret = true;
} catch (e) { } catch (e) {
this._mostRecentError = "Could not upload keys.";
this._log.error("Could not upload keys: " + Utils.exceptionStr(e)); this._log.error("Could not upload keys: " + Utils.exceptionStr(e));
// FIXME no lastRequest anymore // FIXME no lastRequest anymore
//this._log.error(keys.pubkey.lastRequest.responseText); //this._log.error(keys.pubkey.lastRequest.responseText);
} }
} else { } else {
this._mostRecentError = "Could not get encryption passphrase.";
this._log.warn("Could not get encryption passphrase"); this._log.warn("Could not get encryption passphrase");
} }
} }
@ -681,6 +698,7 @@ WeaveSvc.prototype = {
if (!this._loggedIn) { if (!this._loggedIn) {
this._disableSchedule(); this._disableSchedule();
this._mostRecentError = "Can't sync, not logged in.";
throw "aborting sync, not logged in"; throw "aborting sync, not logged in";
} }
@ -698,6 +716,7 @@ WeaveSvc.prototype = {
continue; continue;
if (!(yield this._syncEngine.async(this, self.cb, engine))) { if (!(yield this._syncEngine.async(this, self.cb, engine))) {
this._mostRecentError = "Failure in " + engine.displayName;
this._log.info("Aborting sync"); this._log.info("Aborting sync");
break; break;
} }
@ -752,6 +771,7 @@ WeaveSvc.prototype = {
" reaches threshold " + " reaches threshold " +
this._syncThresholds[engine.name] + "; syncing"); this._syncThresholds[engine.name] + "; syncing");
if (!(yield this._syncEngine.async(this, self.cb, engine))) { if (!(yield this._syncEngine.async(this, self.cb, engine))) {
this._mostRecentError = "Failure in " + engine.displayName;
this._log.info("Aborting sync"); this._log.info("Aborting sync");
break; break;
} }