From ae42f5685bf6487c7576f314a48ff098a5c9a554 Mon Sep 17 00:00:00 2001 From: Abdo Date: Sat, 26 Jul 2025 22:29:19 +0300 Subject: [PATCH] Fix Create Copy --- qt/aqt/addcards.py | 19 +++++-------------- qt/aqt/editor.py | 13 +++++++------ qt/aqt/reviewer.py | 2 +- ts/routes/editor/NoteEditor.svelte | 7 +++++++ 4 files changed, 20 insertions(+), 21 deletions(-) diff --git a/qt/aqt/addcards.py b/qt/aqt/addcards.py index a748443f9..4bf44b5dd 100644 --- a/qt/aqt/addcards.py +++ b/qt/aqt/addcards.py @@ -65,12 +65,11 @@ class NewAddCards(QMainWindow): if deck_id or (deck_id := self.col.default_deck_for_notetype(note.mid)): self.deck_chooser.selected_deck_id = deck_id - new_note = self._new_note() - new_note.fields = note.fields[:] - new_note.tags = note.tags[:] - - self.editor.orig_note_id = note.id - self.setAndFocusNote(new_note) + self.editor.load_note( + mid=note.mid, + original_note_id=note.id, + focus_to=0, + ) def setupEditor(self) -> None: self.editor = aqt.editor.NewEditor( @@ -109,9 +108,6 @@ class NewAddCards(QMainWindow): def helpRequested(self) -> None: openHelp(HelpPage.ADDING_CARD_AND_NOTE) - def setAndFocusNote(self, note: Note) -> None: - self.editor.set_note(note, focusTo=0) - def show_notetype_selector(self) -> None: self.editor.call_after_note_saved(self.notetype_chooser.choose_notetype) @@ -147,11 +143,6 @@ class NewAddCards(QMainWindow): update_deck=False, ) - def _new_note(self) -> Note: - return self.col.new_note( - self.col.models.get(self.notetype_chooser.selected_notetype_id) - ) - def add_current_note(self) -> None: self.editor.web.eval(f"addCurrentNote({self.deck_chooser.selected_deck_id})") diff --git a/qt/aqt/editor.py b/qt/aqt/editor.py index 394751065..fd11d1b45 100644 --- a/qt/aqt/editor.py +++ b/qt/aqt/editor.py @@ -13,7 +13,6 @@ from dataclasses import dataclass from random import randrange from typing import Any -from anki._legacy import deprecated from anki.cards import Card from anki.hooks import runFilter from anki.models import NotetypeId @@ -85,8 +84,6 @@ class NewEditor: # Similar to currentField, but not set to None on a blur. May be # outside the bounds of the current notetype. self.last_field_index: int | None = None - # used when creating a copy of an existing note - self.orig_note_id: NoteId | None = None # current card, for card layout self.card: Card | None = None self.state: EditorState = EditorState.INITIAL @@ -397,7 +394,6 @@ require("anki/ui").loaded.then(() => require("anki/NoteEditor").instances[0].too self.currentField = None self.load_note(mid, focus_to=focus_to) - @deprecated(replaced_by=set_nid) def set_note( self, note: Note | None, @@ -413,7 +409,12 @@ require("anki/ui").loaded.then(() => require("anki/NoteEditor").instances[0].too self.widget.hide() @on_editor_ready - def load_note(self, mid: int, focus_to: int | None = None) -> None: + def load_note( + self, + mid: int, + original_note_id: NoteId | None = None, + focus_to: int | None = None, + ) -> None: self.widget.show() def oncallback(arg: Any) -> None: @@ -426,7 +427,7 @@ require("anki/ui").loaded.then(() => require("anki/NoteEditor").instances[0].too gui_hooks.editor_did_load_note(self) assert self.mw.pm.profile is not None - js = f"loadNote({json.dumps(self.nid)}, {mid}, {json.dumps(focus_to)}, {json.dumps(self.orig_note_id)});" + js = f"loadNote({json.dumps(self.nid)}, {mid}, {json.dumps(focus_to)}, {json.dumps(original_note_id)});" self.web.evalWithCallback( f'require("anki/ui").loaded.then(() => {{ {js} }})', oncallback ) diff --git a/qt/aqt/reviewer.py b/qt/aqt/reviewer.py index a8839c598..efa113729 100644 --- a/qt/aqt/reviewer.py +++ b/qt/aqt/reviewer.py @@ -1167,7 +1167,7 @@ timerStopped = false; def on_create_copy(self) -> None: if self.card: - aqt.dialogs.open("AddCards", self.mw).set_note( + aqt.dialogs.open("NewAddCards", self.mw).set_note( self.card.note(), self.card.current_deck_id() ) diff --git a/ts/routes/editor/NoteEditor.svelte b/ts/routes/editor/NoteEditor.svelte index fa5a55fb7..979c8e4b4 100644 --- a/ts/routes/editor/NoteEditor.svelte +++ b/ts/routes/editor/NoteEditor.svelte @@ -924,6 +924,13 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html }), ); } + if (originalNoteId) { + const originalNote = await getNote({ + nid: originalNoteId, + }); + note!.fields = originalNote.fields; + note!.tags = originalNote.tags; + } const fieldValues = ( await Promise.all( note!.fields.map((field) => encodeIriPaths({ val: field })),