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

Plugins: Add support for workspace.onSyncStart event

This commit is contained in:
Laurent Cozic 2020-12-08 19:03:22 +00:00
parent 8d90cc234f
commit efb3546675
3 changed files with 33 additions and 6 deletions

View File

@ -7,8 +7,13 @@ joplin.plugins.register({
console.info('Alarm was triggered for note: ', note); console.info('Alarm was triggered for note: ', note);
}); });
joplin.workspace.onSyncComplete(async () => { joplin.workspace.onSyncStart(async (event:any) => {
console.info('Sync has started...');
});
joplin.workspace.onSyncComplete(async (event:any) => {
console.info('Sync has completed'); console.info('Sync has completed');
console.info('With errors:', event.withErrors);
}); });
}, },
}); });

View File

@ -121,6 +121,10 @@ export default class Synchronizer {
} }
} }
private static reportHasErrors(report: any): boolean {
return !!report && !!report.errors && !!report.errors.length;
}
static reportToLines(report: any) { static reportToLines(report: any) {
const lines = []; const lines = [];
if (report.createLocal) lines.push(_('Created local items: %d.', report.createLocal)); if (report.createLocal) lines.push(_('Created local items: %d.', report.createLocal));
@ -132,7 +136,7 @@ export default class Synchronizer {
if (report.fetchingTotal && report.fetchingProcessed) lines.push(_('Fetched items: %d/%d.', report.fetchingProcessed, report.fetchingTotal)); if (report.fetchingTotal && report.fetchingProcessed) lines.push(_('Fetched items: %d/%d.', report.fetchingProcessed, report.fetchingTotal));
if (report.cancelling && !report.completedTime) lines.push(_('Cancelling...')); if (report.cancelling && !report.completedTime) lines.push(_('Cancelling...'));
if (report.completedTime) lines.push(_('Completed: %s', time.formatMsToLocal(report.completedTime))); if (report.completedTime) lines.push(_('Completed: %s', time.formatMsToLocal(report.completedTime)));
if (report.errors && report.errors.length) lines.push(_('Last error: %s', report.errors[report.errors.length - 1].toString().substr(0, 500))); if (this.reportHasErrors(report)) lines.push(_('Last error: %s', report.errors[report.errors.length - 1].toString().substr(0, 500)));
return lines; return lines;
} }
@ -193,7 +197,7 @@ export default class Synchronizer {
this.logger().info(`Total notes: ${noteCount}`); this.logger().info(`Total notes: ${noteCount}`);
this.logger().info(`Total resources: ${resourceCount}`); this.logger().info(`Total resources: ${resourceCount}`);
if (report.errors && report.errors.length) { if (Synchronizer.reportHasErrors(report)) {
this.logger().warn('There was some errors:'); this.logger().warn('There was some errors:');
for (let i = 0; i < report.errors.length; i++) { for (let i = 0; i < report.errors.length; i++) {
const e = report.errors[i]; const e = report.errors[i];
@ -315,6 +319,7 @@ export default class Synchronizer {
const outputContext = Object.assign({}, lastContext); const outputContext = Object.assign({}, lastContext);
this.dispatch({ type: 'SYNC_STARTED' }); this.dispatch({ type: 'SYNC_STARTED' });
eventManager.emit('syncStart');
this.logSyncOperation('starting', null, null, `Starting synchronisation to target ${syncTargetId}... [${synchronizationId}]`); this.logSyncOperation('starting', null, null, `Starting synchronisation to target ${syncTargetId}... [${synchronizationId}]`);
@ -899,11 +904,14 @@ export default class Synchronizer {
await this.logSyncSummary(this.progressReport_); await this.logSyncSummary(this.progressReport_);
eventManager.emit('syncComplete', {
withErrors: Synchronizer.reportHasErrors(this.progressReport_),
});
this.onProgress_ = function() {}; this.onProgress_ = function() {};
this.progressReport_ = {}; this.progressReport_ = {};
this.dispatch({ type: 'SYNC_COMPLETED', isFullSync: this.isFullSync(syncSteps) }); this.dispatch({ type: 'SYNC_COMPLETED', isFullSync: this.isFullSync(syncSteps) });
eventManager.emit('syncComplete');
this.state_ = 'idle'; this.state_ = 'idle';

View File

@ -19,7 +19,14 @@ interface ItemChangeEvent {
event: ItemChangeEventType; event: ItemChangeEventType;
} }
interface SyncStartEvent {
// Tells whether there were errors during sync or not. The log will
// have the complete information about any error.
withErrors: boolean;
}
type ItemChangeHandler = (event: ItemChangeEvent)=> void; type ItemChangeHandler = (event: ItemChangeEvent)=> void;
type SyncStartHandler = (event: SyncStartEvent)=> void;
/** /**
* The workspace service provides access to all the parts of Joplin that * The workspace service provides access to all the parts of Joplin that
@ -80,8 +87,15 @@ export default class JoplinWorkspace {
/** /**
* Called when an alarm associated with a to-do is triggered. * Called when an alarm associated with a to-do is triggered.
*/ */
public async onNoteAlarmTrigger(callback: Function): Promise<Disposable> { public async onNoteAlarmTrigger(handler: Function): Promise<Disposable> {
return makeListener(eventManager, 'noteAlarmTrigger', callback); return makeListener(eventManager, 'noteAlarmTrigger', handler);
}
/**
* Called when the synchronisation process is starting.
*/
public async onSyncStart(handler: SyncStartHandler): Promise<Disposable> {
return makeListener(eventManager, 'syncStart', handler);
} }
/** /**