diff options
author | Alex Yatskov <alex@foosoft.net> | 2016-05-29 14:20:13 -0700 |
---|---|---|
committer | Alex Yatskov <alex@foosoft.net> | 2016-05-29 14:20:13 -0700 |
commit | 6f63999dce9f14103d6dfae155c4fc0c151ab8de (patch) | |
tree | 2a8621b94c0bc0dc3d66526b4545c093cde870ea | |
parent | 9ab95e6602e7bf327764f356efc388558856e6e3 (diff) |
Adding version checking
-rw-r--r-- | ext/bg/js/options-form.js | 13 | ||||
-rw-r--r-- | ext/bg/js/yomichan.js | 28 | ||||
-rw-r--r-- | ext/bg/options.html | 9 |
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> |