Browse Source

Grant camera/microphone permission to macOS Catalina

pull/2628/head
Vulich Fernando 5 years ago
parent
commit
7947cc20dd
  1. 4
      app.js
  2. 43
      app/Application.js
  3. 13
      electron/menu.js
  4. 14
      entitlements.mac.plist
  5. 8
      package.json

4
app.js

@ -28,6 +28,10 @@ ipc.on('showAbout', function(event, message) {
ipc.on('showPreferences', function(event, message) { ipc.on('showPreferences', function(event, message) {
!Ext.cq1('preferences') ? Ext.create('Rambox.view.preferences.Preferences').show() : ''; !Ext.cq1('preferences') ? Ext.create('Rambox.view.preferences.Preferences').show() : '';
}); });
ipc.on('grantPermissions', async function() {
await require('electron').remote.systemPreferences.askForMediaAccess('microphone');
await require('electron').remote.systemPreferences.askForMediaAccess('camera');
});
ipc.on('autoUpdater:check-update', function() { ipc.on('autoUpdater:check-update', function() {
Rambox.app.checkUpdate(); Rambox.app.checkUpdate();
}); });

43
app/Application.js

@ -60,6 +60,49 @@ Ext.define('Rambox.Application', {
}) })
})(); })();
if ( !localStorage.getItem('hideMacPermissions') && process.platform === 'darwin' && (require('electron').remote.systemPreferences.getMediaAccessStatus('microphone') !== 'granted' || require('electron').remote.systemPreferences.getMediaAccessStatus('camera') !== 'granted') ) {
console.info('Checking mac permissions...');
Ext.cq1('app-main').addDocked({
xtype: 'toolbar'
,dock: 'top'
,style: {background: '#30BBF3'}
,items: [
'->'
,{
xtype: 'label'
,html: '<b>Rambox Pro needs permissions to use Microphone and Camera for the apps.</b>'
}
,{
xtype: 'button'
,text: 'Grant permissions'
,ui: 'decline'
,handler: async function(btn) {
await require('electron').remote.systemPreferences.askForMediaAccess('microphone');
await require('electron').remote.systemPreferences.askForMediaAccess('camera');
Ext.cq1('app-main').removeDocked(btn.up('toolbar'), true);
}
}
,{
xtype: 'button'
,text: 'Never ask again'
,ui: 'decline'
,handler: function(btn) {
Ext.cq1('app-main').removeDocked(btn.up('toolbar'), true);
localStorage.setItem('hideMacPermissions', true);
}
}
,'->'
,{
glyph: 'xf00d@FontAwesome'
,baseCls: ''
,style: 'cursor:pointer;'
,handler: function(btn) { Ext.cq1('app-main').removeDocked(btn.up('toolbar'), true); }
}
]
});
}
Ext.getStore('ServicesList').load(function (records, operations, success) { Ext.getStore('ServicesList').load(function (records, operations, success) {
if (!success) { if (!success) {

13
electron/menu.js

@ -1,6 +1,7 @@
'use strict'; 'use strict';
const os = require('os'); const os = require('os');
const electron = require('electron'); const electron = require('electron');
const { systemPreferences } = require('electron')
const app = electron.app; const app = electron.app;
const BrowserWindow = electron.BrowserWindow; const BrowserWindow = electron.BrowserWindow;
const shell = electron.shell; const shell = electron.shell;
@ -288,6 +289,18 @@ module.exports = function(config) {
} }
] ]
}); });
helpSubmenu.push({
type: 'separator'
});
helpSubmenu.push({
label: 'Grant Microphone and Camera permissions',
visible: systemPreferences.getMediaAccessStatus('microphone') !== 'granted' || systemPreferences.getMediaAccessStatus('camera') !== 'granted',
click(item, win) {
const webContents = win.webContents;
const send = webContents.send.bind(win.webContents);
send('grantPermissions');
}
});
} else { } else {
tpl.unshift({ tpl.unshift({
label: '&'+locale['menu.file[0]'], label: '&'+locale['menu.file[0]'],

14
entitlements.mac.plist

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.device.microphone</key>
<true/>
<key>com.apple.security.device.camera</key>
<true/>
<key>com.apple.security.device.audio-input</key>
<true/>
</dict>
</plist>

8
package.json

@ -73,7 +73,13 @@
"artifactName": "Rambox-${version}-mac.${ext}", "artifactName": "Rambox-${version}-mac.${ext}",
"target": [ "target": [
"default" "default"
] ],
"entitlements": "entitlements.mac.plist",
"entitlementsInherit": "entitlements.mac.plist",
"extendInfo": {
"NSMicrophoneUsageDescription": "Apps inside Rambox may need access to your microphone. Please, grant access to have a better experience.",
"NSCameraUsageDescription": "Apps inside Rambox may need access to your camera. Please, grant access to have a better experience."
}
}, },
"dmg": { "dmg": {
"title": "Rambox", "title": "Rambox",

Loading…
Cancel
Save