mirror of
				https://github.com/zadam/trilium.git
				synced 2025-11-04 04:16:17 +01:00 
			
		
		
		
	fixed "duplicate subtree" creating extra entities in case subtrees contains multiple clones
This commit is contained in:
		@@ -796,8 +796,28 @@ function duplicateSubtreeInner(origNote, origBranch, newParentNoteId, noteIdMapp
 | 
				
			|||||||
        throw new Error(`Cannot duplicate note=${origNote.noteId} because it is protected and protected session is not available. Enter protected session and try again.`);
 | 
					        throw new Error(`Cannot duplicate note=${origNote.noteId} because it is protected and protected session is not available. Enter protected session and try again.`);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const newNoteId = noteIdMapping[origNote.noteId];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const newBranch = new Branch({
 | 
				
			||||||
 | 
					        noteId: newNoteId,
 | 
				
			||||||
 | 
					        parentNoteId: newParentNoteId,
 | 
				
			||||||
 | 
					        // here increasing just by 1 to make sure it's directly after original
 | 
				
			||||||
 | 
					        notePosition: origBranch ? origBranch.notePosition + 1 : null
 | 
				
			||||||
 | 
					    }).save();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const existingNote = repository.getNote(newNoteId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (existingNote) {
 | 
				
			||||||
 | 
					        // note has multiple clones and was already created from another placement in the tree
 | 
				
			||||||
 | 
					        // so a branch is all we need for this clone
 | 
				
			||||||
 | 
					        return {
 | 
				
			||||||
 | 
					            note: existingNote,
 | 
				
			||||||
 | 
					            branch: newBranch
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const newNote = new Note(origNote);
 | 
					    const newNote = new Note(origNote);
 | 
				
			||||||
    newNote.noteId = noteIdMapping[origNote.noteId];
 | 
					    newNote.noteId = newNoteId;
 | 
				
			||||||
    newNote.dateCreated = dateUtils.localNowDateTime();
 | 
					    newNote.dateCreated = dateUtils.localNowDateTime();
 | 
				
			||||||
    newNote.utcDateCreated = dateUtils.utcNowDateTime();
 | 
					    newNote.utcDateCreated = dateUtils.utcNowDateTime();
 | 
				
			||||||
    newNote.save();
 | 
					    newNote.save();
 | 
				
			||||||
@@ -811,13 +831,6 @@ function duplicateSubtreeInner(origNote, origBranch, newParentNoteId, noteIdMapp
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    newNote.setContent(content);
 | 
					    newNote.setContent(content);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const newBranch = new Branch({
 | 
					 | 
				
			||||||
        noteId: newNote.noteId,
 | 
					 | 
				
			||||||
        parentNoteId: newParentNoteId,
 | 
					 | 
				
			||||||
        // here increasing just by 1 to make sure it's directly after original
 | 
					 | 
				
			||||||
        notePosition: origBranch ? origBranch.notePosition + 1 : null
 | 
					 | 
				
			||||||
    }).save();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    for (const attribute of origNote.getOwnedAttributes()) {
 | 
					    for (const attribute of origNote.getOwnedAttributes()) {
 | 
				
			||||||
        const attr = new Attribute(attribute);
 | 
					        const attr = new Attribute(attribute);
 | 
				
			||||||
        attr.attributeId = undefined; // force creation of new attribute
 | 
					        attr.attributeId = undefined; // force creation of new attribute
 | 
				
			||||||
@@ -849,6 +862,7 @@ function getNoteIdMapping(origNote) {
 | 
				
			|||||||
    for (const origNoteId of origNote.getDescendantNoteIds()) {
 | 
					    for (const origNoteId of origNote.getDescendantNoteIds()) {
 | 
				
			||||||
        noteIdMapping[origNoteId] = utils.newEntityId();
 | 
					        noteIdMapping[origNoteId] = utils.newEntityId();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return noteIdMapping;
 | 
					    return noteIdMapping;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user