profile
viewpoint
Saúl Ibarra Corretgé saghul @jitsi Amsterdam https://bettercallsaghul.com Fellow Jitster

react-native-webrtc/react-native-webrtc 2704

The WebRTC module for React Native

cordova-rtc/cordova-plugin-iosrtc 564

Cordova iOS plugin exposing the WebRTC W3C API

saghul/aiodns 330

Simple DNS resolver for asyncio

saghul/CallRoulette 103

A WebRTC demo using Python (asyncio + aiohttp) as the backend

saghul/aiouv 70

A PEP-3156 compatible event loop

saghul/cordova-plugin-audioroute 15

iOS audio route change events and more for Cordova

ioc32/openhrc 14

Open Household Router Contraption

jitsi/handbook 9

The Jitsi Handbook

jitsi/rnnoise-wasm 9

rnnoise noise suppression library as a WASM module

saghul/dotvim 9

My vim configuration

issue commentjitsi/jitsi-meet-electron

Empty Screen from the App

@Test4564 Interrsting! Did you skip the tutorial or cancelled mid way?

Test4564

comment created time in 4 hours

issue commentjitsi/jitsi-meet

Call for help - bug marshall programme

Yes, we probably don’t need them all, I’ll try to get to that tomorrow and pick the relevant ones.

saghul

comment created time in 6 hours

issue commentjitsi/jitsi-meet-electron

Support for HTTP authentication

Yep

outis151

comment created time in 6 hours

issue closedjitsi/jitsi-meet-electron

Support for HTTP authentication

In addition to the "secure domain" feature of jitsi-meet, I use http authentication with apache2 (which I have setup as a reverse proxy for jitsi meet).

jitsi-meet-electron however doesn't ask for credential input and just an unauthorized page is displayed

closed time in 6 hours

outis151

issue commentjitsi/docker-jitsi-meet

ENABLE_HTTP_REDIRECT=0 does not disable HTTPS redirect

Have you wiped the config volume after changing the env file?

SimmyD

comment created time in 6 hours

pull request commentjitsi/jitsi-meet

deps: run npm audit fix

@damencho This PR passes the tests now. I think the webpack issue might be related to the Node version. I’ll be looking into that this week, but we can land this already. PTAL when you get a chance.

saghul

comment created time in 7 hours

issue commentjitsi/jitsi-meet-electron

No more meeting connections at all after update to version 2.1.0 on macOS

That was between the signed / unsigned transition. They should auto-update now.

tiiiecherle

comment created time in 10 hours

push eventjitsi/jitsi-meet

Riccardo Magliocchetti

commit sha 6be2a8575fff43e49a2f49f2fe7581ab1a1c2524

lang: update document to match current reality

view details

push time in 11 hours

PR merged jitsi/jitsi-meet

Update lang readme to match reality localization

It looks like i18n updates are done manually editing files there. http://translate.jitsi.org is not there anymore.

+2 -8

2 comments

1 changed file

xrmx

pr closed time in 11 hours

issue closedjitsi/jitsi-meet

Spanish translation

HI, i actualize main-es.json and main-esUs.json, i attach the complete files and patch. I you want update de repo.

But main-es.json not change text "You ar the only in the meeting" and "Invite more people" I did not find how to fix it.

Regards

patch.zip lang.zip

closed time in 11 hours

estiloinfo

push eventsaghul/jitsi-meet

Suguru Hirahara

commit sha 0d14e2fa5c8ba1b1e10a4460a72af28cb7e9d32d

gh: update 1-bug-report template * Update 1-bug-report.md - Comment out the general notice - Add the information that questions and posts asking for help will be closed - Sort sections based on action stream -- steps, expected behaviour, (yet) actual behaviour - Replace environment information with server-side and client-side ones * Update .github/ISSUE_TEMPLATE/1-bug-report.md Co-authored-by: Saúl Ibarra Corretgé <s@saghul.net> Co-authored-by: Saúl Ibarra Corretgé <s@saghul.net>

view details

Saúl Ibarra Corretgé

commit sha d2e0c2eb429ece406582e15006578d213c745909

deps: run npm audit fix

view details

Saúl Ibarra Corretgé

commit sha f25d4caf8cdd8a3846770ed37fd498c29303c233

fixup! let's see if jquery is the culprit...

view details

Saúl Ibarra Corretgé

commit sha 969f9790559994d633055138bc573e5797a92e73

fixup! webpack, is it you?

view details

push time in 11 hours

issue closedjitsi/jitsi-meet

Call for help - bug marshall programme

Hey all,

As discussed in today's community call (https://youtu.be/kmBYc7xV-vE?t=356) we are calling our beloved community for help witth bug triaging and issue management.

If you would like to help the projet by labeling issues, closing duplicates, ensuring discusssions are kep civil and general bug triaging right here on GitHub, please leave a comment here.

Thanks @luixxiul for raising https://github.com/jitsi/jitsi-meet/issues/6164 which kicked off this discussion.

closed time in 12 hours

saghul

issue commentjitsi/jitsi-meet

Call for help - bug marshall programme

Updated the team to have triage access to lib-jitsi-meet, handbook and jitsi-meet-electron.

I think this issue has served its purpose now, let's put it to rest, and continue the good work! We can discuss bug marshaling stuff here: https://github.com/orgs/jitsi/teams/bug-marshalls/discussions

Once again, thanks for all your work so far!

saghul

comment created time in 12 hours

issue commentjitsi/jitsi-meet

Settings page does not allow input

This should have been fixed in version 20.2.3. Can you please update and check again?

mir07

comment created time in 12 hours

push eventjitsi/jitsi-meet

Suguru Hirahara

commit sha 0d14e2fa5c8ba1b1e10a4460a72af28cb7e9d32d

gh: update 1-bug-report template * Update 1-bug-report.md - Comment out the general notice - Add the information that questions and posts asking for help will be closed - Sort sections based on action stream -- steps, expected behaviour, (yet) actual behaviour - Replace environment information with server-side and client-side ones * Update .github/ISSUE_TEMPLATE/1-bug-report.md Co-authored-by: Saúl Ibarra Corretgé <s@saghul.net> Co-authored-by: Saúl Ibarra Corretgé <s@saghul.net>

view details

push time in 12 hours

PR merged jitsi/jitsi-meet

Update 1-bug-report.md documentation
  • Comment out the general notice
  • Add the information that questions and posts asking for help will be closed
  • Sort sections based on action stream -- steps, expected behaviour, (yet) actual behaviour
  • Replace environment information with server-side and client-side ones

--

Clipboard01

+35 -15

2 comments

1 changed file

luixxiul

pr closed time in 12 hours

issue commentjitsi/jitsi-meet-electron

[Bug, Security] macOS screen-sharing second screen actually shares primary screen

I just tested this on macOS and couldn't reproduce the problem. What operating system and version are you using?

luclu

comment created time in 12 hours

issue commentjitsi/docker-jitsi-meet

videobridge throwing health check exceptions even when health checks disabled?

https://github.com/jitsi/jitsi-videobridge/blob/master/doc/web-sockets.md

linuxmagic-mp

comment created time in 12 hours

issue commentjitsi/docker-jitsi-meet

videobridge throwing health check exceptions even when health checks disabled?

Well, a couple of points.. since it is an ALL debian package, it would be resume to be supported, otherwise you should only provide the .deb's for the support platforms.

We live in an imperfect world.

* Could you explain why the health checks are still loaded, when config has them disabled?

IIRC there was some health-check related problem not o long ago (can't remember the details, sorry) butt the latest stable build should be fine.

* Can we disable SCTP (libjnisctp.so) and still function? If so how?

Technically yes, and use WebSocket based bridge channels, but the Docker setup does not yet support them.

linuxmagic-mp

comment created time in 12 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

+// @flow+import { SET_SHARED_VIDEO_STATUS, SET_SHARED_VIDEO_OWNER } from './actionTypes';

style, leave an empty line

tmoldovan8x8

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

+import React, { useRef, useEffect } from 'react';+import YoutubePlayer from 'react-native-youtube-iframe';+import { setSharedVideoStatus } from '../../actions';+import { useSelector, useDispatch, useStore } from 'react-redux';+import { getLocalParticipant } from '../../../base/participants';++const YoutubeLargeVideo = React.forwardRef((props, playerRef) => {++    const dispatch = useDispatch();+    const store = useStore();++    return (<YoutubePlayer+      style = {{

put the styles on a styles.js file

tmoldovan8x8

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

+// @flow+import { SET_SHARED_VIDEO_STATUS, SET_SHARED_VIDEO_OWNER } from './actionTypes';+import { openDialog } from '../base/dialog';+import { EnterVideoLinkPrompt } from './components';++/**+ * Updates the current known status of the shared YouTube video.+ *+ * @param {string} status - The current status of the YouTube video being

time is not documented

tmoldovan8x8

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

+// @flow++import { MiddlewareRegistry, StateListenerRegistry } from '../base/redux';+import { TOGGLE_SHARED_VIDEO } from './actionTypes';+import { setSharedVideoStatus, showEnterVideoLinkPrompt, setSharedVideoOwner } from './actions';+import { getCurrentConference } from '../base/conference';+import { participantJoined, pinParticipant, participantLeft, getLocalParticipant } from '../base/participants';++const SHARED_VIDEO = 'shared-video';++/**+ * Middleware that captures actions related to YouTube video sharing and updates+ * components not hooked into redux.+ *+ * @param {Store} store - The redux store.+ * @returns {Function}+ */+// eslint-disable-next-line no-unused-vars+MiddlewareRegistry.register(store => next => action => {+    switch (action.type) {+    case TOGGLE_SHARED_VIDEO:+        _toggleSharedVideo(store, next, action);+        break;+    }++    return next(action);+});++/**+ * Set up state change listener to perform maintenance tasks when the conference+ * is left or failed, e.g. clear messages or close the chat modal if it's left+ * open.+ */+StateListenerRegistry.register(+    state => getCurrentConference(state),+    (conference, { dispatch }, previousConference) => {+        if (conference && conference !== previousConference) {+            conference.addCommandListener(SHARED_VIDEO,+                ({ value, attributes }) => {+                    switch (attributes.state) {+                    case 'start':+                        dispatch(setSharedVideoOwner(attributes.from));+                        dispatch(participantJoined({+                            conference: conference,+                            id: value,+                            isFakeParticipant: true,+                            avatarURL: `https://img.youtube.com/vi/${value}/0.jpg`,+                            name: 'YouTube'+                        }));+                        dispatch(pinParticipant(value));+                        break;+                    case 'playing':+                        dispatch(setSharedVideoStatus('playing', attributes.time));+                        break;+                    case 'pause':+                        dispatch(setSharedVideoStatus('pause', attributes.time));+                        break;+                    case 'stop':+                        dispatch(setSharedVideoStatus('stop'));+                        dispatch(participantLeft(value, conference));+                        break;+                    }+                }+            );+        }+    });++function _toggleSharedVideo(store, next, action) {+    const { ownerId } = store.getState()['features/youtube-player'];+    const localParticipant = getLocalParticipant(store.getState());++    const conference = getCurrentConference(store.getState());+    const { status } = store.getState()['features/youtube-player'];+    const fakeParticipant = store.getState()['features/base/participants'].filter(p => p.isFakeParticipant)[0];

shouldn't you iterate all fake participants here?

tmoldovan8x8

comment created time in 12 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

+// @flow++import { MiddlewareRegistry, StateListenerRegistry } from '../base/redux';+import { TOGGLE_SHARED_VIDEO } from './actionTypes';+import { setSharedVideoStatus, showEnterVideoLinkPrompt, setSharedVideoOwner } from './actions';+import { getCurrentConference } from '../base/conference';+import { participantJoined, pinParticipant, participantLeft, getLocalParticipant } from '../base/participants';++const SHARED_VIDEO = 'shared-video';++/**+ * Middleware that captures actions related to YouTube video sharing and updates+ * components not hooked into redux.+ *+ * @param {Store} store - The redux store.+ * @returns {Function}+ */+// eslint-disable-next-line no-unused-vars+MiddlewareRegistry.register(store => next => action => {+    switch (action.type) {+    case TOGGLE_SHARED_VIDEO:+        _toggleSharedVideo(store, next, action);+        break;+    }++    return next(action);+});++/**+ * Set up state change listener to perform maintenance tasks when the conference+ * is left or failed, e.g. clear messages or close the chat modal if it's left+ * open.+ */+StateListenerRegistry.register(+    state => getCurrentConference(state),+    (conference, { dispatch }, previousConference) => {+        if (conference && conference !== previousConference) {+            conference.addCommandListener(SHARED_VIDEO,+                ({ value, attributes }) => {+                    switch (attributes.state) {+                    case 'start':+                        dispatch(setSharedVideoOwner(attributes.from));+                        dispatch(participantJoined({+                            conference: conference,+                            id: value,+                            isFakeParticipant: true,+                            avatarURL: `https://img.youtube.com/vi/${value}/0.jpg`,+                            name: 'YouTube'+                        }));+                        dispatch(pinParticipant(value));+                        break;+                    case 'playing':+                        dispatch(setSharedVideoStatus('playing', attributes.time));+                        break;+                    case 'pause':+                        dispatch(setSharedVideoStatus('pause', attributes.time));+                        break;+                    case 'stop':+                        dispatch(setSharedVideoStatus('stop'));+                        dispatch(participantLeft(value, conference));+                        break;+                    }+                }+            );+        }+    });++function _toggleSharedVideo(store, next, action) {+    const { ownerId } = store.getState()['features/youtube-player'];

cache the store in a variable instead of using store.getState all the time here.

tmoldovan8x8

comment created time in 12 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

+import { ReducerRegistry } from '../base/redux';

add // @flow

tmoldovan8x8

comment created time in 12 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

+// @flow++import { MiddlewareRegistry, StateListenerRegistry } from '../base/redux';+import { TOGGLE_SHARED_VIDEO } from './actionTypes';+import { setSharedVideoStatus, showEnterVideoLinkPrompt, setSharedVideoOwner } from './actions';+import { getCurrentConference } from '../base/conference';+import { participantJoined, pinParticipant, participantLeft, getLocalParticipant } from '../base/participants';++const SHARED_VIDEO = 'shared-video';++/**+ * Middleware that captures actions related to YouTube video sharing and updates+ * components not hooked into redux.+ *+ * @param {Store} store - The redux store.+ * @returns {Function}+ */+// eslint-disable-next-line no-unused-vars+MiddlewareRegistry.register(store => next => action => {+    switch (action.type) {+    case TOGGLE_SHARED_VIDEO:+        _toggleSharedVideo(store, next, action);+        break;+    }++    return next(action);+});++/**+ * Set up state change listener to perform maintenance tasks when the conference+ * is left or failed, e.g. clear messages or close the chat modal if it's left+ * open.+ */+StateListenerRegistry.register(

❤️

tmoldovan8x8

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

+// @flow++import { MiddlewareRegistry, StateListenerRegistry } from '../base/redux';+import { TOGGLE_SHARED_VIDEO } from './actionTypes';+import { setSharedVideoStatus, showEnterVideoLinkPrompt, setSharedVideoOwner } from './actions';+import { getCurrentConference } from '../base/conference';+import { participantJoined, pinParticipant, participantLeft, getLocalParticipant } from '../base/participants';++const SHARED_VIDEO = 'shared-video';++/**+ * Middleware that captures actions related to YouTube video sharing and updates+ * components not hooked into redux.+ *+ * @param {Store} store - The redux store.+ * @returns {Function}+ */+// eslint-disable-next-line no-unused-vars+MiddlewareRegistry.register(store => next => action => {+    switch (action.type) {+    case TOGGLE_SHARED_VIDEO:+        _toggleSharedVideo(store, next, action);+        break;+    }++    return next(action);+});++/**+ * Set up state change listener to perform maintenance tasks when the conference+ * is left or failed, e.g. clear messages or close the chat modal if it's left+ * open.+ */+StateListenerRegistry.register(+    state => getCurrentConference(state),+    (conference, { dispatch }, previousConference) => {+        if (conference && conference !== previousConference) {+            conference.addCommandListener(SHARED_VIDEO,+                ({ value, attributes }) => {+                    switch (attributes.state) {+                    case 'start':+                        dispatch(setSharedVideoOwner(attributes.from));+                        dispatch(participantJoined({+                            conference: conference,+                            id: value,+                            isFakeParticipant: true,+                            avatarURL: `https://img.youtube.com/vi/${value}/0.jpg`,+                            name: 'YouTube'+                        }));+                        dispatch(pinParticipant(value));+                        break;+                    case 'playing':+                        dispatch(setSharedVideoStatus('playing', attributes.time));+                        break;+                    case 'pause':+                        dispatch(setSharedVideoStatus('pause', attributes.time));+                        break;+                    case 'stop':+                        dispatch(setSharedVideoStatus('stop'));+                        dispatch(participantLeft(value, conference));

This should also be dispatched if we leave the conference without stopping.

tmoldovan8x8

comment created time in 12 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

 class ParticipantView extends Component<Props> {                 ? this.props.testHintId                 : `org.jitsi.meet.Participant#${this.props.participantId}`; +        const isFakeParticipant = this.props._participant && this.props._participant.isFakeParticipant;++        const renderYoutubeLargeVideo = isFakeParticipant && !disableVideo;+         return (             <Container-                onClick = { renderVideo ? undefined : onPress }+                onClick = { renderVideo || renderYoutubeLargeVideo ? undefined : onPress }                 style = {{                     ...styles.participantView,                     ...this.props.style-                }}+                }} 

?

tmoldovan8x8

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

+// @flow++import { MiddlewareRegistry, StateListenerRegistry } from '../base/redux';+import { TOGGLE_SHARED_VIDEO } from './actionTypes';+import { setSharedVideoStatus, showEnterVideoLinkPrompt, setSharedVideoOwner } from './actions';+import { getCurrentConference } from '../base/conference';+import { participantJoined, pinParticipant, participantLeft, getLocalParticipant } from '../base/participants';++const SHARED_VIDEO = 'shared-video';++/**+ * Middleware that captures actions related to YouTube video sharing and updates+ * components not hooked into redux.+ *+ * @param {Store} store - The redux store.+ * @returns {Function}+ */+// eslint-disable-next-line no-unused-vars+MiddlewareRegistry.register(store => next => action => {+    switch (action.type) {+    case TOGGLE_SHARED_VIDEO:+        _toggleSharedVideo(store, next, action);+        break;+    }++    return next(action);+});++/**+ * Set up state change listener to perform maintenance tasks when the conference+ * is left or failed, e.g. clear messages or close the chat modal if it's left+ * open.+ */+StateListenerRegistry.register(+    state => getCurrentConference(state),+    (conference, { dispatch }, previousConference) => {+        if (conference && conference !== previousConference) {+            conference.addCommandListener(SHARED_VIDEO,+                ({ value, attributes }) => {+                    switch (attributes.state) {+                    case 'start':+                        dispatch(setSharedVideoOwner(attributes.from));+                        dispatch(participantJoined({+                            conference: conference,+                            id: value,+                            isFakeParticipant: true,+                            avatarURL: `https://img.youtube.com/vi/${value}/0.jpg`,+                            name: 'YouTube'+                        }));+                        dispatch(pinParticipant(value));+                        break;+                    case 'playing':+                        dispatch(setSharedVideoStatus('playing', attributes.time));+                        break;+                    case 'pause':+                        dispatch(setSharedVideoStatus('pause', attributes.time));+                        break;+                    case 'stop':+                        dispatch(setSharedVideoStatus('stop'));+                        dispatch(participantLeft(value, conference));+                        break;+                    }+                }+            );+        }+    });++function _toggleSharedVideo(store, next, action) {+    const { ownerId } = store.getState()['features/youtube-player'];+    const localParticipant = getLocalParticipant(store.getState());++    const conference = getCurrentConference(store.getState());+    const { status } = store.getState()['features/youtube-player'];+    const fakeParticipant = store.getState()['features/base/participants'].filter(p => p.isFakeParticipant)[0];++    if (status === 'playing' || status === 'start' || status === 'pause') {+        if (ownerId === localParticipant.id) {+            conference.sendCommandOnce(SHARED_VIDEO, {+                value: fakeParticipant.id,+                attributes: {+                    state: 'stop'+                }+            });+        }+    } else {+        store.dispatch(showEnterVideoLinkPrompt(id => _onVideoLinkEntered(store, id)));+    }++    return next(action);+}++function _onVideoLinkEntered(store, id) {+    const conference = getCurrentConference(store.getState());

ditto, cache the state

tmoldovan8x8

comment created time in 12 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

+import React, { useRef, useEffect } from 'react';

add // @flow

tmoldovan8x8

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

+// @flow++import { MiddlewareRegistry, StateListenerRegistry } from '../base/redux';+import { TOGGLE_SHARED_VIDEO } from './actionTypes';+import { setSharedVideoStatus, showEnterVideoLinkPrompt, setSharedVideoOwner } from './actions';+import { getCurrentConference } from '../base/conference';+import { participantJoined, pinParticipant, participantLeft, getLocalParticipant } from '../base/participants';++const SHARED_VIDEO = 'shared-video';++/**+ * Middleware that captures actions related to YouTube video sharing and updates+ * components not hooked into redux.+ *+ * @param {Store} store - The redux store.+ * @returns {Function}+ */+// eslint-disable-next-line no-unused-vars+MiddlewareRegistry.register(store => next => action => {+    switch (action.type) {+    case TOGGLE_SHARED_VIDEO:+        _toggleSharedVideo(store, next, action);+        break;+    }++    return next(action);+});++/**+ * Set up state change listener to perform maintenance tasks when the conference+ * is left or failed, e.g. clear messages or close the chat modal if it's left+ * open.+ */+StateListenerRegistry.register(+    state => getCurrentConference(state),+    (conference, { dispatch }, previousConference) => {+        if (conference && conference !== previousConference) {+            conference.addCommandListener(SHARED_VIDEO,+                ({ value, attributes }) => {+                    switch (attributes.state) {+                    case 'start':+                        dispatch(setSharedVideoOwner(attributes.from));+                        dispatch(participantJoined({+                            conference: conference,+                            id: value,+                            isFakeParticipant: true,+                            avatarURL: `https://img.youtube.com/vi/${value}/0.jpg`,+                            name: 'YouTube'+                        }));+                        dispatch(pinParticipant(value));+                        break;+                    case 'playing':+                        dispatch(setSharedVideoStatus('playing', attributes.time));+                        break;+                    case 'pause':+                        dispatch(setSharedVideoStatus('pause', attributes.time));+                        break;+                    case 'stop':+                        dispatch(setSharedVideoStatus('stop'));+                        dispatch(participantLeft(value, conference));+                        break;+                    }+                }+            );+        }+    });++function _toggleSharedVideo(store, next, action) {

docs

tmoldovan8x8

comment created time in 12 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

+// @flow++import type { Dispatch } from 'redux';++import { toggleSharedVideo } from '../actions';+import { translate } from '../../base/i18n';+import { IconShareVideo } from '../../base/icons';+import { connect } from '../../base/redux';+import {+    AbstractButton,+    AbstractButtonProps+} from '../../base/toolbox';++import { getLocalParticipant } from '../../base/participants';++/**+ * The type of the React {@code Component} props of {@link TileViewButton}.+ */+type Props = AbstractButtonProps & {++    /**+     * Whether or not the local participant is sharing a YouTube video.+     */+    _sharingVideo: boolean,++    /**+     * The redux {@code dispatch} function.+     */+    dispatch: Dispatch<any>+};++/**+ * Component that renders a toolbar button for toggling the tile layout view.+ *+ * @extends AbstractButton+ */+class VideoShareButton extends AbstractButton<Props, *> {+    accessibilityLabel = 'toolbar.accessibilityLabel.sharedvideo';+    icon = IconShareVideo;+    label = 'toolbar.sharedvideo';+    toggledLabel = 'toolbar.stopSharedVideo';++    /**+     * Handles clicking / pressing the button.+     *+     * @override+     * @protected+     * @returns {void}+     */+    _handleClick() {+        this._onToggleSharedVideo();+    }++    /**+     * Indicates whether this button is in toggled state or not.+     *+     * @override+     * @protected+     * @returns {boolean}+     */+    _isToggled() {+        return this.props._sharingVideo;+    }++    /**+     * @private+     * @returns {void}+     */+    _onToggleSharedVideo() {+        this._doToggleSharedVideo();+    }++    /*+     * Dispatches an action to toggle YouTube video sharing.+     *+     * @private+     * @returns {void}+     */+    _doToggleSharedVideo() {+        this.props.dispatch(toggleSharedVideo());+    }+}++/**+ * Maps part of the Redux state to the props of this component.+ *+ * @param {Object} state - The Redux state.+ * @param {Object} ownProps - The properties explicitly passed to the component instance.+ * @private+ * @returns {Props}+ */+function _mapStateToProps(state): Object {+    const sharedVideoStatus = state['features/youtube-player'].status;+    const { ownerId } = state['features/youtube-player'];

you could deconstrruct the status here too

tmoldovan8x8

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

+// @flow++import type { Dispatch } from 'redux';++import { toggleSharedVideo } from '../actions';+import { translate } from '../../base/i18n';+import { IconShareVideo } from '../../base/icons';+import { connect } from '../../base/redux';+import {+    AbstractButton,+    AbstractButtonProps+} from '../../base/toolbox';++import { getLocalParticipant } from '../../base/participants';++/**+ * The type of the React {@code Component} props of {@link TileViewButton}.+ */+type Props = AbstractButtonProps & {++    /**+     * Whether or not the local participant is sharing a YouTube video.+     */+    _sharingVideo: boolean,++    /**+     * The redux {@code dispatch} function.+     */+    dispatch: Dispatch<any>+};++/**+ * Component that renders a toolbar button for toggling the tile layout view.+ *+ * @extends AbstractButton+ */+class VideoShareButton extends AbstractButton<Props, *> {+    accessibilityLabel = 'toolbar.accessibilityLabel.sharedvideo';+    icon = IconShareVideo;+    label = 'toolbar.sharedvideo';+    toggledLabel = 'toolbar.stopSharedVideo';++    /**+     * Handles clicking / pressing the button.+     *+     * @override+     * @protected+     * @returns {void}+     */+    _handleClick() {+        this._onToggleSharedVideo();+    }++    /**+     * Indicates whether this button is in toggled state or not.+     *+     * @override+     * @protected+     * @returns {boolean}+     */+    _isToggled() {+        return this.props._sharingVideo;+    }++    /**+     * @private+     * @returns {void}+     */+    _onToggleSharedVideo() {+        this._doToggleSharedVideo();+    }++    /*+     * Dispatches an action to toggle YouTube video sharing.+     *+     * @private+     * @returns {void}+     */+    _doToggleSharedVideo() {+        this.props.dispatch(toggleSharedVideo());+    }+}++/**+ * Maps part of the Redux state to the props of this component.+ *+ * @param {Object} state - The Redux state.+ * @param {Object} ownProps - The properties explicitly passed to the component instance.+ * @private+ * @returns {Props}+ */+function _mapStateToProps(state): Object {+    const sharedVideoStatus = state['features/youtube-player'].status;+    const { ownerId } = state['features/youtube-player'];+    const localParticipantId = getLocalParticipant(state).id;++    if (ownerId !== localParticipantId) {

maybe also check if ownerId is actually something?

tmoldovan8x8

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

+// @flow++import { Component } from 'react';+import type { Dispatch } from 'redux';++/**+ * The type of the React {@code Component} props of+ * {@link AbstractDisplayNamePrompt}.+ */+export type Props = {++    /**+     * Invoked to update the local participant's display name.+     */+    dispatch: Dispatch<any>,++    /**+     * Function to be invoked after a successful display name change.+     */+    onPostSubmit: ?Function,++    /**+     * Invoked to obtain translated strings.+     */+    t: Function+};++/**+ * Implements an abstract class for {@code DisplayNamePrompt}.+ */+export default class AbstractEnterVideoLinkPrompt<S: *>+    extends Component < Props, S > {

doesn't this fit in a 120 char line?

tmoldovan8x8

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

+import React, { useRef, useEffect } from 'react';+import YoutubePlayer from 'react-native-youtube-iframe';+import { setSharedVideoStatus } from '../../actions';+import { useSelector, useDispatch, useStore } from 'react-redux';+import { getLocalParticipant } from '../../../base/participants';++const YoutubeLargeVideo = React.forwardRef((props, playerRef) => {++    const dispatch = useDispatch();+    const store = useStore();++    return (<YoutubePlayer+      style = {{+                flex: 1,  +                justifyContent: 'center',+                alignItems: 'center'}}+        height = '100%'+        width = '100%'+        onReady = { () => onVideoReady(dispatch, store) }+        onChangeState = { e => onVideoChangeEvent(e, dispatch, store, playerRef) }+        play = { props.isPlaying }+        playbackRate = { 1 }+        initialPlayerParams = {{+            controls: props.enableControls,+            modestbranding: true+        }}+        ref = { playerRef }+        videoId = { props.youtubeId }+        volume = { 50 }/>)+});++const ConnectedYoutubeLargeVideo = (props) => {+    const playerRef = useRef(null);+    const isPlaying = useSelector(state => getIsPlaying(state));+    const seek = useSelector(state => getSeek(state));+    const enableControls = useSelector(state => shouldEnableControls(state))++    useEffect(() => {+        playerRef.current.seekTo(seek)+    });++    return (<YoutubeLargeVideo

Is the extra component really necesaary?

tmoldovan8x8

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

+import React, { useRef, useEffect } from 'react';+import YoutubePlayer from 'react-native-youtube-iframe';+import { setSharedVideoStatus } from '../../actions';+import { useSelector, useDispatch, useStore } from 'react-redux';+import { getLocalParticipant } from '../../../base/participants';++const YoutubeLargeVideo = React.forwardRef((props, playerRef) => {++    const dispatch = useDispatch();+    const store = useStore();++    return (<YoutubePlayer+      style = {{+                flex: 1,  +                justifyContent: 'center',+                alignItems: 'center'}}+        height = '100%'+        width = '100%'+        onReady = { () => onVideoReady(dispatch, store) }+        onChangeState = { e => onVideoChangeEvent(e, dispatch, store, playerRef) }+        play = { props.isPlaying }+        playbackRate = { 1 }+        initialPlayerParams = {{+            controls: props.enableControls,+            modestbranding: true+        }}+        ref = { playerRef }+        videoId = { props.youtubeId }+        volume = { 50 }/>)+});++const ConnectedYoutubeLargeVideo = (props) => {+    const playerRef = useRef(null);+    const isPlaying = useSelector(state => getIsPlaying(state));

I think using mapDispatchToProps would make the code both shorter and easier to read here since you could get all the things you need in a single go and avoid having 3 auxiliary functions.

tmoldovan8x8

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

+// @flow+import { SET_SHARED_VIDEO_STATUS, SET_SHARED_VIDEO_OWNER } from './actionTypes';+import { openDialog } from '../base/dialog';+import { EnterVideoLinkPrompt } from './components';++/**+ * Updates the current known status of the shared YouTube video.+ *+ * @param {string} status - The current status of the YouTube video being+ * shared.+ * @returns {{+ *     type: SET_SHARED_VIDEO_STATUS,+ *     status: string+ * }}+ */+export function setSharedVideoStatus(status, time) {+    return {+        type: SET_SHARED_VIDEO_STATUS,+        status,+        time+    };+}++export function setSharedVideoOwner(ownerId) {

docs

tmoldovan8x8

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

+// @flow+import { SET_SHARED_VIDEO_STATUS, SET_SHARED_VIDEO_OWNER } from './actionTypes';+import { openDialog } from '../base/dialog';+import { EnterVideoLinkPrompt } from './components';

this should trip the linter, make sure you rebase against current master just in case to get the new lint rules

tmoldovan8x8

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

+// @flow++import type { Dispatch } from 'redux';++import { toggleSharedVideo } from '../actions';+import { translate } from '../../base/i18n';+import { IconShareVideo } from '../../base/icons';+import { connect } from '../../base/redux';+import {+    AbstractButton,

put in a single line

tmoldovan8x8

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

+// @flow++import { Component } from 'react';+import type { Dispatch } from 'redux';++/**+ * The type of the React {@code Component} props of+ * {@link AbstractDisplayNamePrompt}.+ */+export type Props = {++    /**+     * Invoked to update the local participant's display name.+     */+    dispatch: Dispatch<any>,++    /**+     * Function to be invoked after a successful display name change.+     */+    onPostSubmit: ?Function,++    /**+     * Invoked to obtain translated strings.+     */+    t: Function+};++/**+ * Implements an abstract class for {@code DisplayNamePrompt}.+ */+export default class AbstractEnterVideoLinkPrompt<S: *>+    extends Component < Props, S > {+    /**+     * Instantiates a new component.+     *+     *+     * @inheritdoc+     */+    constructor(props: Props) {+        super(props);++        this._onSetVideoLink = this._onSetVideoLink.bind(this);+    }++    _onSetVideoLink: string => boolean;++    /**+     * Dispatches an action to update the local participant's display name. A

update docs

tmoldovan8x8

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

+/**+ * The type of the action which signals to update the current known state of the+ * shared YouTube video.+ *+ * {+ *     type: SET_SHARED_VIDEO_STATUS,+ *     status: string+ * }+ */+export const SET_SHARED_VIDEO_STATUS = 'SET_SHARED_VIDEO_STATUS';++export const SET_SHARED_VIDEO_OWNER = 'SET_SHARED_VIDEO_OWNER';

Docs

tmoldovan8x8

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

 class LargeVideo extends Component<Props, State> { function _mapStateToProps(state) {     return {         _participantId: state['features/large-video'].participantId,+        _isFakeParticipant: state['features/large-video'].isFakeParticipant,

where is this used in this file?

tmoldovan8x8

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

 function _electParticipantInLargeVideo(state) {         }     } -    return id;+return { participantId: id, 

ditto

tmoldovan8x8

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

 export function selectParticipant() { export function selectParticipantInLargeVideo() {     return (dispatch: Dispatch<any>, getState: Function) => {         const state = getState();-        const participantId = _electParticipantInLargeVideo(state);+        const { participantId, isFakeParticipant } = _electParticipantInLargeVideo(state);+         const largeVideo = state['features/large-video'];          if (participantId !== largeVideo.participantId) {             dispatch({                 type: SELECT_LARGE_VIDEO_PARTICIPANT,-                participantId+                participantId,+                isFakeParticipant

why do we need to pass this around? After selecting the large video participant we can check if that participant is a fake one without having to pass that boolean around.

tmoldovan8x8

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

 function Thumbnail(props: Props) {              <ParticipantView                 avatarSize = { AVATAR_SIZE }-                disableVideo = { isScreenShare }+                disableVideo = { isScreenShare || participant.isFakeParticipant }

extract isFakeParticipant to a constant

tmoldovan8x8

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

 function _mapStateToProps(state, ownProps) {     return {         _connectionStatus:             connectionStatus-                || JitsiParticipantConnectionStatus.ACTIVE,+            || JitsiParticipantConnectionStatus.ACTIVE,

unneeded change?

tmoldovan8x8

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

 // @flow-

leave this one alone please

tmoldovan8x8

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

 class Filmstrip extends Component<Props> {                     style = { styles.scrollView } >                     {                         !this._separateLocalThumbnail-                            && !isNarrowAspectRatio_-                            && <LocalThumbnail />+                        && !isNarrowAspectRatio_

please try to avoid making these spacing changes, makes the diff larger and thus harder to follow

tmoldovan8x8

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

 type Props = {      */     _participantName: string, +    /**+     * The participant (to be) depicted by {@link ParticipantView}.+     *+     * @private+     */+    _participant: Object,

passs indidual props instead of the entire object

tmoldovan8x8

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

rn: adds youtube player for mobile app

     "react-native-watch-connectivity": "0.2.0",     "react-native-webrtc": "1.75.3",     "react-native-webview": "7.4.1",+    "react-native-youtube-iframe": "^1.2.3",

this should have been sorted automatically, did you add it there by hand? at any rate, can you ping the dependency to the exact value and thus drop the caret?

tmoldovan8x8

comment created time in 13 hours

issue commentjitsi/jitsi-meet-electron

[Bug, Security] macOS screen-sharing second screen actually shares primary screen

Thanks for the report, which check ASAP. What version are you using? Do earlier versions exhibit the same problem?

luclu

comment created time in 13 hours

issue commentjitsi/jitsi-meet-electron

No more meeting connections at all after update to version 2.1.0 on macOS

The only thing I can think of is tougher default policies on Electron 9.

tiiiecherle

comment created time in 13 hours

issue commentjitsi/jitsi-meet

High Client CPU Load

is the client currently auto-adjusting video quality when the CPU is maxed out?

Yes and no. The browser adjusts the local resolution when CPU overuse is detected. But that's not the entire story, since you are going to continue receiving remote video and depending on your machine and the amount of video, no adjustment would save you.

We are currently not using the CPU overuse information to try to do something smart. A straw man proposal here would be to start lowering last N up to a point, in steps, hoping the overuse flag clears, signaling that we succeeded.

But before that there is probably more low hanging fruit to be collected. Audio levels, for example, seem to contribute a fair amount to the overall CPU load.

weeman1337

comment created time in 13 hours

pull request commentjitsi/jitsi-meet

feat: improve default HTTPS security (#5768)

This needs a rebase.

Also, I think we can drop dhparams altogether now.

@JonathanLennox can you PTAL when you get a chance?

kr4ut

comment created time in 13 hours

issue closedjitsi/jitsi-meet

Installing jitsi-meet via ansible not possible

Description


I am writing a ansible script automating the jitsi installation procedure and can only enter the hostname and cert selection after the successful install with deb_conf.

Current behavior


Currently when installing jitsi with apt you have to configure the pkt while installing. When not entering the hostname and cert selection during the deb_conf procedure the installation is falling.

Expected Behavior


A check if this values are needed would be great because because before installing jitsi-meet the FQDN is already set in /etc/hostname and certs are already generated in /etc/letsencrypt in my installation procedure.

Possible Solution


  • Allow the installation to be configured after a successful install with dpkg-reconfigure
  • check if the needed selections already set in /etc/hostname or use default values

Steps to reproduce

DEBIAN_FRONTEND=noninteractive apt-get -y install jitsi-meet will produce:

....
   The given hostname does not exist in the config
dpkg: error processing package jitsi-meet-prosody (--configure):
 installed jitsi-meet-prosody package post-installation script subprocess returned error exit status 1
Setting up coturn (4.5.0.7-1ubuntu2.18.04.1) ...
Adding group `turnserver' (GID 117) ...
Done.
Adding system user `turnserver' (UID 112) ...
Adding new user `turnserver' (UID 112) with group `turnserver' ...
Not creating home directory `/'.
dpkg: dependency problems prevent configuration of jitsi-meet:
 jitsi-meet depends on jitsi-meet-prosody (= 1.0.3992-1); however:
  Package jitsi-meet-prosody is not configured yet.

dpkg: error processing package jitsi-meet (--configure):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of jitsi-meet-turnserver:
 jitsi-meet-turnserver depends on jitsi-meet-prosody; however:
  Package jitsi-meet-prosody is not configured yet.

dpkg: error processing package jitsi-meet-turnserver (--configure):
 dependency problems - leaving unconfigured
No apport report written because the error message indicates its a followup error from a previous failure.
No apport report written because the error message indicates its a followup error from a previous failure.
 Processing triggers for systemd (237-3ubuntu10.39) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
Processing triggers for ca-certificates (20180409) ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...

done.
done.
Processing triggers for ufw (0.36-0ubuntu0.18.04.1) ...
Processing triggers for ureadahead (0.100.0-21) ...
Processing triggers for libc-bin (2.27-3ubuntu1) ...
Errors were encountered while processing:
 jitsi-meet-prosody
 jitsi-meet
 jitsi-meet-turnserver
E: Sub-process /usr/bin/dpkg returned an error code (1)                                                         
                            

Environment details


  • Ubuntu 18.04

closed time in 13 hours

paulkitt

issue closedjitsi/jitsi-meet

Ansible script for autmatic installation

<!-- Thank you for suggesting an idea to make Jitsi Meet better.

Please fill in as much of the template below as you're able.

Note that the ultimate decission for implementing features lies on the Jitsi team, not all feature requests shall be accepted. -->

Is your feature request related to a problem you are facing? I would like to automatically install Jitsi on my Linux Ubuntu machine

Describe the solution you'd like I would like to have an Ansible script for automatic installation that can be easily found in the Jitsi repository.

Describe alternatives you've considered Manual installation via tutorial

My solution I have already created an Ansible installation script that worked on my Ubuntu 18 machine on a Digital Ocean server. https://github.com/tderflinger/jitsi-deployment Maybe you could use that as a basis and include the script with Jitsi. Would be great.

closed time in 13 hours

tderflinger

PR closed jitsi/jitsi-meet

Reviewers
added Ansible installation guide documentation info:feedback-needed meta

This is a guide and the Ansible source files for an automatic Ansible install of jitsi-meet on an Ubuntu 18 Linux server.

+1 -0

6 comments

1 changed file

tderflinger

pr closed time in 13 hours

pull request commentjitsi/jitsi-meet

added Ansible installation guide

Sorry y'all. We have move this document to the handbook: https://github.com/jitsi/handbook so the diff no longer applies.

I think a new section there called "Third Party Resources" would be welcome.

tderflinger

comment created time in 13 hours

issue commentjitsi/handbook

Guide users to https://jitsi.org/security/

Is there anything actionable here @luixxiul ?I think we already added some links.

luixxiul

comment created time in 13 hours

push eventjitsi/handbook

saghul

commit sha 95c5fe59944e4999d4d1092e322083b0c5c15196

Automated deployment: Mon May 25 13:21:46 UTC 2020 276c315895b6238c533f4f4dcc693842ead06ba9

view details

push time in 13 hours

push eventjitsi/handbook

saghul

commit sha fa4217def31cbce5a3228e4251102f646b862829

Automated deployment: Mon May 25 13:21:16 UTC 2020 af928ad7fd19dd010c9a3d447346e3c29fbdd9f8

view details

push time in 13 hours

push eventjitsi/handbook

saghul

commit sha 1f1683f06faaa5227814bd7116edc89424980834

Automated deployment: Mon May 25 13:20:54 UTC 2020 683004b38bd48da5793706bc5c45ee2ed407cbef

view details

push time in 13 hours

push eventjitsi/handbook

Paul Roth

commit sha 276c315895b6238c533f4f4dcc693842ead06ba9

correct tiny typo

view details

push time in 13 hours

PR merged jitsi/handbook

correct tiny typo
+1 -1

0 comment

1 changed file

proth1

pr closed time in 13 hours

push eventjitsi/handbook

Jasper Orschulko

commit sha af928ad7fd19dd010c9a3d447346e3c29fbdd9f8

remove duplicate config option

view details

push time in 13 hours

PR merged jitsi/handbook

remove duplicate config option
+0 -1

0 comment

1 changed file

Jasper-Ben

pr closed time in 13 hours

push eventjitsi/handbook

Paul Tiedtke

commit sha 683004b38bd48da5793706bc5c45ee2ed407cbef

Fix typos in file names

view details

push time in 13 hours

PR merged jitsi/handbook

Fix typos in file names
+0 -0

0 comment

2 changed files

sapkra

pr closed time in 13 hours

pull request commentjitsi/jitsi-meet

deps: run npm audit fix

Jenkins please test this please.

saghul

comment created time in 13 hours

push eventsaghul/jitsi-meet

msalmasi

commit sha 532dadb245c749f93e3c9ded8e66f17196ced15b

external_api: fixed using deeplinks This update opens links in the full body of the window so deeplinks will work on iOS Safari when using the external API in an iFrame.

view details

Jaya Allamsetty

commit sha 7e0a36e88e05c5ccc6a5eba399f5a278cc481186

chore(deps): Update lib-jitsi-meet fix(Firefox): Enable RTX support on Firefox E2EE fixes/improvements fix(screenshare): Add google conference flag only when simulcast is on fix(video-quality): Apply pending video constraints on p2p originator

view details

damencho

commit sha fa43539718c7d41d6bc02d16ab0237f6325e965b

chore(deps): lib-jitsi-meet, skips sending an extra presence on join.

view details

Jaya Allamsetty

commit sha 5591144693099bd5696d59dba14ad873214e92b9

Revert "external_api: fixed using deeplinks" This breaks the mobile deeplinking page This reverts commit 532dadb245c749f93e3c9ded8e66f17196ced15b.

view details

Suguru Hirahara

commit sha 8c02ba5ee9b89f76605af1909862d10f8ecccc0b

doc: update README.md - Fix a broken link (fixes #6780) - Set direct links - Add a link to the Docker installation guide

view details

christian-sh

commit sha 7f1f92cdf0dfb072b6fb6aadb58349f0500d3655

lang: fix passwordLabel translation in German The former translation contained a typo and incorrect grammar.

view details

Julian1203

commit sha c6d5e103f5c51a156d6a11f2c72c27cf4b716d97

lang: fixes for German

view details

Saúl Ibarra Corretgé

commit sha 70d8fe91c33cb3e7966dd8eddd488c91f6113c99

deps: replace jsrsasign We were only using a couple of utility functionss to parse tokens, not to validate them in any way.

view details

Mihai Uscat

commit sha 75c836c70c8f159816a6fb4a54b82b49c8937247

feat(AddPeopleDialog): Update design; feat(SecurityDialog): Implement

view details

Suguru Hirahara

commit sha 8c30e43b5fa2d9589f72b837f721f5f01e0493a9

Retry "external_api: fixed using deeplinks" Set target='_top' inside anchor. Courtesy of #6700 Follow-up to: #6784

view details

Bettenbuk Zoltan

commit sha 0598e7369b2dfac9c11637c3c356cf634466430f

ref: eslint-config-jitsi@1.0.3

view details

JB BUGEAUD

commit sha 735b686b9825b041a9f5a284144a55505f6089c3

Update of main fr translation (#6141) * Update of main fr translation Correct some non french sounding sentenses. One example welcomepage.title, before "fully featured" was translated as "entièrement en vedette" (which is gibberish) and now "riche en fonctionnalités". * Fixing typo Fixing missing comma * Another typo fix Yet another missing comma fixed.

view details

Jonathan Lennox

commit sha 393fb692ca0706262855ff616e50b556d55de952

Make TLS configs in Debian sample files follow Mozilla security guidelines.

view details

Felix C. Stegerman

commit sha 63ca419e76a8ab36491b18369f34adc49bb55041

improve "open in app" page

view details

Felix C. Stegerman

commit sha b25319fd2eea70f7d3df58687787032be647ad4e

add missing build dependency on nodejs

view details

Jaya Allamsetty

commit sha 5348fa19c8cba9895217e1336a4915edd5661c3a

feat: show option to join via browser on supported mobile browsers Currently Chromium based browsers and Firefox are supported on Android Only Safari is supported on iOS

view details

Michael Telatynski

commit sha 79f4531bd232e41a8ef058e28b3d5f51ed17aee3

lang: allow translation of accessibility label string "Edit your profile"

view details

zzoond

commit sha 93b05d13c325e9cac66bed8153d341bbd73508d1

lang: fix for russian

view details

tolgakaratas

commit sha d53d6e5fa8d0554446449b42b8af71d7c107cdbe

lang,rn: bundle Turkish language

view details

huzaifahj

commit sha 1a4be30ea1e3f2f2cd118e98357ae7f9b0b7fb77

lang: make "OK" capitalization consistent

view details

push time in 13 hours

PR closed jitsi/jitsi-meet

Reviewers
ios: fix not activating Audio Unit in some corner cases ios mobile

When a user was in a conference, and then goes bacck to being alone the Audio Unit may not work properly if this state lasted for too long (around the 10 minute mark).

The solution this commit implements is based on the use of manual audio, that is, WebRTC will no longer activate / deactivate the audio unit by itself, we have to. Thus the Audio Unit will not be enabled until there are at least 2 participants in the meeting.

This is not enough, however, since CallKit will put the AVAudioSession in a weird state (setActive will jusst fail) after about 10 minutes, so we have to add another workaround: "hold" the call in CallKit while we are alone in a meeting.

+150 -3

1 comment

7 changed files

saghul

pr closed time in 13 hours

Pull request review commentjitsi/jitsi-meet

Adding serverURL configuration for MDM/EMM through Managed Configurat…

 export function isSettingEnabled(settingName: string) {     return interfaceConfig.SETTINGS_SECTIONS.includes(settingName); } +/**+ * Returns true if user is allowed to change Server URL.+ *+ * @param {(Function|Object)} stateful - The (whole) redux state, or redux's+ * {@code getState} function to be used to retrieve the state.+ * @returns {boolean} True to indicate that user can change Server URL, false+ * otherwise.+ */+export function isServerURLChangeAllowed(stateful: Object | Function) {
export function isServerURLChangeEnabled(stateful: Object | Function) {
romanhawk

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

Adding serverURL configuration for MDM/EMM through Managed Configurat…

 export class AbstractSettingsView<P: Props, S: *> extends Component<P, S> {  * @param {Object} state - The redux state.  * @protected  * @returns {{+ *     _serverURLChangeAllowed: boolean,  *     _serverURL: string,  *     _settings: Object,  *     _visible: boolean  * }}  */ export function _mapStateToProps(state: Object) {     return {+        _serverURLChangeAllowed: isServerURLChangeAllowed(state),

Move this to the _mapStateToProps implementation in native/SettingsView.js, since it has no web relevance.

romanhawk

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

Adding serverURL configuration for MDM/EMM through Managed Configurat…

 export const TOOLBOX_ALWAYS_VISIBLE = 'toolbox.alwaysVisible';  * Default: disabled (false).  */ export const WELCOME_PAGE_ENABLED = 'welcomepage.enabled';++/**+ * Flag indicating if server URL change is allowed.+ * Default: enabled (true)+ */+export const SERVER_URL_CHANGE_ALLOWED = 'server-url-change.allowed';
export const SERVER_URL_CHANGE_ALLOWED = 'server-url-change.enabled';
romanhawk

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

Adding serverURL configuration for MDM/EMM through Managed Configurat…

 export const TOOLBOX_ALWAYS_VISIBLE = 'toolbox.alwaysVisible';  * Default: disabled (false).  */ export const WELCOME_PAGE_ENABLED = 'welcomepage.enabled';++/**+ * Flag indicating if server URL change is allowed.+ * Default: enabled (true)+ */+export const SERVER_URL_CHANGE_ALLOWED = 'server-url-change.allowed';

Please sort the flags alphabetically.

romanhawk

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

Adding serverURL configuration for MDM/EMM through Managed Configurat…

 <resources>     <string name="app_name">Jitsi Meet</string>+    <string name="restriction_server_url_description">URL of Jitsi Videoserver instance to connect</string>

Where are these strings visible?

romanhawk

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

Adding serverURL configuration for MDM/EMM through Managed Configurat…

 <resources>     <string name="app_name">Jitsi Meet</string>+    <string name="restriction_server_url_description">URL of Jitsi Videoserver instance to connect</string>
    <string name="restriction_server_url_description">URL of Jitsi Meet server instance to connect to</string>
romanhawk

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

Adding serverURL configuration for MDM/EMM through Managed Configurat…

 export class App extends AbstractApp {             // We set these early enough so then we avoid any unnecessary re-renders.             const { dispatch } = this.state.store; +            // Check if serverURL is configured externally and not allowed to change.+            const serverURLChangeAllowed = this.props.flags[SERVER_URL_CHANGE_ALLOWED];++            if (!serverURLChangeAllowed) {

I guess you mean the opposite?

romanhawk

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

Adding serverURL configuration for MDM/EMM through Managed Configurat…

 protected boolean extraInitialize() {      @Override     protected void initialize() {+        broadcastReceiver = new BroadcastReceiver() {+            @Override+            public void onReceive(Context context, Intent intent) {+                leave();+                recreate();+            }+        };+        registerReceiver(broadcastReceiver,+            new IntentFilter(Intent.ACTION_APPLICATION_RESTRICTIONS_CHANGED));++        resolveRestrictions();+        setJitsiMeetConferenceDefaultOptions();+        super.initialize();+    }++    @Override+    public void finish() {+        if (broadcastReceiver != null) {+            unregisterReceiver(broadcastReceiver);+            broadcastReceiver = null;+        }++        super.finish();+    }++    private void setJitsiMeetConferenceDefaultOptions() {         // Set default options         JitsiMeetConferenceOptions defaultOptions             = new JitsiMeetConferenceOptions.Builder()-                .setWelcomePageEnabled(true)-                .setServerURL(buildURL("https://meet.jit.si"))-                .setFeatureFlag("call-integration.enabled", false)-                .build();+            .setWelcomePageEnabled(true)+            .setServerURL(buildURL(defaultURL))+            .setFeatureFlag("call-integration.enabled", false)+            .setFeatureFlag("server-url-change.allowed", !configurationByRestrictions)+            .build();         JitsiMeet.setDefaultConferenceOptions(defaultOptions);+    } -        super.initialize();+    private void resolveRestrictions() {+        RestrictionsManager manager =+            (RestrictionsManager) getSystemService(Context.RESTRICTIONS_SERVICE);+        Bundle restrictions = manager.getApplicationRestrictions();+        List<RestrictionEntry> entries = manager.getManifestRestrictions(+            getApplicationContext().getPackageName());+        for (RestrictionEntry entry : entries) {+            String key = entry.getKey();+            if (key.equals(RESTRICTION_SERVER_URL)) {+                if (restrictions != null && restrictions.containsKey(RESTRICTION_SERVER_URL)) {+                    defaultURL = restrictions.getString(RESTRICTION_SERVER_URL);+                    configurationByRestrictions = true;+                } else {+                    defaultURL = entry.getSelectedString();

what would this value be if there is no restrictions are in-place? The value in app_restricctions.xml?

romanhawk

comment created time in 13 hours

Pull request review commentjitsi/jitsi-meet

Adding serverURL configuration for MDM/EMM through Managed Configurat…

  package org.jitsi.meet; +import android.content.BroadcastReceiver;

@titusmoldovan Ccan you help me review the native parts?

romanhawk

comment created time in 14 hours

Pull request review commentjitsi/jitsi-meet

Adding serverURL configuration for MDM/EMM through Managed Configurat…

 protected boolean extraInitialize() {      @Override     protected void initialize() {+        broadcastReceiver = new BroadcastReceiver() {+            @Override+            public void onReceive(Context context, Intent intent) {+                leave();+                recreate();+            }+        };+        registerReceiver(broadcastReceiver,+            new IntentFilter(Intent.ACTION_APPLICATION_RESTRICTIONS_CHANGED));++        resolveRestrictions();+        setJitsiMeetConferenceDefaultOptions();+        super.initialize();+    }++    @Override+    public void finish() {+        if (broadcastReceiver != null) {+            unregisterReceiver(broadcastReceiver);+            broadcastReceiver = null;+        }++        super.finish();+    }++    private void setJitsiMeetConferenceDefaultOptions() {         // Set default options         JitsiMeetConferenceOptions defaultOptions             = new JitsiMeetConferenceOptions.Builder()-                .setWelcomePageEnabled(true)-                .setServerURL(buildURL("https://meet.jit.si"))-                .setFeatureFlag("call-integration.enabled", false)-                .build();+            .setWelcomePageEnabled(true)+            .setServerURL(buildURL(defaultURL))+            .setFeatureFlag("call-integration.enabled", false)+            .setFeatureFlag("server-url-change.allowed", !configurationByRestrictions)

let's call this flag "server-url-change.enabled" for consistency with other flags?

romanhawk

comment created time in 14 hours

pull request commentjitsi/jitsi-meet

add a build script in js to support cross-platform build.

I'm not sure we want to replace the current Makefile. At the same time I get that this being a JS application having the build script also in JS is one less barrier for contribution, so I'm +0.5 at this time.

Now, in order to make sure this can move forward we'd need the Makefile to reroute the commands to this script, so people (and our automation) can continue to use it without risking going out of sync.

vipcxj

comment created time in 14 hours

pull request commentjitsi/jitsi-meet

fix #6844

Jenkins please test this please.

vipcxj

comment created time in 14 hours

pull request commentjitsi/jitsi-meet

Make header text on welcome page selectable

@hristoterezov can you PTAL?

luixxiul

comment created time in 14 hours

Pull request review commentjitsi/jitsi-meet

Update 1-bug-report.md

 about: Create a report to help us improve  --- -*This Issue tracker is only for reporting bugs and tracking code related issues.*+<!-- -Before posting, please make sure you check community.jitsi.org to see if the same or similar bugs have already been discussed.-General questions, installation help, and feature requests can also be posted to community.jitsi.org.+This issue tracker is only for reporting bugs and tracking issues related to the source code. -## Description----+Before posting, please make sure to check if the same or similar bugs have already been discussed: https://github.com/jitsi/jitsi-meet/issues -## Current behavior----+General questions regarding usage, installation, etc. should be posted at https://community.jitsi.org. They will be closed if posted here. -## Expected Behavior----+--> -## Possible Solution----+### Description: -## Steps to reproduce----+<!-- Please describe the bug clearly and concisely. --> -# Environment details----+### Steps to reproduce:++1. <!-- Open '...' -->+2. <!-- Click on '...' -->+3. <!-- and so on... -->++### Expected behavior:++<!-- Please describe what should happen. -->++### Actual behavior:++<!-- Please describe what actually happens. -->+<!-- Please attach screenshot if possible. -->++### Server information:++- Jitsi Meet version:+- Operating System:++### Client information:++- Browser version:
- Browser / app version:
luixxiul

comment created time in 14 hours

push eventjitsi/jitsi-meet

qwertiko GmbH

commit sha 1e0669d33b1bebfbb7e2ec61b8f9e3325d1fdc22

lang: fixes for German

view details

push time in 14 hours

PR merged jitsi/jitsi-meet

update main-de.json localization

updated the german translation for the info box

+3 -3

1 comment

1 changed file

qwertiko

pr closed time in 14 hours

push eventjitsi/jitsi-meet

Ricardo Brisighelli

commit sha d69c2c84d7a48ee4c6ca6077ebff399090f059d0

lang: update Spanish translation

view details

push time in 14 hours

PR merged jitsi/jitsi-meet

Update spanish translation localization

Added missing strings

+203 -29

3 comments

2 changed files

estiloinfo

pr closed time in 14 hours

push eventestiloinfo/jitsi-meet

Saúl Ibarra Corretgé

commit sha 2666a8c821b4175b2d3cf349455ad3520b03486b

Update lang/main-esUS.json

view details

push time in 14 hours

Pull request review commentjitsi/jitsi-meet

Update spanish translation

         "documentClose": "Cerrar documento compartido",         "documentOpen": "Abrir documento compartido",         "download": "Descargar nuestras aplicaciones",+        "e2ee": "Cifrado Punto-a-Punto",
        "e2ee": "Cifrado Extremo-a-Extremo",
estiloinfo

comment created time in 14 hours

push eventestiloinfo/jitsi-meet

Saúl Ibarra Corretgé

commit sha 61a0ecb4fdc5f558e865ddce2f87ae81a494065c

Update lang/main-esUS.json

view details

push time in 14 hours

Pull request review commentjitsi/jitsi-meet

Update spanish translation

             "speakerStats": "Alternar estadísticas del altavoz",             "tileView": "Alternar vista de mosaico",             "toggleCamera": "Alternar cámara",+            "toggleFilmstrip": "Arternar a película",
            "toggleFilmstrip": "Alternar mosaicos",
estiloinfo

comment created time in 14 hours

push eventestiloinfo/jitsi-meet

Saúl Ibarra Corretgé

commit sha e838dcc89153f71865aa2f8edea2010d775f44c3

Update lang/main-esUS.json

view details

push time in 14 hours

Pull request review commentjitsi/jitsi-meet

Update spanish translation

             "chat": "Alternar ventana de chat",             "document": "Alternar documento compartido",             "download": "Descargar nuestras aplicaciones",+            "e2ee": "Cifrado Punto-a-Punto",
            "e2ee": "Cifrado Extremo-a-Extremo",
estiloinfo

comment created time in 14 hours

push eventestiloinfo/jitsi-meet

Saúl Ibarra Corretgé

commit sha ca272b0102c4da086d3993b01a5e9e08610a40b4

Update lang/main-esUS.json

view details

push time in 14 hours

Pull request review commentjitsi/jitsi-meet

Update spanish translation

     "documentSharing": {         "title": "Documento Compartido"     },+    "e2ee": {+        "labelToolTip": "La comunicación de Audio y Video en esta reunión está cifrada Punto-a-Punto"
        "labelToolTip": "La comunicación de Audio y Video en esta reunión está cifrada Extremo-a-Extremo"
estiloinfo

comment created time in 14 hours

push eventestiloinfo/jitsi-meet

Saúl Ibarra Corretgé

commit sha e3cb5e70a52881eb3b5b062ab3776092a8c675cc

Update lang/main-esUS.json

view details

push time in 14 hours

Pull request review commentjitsi/jitsi-meet

Update spanish translation

         "reservationError": "Error del sistema de reservaciones",         "reservationErrorMsg": "Código de error: {{code}}, mensaje: {{msg}}",         "retry": "Volver a intentar",+        "screenSharingAudio": "Share audio",
        "screenSharingAudio": "Compartir audio",
estiloinfo

comment created time in 14 hours

more