feishin/src/preload/local-settings.ts

98 lines
2.3 KiB
TypeScript
Raw Normal View History

import { ipcRenderer, IpcRendererEvent, webFrame } from 'electron';
2023-09-15 20:42:38 -07:00
import Store from 'electron-store';
2022-12-19 15:59:14 -08:00
const store = new Store();
2024-02-12 20:50:50 -08:00
const set = (
property: string,
value: boolean | Record<string, unknown> | string | string[] | undefined,
2024-02-12 20:50:50 -08:00
) => {
if (value === undefined) {
store.delete(property);
return;
}
2023-07-01 19:10:05 -07:00
store.set(`${property}`, value);
2022-12-19 15:59:14 -08:00
};
const get = (property: string) => {
2023-07-01 19:10:05 -07:00
return store.get(`${property}`);
2022-12-19 15:59:14 -08:00
};
const restart = () => {
2023-07-01 19:10:05 -07:00
ipcRenderer.send('app-restart');
2022-12-19 15:59:14 -08:00
};
const enableMediaKeys = () => {
2023-07-01 19:10:05 -07:00
ipcRenderer.send('global-media-keys-enable');
2022-12-19 15:59:14 -08:00
};
const disableMediaKeys = () => {
2023-07-01 19:10:05 -07:00
ipcRenderer.send('global-media-keys-disable');
2022-12-19 15:59:14 -08:00
};
const passwordGet = async (server: string): Promise<null | string> => {
2023-07-01 19:10:05 -07:00
return ipcRenderer.invoke('password-get', server);
};
const passwordRemove = (server: string) => {
2023-07-01 19:10:05 -07:00
ipcRenderer.send('password-remove', server);
};
const passwordSet = async (password: string, server: string): Promise<boolean> => {
2023-07-01 19:10:05 -07:00
return ipcRenderer.invoke('password-set', password, server);
};
2023-06-11 19:45:13 +00:00
const setZoomFactor = (zoomFactor: number) => {
2023-07-01 19:10:05 -07:00
webFrame.setZoomFactor(zoomFactor / 100);
2023-06-11 19:45:13 +00:00
};
const fontError = (cb: (event: IpcRendererEvent, file: string) => void) => {
ipcRenderer.on('custom-font-error', cb);
};
2024-01-22 18:52:14 -08:00
const themeSet = (theme: TitleTheme): void => {
2024-01-21 22:47:59 -08:00
ipcRenderer.send('theme-set', theme);
};
export const toServerType = (value?: string): null | string => {
switch (value?.toLowerCase()) {
case 'jellyfin':
return 'jellyfin';
case 'navidrome':
return 'navidrome';
case 'subsonic':
return 'subsonic';
default:
return null;
}
};
const SERVER_TYPE = toServerType(process.env.SERVER_TYPE);
const env = {
SERVER_LOCK:
SERVER_TYPE !== null ? process.env.SERVER_LOCK?.toLocaleLowerCase() === 'true' : false,
SERVER_NAME: process.env.SERVER_NAME ?? '',
SERVER_TYPE,
SERVER_URL: process.env.SERVER_URL ?? 'http://',
START_MAXIMIZED: store.get('maximized'),
};
2022-12-19 15:59:14 -08:00
export const localSettings = {
2023-07-01 19:10:05 -07:00
disableMediaKeys,
enableMediaKeys,
env,
fontError,
2023-07-01 19:10:05 -07:00
get,
passwordGet,
passwordRemove,
passwordSet,
restart,
set,
setZoomFactor,
2024-01-21 22:47:59 -08:00
themeSet,
2022-12-19 15:59:14 -08:00
};
export type LocalSettings = typeof localSettings;