feat: add "Reset Vesktop" option to menu & tray (#53)

Co-authored-by: V <vendicated@riseup.net>
This commit is contained in:
Ryan Cao 2023-07-14 00:14:48 +00:00 committed by GitHub
parent 6d35be79b8
commit d884b7d3d6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -4,7 +4,16 @@
* Copyright (c) 2023 Vendicated and Vencord contributors * Copyright (c) 2023 Vendicated and Vencord contributors
*/ */
import { app, BrowserWindow, BrowserWindowConstructorOptions, Menu, MenuItemConstructorOptions, Tray } from "electron"; import {
app,
BrowserWindow,
BrowserWindowConstructorOptions,
dialog,
Menu,
MenuItemConstructorOptions,
Tray
} from "electron";
import { rm } from "fs/promises";
import { join } from "path"; import { join } from "path";
import { IpcEvents } from "shared/IpcEvents"; import { IpcEvents } from "shared/IpcEvents";
import { isTruthy } from "shared/utils/guards"; import { isTruthy } from "shared/utils/guards";
@ -14,7 +23,7 @@ import type { SettingsStore } from "shared/utils/SettingsStore";
import { ICON_PATH } from "../shared/paths"; import { ICON_PATH } from "../shared/paths";
import { createAboutWindow } from "./about"; import { createAboutWindow } from "./about";
import { initArRPC } from "./arrpc"; import { initArRPC } from "./arrpc";
import { DEFAULT_HEIGHT, DEFAULT_WIDTH, MIN_HEIGHT, MIN_WIDTH, VENCORD_FILES_DIR } from "./constants"; import { DATA_DIR, DEFAULT_HEIGHT, DEFAULT_WIDTH, MIN_HEIGHT, MIN_WIDTH, VENCORD_FILES_DIR } from "./constants";
import { Settings, VencordSettings } from "./settings"; import { Settings, VencordSettings } from "./settings";
import { createSplashWindow } from "./splash"; import { createSplashWindow } from "./splash";
import { makeLinksOpenExternally } from "./utils/makeLinksOpenExternally"; import { makeLinksOpenExternally } from "./utils/makeLinksOpenExternally";
@ -71,6 +80,12 @@ function initTray(win: BrowserWindow) {
app.quit(); app.quit();
} }
}, },
{
label: "Reset Vesktop",
async click() {
await clearData(win);
}
},
{ {
type: "separator" type: "separator"
}, },
@ -104,6 +119,34 @@ function initTray(win: BrowserWindow) {
}); });
} }
const enum MessageBoxChoice {
Default,
Cancel
}
async function clearData(win: BrowserWindow) {
const { response } = await dialog.showMessageBox(win, {
message: "Are you sure you want to reset Vesktop?",
detail: "This will log you out, clear caches and reset all your settings!\n\nVesktop will automatically restart after this operation.",
buttons: ["Yes", "No"],
cancelId: MessageBoxChoice.Cancel,
defaultId: MessageBoxChoice.Default,
type: "warning"
});
if (response === MessageBoxChoice.Cancel) return;
win.close();
await win.webContents.session.clearStorageData();
await win.webContents.session.clearCache();
await win.webContents.session.clearCodeCaches({});
await rm(DATA_DIR, { force: true, recursive: true });
app.relaunch();
app.quit();
}
function initMenuBar(win: BrowserWindow) { function initMenuBar(win: BrowserWindow) {
const isWindows = process.platform === "win32"; const isWindows = process.platform === "win32";
const isDarwin = process.platform === "darwin"; const isDarwin = process.platform === "darwin";
@ -123,6 +166,13 @@ function initMenuBar(win: BrowserWindow) {
}, },
toolTip: "Vesktop will automatically restart after this operation" toolTip: "Vesktop will automatically restart after this operation"
}, },
{
label: "Reset Vesktop",
async click() {
await clearData(win);
},
toolTip: "Vesktop will automatically restart after this operation"
},
{ {
label: "Relaunch", label: "Relaunch",
accelerator: "CmdOrCtrl+Shift+R", accelerator: "CmdOrCtrl+Shift+R",