mirror of
https://github.com/redphx/better-xcloud.git
synced 2025-06-23 07:53:04 +02:00
85 lines
3.5 KiB
TypeScript
85 lines
3.5 KiB
TypeScript
import { ALL_PREFS, GlobalPref, StorageKey, StreamPref, type AnyPref } from "@/enums/pref-keys";
|
|
import type { PrefInfo, SettingActionOrigin } from "@/types/setting-definition";
|
|
import { GlobalSettingsStorage } from "./settings-storages/global-settings-storage";
|
|
import { StreamSettingsStorage } from "./settings-storages/stream-settings-storage";
|
|
|
|
// Migrate Stream settings in Global storage to Stream storage
|
|
function migrateStreamSettings() {
|
|
const storage = window.localStorage;
|
|
const globalSettings = JSON.parse(storage.getItem(StorageKey.GLOBAL) || '{}');
|
|
const streamSettings = JSON.parse(storage.getItem(StorageKey.STREAM) || '{}');
|
|
let modified = false;
|
|
for (const key in globalSettings) {
|
|
if (isStreamPref(key as AnyPref)) {
|
|
// Migration
|
|
if (!streamSettings.hasOwnProperty(key)) {
|
|
streamSettings[key] = globalSettings[key];
|
|
}
|
|
delete globalSettings[key];
|
|
modified = true;
|
|
}
|
|
}
|
|
|
|
if (modified) {
|
|
storage.setItem(StorageKey.GLOBAL, JSON.stringify(globalSettings));
|
|
storage.setItem(StorageKey.STREAM, JSON.stringify(streamSettings));
|
|
}
|
|
}
|
|
|
|
migrateStreamSettings();
|
|
export const STORAGE = {
|
|
Global: new GlobalSettingsStorage(),
|
|
Stream: new StreamSettingsStorage(),
|
|
};
|
|
|
|
const streamSettingsStorage = STORAGE.Stream;
|
|
export const getStreamPrefDefinition = streamSettingsStorage.getDefinition.bind(streamSettingsStorage);
|
|
export const getStreamPref = streamSettingsStorage.getSetting.bind(streamSettingsStorage);
|
|
export const setStreamPref = streamSettingsStorage.setSetting.bind(streamSettingsStorage);
|
|
export const getGamePref = streamSettingsStorage.getSettingByGame.bind(streamSettingsStorage);
|
|
export const setGamePref = streamSettingsStorage.setSettingByGame.bind(streamSettingsStorage);
|
|
export const setGameIdPref = streamSettingsStorage.setGameId.bind(streamSettingsStorage);
|
|
export const hasGamePref = streamSettingsStorage.hasGameSetting.bind(streamSettingsStorage);
|
|
STORAGE.Stream = streamSettingsStorage;
|
|
|
|
const globalSettingsStorage = STORAGE.Global;
|
|
export const getGlobalPrefDefinition = globalSettingsStorage.getDefinition.bind(globalSettingsStorage);
|
|
export const getGlobalPref = globalSettingsStorage.getSetting.bind(globalSettingsStorage);
|
|
export const setGlobalPref = globalSettingsStorage.setSetting.bind(globalSettingsStorage);
|
|
|
|
|
|
export function isGlobalPref(prefKey: AnyPref): prefKey is GlobalPref {
|
|
return ALL_PREFS.global.includes(prefKey as GlobalPref);
|
|
}
|
|
|
|
export function isStreamPref(prefKey: AnyPref): prefKey is StreamPref {
|
|
return ALL_PREFS.stream.includes(prefKey as StreamPref);
|
|
}
|
|
|
|
export function getPrefInfo(prefKey: AnyPref): PrefInfo {
|
|
if (isGlobalPref(prefKey)) {
|
|
return {
|
|
storage: STORAGE.Global,
|
|
definition: getGlobalPrefDefinition(prefKey as GlobalPref),
|
|
// value: getGlobalPref(prefKey as GlobalPref),
|
|
}
|
|
} else if (isStreamPref(prefKey)) {
|
|
return {
|
|
storage: STORAGE.Stream,
|
|
definition: getStreamPrefDefinition(prefKey as StreamPref),
|
|
// value: getStreamPref(prefKey as StreamPref),
|
|
}
|
|
}
|
|
|
|
alert('Missing pref definition: ' + prefKey);
|
|
return {} as PrefInfo;
|
|
}
|
|
|
|
export function setPref(prefKey: AnyPref, value: any, origin: SettingActionOrigin) {
|
|
if (isGlobalPref(prefKey)) {
|
|
setGlobalPref(prefKey as GlobalPref, value, origin);
|
|
} else if (isStreamPref(prefKey)) {
|
|
setStreamPref(prefKey as StreamPref, value, origin);
|
|
}
|
|
}
|