Remove editor.note refs and fix some lint errors

This commit is contained in:
Abdo 2025-06-21 10:08:45 +03:00
parent dabd0def55
commit c4a9ba254e
5 changed files with 17 additions and 97 deletions

View file

@ -11,26 +11,21 @@ from anki._legacy import deprecated
from anki.collection import OpChanges, SearchNode
from anki.decks import DeckId
from anki.models import NotetypeId
from anki.notes import Note, NoteFieldsCheckResult, NoteId
from anki.notes import Note, NoteId
from anki.utils import html_to_text_line, is_mac
from aqt import AnkiQt, gui_hooks
from aqt.deckchooser import DeckChooser
from aqt.notetypechooser import NotetypeChooser
from aqt.operations.note import add_note
from aqt.qt import *
from aqt.sound import av_player
from aqt.utils import (
HelpPage,
add_close_shortcut,
ask_user_dialog,
askUser,
downArrow,
openHelp,
restoreGeom,
saveGeom,
shortcut,
showWarning,
tooltip,
tr,
)
@ -228,59 +223,6 @@ class AddCards(QMainWindow):
def add_current_note(self) -> None:
self.editor.web.eval(f"addCurrentNote({self.deck_chooser.selected_deck_id})")
def _add_current_note(self) -> None:
note = self.editor.note
if not self._note_can_be_added(note):
return
target_deck_id = self.deck_chooser.selected_deck_id
def on_success(changes: OpChanges) -> None:
# only used for detecting changed sticky fields on close
self._last_added_note = note
self.addHistory(note)
tooltip(tr.adding_added(), period=500)
av_player.stop_and_clear_queue()
self._load_new_note(sticky_fields_from=note)
gui_hooks.add_cards_did_add_note(note)
add_note(parent=self, note=note, target_deck_id=target_deck_id).success(
on_success
).run_in_background()
def _note_can_be_added(self, note: Note) -> bool:
result = note.fields_check()
# no problem, duplicate, and confirmed cloze cases
problem = None
if result == NoteFieldsCheckResult.EMPTY:
if self.editor.current_notetype_is_image_occlusion():
problem = tr.notetypes_no_occlusion_created2()
else:
problem = tr.adding_the_first_field_is_empty()
elif result == NoteFieldsCheckResult.MISSING_CLOZE:
if not askUser(tr.adding_you_have_a_cloze_deletion_note()):
return False
elif result == NoteFieldsCheckResult.NOTETYPE_NOT_CLOZE:
problem = tr.adding_cloze_outside_cloze_notetype()
elif result == NoteFieldsCheckResult.FIELD_NOT_CLOZE:
problem = tr.adding_cloze_outside_cloze_field()
# filter problem through add-ons
problem = gui_hooks.add_cards_will_add_note(problem, note)
if problem is not None:
showWarning(problem, help=HelpPage.ADDING_CARD_AND_NOTE)
return False
optional_problems: list[str] = []
gui_hooks.add_cards_might_add_note(optional_problems, note)
if not all(askUser(op) for op in optional_problems):
return False
return True
def keyPressEvent(self, evt: QKeyEvent) -> None:
if evt.key() == Qt.Key.Key_Escape:
self.close()
@ -340,10 +282,6 @@ class AddCards(QMainWindow):
print("deckChooser is deprecated; use deck_chooser instead")
return self.deck_chooser
addCards = add_current_note
_addCards = _add_current_note
onModelChange = on_notetype_change
@deprecated(info="obsolete")
def addNote(self, note: Note) -> None:
pass

View file

@ -20,7 +20,6 @@ from anki.cards import Card, CardId
from anki.collection import Collection, Config, OpChanges, SearchNode
from anki.consts import *
from anki.decks import DeckId
from anki.errors import NotFoundError
from anki.lang import without_unicode_isolation
from anki.models import NotetypeId
from anki.notes import NoteId
@ -190,15 +189,7 @@ class Browser(QMainWindow):
# fixme: this will leave the splitter shown, but with no current
# note being edited
assert self.editor is not None
note = self.editor.note
if note:
try:
note.load()
except NotFoundError:
self.editor.set_note(None)
return
self.editor.set_note(note)
self.editor.reload_note()
if changes.browser_table and changes.card:
self.card = self.table.get_single_selected_card()
@ -839,7 +830,7 @@ class Browser(QMainWindow):
if self._previewer:
self._previewer.close()
elif self.editor.note:
else:
self._previewer = PreviewDialog(self, self.mw, self._on_preview_closed)
self._previewer.open()
self.toggle_preview_button_state(True)
@ -1261,7 +1252,7 @@ class Browser(QMainWindow):
def cb():
assert self.editor is not None and self.editor.web is not None
self.editor.web.setFocus()
self.editor.loadNote(focusTo=0)
self.editor.reload_note()
assert self.editor is not None
self.editor.call_after_note_saved(cb)

View file

@ -6,7 +6,6 @@ from collections.abc import Callable
import aqt.editor
from anki.collection import OpChanges
from anki.errors import NotFoundError
from aqt import gui_hooks
from aqt.qt import *
from aqt.utils import add_close_shortcut, restoreGeom, saveGeom, tr
@ -47,18 +46,7 @@ class EditCurrent(QMainWindow):
self, changes: OpChanges, handler: object | None
) -> None:
if changes.note_text and handler is not self.editor:
# reload note
note = self.editor.note
try:
assert note is not None
note.load()
except NotFoundError:
# note's been deleted
self.cleanup()
self.close()
return
self.editor.set_note(note)
self.editor.reload_note()
def cleanup(self) -> None:
gui_hooks.operation_did_execute.remove(self.on_operation_did_execute)

View file

@ -17,11 +17,10 @@ from typing import Any
from anki._legacy import deprecated
from anki.cards import Card
from anki.hooks import runFilter
from anki.models import NotetypeDict, NotetypeId, StockNotetype
from anki.models import NotetypeId
from anki.notes import Note, NoteId
from anki.utils import is_win
from aqt import AnkiQt, gui_hooks
from aqt.operations.notetype import update_notetype_legacy
from aqt.qt import *
from aqt.sound import av_player
from aqt.utils import shortcut, showWarning
@ -119,7 +118,6 @@ class Editor:
self.mw = mw
self.widget = widget
self.parentWindow = parentWindow
self.mid: NotetypeId | None = None
# legacy argument provided?
if addMode is not None:
editor_mode = EditorMode.ADD_CARDS if addMode else EditorMode.EDIT_CURRENT
@ -341,9 +339,9 @@ require("anki/ui").loaded.then(() => require("anki/NoteEditor").instances[0].too
from aqt.fields import FieldDialog
def on_note_info(note_info: NoteInfo) -> None:
FieldDialog(
self.mw, self.mw.col.models.get(note_info.mid), parent=self.parentWindow
)
note_type = self.mw.col.models.get(note_info.mid)
assert note_type is not None
FieldDialog(self.mw, note_type, parent=self.parentWindow)
self.get_note_info(on_note_info)
@ -456,9 +454,6 @@ require("anki/ui").loaded.then(() => require("anki/NoteEditor").instances[0].too
elif hide:
self.widget.hide()
def loadNoteKeepingFocus(self) -> None:
self.loadNote(self.currentField)
@on_editor_ready
def load_note(self, mid: int, focus_to: int | None = None) -> None:
@ -479,6 +474,9 @@ require("anki/ui").loaded.then(() => require("anki/NoteEditor").instances[0].too
f'require("anki/ui").loaded.then(() => {{ {js} }})', oncallback
)
def reload_note(self) -> None:
self.web.eval("reloadNote();")
def call_after_note_saved(
self, callback: Callable, keepFocus: bool = False
) -> None:

View file

@ -844,6 +844,10 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
return note!.id;
}
async function reloadNote() {
await loadNote(note!.id, notetypeMeta.id, 0, null);
}
$: signalEditorState($editorState);
$: $editorState = getEditorState(
@ -871,6 +875,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
Object.assign(globalThis, {
loadNote,
reloadNote,
saveSession,
setFields,
setCollapsed,