diff --git a/assets/lang/zh-Hans.json b/assets/lang/zh-Hans.json new file mode 100644 index 0000000..6b89784 --- /dev/null +++ b/assets/lang/zh-Hans.json @@ -0,0 +1,56 @@ +{ + "settings-theme-default": "Default", + "settings-tray": "Minimize to tray", + "settings-patches": "Automatic Patches", + "settings-mod-desc4": "heavily work in progress, doesn't have a working UI.", + "loading_screen_update": "A new version of ArmCord is available. Please update to the latest version.", + "loading_screen_start": "启动ArmCord…", + "setup_question1": "Select what kind of setup you want to perform:", + "loading_screen_offline": "You appear to be offline. Please connect to the Internet and try again.", + "setup_question1_answer1": "Express Setup", + "setup_question1_answer2": "Full Setup", + "setup_offline": "You appear to be offline. Please connect to the internet and restart ArmCord.", + "setup_question2": "Choose your Discord channel/instance:", + "settings-updater": "检查更新", + "setup_question3": "Should ArmCord handle client mods installation?", + "yes": "是的", + "no": "不是", + "next": "接下来", + "setup_question4": "Select a client mod you want to install:", + "setup_question4_clientmodnotice": "Why not all of them? Having many client mods at the same time can cause issues. If you really want to do it though, check our Discord.", + "settings-theme": "ArmCord theme", + "settings-theme-desc1": "ArmCord \"themes\" manage apps behaviour and looks.", + "settings-theme-desc3": "uses native titlebar of OS you're currently running (e.g Windows 7/10). Functions more\n similar to actual Discord app on Linux.", + "settings-theme-desc2": "this is how ArmCord looks when you first launch it. It includes recreation of Discord's\n custom titlebar and ArmCord specific styles injected into Discord.", + "settings-theme-native": "Native", + "settings-csp-desc": "ArmCord CSP is our system that manages loading custom content loading into the Discord app. Stuff like\n client mods and themes depend on it. Disable if you want to get rid of mods and custom styles.", + "settings-tray-desc": "When disabled, ArmCord will close like any other window when closed, otherwise it'll sit back and relax\n in your system tray for later.", + "settings-patches-desk": "Fetches automatic patches that are distributed if release turns out to have bugs after release. Usually\n you don't have to keep this enabled, unless notified in support Discord.", + "settings-mobileMode": "Mobile mode", + "settings-mobileMode-desc": "If you're on a device with touch-screen this feature is for you! It activates Discord's hidden mobile\n mode meant for phones and tablets. Only major feature missing is voice chat support. This is ideal for\n users on PinePhone and similar.", + "settings-channel": "Discord channel", + "settings-channel-desc1": "You can use this setting to change current instance of Discord:", + "settings-channel-desc2": "you're probably most familiar with this one. It's the one you see in default Discord\n client!", + "settings-channel-desc3": "this is alpha test release of Discord. By using it you gain access to the newest\n features and fixes.", + "settings-channel-desc4": "public test build. Receives features earlier than stable but is a bit older than Canary.", + "settings-channel-desc5": "unofficial instance of Discord that takes you back to 2016! Only client mod\n available to run alongside with it is Cordwood. It's run by community, so you take all the risk by\n using it.", + "settings-invitewebsocket": "Invite Websocket", + "settings-invitewebsocket-desc": "When enabled ArmCord will support Discord.gg links which means that if you open an invite link in your\n browser, ArmCord will automatically accept the invite. Can be unresponsive at times.", + "settings-altPaste": "Alternative Paste", + "settings-altPaste-desc": "If you're on Gnome on Linux or just simply can't paste images copied from other messages, then this is\n for you. This enables alternative module for pasting images. Only enable this when you're experiencing\n issues.", + "settings-mod": "Client mod", + "settings-mod-desc1": "Client mods are programs that allow you customize your Discord experience. They can change appearance of\n the client, modify behaviours or add new features!", + "settings-mod-desc2": "focuses on making the Discord plugin development experience easier. Minimal and\n lightweight.", + "settings-mod-desc3": "light, secure, and easy to use, with out of the box experience. Features a built-in\n store for plugins.", + "settings-prfmMode": "Performance mode is an experimental function that may either increase responsiveness and performance of\n ArmCord or... decrease it. Please try every option and see which fits you the best.", + "settings-prfmMode-performance": "Performance", + "settings-prfmMode-battery": "Battery", + "settings-trayIcon": "Tray icon", + "settings-trayIcon-desc": "Set the icon which will appear in tray menu.", + "settings-advanced": "️Advanced user zone", + "settings-pluginsFolder": "Open plugins folder", + "settings-themesFolder": "Open themes folder", + "settings-storageFolder": "Open storage folder", + "settings-none": "None", + "settings-save": "保存设置" +} diff --git a/assets/ping.png b/assets/ping.png new file mode 100644 index 0000000..1d0762a Binary files /dev/null and b/assets/ping.png differ diff --git a/package.json b/package.json index cea8d12..eef14be 100644 --- a/package.json +++ b/package.json @@ -28,13 +28,13 @@ "devDependencies": { "@types/node": "^17.0.42", "@types/ws": "^8.5.3", + "chalk-cli": "^5.0.0", "copyfiles": "^2.4.1", - "electron": "^19.0.8", + "electron": "^20.1.0", "electron-builder": "^23.0.3", "husky": "^8.0.1", "prettier": "^2.7.0", - "typescript": "^4.7.3", - "chalk-cli": "^5.0.0" + "typescript": "^4.7.4" }, "dependencies": { "electron-context-menu": "github:ArmCord/electron-context-menu", diff --git a/src/content/css/settings.css b/src/content/css/settings.css index b964039..051c673 100644 --- a/src/content/css/settings.css +++ b/src/content/css/settings.css @@ -254,36 +254,3 @@ select { white-space: nowrap; outline: none !important; } -.acTheme { - height: 15em !important; -} -.acCSP { - height: 10em !important; -} -.acPatches { - height: 10em !important; -} -.acWebsocket { - height: 10em !important; -} -.acMobileMode { - height: 11em !important; -} -.acAltPaste { - height: 11em !important; -} -.acChannel { - height: 21em !important; -} -.acClientMod { - height: 18em !important; -} -.acCordwood { - height: 8em !important; -} -.acPrfmMode { - height: 10em !important; -} -.acTray { - height: 8em !important; -} diff --git a/src/content/css/settingsEng.css b/src/content/css/settingsEng.css new file mode 100644 index 0000000..4d2acac --- /dev/null +++ b/src/content/css/settingsEng.css @@ -0,0 +1,33 @@ +.acTheme { + height: 15em !important; +} +.acCSP { + height: 10em !important; +} +.acPatches { + height: 10em !important; +} +.acWebsocket { + height: 10em !important; +} +.acMobileMode { + height: 11em !important; +} +.acAltPaste { + height: 11em !important; +} +.acChannel { + height: 21em !important; +} +.acClientMod { + height: 18em !important; +} +.acCordwood { + height: 8em !important; +} +.acPrfmMode { + height: 10em !important; +} +.acTray { + height: 8em !important; +} diff --git a/src/content/setup.html b/src/content/setup.html index 9a00dd0..14e11de 100644 --- a/src/content/setup.html +++ b/src/content/setup.html @@ -122,7 +122,7 @@ mods: "cumcord", inviteWebsocket: true, mobileMode: false, - trayIcon: "ac_plug_colored", + trayIcon: "default", performanceMode: "none" }); setTimeout(() => window.armcordinternal.restart(), 5000); @@ -154,7 +154,7 @@ automaticPatches: false, performanceMode: "none", alternativePaste: false, - trayIcon: "ac_plug_colored", + trayIcon: "default", mods: options.mod, inviteWebsocket: true }); @@ -171,7 +171,7 @@ mods: "none", alternativePaste: false, performanceMode: "none", - trayIcon: "ac_plug_colored", + trayIcon: "default", inviteWebsocket: true }); setTimeout(() => window.armcordinternal.restart(), 500); diff --git a/src/content/splash.html b/src/content/splash.html index 0378dd1..4f9ce70 100644 --- a/src/content/splash.html +++ b/src/content/splash.html @@ -47,7 +47,7 @@ } } setTimeout(() => { - window.armcordinternal.splashEnd(); + window.armcord.splashEnd(); switch (window.armcord.channel) { case "stable": window.location.replace("https://discord.com/app"); diff --git a/src/ipc.ts b/src/ipc.ts index 131115f..21ff712 100644 --- a/src/ipc.ts +++ b/src/ipc.ts @@ -1,9 +1,19 @@ //ipc stuff -import {app, ipcMain, shell, desktopCapturer} from "electron"; +import {app, ipcMain, shell, desktopCapturer,nativeImage} from "electron"; import {mainWindow} from "./window"; -import {setConfigBulk, getVersion, getConfig, setLang, getLang, getWindowState, packageVersion} from "./utils"; +import { + setConfigBulk, + getVersion, + getConfig, + setLang, + getLang, + getWindowState, + packageVersion, getDisplayVersion +} from "./utils"; import {customTitlebar} from "./main"; import {createSettingsWindow} from "./settings/main"; +import os from "os"; +import path from "path"; export function registerIpc() { ipcMain.on("get-app-path", (event, arg) => { event.reply("app-path", app.getAppPath()); @@ -17,6 +27,21 @@ export function registerIpc() { ipcMain.on("open-external-link", (event, href: string) => { shell.openExternal(href); }); + ipcMain.on("setPing", (event, pingCount: number) => { + switch (os.platform()) { + case "linux" ?? "macos": + app.setBadgeCount(pingCount) + break; + case "win32": + if (pingCount > 0) { + var image = nativeImage.createFromPath(path.join(__dirname, "../", `/assets/ping.png`)) + mainWindow.setOverlayIcon(image, "badgeCount") + } else { + mainWindow.setOverlayIcon(null, "badgeCount") + } + break; + } + }); ipcMain.on("win-maximize", (event, arg) => { mainWindow.maximize(); }); @@ -44,10 +69,13 @@ export function registerIpc() { ipcMain.on("get-app-version", (event) => { event.returnValue = getVersion(); }); + ipcMain.on("displayVersion", (event) => { + event.returnValue = getDisplayVersion(); + }); ipcMain.on("get-package-version", (event) => { event.returnValue = packageVersion; }); - ipcMain.on("splashEnd", async (event, arg) => { + ipcMain.on("splashEnd", async () => { try { var width = (await getWindowState("width")) ?? 800; var height = (await getWindowState("height")) ?? 600; diff --git a/src/menu.ts b/src/menu.ts index f6535bf..a76e838 100644 --- a/src/menu.ts +++ b/src/menu.ts @@ -1,6 +1,7 @@ import {Menu, app, clipboard, globalShortcut} from "electron"; import {mainWindow} from "./window"; import {getConfig} from "./utils"; +import {createSettingsWindow} from "./settings/main"; function paste(contents: any) { const contentTypes = clipboard.availableFormats().toString(); @@ -51,6 +52,20 @@ export async function setMenu() { mainWindow.webContents.openDevTools(); } }, + { + label: "Open settings", + accelerator: "CmdOrCtrl+Shift+'", + click: function () { + createSettingsWindow(); + } + }, + { + label: "Reload", + accelerator: "CmdOrCtrl+R", + click: function () { + mainWindow.reload() + } + }, { label: "Quit", accelerator: "CmdOrCtrl+Q", @@ -77,6 +92,13 @@ export async function setMenu() { }, {label: "Select All", accelerator: "CmdOrCtrl+A", role: "selectAll"} ] + }, + { + label: "Zoom", + submenu: [ + {label: "Zoom in", accelerator: "CmdOrCtrl+Plus", role: "zoomIn"}, + {label: "Zoom out", accelerator: "CmdOrCtrl+-", role: "zoomOut"}, + ] } ]; diff --git a/src/preload/bridge.ts b/src/preload/bridge.ts index d421d5b..1365f1e 100644 --- a/src/preload/bridge.ts +++ b/src/preload/bridge.ts @@ -16,6 +16,8 @@ contextBridge.exposeInMainWorld("armcord", { electron: process.versions.electron, channel: ipcRenderer.sendSync("channel"), setLang: (lang: string) => ipcRenderer.send("setLang", lang), + setPingCount: (pingCount: number) => ipcRenderer.send("setPing", pingCount), + setTrayIcon: (favicon: string) => ipcRenderer.send("sendTrayIcon", favicon), getLang: (toGet: string) => ipcRenderer.invoke("getLang", toGet).then((result) => { return result; @@ -23,13 +25,13 @@ contextBridge.exposeInMainWorld("armcord", { version: ipcRenderer.sendSync("get-app-version", "app-version"), packageVersion: ipcRenderer.sendSync("get-package-version", "app-version"), getDisplayMediaSelector: getDisplayMediaSelector, + splashEnd: () => ipcRenderer.send("splashEnd"), openSettingsWindow: () => ipcRenderer.send("openSettingsWindow") }); //to be only used inside armcord internal setup/splash etc if (window.location.href.indexOf("splash.html") > -1 || window.location.href.indexOf("setup.html") > -1) { contextBridge.exposeInMainWorld("armcordinternal", { restart: () => ipcRenderer.send("restart"), - saveSettings: (...args: any) => ipcRenderer.send("saveSettings", ...args), - splashEnd: () => ipcRenderer.send("splashEnd") + saveSettings: (...args: any) => ipcRenderer.send("saveSettings", ...args) }); } diff --git a/src/preload/preload.ts b/src/preload/preload.ts index f98d82e..d0963a1 100644 --- a/src/preload/preload.ts +++ b/src/preload/preload.ts @@ -7,7 +7,7 @@ import {injectHummusTitlebar, injectTitlebar} from "./titlebar"; import {sleep, addStyle, injectJS, addScript} from "../utils"; import {ipcRenderer} from "electron"; import {injectMobileStuff} from "./mobile"; -var version = ipcRenderer.sendSync("get-app-version", "app-version"); +var version = ipcRenderer.sendSync("displayVersion"); var channel = ipcRenderer.sendSync("channel"); async function updateLang() { if (window.location.href.indexOf("setup.html") > -1) { diff --git a/src/settings/hummus.html b/src/settings/hummus.html index 15b5abc..010ba50 100644 --- a/src/settings/hummus.html +++ b/src/settings/hummus.html @@ -15,6 +15,23 @@
+
+ +

ArmCord theme

+

+ ArmCord "themes" manage apps behaviour and looks. +
+ Default - this is how ArmCord looks when you first launch it. It includes recreation of Discord's + custom titlebar and ArmCord specific styles injected into Discord. +
+ Native - uses native titlebar of OS you're currently running (e.g Windows 7/10). Functions more + similar to actual Discord app on Linux. +

+
+
@@ -107,7 +124,8 @@