diff options
| -rw-r--r-- | ext/bg/js/mecab.js | 24 | 
1 files changed, 21 insertions, 3 deletions
| diff --git a/ext/bg/js/mecab.js b/ext/bg/js/mecab.js index ada96945..a26b7f39 100644 --- a/ext/bg/js/mecab.js +++ b/ext/bg/js/mecab.js @@ -24,10 +24,23 @@ class Mecab {          this.sequence = 0;      } -    async parseText(text) { -        if (this.port === null) { -            return {}; +    onError(error) { +        logError(error, true); +    } + +    async checkVersion() { +        try { +            const {version} = await this.invoke('get_version', {}); +            if (version !== Mecab.version) { +                this.stopListener(); +                throw new Error(`Unsupported MeCab native messenger version ${version}. Yomichan supports version ${Mecab.version}.`); +            } +        } catch (error) { +            this.onError(error);          } +    } + +    async parseText(text) {          return await this.invoke('parse_text', {text});      } @@ -35,6 +48,7 @@ class Mecab {          if (this.port !== null) { return; }          this.port = chrome.runtime.connectNative('yomichan_mecab');          this.port.onMessage.addListener(this.onNativeMessage.bind(this)); +        this.checkVersion();      }      stopListener() { @@ -55,6 +69,9 @@ class Mecab {      }      invoke(action, params) { +        if (this.port === null) { +            return {}; +        }          return new Promise((resolve, reject) => {              const sequence = this.sequence++; @@ -72,3 +89,4 @@ class Mecab {  }  Mecab.timeout = 5000; +Mecab.version = 1; |