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.collection import OpChanges, SearchNode
from anki.decks import DeckId from anki.decks import DeckId
from anki.models import NotetypeId 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 anki.utils import html_to_text_line, is_mac
from aqt import AnkiQt, gui_hooks from aqt import AnkiQt, gui_hooks
from aqt.deckchooser import DeckChooser from aqt.deckchooser import DeckChooser
from aqt.notetypechooser import NotetypeChooser from aqt.notetypechooser import NotetypeChooser
from aqt.operations.note import add_note
from aqt.qt import * from aqt.qt import *
from aqt.sound import av_player
from aqt.utils import ( from aqt.utils import (
HelpPage, HelpPage,
add_close_shortcut, add_close_shortcut,
ask_user_dialog, ask_user_dialog,
askUser,
downArrow, downArrow,
openHelp, openHelp,
restoreGeom, restoreGeom,
saveGeom, saveGeom,
shortcut, shortcut,
showWarning,
tooltip,
tr, tr,
) )
@ -228,59 +223,6 @@ class AddCards(QMainWindow):
def add_current_note(self) -> None: def add_current_note(self) -> None:
self.editor.web.eval(f"addCurrentNote({self.deck_chooser.selected_deck_id})") 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: def keyPressEvent(self, evt: QKeyEvent) -> None:
if evt.key() == Qt.Key.Key_Escape: if evt.key() == Qt.Key.Key_Escape:
self.close() self.close()
@ -340,10 +282,6 @@ class AddCards(QMainWindow):
print("deckChooser is deprecated; use deck_chooser instead") print("deckChooser is deprecated; use deck_chooser instead")
return self.deck_chooser return self.deck_chooser
addCards = add_current_note
_addCards = _add_current_note
onModelChange = on_notetype_change
@deprecated(info="obsolete") @deprecated(info="obsolete")
def addNote(self, note: Note) -> None: def addNote(self, note: Note) -> None:
pass pass

View file

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

View file

@ -6,7 +6,6 @@ from collections.abc import Callable
import aqt.editor import aqt.editor
from anki.collection import OpChanges from anki.collection import OpChanges
from anki.errors import NotFoundError
from aqt import gui_hooks from aqt import gui_hooks
from aqt.qt import * from aqt.qt import *
from aqt.utils import add_close_shortcut, restoreGeom, saveGeom, tr from aqt.utils import add_close_shortcut, restoreGeom, saveGeom, tr
@ -47,18 +46,7 @@ class EditCurrent(QMainWindow):
self, changes: OpChanges, handler: object | None self, changes: OpChanges, handler: object | None
) -> None: ) -> None:
if changes.note_text and handler is not self.editor: if changes.note_text and handler is not self.editor:
# reload note 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)
def cleanup(self) -> None: def cleanup(self) -> None:
gui_hooks.operation_did_execute.remove(self.on_operation_did_execute) 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._legacy import deprecated
from anki.cards import Card from anki.cards import Card
from anki.hooks import runFilter 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.notes import Note, NoteId
from anki.utils import is_win from anki.utils import is_win
from aqt import AnkiQt, gui_hooks from aqt import AnkiQt, gui_hooks
from aqt.operations.notetype import update_notetype_legacy
from aqt.qt import * from aqt.qt import *
from aqt.sound import av_player from aqt.sound import av_player
from aqt.utils import shortcut, showWarning from aqt.utils import shortcut, showWarning
@ -119,7 +118,6 @@ class Editor:
self.mw = mw self.mw = mw
self.widget = widget self.widget = widget
self.parentWindow = parentWindow self.parentWindow = parentWindow
self.mid: NotetypeId | None = None
# legacy argument provided? # legacy argument provided?
if addMode is not None: if addMode is not None:
editor_mode = EditorMode.ADD_CARDS if addMode else EditorMode.EDIT_CURRENT 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 from aqt.fields import FieldDialog
def on_note_info(note_info: NoteInfo) -> None: def on_note_info(note_info: NoteInfo) -> None:
FieldDialog( note_type = self.mw.col.models.get(note_info.mid)
self.mw, self.mw.col.models.get(note_info.mid), parent=self.parentWindow assert note_type is not None
) FieldDialog(self.mw, note_type, parent=self.parentWindow)
self.get_note_info(on_note_info) self.get_note_info(on_note_info)
@ -456,9 +454,6 @@ require("anki/ui").loaded.then(() => require("anki/NoteEditor").instances[0].too
elif hide: elif hide:
self.widget.hide() self.widget.hide()
def loadNoteKeepingFocus(self) -> None:
self.loadNote(self.currentField)
@on_editor_ready @on_editor_ready
def load_note(self, mid: int, focus_to: int | None = None) -> None: 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 f'require("anki/ui").loaded.then(() => {{ {js} }})', oncallback
) )
def reload_note(self) -> None:
self.web.eval("reloadNote();")
def call_after_note_saved( def call_after_note_saved(
self, callback: Callable, keepFocus: bool = False self, callback: Callable, keepFocus: bool = False
) -> None: ) -> None:

View file

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