aboutsummaryrefslogtreecommitdiff
path: root/src/stores/settings.ts
diff options
context:
space:
mode:
authorFuwn <[email protected]>2024-10-09 00:41:20 -0700
committerFuwn <[email protected]>2024-10-09 00:41:43 -0700
commit998b63a35256ac985a5a2714dd1ca451af4dfd8a (patch)
tree50796121a9d5ab0330fdc5d7e098bda2860d9726 /src/stores/settings.ts
parentfeat(graphql): add badgeCount field (diff)
downloaddue.moe-998b63a35256ac985a5a2714dd1ca451af4dfd8a.tar.xz
due.moe-998b63a35256ac985a5a2714dd1ca451af4dfd8a.zip
chore(prettier): use spaces instead of tabs
Diffstat (limited to 'src/stores/settings.ts')
-rw-r--r--src/stores/settings.ts352
1 files changed, 176 insertions, 176 deletions
diff --git a/src/stores/settings.ts b/src/stores/settings.ts
index 9d290329..0d96d419 100644
--- a/src/stores/settings.ts
+++ b/src/stores/settings.ts
@@ -8,193 +8,193 @@ import identity from './identity';
const VERSION = '1.0.1';
export interface Settings {
- cacheMangaMinutes: number;
- cacheMinutes: number;
- displayUpcomingAnimeCollapsed: boolean;
- displayAnimeCollapsed: boolean;
- displayMangaCollapsed: boolean;
- displayNotStarted: boolean;
- displayUnresolved: boolean;
- calculateChaptersRoundedDown: boolean;
- displaySortedByDifference: boolean;
- displayOutboundLinksTo: 'anilist' | 'livechartme' | 'animeschedule' | 'myanimelist';
- displayPausedMedia: boolean;
- displayLimitListHeight: boolean;
- displaySocialButton: boolean;
- calculateGuessingDisabled: boolean;
- displayHoverNavigation: boolean;
- displayTitleFormat: 'english' | 'romaji' | 'native';
- calculateGuessMethod: 'median' | 'iqr_median' | 'iqr_mode' | 'mode';
- calculateDisableOutOfDateVolumeWarning: boolean;
- calculatePreferNativeChapterCount: boolean;
- displayPlannedAnime: boolean;
- displayFurigana: boolean;
- displayAoButa:
- | 'kaede'
- | 'mai'
- | 'mai_2'
- | 'nodoka'
- | 'rio'
- | 'sakuta'
- | 'shouko'
- | 'tomoe'
- | 'random'
- | 'none';
- disableManga: boolean;
- disableAnime: boolean;
- disableUpcomingAnime: boolean;
- display24HourTime: boolean;
- displayCountdownRightAligned: boolean;
- displayNativeCountdown: boolean;
- displayHoverCover: boolean;
- displayDisableAnimations: boolean;
- displayDisableNotifications: boolean;
- displayCoverModeAnime: boolean;
- displayCoverModeManga: boolean;
- displayCoverWidth: number;
- displayShortCountdown: boolean;
- displayScheduleListMode: boolean;
- displayLanguage: 'en' | 'ja';
- displayDisableLastActivityWarning: boolean;
- settingsSync: boolean;
- settingsVersion?: string;
- displayBlurAdultContent: boolean;
- displayCopyMediaTitleNotLink: boolean;
- displayTotalDueEpisodes: boolean;
- displayAniListNotifications: boolean;
- displayFiltersIncludeCompleted: boolean;
- displayDataSaver: boolean;
- debugDummyLists: boolean;
+ cacheMangaMinutes: number;
+ cacheMinutes: number;
+ displayUpcomingAnimeCollapsed: boolean;
+ displayAnimeCollapsed: boolean;
+ displayMangaCollapsed: boolean;
+ displayNotStarted: boolean;
+ displayUnresolved: boolean;
+ calculateChaptersRoundedDown: boolean;
+ displaySortedByDifference: boolean;
+ displayOutboundLinksTo: 'anilist' | 'livechartme' | 'animeschedule' | 'myanimelist';
+ displayPausedMedia: boolean;
+ displayLimitListHeight: boolean;
+ displaySocialButton: boolean;
+ calculateGuessingDisabled: boolean;
+ displayHoverNavigation: boolean;
+ displayTitleFormat: 'english' | 'romaji' | 'native';
+ calculateGuessMethod: 'median' | 'iqr_median' | 'iqr_mode' | 'mode';
+ calculateDisableOutOfDateVolumeWarning: boolean;
+ calculatePreferNativeChapterCount: boolean;
+ displayPlannedAnime: boolean;
+ displayFurigana: boolean;
+ displayAoButa:
+ | 'kaede'
+ | 'mai'
+ | 'mai_2'
+ | 'nodoka'
+ | 'rio'
+ | 'sakuta'
+ | 'shouko'
+ | 'tomoe'
+ | 'random'
+ | 'none';
+ disableManga: boolean;
+ disableAnime: boolean;
+ disableUpcomingAnime: boolean;
+ display24HourTime: boolean;
+ displayCountdownRightAligned: boolean;
+ displayNativeCountdown: boolean;
+ displayHoverCover: boolean;
+ displayDisableAnimations: boolean;
+ displayDisableNotifications: boolean;
+ displayCoverModeAnime: boolean;
+ displayCoverModeManga: boolean;
+ displayCoverWidth: number;
+ displayShortCountdown: boolean;
+ displayScheduleListMode: boolean;
+ displayLanguage: 'en' | 'ja';
+ displayDisableLastActivityWarning: boolean;
+ settingsSync: boolean;
+ settingsVersion?: string;
+ displayBlurAdultContent: boolean;
+ displayCopyMediaTitleNotLink: boolean;
+ displayTotalDueEpisodes: boolean;
+ displayAniListNotifications: boolean;
+ displayFiltersIncludeCompleted: boolean;
+ displayDataSaver: boolean;
+ debugDummyLists: boolean;
}
const defaultSettings: Settings = {
- // Display
- displayOutboundLinksTo: 'anilist',
- displayPausedMedia: true,
- displayPlannedAnime: true,
- displayLimitListHeight: false,
- displaySocialButton: false,
- displayUnresolved: false,
- displayTitleFormat: 'english',
- displayFurigana: false,
- displayHoverNavigation: false,
- displayNotStarted: false,
- displayUpcomingAnimeCollapsed: false,
- displayAnimeCollapsed: false,
- displayMangaCollapsed: false,
- displaySortedByDifference: false,
- displayAoButa: 'none',
- disableManga: false,
- disableAnime: false,
- disableUpcomingAnime: false,
- display24HourTime: false,
- displayCountdownRightAligned: false,
- displayNativeCountdown: false,
- displayHoverCover: false,
- displayDisableAnimations: false,
- displayDisableNotifications: false,
- displayCoverModeAnime: true,
- displayCoverModeManga: true,
- displayCoverWidth: 100, // 116.609
- displayShortCountdown: false,
- displayScheduleListMode: false,
- displayLanguage: 'en',
- displayDisableLastActivityWarning: false,
- displayBlurAdultContent: true,
- displayCopyMediaTitleNotLink: false,
- displayTotalDueEpisodes: false,
- displayAniListNotifications: false,
- displayFiltersIncludeCompleted: false,
- displayDataSaver: false,
-
- // Debug
- debugDummyLists: false,
-
- // Calculation
- calculateChaptersRoundedDown: true,
- calculateDisableOutOfDateVolumeWarning: false,
- calculateGuessingDisabled: true,
- calculateGuessMethod: 'iqr_mode',
- calculatePreferNativeChapterCount: false,
-
- // Cache
- cacheMangaMinutes: 120,
- cacheMinutes: 30,
-
- // Sync
- settingsSync: false,
- settingsVersion: VERSION
+ // Display
+ displayOutboundLinksTo: 'anilist',
+ displayPausedMedia: true,
+ displayPlannedAnime: true,
+ displayLimitListHeight: false,
+ displaySocialButton: false,
+ displayUnresolved: false,
+ displayTitleFormat: 'english',
+ displayFurigana: false,
+ displayHoverNavigation: false,
+ displayNotStarted: false,
+ displayUpcomingAnimeCollapsed: false,
+ displayAnimeCollapsed: false,
+ displayMangaCollapsed: false,
+ displaySortedByDifference: false,
+ displayAoButa: 'none',
+ disableManga: false,
+ disableAnime: false,
+ disableUpcomingAnime: false,
+ display24HourTime: false,
+ displayCountdownRightAligned: false,
+ displayNativeCountdown: false,
+ displayHoverCover: false,
+ displayDisableAnimations: false,
+ displayDisableNotifications: false,
+ displayCoverModeAnime: true,
+ displayCoverModeManga: true,
+ displayCoverWidth: 100, // 116.609
+ displayShortCountdown: false,
+ displayScheduleListMode: false,
+ displayLanguage: 'en',
+ displayDisableLastActivityWarning: false,
+ displayBlurAdultContent: true,
+ displayCopyMediaTitleNotLink: false,
+ displayTotalDueEpisodes: false,
+ displayAniListNotifications: false,
+ displayFiltersIncludeCompleted: false,
+ displayDataSaver: false,
+
+ // Debug
+ debugDummyLists: false,
+
+ // Calculation
+ calculateChaptersRoundedDown: true,
+ calculateDisableOutOfDateVolumeWarning: false,
+ calculateGuessingDisabled: true,
+ calculateGuessMethod: 'iqr_mode',
+ calculatePreferNativeChapterCount: false,
+
+ // Cache
+ cacheMangaMinutes: 120,
+ cacheMinutes: 30,
+
+ // Sync
+ settingsSync: false,
+ settingsVersion: VERSION
};
const createStore = () => {
- const { subscribe, set, update } = writable<Settings>(
- JSON.parse(
- browser
- ? localStorage.getItem('settings') ?? JSON.stringify(defaultSettings)
- : JSON.stringify(defaultSettings)
- )
- );
- let state: Settings;
-
- subscribe((value) => (state = value));
-
- return {
- subscribe,
- set,
- update,
- reset: () => set(defaultSettings),
- get: () => {
- const keys = Object.keys(defaultSettings);
- const settingsKeys = Object.keys(state);
- const updatedSettings = { ...state };
-
- for (const key of keys)
- if (!settingsKeys.includes(key))
- (updatedSettings[key as keyof Settings] as unknown) =
- defaultSettings[key as keyof Settings];
-
- if (browser) localStorage.setItem('settings', JSON.stringify(updatedSettings));
-
- return updatedSettings;
- },
- setKey: (key: keyof Settings, value: unknown) =>
- update((settings) => ({ ...settings, [key]: value }))
- };
+ const { subscribe, set, update } = writable<Settings>(
+ JSON.parse(
+ browser
+ ? localStorage.getItem('settings') ?? JSON.stringify(defaultSettings)
+ : JSON.stringify(defaultSettings)
+ )
+ );
+ let state: Settings;
+
+ subscribe((value) => (state = value));
+
+ return {
+ subscribe,
+ set,
+ update,
+ reset: () => set(defaultSettings),
+ get: () => {
+ const keys = Object.keys(defaultSettings);
+ const settingsKeys = Object.keys(state);
+ const updatedSettings = { ...state };
+
+ for (const key of keys)
+ if (!settingsKeys.includes(key))
+ (updatedSettings[key as keyof Settings] as unknown) =
+ defaultSettings[key as keyof Settings];
+
+ if (browser) localStorage.setItem('settings', JSON.stringify(updatedSettings));
+
+ return updatedSettings;
+ },
+ setKey: (key: keyof Settings, value: unknown) =>
+ update((settings) => ({ ...settings, [key]: value }))
+ };
};
const settings = createStore();
settings.subscribe((value) => {
- if (browser) localStorage.setItem('settings', JSON.stringify(value));
-
- if (value.settingsSync && get(settingsSyncPulled) == true)
- fetch(root(`/api/configuration?id=${get(identity).id}`)).then((response) => {
- if (response.ok)
- response.json().then((data) => {
- const isEqualsJson = (object1: Settings, object2: Settings) => {
- type AnyObject = { [key: string]: unknown };
-
- return (
- Object.keys(object1).length === Object.keys(object2).length &&
- Object.keys(object1).every(
- (key) =>
- (object1 as unknown as AnyObject)[key] == (object2 as unknown as AnyObject)[key]
- )
- );
- };
-
- if (data && data.configuration && !isEqualsJson(data.configuration, value)) {
- fetch(root(`/api/configuration`), {
- method: 'PUT',
- body: JSON.stringify(value)
- }).then((response) => {
- if (response.ok) console.log('Pushed local configuration');
-
- settingsSyncTimes.update((times) => ({ ...times, lastPush: new Date() }));
- });
- }
- });
- });
+ if (browser) localStorage.setItem('settings', JSON.stringify(value));
+
+ if (value.settingsSync && get(settingsSyncPulled) == true)
+ fetch(root(`/api/configuration?id=${get(identity).id}`)).then((response) => {
+ if (response.ok)
+ response.json().then((data) => {
+ const isEqualsJson = (object1: Settings, object2: Settings) => {
+ type AnyObject = { [key: string]: unknown };
+
+ return (
+ Object.keys(object1).length === Object.keys(object2).length &&
+ Object.keys(object1).every(
+ (key) =>
+ (object1 as unknown as AnyObject)[key] == (object2 as unknown as AnyObject)[key]
+ )
+ );
+ };
+
+ if (data && data.configuration && !isEqualsJson(data.configuration, value)) {
+ fetch(root(`/api/configuration`), {
+ method: 'PUT',
+ body: JSON.stringify(value)
+ }).then((response) => {
+ if (response.ok) console.log('Pushed local configuration');
+
+ settingsSyncTimes.update((times) => ({ ...times, lastPush: new Date() }));
+ });
+ }
+ });
+ });
});
export default settings;