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