start mecab only after enabling the setting
This commit is contained in:
parent
955e131f96
commit
c1d24208d3
@ -98,6 +98,10 @@ class Backend {
|
||||
}
|
||||
|
||||
this.anki = options.anki.enable ? new AnkiConnect(options.anki.server) : new AnkiNull();
|
||||
|
||||
if (options.parsing.enableMecabParser) {
|
||||
this.mecab.startListener();
|
||||
}
|
||||
}
|
||||
|
||||
async getFullOptions() {
|
||||
|
@ -19,16 +19,20 @@
|
||||
|
||||
class Mecab {
|
||||
constructor() {
|
||||
this.port = null;
|
||||
this.listeners = {};
|
||||
this.sequence = 0;
|
||||
this.startListener();
|
||||
}
|
||||
|
||||
async parseText(text) {
|
||||
if (this.port === null) {
|
||||
return {};
|
||||
}
|
||||
return await this.invoke('parse_text', {text});
|
||||
}
|
||||
|
||||
startListener() {
|
||||
if (this.port !== null) { return; }
|
||||
this.port = chrome.runtime.connectNative('yomichan_mecab');
|
||||
this.port.onMessage.addListener((message) => {
|
||||
const {sequence, data} = message;
|
||||
@ -41,6 +45,14 @@ class Mecab {
|
||||
});
|
||||
}
|
||||
|
||||
stopListener() {
|
||||
if (this.port === null) { return; }
|
||||
this.port.disconnect();
|
||||
this.port = null;
|
||||
this.listeners = {};
|
||||
this.sequence = 0;
|
||||
}
|
||||
|
||||
invoke(action, params) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const sequence = this.sequence++;
|
||||
|
@ -154,6 +154,7 @@ async function formWrite(options) {
|
||||
|
||||
function formSetupEventListeners() {
|
||||
$('input, select, textarea').not('.anki-model').not('.ignore-form-changes *').change(utilAsync(onFormOptionsChanged));
|
||||
$('#parsing-mecab-enable').change(onParseMecabChanged);
|
||||
$('.anki-model').change(utilAsync(onAnkiModelChanged));
|
||||
}
|
||||
|
||||
@ -440,6 +441,20 @@ function onMessage({action, params}, sender, callback) {
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Text parsing
|
||||
*/
|
||||
|
||||
function onParseMecabChanged(e) {
|
||||
const mecab = utilBackend().mecab;
|
||||
if (e.target.checked) {
|
||||
mecab.startListener();
|
||||
} else {
|
||||
mecab.stopListener();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Anki
|
||||
*/
|
||||
|
@ -410,6 +410,35 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="text-parsing">
|
||||
<h3>Text Parsing Options</h3>
|
||||
|
||||
<p class="help-block">
|
||||
Yomichan can attempt to parse entire sentences or longer text blocks on the search page,
|
||||
adding furigana above words and a small space between words.
|
||||
</p>
|
||||
|
||||
<p class="help-block">
|
||||
Two types of parsers are supported. The first one, enabled by default, works using the built-in
|
||||
scanning functionality by automatically advancing in the sentence after a matching word.
|
||||
</p>
|
||||
|
||||
<p class="help-block">
|
||||
The second type is an external program called <a href="https://en.wikipedia.org/wiki/MeCab" target="_blank" rel="noopener">MeCab</a>
|
||||
that uses its own dictionaries and a special parsing algorithm. To get it working, you must first
|
||||
install it and <a href="https://github.com/siikamiika/yomichan-mecab-installer" target="_blank" rel="noopener">a native messaging component</a>
|
||||
that acts as a bridge between the program and Yomichan.
|
||||
</p>
|
||||
|
||||
<div class="checkbox">
|
||||
<label><input type="checkbox" id="parsing-scan-enable"> Enable text parsing using installed dictionaries</label>
|
||||
</div>
|
||||
|
||||
<div class="checkbox">
|
||||
<label><input type="checkbox" id="parsing-mecab-enable"> Enable text parsing using MeCab</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ignore-form-changes">
|
||||
<div>
|
||||
<img src="/mixed/img/spinner.gif" class="pull-right" id="dict-spinner" alt>
|
||||
@ -587,35 +616,6 @@
|
||||
</div></div>
|
||||
</div>
|
||||
|
||||
<div id="text-parsing">
|
||||
<h3>Text Parsing Options</h3>
|
||||
|
||||
<p class="help-block">
|
||||
Yomichan can attempt to parse entire sentences or longer text blocks on the search page,
|
||||
adding furigana above words and a small space between words.
|
||||
</p>
|
||||
|
||||
<p class="help-block">
|
||||
Two types of parsers are supported. The first one, enabled by default, works using the built-in
|
||||
scanning functionality by automatically advancing in the sentence after a matching word.
|
||||
</p>
|
||||
|
||||
<p class="help-block">
|
||||
The second type is an external program called <a href="https://en.wikipedia.org/wiki/MeCab" target="_blank" rel="noopener">MeCab</a>
|
||||
that uses its own dictionaries and a special parsing algorithm. To get it working, you must first
|
||||
install it and <a href="https://github.com/siikamiika/yomichan-mecab-installer" target="_blank" rel="noopener">a native messaging component</a>
|
||||
that acts as a bridge between the program and Yomichan.
|
||||
</p>
|
||||
|
||||
<div class="checkbox">
|
||||
<label><input type="checkbox" id="parsing-scan-enable"> Enable text parsing using installed dictionaries</label>
|
||||
</div>
|
||||
|
||||
<div class="checkbox">
|
||||
<label><input type="checkbox" id="parsing-mecab-enable"> Enable text parsing using MeCab</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div>
|
||||
<img src="/mixed/img/spinner.gif" class="pull-right" id="anki-spinner" alt>
|
||||
|
Loading…
Reference in New Issue
Block a user