1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-07-16 00:14:34 +02:00

Desktop: Allow restoring a delete note from note history using command palette

This commit is contained in:
Laurent Cozic
2021-06-10 11:49:20 +02:00
parent 00dc1d881b
commit 5fd6571bf1
6 changed files with 48 additions and 4 deletions

View File

@ -9,6 +9,7 @@ import shim from '../shim';
import BaseService from './BaseService';
import { _ } from '../locale';
import { ItemChangeEntity, NoteEntity, RevisionEntity } from './database/types';
const { substrWithEllipsis } = require('../string-utils');
const { sprintf } = require('sprintf-js');
const { wrapError } = require('../errorUtils');
@ -230,7 +231,23 @@ export default class RevisionService extends BaseService {
return folder;
}
async importRevisionNote(note: NoteEntity) {
// reverseRevIndex = 0 means restoring the latest version. reverseRevIndex =
// 1 means the version before that, etc.
public async restoreNoteById(noteId: string, reverseRevIndex: number): Promise<NoteEntity> {
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, noteId);
if (!revisions.length) throw new Error(`No revision for note "${noteId}"`);
const revIndex = revisions.length - 1 - reverseRevIndex;
const note = await this.revisionNote(revisions, revIndex);
return this.importRevisionNote(note);
}
public restoreSuccessMessage(note: NoteEntity): string {
return _('The note "%s" has been successfully restored to the notebook "%s".', substrWithEllipsis(note.title, 0, 32), this.restoreFolderTitle());
}
async importRevisionNote(note: NoteEntity): Promise<NoteEntity> {
const toImport = Object.assign({}, note);
delete toImport.id;
delete toImport.updated_time;
@ -242,7 +259,7 @@ export default class RevisionService extends BaseService {
toImport.parent_id = folder.id;
await Note.save(toImport);
return Note.save(toImport);
}
async maintenance() {