summaryrefslogtreecommitdiff
path: root/ext/mixed
diff options
context:
space:
mode:
Diffstat (limited to 'ext/mixed')
-rw-r--r--ext/mixed/js/api.js28
-rw-r--r--ext/mixed/js/core.js13
-rw-r--r--ext/mixed/js/display.js1
3 files changed, 14 insertions, 28 deletions
diff --git a/ext/mixed/js/api.js b/ext/mixed/js/api.js
index fa61a1e2..26f4389d 100644
--- a/ext/mixed/js/api.js
+++ b/ext/mixed/js/api.js
@@ -122,30 +122,6 @@ function apiGetDefaultAnkiFieldTemplates() {
}
function _apiInvoke(action, params={}) {
- if (!_isBackendReady) {
- if (_isBackendReadyPromise === null) {
- _isBackendReadyPromise = new Promise((resolve) => (_isBackendReadyResolve = resolve));
- const checkBackendReady = async () => {
- try {
- if (await _apiInvokeRaw('isBackendReady')) {
- _isBackendReady = true;
- _isBackendReadyResolve();
- }
- } catch (e) {
- // NOP
- }
- setTimeout(checkBackendReady, 100); // poll Backend until it responds
- };
- checkBackendReady();
- }
- return _isBackendReadyPromise.then(
- () => _apiInvokeRaw(action, params)
- );
- }
- return _apiInvokeRaw(action, params);
-}
-
-function _apiInvokeRaw(action, params={}) {
const data = {action, params};
return new Promise((resolve, reject) => {
try {
@@ -172,7 +148,3 @@ function _apiInvokeRaw(action, params={}) {
function _apiCheckLastError() {
// NOP
}
-
-let _isBackendReady = false;
-let _isBackendReadyResolve = null;
-let _isBackendReadyPromise = null;
diff --git a/ext/mixed/js/core.js b/ext/mixed/js/core.js
index 83813796..a3cb2459 100644
--- a/ext/mixed/js/core.js
+++ b/ext/mixed/js/core.js
@@ -269,17 +269,26 @@ const yomichan = (() => {
constructor() {
super();
+ this._isBackendPreparedResolve = null;
+ this._isBackendPreparedPromise = new Promise((resolve) => (this._isBackendPreparedResolve = resolve));
+
this._messageHandlers = new Map([
+ ['backendPrepared', this._onBackendPrepared.bind(this)],
['getUrl', this._onMessageGetUrl.bind(this)],
['optionsUpdated', this._onMessageOptionsUpdated.bind(this)],
['zoomChanged', this._onMessageZoomChanged.bind(this)]
]);
chrome.runtime.onMessage.addListener(this._onMessage.bind(this));
+ chrome.runtime.sendMessage({action: 'yomichanOnline'});
}
// Public
+ prepare() {
+ return this._isBackendPreparedPromise;
+ }
+
generateId(length) {
const array = new Uint8Array(length);
window.crypto.getRandomValues(array);
@@ -305,6 +314,10 @@ const yomichan = (() => {
return false;
}
+ _onBackendPrepared() {
+ this._isBackendPreparedResolve();
+ }
+
_onMessageGetUrl() {
return {url: window.location.href};
}
diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js
index e3e5e7df..6a762a65 100644
--- a/ext/mixed/js/display.js
+++ b/ext/mixed/js/display.js
@@ -153,6 +153,7 @@ class Display {
}
async prepare(options=null) {
+ await yomichan.prepare();
const displayGeneratorPromise = this.displayGenerator.prepare();
const updateOptionsPromise = this.updateOptions(options);
await Promise.all([displayGeneratorPromise, updateOptionsPromise]);