diff options
| author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2019-12-08 20:53:42 -0500 | 
|---|---|---|
| committer | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2019-12-13 23:11:56 -0500 | 
| commit | e2c5c16da68bb982e59dc69f469b2d13faa2f0b3 (patch) | |
| tree | c219a576cc08fd22ced564f1d3b2a58ac6b5431d | |
| parent | f287d686245371ee3ef8483d1027f06c30dc6a5e (diff) | |
Update backend message handlers
| -rw-r--r-- | ext/bg/js/backend.js | 129 | 
1 files changed, 103 insertions, 26 deletions
| diff --git a/ext/bg/js/backend.js b/ext/bg/js/backend.js index d9f9b586..32b6d4e9 100644 --- a/ext/bg/js/backend.js +++ b/ext/bg/js/backend.js @@ -72,17 +72,20 @@ class Backend {      }      onMessage({action, params}, sender, callback) { -        const handlers = Backend.messageHandlers; -        if (hasOwn(handlers, action)) { -            const handler = handlers[action]; -            const promise = handler(params, sender); +        const handler = Backend._messageHandlers.get(action); +        if (typeof handler !== 'function') { return false; } + +        try { +            const promise = handler(this, params, sender);              promise.then(                  (result) => callback({result}),                  (error) => callback({error: errorToJson(error)})              ); +            return true; +        } catch (error) { +            callback({error: errorToJson(error)}); +            return false;          } - -        return true;      }      applyOptions() { @@ -180,28 +183,102 @@ class Backend {      checkLastError() {          // NOP      } + +    // Message handlers + +    _onApiOptionsGet({optionsContext}) { +        return apiOptionsGet(optionsContext); +    } + +    _onApiOptionsSet({changedOptions, optionsContext, source}) { +        return apiOptionsSet(changedOptions, optionsContext, source); +    } + +    _onApiKanjiFind({text, optionsContext}) { +        return apiKanjiFind(text, optionsContext); +    } + +    _onApiTermsFind({text, details, optionsContext}) { +        return apiTermsFind(text, details, optionsContext); +    } + +    _onApiTextParse({text, optionsContext}) { +        return apiTextParse(text, optionsContext); +    } + +    _onApiTextParseMecab({text, optionsContext}) { +        return apiTextParseMecab(text, optionsContext); +    } + +    _onApiDefinitionAdd({definition, mode, context, optionsContext}) { +        return apiDefinitionAdd(definition, mode, context, optionsContext); +    } + +    _onApiDefinitionsAddable({definitions, modes, optionsContext}) { +        return apiDefinitionsAddable(definitions, modes, optionsContext); +    } + +    _onApiNoteView({noteId}) { +        return apiNoteView(noteId); +    } + +    _onApiTemplateRender({template, data, dynamic}) { +        return apiTemplateRender(template, data, dynamic); +    } + +    _onApiCommandExec({command, params}) { +        return apiCommandExec(command, params); +    } + +    _onApiAudioGetUrl({definition, source, optionsContext}) { +        return apiAudioGetUrl(definition, source, optionsContext); +    } + +    _onApiScreenshotGet({options}, sender) { +        return apiScreenshotGet(options, sender); +    } + +    _onApiForward({action, params}, sender) { +        return apiForward(action, params, sender); +    } + +    _onApiFrameInformationGet(params, sender) { +        return apiFrameInformationGet(sender); +    } + +    _onApiInjectStylesheet({css}, sender) { +        return apiInjectStylesheet(css, sender); +    } + +    _onApiGetEnvironmentInfo() { +        return apiGetEnvironmentInfo(); +    } + +    _onApiClipboardGet() { +        return apiClipboardGet(); +    }  } -Backend.messageHandlers = { -    optionsGet: ({optionsContext}) => apiOptionsGet(optionsContext), -    optionsSet: ({changedOptions, optionsContext, source}) => apiOptionsSet(changedOptions, optionsContext, source), -    kanjiFind: ({text, optionsContext}) => apiKanjiFind(text, optionsContext), -    termsFind: ({text, details, optionsContext}) => apiTermsFind(text, details, optionsContext), -    textParse: ({text, optionsContext}) => apiTextParse(text, optionsContext), -    textParseMecab: ({text, optionsContext}) => apiTextParseMecab(text, optionsContext), -    definitionAdd: ({definition, mode, context, optionsContext}) => apiDefinitionAdd(definition, mode, context, optionsContext), -    definitionsAddable: ({definitions, modes, optionsContext}) => apiDefinitionsAddable(definitions, modes, optionsContext), -    noteView: ({noteId}) => apiNoteView(noteId), -    templateRender: ({template, data, dynamic}) => apiTemplateRender(template, data, dynamic), -    commandExec: ({command, params}) => apiCommandExec(command, params), -    audioGetUrl: ({definition, source, optionsContext}) => apiAudioGetUrl(definition, source, optionsContext), -    screenshotGet: ({options}, sender) => apiScreenshotGet(options, sender), -    forward: ({action, params}, sender) => apiForward(action, params, sender), -    frameInformationGet: (params, sender) => apiFrameInformationGet(sender), -    injectStylesheet: ({css}, sender) => apiInjectStylesheet(css, sender), -    getEnvironmentInfo: () => apiGetEnvironmentInfo(), -    clipboardGet: () => apiClipboardGet() -}; +Backend._messageHandlers = new Map([ +    ['optionsGet', (self, ...args) => self._onApiOptionsGet(...args)], +    ['optionsSet', (self, ...args) => self._onApiOptionsSet(...args)], +    ['kanjiFind', (self, ...args) => self._onApiKanjiFind(...args)], +    ['termsFind', (self, ...args) => self._onApiTermsFind(...args)], +    ['textParse', (self, ...args) => self._onApiTextParse(...args)], +    ['textParseMecab', (self, ...args) => self._onApiTextParseMecab(...args)], +    ['definitionAdd', (self, ...args) => self._onApiDefinitionAdd(...args)], +    ['definitionsAddable', (self, ...args) => self._onApiDefinitionsAddable(...args)], +    ['noteView', (self, ...args) => self._onApiNoteView(...args)], +    ['templateRender', (self, ...args) => self._onApiTemplateRender(...args)], +    ['commandExec', (self, ...args) => self._onApiCommandExec(...args)], +    ['audioGetUrl', (self, ...args) => self._onApiAudioGetUrl(...args)], +    ['screenshotGet', (self, ...args) => self._onApiScreenshotGet(...args)], +    ['forward', (self, ...args) => self._onApiForward(...args)], +    ['frameInformationGet', (self, ...args) => self._onApiFrameInformationGet(...args)], +    ['injectStylesheet', (self, ...args) => self._onApiInjectStylesheet(...args)], +    ['getEnvironmentInfo', (self, ...args) => self._onApiGetEnvironmentInfo(...args)], +    ['clipboardGet', (self, ...args) => self._onApiClipboardGet(...args)] +]);  window.yomichan_backend = new Backend();  window.yomichan_backend.prepare(); |