diff --git a/src/equicordplugins/messageLoggerEnhanced/components/LogsModal.tsx b/src/equicordplugins/messageLoggerEnhanced/components/LogsModal.tsx index 06727dba8..1d28a6348 100644 --- a/src/equicordplugins/messageLoggerEnhanced/components/LogsModal.tsx +++ b/src/equicordplugins/messageLoggerEnhanced/components/LogsModal.tsx @@ -16,8 +16,8 @@ import { type User } from "@vencord/discord-types"; import { find, findByCode, findByCodeLazy } from "@webpack"; import { Alerts, ChannelStore, ContextMenuApi, FluxDispatcher, GuildStore, Menu, NavigationRouter, React, TabBar, TextInput, Tooltip, useMemo, useRef, useState } from "@webpack/common"; -import { clearMessagesIDB, DBMessageRecord, deleteMessageIDB, deleteMessagesBulkIDB } from "../db"; -import { cl, settings } from "../index"; +import { DBMessageRecord, deleteMessageIDB, deleteMessagesBulkIDB } from "../db"; +import { clearLogs, cl, settings } from "../index"; import { LoggedMessage, LoggedMessageJSON } from "../types"; import { messageJsonToMessageClass } from "../utils"; import { importLogs } from "../utils/settingsUtils"; @@ -147,7 +147,7 @@ export function LogsModal({ modalProps, initalQuery }: Props) { confirmVariant: "critical-primary", cancelText: "Cancel", onConfirm: async () => { - await clearMessagesIDB(); + await clearLogs(); reset(); } diff --git a/src/equicordplugins/messageLoggerEnhanced/db.ts b/src/equicordplugins/messageLoggerEnhanced/db.ts index 31c34ef45..4fae28348 100644 --- a/src/equicordplugins/messageLoggerEnhanced/db.ts +++ b/src/equicordplugins/messageLoggerEnhanced/db.ts @@ -304,14 +304,15 @@ export async function deleteMessagesBulkIDB(message_ids: string[]) { }); } -export async function clearMessagesIDB() { +export async function clearMessagesIDB(showToast = true) { cachedMessages.clear(); + await withDb(void 0, database => database.clear("messages")); - return withDb(void 0, database => database.clear("messages")).then(() => { - Toasts.show({ - type: Toasts.Type.MESSAGE, - message: "Cleared message log database and cache.", - id: Toasts.genId() - }); + if (!showToast) return; + + Toasts.show({ + type: Toasts.Type.MESSAGE, + message: "Cleared message log database and cache.", + id: Toasts.genId() }); } diff --git a/src/equicordplugins/messageLoggerEnhanced/index.tsx b/src/equicordplugins/messageLoggerEnhanced/index.tsx index cf5a537f8..e8b3cdab9 100644 --- a/src/equicordplugins/messageLoggerEnhanced/index.tsx +++ b/src/equicordplugins/messageLoggerEnhanced/index.tsx @@ -36,8 +36,15 @@ export const Flogger = new Logger("MessageLoggerEnhanced", "#f26c6c"); export const cacheSentMessages = new LimitedMap(); export const cl = classNameFactory("vc-msg-logger-enhanced-"); +let didClearLogsOnStartup = false; + const cacheThing = findByPropsLazy("commit", "getOrCreate"); +export async function clearLogs(showToast = true) { + await idb.clearMessagesIDB(showToast); + cacheSentMessages.clear(); +} + let oldGetMessage: typeof MessageStore.getMessage; const handledMessageIds = new Set(); @@ -396,6 +403,15 @@ export default definePlugin({ Native.init(); + if (settings.store.clearLogsOnRestart && !didClearLogsOnStartup) { + try { + await clearLogs(false); + didClearLogsOnStartup = true; + } catch (e) { + Flogger.error("Failed to clear logs on restart", e); + } + } + const { imageCacheDir, logsDir } = await Native.getSettings(); settings.store.imageCacheDir = imageCacheDir; settings.store.logsDir = logsDir; diff --git a/src/equicordplugins/messageLoggerEnhanced/settings.tsx b/src/equicordplugins/messageLoggerEnhanced/settings.tsx index c573acff8..fce7de8b8 100644 --- a/src/equicordplugins/messageLoggerEnhanced/settings.tsx +++ b/src/equicordplugins/messageLoggerEnhanced/settings.tsx @@ -11,10 +11,9 @@ import { OptionType } from "@utils/types"; import { Alerts, useState } from "@webpack/common"; import { Settings } from "Vencord"; -import { Native } from "."; +import { clearLogs, Native } from "."; import { ImageCacheDir, LogsDir } from "./components/FolderSelectInput"; import { openLogModal } from "./components/LogsModal"; -import { clearMessagesIDB } from "./db"; import { blockedExts } from "./list"; import { DEFAULT_IMAGE_CACHE_DIR } from "./utils/constants"; import { exportLogs, importLogs } from "./utils/settingsUtils"; @@ -260,6 +259,13 @@ export const settings = definePluginSettings({ component: ExportLogsButton }, + clearLogsOnRestart: { + type: OptionType.BOOLEAN, + description: "Clear logs when Discord restarts.", + default: false, + restartNeeded: true, + }, + openLogs: { type: OptionType.COMPONENT, description: "Open Logs", @@ -298,7 +304,7 @@ export const settings = definePluginSettings({ confirmText: "Clear", cancelText: "Cancel", onConfirm: async () => { - await clearMessagesIDB(); + await clearLogs(); }, })} > diff --git a/src/equicordplugins/messageLoggerEnhanced/utils/LimitedMap.ts b/src/equicordplugins/messageLoggerEnhanced/utils/LimitedMap.ts index a0b381e75..c027d3869 100644 --- a/src/equicordplugins/messageLoggerEnhanced/utils/LimitedMap.ts +++ b/src/equicordplugins/messageLoggerEnhanced/utils/LimitedMap.ts @@ -33,4 +33,8 @@ export class LimitedMap { get(key: K) { return this.map.get(key); } + + clear() { + this.map.clear(); + } } diff --git a/src/equicordplugins/messageLoggerEnhanced/utils/settingsUtils.ts b/src/equicordplugins/messageLoggerEnhanced/utils/settingsUtils.ts index 1f89770c5..64c6d9d03 100644 --- a/src/equicordplugins/messageLoggerEnhanced/utils/settingsUtils.ts +++ b/src/equicordplugins/messageLoggerEnhanced/utils/settingsUtils.ts @@ -21,8 +21,8 @@ import { chooseFile as chooseFileWeb } from "@utils/web"; import { Toasts } from "@webpack/common"; import { showSaveFilePicker } from "native-file-system-adapter"; -import { Native } from ".."; -import { addMessagesBulkIDB, clearMessagesIDB, iterateAllMessagesIDB } from "../db"; +import { Native, clearLogs } from ".."; +import { addMessagesBulkIDB, iterateAllMessagesIDB } from "../db"; import { LoggedMessageJSON } from "../types"; export async function importLogs() { @@ -34,7 +34,7 @@ export async function importLogs() { for await (const logItems of iterateLogItems()) { if (!cleared) { - await clearMessagesIDB(); + await clearLogs(false); cleared = true; }