2023-02-22 18:53:08 +01:00
|
|
|
import { browser } from '$app/environment';
|
2024-06-07 18:35:05 +02:00
|
|
|
import { Theme, defaultLang } from '$lib/constants';
|
2024-07-05 05:56:54 +02:00
|
|
|
import { getPreferredLocale } from '$lib/utils/i18n';
|
2025-03-28 12:40:57 -07:00
|
|
|
import { persisted } from 'svelte-persisted-store';
|
2023-02-22 18:53:08 +01:00
|
|
|
|
2024-01-07 01:15:25 +01:00
|
|
|
export interface ThemeSetting {
|
|
|
|
|
value: Theme;
|
|
|
|
|
system: boolean;
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-22 18:53:08 +01:00
|
|
|
// Locale to use for formatting dates, numbers, etc.
|
2025-06-04 03:27:23 +08:00
|
|
|
export const locale = persisted<string | undefined>('locale', 'default', {
|
2023-07-01 00:50:47 -04:00
|
|
|
serializer: {
|
2025-06-04 03:27:23 +08:00
|
|
|
parse: (text) => text || 'default',
|
2024-02-02 04:18:00 +01:00
|
|
|
stringify: (object) => object ?? '',
|
2023-07-01 00:50:47 -04:00
|
|
|
},
|
2023-02-22 18:53:08 +01:00
|
|
|
});
|
2023-05-21 08:26:06 +02:00
|
|
|
|
2024-07-05 05:56:54 +02:00
|
|
|
const preferredLocale = browser ? getPreferredLocale() : undefined;
|
|
|
|
|
export const lang = persisted<string>('lang', preferredLocale || defaultLang.code, {
|
2024-06-04 21:53:00 +02:00
|
|
|
serializer: {
|
|
|
|
|
parse: (text) => text,
|
|
|
|
|
stringify: (object) => object ?? '',
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
2023-06-02 15:55:08 +02:00
|
|
|
export interface MapSettings {
|
2023-07-01 00:50:47 -04:00
|
|
|
allowDarkMode: boolean;
|
2023-10-04 15:51:07 +02:00
|
|
|
includeArchived: boolean;
|
2023-07-01 00:50:47 -04:00
|
|
|
onlyFavorites: boolean;
|
2024-02-14 16:07:00 +01:00
|
|
|
withPartners: boolean;
|
2024-05-13 15:28:57 +02:00
|
|
|
withSharedAlbums: boolean;
|
2023-07-01 00:50:47 -04:00
|
|
|
relativeDate: string;
|
|
|
|
|
dateAfter: string;
|
|
|
|
|
dateBefore: string;
|
2023-06-02 15:55:08 +02:00
|
|
|
}
|
|
|
|
|
|
2025-01-16 10:05:14 -05:00
|
|
|
const defaultMapSettings = {
|
2023-07-01 00:50:47 -04:00
|
|
|
allowDarkMode: true,
|
2023-10-04 15:51:07 +02:00
|
|
|
includeArchived: false,
|
2023-07-01 00:50:47 -04:00
|
|
|
onlyFavorites: false,
|
2024-02-14 16:07:00 +01:00
|
|
|
withPartners: false,
|
2024-05-13 15:28:57 +02:00
|
|
|
withSharedAlbums: false,
|
2023-07-01 00:50:47 -04:00
|
|
|
relativeDate: '',
|
|
|
|
|
dateAfter: '',
|
|
|
|
|
dateBefore: '',
|
2025-01-16 10:05:14 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const persistedObject = <T>(key: string, defaults: T) =>
|
|
|
|
|
persisted<T>(key, defaults, {
|
|
|
|
|
serializer: {
|
|
|
|
|
parse: (text) => ({ ...defaultMapSettings, ...JSON.parse(text ?? null) }),
|
|
|
|
|
stringify: JSON.stringify,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
export const mapSettings = persistedObject<MapSettings>('map-settings', defaultMapSettings);
|
2023-06-21 16:59:13 +02:00
|
|
|
|
|
|
|
|
export const videoViewerVolume = persisted<number>('video-viewer-volume', 1, {});
|
2024-05-11 01:58:21 +05:30
|
|
|
export const videoViewerMuted = persisted<boolean>('video-viewer-muted', false, {});
|
2023-06-26 18:54:20 +02:00
|
|
|
|
2023-06-29 04:14:16 +02:00
|
|
|
export const isShowDetail = persisted<boolean>('info-opened', false, {});
|
|
|
|
|
|
2023-06-26 18:54:20 +02:00
|
|
|
export interface AlbumViewSettings {
|
2023-08-17 15:46:39 +02:00
|
|
|
view: string;
|
2024-03-24 19:07:20 +01:00
|
|
|
filter: string;
|
2024-04-05 21:19:26 +02:00
|
|
|
groupBy: string;
|
|
|
|
|
groupOrder: string;
|
|
|
|
|
sortBy: string;
|
|
|
|
|
sortOrder: string;
|
|
|
|
|
collapsedGroups: {
|
|
|
|
|
// Grouping Option => Array<Group ID>
|
|
|
|
|
[group: string]: string[];
|
|
|
|
|
};
|
2023-08-17 15:46:39 +02:00
|
|
|
}
|
|
|
|
|
|
2025-02-06 21:54:01 +01:00
|
|
|
export interface PlacesViewSettings {
|
|
|
|
|
groupBy: string;
|
|
|
|
|
collapsedGroups: {
|
|
|
|
|
// Grouping Option => Array<Group ID>
|
|
|
|
|
[group: string]: string[];
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
2023-09-27 23:09:54 -04:00
|
|
|
export interface SidebarSettings {
|
|
|
|
|
people: boolean;
|
2023-10-29 01:42:51 +00:00
|
|
|
sharing: boolean;
|
2023-09-27 23:09:54 -04:00
|
|
|
}
|
|
|
|
|
|
2024-04-05 21:19:26 +02:00
|
|
|
export enum SortOrder {
|
|
|
|
|
Asc = 'asc',
|
|
|
|
|
Desc = 'desc',
|
|
|
|
|
}
|
|
|
|
|
|
2023-08-17 15:46:39 +02:00
|
|
|
export enum AlbumViewMode {
|
|
|
|
|
Cover = 'Cover',
|
|
|
|
|
List = 'List',
|
2023-06-26 18:54:20 +02:00
|
|
|
}
|
|
|
|
|
|
2024-03-24 19:07:20 +01:00
|
|
|
export enum AlbumFilter {
|
|
|
|
|
All = 'All',
|
|
|
|
|
Owned = 'Owned',
|
|
|
|
|
Shared = 'Shared',
|
|
|
|
|
}
|
|
|
|
|
|
2024-04-05 21:19:26 +02:00
|
|
|
export enum AlbumGroupBy {
|
|
|
|
|
None = 'None',
|
|
|
|
|
Year = 'Year',
|
|
|
|
|
Owner = 'Owner',
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export enum AlbumSortBy {
|
|
|
|
|
Title = 'Title',
|
|
|
|
|
ItemCount = 'ItemCount',
|
|
|
|
|
DateModified = 'DateModified',
|
|
|
|
|
DateCreated = 'DateCreated',
|
|
|
|
|
MostRecentPhoto = 'MostRecentPhoto',
|
|
|
|
|
OldestPhoto = 'OldestPhoto',
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-26 18:54:20 +02:00
|
|
|
export const albumViewSettings = persisted<AlbumViewSettings>('album-view-settings', {
|
2023-08-17 15:46:39 +02:00
|
|
|
view: AlbumViewMode.Cover,
|
2024-03-24 19:07:20 +01:00
|
|
|
filter: AlbumFilter.All,
|
2024-04-05 21:19:26 +02:00
|
|
|
groupBy: AlbumGroupBy.Year,
|
|
|
|
|
groupOrder: SortOrder.Desc,
|
|
|
|
|
sortBy: AlbumSortBy.MostRecentPhoto,
|
|
|
|
|
sortOrder: SortOrder.Desc,
|
|
|
|
|
collapsedGroups: {},
|
2023-06-26 18:54:20 +02:00
|
|
|
});
|
2024-01-17 20:18:04 +01:00
|
|
|
|
2025-02-06 21:54:01 +01:00
|
|
|
export enum PlacesGroupBy {
|
|
|
|
|
None = 'None',
|
|
|
|
|
Country = 'Country',
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const placesViewSettings = persisted<PlacesViewSettings>('places-view-settings', {
|
|
|
|
|
groupBy: PlacesGroupBy.None,
|
|
|
|
|
collapsedGroups: {},
|
|
|
|
|
});
|
|
|
|
|
|
2024-01-17 20:18:04 +01:00
|
|
|
export const showDeleteModal = persisted<boolean>('delete-confirm-dialog', true, {});
|
2024-02-13 15:42:29 +01:00
|
|
|
|
|
|
|
|
export const alwaysLoadOriginalFile = persisted<boolean>('always-load-original-file', false, {});
|
2024-03-11 12:45:01 -04:00
|
|
|
|
|
|
|
|
export const playVideoThumbnailOnHover = persisted<boolean>('play-video-thumbnail-on-hover', true, {});
|
2024-05-14 21:31:47 +02:00
|
|
|
|
|
|
|
|
export const loopVideo = persisted<boolean>('loop-video', true, {});
|
2024-12-04 21:38:55 +01:00
|
|
|
|
|
|
|
|
export const recentAlbumsDropdown = persisted<boolean>('recent-albums-open', true, {});
|