@ -2,7 +2,6 @@
import { NativeModules } from 'react-native' ;
import { getInviteURL } from '../../base/connection' ;
import {
CONFERENCE _FAILED ,
CONFERENCE _JOINED ,
@ -12,7 +11,6 @@ import {
} from '../../base/conference' ;
import { MiddlewareRegistry } from '../../base/redux' ;
/ * *
* Middleware that captures Redux actions and uses the ExternalAPI module to
* turn them into native events so the application knows about them .
@ -21,52 +19,66 @@ import { MiddlewareRegistry } from '../../base/redux';
* @ returns { Function }
* /
MiddlewareRegistry . register ( store => next => action => {
const eventData = { } ;
const result = next ( action ) ;
switch ( action . type ) {
case CONFERENCE _FAILED : {
eventData . error = action . error ;
eventData . url = getInviteURL ( store . getState ( ) ) ;
_sendEvent ( 'CONFERENCE_FAILED' , eventData ) ;
break ;
}
case CONFERENCE _FAILED :
case CONFERENCE _JOINED :
case CONFERENCE _LEFT :
case CONFERENCE _WILL _JOIN :
case CONFERENCE _WILL _LEAVE : {
const { conference , room , type , ... data } = action ;
case CONFERENCE _JOINED : {
eventData . url = getInviteURL ( store . getState ( ) ) ;
_sendEvent ( 'CONFERENCE_JOINED' , eventData ) ;
break ;
}
// For the above (redux) actions, conference and/or room identify a
// JitsiConference instance. The external API cannot transport such an
// object so we have to transport an "equivalent".
if ( conference || room ) {
// We have chosen to identify the object in question by the
// (supposedly) associated location URL. (FIXME Actually, the redux
// state locationURL is not really asssociated with the
// JitsiConference instance. The value of localtionURL is utilized
// in order to initialize the JitsiConference instance but the value
// of locationURL at the time of CONFERENCE_WILL_LEAVE and
// CONFERENCE_LEFT will not be the value with which the
// JitsiConference instance being left.)
const { locationURL }
= store . getState ( ) [ 'features/base/connection' ] ;
case CONFERENCE _LEFT : {
eventData . url = getInviteURL ( store . getState ( ) ) ;
_sendEvent ( 'CONFERENCE_LEFT' , eventData ) ;
break ;
}
if ( ! locationURL ) {
// The (redux) action cannot be fully converted to an (external
// API) event.
break ;
}
case CONFERENCE _WILL _JOIN : {
eventData . url = getInviteURL ( store . getState ( ) ) ;
_sendEvent ( 'CONFERENCE_WILL_JOIN' , eventData ) ;
break ;
}
data . url = locationURL . href ;
}
case CONFERENCE _WILL _LEAVE : {
eventData . url = getInviteURL ( store . getState ( ) ) ;
_sendEvent ( 'CONFERENCE_WILL_LEAVE' , eventData ) ;
// The (externa API) event's name is the string representation of the
// (redux) action's type.
let name = type . toString ( ) ;
// XXX We are using Symbol for (redux) action types at the time of this
// writing so the Symbol's description should be used.
if ( name . startsWith ( 'Symbol(' ) && name . endsWith ( ')' ) ) {
name = name . slice ( 7 , - 1 ) ;
}
_sendEvent ( name , data ) ;
break ;
}
}
return next ( action ) ;
return result ;
} ) ;
/ * *
* Sends the given event to the native side of the application . Applications can
* then listen to the events using the mechanisms provided by the Jitsi Meet
* SDK .
* Sends a specific event to the native counterpart of the External API . Native
* apps may listen to such events via the mechanisms provided by the ( native )
* mobile Jitsi Meet SDK .
*
* @ param { string } name - Event name .
* @ param { Object } data - Ancillary data for the event .
* @ param { string } name - The name of the event to send .
* @ param { Object } data - The details / specifics of the event to send determined
* by / associated with the specified { @ code name } .
* @ private
* @ returns { void }
* /