feat: Experimental browser support

This commit is contained in:
Vendicated 2022-10-04 00:52:42 +02:00
parent a9eae106c7
commit cc25753314
No known key found for this signature in database
GPG key ID: EC781ADFB93EFFA3
14 changed files with 212 additions and 41 deletions

View file

@ -9,6 +9,7 @@ import { startPlugin } from "../plugins";
import { stopPlugin } from '../plugins/index';
import { Flex } from './Flex';
import { ChangeList } from '../utils/ChangeList';
import { IS_WEB } from '../utils/isWeb';
function showErrorToast(message: string) {
Toasts.show({
@ -72,7 +73,7 @@ export default ErrorBoundary.wrap(function Settings() {
SettingsDir: <code style={{ userSelect: 'text', cursor: 'text' }}>{settingsDir}</code>
</Forms.FormText>
<Flex className={classes(Margins.marginBottom20)}>
{!IS_WEB && <Flex className={classes(Margins.marginBottom20)}>
<Button
onClick={() => window.DiscordNative.app.relaunch()}
size={Button.Sizes.SMALL}
@ -94,7 +95,7 @@ export default ErrorBoundary.wrap(function Settings() {
>
Open QuickCSS File
</Button>
</Flex>
</Flex>}
<Forms.FormDivider />
<Forms.FormTitle tag="h5">Settings</Forms.FormTitle>
<Switch
@ -104,20 +105,20 @@ export default ErrorBoundary.wrap(function Settings() {
>
Use QuickCss
</Switch>
<Switch
{!IS_WEB && <Switch
value={settings.notifyAboutUpdates}
onChange={(v: boolean) => settings.notifyAboutUpdates = v}
note="Shows a Toast on StartUp"
>
Get notified about new Updates
</Switch>
<Switch
</Switch>}
{!IS_WEB && <Switch
value={settings.unsafeRequire}
onChange={(v: boolean) => settings.unsafeRequire = v}
note="Enables VencordNative.require. Useful for testing, very bad for security. Leave this off unless you need it."
>
Enable Unsafe Require
</Switch>
</Switch>}
<Forms.FormDivider />

View file

@ -1,6 +1,7 @@
import definePlugin from "../utils/types";
import gitHash from "git-hash";
import { Devs } from '../utils/constants';
import { IS_WEB } from "../utils/isWeb";
export default definePlugin({
name: "Settings",
@ -15,9 +16,12 @@ export default definePlugin({
replace: m => {
const idx = m.indexOf("Host") - 1;
const template = m.slice(0, idx);
return `${m}, ${template}"Vencord ", "${gitHash}"), " "), ` +
`${template} "Electron ",VencordNative.getVersions().electron)," "), ` +
`${template} "Chrome ",VencordNative.getVersions().chrome)," ")`;
let r = `${m}, ${template}"Vencord ", "${gitHash}${IS_WEB ? " (Web)" : ""}"), " ")`;
if (!IS_WEB) {
r += `,${template} "Electron ",VencordNative.getVersions().electron)," "),`;
r += `${template} "Chrome ",VencordNative.getVersions().chrome)," ")`;
}
return r;
}
}
]
@ -28,7 +32,7 @@ export default definePlugin({
replace: (m, mod) =>
`{section:${mod}.ID.HEADER,label:"Vencord"},` +
`{section:"VencordSetting",label:"Vencord",element:Vencord.Components.Settings},` +
`{section:"VencordUpdater",label:"Updater",element:Vencord.Components.Updater},` +
`{section:"VencordUpdater",label:"Updater",element:Vencord.Components.Updater,predicate:()=>!IS_WEB},` +
`{section:${mod}.ID.DIVIDER},${m}`
}

1
src/utils/isWeb.ts Normal file
View file

@ -0,0 +1 @@
export const IS_WEB = window.IS_WEB = typeof window.DiscordNative === "undefined";

View file

@ -33,6 +33,10 @@ interface PluginDef {
patches?: Omit<Patch, "plugin">[];
dependencies?: string[],
required?: boolean;
/**
* Set this if your plugin only works on Browser or Desktop, not both
*/
target?: "WEB" | "DESKTOP" | "BOTH";
}
export type IpcRes<V = any> = { ok: true; value: V; } | { ok: false, error: any; };

View file

@ -6,6 +6,7 @@ let webpackChunk: any[];
const logger = new Logger("WebpackInterceptor", "#8caaee");
console.log("prepatch is", window[WEBPACK_CHUNK]);
Object.defineProperty(window, WEBPACK_CHUNK, {
get: () => webpackChunk,
set: (v) => {