mirror of
https://github.com/finos/SymphonyElectron.git
synced 2024-12-29 02:11:28 -06:00
68 lines
2.2 KiB
JavaScript
68 lines
2.2 KiB
JavaScript
'use strict';
|
|
|
|
// This code provides equivalent of desktopCapturer.getSources that works in
|
|
// a sandbox renderer. see: https://electron.atom.io/docs/api/desktop-capturer/
|
|
//
|
|
// The code here is not entirely kosher/stable as it is using private ipc
|
|
// events. The code was take directly from electron.asar file provided in
|
|
// prebuilt node module. Note: the slight difference here is the thumbnail
|
|
// returns a base64 encoded image rather than a electron nativeImage.
|
|
//
|
|
// Until electron provides access to desktopCapturer in a sandboxed
|
|
// renderer process, this will have to do. See github issue posted here to
|
|
// electron: https://github.com/electron/electron/issues/9312
|
|
|
|
var { ipcRenderer } = require('electron');
|
|
|
|
var nextId = 0;
|
|
var includes = [].includes;
|
|
|
|
function getNextId() {
|
|
return ++nextId;
|
|
}
|
|
|
|
// |options.type| can not be empty and has to include 'window' or 'screen'.
|
|
function isValid(options) {
|
|
return ((options != null ? options.types : undefined) != null) && Array.isArray(options.types);
|
|
}
|
|
|
|
function getSources(options, callback) {
|
|
var captureScreen, captureWindow, id;
|
|
if (!isValid(options)) {
|
|
return callback(new Error('Invalid options'));
|
|
}
|
|
captureWindow = includes.call(options.types, 'window');
|
|
captureScreen = includes.call(options.types, 'screen');
|
|
|
|
let updatedOptions = options;
|
|
if (updatedOptions.thumbnailSize == null) {
|
|
updatedOptions.thumbnailSize = {
|
|
width: 150,
|
|
height: 150
|
|
}
|
|
}
|
|
|
|
id = getNextId();
|
|
ipcRenderer.send('ELECTRON_BROWSER_DESKTOP_CAPTURER_GET_SOURCES', captureWindow, captureScreen, updatedOptions.thumbnailSize, id);
|
|
|
|
return ipcRenderer.once('ELECTRON_RENDERER_DESKTOP_CAPTURER_RESULT_' + id, function (event, sources) {
|
|
var source;
|
|
callback(null, (function () {
|
|
var i, len, results
|
|
results = [];
|
|
for (i = 0, len = sources.length; i < len; i++) {
|
|
source = sources[i]
|
|
results.push({
|
|
id: source.id,
|
|
name: source.name,
|
|
thumbnail: source.thumbnail
|
|
})
|
|
}
|
|
|
|
return results
|
|
}()));
|
|
});
|
|
}
|
|
|
|
module.exports = getSources;
|