Fix Create Copy

This commit is contained in:
Abdo 2025-07-26 22:29:19 +03:00
parent d5d298fc3f
commit ae42f5685b
4 changed files with 20 additions and 21 deletions

View file

@ -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})")

View file

@ -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
)

View file

@ -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()
)

View file

@ -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 })),