mirror of
https://github.com/netzbegruenung/jitsi-meet-electron.git
synced 2024-05-04 01:33:42 +02:00
merge from upstream
This commit is contained in:
commit
3a0041d60a
|
@ -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
|
||||
|
|
15
README.md
15
README.md
|
@ -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.
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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.
|
||||
*/
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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);
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -8,3 +8,6 @@ export { default as SettingsDrawerSpotlight } from './SettingsDrawerSpotlight';
|
|||
export {
|
||||
default as StartMutedTogglesSpotlight
|
||||
} from './StartMutedTogglesSpotlight';
|
||||
export {
|
||||
default as AlwaysOnTopWindowSpotlight
|
||||
} from './AlwaysOnTopWindowSpotlight';
|
||||
|
|
|
@ -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
|
||||
};
|
||||
|
|
|
@ -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.
|
||||
*
|
||||
|
|
|
@ -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
|
||||
};
|
||||
}
|
||||
|
|
84
app/features/settings/components/AlwaysOnTopWindowToggle.js
Normal file
84
app/features/settings/components/AlwaysOnTopWindowToggle.js
Normal 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);
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
|
|
20
app/features/settings/functions.js
Normal file
20
app/features/settings/functions.js
Normal 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;
|
||||
}
|
|
@ -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';
|
||||
|
|
|
@ -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
223
package-lock.json
generated
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
13
patches/app-builder-lib+22.3.6.patch
Normal file
13
patches/app-builder-lib+22.3.6.patch
Normal 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({
|
Loading…
Reference in a new issue