Sengi-Windows-MacOS-Linux/src/app/states/settings.state.ts

187 lines
6.2 KiB
TypeScript
Raw Normal View History

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;
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-04-19 06:23:08 +02:00
export enum TimeLineModeEnum {
OnTop = 1,
Continuous = 2,
SlowMode = 3
}
2020-04-20 06:19:56 +02:00
export enum TimeLineHeaderEnum {
Title_DomainName = 1,
Title_Username_DomainName = 2,
Title_AccountIcon_DomainName = 3,
Title_AccountIcon = 4,
2023-07-22 21:04:20 +02:00
Title = 5,
Title_AccountIcon_Username_DomainName = 6
2020-04-20 06:19:56 +02:00
}
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;
disableRemoteStatusFetching = false;
2021-02-28 07:19:41 +01:00
autoFollowOnListEnabled = false;
2021-02-28 07:50:06 +01:00
twitterBridgeEnabled = false;
notificationSoundFileId: string = '0';
2021-02-28 07:50:06 +01:00
twitterBridgeInstance: string = '';
2020-02-20 05:40:11 +01:00
2020-04-20 06:19:56 +02:00
timelineHeader: TimeLineHeaderEnum = TimeLineHeaderEnum.Title_DomainName;
2020-04-19 06:23:08 +02:00
timelineMode: TimeLineModeEnum = TimeLineModeEnum.OnTop;
2020-03-28 22:04:36 +01:00
contentWarningPolicy: ContentWarningPolicy = new ContentWarningPolicy();
2020-02-20 05:40:11 +01:00
columnSwitchingWinAlt = false;
2023-08-03 09:27:21 +02:00
accountSettings: AccountSettings[] = [];
configuredLanguages: ILanguage[] = [];
2023-08-04 07:08:00 +02:00
selectedLanguage: ILanguage;
2023-08-03 09:27:21 +02:00
}
export interface ILanguage {
iso639: string;
name: string;
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;
newSettings.disableRemoteStatusFetching = oldSettings.disableRemoteStatusFetching;
2020-04-20 06:19:56 +02:00
newSettings.timelineHeader = oldSettings.timelineHeader;
2020-04-19 06:23:08 +02:00
newSettings.timelineMode = oldSettings.timelineMode;
2021-02-28 07:19:41 +01:00
newSettings.autoFollowOnListEnabled = oldSettings.autoFollowOnListEnabled;
2021-02-28 07:50:06 +01:00
newSettings.twitterBridgeEnabled = oldSettings.twitterBridgeEnabled;
newSettings.twitterBridgeInstance = oldSettings.twitterBridgeInstance;
2023-08-04 04:44:14 +02:00
newSettings.configuredLanguages = oldSettings.configuredLanguages;
2023-08-04 07:08:00 +02:00
newSettings.selectedLanguage = oldSettings.selectedLanguage;
2019-11-16 23:27:29 +01:00
return newSettings;
}
2019-03-31 00:03:17 +01:00
}