Pause the document update timer during warning dialogs
This commit is contained in:
parent
47744e4ccd
commit
4b78ebcd72
|
@ -741,7 +741,7 @@ Zotero.Integration.Fields.prototype.addField = function(note) {
|
||||||
|
|
||||||
var field = this._doc.cursorInField(this._session.data.prefs['fieldType']);
|
var field = this._doc.cursorInField(this._session.data.prefs['fieldType']);
|
||||||
if (field) {
|
if (field) {
|
||||||
if (!this._doc.displayAlert(Zotero.getString("integration.replace"),
|
if (!this._session.displayAlert(Zotero.getString("integration.replace"),
|
||||||
DIALOG_ICON_STOP,
|
DIALOG_ICON_STOP,
|
||||||
DIALOG_BUTTONS_OK_CANCEL)) {
|
DIALOG_BUTTONS_OK_CANCEL)) {
|
||||||
return Zotero.Promise.reject(new Zotero.Exception.UserCancelled("inserting citation"));
|
return Zotero.Promise.reject(new Zotero.Exception.UserCancelled("inserting citation"));
|
||||||
|
@ -919,17 +919,19 @@ Zotero.Integration.Fields.prototype._processFields = Zotero.Promise.coroutine(fu
|
||||||
*/
|
*/
|
||||||
Zotero.Integration.Fields.prototype.updateDocument = Zotero.Promise.coroutine(function* (forceCitations, forceBibliography,
|
Zotero.Integration.Fields.prototype.updateDocument = Zotero.Promise.coroutine(function* (forceCitations, forceBibliography,
|
||||||
ignoreCitationChanges) {
|
ignoreCitationChanges) {
|
||||||
var startTime = (new Date()).getTime();
|
this._session.timer = new Zotero.Integration.Timer();
|
||||||
|
this._session.timer.start();
|
||||||
|
|
||||||
yield this._session._updateCitations()
|
yield this._session._updateCitations()
|
||||||
yield this._updateDocument(forceCitations, forceBibliography, ignoreCitationChanges)
|
yield this._updateDocument(forceCitations, forceBibliography, ignoreCitationChanges)
|
||||||
|
|
||||||
var diff = ((new Date()).getTime() - startTime)/1000;
|
var diff = this._session.timer.stop();
|
||||||
|
this._session.timer = null;
|
||||||
Zotero.debug(`Integration: updateDocument complete in ${diff}s`)
|
Zotero.debug(`Integration: updateDocument complete in ${diff}s`)
|
||||||
// If the update takes longer than 5s suggest delaying citation updates
|
// If the update takes longer than 5s suggest delaying citation updates
|
||||||
if (diff > DELAY_CITATIONS_PROMPT_TIMEOUT && !this._session.data.prefs.dontAskDelayCitationUpdates && !this._session.data.prefs.delayCitationUpdates) {
|
if (diff > DELAY_CITATIONS_PROMPT_TIMEOUT && !this._session.data.prefs.dontAskDelayCitationUpdates && !this._session.data.prefs.delayCitationUpdates) {
|
||||||
this._doc.activate();
|
this._doc.activate();
|
||||||
var result = this._doc.displayAlert(Zotero.getString('integration.delayCitationUpdates.alert'),
|
var result = this._session.displayAlert(Zotero.getString('integration.delayCitationUpdates.alert'),
|
||||||
DIALOG_ICON_WARNING, DIALOG_BUTTONS_YES_NO_CANCEL);
|
DIALOG_ICON_WARNING, DIALOG_BUTTONS_YES_NO_CANCEL);
|
||||||
if (result == 2) {
|
if (result == 2) {
|
||||||
this._session.data.prefs.delayCitationUpdates = true;
|
this._session.data.prefs.delayCitationUpdates = true;
|
||||||
|
@ -992,7 +994,7 @@ Zotero.Integration.Fields.prototype._updateDocument = async function(forceCitati
|
||||||
+ "Current: " + plainCitation
|
+ "Current: " + plainCitation
|
||||||
);
|
);
|
||||||
citationField.select();
|
citationField.select();
|
||||||
var result = this._doc.displayAlert(
|
var result = this._session.displayAlert(
|
||||||
Zotero.getString("integration.citationChanged")+"\n\n"+Zotero.getString("integration.citationChanged.description"),
|
Zotero.getString("integration.citationChanged")+"\n\n"+Zotero.getString("integration.citationChanged.description"),
|
||||||
DIALOG_ICON_CAUTION, DIALOG_BUTTONS_YES_NO);
|
DIALOG_ICON_CAUTION, DIALOG_BUTTONS_YES_NO);
|
||||||
if (result) {
|
if (result) {
|
||||||
|
@ -1345,6 +1347,17 @@ Zotero.Integration.Session.prototype.init = Zotero.Promise.coroutine(function *(
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Zotero.Integration.Session.prototype.displayAlert = function() {
|
||||||
|
if (this.timer) {
|
||||||
|
this.timer.pause();
|
||||||
|
}
|
||||||
|
var result = this._doc.displayAlert.apply(this._doc, arguments);
|
||||||
|
if (this.timer) {
|
||||||
|
this.timer.resume();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Changes the Session style and data
|
* Changes the Session style and data
|
||||||
* @param data {Zotero.Integration.DocumentData}
|
* @param data {Zotero.Integration.DocumentData}
|
||||||
|
@ -2172,7 +2185,7 @@ Zotero.Integration.CitationField = class extends Zotero.Integration.Field {
|
||||||
Zotero.getString('integration.corruptField.description');
|
Zotero.getString('integration.corruptField.description');
|
||||||
this.select();
|
this.select();
|
||||||
Zotero.Integration.currentDoc.activate();
|
Zotero.Integration.currentDoc.activate();
|
||||||
var result = Zotero.Integration.currentDoc.displayAlert(msg, DIALOG_ICON_CAUTION, DIALOG_BUTTONS_YES_NO_CANCEL);
|
var result = Zotero.Integration.currentSession.displayAlert(msg, DIALOG_ICON_CAUTION, DIALOG_BUTTONS_YES_NO_CANCEL);
|
||||||
if (result == 0) { // Cancel
|
if (result == 0) { // Cancel
|
||||||
return new Zotero.Exception.UserCancelled("corrupt citation resolution");
|
return new Zotero.Exception.UserCancelled("corrupt citation resolution");
|
||||||
} else if (result == 1) { // No
|
} else if (result == 1) { // No
|
||||||
|
@ -2215,7 +2228,7 @@ Zotero.Integration.BibliographyField = class extends Zotero.Integration.Field {
|
||||||
Zotero.debug(`Integration: handling corrupt bibliography field ${code}`);
|
Zotero.debug(`Integration: handling corrupt bibliography field ${code}`);
|
||||||
var msg = Zotero.getString("integration.corruptBibliography")+'\n\n'+
|
var msg = Zotero.getString("integration.corruptBibliography")+'\n\n'+
|
||||||
Zotero.getString('integration.corruptBibliography.description');
|
Zotero.getString('integration.corruptBibliography.description');
|
||||||
var result = Zotero.Integration.currentDoc.displayAlert(msg, DIALOG_ICON_CAUTION, DIALOG_BUTTONS_OK_CANCEL);
|
var result = Zotero.Integration.currentSession.displayAlert(msg, DIALOG_ICON_CAUTION, DIALOG_BUTTONS_OK_CANCEL);
|
||||||
if (result == 0) {
|
if (result == 0) {
|
||||||
throw new Zotero.Exception.UserCancelled("corrupt bibliography resolution");
|
throw new Zotero.Exception.UserCancelled("corrupt bibliography resolution");
|
||||||
} else {
|
} else {
|
||||||
|
@ -2350,7 +2363,8 @@ Zotero.Integration.Citation = class {
|
||||||
msg += '\n\n'+Zotero.getString('integration.missingItem.description');
|
msg += '\n\n'+Zotero.getString('integration.missingItem.description');
|
||||||
this._field.select();
|
this._field.select();
|
||||||
Zotero.Integration.currentDoc.activate();
|
Zotero.Integration.currentDoc.activate();
|
||||||
var result = Zotero.Integration.currentDoc.displayAlert(msg, 1, 3);
|
var result = Zotero.Integration.currentSession.displayAlert(msg,
|
||||||
|
DIALOG_ICON_WARNING, DIALOG_BUTTONS_YES_NO_CANCEL);
|
||||||
if (result == 0) { // Cancel
|
if (result == 0) { // Cancel
|
||||||
throw new Zotero.Exception.UserCancelled("document update");
|
throw new Zotero.Exception.UserCancelled("document update");
|
||||||
} else if(result == 1) { // No
|
} else if(result == 1) { // No
|
||||||
|
@ -2384,7 +2398,7 @@ Zotero.Integration.Citation = class {
|
||||||
+ "Original: " + this.properties.plainCitation + "\n"
|
+ "Original: " + this.properties.plainCitation + "\n"
|
||||||
+ "Current: " + fieldText
|
+ "Current: " + fieldText
|
||||||
);
|
);
|
||||||
if (!Zotero.Integration.currentDoc.displayAlert(Zotero.getString("integration.citationChanged.edit"),
|
if (!Zotero.Integration.currentSession.displayAlert(Zotero.getString("integration.citationChanged.edit"),
|
||||||
DIALOG_ICON_WARNING, DIALOG_BUTTONS_OK_CANCEL)) {
|
DIALOG_ICON_WARNING, DIALOG_BUTTONS_OK_CANCEL)) {
|
||||||
throw new Zotero.Exception.UserCancelled("editing citation");
|
throw new Zotero.Exception.UserCancelled("editing citation");
|
||||||
}
|
}
|
||||||
|
@ -2601,3 +2615,26 @@ Zotero.Integration.Bibliography = class {
|
||||||
return JSON.stringify(bibliography);
|
return JSON.stringify(bibliography);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// perhaps not the best place for a timer
|
||||||
|
Zotero.Integration.Timer = class {
|
||||||
|
start() {
|
||||||
|
this.startTime = (new Date()).getTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
stop() {
|
||||||
|
this.resume();
|
||||||
|
return ((new Date()).getTime() - this.startTime)/1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
pause() {
|
||||||
|
this.pauseTime = (new Date()).getTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
resume() {
|
||||||
|
if (this.pauseTime) {
|
||||||
|
this.startTime += (this.pauseTime - this.startTime);
|
||||||
|
this.pauseTime = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user