hook prettify_json

This commit is contained in:
Arthur Milchior 2020-03-02 00:54:58 +01:00
parent e9f4ac0e14
commit e4986c7784
3 changed files with 48 additions and 8 deletions

View file

@ -26,6 +26,7 @@ import aqt
import aqt.forms
from anki.httpclient import HttpClient
from anki.lang import _, ngettext
from aqt import gui_hooks
from aqt.qt import *
from aqt.utils import (
TR,
@ -1284,15 +1285,11 @@ class ConfigEditor(QDialog):
self.form.scrollArea.setVisible(False)
def updateText(self, conf):
self.form.editor.setPlainText(
json.dumps(
conf,
ensure_ascii=False,
sort_keys=True,
indent=4,
separators=(",", ": "),
)
text = json.dumps(
conf, ensure_ascii=False, sort_keys=True, indent=4, separators=(",", ": "),
)
text = gui_hooks.addon_config_editor_will_display_json(text)
self.form.editor.setPlainText(text)
def onClose(self):
saveGeom(self, "addonconf")

View file

@ -75,6 +75,37 @@ class _AddCardsWillShowHistoryMenuHook:
add_cards_will_show_history_menu = _AddCardsWillShowHistoryMenuHook()
class _AddonConfigEditorWillDisplayJsonFilter:
"""Allows changing the text of the json configuration before actually
displaying it to the user. For example, you can replace "\n" by
some actual new line. Then you can replace the new lines by "\n"
while reading the file and let the user uses real new line in
string instead of its encoding."""
_hooks: List[Callable[[str], str]] = []
def append(self, cb: Callable[[str], str]) -> None:
"""(text: str)"""
self._hooks.append(cb)
def remove(self, cb: Callable[[str], str]) -> None:
if cb in self._hooks:
self._hooks.remove(cb)
def __call__(self, text: str) -> str:
for filter in self._hooks:
try:
text = filter(text)
except:
# if the hook fails, remove it
self._hooks.remove(filter)
raise
return text
addon_config_editor_will_display_json = _AddonConfigEditorWillDisplayJsonFilter()
class _AvPlayerDidBeginPlayingHook:
_hooks: List[Callable[["aqt.sound.Player", "anki.sound.AVTag"], None]] = []

View file

@ -452,6 +452,18 @@ def emptyNewCard():
args=["player: aqt.sound.Player", "tag: anki.sound.AVTag"],
),
Hook(name="av_player_did_end_playing", args=["player: aqt.sound.Player"]),
# Addon
###################
Hook(
name="addon_config_editor_will_display_json",
args=["text: str"],
return_type="str",
doc="""Allows changing the text of the json configuration before actually
displaying it to the user. For example, you can replace "\\\\n" by
some actual new line. Then you can replace the new lines by "\\\\n"
while reading the file and let the user uses real new line in
string instead of its encoding.""",
),
# Other
###################
Hook(