From 427fde27adef479217220be2e903316603569915 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Tue, 18 Apr 2023 01:08:15 +0200 Subject: [PATCH 01/22] Remove AUR ci stuff --- .github/workflows/release.yml | 16 ---------------- scripts/ci/aur_bump.sh | 20 -------------------- scripts/ci/install_makepkg.sh | 13 ------------- 3 files changed, 49 deletions(-) delete mode 100755 scripts/ci/aur_bump.sh delete mode 100755 scripts/ci/install_makepkg.sh diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0e53c37..459edac 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,19 +26,3 @@ jobs: with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} RELEASE: true - - - name: Update AUR package - if: ${{ matrix.os == 'ubuntu-latest' }} - run: | - mkdir -p -m 700 ~/.ssh - echo $SSH_KEY > ~/.ssh/aur - echo $SSH_PUB_KEY > ~/.ssh/aur.pub - chmod 600 ~/.ssh/* - - export GIT_SSH_COMMAND="ssh -i ~/.ssh/aur" - - sudo ./scripts/ci/install_makepkg.sh - ./scripts/ci/aur_bump.sh - env: - SSH_KEY: ${{ secrets.AUR_SSH_KEY }} - SSH_PUB_KEY: ${{ secrets.AUR_SSH_PUB_KEY }} diff --git a/scripts/ci/aur_bump.sh b/scripts/ci/aur_bump.sh deleted file mode 100755 index b18c21b..0000000 --- a/scripts/ci/aur_bump.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -set -e - -VERSION=$(git describe --tags --abbrev=0 | tr -d 'v') -SHASUM=$(sha256sum "dist/VencordDesktop-$VERSION.tar.gz" | awk '{ print $1 }') - -git clone ssh://aur@aur.archlinux.org/vencord-desktop-bin.git aurpkg - -cd aurpkg - -sed -i "s/^pkgver=.*$/pkgver=$VERSION/" PKGBUILD -sed -i "s/^sha256sums=('.*'/sha256sums=('$SHASUM'/" PKGBUILD -makepkg --printsrcinfo > .SRCINFO - -git commit -a -m "Bump version to $VERSION" -git push - -cd .. -rm -rf aurpkg diff --git a/scripts/ci/install_makepkg.sh b/scripts/ci/install_makepkg.sh deleted file mode 100755 index f741fc0..0000000 --- a/scripts/ci/install_makepkg.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -set -e - -for i in \ - "makepkg_6.0.2-3_amd64.deb" \ - "libalpm13_13.0.2-3_amd64.deb" \ - "pacman-package-manager_6.0.2-3_amd64.deb"; do - wget -O/tmp/$i https://fr.archive.ubuntu.com/ubuntu/pool/universe/p/pacman-package-manager/$i - dpkg -i /tmp/$i || true -done - -apt-get -f install -oDpkg::Use-Pty=0 -qq From 0aaddf24c6b55cf3b3cfe1c311d2b2d6fc72cc3a Mon Sep 17 00:00:00 2001 From: Vendicated Date: Wed, 19 Apr 2023 22:47:47 +0200 Subject: [PATCH 02/22] Migrate to @vencord/types package --- package.json | 2 + pnpm-lock.yaml | 56 ++++++++++++++++++++++++++++ scripts/build/build.mts | 16 ++++++-- scripts/build/vencordDep.mts | 38 +++++++++++++++++++ src/globals.d.ts | 2 - src/renderer/components/Settings.tsx | 34 +++++++---------- src/renderer/fixes.ts | 4 +- src/renderer/settings.ts | 7 ++-- src/renderer/vencord.ts | 13 ------- tsconfig.json | 4 +- 10 files changed, 130 insertions(+), 46 deletions(-) create mode 100644 scripts/build/vencordDep.mts delete mode 100644 src/renderer/vencord.ts diff --git a/package.json b/package.json index a7700e0..65f43e7 100644 --- a/package.json +++ b/package.json @@ -23,10 +23,12 @@ "watch": "pnpm build --watch" }, "devDependencies": { + "@fal-works/esbuild-plugin-global-externals": "^2.1.2", "@types/node": "^18.15.11", "@types/react": "^18.0.33", "@typescript-eslint/eslint-plugin": "^5.57.1", "@typescript-eslint/parser": "^5.57.1", + "@vencord/types": "^0.1.1", "dotenv": "^16.0.3", "electron": "^23.2.0", "electron-builder": "^23.6.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4816cd5..4d0b028 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,6 +1,9 @@ lockfileVersion: '6.0' devDependencies: + '@fal-works/esbuild-plugin-global-externals': + specifier: ^2.1.2 + version: 2.1.2 '@types/node': specifier: ^18.15.11 version: 18.15.11 @@ -13,6 +16,9 @@ devDependencies: '@typescript-eslint/parser': specifier: ^5.57.1 version: 5.57.1(eslint@8.38.0)(typescript@5.0.2) + '@vencord/types': + specifier: ^0.1.1 + version: 0.1.1 dotenv: specifier: ^16.0.3 version: 16.0.3 @@ -367,6 +373,10 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@fal-works/esbuild-plugin-global-externals@2.1.2: + resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} + dev: true + /@humanwhocodes/config-array@0.11.8: resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} engines: {node: '>=10.10.0'} @@ -492,6 +502,10 @@ packages: '@types/node': 18.15.11 dev: true + /@types/lodash@4.14.194: + resolution: {integrity: sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g==} + dev: true + /@types/minimatch@5.1.2: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} dev: true @@ -522,6 +536,19 @@ packages: resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} dev: true + /@types/react-dom@18.0.11: + resolution: {integrity: sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==} + dependencies: + '@types/react': 18.0.33 + dev: true + + /@types/react@17.0.2: + resolution: {integrity: sha512-Xt40xQsrkdvjn1EyWe1Bc0dJLcil/9x2vAuW7ya+PuQip4UYUaXyhzWmAbwRsdMgwOFHpfp7/FFZebDU6Y8VHA==} + dependencies: + '@types/prop-types': 15.7.5 + csstype: 3.1.2 + dev: true + /@types/react@18.0.33: resolution: {integrity: sha512-sHxzVxeanvQyQ1lr8NSHaj0kDzcNiGpILEVt69g9S31/7PfMvNCKLKcsHw4lYKjs3cGNJjXSP4mYzX43QlnjNA==} dependencies: @@ -698,6 +725,18 @@ packages: eslint-visitor-keys: 3.4.0 dev: true + /@vencord/types@0.1.1: + resolution: {integrity: sha512-QbAeVafeMpkteSscgtnXmwvwmXaePqOI4jwaLb9DAwIKpuVRCtT2V48th8PCuL228NyBMBRI+rpYaf1JmSB7UQ==} + dependencies: + '@types/lodash': 4.14.194 + '@types/node': 18.15.11 + '@types/react': 18.0.33 + '@types/react-dom': 18.0.11 + discord-types: 1.3.26 + standalone-electron-types: 1.0.0 + type-fest: 3.8.0 + dev: true + /acorn-jsx@5.3.2(acorn@8.8.2): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1342,6 +1381,13 @@ packages: path-type: 4.0.0 dev: true + /discord-types@1.3.26: + resolution: {integrity: sha512-ToG51AOCH+JTQf7b+8vuYQe5Iqwz7nZ7StpECAZ/VZcI1ZhQk13pvt9KkRTfRv1xNvwJ2qib4e3+RifQlo8VPQ==} + dependencies: + '@types/react': 17.0.2 + moment: 2.29.4 + dev: true + /dmg-builder@23.6.0: resolution: {integrity: sha512-jFZvY1JohyHarIAlTbfQOk+HnceGjjAdFjVn3n8xlDWKsYNqbO4muca6qXEZTfGXeQMG7TYim6CeS5XKSfSsGA==} dependencies: @@ -2875,6 +2921,10 @@ packages: hasBin: true dev: true + /moment@2.29.4: + resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==} + dev: true + /ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} dev: true @@ -3390,6 +3440,12 @@ packages: dev: true optional: true + /standalone-electron-types@1.0.0: + resolution: {integrity: sha512-0HOi/tlTz3mjWhsAz4uRbpQcHMZ+ifj1JzWW9nugykOHClBBG77ps8QinrzX1eow4Iw2pnC+RFaSYRgufF4BOg==} + dependencies: + '@types/node': 18.15.11 + dev: true + /stat-mode@1.0.0: resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==} engines: {node: '>= 6'} diff --git a/scripts/build/build.mts b/scripts/build/build.mts index 11c4d5f..5d2e0ee 100644 --- a/scripts/build/build.mts +++ b/scripts/build/build.mts @@ -6,6 +6,8 @@ import { BuildContext, BuildOptions, context } from "esbuild"; +import vencordDep from "./vencordDep.mjs"; + const isDev = process.argv.includes("--dev"); const CommonOpts: BuildOptions = { @@ -35,17 +37,20 @@ await Promise.all([ createContext({ ...NodeCommonOpts, entryPoints: ["src/main/index.ts"], - outfile: "dist/js/main.js" + outfile: "dist/js/main.js", + footer: { js: "//# sourceURL=VCDMain" } }), createContext({ ...NodeCommonOpts, entryPoints: ["src/preload/index.ts"], - outfile: "dist/js/preload.js" + outfile: "dist/js/preload.js", + footer: { js: "//# sourceURL=VCDPreload" } }), createContext({ ...NodeCommonOpts, entryPoints: ["src/updater/preload.ts"], - outfile: "dist/js/updaterPreload.js" + outfile: "dist/js/updaterPreload.js", + footer: { js: "//# sourceURL=VCDUpdaterPreload" } }), createContext({ ...CommonOpts, @@ -57,7 +62,10 @@ await Promise.all([ jsxFactory: "VencordCreateElement", jsxFragment: "VencordFragment", // Work around https://github.com/evanw/esbuild/issues/2460 - tsconfig: "./scripts/build/tsconfig.esbuild.json" + tsconfig: "./scripts/build/tsconfig.esbuild.json", + external: ["@vencord/types/*"], + plugins: [vencordDep], + footer: { js: "//# sourceURL=VCDRenderer" } }) ]); diff --git a/scripts/build/vencordDep.mts b/scripts/build/vencordDep.mts new file mode 100644 index 0000000..d0c87ce --- /dev/null +++ b/scripts/build/vencordDep.mts @@ -0,0 +1,38 @@ +/* + * SPDX-License-Identifier: GPL-3.0 + * Vencord Desktop, a desktop app aiming to give you a snappier Discord Experience + * Copyright (c) 2023 Vendicated and Vencord contributors + */ + +import { globalExternalsWithRegExp } from "@fal-works/esbuild-plugin-global-externals"; + +const names = { + webpack: "Vencord.Webpack", + "webpack/common": "Vencord.Webpack.Common", + utils: "Vencord.Util", + api: "Vencord.Api", + "api/settings": "Vencord", + components: "Vencord.Components" +}; + +export default globalExternalsWithRegExp({ + getModuleInfo(modulePath) { + const path = modulePath.replace("@vencord/types/", ""); + let varName = names[path]; + if (!varName) { + const altMapping = names[path.split("/")[0]]; + if (!altMapping) throw new Error("Unknown module path: " + modulePath); + + varName = + altMapping + + "." + + // @ts-ignore + path.split("/")[1].replaceAll("/", "."); + } + return { + varName, + type: "cjs" + }; + }, + modulePathFilter: /^@vencord\/types.+$/ +}); diff --git a/src/globals.d.ts b/src/globals.d.ts index 606f4f5..f4dcaa9 100644 --- a/src/globals.d.ts +++ b/src/globals.d.ts @@ -7,8 +7,6 @@ declare global { export var VencordDesktopNative: typeof import("preload/VencordDesktopNative").VencordDesktopNative; export var VencordDesktop: typeof import("renderer/index"); - // TODO - export var Vencord: any; export var vcdLS: typeof localStorage; export var IS_DEV: boolean; diff --git a/src/renderer/components/Settings.tsx b/src/renderer/components/Settings.tsx index 6e5760e..fcbb289 100644 --- a/src/renderer/components/Settings.tsx +++ b/src/renderer/components/Settings.tsx @@ -6,20 +6,12 @@ import "./settings.css"; +import { Margins } from "@vencord/types/utils"; +import { Button, Forms, Select, Switch, Text } from "@vencord/types/webpack/common"; import { useSettings } from "renderer/settings"; -import { Common, Util } from "../vencord"; - -const { Margins } = Util; - export default function SettingsUi() { const Settings = useSettings(); - const { - Forms: { FormSection, FormText, FormDivider, FormSwitch, FormTitle }, - Text, - Select, - Button - } = Common; const switches: [keyof typeof Settings, string, string, boolean?, (() => boolean)?][] = [ ["tray", "Tray Icon", "Add a tray icon for Vencord Desktop", true], @@ -43,12 +35,12 @@ export default function SettingsUi() { ]; return ( - + Vencord Desktop Settings - Discord Branch + Discord Branch + + + + + + + + + + +
+ + +
+ + + From 684f3330e95c2f03bf220db627f4644297d404cd Mon Sep 17 00:00:00 2001 From: V Date: Wed, 21 Jun 2023 14:46:40 +0200 Subject: [PATCH 16/22] Fix updater file logic --- src/updater/main.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/updater/main.ts b/src/updater/main.ts index 4c7d59b..8759a56 100644 --- a/src/updater/main.ts +++ b/src/updater/main.ts @@ -22,11 +22,18 @@ let updateData: UpdateData; ipcMain.handle(IpcEvents.UPDATER_GET_DATA, () => updateData); ipcMain.handle(IpcEvents.UPDATER_DOWNLOAD, () => { + const portable = !!process.env.PORTABLE_EXECUTABLE_FILE; + const { assets } = updateData.release; const url = (() => { switch (process.platform) { case "win32": - return assets.find(a => a.name.endsWith(".exe"))!.browser_download_url; + return assets.find(a => { + if (!a.name.endsWith(".exe")) return false; + + const isSetup = a.name.includes("Setup"); + return portable ? !isSetup : isSetup; + })!.browser_download_url; case "darwin": return assets.find(a => a.name.endsWith(".dmg"))!.browser_download_url; case "linux": From 4c34f10bb29d2132046ba76df176bb7b064d5180 Mon Sep 17 00:00:00 2001 From: V Date: Wed, 21 Jun 2023 14:47:25 +0200 Subject: [PATCH 17/22] bump to v.0.2.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e71324c..3e20f57 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "VencordDesktop", - "version": "0.2.0", + "version": "0.2.1", "private": true, "description": "", "keywords": [], From 887f11ab370c69bf9566c93575345da684261b16 Mon Sep 17 00:00:00 2001 From: V Date: Wed, 21 Jun 2023 15:06:06 +0200 Subject: [PATCH 18/22] About page: Add Acknowledgements --- package.json | 6 +++--- static/about.html | 52 ++++++++++++++++++++++++++++++++++++----------- 2 files changed, 43 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 3e20f57..41d2385 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,9 @@ "testTypes": "tsc --noEmit", "watch": "pnpm build --watch" }, + "dependencies": { + "arrpc": "^3.1.0" + }, "devDependencies": { "@fal-works/esbuild-plugin-global-externals": "^2.1.2", "@types/node": "^18.15.11", @@ -105,8 +108,5 @@ "provider": "github", "releaseType": "release" } - }, - "dependencies": { - "arrpc": "^3.1.0" } } diff --git a/static/about.html b/static/about.html index abe01e2..489cea7 100644 --- a/static/about.html +++ b/static/about.html @@ -19,16 +19,44 @@ Vencord pre-installed

-

Links

- +
+

Links

+ +
+ +
+

Acknowledgements

+

These awesome libraries empower Vencord Desktop

+
    +
  • + Electron + - Build cross-platform desktop apps with JavaScript, HTML, and CSS +
  • +
  • + Electron Builder + - A complete solution to package and build a ready for distribution Electron app with “auto update” + support out of the box +
  • +
  • + arrpc + - An open implementation of Discord's Rich Presence server +
  • +
  • + And many + more awesome open source libraries +
  • +
+
From f232defd1c3ce2348e3905ccf7d4681bb6d8c083 Mon Sep 17 00:00:00 2001 From: V Date: Wed, 21 Jun 2023 16:13:20 +0200 Subject: [PATCH 19/22] Add start with system option --- src/main/autoStart.ts | 42 ++++++++++++++++++++++++++++ src/main/ipc.ts | 7 +++++ src/preload/VencordDesktopNative.ts | 5 ++++ src/renderer/components/Settings.tsx | 16 ++++++++++- src/shared/IpcEvents.ts | 11 +++++--- 5 files changed, 76 insertions(+), 5 deletions(-) create mode 100644 src/main/autoStart.ts diff --git a/src/main/autoStart.ts b/src/main/autoStart.ts new file mode 100644 index 0000000..e3fb17f --- /dev/null +++ b/src/main/autoStart.ts @@ -0,0 +1,42 @@ +/* + * SPDX-License-Identifier: GPL-3.0 + * Vencord Desktop, a desktop app aiming to give you a snappier Discord Experience + * Copyright (c) 2023 Vendicated and Vencord contributors + */ + +import { app } from "electron"; +import { existsSync, mkdirSync, rmSync, writeFileSync } from "fs"; +import { join } from "path"; + +function makeAutoStartLinux() { + const dir = join(process.env.HOME!, ".config", "autostart"); + const file = join(dir, "vencord.desktop"); + + return { + isEnabled: () => existsSync(file), + enable() { + const desktopFile = ` +[Desktop Entry] +Type=Application +Version=1.0 +Name=Vencord +Comment=Vencord autostart script +Exec=${process.execPath} +Terminal=false +StartupNotify=false +`.trim(); + + mkdirSync(dir, { recursive: true }); + writeFileSync(file, desktopFile); + }, + disable: () => rmSync(file, { force: true }) + }; +} + +const autoStartWindowsMac = { + isEnabled: () => app.getLoginItemSettings().openAtLogin, + enable: () => app.setLoginItemSettings({ openAtLogin: true }), + disable: () => app.setLoginItemSettings({ openAtLogin: false }) +}; + +export const autoStart = process.platform === "linux" ? makeAutoStartLinux() : autoStartWindowsMac; diff --git a/src/main/ipc.ts b/src/main/ipc.ts index 5dc3479..617cccf 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -11,6 +11,7 @@ import { join } from "path"; import { debounce } from "shared/utils/debounce"; import { IpcEvents } from "../shared/IpcEvents"; +import { autoStart } from "./autoStart"; import { VENCORD_FILES_DIR, VENCORD_QUICKCSS_FILE } from "./constants"; import { mainWin } from "./mainWindow"; import { Settings } from "./settings"; @@ -39,6 +40,12 @@ ipcMain.on(IpcEvents.GET_VERSION, e => { e.returnValue = app.getVersion(); }); +ipcMain.on(IpcEvents.AUTOSTART_ENABLED, e => { + e.returnValue = autoStart.isEnabled(); +}); +ipcMain.handle(IpcEvents.ENABLE_AUTOSTART, autoStart.enable); +ipcMain.handle(IpcEvents.DISABLE_AUTOSTART, autoStart.disable); + ipcMain.handle(IpcEvents.SET_SETTINGS, (_, settings: typeof Settings.store, path?: string) => { Settings.setData(settings, path); }); diff --git a/src/preload/VencordDesktopNative.ts b/src/preload/VencordDesktopNative.ts index f6b0829..e0e2d1a 100644 --- a/src/preload/VencordDesktopNative.ts +++ b/src/preload/VencordDesktopNative.ts @@ -15,6 +15,11 @@ export const VencordDesktopNative = { relaunch: () => invoke(IpcEvents.RELAUNCH), getVersion: () => sendSync(IpcEvents.GET_VERSION) }, + autostart: { + isEnabled: () => sendSync(IpcEvents.AUTOSTART_ENABLED), + enable: () => invoke(IpcEvents.ENABLE_AUTOSTART), + disable: () => invoke(IpcEvents.DISABLE_AUTOSTART) + }, fileManager: { showItemInFolder: (path: string) => invoke(IpcEvents.SHOW_ITEM_IN_FOLDER, path), selectVencordDir: () => invoke>(IpcEvents.SELECT_VENCORD_DIR) diff --git a/src/renderer/components/Settings.tsx b/src/renderer/components/Settings.tsx index adb5dc6..1c43b79 100644 --- a/src/renderer/components/Settings.tsx +++ b/src/renderer/components/Settings.tsx @@ -7,12 +7,15 @@ import "./settings.css"; import { Margins } from "@vencord/types/utils"; -import { Button, Forms, Select, Switch, Text } from "@vencord/types/webpack/common"; +import { Button, Forms, Select, Switch, Text, useState } from "@vencord/types/webpack/common"; import { useSettings } from "renderer/settings"; export default function SettingsUi() { const Settings = useSettings(); + const { autostart } = VencordDesktopNative; + const [autoStartEnabled, setAutoStartEnabled] = useState(autostart.isEnabled()); + const switches: [keyof typeof Settings, string, string, boolean?, (() => boolean)?][] = [ ["tray", "Tray Icon", "Add a tray icon for Vencord Desktop", true], [ @@ -58,6 +61,17 @@ export default function SettingsUi() { + { + await autostart[v ? "enable" : "disable"](); + setAutoStartEnabled(v); + }} + note="Automatically start Vencord Desktop on computer start-up" + > + Start With System + + {switches.map(([key, text, note, def, predicate]) => ( Date: Wed, 21 Jun 2023 16:15:57 +0200 Subject: [PATCH 20/22] autostart: improve typing --- src/main/autoStart.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/autoStart.ts b/src/main/autoStart.ts index e3fb17f..17ee6fd 100644 --- a/src/main/autoStart.ts +++ b/src/main/autoStart.ts @@ -8,7 +8,13 @@ import { app } from "electron"; import { existsSync, mkdirSync, rmSync, writeFileSync } from "fs"; import { join } from "path"; -function makeAutoStartLinux() { +interface AutoStart { + isEnabled(): boolean; + enable(): void; + disable(): void; +} + +function makeAutoStartLinux(): AutoStart { const dir = join(process.env.HOME!, ".config", "autostart"); const file = join(dir, "vencord.desktop"); @@ -33,7 +39,7 @@ StartupNotify=false }; } -const autoStartWindowsMac = { +const autoStartWindowsMac: AutoStart = { isEnabled: () => app.getLoginItemSettings().openAtLogin, enable: () => app.setLoginItemSettings({ openAtLogin: true }), disable: () => app.setLoginItemSettings({ openAtLogin: false }) From fd0055032f8287e07780b2f86941964b096b2ac1 Mon Sep 17 00:00:00 2001 From: V Date: Wed, 21 Jun 2023 16:52:28 +0200 Subject: [PATCH 21/22] Add AutoStart to first launch tour --- src/main/firstLaunch.ts | 14 +++++++-- src/main/index.ts | 2 +- static/first-launch.html | 63 +++++++++++++++++++++++++++++++++++++--- 3 files changed, 72 insertions(+), 7 deletions(-) diff --git a/src/main/firstLaunch.ts b/src/main/firstLaunch.ts index fcd74a8..458c416 100644 --- a/src/main/firstLaunch.ts +++ b/src/main/firstLaunch.ts @@ -11,16 +11,24 @@ import { join } from "path"; import { SplashProps } from "shared/browserWinProperties"; import { STATIC_DIR } from "shared/paths"; +import { autoStart } from "./autoStart"; import { DATA_DIR } from "./constants"; import { createWindows } from "./mainWindow"; import { Settings } from "./settings"; +interface Data { + minimizeToTray: boolean; + discordBranch: "stable" | "canary" | "ptb"; + autoStart: boolean; + importSettings: boolean; +} + export function createFirstLaunchTour() { const win = new BrowserWindow({ ...SplashProps, frame: true, autoHideMenuBar: true, - height: 320, + height: 420, width: 550 }); @@ -29,12 +37,14 @@ export function createFirstLaunchTour() { if (msg === "cancel") return app.exit(); if (!msg.startsWith("form:")) return; - const data = JSON.parse(msg.slice(5)); + const data = JSON.parse(msg.slice(5)) as Data; Settings.store.minimizeToTray = data.minimizeToTray; Settings.store.discordBranch = data.discordBranch; Settings.store.firstLaunch = false; + if (data.autoStart) autoStart.enable(); + if (data.importSettings) { const from = join(app.getPath("userData"), "..", "Vencord", "settings"); const to = join(DATA_DIR, "settings"); diff --git a/src/main/index.ts b/src/main/index.ts index 4730d63..adbc195 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -72,7 +72,7 @@ if (!app.requestSingleInstanceLock({ IS_DEV })) { } async function bootstrap() { - if (!Object.hasOwn(Settings.store, "firstLaunch")) { + if (!Object.hasOwn(Settings.store, "firstLaunch") || true) { createFirstLaunchTour(); } else { createWindows(); diff --git a/static/first-launch.html b/static/first-launch.html index d54f3a9..d7190cd 100644 --- a/static/first-launch.html +++ b/static/first-launch.html @@ -3,6 +3,7 @@ :root { --bg: white; --fg: black; + --fg-secondary: #313338; --fg-semi-trans: rgb(0 0 0 / 0.2); } @@ -10,6 +11,7 @@ :root { --bg: hsl(223 6.7% 20.6%); --fg: white; + --fg-secondary: #b5bac1; --fg-semi-trans: rgb(255 255 255 / 0.2); } } @@ -52,15 +54,49 @@ form { display: grid; - gap: 0.5em; + gap: 1em; margin: 0; } label { + position: relative; display: flex; justify-content: space-between; } + label:has(input[type="checkbox"]), + select { + cursor: pointer; + } + + label:not(:last-child)::after { + content: ""; + position: absolute; + bottom: -10px; + width: 100%; + height: 1px; + background-color: var(--fg-secondary); + opacity: 0.5; + } + + label div { + display: grid; + gap: 0.2em; + } + + label h2 { + margin: 0; + font-weight: normal; + font-size: 1.1rem; + line-height: 1rem; + } + + label span { + font-size: 0.9rem; + font-weight: 400; + color: var(--fg-secondary); + } + #buttons { display: flex; justify-content: end; @@ -75,6 +111,11 @@ border-radius: 6px; border: none; cursor: pointer; + transition: 200ms filter; + } + + button:hover { + filter: brightness(0.8); } #submit { @@ -89,7 +130,7 @@
+ +
From 9f9f665ede51ad0983e4a8ac70b2ec5be83ff0be Mon Sep 17 00:00:00 2001 From: V Date: Wed, 21 Jun 2023 16:53:04 +0200 Subject: [PATCH 22/22] blehhhhh --- src/main/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/index.ts b/src/main/index.ts index adbc195..4730d63 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -72,7 +72,7 @@ if (!app.requestSingleInstanceLock({ IS_DEV })) { } async function bootstrap() { - if (!Object.hasOwn(Settings.store, "firstLaunch") || true) { + if (!Object.hasOwn(Settings.store, "firstLaunch")) { createFirstLaunchTour(); } else { createWindows();