Update settings if a different source triggers optionsUpdate
This commit is contained in:
parent
71b700cd22
commit
84bd9ff93b
@ -21,11 +21,11 @@ function apiOptionsGet(optionsContext) {
|
|||||||
return utilBackend().getOptions(optionsContext);
|
return utilBackend().getOptions(optionsContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function apiOptionsSave() {
|
async function apiOptionsSave(source) {
|
||||||
const backend = utilBackend();
|
const backend = utilBackend();
|
||||||
const options = await backend.getFullOptions();
|
const options = await backend.getFullOptions();
|
||||||
await optionsSave(options);
|
await optionsSave(options);
|
||||||
backend.onOptionsUpdated();
|
backend.onOptionsUpdated(source);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function apiTermsFind(text, optionsContext) {
|
async function apiTermsFind(text, optionsContext) {
|
||||||
@ -139,7 +139,7 @@ async function apiCommandExec(command) {
|
|||||||
const optionsContext = {depth: 0};
|
const optionsContext = {depth: 0};
|
||||||
const options = await apiOptionsGet(optionsContext);
|
const options = await apiOptionsGet(optionsContext);
|
||||||
options.general.enable = !options.general.enable;
|
options.general.enable = !options.general.enable;
|
||||||
await apiOptionsSave();
|
await apiOptionsSave('popup');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ class Backend {
|
|||||||
async prepare() {
|
async prepare() {
|
||||||
await this.translator.prepare();
|
await this.translator.prepare();
|
||||||
this.options = await optionsLoad();
|
this.options = await optionsLoad();
|
||||||
this.onOptionsUpdated();
|
this.onOptionsUpdated('background');
|
||||||
|
|
||||||
if (chrome.commands !== null && typeof chrome.commands === 'object') {
|
if (chrome.commands !== null && typeof chrome.commands === 'object') {
|
||||||
chrome.commands.onCommand.addListener(this.onCommand.bind(this));
|
chrome.commands.onCommand.addListener(this.onCommand.bind(this));
|
||||||
@ -52,13 +52,13 @@ class Backend {
|
|||||||
this.isPreparedPromise = null;
|
this.isPreparedPromise = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
onOptionsUpdated() {
|
onOptionsUpdated(source) {
|
||||||
this.applyOptions();
|
this.applyOptions();
|
||||||
|
|
||||||
const callback = () => this.checkLastError(chrome.runtime.lastError);
|
const callback = () => this.checkLastError(chrome.runtime.lastError);
|
||||||
chrome.tabs.query({}, tabs => {
|
chrome.tabs.query({}, tabs => {
|
||||||
for (const tab of tabs) {
|
for (const tab of tabs) {
|
||||||
chrome.tabs.sendMessage(tab.id, {action: 'optionsUpdate', params: {}}, callback);
|
chrome.tabs.sendMessage(tab.id, {action: 'optionsUpdate', params: {source}}, callback);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -218,7 +218,7 @@ async function onFormOptionsChanged(e) {
|
|||||||
const optionsAnkiServerOld = options.anki.server;
|
const optionsAnkiServerOld = options.anki.server;
|
||||||
|
|
||||||
await formRead(options);
|
await formRead(options);
|
||||||
await apiOptionsSave();
|
await settingsSaveOptions();
|
||||||
formUpdateVisibility(options);
|
formUpdateVisibility(options);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -246,11 +246,44 @@ async function onReady() {
|
|||||||
await formWrite(options);
|
await formWrite(options);
|
||||||
|
|
||||||
storageInfoInitialize();
|
storageInfoInitialize();
|
||||||
|
|
||||||
|
chrome.runtime.onMessage.addListener(onMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
$(document).ready(utilAsync(onReady));
|
$(document).ready(utilAsync(onReady));
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Remote options updates
|
||||||
|
*/
|
||||||
|
|
||||||
|
function settingsGetSource() {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
chrome.tabs.getCurrent((tab) => resolve(`settings${tab ? tab.id : ''}`));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function settingsSaveOptions() {
|
||||||
|
const source = await settingsGetSource();
|
||||||
|
await apiOptionsSave(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function onOptionsUpdate({source}) {
|
||||||
|
const thisSource = await settingsGetSource();
|
||||||
|
if (source === thisSource) { return; }
|
||||||
|
|
||||||
|
const optionsContext = getOptionsContext();
|
||||||
|
const options = await apiOptionsGet(optionsContext);
|
||||||
|
await formWrite(options);
|
||||||
|
}
|
||||||
|
|
||||||
|
function onMessage({action, params}) {
|
||||||
|
if (action === 'optionsUpdate') {
|
||||||
|
onOptionsUpdate(params);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Dictionary
|
* Dictionary
|
||||||
*/
|
*/
|
||||||
@ -395,7 +428,7 @@ async function onDictionaryPurge(e) {
|
|||||||
const options = await apiOptionsGet(optionsContext);
|
const options = await apiOptionsGet(optionsContext);
|
||||||
options.dictionaries = {};
|
options.dictionaries = {};
|
||||||
options.general.mainDictionary = '';
|
options.general.mainDictionary = '';
|
||||||
await apiOptionsSave();
|
await settingsSaveOptions();
|
||||||
|
|
||||||
await dictionaryGroupsPopulate(options);
|
await dictionaryGroupsPopulate(options);
|
||||||
await formMainDictionaryOptionsPopulate(options);
|
await formMainDictionaryOptionsPopulate(options);
|
||||||
@ -445,7 +478,7 @@ async function onDictionaryImport(e) {
|
|||||||
dictionaryErrorsShow(exceptions);
|
dictionaryErrorsShow(exceptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
await apiOptionsSave();
|
await settingsSaveOptions();
|
||||||
|
|
||||||
await dictionaryGroupsPopulate(options);
|
await dictionaryGroupsPopulate(options);
|
||||||
await formMainDictionaryOptionsPopulate(options);
|
await formMainDictionaryOptionsPopulate(options);
|
||||||
@ -589,7 +622,7 @@ async function onAnkiModelChanged(e) {
|
|||||||
const options = await apiOptionsGet(optionsContext);
|
const options = await apiOptionsGet(optionsContext);
|
||||||
await formRead(options);
|
await formRead(options);
|
||||||
options.anki[tabId].fields = {};
|
options.anki[tabId].fields = {};
|
||||||
await apiOptionsSave();
|
await settingsSaveOptions();
|
||||||
|
|
||||||
ankiSpinnerShow(true);
|
ankiSpinnerShow(true);
|
||||||
await ankiFieldsPopulate(element, options);
|
await ankiFieldsPopulate(element, options);
|
||||||
@ -609,7 +642,7 @@ async function onAnkiFieldTemplatesReset(e) {
|
|||||||
const fieldTemplates = optionsFieldTemplates();
|
const fieldTemplates = optionsFieldTemplates();
|
||||||
options.anki.fieldTemplates = fieldTemplates;
|
options.anki.fieldTemplates = fieldTemplates;
|
||||||
$('#field-templates').val(fieldTemplates);
|
$('#field-templates').val(fieldTemplates);
|
||||||
await apiOptionsSave();
|
await settingsSaveOptions();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
ankiErrorShow(e);
|
ankiErrorShow(e);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user