37 lines
895 B
Python
37 lines
895 B
Python
|
# Copyright: Ankitects Pty Ltd and contributors
|
||
|
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||
|
|
||
|
from __future__ import annotations
|
||
|
|
||
|
import enum
|
||
|
|
||
|
from aqt import AnkiQt
|
||
|
|
||
|
|
||
|
class Change(enum.Enum):
|
||
|
NO_CHANGE = 0
|
||
|
BASIC_CHANGE = 1
|
||
|
SCHEMA_CHANGE = 2
|
||
|
|
||
|
|
||
|
class ChangeTracker:
|
||
|
_changed = Change.NO_CHANGE
|
||
|
|
||
|
def __init__(self, mw: AnkiQt):
|
||
|
self.mw = mw
|
||
|
|
||
|
def mark_basic(self):
|
||
|
if self._changed == Change.NO_CHANGE:
|
||
|
self._changed = Change.BASIC_CHANGE
|
||
|
|
||
|
def mark_schema(self) -> bool:
|
||
|
"If false, processing should be aborted."
|
||
|
if self._changed != Change.SCHEMA_CHANGE:
|
||
|
if not self.mw.confirm_schema_modification():
|
||
|
return False
|
||
|
self._changed = Change.SCHEMA_CHANGE
|
||
|
return True
|
||
|
|
||
|
def changed(self) -> bool:
|
||
|
return self._changed != Change.NO_CHANGE
|