mirror of
https://github.com/smartfrigde/armcord.git
synced 2024-08-14 23:56:58 +00:00
wip: wayland screensharing
This commit is contained in:
parent
ba27104be6
commit
4074a8ccd5
3 changed files with 91 additions and 36 deletions
|
@ -11,7 +11,7 @@
|
||||||
"watch": "tsc -w",
|
"watch": "tsc -w",
|
||||||
"start": "npm run build && electron ./ts-out/main.js",
|
"start": "npm run build && electron ./ts-out/main.js",
|
||||||
"startThemeManager": "npm run build && electron ./ts-out/main.js themes",
|
"startThemeManager": "npm run build && electron ./ts-out/main.js themes",
|
||||||
"startWayland": "npm run build && electron ./ts-out/main.js --ozone-platform-hint=auto --enable-features=WebRTCPipeWireCapturer",
|
"startWayland": "npm run build && electron ./ts-out/main.js --ozone-platform-hint=auto --enable-features=WebRTCPipeWireCapturer,WaylandWindowDecorations",
|
||||||
"package": "npm run build && electron-builder",
|
"package": "npm run build && electron-builder",
|
||||||
"packageQuick": "npm run build && electron-builder --dir",
|
"packageQuick": "npm run build && electron-builder --dir",
|
||||||
"format": "prettier --write src *.json",
|
"format": "prettier --write src *.json",
|
||||||
|
@ -36,8 +36,9 @@
|
||||||
"@typescript-eslint/parser": "^5.59.2",
|
"@typescript-eslint/parser": "^5.59.2",
|
||||||
"chalk-cli": "^5.0.0",
|
"chalk-cli": "^5.0.0",
|
||||||
"copyfiles": "^2.4.1",
|
"copyfiles": "^2.4.1",
|
||||||
"electron": "^25.1.0",
|
"electron": "^25.3.0",
|
||||||
"electron-builder": "^23.6.0",
|
"electron-builder": "^23.6.0",
|
||||||
|
"electron-nightly": "27.0.0-nightly.20230711",
|
||||||
"eslint": "^8.40.0",
|
"eslint": "^8.40.0",
|
||||||
"eslint-config-dmitmel": "github:dmitmel/eslint-config-dmitmel",
|
"eslint-config-dmitmel": "github:dmitmel/eslint-config-dmitmel",
|
||||||
"eslint-plugin-node": "^11.1.0",
|
"eslint-plugin-node": "^11.1.0",
|
||||||
|
|
35
pnpm-lock.yaml
generated
35
pnpm-lock.yaml
generated
|
@ -1,9 +1,13 @@
|
||||||
lockfileVersion: '6.0'
|
lockfileVersion: '6.0'
|
||||||
|
|
||||||
|
settings:
|
||||||
|
autoInstallPeers: true
|
||||||
|
excludeLinksFromLockfile: false
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
'@pyke/vibe':
|
'@pyke/vibe':
|
||||||
specifier: github:pykeio/vibe#3c61074414cbed96ad51870e4dde379b16d9da6d
|
specifier: github:pykeio/vibe#3c61074414cbed96ad51870e4dde379b16d9da6d
|
||||||
version: github.com/pykeio/vibe/3c61074414cbed96ad51870e4dde379b16d9da6d(electron@25.1.0)
|
version: github.com/pykeio/vibe/3c61074414cbed96ad51870e4dde379b16d9da6d(electron@25.3.0)
|
||||||
arrpc:
|
arrpc:
|
||||||
specifier: file:src/arrpc
|
specifier: file:src/arrpc
|
||||||
version: file:src/arrpc
|
version: file:src/arrpc
|
||||||
|
@ -43,11 +47,14 @@ devDependencies:
|
||||||
specifier: ^2.4.1
|
specifier: ^2.4.1
|
||||||
version: 2.4.1
|
version: 2.4.1
|
||||||
electron:
|
electron:
|
||||||
specifier: ^25.1.0
|
specifier: ^25.3.0
|
||||||
version: 25.1.0
|
version: 25.3.0
|
||||||
electron-builder:
|
electron-builder:
|
||||||
specifier: ^23.6.0
|
specifier: ^23.6.0
|
||||||
version: 23.6.0
|
version: 23.6.0
|
||||||
|
electron-nightly:
|
||||||
|
specifier: 27.0.0-nightly.20230711
|
||||||
|
version: 27.0.0-nightly.20230711
|
||||||
eslint:
|
eslint:
|
||||||
specifier: ^8.40.0
|
specifier: ^8.40.0
|
||||||
version: 8.40.0
|
version: 8.40.0
|
||||||
|
@ -1154,6 +1161,19 @@ packages:
|
||||||
resolution: {integrity: sha512-3X99K852Yoqu9AcW50qz3ibYBWY79/pBhlMCab8ToEWS48R0T9tyxRiQhwylE7zQdXrMnx2JKqUJyMPmt5FBqA==}
|
resolution: {integrity: sha512-3X99K852Yoqu9AcW50qz3ibYBWY79/pBhlMCab8ToEWS48R0T9tyxRiQhwylE7zQdXrMnx2JKqUJyMPmt5FBqA==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/electron-nightly@27.0.0-nightly.20230711:
|
||||||
|
resolution: {integrity: sha512-JBTc1lIJH0vofa1kdEfBrAlHpRWy3SW9gdNy0ga8R6FB4ZxaOyhe6dr0j/UYyKDE3OfesazJ0qALHK8634aCEA==}
|
||||||
|
engines: {node: '>= 12.20.55'}
|
||||||
|
hasBin: true
|
||||||
|
requiresBuild: true
|
||||||
|
dependencies:
|
||||||
|
'@electron/get': 2.0.2
|
||||||
|
'@types/node': 18.15.11
|
||||||
|
extract-zip: 2.0.1
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
dev: true
|
||||||
|
|
||||||
/electron-osx-sign@0.6.0:
|
/electron-osx-sign@0.6.0:
|
||||||
resolution: {integrity: sha512-+hiIEb2Xxk6eDKJ2FFlpofCnemCbjbT5jz+BKGpVBrRNT3kWTGs4DfNX6IzGwgi33hUcXF+kFs9JW+r6Wc1LRg==}
|
resolution: {integrity: sha512-+hiIEb2Xxk6eDKJ2FFlpofCnemCbjbT5jz+BKGpVBrRNT3kWTGs4DfNX6IzGwgi33hUcXF+kFs9JW+r6Wc1LRg==}
|
||||||
engines: {node: '>=4.0.0'}
|
engines: {node: '>=4.0.0'}
|
||||||
|
@ -1184,8 +1204,8 @@ packages:
|
||||||
- supports-color
|
- supports-color
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/electron@25.1.0:
|
/electron@25.3.0:
|
||||||
resolution: {integrity: sha512-VKk4G/0euO7ysMKQKHXmI4d3/qR4uHsAtVFXK2WfQUVxBmc160OAm2R6PN9/EXmgXEioKQBtbc2/lvWyYpDbuA==}
|
resolution: {integrity: sha512-cyqotxN+AroP5h2IxUsJsmehYwP5LrFAOO7O7k9tILME3Sa1/POAg3shrhx4XEnaAMyMqMLxzGvkzCVxzEErnA==}
|
||||||
engines: {node: '>= 12.20.55'}
|
engines: {node: '>= 12.20.55'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
|
@ -2947,7 +2967,6 @@ packages:
|
||||||
file:src/arrpc:
|
file:src/arrpc:
|
||||||
resolution: {directory: src/arrpc, type: directory}
|
resolution: {directory: src/arrpc, type: directory}
|
||||||
name: arrpc
|
name: arrpc
|
||||||
version: 3.0.0
|
|
||||||
dependencies:
|
dependencies:
|
||||||
ws: 8.11.0
|
ws: 8.11.0
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
|
@ -2977,7 +2996,7 @@ packages:
|
||||||
eslint: 8.40.0
|
eslint: 8.40.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
github.com/pykeio/vibe/3c61074414cbed96ad51870e4dde379b16d9da6d(electron@25.1.0):
|
github.com/pykeio/vibe/3c61074414cbed96ad51870e4dde379b16d9da6d(electron@25.3.0):
|
||||||
resolution: {tarball: https://codeload.github.com/pykeio/vibe/tar.gz/3c61074414cbed96ad51870e4dde379b16d9da6d}
|
resolution: {tarball: https://codeload.github.com/pykeio/vibe/tar.gz/3c61074414cbed96ad51870e4dde379b16d9da6d}
|
||||||
id: github.com/pykeio/vibe/3c61074414cbed96ad51870e4dde379b16d9da6d
|
id: github.com/pykeio/vibe/3c61074414cbed96ad51870e4dde379b16d9da6d
|
||||||
name: '@pyke/vibe'
|
name: '@pyke/vibe'
|
||||||
|
@ -2987,5 +3006,5 @@ packages:
|
||||||
electron: '>=11.0'
|
electron: '>=11.0'
|
||||||
dependencies:
|
dependencies:
|
||||||
cargo-cp-artifact: 0.1.7
|
cargo-cp-artifact: 0.1.7
|
||||||
electron: 25.1.0
|
electron: 25.3.0
|
||||||
dev: false
|
dev: false
|
||||||
|
|
|
@ -1,36 +1,72 @@
|
||||||
import {BrowserWindow, desktopCapturer, ipcMain, session} from "electron";
|
import {BrowserWindow, MessageBoxOptions, desktopCapturer, ipcMain, session, dialog} from "electron";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import {iconPath} from "../main";
|
import {iconPath} from "../main";
|
||||||
import {getSinks, isAudioSupported} from "./audio";
|
import {getSinks, isAudioSupported} from "./audio";
|
||||||
let capturerWindow: BrowserWindow;
|
let capturerWindow: BrowserWindow;
|
||||||
|
var sources: Electron.DesktopCapturerSource[];
|
||||||
|
function openPickerWindow() {
|
||||||
|
capturerWindow = new BrowserWindow({
|
||||||
|
width: 800,
|
||||||
|
height: 600,
|
||||||
|
title: "ArmCord Screenshare",
|
||||||
|
darkTheme: true,
|
||||||
|
icon: iconPath,
|
||||||
|
frame: true,
|
||||||
|
autoHideMenuBar: true,
|
||||||
|
webPreferences: {
|
||||||
|
sandbox: false,
|
||||||
|
spellcheck: false,
|
||||||
|
preload: path.join(__dirname, "preload.js")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
function waitForElement() {
|
||||||
|
if (sources == undefined) {
|
||||||
|
setTimeout(waitForElement, 250);
|
||||||
|
console.log(sources);
|
||||||
|
} else {
|
||||||
|
capturerWindow.loadURL(`file://${__dirname}/picker.html`);
|
||||||
|
capturerWindow.webContents.send("getSources", sources);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
waitForElement();
|
||||||
|
}
|
||||||
function registerCustomHandler(): void {
|
function registerCustomHandler(): void {
|
||||||
session.defaultSession.setDisplayMediaRequestHandler(async (request, callback) => {
|
session.defaultSession.setDisplayMediaRequestHandler(async (request, callback) => {
|
||||||
console.log(request);
|
console.log(request);
|
||||||
|
// if (process.platform == "linux") {
|
||||||
|
// let isAudio = isAudioSupported();
|
||||||
|
// if (isAudio) {
|
||||||
|
// console.log("audio supported");
|
||||||
|
// getSinks();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
if (process.platform == "linux") {
|
if (process.platform == "linux") {
|
||||||
let isAudio = isAudioSupported();
|
const options: MessageBoxOptions = {
|
||||||
if (isAudio) {
|
type: "question",
|
||||||
console.log("audio supported");
|
buttons: ["My screen", "An app"],
|
||||||
getSinks();
|
defaultId: 1,
|
||||||
}
|
title: "ArmCord Screenshare",
|
||||||
|
message: `What would you like to screenshare?`
|
||||||
|
};
|
||||||
|
|
||||||
|
dialog.showMessageBox(options).then(async ({response}) => {
|
||||||
|
if (response == 0) {
|
||||||
|
sources = await desktopCapturer.getSources({
|
||||||
|
types: ["screen"]
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
sources = await desktopCapturer.getSources({
|
||||||
|
types: ["window"]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
sources = await desktopCapturer.getSources({
|
||||||
|
types: ["screen", "window"]
|
||||||
|
});
|
||||||
}
|
}
|
||||||
const sources = await desktopCapturer.getSources({
|
|
||||||
types: ["screen", "window"]
|
|
||||||
});
|
|
||||||
console.log(sources);
|
|
||||||
capturerWindow = new BrowserWindow({
|
|
||||||
width: 800,
|
|
||||||
height: 600,
|
|
||||||
title: "ArmCord Screenshare",
|
|
||||||
darkTheme: true,
|
|
||||||
icon: iconPath,
|
|
||||||
frame: true,
|
|
||||||
autoHideMenuBar: true,
|
|
||||||
webPreferences: {
|
|
||||||
sandbox: false,
|
|
||||||
spellcheck: false,
|
|
||||||
preload: path.join(__dirname, "preload.js")
|
|
||||||
}
|
|
||||||
});
|
|
||||||
ipcMain.once("selectScreenshareSource", (_event, id, name) => {
|
ipcMain.once("selectScreenshareSource", (_event, id, name) => {
|
||||||
//console.log(sources[id]);
|
//console.log(sources[id]);
|
||||||
//console.log(id);
|
//console.log(id);
|
||||||
|
@ -42,8 +78,7 @@ function registerCustomHandler(): void {
|
||||||
callback({video: result});
|
callback({video: result});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
capturerWindow.loadURL(`file://${__dirname}/picker.html`);
|
openPickerWindow();
|
||||||
capturerWindow.webContents.send("getSources", sources);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
registerCustomHandler();
|
registerCustomHandler();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue