summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/bg/js/backend.js90
1 files changed, 48 insertions, 42 deletions
diff --git a/ext/bg/js/backend.js b/ext/bg/js/backend.js
index a426d04c..433f5a93 100644
--- a/ext/bg/js/backend.js
+++ b/ext/bg/js/backend.js
@@ -158,6 +158,8 @@ class Backend {
return this._prepareCompletePromise;
}
+ // Private
+
_prepareInternalSync() {
if (isObject(chrome.commands) && isObject(chrome.commands.onCommand)) {
const onCommand = this._onWebExtensionEventWrapper(this._onCommand.bind(this));
@@ -208,7 +210,7 @@ class Backend {
this._applyOptions('background');
- const options = this.getOptions({current: true});
+ const options = this._getProfileOptions({current: true});
if (options.general.showGuide) {
this._openWelcomeGuidePage();
}
@@ -228,23 +230,10 @@ class Backend {
}
}
- isPrepared() {
- return this._isPrepared;
- }
-
- getFullOptions(useSchema=false) {
- const options = this._options;
- return useSchema ? this._optionsUtil.createValidatingProxy(options) : options;
- }
-
- getOptions(optionsContext, useSchema=false) {
- return this._getProfile(optionsContext, useSchema).options;
- }
-
// Event handlers
async _onClipboardTextChange({text}) {
- const {general: {maximumClipboardSearchLength}} = this.getOptions({current: true});
+ const {general: {maximumClipboardSearchLength}} = this._getProfileOptions({current: true});
if (text.length > maximumClipboardSearchLength) {
text = text.substring(0, maximumClipboardSearchLength);
}
@@ -385,15 +374,15 @@ class Backend {
}
_onApiOptionsGet({optionsContext}) {
- return this.getOptions(optionsContext);
+ return this._getProfileOptions(optionsContext);
}
_onApiOptionsGetFull() {
- return this.getFullOptions();
+ return this._getOptionsFull();
}
async _onApiKanjiFind({text, optionsContext}) {
- const options = this.getOptions(optionsContext);
+ const options = this._getProfileOptions(optionsContext);
const {general: {maxResults}} = options;
const findKanjiOptions = this._getTranslatorFindKanjiOptions(options);
const definitions = await this._translator.findKanji(text, findKanjiOptions);
@@ -402,7 +391,7 @@ class Backend {
}
async _onApiTermsFind({text, details, optionsContext}) {
- const options = this.getOptions(optionsContext);
+ const options = this._getProfileOptions(optionsContext);
const {general: {resultOutputMode: mode, maxResults}} = options;
const findTermsOptions = this._getTranslatorFindTermsOptions(details, options);
const [definitions, length] = await this._translator.findTerms(mode, text, findTermsOptions);
@@ -411,7 +400,7 @@ class Backend {
}
async _onApiTextParse({text, optionsContext}) {
- const options = this.getOptions(optionsContext);
+ const options = this._getProfileOptions(optionsContext);
const results = [];
if (options.parsing.enableScanningParser) {
@@ -672,18 +661,8 @@ class Backend {
return details;
}
- async _onApiModifySettings({targets, source}) {
- const results = [];
- for (const target of targets) {
- try {
- const result = this._modifySetting(target);
- results.push({result: clone(result)});
- } catch (e) {
- results.push({error: serializeError(e)});
- }
- }
- await this._saveOptions(source);
- return results;
+ _onApiModifySettings({targets, source}) {
+ return this._modifySettings(targets, source);
}
_onApiGetSettings({targets}) {
@@ -784,10 +763,14 @@ class Backend {
}
async _onCommandToggleTextScanning() {
- const source = 'popup';
- const options = this.getOptions({current: true});
- options.general.enable = !options.general.enable;
- await this._saveOptions(source);
+ const options = this._getProfileOptions({current: true});
+ await this._modifySettings([{
+ action: 'set',
+ path: 'general.enable',
+ value: !options.general.enable,
+ scope: 'profile',
+ optionsContext: {current: true}
+ }], 'backend');
}
async _onCommandOpenPopupWindow() {
@@ -796,6 +779,20 @@ class Backend {
// Utilities
+ async _modifySettings(targets, source) {
+ const results = [];
+ for (const target of targets) {
+ try {
+ const result = this._modifySetting(target);
+ results.push({result: clone(result)});
+ } catch (e) {
+ results.push({error: serializeError(e)});
+ }
+ }
+ await this._saveOptions(source);
+ return results;
+ }
+
_getOrCreateSearchPopup() {
if (this._searchPopupTabCreatePromise === null) {
const promise = this._getOrCreateSearchPopup2();
@@ -822,7 +819,7 @@ class Backend {
}
// Create a new window
- const options = this.getOptions({current: true});
+ const options = this._getProfileOptions({current: true});
const createData = this._getSearchPopupWindowCreateData(baseUrl, options);
const {popupWindow: {windowState}} = options;
const popupWindow = await this._createWindow(createData);
@@ -903,7 +900,7 @@ class Backend {
}
_applyOptions(source) {
- const options = this.getOptions({current: true});
+ const options = this._getProfileOptions({current: true});
this._updateBadge();
this._anki.server = options.anki.server;
@@ -924,8 +921,17 @@ class Backend {
this._sendMessageAllTabsIgnoreResponse('optionsUpdated', {source});
}
+ _getOptionsFull(useSchema=false) {
+ const options = this._options;
+ return useSchema ? this._optionsUtil.createValidatingProxy(options) : options;
+ }
+
+ _getProfileOptions(optionsContext, useSchema=false) {
+ return this._getProfile(optionsContext, useSchema).options;
+ }
+
_getProfile(optionsContext, useSchema=false) {
- const options = this.getFullOptions(useSchema);
+ const options = this._getOptionsFull(useSchema);
const profiles = options.profiles;
if (optionsContext.current) {
return profiles[options.profileCurrent];
@@ -1132,9 +1138,9 @@ class Backend {
switch (scope) {
case 'profile':
if (!isObject(target.optionsContext)) { throw new Error('Invalid optionsContext'); }
- return this.getOptions(target.optionsContext, true);
+ return this._getProfileOptions(target.optionsContext, true);
case 'global':
- return this.getFullOptions(true);
+ return this._getOptionsFull(true);
default:
throw new Error(`Invalid scope: ${scope}`);
}
@@ -1689,7 +1695,7 @@ class Backend {
async _saveOptions(source) {
this._clearProfileConditionsSchemaCache();
- const options = this.getFullOptions();
+ const options = this._getOptionsFull();
await this._optionsUtil.save(options);
this._applyOptions(source);
}