From 44f6f71c3efd2e4e0f9dbd97ab4680ec76536052 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Sat, 22 Oct 2022 04:41:33 +0200 Subject: Monaco for Discord Desktop --- src/components/Monaco.ts | 74 ++++++------------------------------------- src/components/Settings.tsx | 2 +- src/components/monacoWin.html | 52 ++++++++++++++++++++++++++++++ src/ipcMain/index.ts | 20 ++++++++++-- src/modules.d.ts | 5 +++ src/preload.ts | 15 +++++++-- src/utils/IpcEvents.ts | 3 +- src/utils/Queue.ts | 27 ++++++++++++++++ 8 files changed, 127 insertions(+), 71 deletions(-) create mode 100644 src/components/monacoWin.html create mode 100644 src/utils/Queue.ts (limited to 'src') diff --git a/src/components/Monaco.ts b/src/components/Monaco.ts index 495f512..6b01891 100644 --- a/src/components/Monaco.ts +++ b/src/components/Monaco.ts @@ -16,80 +16,26 @@ * along with this program. If not, see . */ - import { IpcEvents } from "../utils"; import { debounce } from "../utils/debounce"; import { find } from "../webpack/webpack"; +import monacoHtml from "@fileContent/monacoWin.html"; +import { Queue } from "../utils/Queue"; +const queue = new Queue(); const setCss = debounce((css: string) => { - VencordNative.ipc.invoke(IpcEvents.SET_QUICK_CSS, css); + queue.add(() => VencordNative.ipc.invoke(IpcEvents.SET_QUICK_CSS, css)); }); -// FIXME: Discord Desktop support. -// open() fails to create the popup and returns null. Probably have to -// do some logic in main - -// adapted from https://stackoverflow.com/a/63179814 export async function launchMonacoEditor() { const win = open("about:blank", void 0, "popup,width=1000,height=1000")!; + win.setCss = setCss; win.getCurrentCss = () => VencordNative.ipc.invoke(IpcEvents.GET_QUICK_CSS); - win.callback = (editor: any) => { - editor.onDidChangeModelContent(() => - setCss(editor.getValue()) - ); - }; - - let { theme } = find(m => m.ProtoClass?.typeName.endsWith("PreloadedUserSettings")) - .getCurrentValue().appearance; - theme = theme === 1 ? "vs-dark" : "vs-light"; - - // problem? - win.document.write(` - - - - - - QuickCss Editor - - - - -
- - - - - + win.getTheme = () => find(m => m.ProtoClass?.typeName.endsWith("PreloadedUserSettings")) + .getCurrentValue().appearance.theme === 1 + ? "vs-dark" + : "vs-light"; -`); + win.document.write(monacoHtml); } diff --git a/src/components/Settings.tsx b/src/components/Settings.tsx index 6a5ea9d..8ffe111 100644 --- a/src/components/Settings.tsx +++ b/src/components/Settings.tsx @@ -77,7 +77,7 @@ export default ErrorBoundary.wrap(function Settings() { Launch Directory