Use official redux on content

This commit is contained in:
Shin'ya Ueoka 2018-07-07 22:05:22 +09:00
parent cf0dcf2522
commit efa1cb3967
11 changed files with 36 additions and 103 deletions

View file

@ -4,7 +4,6 @@ import FollowComponent from './follow';
import * as settingActions from 'content/actions/setting';
import messages from 'shared/messages';
import * as addonActions from '../../actions/addon';
import * as re from 'shared/utils/re';
import * as blacklists from 'shared/blacklists';
export default class Common {
@ -24,44 +23,26 @@ export default class Common {
this.reloadSettings();
messages.onMessage(this.onMessage.bind(this));
store.subscribe(() => this.update());
}
onMessage(message) {
let { enabled } = this.store.getState().addon;
switch (message.type) {
case messages.SETTINGS_CHANGED:
return this.reloadSettings();
case messages.ADDON_TOGGLE_ENABLED:
return this.store.dispatch(addonActions.toggleEnabled());
}
}
update() {
let enabled = this.store.getState().addon.enabled;
if (enabled !== this.prevEnabled) {
this.prevEnabled = enabled;
browser.runtime.sendMessage({
type: messages.ADDON_ENABLED_RESPONSE,
enabled,
});
}
let blacklist = this.store.getState().setting.blacklist;
let str = JSON.stringify(blacklist)
if (blacklist !== str) {
this.prevBlacklist = str;
if (blacklists.includes(blacklist, this.win.location)) {
this.store.dispatch(addonActions.disable());
} else {
this.store.dispatch(addonActions.enable());
}
this.store.dispatch(addonActions.setEnabled(!enabled));
}
}
reloadSettings() {
try {
this.store.dispatch(settingActions.load());
this.store.dispatch(settingActions.load()).then(({ value: settings }) => {
let enabled = !blacklists.includes(
settings.blacklist, this.win.location.href
);
this.store.dispatch(addonActions.setEnabled(enabled));
});
} catch (e) {
// Sometime sendMessage fails when background script is not ready.
console.warn(e);

View file

@ -48,7 +48,9 @@ export default class KeymapperComponent {
return true;
}
let operation = keymaps.get(matched[0]);
let act = operationActions.exec(operation, key.repeat, state.setting);
let act = operationActions.exec(
operation, key.repeat, state.setting, state.addon.enabled
);
this.store.dispatch(act);
this.store.dispatch(inputActions.clearKeys());
return true;