2019-04-01 00:30:38 +02:00
|
|
|
import { State, Action, StateContext, Selector, createSelector } from '@ngxs/store';
|
2019-03-31 00:03:17 +01:00
|
|
|
|
2019-04-01 00:30:38 +02:00
|
|
|
export class RemoveAccountSettings {
|
|
|
|
static readonly type = '[Settings] Remove AccountSettings';
|
2019-03-31 00:03:17 +01:00
|
|
|
constructor(public accountId: string) {}
|
|
|
|
}
|
|
|
|
|
2020-03-28 22:04:36 +01:00
|
|
|
export class SaveContentWarningPolicy {
|
|
|
|
static readonly type = '[Settings] Save ContentWarningPolicy';
|
|
|
|
constructor(public contentWarningPolicy: ContentWarningPolicy) {}
|
|
|
|
}
|
|
|
|
|
2019-04-01 00:30:38 +02:00
|
|
|
export class SaveAccountSettings {
|
|
|
|
static readonly type = '[Settings] Save AccountSettings';
|
|
|
|
constructor(public accountSettings: AccountSettings) {}
|
2019-03-31 00:03:17 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
export class SaveSettings {
|
2019-04-01 00:30:38 +02:00
|
|
|
static readonly type = '[Settings] Save Settings';
|
2019-03-31 00:03:17 +01:00
|
|
|
constructor(public settings: GlobalSettings) {}
|
|
|
|
}
|
|
|
|
|
2019-04-01 00:30:38 +02:00
|
|
|
export class AccountSettings {
|
2019-03-31 00:03:17 +01:00
|
|
|
accountId: string;
|
2019-11-16 23:27:29 +01:00
|
|
|
displayMention: boolean = true;
|
2019-03-31 00:03:17 +01:00
|
|
|
displayNotifications: boolean = true;
|
2019-11-16 23:27:29 +01:00
|
|
|
|
|
|
|
disableAvatarNotifications = false;
|
|
|
|
|
2019-04-03 03:42:38 +02:00
|
|
|
lastMentionCreationDate: string;
|
|
|
|
lastNotificationCreationDate: string;
|
2019-06-23 23:18:55 +02:00
|
|
|
|
|
|
|
customStatusCharLengthEnabled: boolean = false;
|
|
|
|
customStatusCharLength: number = 500;
|
2019-03-31 00:03:17 +01:00
|
|
|
}
|
|
|
|
|
2020-03-28 22:43:31 +01:00
|
|
|
export enum ContentWarningPolicyEnum {
|
|
|
|
None = 1,
|
|
|
|
HideAll = 2,
|
|
|
|
AddOnAllContent = 3
|
|
|
|
}
|
|
|
|
|
2020-03-28 22:04:36 +01:00
|
|
|
export class ContentWarningPolicy {
|
2020-03-28 22:43:31 +01:00
|
|
|
policy: ContentWarningPolicyEnum = ContentWarningPolicyEnum.None;
|
2020-03-28 22:04:36 +01:00
|
|
|
addCwOnContent: string[] = [];
|
|
|
|
removeCwOnContent: string[] = [];
|
|
|
|
hideCompletlyContent: string[] = [];
|
|
|
|
}
|
|
|
|
|
2019-03-31 00:03:17 +01:00
|
|
|
export class GlobalSettings {
|
2019-11-16 23:27:29 +01:00
|
|
|
disableAutofocus = false;
|
|
|
|
disableAvatarNotifications = false;
|
|
|
|
disableSounds = false;
|
|
|
|
|
2019-11-14 05:12:00 +01:00
|
|
|
notificationSoundFileId: string = '0';
|
2020-02-20 05:40:11 +01:00
|
|
|
|
2020-03-28 22:04:36 +01:00
|
|
|
contentWarningPolicy: ContentWarningPolicy = new ContentWarningPolicy();
|
|
|
|
|
2020-02-20 05:40:11 +01:00
|
|
|
columnSwitchingWinAlt = false;
|
|
|
|
|
2019-04-01 00:30:38 +02:00
|
|
|
accountSettings: AccountSettings[] = [];
|
2019-03-31 00:03:17 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface SettingsStateModel {
|
|
|
|
settings: GlobalSettings;
|
|
|
|
}
|
|
|
|
|
|
|
|
@State<SettingsStateModel>({
|
|
|
|
name: 'globalsettings',
|
|
|
|
defaults: {
|
|
|
|
settings: new GlobalSettings()
|
|
|
|
}
|
|
|
|
})
|
2019-04-01 00:30:38 +02:00
|
|
|
export class SettingsState {
|
|
|
|
|
|
|
|
accountSettings(accountId: string){
|
|
|
|
return createSelector([SettingsState], (state: GlobalSettings) => {
|
|
|
|
return state.accountSettings.find(x => x.accountId === accountId);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
@Action(RemoveAccountSettings)
|
|
|
|
RemoveAccountSettings(ctx: StateContext<SettingsStateModel>, action: RemoveAccountSettings){
|
2019-03-31 00:03:17 +01:00
|
|
|
const state = ctx.getState();
|
2019-11-16 23:27:29 +01:00
|
|
|
let newSettings = new GlobalSettings();
|
2019-03-31 00:03:17 +01:00
|
|
|
|
2019-11-16 23:27:29 +01:00
|
|
|
newSettings = this.setGlobalSettingsValues(newSettings, state.settings);
|
2020-03-29 05:47:23 +02:00
|
|
|
newSettings.contentWarningPolicy = state.settings.contentWarningPolicy;
|
2019-04-01 00:30:38 +02:00
|
|
|
newSettings.accountSettings = [...state.settings.accountSettings.filter(x => x.accountId !== action.accountId)];
|
2019-03-31 00:03:17 +01:00
|
|
|
|
|
|
|
ctx.patchState({
|
|
|
|
settings: newSettings
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2019-04-01 00:30:38 +02:00
|
|
|
@Action(SaveAccountSettings)
|
|
|
|
SaveAccountSettings(ctx: StateContext<SettingsStateModel>, action: SaveAccountSettings){
|
2019-03-31 00:03:17 +01:00
|
|
|
const state = ctx.getState();
|
|
|
|
|
2019-11-16 23:27:29 +01:00
|
|
|
let newSettings = new GlobalSettings();
|
|
|
|
newSettings = this.setGlobalSettingsValues(newSettings, state.settings);
|
2020-03-29 05:47:23 +02:00
|
|
|
newSettings.contentWarningPolicy = state.settings.contentWarningPolicy;
|
2019-04-01 00:30:38 +02:00
|
|
|
newSettings.accountSettings = [...state.settings.accountSettings.filter(x => x.accountId !== action.accountSettings.accountId), action.accountSettings];
|
2019-03-31 00:03:17 +01:00
|
|
|
|
|
|
|
ctx.patchState({
|
|
|
|
settings: newSettings
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
@Action(SaveSettings)
|
|
|
|
SaveSettings(ctx: StateContext<SettingsStateModel>, action: SaveSettings){
|
|
|
|
const state = ctx.getState();
|
|
|
|
|
2019-11-16 23:27:29 +01:00
|
|
|
let newSettings = new GlobalSettings();
|
|
|
|
newSettings = this.setGlobalSettingsValues(newSettings, action.settings);
|
2020-03-29 05:47:23 +02:00
|
|
|
newSettings.contentWarningPolicy = state.settings.contentWarningPolicy;
|
2019-11-14 04:18:39 +01:00
|
|
|
newSettings.accountSettings = [...state.settings.accountSettings];
|
2019-03-31 00:03:17 +01:00
|
|
|
|
|
|
|
ctx.patchState({
|
|
|
|
settings: newSettings
|
|
|
|
});
|
|
|
|
}
|
2019-11-16 23:27:29 +01:00
|
|
|
|
2020-03-28 22:04:36 +01:00
|
|
|
@Action(SaveContentWarningPolicy)
|
|
|
|
SaveContentWarningPolicy(ctx: StateContext<SettingsStateModel>, action: SaveContentWarningPolicy){
|
|
|
|
const state = ctx.getState();
|
|
|
|
|
|
|
|
let newSettings = new GlobalSettings();
|
|
|
|
|
|
|
|
newSettings = this.setGlobalSettingsValues(newSettings, state.settings);
|
|
|
|
newSettings.accountSettings = [...state.settings.accountSettings];
|
|
|
|
newSettings.contentWarningPolicy = action.contentWarningPolicy;
|
|
|
|
|
|
|
|
ctx.patchState({
|
|
|
|
settings: newSettings
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2019-11-16 23:27:29 +01:00
|
|
|
private setGlobalSettingsValues(newSettings: GlobalSettings, oldSettings: GlobalSettings): GlobalSettings {
|
|
|
|
|
|
|
|
newSettings.disableAutofocus = oldSettings.disableAutofocus;
|
|
|
|
newSettings.disableAvatarNotifications = oldSettings.disableAvatarNotifications;
|
|
|
|
newSettings.disableSounds = oldSettings.disableSounds;
|
|
|
|
newSettings.notificationSoundFileId = oldSettings.notificationSoundFileId;
|
2020-02-20 05:40:11 +01:00
|
|
|
newSettings.columnSwitchingWinAlt = oldSettings.columnSwitchingWinAlt;
|
2019-11-16 23:27:29 +01:00
|
|
|
|
|
|
|
return newSettings;
|
|
|
|
}
|
2019-03-31 00:03:17 +01:00
|
|
|
}
|