unprotecting note outside of protected session is not forbidden because it could overwrite previous note

This commit is contained in:
azivner 2018-08-17 15:21:59 +02:00
parent 145efe67c3
commit a42bbba0e5
3 changed files with 14 additions and 6 deletions

View File

@ -119,11 +119,12 @@ async function saveNoteIfChanged() {
} }
function setNoteBackgroundIfProtected(note) { function setNoteBackgroundIfProtected(note) {
const isProtected = !!note.isProtected; const isProtected = note.isProtected;
$noteDetailWrapper.toggleClass("protected", isProtected); $noteDetailWrapper.toggleClass("protected", isProtected);
$protectButton.toggleClass("active", isProtected); $protectButton.toggleClass("active", isProtected);
$unprotectButton.toggleClass("active", !isProtected); $unprotectButton.toggleClass("active", !isProtected);
$unprotectButton.prop("disabled", !protectedSessionHolder.isProtectedSessionAvailable());
} }
let isNewNoteCreated = false; let isNewNoteCreated = false;
@ -157,8 +158,6 @@ async function loadNoteDetail(noteId) {
setNoteBackgroundIfProtected(currentNote); setNoteBackgroundIfProtected(currentNote);
await handleProtectedSession();
$noteDetailWrapper.show(); $noteDetailWrapper.show();
noteChangeDisabled = true; noteChangeDisabled = true;
@ -171,6 +170,8 @@ async function loadNoteDetail(noteId) {
$noteDetailComponents.hide(); $noteDetailComponents.hide();
await handleProtectedSession();
await getComponent(currentNote.type).show(); await getComponent(currentNote.type).show();
} }
finally { finally {

View File

@ -32,6 +32,7 @@ function ensureProtectedSession(requireProtectedSession, modal) {
const dfd = $.Deferred(); const dfd = $.Deferred();
if (requireProtectedSession && !protectedSessionHolder.isProtectedSessionAvailable()) { if (requireProtectedSession && !protectedSessionHolder.isProtectedSessionAvailable()) {
// using deferred instead of promise because it allows resolving from outside
protectedSessionDeferred = dfd; protectedSessionDeferred = dfd;
if (treeService.getCurrentNode().data.isProtected) { if (treeService.getCurrentNode().data.isProtected) {
@ -39,7 +40,6 @@ function ensureProtectedSession(requireProtectedSession, modal) {
} }
$dialog.dialog({ $dialog.dialog({
// modal: modal,
// everything is now non-modal, because modal dialog caused weird high CPU usage on opening // everything is now non-modal, because modal dialog caused weird high CPU usage on opening
// and tearing of text input // and tearing of text input
modal: false, modal: false,
@ -128,7 +128,14 @@ async function unprotectNoteAndSendToServer() {
return; return;
} }
await ensureProtectedSession(true, true); if (!protectedSessionHolder.isProtectedSessionAvailable()) {
console.log("Unprotecting notes outside of protected session is not allowed.");
// the reason is that it's not easy to handle even with ensureProtectedSession,
// because we would first have to make sure the note is loaded and only then unprotect
// we used to have a bug where we would overwrite the previous note with unprotected content.
return;
}
const note = noteDetailService.getCurrentNote(); const note = noteDetailService.getCurrentNote();
note.isProtected = false; note.isProtected = false;

View File

@ -419,7 +419,7 @@ function scrollToCurrentNote() {
} }
function setBranchBackgroundBasedOnProtectedStatus(noteId) { function setBranchBackgroundBasedOnProtectedStatus(noteId) {
getNodesByNoteId(noteId).map(node => node.toggleClass("protected", !!node.data.isProtected)); getNodesByNoteId(noteId).map(node => node.toggleClass("protected", node.data.isProtected));
} }
function setProtected(noteId, isProtected) { function setProtected(noteId, isProtected) {