Fix undo ops of add_note/update_notetype

This commit is contained in:
Abdo 2025-07-03 10:58:30 +03:00
parent 5a7832b16d
commit dbd8737f0a
4 changed files with 27 additions and 12 deletions

View file

@ -11,6 +11,7 @@ import "anki/scheduler.proto";
import "anki/generic.proto"; import "anki/generic.proto";
import "anki/search.proto"; import "anki/search.proto";
import "anki/notes.proto"; import "anki/notes.proto";
import "anki/notetypes.proto";
service FrontendService { service FrontendService {
// Returns values from the reviewer // Returns values from the reviewer
@ -31,6 +32,8 @@ service FrontendService {
// Editor // Editor
rpc EditorUpdateNote(notes.UpdateNotesRequest) returns (generic.Empty); rpc EditorUpdateNote(notes.UpdateNotesRequest) returns (generic.Empty);
rpc EditorUpdateNotetype(notetypes.Notetype) returns (generic.Empty);
rpc EditorAddNote(notes.AddNoteRequest) returns (generic.Empty);
rpc ConvertPastedImage(ConvertPastedImageRequest) rpc ConvertPastedImage(ConvertPastedImageRequest)
returns (ConvertPastedImageResponse); returns (ConvertPastedImageResponse);
rpc RetrieveUrl(generic.String) returns (RetrieveUrlResponse); rpc RetrieveUrl(generic.String) returns (RetrieveUrlResponse);

View file

@ -602,14 +602,14 @@ def deck_options_ready() -> bytes:
return b"" return b""
def editor_update_note() -> bytes: def editor_op_changes_request(endpoint: str) -> bytes:
from aqt.editor import Editor output = raw_backend_request(endpoint)()
output = raw_backend_request("update_notes")()
response = OpChanges() response = OpChanges()
response.ParseFromString(output) response.ParseFromString(output)
def handle_on_main() -> None: def handle_on_main() -> None:
from aqt.editor import Editor
handler = aqt.mw.app.activeWindow() handler = aqt.mw.app.activeWindow()
if handler and isinstance(getattr(handler, "editor", None), Editor): if handler and isinstance(getattr(handler, "editor", None), Editor):
handler = handler.editor # type: ignore handler = handler.editor # type: ignore
@ -620,6 +620,18 @@ def editor_update_note() -> bytes:
return output 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: def get_setting_json(getter: Callable[[str], Any]) -> bytes:
req = generic_pb2.String() req = generic_pb2.String()
req.ParseFromString(request.data) req.ParseFromString(request.data)
@ -822,6 +834,8 @@ post_handler_list = [
deck_options_require_close, deck_options_require_close,
deck_options_ready, deck_options_ready,
editor_update_note, editor_update_note,
editor_update_notetype,
editor_add_note,
get_profile_config_json, get_profile_config_json,
set_profile_config_json, set_profile_config_json,
get_meta_json, get_meta_json,
@ -854,13 +868,11 @@ exposed_backend_list = [
"get_note", "get_note",
"new_note", "new_note",
"note_fields_check", "note_fields_check",
"add_note",
# NotetypesService # NotetypesService
"get_notetype", "get_notetype",
"get_notetype_names", "get_notetype_names",
"get_change_notetype_info", "get_change_notetype_info",
"get_cloze_field_ords", "get_cloze_field_ords",
"update_notetype",
# StatsService # StatsService
"card_stats", "card_stats",
"get_review_logs", "get_review_logs",

View file

@ -225,7 +225,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
} }
values.push(field.config!.sticky); values.push(field.config!.sticky);
} }
await updateNotetype(notetype); await editorUpdateNotetype(notetype);
setSticky(values); setSticky(values);
} }
@ -452,7 +452,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
if (!(await noteCanBeAdded())) { if (!(await noteCanBeAdded())) {
return; return;
} }
await addNote({ await editorAddNote({
note: note!, note: note!,
deckId, deckId,
}); });
@ -584,9 +584,9 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
editorUpdateNote, editorUpdateNote,
decodeIriPaths, decodeIriPaths,
noteFieldsCheck, noteFieldsCheck,
addNote, editorAddNote,
addMediaFromPath, addMediaFromPath,
updateNotetype, editorUpdateNotetype,
closeAddCards as closeAddCardsBackend, closeAddCards as closeAddCardsBackend,
} from "@generated/backend"; } from "@generated/backend";
import { wrapInternal } from "@tslib/wrap"; import { wrapInternal } from "@tslib/wrap";

View file

@ -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 { context as editorFieldContext } from "./EditorField.svelte";
import type { Note } from "@generated/anki/notes_pb"; 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"); 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; active = !active;
const notetype = await getNotetype({ ntid: note.notetypeId }); const notetype = await getNotetype({ ntid: note.notetypeId });
notetype.fields[index].config!.sticky = active; notetype.fields[index].config!.sticky = active;
await updateNotetype(notetype); await editorUpdateNotetype(notetype);
} }
function shortcut(target: HTMLElement): () => void { function shortcut(target: HTMLElement): () => void {