1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-24 10:27:10 +02:00

Sync progress report

This commit is contained in:
Laurent Cozic 2017-06-30 17:54:01 +00:00
parent 46cd64b08b
commit a962f719a7
2 changed files with 50 additions and 2 deletions

View File

@ -328,12 +328,34 @@ commands.push({
usage: 'sync',
description: 'Synchronizes with remote storage.',
action: function(args, end) {
let redrawnCalled = false;
let options = {
onProgress: (report) => {
let line = [];
if (report.remotesToUpdate) line.push(_('Items to upload: %d/%d.', report.createRemote + report.updateRemote, report.remotesToUpdate));
if (report.remotesToDelete) line.push(_('Remote items to delete: %d/%d.', report.deleteRemote, report.remotesToDelete));
if (report.localsToUdpate) line.push(_('Items to download: %d/%d.', report.createLocal + report.updateLocal, report.localsToUdpate));
if (report.localsToDelete) line.push(_('Local items to delete: %d/%d.', report.deleteLocal, report.localsToDelete));
redrawnCalled = true;
vorpal.ui.redraw(line.join(' '));
},
onMessage: (msg) => {
if (redrawnCalled) vorpal.ui.redraw.done();
this.log(msg);
},
};
this.log(_('Synchronization target: %s', Setting.value('sync.target')));
synchronizer(Setting.value('sync.target')).then((s) => {
return s.start();
this.log(_('Starting synchronization...'));
return s.start(options);
}).catch((error) => {
this.log(error);
}).then(() => {
if (redrawnCalled) vorpal.ui.redraw.done();
this.log(_('Done.'));
end();
});
},

View File

@ -77,7 +77,10 @@ class Synchronizer {
return this.syncDirName_;
}
async start() {
async start(options = null) {
if (!options) options = {};
if (!options.onProgress) options.onProgress = function(o) {};
if (this.state() != 'idle') {
this.logger().warn('Synchronization is already in progress. State: ' + this.state());
return;
@ -94,6 +97,11 @@ class Synchronizer {
this.state_ = 'started';
let report = {
remotesToUpdate: 0,
remotesToDelete: 0,
localsToUdpate: 0,
localsToDelete: 0,
createLocal: 0,
updateLocal: 0,
deleteLocal: 0,
@ -112,6 +120,9 @@ class Synchronizer {
let result = await BaseItem.itemsThatNeedSync();
let locals = result.items;
report.remotesToUpdate += locals.length;
options.onProgress(report);
for (let i = 0; i < locals.length; i++) {
let local = locals[i];
let ItemClass = BaseItem.itemClass(local);
@ -196,6 +207,8 @@ class Synchronizer {
report[action]++;
donePaths.push(path);
options.onProgress(report);
}
if (!result.hasMore) break;
@ -206,6 +219,8 @@ class Synchronizer {
// ------------------------------------------------------------------------
let deletedItems = await BaseModel.deletedItems();
report.remotesToDelete = deletedItems.length;
options.onProgress(report);
for (let i = 0; i < deletedItems.length; i++) {
let item = deletedItems[i];
let path = BaseItem.systemPath(item.item_id)
@ -214,6 +229,7 @@ class Synchronizer {
await BaseModel.remoteDeletedItem(item.item_id);
report['deleteRemote']++;
options.onProgress(report);
}
// ------------------------------------------------------------------------
@ -252,6 +268,9 @@ class Synchronizer {
if (!action) continue;
report.localsToUdpate++;
options.onProgress(report);
if (action == 'createLocal' || action == 'updateLocal') {
let content = await this.api().get(path);
if (content === null) {
@ -273,6 +292,8 @@ class Synchronizer {
}
report[action]++;
options.onProgress(report);
}
if (!listResult.hasMore) break;
@ -288,9 +309,12 @@ class Synchronizer {
for (let i = 0; i < noteIds.length; i++) {
let noteId = noteIds[i];
if (remoteIds.indexOf(noteId) < 0) {
report.localsToDelete++;
options.onProgress(report);
this.logSyncOperation('deleteLocal', { id: noteId }, null, 'remote has been deleted');
await Note.delete(noteId, { trackDeleted: false });
report['deleteLocal']++;
options.onProgress(report);
}
}
} catch (error) {
@ -298,6 +322,8 @@ class Synchronizer {
throw error;
}
options.onProgress(report);
this.logger().info('Synchronization complete [' + synchronizationId + ']:');
await this.logSyncSummary(report);