diff --git a/src/equicordplugins/messageLoggerEnhanced/db.ts b/src/equicordplugins/messageLoggerEnhanced/db.ts index f0d7e03d3..b4d8c7f73 100644 --- a/src/equicordplugins/messageLoggerEnhanced/db.ts +++ b/src/equicordplugins/messageLoggerEnhanced/db.ts @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -import { ChannelStore } from "@webpack/common"; +import { ChannelStore, Toasts } from "@webpack/common"; import { DBSchema, IDBPDatabase, openDB } from "idb"; import { LoggedMessageJSON } from "./types"; @@ -251,4 +251,9 @@ export async function deleteMessagesBulkIDB(message_ids: string[]) { export async function clearMessagesIDB() { await db.clear("messages"); cachedMessages.clear(); + Toasts.show({ + type: Toasts.Type.MESSAGE, + message: "Cleared message log database and cache.", + id: Toasts.genId() + }); } diff --git a/src/equicordplugins/messageLoggerEnhanced/settings.tsx b/src/equicordplugins/messageLoggerEnhanced/settings.tsx index be5401ac5..c573acff8 100644 --- a/src/equicordplugins/messageLoggerEnhanced/settings.tsx +++ b/src/equicordplugins/messageLoggerEnhanced/settings.tsx @@ -297,8 +297,8 @@ export const settings = definePluginSettings({ confirmVariant: "critical-primary", confirmText: "Clear", cancelText: "Cancel", - onConfirm: () => { - clearMessagesIDB(); + onConfirm: async () => { + await clearMessagesIDB(); }, })} > diff --git a/src/equicordplugins/messageLoggerEnhanced/utils/settingsUtils.ts b/src/equicordplugins/messageLoggerEnhanced/utils/settingsUtils.ts index 329843e80..1f89770c5 100644 --- a/src/equicordplugins/messageLoggerEnhanced/utils/settingsUtils.ts +++ b/src/equicordplugins/messageLoggerEnhanced/utils/settingsUtils.ts @@ -22,7 +22,7 @@ import { Toasts } from "@webpack/common"; import { showSaveFilePicker } from "native-file-system-adapter"; import { Native } from ".."; -import { addMessagesBulkIDB, iterateAllMessagesIDB } from "../db"; +import { addMessagesBulkIDB, clearMessagesIDB, iterateAllMessagesIDB } from "../db"; import { LoggedMessageJSON } from "../types"; export async function importLogs() { @@ -30,17 +30,27 @@ export async function importLogs() { let count = 0; const batchSize = 50; let batch: LoggedMessageJSON[] = []; + let cleared = false; - for await (const item of iterateLogItems()) { - const message = item.message || item; - if (!message || !message.id || !message.channel_id || !message.timestamp) continue; + for await (const logItems of iterateLogItems()) { + if (!cleared) { + await clearMessagesIDB(); + cleared = true; + } - batch.push(message); + const items = logItems.flat(); - if (batch.length >= batchSize) { - await addMessagesBulkIDB(batch); - count += batch.length; - batch = []; + for (const item of items) { + const { message } = item; + if (!message || !message.id || !message.channel_id || !message.timestamp) continue; + + batch.push(message); + + if (batch.length >= batchSize) { + await addMessagesBulkIDB(batch); + count += batch.length; + batch = []; + } } } @@ -72,7 +82,6 @@ export async function importLogs() { type: Toasts.Type.FAILURE }); } - } export async function exportLogs() { @@ -128,7 +137,7 @@ export async function exportLogs() { first = false; const chunk = prefix + " " + JSON.stringify(records); await writer.write(encoder.encode(chunk)); - count += records.length; + count++; } await writer.write(encoder.encode("\n ]\n}"));