further work on vencord

This commit is contained in:
Malte Jürgens 2022-10-22 23:56:49 +02:00
parent 0493a76117
commit 9eae8bbe4f
No known key found for this signature in database
GPG Key ID: D29FBD5F93C0CFC3
6 changed files with 122 additions and 40 deletions

View File

@ -21,9 +21,9 @@ window.VencordNative = {
webclass.vencordSend(event, args);
},
sendSync: (event: string, ...args: any[]) => {
// We need this hack because Vencord requires its settings right when it starts
if (event === "VencordGetSettings") {
console.log("stub: IPC VencordGetSettings");
return "{}";
return window.discordScreenaudioVencordSettings || "{}";
} else throw new Error("Synchroneous IPC not implemented");
},
on(event: string, listener: () => {}) {
@ -34,6 +34,9 @@ window.VencordNative = {
},
invoke: async (event: string, ...args: any[]) => {
await prepareWebclass();
if (event === "VencordSetSettings") {
window.discordScreenaudioVencordSettings = args[0];
}
return webclass.vencordSend(event, args);
},
},

View File

@ -0,0 +1,46 @@
diff --git a/src/components/Settings.tsx b/src/components/Settings.tsx
index 8ffe111..8f037bd 100644
--- a/src/components/Settings.tsx
+++ b/src/components/Settings.tsx
@@ -61,37 +61,22 @@ export default ErrorBoundary.wrap(function Settings() {
Settings Directory: <code style={{ userSelect: "text", cursor: "text" }}>{settingsDir}</code>
</Forms.FormText>
- {!IS_WEB && <Flex className={Margins.marginBottom20} style={{ marginTop: 8 }}>
+ <Flex className={Margins.marginBottom20} style={{ marginTop: 8 }}>
<Button
- onClick={() => window.DiscordNative.app.relaunch()}
- size={Button.Sizes.SMALL}
- color={Button.Colors.GREEN}
- >
- Reload
- </Button>
- <Button
- onClick={() => window.DiscordNative.fileManager.showItemInFolder(settingsDir)}
+ onClick={() => VencordNative.ipc.send(IpcEvents.OPEN_EXTERNAL, settingsDir)}
size={Button.Sizes.SMALL}
disabled={settingsDirPending}
>
Launch Directory
</Button>
<Button
- onClick={() => VencordNative.ipc.invoke(IpcEvents.OPEN_MONACO_EDITOR)}
+ onClick={() => VencordNative.ipc.send(IpcEvents.OPEN_EXTERNAL, settingsDir + "/quickCss.css")}
size={Button.Sizes.SMALL}
disabled={settingsDir === "Loading..."}
>
Open QuickCSS File
</Button>
- </Flex>}
-
- {IS_WEB && <Button
- onClick={launchMonacoEditor}
- size={Button.Sizes.SMALL}
- disabled={settingsDir === "Loading..."}
- >
- Open QuickCSS File
- </Button>}
+ </Flex>
<Forms.FormDivider />
<Switch

File diff suppressed because one or more lines are too long

View File

@ -22,7 +22,7 @@ fi
echo_status "Checking out latest commit"
git reset --hard HEAD
git checkout main
git reset --hard origin/main
git reset --hard devbuild
echo_status "Installing dependencies"
pnpm i
@ -30,6 +30,7 @@ pnpm i
echo_status "Patching Vencord"
cp -v ../../assets/vencord/plugin.js ./src/plugins/discord-screenaudio.js
cp -v ../../assets/vencord/VencordNativeStub.ts ./browser/VencordNativeStub.ts
patch -p1 -i ../../assets/vencord/settings.patch
echo_status "Building Vencord"
pnpm run buildWeb

View File

@ -59,7 +59,16 @@ DiscordPage::DiscordPage(QWidget *parent) : QWebEnginePage(parent) {
webChannel()->registerObject("webclass", &m_webClass);
injectScriptFile("userscript.js", ":/assets/userscript.js");
injectScriptFile("vencord.js", ":/assets/vencord/vencord.js");
QFile vencord(":/assets/vencord/vencord.js");
if (!vencord.open(QIODevice::ReadOnly))
qFatal("Failed to load vencord source with error: %s",
vencord.errorString().toLatin1().constData());
injectScriptText(
"vencord.js",
QString("window.discordScreenaudioVencordSettings = `%1`; %2")
.arg(m_webClass.vencordSend("VencordGetSettings", {}).toString(),
vencord.readAll()));
vencord.close();
injectScriptText("version.js",
QString("window.discordScreenaudioVersion = '%1';")

View File

@ -1,5 +1,6 @@
#include "webclass.h"
#include <QDebug>
#include <QDesktopServices>
#include <QDir>
#include <QFile>
@ -7,19 +8,28 @@
#include <QUrl>
QVariant WebClass::vencordSend(QString event, QVariantList args) {
QString configFolder =
QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) +
"/vencord";
QString quickCssFile = configFolder + "/quickCss.css";
QString settingsFile = configFolder + "/settings.json";
if (!QDir().exists(configFolder))
QDir().mkpath(configFolder);
if (event == "VencordGetRepo") {
return true;
}
if (event == "VencordGetSettingsDir") {
return QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation);
return configFolder;
}
if (event == "VencordGetQuickCss") {
QString filename =
QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) +
"/vencord/quickCss.css";
if (QFile::exists(filename)) {
QFile file(filename);
file.open(QIODevice::ReadOnly);
if (QFile::exists(quickCssFile)) {
QFile file(quickCssFile);
if (!file.open(QIODevice::WriteOnly))
qFatal("Failed to load %s with error: %s",
quickCssFile.toLatin1().constData(),
file.errorString().toLatin1().constData());
auto content = file.readAll();
file.close();
return QString(content);
@ -27,10 +37,26 @@ QVariant WebClass::vencordSend(QString event, QVariantList args) {
return "";
}
if (event == "VencordGetSettings") {
return m_vencordSettings;
if (QFile::exists(settingsFile)) {
QFile file(settingsFile);
if (!file.open(QIODevice::ReadOnly))
qFatal("Failed to load %s with error: %s",
settingsFile.toLatin1().constData(),
file.errorString().toLatin1().constData());
auto content = file.readAll();
file.close();
return QString(content);
} else
return "{}";
}
if (event == "VencordSetSettings") {
m_vencordSettings = args[0].toString();
QFile file(settingsFile);
if (!file.open(QIODevice::WriteOnly))
qFatal("Failed to load %s with error: %s",
settingsFile.toLatin1().constData(),
file.errorString().toLatin1().constData());
file.write(args[0].toString().toUtf8());
file.close();
return true;
}
if (event == "VencordGetUpdates") {