aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/pronoundb/pronoundbUtils.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/pronoundb/pronoundbUtils.ts')
-rw-r--r--src/plugins/pronoundb/pronoundbUtils.ts32
1 files changed, 31 insertions, 1 deletions
diff --git a/src/plugins/pronoundb/pronoundbUtils.ts b/src/plugins/pronoundb/pronoundbUtils.ts
index afeea95..2eff47a 100644
--- a/src/plugins/pronoundb/pronoundbUtils.ts
+++ b/src/plugins/pronoundb/pronoundbUtils.ts
@@ -1,6 +1,6 @@
/*
* Vencord, a modification for Discord's desktop app
- * Copyright (c) 2022 Vendicated and contributors
+ * Copyright (c) 2022-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
@@ -16,6 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
+import * as DataStore from "@api/DataStore";
import { Settings } from "@api/settings";
import { VENCORD_USER_AGENT } from "@utils/constants";
import { debounce } from "@utils/debounce";
@@ -23,6 +24,15 @@ import { debounce } from "@utils/debounce";
import { PronounsFormat } from ".";
import { PronounCode, PronounMapping, PronounsResponse } from "./types";
+
+let pronounDBStore: DataStore.UseStore | undefined;
+
+function getPronounDbStore(): DataStore.UseStore {
+ if (!pronounDBStore)
+ pronounDBStore = DataStore.createStore("VencordPronounData", "LocalPronounDBOverrides");
+ return pronounDBStore;
+}
+
// A map of cached pronouns so the same request isn't sent twice
const cache: Record<string, PronounCode> = {};
// A map of ids and callbacks that should be triggered on fetch
@@ -39,6 +49,26 @@ const bulkFetch = debounce(async () => {
}
});
+// Find the pronouns for a discord id, first looking for local override then fetching pronoundb.
+export async function findPronouns(id: string): Promise<PronounCode> {
+ return (await getLocalPronounOverride(id)) ?? await fetchPronouns(id);
+}
+
+export function setLocalPronounOverride(id: string, newOverride: PronounCode | null): Promise<void> {
+ if (newOverride == null) {
+ return DataStore.del(id, getPronounDbStore());
+ } else {
+ return DataStore.set(id, newOverride, getPronounDbStore());
+ }
+}
+
+export async function getLocalPronounOverride(id: string): Promise<PronounCode | null> {
+ const localValue = await DataStore.get(id, getPronounDbStore());
+ if (localValue in PronounMapping)
+ return localValue as PronounCode;
+ return null;
+}
+
// Fetches the pronouns for one id, returning a promise that resolves if it was cached, or once the request is completed
export function fetchPronouns(id: string): Promise<PronounCode> {
return new Promise(res => {