Keep track of recent save targets for target selector

Addresses zotero/zotero-connectors#220
This commit is contained in:
Dan Stillman 2018-03-31 03:47:58 -04:00
parent cd1c65a784
commit 20df18636d

View file

@ -218,10 +218,52 @@ Zotero.Server.Connector.SaveSession.prototype._updateObjects = async function (o
}
}
}
this._updateRecents();
});
};
Zotero.Server.Connector.SaveSession.prototype._updateRecents = function () {
var libraryID = this._currentLibraryID;
var collectionID = this._currentCollectionID;
if (collectionID) {
var targetID = "C" + collectionID;
}
else {
var targetID = "L" + libraryID;
}
try {
let numRecents = 5;
let recents = Zotero.Prefs.get('recentSaveTargets') || '[]';
recents = JSON.parse(recents);
let sessionFound = false;
// If there's already a target from this session in the list, update it
for (let recent of recents) {
if (recent.sessionID == this.id) {
recent.id = targetID;
sessionFound = true;
break;
}
}
// Otherwise add this target to the end
if (!sessionFound) {
recents.push({
id: targetID,
sessionID: this.id
});
}
recents = recents.slice(-1 * numRecents);
Zotero.Prefs.set('recentSaveTargets', JSON.stringify(recents));
}
catch (e) {
Zotero.logError(e);
Zotero.Prefs.clear('recentSaveTargets');
}
};
Zotero.Server.Connector.AttachmentProgressManager = new function() {
var attachmentsInProgress = new WeakMap(),
attachmentProgress = {},
@ -1018,6 +1060,23 @@ Zotero.Server.Connector.GetSelectedCollection.prototype = {
}
response.targets = collections;
// Mark recent targets
try {
let recents = Zotero.Prefs.get('recentSaveTargets');
if (recents) {
recents = new Set(JSON.parse(recents).map(o => o.id));
for (let target of response.targets) {
if (recents.has(target.id)) {
target.recent = true;
}
}
}
}
catch (e) {
Zotero.logError(e);
Zotero.Prefs.clear('recentSaveTargets');
}
// TODO: Limit debug size
sendResponseCallback(200, "application/json", JSON.stringify(response));
}