aboutsummaryrefslogtreecommitdiff
path: root/ext/bg
diff options
context:
space:
mode:
Diffstat (limited to 'ext/bg')
-rw-r--r--ext/bg/js/options-form.js13
-rw-r--r--ext/bg/js/yomichan.js28
-rw-r--r--ext/bg/options.html9
3 files changed, 44 insertions, 6 deletions
diff --git a/ext/bg/js/options-form.js b/ext/bg/js/options-form.js
index 6e79303b..239b09d5 100644
--- a/ext/bg/js/options-form.js
+++ b/ext/bg/js/options-form.js
@@ -86,6 +86,17 @@ function populateAnkiDeckAndModel(opts) {
}});
}
+function updateAnkiStatus() {
+ $('.error-dlg').hide();
+ yomichan().api_getVersion({callback: (version) => {
+ if (version === null) {
+ $('.error-dlg-connection').show();
+ } else if (version !== yomichan().getApiVersion()) {
+ $('.error-dlg-version').show();
+ }
+ }});
+}
+
function populateAnkiFields(element, opts) {
const modelName = element.val();
if (modelName === null) {
@@ -119,6 +130,7 @@ function onOptionsGeneralChanged(e) {
saveOptions(optsNew, () => {
yomichan().setOptions(optsNew);
if (!optsOld.enableAnkiConnect && optsNew.enableAnkiConnect) {
+ updateAnkiStatus();
populateAnkiDeckAndModel(optsNew);
$('.options-anki').fadeIn();
} else if (optsOld.enableAnkiConnect && !optsNew.enableAnkiConnect) {
@@ -159,6 +171,7 @@ $(document).ready(() => {
$('.anki-model').change(onAnkiModelChanged);
if (opts.enableAnkiConnect) {
+ updateAnkiStatus();
populateAnkiDeckAndModel(opts);
$('.options-anki').show();
}
diff --git a/ext/bg/js/yomichan.js b/ext/bg/js/yomichan.js
index 03f9d082..b3e8bf71 100644
--- a/ext/bg/js/yomichan.js
+++ b/ext/bg/js/yomichan.js
@@ -99,6 +99,10 @@ class Yomichan {
this.notifyTabs('options', this.options);
}
+ getApiVersion() {
+ return 1;
+ }
+
notifyTabs(name, value) {
chrome.tabs.query({}, (tabs) => {
for (const tab of tabs) {
@@ -107,6 +111,16 @@ class Yomichan {
});
}
+ ankiInvokeSafe(action, params, pool, callback) {
+ this.api_getVersion({callback: (version) => {
+ if (version === this.getApiVersion()) {
+ this.ankiInvoke(action, params, pool, callback);
+ } else {
+ callback(null);
+ }
+ }});
+ }
+
ankiInvoke(action, params, pool, callback) {
if (this.options.enableAnkiConnect) {
if (pool !== null && this.asyncPools.hasOwnProperty(pool)) {
@@ -181,7 +195,7 @@ class Yomichan {
api_addDefinition({definition, mode, callback}) {
const note = this.formatNote(definition, mode);
- this.ankiInvoke('addNote', {note}, null, callback);
+ this.ankiInvokeSafe('addNote', {note}, null, callback);
}
api_canAddDefinitions({definitions, modes, callback}) {
@@ -192,7 +206,7 @@ class Yomichan {
}
}
- this.ankiInvoke('canAddNotes', {notes}, 'notes', (results) => {
+ this.ankiInvokeSafe('canAddNotes', {notes}, 'notes', (results) => {
const states = [];
if (results !== null) {
@@ -219,15 +233,19 @@ class Yomichan {
}
api_getDeckNames({callback}) {
- this.ankiInvoke('deckNames', {}, null, callback);
+ this.ankiInvokeSafe('deckNames', {}, null, callback);
}
api_getModelNames({callback}) {
- this.ankiInvoke('modelNames', {}, null, callback);
+ this.ankiInvokeSafe('modelNames', {}, null, callback);
}
api_getModelFieldNames({modelName, callback}) {
- this.ankiInvoke('modelFieldNames', {modelName}, null, callback);
+ this.ankiInvokeSafe('modelFieldNames', {modelName}, null, callback);
+ }
+
+ api_getVersion({callback}) {
+ this.ankiInvoke('version', {}, null, callback);
}
api_getOptions({callback}) {
diff --git a/ext/bg/options.html b/ext/bg/options.html
index 55df936b..c6e14fdf 100644
--- a/ext/bg/options.html
+++ b/ext/bg/options.html
@@ -16,6 +16,10 @@
border-right: 1px #ddd solid;
padding: 10px;
}
+
+ .error-dlg {
+ display: none;
+ }
</style>
</head>
<body>
@@ -60,7 +64,7 @@
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<div class="checkbox">
- <label class="control-label"><input type="checkbox" id="enable-anki-connect"> Enable <a href="https://foosoft.net/projects/yomichan">AnkiConnect</a></label>
+ <label class="control-label"><input type="checkbox" id="enable-anki-connect"> Enable <a href="https://foosoft.net/projects/anki-connect">AnkiConnect</a></label>
</div>
</div>
</div>
@@ -71,6 +75,9 @@
<div class="options-anki">
<h2>Anki</h2>
+ <div class="alert alert-danger error-dlg error-dlg-connection"><strong>Unable to connect</strong>: is the <a href="https://foosoft.net/projects/anki-connect">AnkiConnect</a> extension for <a href="http://ankisrs.net/">Anki</a> installed and running?</div>
+ <div class="alert alert-warning error-dlg error-dlg-version"><strong>Unsupported version</strong>: the installed version of the <a href="https://foosoft.net/projects/anki-connect">AnkiConnect</a> extension for <a href="http://ankisrs.net/">Anki</a> is not compatible with this release.</div>
+
<form class="form-horizontal">
<ul class="nav nav-tabs">
<li class="active"><a href="#vocab" data-toggle="tab">Vocabulary</a></li>