From cf99dde4805f1792d6a56156b6a0338aa684005c Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Fri, 16 Oct 2026 21:08:04 +0200 Subject: notes: an empty note body gets a file, and the second click writes Reported from use: a note created with only a title then saved left a db.json entry with no file beside it, and reopening it said the file was missing. Cause: FileView.setText("") on a path that view has not loaded creates no file at all and reports no error. The index write (always non-empty JSON) was fine, so only the body was lost, which is why it looked like a missing file rather than a failed save. Bodies are now written by a Process running cat > with the text on stdin: verified against empty and non-empty payloads, consecutive writes on one Process, and a store with no db.json at all. The exit code is the real outcome, so a refused write reports it. Second report in the same flow: the editor stays editable after the first click, so typing more and then pressing Commit & push dropped the edit, the push carrying only what the first click wrote. The second click now writes the current title and body before it commits and pushes. --- desktop/modules/notes/NotesPage.qml | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'desktop/modules/notes/NotesPage.qml') diff --git a/desktop/modules/notes/NotesPage.qml b/desktop/modules/notes/NotesPage.qml index 585fcfb..1a82254 100644 --- a/desktop/modules/notes/NotesPage.qml +++ b/desktop/modules/notes/NotesPage.qml @@ -19,9 +19,11 @@ import "Notes.js" as Notes // // Save is two clicks and each click does one thing. The first writes the note // and, when that has finished, arms the button as "Commit & push?"; the second -// commits and pushes and returns to the list. Arming the second click only -// after the write completes is what stops a quick second click from committing -// a note the first click has not written yet. +// writes whatever the editor holds now, then commits and pushes, then returns +// to the list. The second click writes as well because the editor stays +// editable in between: pushing without writing would throw away an edit made +// after the first click. Arming only after the first write completes is what +// stops a quick second click from committing a note that is not written yet. // // Nothing is remembered between visits: leaving the editor with text that was // not saved drops it, which is the clipboard page's own rule. @@ -78,12 +80,19 @@ Item { // The note is already on disk and only the push is owed, so this click // pushes rather than writing a second note. if (page.awaiting !== "") { - const id = page.awaiting === "create" ? page.owner.lastCreatedId : page.editing.id; + // The editor stays editable after the first click, so whatever was + // typed since is written before it is pushed: the push alone would + // leave that edit behind. + const kind = page.awaiting; + const id = kind === "create" ? page.owner.lastCreatedId : page.editing.id; page.busy = true; - page.owner.commitPush(page.awaiting, id, (ok, msg) => { - page.busy = false; - if (!ok) { page.owner.lastError = msg; return; } - page.toList(); + page.owner.update(id, titleField.text, bodyEdit.text, (ok, msg) => { + if (!ok) { page.busy = false; page.owner.lastError = msg; return; } + page.owner.commitPush(kind, id, (ok2, msg2) => { + page.busy = false; + if (!ok2) { page.owner.lastError = msg2; return; } + page.toList(); + }); }); return; } -- cgit v1.2.3