update error handling

This commit is contained in:
Alex Yatskov 2017-09-22 19:39:05 -07:00
parent 27296de9f5
commit 8ba8397170
7 changed files with 31 additions and 42 deletions

View File

@ -62,7 +62,7 @@ class AnkiConnect {
if (this.remoteVersion < this.localVersion) {
this.remoteVersion = await this.ankiInvoke('version');
if (this.remoteVersion < this.localVersion) {
throw 'extension and plugin versions incompatible';
throw 'Extension and plugin versions incompatible';
}
}
}

View File

@ -57,7 +57,7 @@ async function audioBuildUrl(definition, mode, cache={}) {
const xhr = new XMLHttpRequest();
xhr.open('POST', 'https://www.japanesepod101.com/learningcenter/reference/dictionary_post');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.addEventListener('error', () => reject('failed to scrape audio data'));
xhr.addEventListener('error', () => reject('Failed to scrape audio data'));
xhr.addEventListener('load', () => {
cache[definition.expression] = xhr.responseText;
resolve(xhr.responseText);
@ -87,7 +87,7 @@ async function audioBuildUrl(definition, mode, cache={}) {
} else {
const xhr = new XMLHttpRequest();
xhr.open('GET', `http://jisho.org/search/${definition.expression}`);
xhr.addEventListener('error', () => reject('failed to scrape audio data'));
xhr.addEventListener('error', () => reject('Failed to scrape audio data'));
xhr.addEventListener('load', () => {
cache[definition.expression] = xhr.responseText;
resolve(xhr.responseText);

View File

@ -25,7 +25,7 @@ class Database {
async prepare() {
if (this.db) {
throw 'database already initialized';
throw 'Database already initialized';
}
this.db = new Dexie('dict');
@ -46,7 +46,7 @@ class Database {
async purge() {
if (!this.db) {
throw 'database not initialized';
throw 'Database not initialized';
}
this.db.close();
@ -59,7 +59,7 @@ class Database {
async findTerms(term, titles) {
if (!this.db) {
throw 'database not initialized';
throw 'Database not initialized';
}
const results = [];
@ -83,7 +83,7 @@ class Database {
async findTermFreq(term, titles) {
if (!this.db) {
throw 'database not initialized';
throw 'Database not initialized';
}
const results = [];
@ -98,7 +98,7 @@ class Database {
async findKanji(kanji, titles) {
if (!this.db) {
return Promise.reject('database not initialized');
throw 'Database not initialized';
}
const results = [];
@ -121,7 +121,7 @@ class Database {
async findKanjiFreq(kanji, titles) {
if (!this.db) {
throw 'database not initialized';
throw 'Database not initialized';
}
const results = [];
@ -136,7 +136,7 @@ class Database {
async findTagForTitle(name, title) {
if (!this.db) {
throw 'database not initialized';
throw 'Database not initialized';
}
this.tagCache[title] = this.tagCache[title] || {};
@ -159,23 +159,23 @@ class Database {
if (this.db) {
return this.db.dictionaries.toArray();
} else {
throw 'database not initialized';
throw 'Database not initialized';
}
}
async importDictionary(archive, callback) {
if (!this.db) {
return Promise.reject('database not initialized');
throw 'Database not initialized';
}
const indexDataLoaded = async summary => {
if (summary.version > 2) {
throw 'unsupported dictionary version';
throw 'Unsupported dictionary version';
}
const count = await this.db.dictionaries.where('title').equals(summary.title).count();
if (count > 0) {
throw `dictionary "${summary.title}" is already imported`;
throw 'Dictionary is already imported';
}
await this.db.dictionaries.add(summary);
@ -329,12 +329,12 @@ class Database {
const indexFile = zip.files['index.json'];
if (!indexFile) {
throw 'no dictionary index found in archive';
throw 'No dictionary index found in archive';
}
const index = JSON.parse(await indexFile.async('string'));
if (!index.title || !index.revision) {
throw 'unrecognized dictionary format';
throw 'Unrecognized dictionary format';
}
const summary = {

View File

@ -22,7 +22,7 @@ function requestJson(url, action, params) {
const xhr = new XMLHttpRequest();
xhr.overrideMimeType('application/json');
xhr.addEventListener('load', () => resolve(xhr.responseText));
xhr.addEventListener('error', () => reject('failed to execute network request'));
xhr.addEventListener('error', () => reject('Failed to connect'));
xhr.open(action, url);
if (params) {
xhr.send(JSON.stringify(params));
@ -34,7 +34,7 @@ function requestJson(url, action, params) {
return JSON.parse(responseText);
}
catch (e) {
return Promise.reject('invalid JSON response');
return Promise.reject('Invalid response');
}
});
}

View File

@ -142,7 +142,7 @@ async function onReady() {
$('#scan-length').val(options.scanning.length);
$('#scan-modifier-key').val(options.scanning.modifier);
$('#dict-purge').click(utilAsync(onDictionaryPurge));
$('#dict-purge-link').click(utilAsync(onDictionaryPurge));
$('#dict-file').change(utilAsync(onDictionaryImport));
$('#anki-enable').prop('checked', options.anki.enable);
@ -179,7 +179,7 @@ $(document).ready(utilAsync(onReady));
function dictionaryErrorShow(error) {
const dialog = $('#dict-error');
if (error) {
dialog.show().find('span').text(error);
dialog.show().text(error);
} else {
dialog.hide();
}
@ -245,7 +245,7 @@ async function onDictionaryPurge(e) {
e.preventDefault();
const dictControls = $('#dict-importer, #dict-groups').hide();
const dictProgress = $('#dict-purge-progress').show();
const dictProgress = $('#dict-purge').show();
try {
dictionaryErrorShow();
@ -314,7 +314,7 @@ function ankiSpinnerShow(show) {
function ankiErrorShow(error) {
const dialog = $('#anki-error');
if (error) {
dialog.show().find('span').text(error);
dialog.show().text(error);
}
else {
dialog.hide();

View File

@ -7,7 +7,7 @@
<link rel="stylesheet" type="text/css" href="/mixed/lib/bootstrap/css/bootstrap-theme.min.css">
<style>
#anki-spinner, #anki-general, #anki-error,
#dict-spinner, #dict-error, #dict-warning, #dict-purge-progress, #dict-import-progress,
#dict-spinner, #dict-error, #dict-warning, #dict-purge, #dict-import-progress,
#debug, .options-advanced {
display: none;
}
@ -129,24 +129,16 @@
<p class="help-block">
Yomichan can import and use a variety of dictionary formats. Unneeded dictionaries can be disabled,
or you can simply <a href="#" id="dict-purge">purge the database</a> to delete everything.
or you can simply <a href="#" id="dict-purge-link">purge the database</a> to delete everything.
</p>
<p class="help-block">
Please visit the <a href="https://foosoft.net/projects/yomichan" target="_blank">Yomichan</a> homepage to download free
dictionaries that you can use with this extension.
</p>
<div id="dict-purge-progress" class="text-danger">Dictionary data is being purged, please be patient...</div>
<div class="alert alert-warning" id="dict-warning">
<strong>Warning:</strong>
<span>no dictionaries found; please use the importer below to install packaged dictionaries</span>
</div>
<div class="alert alert-danger" id="dict-error">
<strong>Error:</strong>
<span></span>
</div>
<div class="text-danger" id="dict-purge">Dictionary data is being purged, please be patient...</div>
<div class="alert alert-warning" id="dict-warning">No dictionaries have been installed</div>
<div class="alert alert-danger" id="dict-error"></div>
<div id="dict-groups"></div>
@ -174,10 +166,7 @@
<a href="https://foosoft.net/projects/anki-connect/" target="_blank">AnkiConnect</a> plugin.
</p>
<div class="alert alert-danger" id="anki-error">
<strong>Error:</strong>
<span></span>
</div>
<div class="alert alert-danger" id="anki-error"></div>
<div class="checkbox">
<label><input type="checkbox" id="anki-enable"> Enable Anki integration</label>

View File

@ -32,11 +32,11 @@ class Display {
}
onError(error) {
throw 'override me';
throw 'Override me';
}
onSearchClear() {
throw 'override me';
throw 'Override me';
}
onSourceTermView(e) {
@ -350,7 +350,7 @@ class Display {
Display.adderButtonFind(index, mode).addClass('disabled');
Display.viewerButtonFind(index).removeClass('pending disabled').data('noteId', noteId);
} else {
throw 'note could note be added';
throw 'Note could note be added';
}
} catch (e) {
this.onError(e);