Compare commits

...

8 commits

Author SHA1 Message Date
dependabot[bot]
3d013ac19c
Bump actions/checkout from 2 to 3.1.0
Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3.1.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2...v3.1.0)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-08 16:25:47 +00:00
smartfridge
3036715724 Setup pnpm with right env 2022-10-08 18:24:42 +02:00
smartfridge
df013093f2 pnpm setup 2022-10-08 18:14:25 +02:00
smartfridge
698e03f0e0 Fix build script 2022-10-08 18:11:34 +02:00
smartfridge
f523f92367 Add transparency option 2022-10-08 17:43:08 +02:00
vex
97589220f4
Translated using Weblate (French)
Currently translated at 45.4% (25 of 55 strings)

Translation: ArmCord/ArmCord
Translate-URL: https://hosted.weblate.org/projects/armcord/armcord/fr/
2022-10-07 22:21:27 +02:00
Alexander
4249bf465e
Translated using Weblate (Russian)
Currently translated at 100.0% (55 of 55 strings)

Translation: ArmCord/ArmCord
Translate-URL: https://hosted.weblate.org/projects/armcord/armcord/ru/
2022-10-07 10:15:47 +02:00
Evgeniy Khramov
ee1efbc379
Translated using Weblate (Russian)
Currently translated at 100.0% (55 of 55 strings)

Translation: ArmCord/ArmCord
Translate-URL: https://hosted.weblate.org/projects/armcord/armcord/ru/
2022-10-07 10:15:47 +02:00
11 changed files with 2368 additions and 73 deletions

View file

@ -17,13 +17,19 @@ jobs:
node-version: '18'
- name: Checkout code
uses: actions/checkout@v2
uses: actions/checkout@v3.1.0
- name: Install bash
run: sudo apt install -y bash
- name: Install pnpm
run: npm i -g pnpm && /bin/bash pnpm setup
- name: Install Node dependencies
run: npm install
run: pnpm install -g cargo-cp-artifact && pnpm install
- name: Install Electron-Builder
run: npm install -g electron-builder
run: pnpm install -g electron-builder
- name: Replace the version number
run: cat src/utils.ts | sed -e 's/[[:digit:]]\.[[:digit:]]\.[[:digit:]]/DEV/g' | tee src/utils.ts > /dev/null
@ -51,13 +57,16 @@ jobs:
node-version: '18'
- name: Checkout code
uses: actions/checkout@v2
uses: actions/checkout@v3.1.0
- name: Install pnpm
run: npm i -g pnpm && pnpm setup && source /Users/runner/.bashrc
- name: Install Node dependencies
run: npm install
run: pnpm install -g cargo-cp-artifact && pnpm install
- name: Install Electron-Builder
run: npm install -g electron-builder
run: pnpm install -g electron-builder
- name: Replace the version number
run: cat src/utils.ts | sed -e 's/[[:digit:]]\.[[:digit:]]\.[[:digit:]]/DEV/g' | tee src/utils.ts > /dev/null
@ -82,13 +91,16 @@ jobs:
node-version: '18'
- name: Checkout code
uses: actions/checkout@v2
uses: actions/checkout@v3.1.0
- name: Install pnpm
run: npm i -g pnpm && pnpm setup && powershell
- name: Install Node dependencies
run: npm install
run: pnpm install
- name: Install Electron-Builder
run: npm install -g electron-builder
run: pnpm install -g cargo-cp-artifact && pnpm install
- name: Replace the version number
run: (Get-Content src/utils.ts) -replace "\d\.\d\.\d", "DEV" | Out-File src/utils.ts
@ -109,7 +121,7 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v2
uses: actions/checkout@v3.1.0
- uses: actions/download-artifact@v2
with:

View file

@ -17,13 +17,16 @@ jobs:
node-version: '18'
- name: Checkout code
uses: actions/checkout@v2
uses: actions/checkout@v3.1.0
- name: Install pnpm
run: npm i -g pnpm && pnpm setup
- name: Install Node dependencies
run: npm install
run: pnpm install -g cargo-cp-artifact && pnpm install
- name: Install Electron-Builder
run: npm install -g electron-builder
run: pnpm install -g electron-builder
- name: Build
run: npm run build && electron-builder --linux && electron-builder --arm64 --linux && electron-builder --armv7l --linux
@ -49,13 +52,16 @@ jobs:
node-version: '18'
- name: Checkout code
uses: actions/checkout@v2
uses: actions/checkout@v3.1.0
- name: Install pnpm
run: npm i -g pnpm && pnpm setup && source /Users/runner/.bashrc
- name: Install Node dependencies
run: npm install
run: pnpm install -g cargo-cp-artifact && pnpm install
- name: Install Electron-Builder
run: npm install -g electron-builder
run: pnpm install -g electron-builder
- name: Build
run: npm run build && electron-builder --macos
@ -81,13 +87,16 @@ jobs:
node-version: '18'
- name: Checkout code
uses: actions/checkout@v2
uses: actions/checkout@v3.1.0
- name: Install pnpm
run: npm i -g pnpm && pnpm setup
- name: Install Node dependencies
run: npm install
run: pnpm install -g cargo-cp-artifact && pnpm install
- name: Install Electron-Builder
run: npm install -g electron-builder
run: pnpm install -g electron-builder
- name: Build
run: npm run build && electron-builder --windows

View file

@ -64,9 +64,9 @@ ArmCord is also available in [Pi-Apps](https://github.com/Botspot/pi-apps).
### Compiling:
Alternatively you can run ArmCord from source (NodeJS and npm required):
Alternatively you can run ArmCord from source (NodeJS and pnpm required):
1. Clone ArmCord repo: `git clone https://github.com/ArmCord/ArmCord.git`
2. Run `npm install` to install dependencies
2. Run `pnpm install` to install dependencies
3. Build with `npm run build`
4. Compile/Package with `npm run package`

View file

@ -32,7 +32,7 @@
"settings-channel-desc4": "public test build. Receives features earlier than stable but is a bit older than Canary.",
"settings-altPaste": "Alternative Paste",
"settings-storageFolder": "Open storage folder",
"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-desc2": "voilà à quoi ressemble ArmCord quand vous le lancez pour la première fois. Cela inclu une reconstitution de la barre de titre de Discord, ainsi que le style spécifique de ArmCord administré sur Discord",
"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-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.",

View file

@ -18,10 +18,10 @@
"settings-theme-native": "Нативная",
"settings-tray": "Свернуть в область уведомлений",
"settings-patches": "Автоматические патчи",
"settings-channel": "Канал Discord:",
"settings-channel": "Канал Discord",
"settings-invitewebsocket": "Пригласить Websocket",
"settings-mod": "Клиентский мод:",
"settings-prfmMode": "Режим производительности:",
"settings-mod": "Клиентский мод",
"settings-prfmMode": "Режим производительности - это экспериментальная функция, которая может либо увеличить отзывчивость и производительность\n ArmCord, либо... снизить их. Пожалуйста, попробуйте все варианты и посмотрите, какой подходит вам больше всего.",
"settings-prfmMode-performance": "Производительность",
"settings-prfmMode-battery": "Батарея",
"settings-none": "Ничего",
@ -32,26 +32,26 @@
"settings-tray-desc": "Если отключено, ArmCord будет закрываться как любое другое окно, в противном случае он будет сидеть и отдыхать\n в системном трее для последующего использования.",
"settings-patches-desk": "Подбирает автоматические исправления, которые распространяются, если после выпуска релиза обнаруживаются ошибки. Обычно\n вам не нужно держать эту функцию включенной, если только вас не уведомят об этом в Discord.",
"settings-channel-desc1": "Вы можете использовать эту настройку для изменения текущего экземпляра Discord:",
"settings-pluginsFolder": "Open plugins folder",
"settings-themesFolder": "Open themes folder",
"settings-storageFolder": "Open storage folder",
"settings-pluginsFolder": "Открыть папку плагинов",
"settings-themesFolder": "Открыть папку тем",
"settings-storageFolder": "Откройте папку хранения",
"settings-channel-desc2": "вы, вероятно, наиболее знакомы с этой. Именно его вы видите в стандартном клиенте Discord\n клиент!",
"settings-channel-desc3": "это альфа-тестовый выпуск Discord. Используя его, вы получаете доступ к новейшим\n функциям и исправлениям.",
"settings-theme-desc1": "\"Темы\" ArmCord управляет поведение приложений и внешним видом.",
"settings-theme-desc1": "\"Темы\" ArmCord управляют поведением и внешним видом приложений.",
"settings-theme-desc2": "Вот так выглядит ArmCord при первом запуске. Он включает в себя воссоздание\n кастомизируемого заголовка Discord и стилей ArmCord, внедрённых в Discord.",
"settings-theme-desc3": "использует встроенный заголовок окна текущей ОС, которая у вас запущена (например, Windows 7/10). Функционирует как\n в актуальном приложении Discord на Linux.",
"settings-mobileMode-desc": "Если вы пользуетесь устройством с сенсорным экраном, эта функция для вас! Она активирует скрытый мобильный\n режим, предназначенный для телефонов и планшетов. Единственная недостающая функция - поддержка голосового чата. Это идеально подходит для\n пользователей PinePhone и подобных устройств.",
"settings-channel-desc4": "публичная тестовая сборка. Получает функции раньше, чем стабильная, но немного старше Canary.",
"settings-channel-desc5": "unofficial instance of Discord that takes you back to 2016! None of the client mods\n bundled with ArmCord work with it. It's run by community, so you take all the risk by using it.",
"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-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-mod-desc4": "heavily work in progress, doesn't have a working UI.",
"settings-trayIcon": "Tray icon",
"settings-trayIcon-desc": "Set the icon which will appear in tray menu.",
"settings-advanced": "Advanced user zone",
"settings-restart": "Restart App"
"settings-channel-desc5": "Неофициальная версия Discord, которая вернет вас в 2016 год! Единственный клиентский мод\n доступный для запуска вместе с ним - это Cordwood. Он управляется сообществом, поэтому вы берете на себя весь риск, используя\n используя его.",
"settings-invitewebsocket-desc": "Когда эта функция включена, ArmCord будет поддерживать ссылки Discord.gg, что означает, что если вы откроете ссылку приглашения в вашем\n браузере, ArmCord автоматически примет приглашение. Иногда может не реагировать на приглашения.",
"settings-altPaste": "Альтернативная вставка",
"settings-altPaste-desc": "Если вы работаете под Gnome в Linux или просто не можете вставить изображения, скопированные из других сообщений, то это для вас\n для вас. Это включает альтернативный модуль для вставки изображений. Включайте его только в том случае, если у вас возникли\n проблемы.",
"settings-mod-desc1": "Клиентские моды - это программы, которые позволяют вам настроить работу с Discord. Они могут изменять внешний вид\n клиента, изменять поведение или добавлять новые возможности!",
"settings-mod-desc2": "фокусируется на упрощении разработки плагинов для Discord. Минимальный и\n легкий.",
"settings-mod-desc3": "Легкий, надежный и простой в использовании, с опытом работы \"из коробки\". Имеет встроенный\n магазин для плагинов.",
"settings-mod-desc4": "сильно запущен, не имеет рабочего пользовательского интерфейса.",
"settings-trayIcon": "Иконка панели задач",
"settings-trayIcon-desc": "Установите значок, который будет отображаться в меню трея.",
"settings-advanced": " Расширенная пользовательская зона",
"settings-restart": "Перезапустить приложение"
}

View file

@ -38,6 +38,7 @@
"typescript": "^4.7.3"
},
"dependencies": {
"@pyke/vibe": "^0.3.0",
"electron-context-menu": "github:ArmCord/electron-context-menu",
"os-locale": "^6.0.2",
"v8-compile-cache": "^2.3.0",

2226
pnpm-lock.yaml Normal file

File diff suppressed because it is too large Load diff

View file

@ -5,7 +5,7 @@ import {getConfig, checkIfConfigExists, injectElectronFlags} from "./utils";
import "./extensions/mods";
import "./extensions/plugin";
import "./tray";
import {createCustomWindow, createNativeWindow} from "./window";
import {createCustomWindow, createNativeWindow, createTransparentWindow} from "./window";
import path from "path";
export var iconPath: string;
export var settings: any;
@ -40,6 +40,9 @@ app.whenReady().then(async () => {
case "native":
createNativeWindow();
break;
case "transparent":
createTransparentWindow();
break;
case "basic":
createNativeWindow();
break;

View file

@ -20,9 +20,8 @@ app.whenReady().then(async () => {
}
};
if (process.platform == "darwin" && trayPath.getSize().height > 22)
trayPath = trayPath.resize({height: 22});
if (process.platform == "darwin" && trayPath.getSize().height > 22) trayPath = trayPath.resize({height: 22});
if ((await getConfig("windowStyle")) == "basic") {
var clientName = (await getConfig("clientName")) ?? "ArmCord";
tray = new Tray(trayPath);
@ -32,13 +31,13 @@ app.whenReady().then(async () => {
{
label: `Finish the setup first!`,
enabled: false
}, {
},
{
label: `Quit ${clientName}`,
click: async function () {
fs.unlink(await getConfigLocation(), (err) => {
if (err)
throw err;
if (err) throw err;
console.log('Closed during setup. "settings.json" was deleted');
app.quit();
});
@ -52,7 +51,8 @@ app.whenReady().then(async () => {
click: function () {
mainWindow.show();
}
}, {
},
{
label: `Quit ${clientName}`,
click: function () {
let [width, height] = mainWindow.getSize();
@ -74,13 +74,13 @@ app.whenReady().then(async () => {
{
label: `Finish the setup first!`,
enabled: false
}, {
},
{
label: `Quit ${clientName}`,
click: async function () {
fs.unlink(await getConfigLocation(), (err) => {
if (err)
throw err;
if (err) throw err;
console.log('Closed during setup. "settings.json" was deleted');
app.quit();
});
@ -109,15 +109,18 @@ app.whenReady().then(async () => {
click: function () {
createSettingsWindow();
}
}, {
},
{
label: "Support Discord Server",
click: function () {
mainWindow.show();
mainWindow.loadURL("https://discord.gg/TnhxcqynZ2");
}
}, {
},
{
type: "separator"
}, {
},
{
label: `Quit ${clientName}`,
click: function () {
app.quit();
@ -126,7 +129,8 @@ app.whenReady().then(async () => {
]);
tray.setContextMenu(contextMenu);
}
} tray.setToolTip(clientName);
}
tray.setToolTip(clientName);
tray.on("click", function () {
mainWindow.show();
});

View file

@ -1,8 +1,10 @@
import * as fs from "fs";
import {app, dialog} from "electron";
import path from "path";
import vibe from "@pyke/vibe";
export var firstRun: boolean;
export var contentPath: string;
export var transparency: boolean;
//utility functions that are used all over the codebase or just too obscure to be put in the file used in
export function addStyle(styleString: string) {
const style = document.createElement("style");
@ -118,6 +120,11 @@ export async function injectElectronFlags() {
default:
console.log("No performance modes set");
}
if ((await getConfig("windowStyle")) == "transparent") {
console.log("Transparent mode enabled");
vibe.setup(app);
transparency = true;
}
}
export async function setLang(language: string) {
const langConfigFile = path.join(app.getPath("userData"), "/storage/") + "lang.json";

View file

@ -4,7 +4,16 @@
// I'm sorry for this mess but I'm not sure how to fix it.
import {BrowserWindow, shell, app, dialog, nativeImage} from "electron";
import path from "path";
import {checkIfConfigIsBroken, firstRun, getConfig, contentPath, setConfig, setLang, setWindowState} from "./utils";
import {
checkIfConfigIsBroken,
firstRun,
getConfig,
contentPath,
setConfig,
setLang,
setWindowState,
transparency
} from "./utils";
import {registerIpc} from "./ipc";
import {setMenu} from "./menu";
import * as fs from "fs";
@ -12,6 +21,7 @@ import startServer from "./socket";
import contextMenu from "electron-context-menu";
import os from "os";
import {tray} from "./tray";
import vibe from "@pyke/vibe";
import {iconPath} from "./main";
export let mainWindow: BrowserWindow;
export let inviteWindow: BrowserWindow;
@ -41,6 +51,11 @@ contextMenu({
]
});
async function doAfterDefiningTheWindow() {
if (transparency) {
vibe.applyEffect(mainWindow, "acrylic");
vibe.setDarkMode(mainWindow);
mainWindow.show();
}
var ignoreProtocolWarning = await getConfig("ignoreProtocolWarning");
await checkIfConfigIsBroken();
registerIpc();
@ -54,18 +69,18 @@ async function doAfterDefiningTheWindow() {
}
mainWindow.webContents.userAgent = `Mozilla/5.0 (X11; ${osType} ${os.arch()}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36`; //fake useragent for screenshare to work
}
const gotTheLock = app.requestSingleInstanceLock()
const gotTheLock = app.requestSingleInstanceLock();
if (!gotTheLock) {
app.quit()
app.quit();
} else {
app.on('second-instance', (event, commandLine, workingDirectory) => {
// i love stack overflow
if (mainWindow) {
mainWindow.restore()
mainWindow.focus()
}
})
app.on("second-instance", (event, commandLine, workingDirectory) => {
// i love stack overflow
if (mainWindow) {
mainWindow.restore();
mainWindow.focus();
}
});
}
mainWindow.webContents.setWindowOpenHandler(({url}) => {
if (url.startsWith("https:" || url.startsWith("http:") || url.startsWith("mailto:"))) {
@ -252,7 +267,25 @@ export function createNativeWindow() {
});
doAfterDefiningTheWindow();
}
export function createTransparentWindow() {
mainWindow = new BrowserWindow({
width: 300,
height: 350,
title: "ArmCord",
darkTheme: true,
icon: iconPath,
frame: true,
backgroundColor: "#00000000",
show: false,
autoHideMenuBar: true,
webPreferences: {
sandbox: false,
preload: path.join(__dirname, "preload/preload.js"),
spellcheck: true
}
});
doAfterDefiningTheWindow();
}
export function createInviteWindow() {
inviteWindow = new BrowserWindow({
width: 800,