From dbd8737f0ad97bec5abd925c3d373802c20fdc43 Mon Sep 17 00:00:00 2001 From: Abdo Date: Thu, 3 Jul 2025 10:58:30 +0300 Subject: [PATCH] Fix undo ops of add_note/update_notetype --- proto/anki/frontend.proto | 3 +++ qt/aqt/mediasrv.py | 24 ++++++++++++++++++------ ts/routes/editor/NoteEditor.svelte | 8 ++++---- ts/routes/editor/StickyBadge.svelte | 4 ++-- 4 files changed, 27 insertions(+), 12 deletions(-) diff --git a/proto/anki/frontend.proto b/proto/anki/frontend.proto index 60a82b845..f1156a21d 100644 --- a/proto/anki/frontend.proto +++ b/proto/anki/frontend.proto @@ -11,6 +11,7 @@ import "anki/scheduler.proto"; import "anki/generic.proto"; import "anki/search.proto"; import "anki/notes.proto"; +import "anki/notetypes.proto"; service FrontendService { // Returns values from the reviewer @@ -31,6 +32,8 @@ service FrontendService { // Editor rpc EditorUpdateNote(notes.UpdateNotesRequest) returns (generic.Empty); + rpc EditorUpdateNotetype(notetypes.Notetype) returns (generic.Empty); + rpc EditorAddNote(notes.AddNoteRequest) returns (generic.Empty); rpc ConvertPastedImage(ConvertPastedImageRequest) returns (ConvertPastedImageResponse); rpc RetrieveUrl(generic.String) returns (RetrieveUrlResponse); diff --git a/qt/aqt/mediasrv.py b/qt/aqt/mediasrv.py index e4c1b256d..4bf6578f0 100644 --- a/qt/aqt/mediasrv.py +++ b/qt/aqt/mediasrv.py @@ -602,14 +602,14 @@ def deck_options_ready() -> bytes: return b"" -def editor_update_note() -> bytes: - from aqt.editor import Editor - - output = raw_backend_request("update_notes")() +def editor_op_changes_request(endpoint: str) -> bytes: + output = raw_backend_request(endpoint)() response = OpChanges() response.ParseFromString(output) def handle_on_main() -> None: + from aqt.editor import Editor + handler = aqt.mw.app.activeWindow() if handler and isinstance(getattr(handler, "editor", None), Editor): handler = handler.editor # type: ignore @@ -620,6 +620,18 @@ def editor_update_note() -> bytes: return output +def editor_update_note() -> bytes: + return editor_op_changes_request("update_notes") + + +def editor_update_notetype() -> bytes: + return editor_op_changes_request("update_notetype") + + +def editor_add_note() -> bytes: + return editor_op_changes_request("add_note") + + def get_setting_json(getter: Callable[[str], Any]) -> bytes: req = generic_pb2.String() req.ParseFromString(request.data) @@ -822,6 +834,8 @@ post_handler_list = [ deck_options_require_close, deck_options_ready, editor_update_note, + editor_update_notetype, + editor_add_note, get_profile_config_json, set_profile_config_json, get_meta_json, @@ -854,13 +868,11 @@ exposed_backend_list = [ "get_note", "new_note", "note_fields_check", - "add_note", # NotetypesService "get_notetype", "get_notetype_names", "get_change_notetype_info", "get_cloze_field_ords", - "update_notetype", # StatsService "card_stats", "get_review_logs", diff --git a/ts/routes/editor/NoteEditor.svelte b/ts/routes/editor/NoteEditor.svelte index 9ea23807a..e4f768b78 100644 --- a/ts/routes/editor/NoteEditor.svelte +++ b/ts/routes/editor/NoteEditor.svelte @@ -225,7 +225,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html } values.push(field.config!.sticky); } - await updateNotetype(notetype); + await editorUpdateNotetype(notetype); setSticky(values); } @@ -452,7 +452,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html if (!(await noteCanBeAdded())) { return; } - await addNote({ + await editorAddNote({ note: note!, deckId, }); @@ -584,9 +584,9 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html editorUpdateNote, decodeIriPaths, noteFieldsCheck, - addNote, + editorAddNote, addMediaFromPath, - updateNotetype, + editorUpdateNotetype, closeAddCards as closeAddCardsBackend, } from "@generated/backend"; import { wrapInternal } from "@tslib/wrap"; diff --git a/ts/routes/editor/StickyBadge.svelte b/ts/routes/editor/StickyBadge.svelte index 0615665a8..c9bf5f355 100644 --- a/ts/routes/editor/StickyBadge.svelte +++ b/ts/routes/editor/StickyBadge.svelte @@ -15,7 +15,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import { context as editorFieldContext } from "./EditorField.svelte"; import type { Note } from "@generated/anki/notes_pb"; - import { getNotetype, updateNotetype } from "@generated/backend"; + import { getNotetype, editorUpdateNotetype } from "@generated/backend"; const animated = !document.body.classList.contains("reduce-motion"); @@ -32,7 +32,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html active = !active; const notetype = await getNotetype({ ntid: note.notetypeId }); notetype.fields[index].config!.sticky = active; - await updateNotetype(notetype); + await editorUpdateNotetype(notetype); } function shortcut(target: HTMLElement): () => void {