From ae80749dd80b69fd269df23956c66832951ebcd5 Mon Sep 17 00:00:00 2001
From: Nuckyz <61953774+Nuckyz@users.noreply.github.com>
Date: Sun, 2 Apr 2023 21:13:44 -0300
Subject: Game Activity Toggle and SettingsStoreAPI (#587)
---
src/api/SettingsStore.ts | 71 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 71 insertions(+)
create mode 100644 src/api/SettingsStore.ts
(limited to 'src/api/SettingsStore.ts')
diff --git a/src/api/SettingsStore.ts b/src/api/SettingsStore.ts
new file mode 100644
index 0000000..59c78ed
--- /dev/null
+++ b/src/api/SettingsStore.ts
@@ -0,0 +1,71 @@
+/*
+ * Vencord, a modification for Discord's desktop app
+ * Copyright (c) 2023 Vendicated and contributors
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+*/
+
+import Logger from "@utils/Logger";
+import { proxyLazy } from "@utils/proxyLazy";
+import { findModuleId, wreq } from "@webpack";
+
+import { Settings } from "./settings";
+
+interface Setting {
+ /**
+ * Get the setting value
+ */
+ getSetting(): T;
+ /**
+ * Update the setting value
+ * @param value The new value
+ */
+ updateSetting(value: T | ((old: T) => T)): Promise;
+ /**
+ * React hook for automatically updating components when the setting is updated
+ */
+ useSetting(): T;
+ settingsStoreApiGroup: string;
+ settingsStoreApiName: string;
+}
+
+const SettingsStores: Array> | undefined = proxyLazy(() => {
+ const modId = findModuleId('"textAndImages","renderSpoilers"');
+ if (modId == null) return new Logger("SettingsStoreAPI").error("Didn't find stores module.");
+
+ const mod = wreq(modId);
+ if (mod == null) return;
+
+ return Object.values(mod).filter((s: any) => s?.settingsStoreApiGroup) as any;
+});
+
+/**
+ * Get the store for a setting
+ * @param group The setting group
+ * @param name The name of the setting
+ */
+export function getSettingStore(group: string, name: string): Setting | undefined {
+ if (!Settings.plugins.SettingsStoreAPI.enabled) throw new Error("Cannot use SettingsStoreAPI without setting as dependency.");
+
+ return SettingsStores?.find(s => s?.settingsStoreApiGroup === group && s?.settingsStoreApiName === name);
+}
+
+/**
+ * getSettingStore but lazy
+ */
+export function getSettingStoreLazy(group: string, name: string) {
+ if (!Settings.plugins.SettingsStoreAPI.enabled) throw new Error("Cannot use SettingsStoreAPI without setting as dependency.");
+
+ return proxyLazy(() => getSettingStore(group, name));
+}
--
cgit