Merge pull request #484 from Arthur-Milchior/addon_show_config

hook prettify_json
This commit is contained in:
Damien Elmes 2020-03-04 21:11:18 +10:00 committed by GitHub
commit b87db06867
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 86 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")
@ -1304,6 +1301,7 @@ class ConfigEditor(QDialog):
def accept(self):
txt = self.form.editor.toPlainText()
txt = gui_hooks.addon_config_editor_will_save_json(txt)
try:
new_conf = json.loads(txt)
except Exception as e:

View File

@ -75,6 +75,66 @@ 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 _AddonConfigEditorWillSaveJsonFilter:
"""Allows changing the text of the json configuration that was
received from the user before actually reading it. For
example, you can replace new line in strings by some "\n"."""
_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_save_json = _AddonConfigEditorWillSaveJsonFilter()
class _AvPlayerDidBeginPlayingHook:
_hooks: List[Callable[["aqt.sound.Player", "anki.sound.AVTag"], None]] = []

View File

@ -452,6 +452,26 @@ 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.""",
),
Hook(
name="addon_config_editor_will_save_json",
args=["text: str"],
return_type="str",
doc="""Allows changing the text of the json configuration that was
received from the user before actually reading it. For
example, you can replace new line in strings by some "\\\\n".""",
),
# Other
###################
Hook(