merge from upstream

This commit is contained in:
Christian Tramnitz 2020-04-14 20:58:21 +02:00
commit 3a0041d60a
20 changed files with 520 additions and 47 deletions

View file

@ -18,12 +18,5 @@ matrix:
- libpng-dev
- libxtst-dev
before_script:
- | # Fix chrome-sandbox: https://github.com/electron/electron/issues/17972
if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then
echo "Fixing chrome-sandbox permissions..."
sudo chown root ./node_modules/electron/dist/chrome-sandbox
sudo chmod 4755 ./node_modules/electron/dist/chrome-sandbox
fi
script:
- npm run dist

View file

@ -35,6 +35,14 @@ sudo apt-get install libnss3
</details>
### Homebrew
For *MacOS* user, you can install the application using the following command:
```
brew cask install jitsi-meet
```
### Using it with your own Jitsi Meet installation
In order to use this application with your own Jitsi Meet installation it's
@ -49,6 +57,13 @@ location /external_api.js {
}
```
The following additional HTTP header are known not work with the Electron App:
```
Content-Security-Policy "frame-ancestors 'none'";
X-Frame-Options "DENY";
```
## Development
If you want to hack on this project, here is how you do it.

View file

@ -8,7 +8,7 @@ import { connect } from 'react-redux';
import { push } from 'react-router-redux';
import config from '../../config';
import { setEmail, setName } from '../../settings';
import { getSetting, setEmail, setName } from '../../settings';
import { conferenceEnded, conferenceJoined } from '../actions';
import { LoadingIndicator, Wrapper } from '../styled';
@ -26,6 +26,11 @@ type Props = {
*/
location: Object;
/**
* AlwaysOnTop Window Enabled.
*/
_alwaysOnTopWindowEnabled: boolean;
/**
* Avatar URL.
*/
@ -265,7 +270,12 @@ class Conference extends Component<Props, State> {
setupScreenSharingRender(this._api);
new RemoteControl(iframe); // eslint-disable-line no-new
setupAlwaysOnTopRender(this._api);
// Allow window to be on top if enabled in settings
if (this.props._alwaysOnTopWindowEnabled) {
setupAlwaysOnTopRender(this._api);
}
setupWiFiStats(iframe);
setupPowerMonitorRender(this._api);
@ -393,17 +403,12 @@ class Conference extends Component<Props, State> {
* Maps (parts of) the redux state to the React props.
*
* @param {Object} state - The redux state.
* @returns {{
* _avatarURL: string,
* _email: string,
* _name: string,
* _serverURL: string,
* _startWithAudioMuted: boolean,
* _startWithVideoMuted: boolean
* }}
* @returns {Props}
*/
function _mapStateToProps(state: Object) {
return {
_alwaysOnTopWindowEnabled:
getSetting(state, 'alwaysOnTopWindowEnabled', true),
_avatarURL: state.settings.avatarURL,
_email: state.settings.email,
_name: state.settings.name,

View file

@ -5,6 +5,11 @@ export default {
*/
aboutURL: 'https://hilfe.netzbegruenung.de/jitsi',
/**
* The URL to the source code repository.
*/
sourceURL: 'https://github.com/jitsi/jitsi-meet-electron',
/**
* Application name.
*/

View file

@ -34,6 +34,7 @@ export default class HelpButton extends Component< *, State> {
};
this._onAboutClick = openExternalLink.bind(undefined, config.aboutURL);
this._onSourceClick = openExternalLink.bind(undefined, config.sourceURL);
this._onIconClick = this._onIconClick.bind(this);
this._onOpenChange = this._onOpenChange.bind(this);
this._onPrivacyClick
@ -46,6 +47,8 @@ export default class HelpButton extends Component< *, State> {
_onAboutClick: (*) => void;
_onSourceClick: (*) => void;
_onIconClick: (*) => void;
/**
@ -104,6 +107,9 @@ export default class HelpButton extends Component< *, State> {
<Item onActivate = { this._onAboutClick }>
About
</Item>
<Item onActivate = { this._onSourceClick }>
Source
</Item>
<Item>
Version: { version }
</Item>

View file

@ -0,0 +1,78 @@
// @flow
import { Spotlight } from '@atlaskit/onboarding';
import React, { Component } from 'react';
import { connect } from 'react-redux';
import type { Dispatch } from 'redux';
import { closeDrawer } from '../../navbar';
import { continueOnboarding } from '../actions';
type Props = {
/**
* Redux dispatch.
*/
dispatch: Dispatch<*>;
};
/**
* Always on Top Windows Spotlight Component.
*/
class AlwaysOnTopWindowSpotlight extends Component<Props, *> {
/**
* Initializes a new {@code StartMutedTogglesSpotlight} instance.
*
* @inheritdoc
*/
constructor(props: Props) {
super(props);
this._next = this._next.bind(this);
}
/**
* Render function of component.
*
* @returns {ReactElement}
*/
render() {
return (
<Spotlight
actions = { [
{
onClick: this._next,
text: 'Next'
}
] }
dialogPlacement = 'left top'
target = { 'always-on-top-window' } >
You can toggle whether you want to enable the "always-on-top" window,
which is displayed when the main window loses focus.
This will be applied to all conferences.
</Spotlight>
);
}
_next: (*) => void;
/**
* Close the spotlight component.
*
* @returns {void}
*/
_next() {
const { dispatch } = this.props;
dispatch(continueOnboarding());
// FIXME: find a better way to do this.
setTimeout(() => {
dispatch(closeDrawer());
}, 300);
}
}
export default connect()(AlwaysOnTopWindowSpotlight);

View file

@ -6,8 +6,6 @@ import React, { Component } from 'react';
import { connect } from 'react-redux';
import type { Dispatch } from 'redux';
import { closeDrawer } from '../../navbar';
import { continueOnboarding } from '../actions';
type Props = {
@ -63,14 +61,7 @@ class StartMutedTogglesSpotlight extends Component<Props, *> {
* @returns {void}
*/
_next() {
const { dispatch } = this.props;
dispatch(continueOnboarding());
// FIXME: find a better way to do this.
setTimeout(() => {
dispatch(closeDrawer());
}, 300);
this.props.dispatch(continueOnboarding());
}
}

View file

@ -8,3 +8,6 @@ export { default as SettingsDrawerSpotlight } from './SettingsDrawerSpotlight';
export {
default as StartMutedTogglesSpotlight
} from './StartMutedTogglesSpotlight';
export {
default as AlwaysOnTopWindowSpotlight
} from './AlwaysOnTopWindowSpotlight';

View file

@ -7,7 +7,8 @@ import {
NameSettingSpotlight,
EmailSettingSpotlight,
ServerSettingSpotlight,
StartMutedTogglesSpotlight
StartMutedTogglesSpotlight,
AlwaysOnTopWindowSpotlight
} from './components';
export const onboardingSteps = {
@ -20,7 +21,8 @@ export const onboardingSteps = {
'name-setting',
'email-setting',
'server-setting',
'start-muted-toggles'
'start-muted-toggles',
'always-on-top-window'
]
};
@ -31,5 +33,6 @@ export const onboardingComponents = {
'name-setting': NameSettingSpotlight,
'email-setting': EmailSettingSpotlight,
'server-setting': ServerSettingSpotlight,
'start-muted-toggles': StartMutedTogglesSpotlight
'start-muted-toggles': StartMutedTogglesSpotlight,
'always-on-top-window': AlwaysOnTopWindowSpotlight
};

View file

@ -1,3 +1,14 @@
/**
* The type of (redux) action that sets Window always on top.
*
* @type {
* type: SET_ALWAYS_ON_TOP_WINDOW_ENABLED,
* alwaysOnTopWindowEnabled: boolean
* }
*/
export const SET_ALWAYS_ON_TOP_WINDOW_ENABLED
= Symbol('SET_ALWAYS_ON_TOP_WINDOW_ENABLED');
/**
* The type of (redux) action that sets Start with Audio Muted.
*

View file

@ -1,6 +1,7 @@
// @flow
import {
SET_ALWAYS_ON_TOP_WINDOW_ENABLED,
SET_AUDIO_MUTED,
SET_AVATAR_URL,
SET_EMAIL,
@ -108,3 +109,18 @@ export function setStartWithVideoMuted(startWithVideoMuted: boolean) {
}
/**
* Set window always on top.
*
* @param {boolean} alwaysOnTopWindowEnabled - Whether to set AlwaysOnTop Window Enabled.
* @returns {{
* type: SET_ALWAYS_ON_TOP_WINDOW_ENABLED,
* alwaysOnTopWindowEnabled: boolean
* }}
*/
export function setWindowAlwaysOnTop(alwaysOnTopWindowEnabled: boolean) {
return {
type: SET_ALWAYS_ON_TOP_WINDOW_ENABLED,
alwaysOnTopWindowEnabled
};
}

View file

@ -0,0 +1,84 @@
// @flow
import React, { Component } from 'react';
import { connect } from 'react-redux';
import type { Dispatch } from 'redux';
import { setWindowAlwaysOnTop } from '../actions';
import ToggleWithLabel from './ToggleWithLabel';
type Props = {
/**
* Redux dispatch.
*/
dispatch: Dispatch<*>;
/**
* Window Always on Top value in (redux) state.
*/
_alwaysOnTopWindowEnabled: boolean;
};
/**
* Window always open on top placed in Settings Drawer.
*/
class AlwaysOnTopWindowToggle extends Component<Props> {
/**
* Initializes a new {@code AlwaysOnTopWindowToggle} instance.
*
* @inheritdoc
*/
constructor(props) {
super(props);
this._onAlwaysOnTopWindowToggleChange
= this._onAlwaysOnTopWindowToggleChange.bind(this);
}
/**
* Render function of component.
*
* @returns {ReactElement}
*/
render() {
return (
<ToggleWithLabel
isDefaultChecked = { this.props._alwaysOnTopWindowEnabled }
label = 'Always on Top Window'
onChange = { this._onAlwaysOnTopWindowToggleChange }
value = { this.props._alwaysOnTopWindowEnabled } />
);
}
_onAlwaysOnTopWindowToggleChange: (*) => void;
/**
* Toggles alwaysOnTopWindowEnabled.
*
* @returns {void}
*/
_onAlwaysOnTopWindowToggleChange() {
const { _alwaysOnTopWindowEnabled } = this.props;
const newState = !_alwaysOnTopWindowEnabled;
this.props.dispatch(setWindowAlwaysOnTop(newState));
}
}
/**
* Maps (parts of) the redux state to the React props.
*
* @param {Object} state - The redux state.
* @returns {{
* _alwaysOnTopWindowEnabled: boolean,
* }}
*/
function _mapStateToProps(state: Object) {
return {
_alwaysOnTopWindowEnabled: state.settings.alwaysOnTopWindowEnabled
};
}
export default connect(_mapStateToProps)(AlwaysOnTopWindowToggle);

View file

@ -12,9 +12,10 @@ import type { Dispatch } from 'redux';
import { closeDrawer, DrawerContainer, Logo } from '../../navbar';
import { Onboarding, startOnboarding } from '../../onboarding';
import { AvatarContainer, SettingsContainer } from '../styled';
import { AvatarContainer, SettingsContainer, TogglesContainer } from '../styled';
import { setEmail, setName } from '../actions';
import AlwaysOnTopWindowToggle from './AlwaysOnTopWindowToggle';
import ServerURLField from './ServerURLField';
import StartMutedToggles from './StartMutedToggles';
@ -129,10 +130,16 @@ class SettingsDrawer extends Component<Props, *> {
name = 'server-setting'>
<ServerURLField />
</SpotlightTarget>
<SpotlightTarget
name = 'start-muted-toggles'>
<StartMutedToggles />
</SpotlightTarget>
<TogglesContainer>
<SpotlightTarget
name = 'start-muted-toggles'>
<StartMutedToggles />
</SpotlightTarget>
<SpotlightTarget
name = 'always-on-top-window'>
<AlwaysOnTopWindowToggle />
</SpotlightTarget>
</TogglesContainer>
<Onboarding section = 'settings-drawer' />
</SettingsContainer>
</DrawerContainer>

View file

@ -4,7 +4,6 @@ import React, { Component } from 'react';
import { connect } from 'react-redux';
import type { Dispatch } from 'redux';
import { TogglesContainer } from '../styled';
import {
setStartWithAudioMuted,
setStartWithVideoMuted
@ -85,7 +84,7 @@ class StartMutedToggles extends Component<Props, State> {
*/
render() {
return (
<TogglesContainer>
<>
<ToggleWithLabel
isDefaultChecked = { this.props._startWithAudioMuted }
label = 'Start with Audio muted'
@ -96,7 +95,7 @@ class StartMutedToggles extends Component<Props, State> {
label = 'Start with Video muted'
onChange = { this._onVideoToggleChange }
value = { this.state.startWithVideoMuted } />
</TogglesContainer>
</>
);
}

View file

@ -0,0 +1,20 @@
// @flow
/**
* Get's the value for the given setting, providing a default value.
*
* @param {Object} state - The redux state.
* @param {string} setting - The name for the desired setting.
* @param {*} defaultValue - The default value, in case the setting is
* undefined.
* @returns {*} The setting value.
*/
export function getSetting(state: Object, setting: string, defaultValue: any) {
const value = state.settings[setting];
if (typeof value === 'undefined') {
return defaultValue;
}
return value;
}

View file

@ -1,6 +1,7 @@
export * from './actions';
export * from './actionTypes';
export * from './components';
export * from './functions';
export * from './styled';
export { default as middleware } from './middleware';

View file

@ -3,6 +3,7 @@
import { getAvatarURL } from 'js-utils';
import {
SET_ALWAYS_ON_TOP_WINDOW_ENABLED,
SET_AUDIO_MUTED,
SET_AVATAR_URL,
SET_EMAIL,
@ -17,12 +18,14 @@ type State = {
name: string,
serverURL: ?string,
startWithAudioMuted: boolean,
startWithVideoMuted: boolean
startWithVideoMuted: boolean,
alwaysOnTopWindowEnabled: boolean,
};
const username = window.jitsiNodeAPI.osUserInfo().username;
const DEFAULT_STATE = {
alwaysOnTopWindowEnabled: true,
avatarURL: getAvatarURL({ id: username }),
email: '',
name: username,
@ -40,6 +43,12 @@ const DEFAULT_STATE = {
*/
export default (state: State = DEFAULT_STATE, action: Object) => {
switch (action.type) {
case SET_ALWAYS_ON_TOP_WINDOW_ENABLED:
return {
...state,
alwaysOnTopWindowEnabled: action.alwaysOnTopWindowEnabled
};
case SET_AUDIO_MUTED:
return {
...state,

223
package-lock.json generated
View file

@ -1,6 +1,6 @@
{
"name": "jitsi-meet-electron",
"version": "2.0.0",
"version": "2.0.2",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -3460,6 +3460,12 @@
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
"dev": true
},
"@yarnpkg/lockfile": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz",
"integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==",
"dev": true
},
"abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
@ -6029,6 +6035,15 @@
}
}
},
"electron-util": {
"version": "0.13.1",
"resolved": "https://registry.npmjs.org/electron-util/-/electron-util-0.13.1.tgz",
"integrity": "sha512-CvOuAyQPaPtnDp7SspwnT1yTb1yynw6yp4LrZCfEJ7TG/kJFiZW9RqMHlCEFWMn3QNoMkNhGVeCvWJV5NsYyuQ==",
"requires": {
"electron-is-dev": "^1.1.0",
"new-github-issue-url": "^0.2.1"
}
},
"electron-window-state": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/electron-window-state/-/electron-window-state-5.0.3.tgz",
@ -7041,6 +7056,29 @@
"locate-path": "^3.0.0"
}
},
"find-yarn-workspace-root": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz",
"integrity": "sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q==",
"dev": true,
"requires": {
"fs-extra": "^4.0.3",
"micromatch": "^3.1.4"
},
"dependencies": {
"fs-extra": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
"integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
"jsonfile": "^4.0.0",
"universalify": "^0.1.0"
}
}
}
},
"findup-sync": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
@ -8103,8 +8141,7 @@
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
"dev": true
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
},
"isobject": {
"version": "3.0.1",
@ -8122,9 +8159,10 @@
}
},
"jitsi-meet-electron-utils": {
"version": "github:jitsi/jitsi-meet-electron-utils#364d6ad20b2f1b81614444eab0d9f4166b8aead4",
"from": "github:jitsi/jitsi-meet-electron-utils#v2.0.3",
"version": "github:jitsi/jitsi-meet-electron-utils#406ad1ff7e76be17387e72bb18a757271565407a",
"from": "github:jitsi/jitsi-meet-electron-utils#v2.0.4",
"requires": {
"mac-screen-capture-permissions": "^1.1.0",
"nan": "^2.14.0",
"postis": "^2.2.0",
"prebuild-install": "^5.3.0",
@ -8353,6 +8391,15 @@
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true
},
"klaw-sync": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz",
"integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.11"
}
},
"latest-version": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz",
@ -8526,6 +8573,112 @@
"yallist": "^3.0.2"
}
},
"mac-screen-capture-permissions": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/mac-screen-capture-permissions/-/mac-screen-capture-permissions-1.1.0.tgz",
"integrity": "sha512-jMRumlB3FScui/7yW+5FqqbuO7CQ0XOJVT5oTsb7W9eRQDhCIpJpIF0XxLVXwq2DIOp0fYsz1LFiBjnyDYULyQ==",
"requires": {
"electron-util": "^0.13.0",
"execa": "^2.0.4",
"macos-version": "^5.2.0"
},
"dependencies": {
"cross-spawn": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz",
"integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==",
"requires": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
}
},
"execa": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/execa/-/execa-2.1.0.tgz",
"integrity": "sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw==",
"requires": {
"cross-spawn": "^7.0.0",
"get-stream": "^5.0.0",
"is-stream": "^2.0.0",
"merge-stream": "^2.0.0",
"npm-run-path": "^3.0.0",
"onetime": "^5.1.0",
"p-finally": "^2.0.0",
"signal-exit": "^3.0.2",
"strip-final-newline": "^2.0.0"
}
},
"get-stream": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz",
"integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==",
"requires": {
"pump": "^3.0.0"
}
},
"is-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
"integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw=="
},
"npm-run-path": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz",
"integrity": "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==",
"requires": {
"path-key": "^3.0.0"
}
},
"onetime": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
"integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
"requires": {
"mimic-fn": "^2.1.0"
}
},
"p-finally": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz",
"integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw=="
},
"path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
},
"shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"requires": {
"shebang-regex": "^3.0.0"
}
},
"shebang-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
},
"which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"requires": {
"isexe": "^2.0.0"
}
}
}
},
"macos-version": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/macos-version/-/macos-version-5.2.0.tgz",
"integrity": "sha512-egt1bqVE1evUjCup2QN2F0g42AuVcumdM31xNbABz+uXquYPzWP4OrqDm+HpCfM+6t4JzWrzABQW+MZM+FW+Jg==",
"requires": {
"semver": "^5.6.0"
}
},
"make-dir": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.2.tgz",
@ -8621,6 +8774,11 @@
"readable-stream": "^2.0.1"
}
},
"merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
},
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@ -8906,6 +9064,11 @@
"integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==",
"dev": true
},
"new-github-issue-url": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/new-github-issue-url/-/new-github-issue-url-0.2.1.tgz",
"integrity": "sha512-md4cGoxuT4T4d/HDOXbrUHkTKrp/vp+m3aOA7XXVYwNsUNMK49g3SQicTSeV5GIz/5QVGAeYRAOlyp9OvlgsYA=="
},
"nice-try": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
@ -9424,6 +9587,45 @@
"integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
"dev": true
},
"patch-package": {
"version": "6.2.2",
"resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.2.2.tgz",
"integrity": "sha512-YqScVYkVcClUY0v8fF0kWOjDYopzIM8e3bj/RU1DPeEF14+dCGm6UeOYm4jvCyxqIEQ5/eJzmbWfDWnUleFNMg==",
"dev": true,
"requires": {
"@yarnpkg/lockfile": "^1.1.0",
"chalk": "^2.4.2",
"cross-spawn": "^6.0.5",
"find-yarn-workspace-root": "^1.2.1",
"fs-extra": "^7.0.1",
"is-ci": "^2.0.0",
"klaw-sync": "^6.0.0",
"minimist": "^1.2.0",
"rimraf": "^2.6.3",
"semver": "^5.6.0",
"slash": "^2.0.0",
"tmp": "^0.0.33"
},
"dependencies": {
"fs-extra": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
"integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
"jsonfile": "^4.0.0",
"universalify": "^0.1.0"
}
},
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true
}
}
},
"path-browserify": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
@ -10766,6 +10968,12 @@
"integrity": "sha1-BcLuxXn//+FFoDCsJs/qYbmA+r4=",
"dev": true
},
"slash": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
"integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
"dev": true
},
"slice-ansi": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
@ -11174,6 +11382,11 @@
"integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
"dev": true
},
"strip-final-newline": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
"integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="
},
"strip-json-comments": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",

View file

@ -1,6 +1,6 @@
{
"name": "netzbegruenung-konferenz",
"version": "2.0.0",
"version": "2.0.2",
"description": "Electron application for Netzbegruenung Konferenz (Jitsi Meet)",
"main": "./build/main.js",
"productName": "Netzbegruenung Konferenz",
@ -11,7 +11,7 @@
"build": "webpack --config ./webpack.main.js --mode production && webpack --config ./webpack.renderer.js --mode production",
"pack": "npm run build && electron-builder --dir",
"dist": "npm run build && electron-builder",
"postinstall": "electron-builder install-app-deps",
"postinstall": "patch-package && electron-builder install-app-deps",
"validate": "npm ls",
"watch": "webpack --config ./webpack.renderer.js --mode development --watch --watch-poll"
},
@ -96,7 +96,7 @@
"electron-updater": "4.2.5",
"electron-window-state": "5.0.3",
"history": "4.10.1",
"jitsi-meet-electron-utils": "github:jitsi/jitsi-meet-electron-utils#v2.0.3",
"jitsi-meet-electron-utils": "github:jitsi/jitsi-meet-electron-utils#v2.0.4",
"js-utils": "github:jitsi/js-utils#0c53500a5120be2aa3fc590f0f932a0d4771920f",
"moment": "2.23.0",
"mousetrap": "1.6.2",
@ -137,6 +137,7 @@
"file-loader": "6.0.0",
"flow-bin": "0.109.0",
"html-webpack-plugin": "4.0.4",
"patch-package": "6.2.2",
"precommit-hook": "3.0.0",
"style-loader": "1.1.3",
"svg-inline-loader": "0.8.2",

View file

@ -0,0 +1,13 @@
diff --git a/node_modules/app-builder-lib/out/targets/LinuxTargetHelper.js b/node_modules/app-builder-lib/out/targets/LinuxTargetHelper.js
index 6e674b9..8e5be4f 100644
--- a/node_modules/app-builder-lib/out/targets/LinuxTargetHelper.js
+++ b/node_modules/app-builder-lib/out/targets/LinuxTargetHelper.js
@@ -135,7 +135,7 @@ class LinuxTargetHelper {
exec += executableArgs.join(" ");
}
- exec += " %U";
+ exec += " --no-sandbox %U";
}
const desktopMeta = Object.assign(Object.assign({