switch to new ankiconnect interface
This commit is contained in:
parent
1a52a2d8d5
commit
64db42d536
@ -20,7 +20,7 @@ class AnkiConnect {
|
||||
constructor(server) {
|
||||
this.server = server;
|
||||
this.asyncPools = {};
|
||||
this.localVersion = 1;
|
||||
this.localVersion = 2;
|
||||
this.remoteVersion = null;
|
||||
}
|
||||
|
||||
|
@ -100,20 +100,23 @@ class Yomichan {
|
||||
note.deckName = this.options.anki.terms.deck;
|
||||
note.modelName = this.options.anki.terms.model;
|
||||
|
||||
const audio = {
|
||||
kanji: definition.expression,
|
||||
kana: definition.reading,
|
||||
fields: []
|
||||
};
|
||||
if (definition.audio) {
|
||||
const audio = {
|
||||
url: definition.audio.url,
|
||||
filename: definition.audio.filename,
|
||||
skipHash: '7e2c2f954ef6051373ba916f000168dc',
|
||||
fields: []
|
||||
};
|
||||
|
||||
for (const name in fields) {
|
||||
if (fields[name].includes('{audio}')) {
|
||||
audio.fields.push(name);
|
||||
for (const name in fields) {
|
||||
if (fields[name].includes('{audio}')) {
|
||||
audio.fields.push(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (audio.fields.length > 0) {
|
||||
note.audio = audio;
|
||||
if (audio.fields.length > 0) {
|
||||
note.audio = audio;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -113,7 +113,16 @@ class Frame {
|
||||
const index = link.data('index');
|
||||
const mode = link.data('mode');
|
||||
|
||||
addDefinition(this.definitions[index], mode).then(success => {
|
||||
const definition = this.definitions[index];
|
||||
if (mode !== 'kanji') {
|
||||
const url = buildAudioUrl(definition);
|
||||
const filename = buildAudioFilename(definition);
|
||||
if (url && filename) {
|
||||
definition.audio = {url, filename};
|
||||
}
|
||||
}
|
||||
|
||||
addDefinition(definition, mode).then(success => {
|
||||
if (success) {
|
||||
const button = this.findAddNoteButton(index, mode);
|
||||
button.addClass('disabled');
|
||||
@ -171,28 +180,11 @@ class Frame {
|
||||
}
|
||||
}
|
||||
|
||||
let kana = definition.reading;
|
||||
let kanji = definition.expression;
|
||||
if (!kana) {
|
||||
if (!kanji) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (wanakana.isHiragana(kanji)) {
|
||||
kana = kanji;
|
||||
kanji = null;
|
||||
}
|
||||
const url = buildAudioUrl(definition);
|
||||
if (!url) {
|
||||
return;
|
||||
}
|
||||
|
||||
const params = [];
|
||||
if (kanji) {
|
||||
params.push(`kanji=${encodeURIComponent(kanji)}`);
|
||||
}
|
||||
if (kana) {
|
||||
params.push(`kana=${encodeURIComponent(kana)}`);
|
||||
}
|
||||
|
||||
const url = `https://assets.languagepod101.com/dictionary/japanese/audiomp3.php?${params.join('&')}`;
|
||||
let audio = this.audioCache[url];
|
||||
if (audio) {
|
||||
audio.currentTime = 0;
|
||||
|
@ -166,3 +166,43 @@ function extractSentence(source, extent) {
|
||||
|
||||
return content.substring(startPos, endPos).trim();
|
||||
}
|
||||
|
||||
function buildAudioUrl(definition) {
|
||||
let kana = definition.reading;
|
||||
let kanji = definition.expression;
|
||||
|
||||
if (!kana && !kanji) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!kana && wanakana.isHiragana(kanji)) {
|
||||
kana = kanji;
|
||||
kanji = null;
|
||||
}
|
||||
|
||||
const params = [];
|
||||
if (kanji) {
|
||||
params.push(`kanji=${encodeURIComponent(kanji)}`);
|
||||
}
|
||||
if (kana) {
|
||||
params.push(`kana=${encodeURIComponent(kana)}`);
|
||||
}
|
||||
|
||||
return `https://assets.languagepod101.com/dictionary/japanese/audiomp3.php?${params.join('&')}`;
|
||||
}
|
||||
|
||||
function buildAudioFilename(definition) {
|
||||
if (!definition.reading && !definition.expression) {
|
||||
return null;
|
||||
}
|
||||
|
||||
let filename = 'yomichan';
|
||||
if (definition.reading) {
|
||||
filename += `_${definition.reading}`;
|
||||
}
|
||||
if (definition.expression) {
|
||||
filename += `_${definition.expression}`;
|
||||
}
|
||||
|
||||
return filename += '.mp3';
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user