Skip to content

Commit ffada4f

Browse files
authored
Merge pull request element-hq#5468 from turt2live/travis/granular
Granular settings
2 parents 142a9d7 + a583c2b commit ffada4f

5 files changed

Lines changed: 46 additions & 27 deletions

File tree

src/components/structures/BottomLeftMenu.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import sdk from 'matrix-react-sdk';
2121
import dis from 'matrix-react-sdk/lib/dispatcher';
2222
import Velocity from 'velocity-vector';
2323
import 'velocity-vector/velocity.ui';
24-
import UserSettingsStore from 'matrix-react-sdk/lib/UserSettingsStore';
24+
import SettingsStore from "matrix-react-sdk/lib/settings/SettingsStore";
2525

2626
const CALLOUT_ANIM_DURATION = 1000;
2727

src/components/views/context_menus/MessageContextMenu.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ const sdk = require('matrix-react-sdk');
2424
import { _t } from 'matrix-react-sdk/lib/languageHandler';
2525
const Modal = require('matrix-react-sdk/lib/Modal');
2626
const Resend = require("matrix-react-sdk/lib/Resend");
27-
import * as UserSettingsStore from 'matrix-react-sdk/lib/UserSettingsStore';
27+
import SettingsStore from "matrix-react-sdk/lib/settings/SettingsStore";
2828

2929
module.exports = React.createClass({
3030
displayName: 'MessageContextMenu',
@@ -67,7 +67,7 @@ module.exports = React.createClass({
6767
let canPin = room.currentState.mayClientSendStateEvent('m.room.pinned_events', cli);
6868

6969
// HACK: Intentionally say we can't pin if the user doesn't want to use the functionality
70-
if (!UserSettingsStore.isFeatureEnabled("feature_pinning")) canPin = false;
70+
if (!SettingsStore.isFeatureEnabled("feature_pinning")) canPin = false;
7171

7272
this.setState({canRedact, canPin});
7373
},

src/components/views/login/VectorLoginFooter.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ limitations under the License.
1818

1919
var React = require('react');
2020
import { _t } from 'matrix-react-sdk/lib/languageHandler';
21-
import UserSettingsStore from 'matrix-react-sdk/lib/UserSettingsStore';
21+
import SettingsStore from 'matrix-react-sdk/lib/settings/SettingsStore';
2222

2323
module.exports = React.createClass({
2424
displayName: 'VectorLoginFooter',
@@ -28,7 +28,7 @@ module.exports = React.createClass({
2828

2929
render: function() {
3030
// FIXME: replace this with a proper Status skin
31-
if (UserSettingsStore.getTheme() === 'status') return <div/>;
31+
if (SettingsStore.getValue("theme") === 'status') return <div/>;
3232

3333
return (
3434
<div className="mx_Login_links">

src/components/views/settings/Notifications.js

Lines changed: 37 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@ import sdk from 'matrix-react-sdk';
2020
import { _t, _tJsx } from 'matrix-react-sdk/lib/languageHandler';
2121
import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg';
2222
import UserSettingsStore from 'matrix-react-sdk/lib/UserSettingsStore';
23+
import SettingsStore, {SettingLevel} from "matrix-react-sdk/lib/settings/SettingsStore";
2324
import Modal from 'matrix-react-sdk/lib/Modal';
2425
import {
25-
NotificationUtils,
26-
VectorPushRulesDefinitions,
27-
PushRuleVectorState,
26+
NotificationUtils,
27+
VectorPushRulesDefinitions,
28+
PushRuleVectorState,
2829
ContentRules
2930
} from '../../../notifications';
3031

@@ -112,12 +113,33 @@ module.exports = React.createClass({
112113
},
113114

114115
onEnableDesktopNotificationsChange: function(event) {
115-
UserSettingsStore.setEnableNotifications(event.target.checked);
116+
SettingsStore.setValue(
117+
"notificationsEnabled", null,
118+
SettingLevel.DEVICE,
119+
event.target.checked,
120+
).finally(() => {
121+
this.forceUpdate();
122+
});
116123
},
117124

118125
onEnableDesktopNotificationBodyChange: function(event) {
119-
UserSettingsStore.setEnableNotificationBody(event.target.checked);
120-
this.forceUpdate();
126+
SettingsStore.setValue(
127+
"notificationBodyEnabled", null,
128+
SettingLevel.DEVICE,
129+
event.target.checked,
130+
).finally(() => {
131+
this.forceUpdate();
132+
});
133+
},
134+
135+
onEnableAudioNotificationsChange: function(event) {
136+
SettingsStore.setValue(
137+
"audioNotificationsEnabled", null,
138+
SettingLevel.DEVICE,
139+
event.target.checked,
140+
).finally(() => {
141+
this.forceUpdate();
142+
});
121143
},
122144

123145
onEnableEmailNotificationsChange: function(address, event) {
@@ -433,7 +455,7 @@ module.exports = React.createClass({
433455
needsUpdate.push( function(kind, rule) {
434456
return cli.setPushRuleActions(
435457
'global', kind, LEGACY_RULES[rule.rule_id], portLegacyActions(rule.actions)
436-
).then(() =>
458+
).then(() =>
437459
cli.deletePushRule('global', kind, rule.rule_id)
438460
).catch( (e) => {
439461
console.warn(`Error when porting legacy rule: ${e}`);
@@ -446,7 +468,7 @@ module.exports = React.createClass({
446468
if (needsUpdate.length > 0) {
447469
// If some of the rules need to be ported then wait for the porting
448470
// to happen and then fetch the rules again.
449-
return Promise.all(needsUpdate).then(() =>
471+
return Promise.all(needsUpdate).then(() =>
450472
cli.getPushRules()
451473
);
452474
} else {
@@ -694,13 +716,13 @@ module.exports = React.createClass({
694716

695717
render: function() {
696718
const self = this;
697-
719+
698720
let spinner;
699721
if (this.state.phase === this.phases.LOADING) {
700722
const Loader = sdk.getComponent("elements.Spinner");
701723
spinner = <Loader />;
702724
}
703-
725+
704726
let masterPushRuleDiv;
705727
if (this.state.masterPushRule) {
706728
masterPushRuleDiv = (
@@ -710,7 +732,7 @@ module.exports = React.createClass({
710732
ref="enableNotifications"
711733
type="checkbox"
712734
checked={ !this.state.masterPushRule.enabled }
713-
onChange={ this.onEnableNotificationsChange }
735+
onChange={ this.onEnableNotificationsChange }
714736
/>
715737
</div>
716738
<div className="mx_UserNotifSettings_labelCell">
@@ -824,7 +846,7 @@ module.exports = React.createClass({
824846
<input id="enableDesktopNotifications"
825847
ref="enableDesktopNotifications"
826848
type="checkbox"
827-
checked={ UserSettingsStore.getEnableNotifications() }
849+
checked={ SettingsStore.getValue("notificationsEnabled") }
828850
onChange={ this.onEnableDesktopNotificationsChange } />
829851
</div>
830852
<div className="mx_UserNotifSettings_labelCell">
@@ -839,7 +861,7 @@ module.exports = React.createClass({
839861
<input id="enableDesktopNotificationBody"
840862
ref="enableDesktopNotificationBody"
841863
type="checkbox"
842-
checked={ UserSettingsStore.getEnableNotificationBody() }
864+
checked={ SettingsStore.getValue("notificationBodyEnabled") }
843865
onChange={ this.onEnableDesktopNotificationBodyChange } />
844866
</div>
845867
<div className="mx_UserNotifSettings_labelCell">
@@ -854,11 +876,8 @@ module.exports = React.createClass({
854876
<input id="enableDesktopAudioNotifications"
855877
ref="enableDesktopAudioNotifications"
856878
type="checkbox"
857-
checked={ UserSettingsStore.getEnableAudioNotifications() }
858-
onChange={ (e) => {
859-
UserSettingsStore.setEnableAudioNotifications(e.target.checked);
860-
this.forceUpdate();
861-
}} />
879+
checked={ SettingsStore.getValue("audioNotificationsEnabled") }
880+
onChange={ this.onEnableAudioNotificationsChange } />
862881
</div>
863882
<div className="mx_UserNotifSettings_labelCell">
864883
<label htmlFor="enableDesktopAudioNotifications">

src/vector/index.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ sdk.loadSkin(require('../component-index'));
6767
var VectorConferenceHandler = require('../VectorConferenceHandler');
6868
import Promise from 'bluebird';
6969
var request = require('browser-request');
70-
import * as UserSettingsStore from 'matrix-react-sdk/lib/UserSettingsStore';
7170
import * as languageHandler from 'matrix-react-sdk/lib/languageHandler';
7271
// Also import _t directly so we can call it just `_t` as this is what gen-i18n.js expects
7372
import { _t } from 'matrix-react-sdk/lib/languageHandler';
@@ -78,6 +77,7 @@ import {parseQs, parseQsFromFragment} from './url_utils';
7877
import Platform from './platform';
7978

8079
import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg';
80+
import SettingsStore from "matrix-react-sdk/lib/settings/SettingsStore";
8181
import Tinter from 'matrix-react-sdk/lib/Tinter';
8282

8383
var lastLocationHashSet = null;
@@ -252,7 +252,7 @@ async function loadApp() {
252252
if (!preventRedirect) {
253253
if (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream) {
254254
// FIXME: ugly status hardcoding
255-
if (UserSettingsStore.getTheme() === 'status') {
255+
if (SettingsStore.getValue("theme") === 'status') {
256256
window.location = "https://status.im/join-riot.html";
257257
return;
258258
}
@@ -265,7 +265,7 @@ async function loadApp() {
265265
}
266266
else if (/Android/.test(navigator.userAgent)) {
267267
// FIXME: ugly status hardcoding
268-
if (UserSettingsStore.getTheme() === 'status') {
268+
if (SettingsStore.getValue("theme") === 'status') {
269269
window.location = "https://status.im/join-riot.html";
270270
return;
271271
}
@@ -369,7 +369,7 @@ async function loadApp() {
369369
}
370370

371371
async function loadLanguage() {
372-
const prefLang = UserSettingsStore.getLocalSetting('language');
372+
const prefLang = SettingsStore.getValue("language");
373373
let langs = [];
374374

375375
if (!prefLang) {

0 commit comments

Comments
 (0)