Commit Graph

120 Commits

Author SHA1 Message Date
Saúl Ibarra Corretgé 155e02bbfb core: refactor routing
Unfortunately, as the Jitsi Meet development evolved the routing mechanism
became more complex and thre logic ended up spread across multiple parts of the
codebase, which made it hard to follow and extend.

This change aims to fix that by rewriting the routing logic and centralizing it
in (pretty much) a single place, with no implicit inter-dependencies.

In order to arrive there, however, some extra changes were needed, which were
not caught early enough and are thus part of this change:

- JitsiMeetJS initialization is now synchronous: there is nothing async about
  it, and the only async requirement (Temasys support) was lifted. See [0].
- WebRTC support can be detected early: building on top of the above, WebRTC
  support can now be detected immediately, so take advantage of this to simplify
  how we handle unsupported browsers. See [0].

The new router takes decissions based on the Redux state at the time of
invocation. A route can be represented by either a component or a URl reference,
with the latter taking precedence. On mobile, obviously, there is no concept of
URL reference so routing is based solely on components.

[0]: https://github.com/jitsi/lib-jitsi-meet/pull/779
2018-07-11 22:58:41 -05:00
virtuacoplenny 84b589719f fix(connection): reload immediately on possible split-brain (#3162)
* fix(connection): reload immediately on possible split-brain

There isn't an explicit way to know when a split brain
scenario has happened. It is assumed it arises when an
"item-not-found" connection error is encountered early
on in the conference. So, store when a connection has
happened so it be calculated how much time has
elapsed and if the threshold has not been exceeded
then do an immediate reload of the app instead of
showing the overlay with a reload timer.

* squash: rename isItemNotFoundError -> isShardChangedError
2018-07-02 16:22:51 -05:00
Saúl Ibarra Corretgé 87fa8de815 feat(sanity): axe IE and Temasys plugin support 🔥🔥🔥 2018-06-28 13:55:12 +02:00
paweldomas 022954b40b fix(base/connection/reducer): clear 'connection' field
Currently the listeners for disconnected and failed connection events
are unsubscribed as soon as the connection is established, so
the CONNECTION_DISCONNECTED is never triggered which would clear the
'connection' field. This commit will clear the 'connection' state on
CONNECTION_WILL_CONNECT. It's needed anyway given that there's no
guarantee on when and if the async disconnect operation will finish.

One issue caused by the 'connection' not cleared was that
CONNECTION_FAILED was not reduced correctly and the reload screen was
not displayed for the following scenario:
1. Join and leave any working conference.
2. Turn off network connectivity on the device.
3. Wait for CONNECTION_FAILED. The reload screen will not be displayed,
   because CONNECTION_FAILED is not reduced correctly, because the old
   'connection' value is still there.
2018-06-20 15:52:45 +02:00
paweldomas dbd1091364 ref: use getCurrentConference
Try to use the getCurrentConference function wherever the indention is
to check for the current conference.
2018-05-30 16:29:27 +02:00
Saúl Ibarra Corretgé d557a6505d [RN] Fix handling XMPP connection failures
After the connection is established, it can either be properly disconnected or
fail. We need to make sure to be listening for events for either.
2018-05-23 16:37:58 -05:00
Lyubo Marinov 22ce001f14 Coding style: commends, formatting, sorting order 2018-05-20 22:58:34 -05:00
paweldomas 7704809c4c feat(base/connection): log leave failure reason
Because there are multiple reasons on why a conference.leave() may fail
it's helpful to know if and why it happened.
2018-05-20 21:17:36 -05:00
paweldomas a9ee5944e1 ref(base/connection): conferenceFailed error argument
Introduce ConnectionFailedError type.
2018-05-04 13:02:19 +02:00
paweldomas 36ecc99b5b fix(auth/external API): CONFERENCE_FAILED with login dialog
Delay the CONFERENCE_FAILED event until the user cancels the login
dialog using the 'recoverable' event flag.
2018-05-04 13:02:19 +02:00
hristoterezov f14095ecfc feat(deep_linking): add analytics
In order to be able to add analytics to the deep-linking pages the
lib-jitsi-meet initialization has been moved so it happens earlier.

The introduced `initPromise` will eventually disappear, once conference is
migrated into React and / or support for Temasys is dropped. At that stage, it
can be turned into a sync function which all platforms share.
2018-04-26 10:11:34 +02:00
Zoltan Bettenbuk cc6e04ddf8 [RN] Fix calendar alerts when case sensitive URLs are used 2018-04-04 11:21:02 +02:00
Leonard Kim d93782af8a feat(new-toolbars): initial implementation 2018-03-27 00:54:30 -05:00
Lyubo Marinov a30412ba65 [RN] Automatically dispatch CONFERENCE_LEFT 2018-03-04 19:28:44 -06:00
Дамян Минков ba94ba30c5 Handles connection failed event details (passing them to analytics). (#2432)
* Handles connection failed event details (passing them to analytics).

* Fixing comments.

* Updates depending versions to be able to test.

* Fixing comments.

* Fixes wrong jsdoc.
2018-02-06 14:54:21 -08:00
Saúl Ibarra Corretgé 87a87eebb9 [RN] Add reload overlay in case of connection / conference errors 2017-12-12 22:58:46 -06:00
Lyubo Marinov 0eafee2a95 feat(errors): fix error handling for connection and conference 2017-12-04 16:01:28 -06:00
Saúl Ibarra Corretgé de0d69a20e feat(errors): fix error handling for connection and conference
Properly handle errors while connecting or joining a conference. Prior to this
patch, only errors on established conferences / connections were saved to the
redux store.
2017-12-04 15:52:52 -06:00
Lyubo Marinov 569b3547c8 Upgrade NPM dependencies/packages: react-native 0.50 2017-12-04 00:45:18 -06:00
Leonard Kim bb45f76a7a fix(conference): initialize UI features on CONFERENCE_JOINED
Initializing UI features, like keyboard shortcuts, by chaining
onto APP.conference.init is not safe because init can fail,
skipping the initializing of UI features. This can happen when
the room is locked and then a failure event is dispatched into
middleware. I couldn't find a place to properly chain onto
in the APP.conference.init promise chain, primarily due
to the flow continued within middleware, so instead I
leveraged an existing listener for CONFERENCE_JOINED.
2017-11-22 13:28:04 -06:00
Lyubo Marinov 5e01abf6fb Flow, coding style 2017-10-17 17:12:39 -05:00
paweldomas 8a4e6a7ec0 feat: override email, display name and avatar on mobile
Will override email, display name and avatar URL with the values
provided in 'context.user' structure of the JWT token.

Settings will no longer be used to retrieve local display name,
email and avatar URL. Now those values will be obtained from
the /features/base/participants Redux state.

fix(jwt/middleware): use const for default name

fix: wrong default display name on web

ref(base/participants): remove getDisplayName functions

ref(jwt): do not accept unknown user fields
2017-10-13 14:31:44 -05:00
paweldomas 122be9e0e0 ref: move 'jwt' feature to 'base' 2017-10-12 14:43:09 -05:00
Lyubo Marinov dfebd692f3 eslint 4.8.0
ESLint 4.8.0 discovers a lot of error related to formatting. While I
tried to fix as many of them as possible, a portion of them actually go
against our coding style. In such a case, I've disabled the indent rule
which effectively leaves it as it was before ESLint 4.8.0.

Additionally, remove jshint because it's becoming a nuisance with its
lack of understanding of ES2015+.
2017-10-02 18:12:38 -05:00
Lyubo Marinov 4bf19d73fd [RN] Fix documentation comments
* Javadoc introduced @code as a replacement of <code> and <tt> which is
  better aligned with other javadoc tags such as @link. Use it in the
  Java source code. If we switch to Kotlin, then we'll definitely use
  Markdown.

* There are more uses of @code in the JavaScript source code than <tt>
  so use @code for the sake of consistency. Eventually, I'd rather we
  switch to Markdown because it's easier on my eyes.

* Xcode is plain confused by @code and @link. The Internet says that
  Xcode supports the backquote character to denote the beginning and end
  of a string of characters which should be formatted for display as
  code but it doesn't work for me. <tt> is not rendered at all. So use
  the backquote which is rendered itself. Hopefully, if we switch to
  Markdown, then it'll be common between JavaScript and Objective-C
  source code.
2017-10-01 01:35:19 -05:00
Lyubo Marinov 70de9a683f [RN] Prepare for LoadingIndicator in LoginDialog 2017-09-24 17:25:58 -05:00
Lyubo Marinov 4e0761a46a CONNECTION_FAILED error as object
Gradually, we exploded the error of CONNECTION_FAILED in multiple
redux state properties. The explosion makes maintenance harder because
the properties have to be updated in sync. Collect them in an object
resembling an Error instance.
2017-09-24 16:51:43 -05:00
paweldomas f8b607e92e fix(LoginDialog.native): no 'password incorrect' initially
Do not show the 'Password is incorrect' message when the LoginDialog
opens for the first time.
2017-09-24 14:25:03 -05:00
Lyubo Marinov 241dc3b147 [RN] Support XMPP authentication 2017-09-19 23:04:45 -05:00
paweldomas 141acea194 [RN] Support XMPP authentication 2017-09-19 14:38:45 -05:00
paweldomas 80329e8ffe [RN] CONFERENCE_FAILED error message in redux
In order to support XMPP authentication, we'll need the message
accompanying the error and carried by lib-jitsi-meet's
CONFERENCE_FAILED in the redux store. We already carry the message in
the redux action and we've got the error in the redux store.
2017-09-19 14:37:09 -05:00
Lyubo Marinov c2ae7999ef Coding style
In certain scenarios we do need to import files instead of features but
even then it is our coding style to not write the file extension.
2017-09-07 12:49:35 -05:00
Lyubo Marinov 6545a7a1bb Remove duplication 2017-09-01 23:55:25 -05:00
Lyubo Marinov 377be4272a [RN] Fix the conference URL delivered to JitsiMeetView's listeners 2017-08-01 06:31:03 -05:00
Lyubo Marinov 1748049322 [RN] Remove unncessary characters from the invite URL 2017-08-01 06:31:03 -05:00
Lyubo Marinov 96e0c56bde [RN] Don't override config values 2017-07-21 17:40:09 -05:00
Lyubo Marinov 5c094bf6e0 [RN] Fix disconnecting before the connection was established 2017-07-07 12:21:08 -05:00
Saúl Ibarra Corretgé c4232b34ae [RN] Fix disconnecting before the connection was established
Keep track of the connection and conference objects so we can leave and / or
disconnect early, before the connection is established or the conference joined.
2017-07-07 09:37:04 -05:00
Lyubo Marinov 9aaf9a484d [RN] Fix TypeError: undefined is not an object (evaluating 'this.options.p2p.useStunTurn') 2017-07-05 16:34:06 -05:00
Lyubo Marinov 25ec8ac6a7 Prepare for eslint 4 2017-06-14 22:17:35 -05:00
Lyubo Marinov d437f3db03 [React] Call/ring overlay
Rewrite the non-React RingOverlay into the React Component CallOverlay
in a way which makes it easier to port to React Native.
2017-06-06 00:11:39 -05:00
Lyubo Marinov a4a13bed84 Invite URL w/o (hash & query/search) params 2017-06-01 21:04:31 -05:00
Lyubo Marinov ec454d1da0 Move ConferenceUrl.inviteURL into React and redux 2017-06-01 21:04:31 -05:00
Saúl Ibarra Corretgé 5304660e14 [RN] Polyfill Symbol 2017-05-26 16:37:22 -05:00
Lyubo Marinov 66ababc6c8 Comply w/ codying style: naming, formatting, etc. 2017-05-25 10:56:08 -05:00
Lyubo Marinov 2f3706bd37 [RN] Simplify
There were getDomain, setDomain, SET_DOMAIN, setRoomURL, SET_ROOM_URL
which together were repeating one and the same information and in the
case of the 'room URL' abstraction was not 100% accurate because it
would exist even when there was no room. Replace them all with a
'location URL' abstraction which exists with or without a room.

Then the 'room URL' abstraction was not used in (mobile) feature
share-room. Use the 'location URL' there now.

Finally, removes source code duplication in supporting the Web
application context root.
2017-05-09 16:31:21 -05:00
Lyubo Marinov e6f6884c36 [RN] Support JSON Web Token (JWT)
Make 'Add jwt module to react' work on mobile.
2017-05-09 00:21:14 -05:00
Lyubo Marinov bce1610794 Simplify, comply w/ coding style
Rename setStateProperties and setStateProperty to assign and set,
respectively. Inspired by Object.assign, _.assign, and _.set.
2017-04-22 17:57:08 -05:00
Lyubo Marinov 3b54c527b6 Remove obsolete source code 2017-02-28 23:22:03 -06:00
Lyubo Marinov 0ed85b9d25 Replace features/unsupported-browser SET_UNSUPPORTED_BROWSER with features/base/lib-jitsi-meet SET_WEBRTC_READY
The error raised by JitsiMeetJS.init() is already in the state of
features/base/lib-jitsi-meet so it's not a good design to store the same
error in the state of features/unsupported-browser.
2017-02-28 00:18:51 -06:00
Ilya Daynatovich a8877d82b6 Rename style component; Use of status codes instead of flags in conference init 2017-02-28 00:18:51 -06:00
Ilya Daynatovich 8896b0adf3 Fix problem with dialogs 2017-02-28 00:18:50 -06:00
Ilya Daynatovich b409c8cc2f Fix reload regression 2017-02-27 21:50:21 -06:00
Ilya Daynatovich 1268afd3f8 Added unsuported browser and plugin required pages 2017-02-27 21:50:20 -06:00
Lyubo Marinov c1b9b7a623 Prevent undefined JitsiMeetJS 2017-02-27 21:35:34 -06:00
Lyubo Marinov f50a31b4e8 [RN] Simplify the source code 2017-02-23 17:14:04 -06:00
hristoterezov 92d0589a37 ref(overlay): The overlays to use React 2017-02-18 17:03:50 -06:00
Lyubomir Marinov 55a8b44224 Consistent middleware and reducer imports 2017-02-10 11:04:40 -06:00
Lyubomir Marinov b50f858556 [flow] Expand the coverage of flow-monitored files 2017-02-03 16:36:14 -06:00
Lyubomir Marinov 5de1a74429 [flow] Take advantage of flow-typed 2017-02-03 16:36:14 -06:00
Lyubomir Marinov c7c6249ad7 [RN] Fix room name case sensitivity
It turns out that it is not enough to give lib-jitsi-meet the room name
in lower case. BOSH also needs the room name in lower case.
2017-01-28 17:26:09 -06:00
Lyubomir Marinov 5319227a8f Fix jsdocs 2017-01-28 12:11:24 -06:00
Lyubomir Marinov 856732abab Preserve URLs 2017-01-15 17:46:34 -06:00
Lyubomir Marinov 0912dbf130 Remove duplication, simplify, comply with coding style 2017-01-12 10:37:01 -06:00
Ilya Daynatovich c570b80d7b moved app initialization to react app 2017-01-04 17:45:52 +02:00
Lyubomir Marinov 9f93ce86be [RN] Simplify the source code 2016-12-11 22:21:51 -06:00
Lyubomir Marinov daf56455a5 Use Symbol for Redux action types to prevent conflicts 2016-12-11 22:21:51 -06:00
Lyubomir Marinov 02e3f6b3a2 Reduce the complexity of the source code 2016-12-06 15:42:06 -06:00
Lyubomir Marinov 4d335e086b Reduce the number of unnecessary Redux state changes 2016-11-04 13:28:47 -05:00
Lyubomir Marinov d55e0f70d9 Import jitsi/jitsi-meet-react#2f23d98
As an intermediate step on the path to merging jitsi-meet and
jitsi-meet-react, import the whole source code of jitsi-meet-react as it
stands at
2f23d98424
i.e. the lastest master at the time of this import. No modifications are
applied to the imported source code in order to preserve a complete
snapshot of it in the repository of jitsi-meet and, thus, facilitate
comparison later on. Consequently, the source code of jitsi-meet and/or
jitsi-meet-react may not work. For example, jitsi-meet's jshint may be
unable to parse jitsi-meet-react's source code.
2016-10-12 10:31:52 -05:00