Commit Graph

309 Commits

Author SHA1 Message Date
Saúl Ibarra Corretgé fdbd681c8f config: fix opusMaxAverageBitrate option name
Must match the lib-jitsi-meet counterpart.

Fixes: https://github.com/jitsi/jitsi-meet/issues/7384
2020-07-23 15:14:48 +02:00
Saúl Ibarra Corretgé b831bb8350 config: add roomPasswordNumberOfDigits to whitelist 2020-07-22 15:23:38 +02:00
plokta b0188a7184
config: Add option to set preferred audio bitrate. (#7072)
The maxaveragebitrate parameter to be used by Opus can be configured
through the new opusMaxAvgBitrate config option. Values are restricted
by Opus to integers between 6000 to 510000. Works for non-p2p only.

move option to Audio section, add documentation

Co-authored-by: plokta <dev@plokta.eu>
2020-07-11 10:33:49 +02:00
Saúl Ibarra Corretgé b91d6b97a9 deps: jitsi/js-utils@1.0.0 2020-07-10 10:38:49 +02:00
Saúl Ibarra Corretgé 7d513738d2 rn,flags: add ability to override resolution using a flag
Also, use the configured resolution to set it as the max received frame size.
2020-07-09 08:40:56 +02:00
Tudor-Ovidiu Avram d5832f226d fix(dialout) whitelist dialout flag 2020-07-07 11:00:49 +02:00
Jaya Allamsetty 07cad2a98f cleanup: Remove obsolete code related to SS extension
- Remove external install dialogs and fix related screensharing error handling.
- Remove obsolete options from config.js and from configWhitelist.js
2020-06-20 08:49:19 -04:00
Joey Marshment-Howell ec6ed6e8ec
config: whitelist option to hide chrome extension banner
saghul: torture tests also need it.
2020-06-19 09:15:10 +02:00
Saúl Ibarra Corretgé a49f04f25b config: document enableInsecureRoomNameWarning and whitelist it 2020-06-17 20:35:57 +02:00
bgrozev 5867eaf560
config: remove obsolete options 2020-06-17 08:39:31 +02:00
Boris Grozev 0c09ded76b feat: Add and whitelist the useTurnUdp config option. 2020-06-16 16:59:21 -05:00
Saúl Ibarra Corretgé e5cffc71c4 config: cleanup no longer used interface_config options 2020-06-16 14:59:04 +02:00
Adam Wan e3d66db3d7
config: add ability to hide the "invite more" header button 2020-06-16 13:07:37 +02:00
Saúl Ibarra Corretgé 6e679f952f redux: refactor loading of middlewares and reducers
Up until now we relied on implicit loading of middlewares and reducers, through
having imports in each feature's index.js.

This leads to many complex import cycles which result in (sometimes) hard to fix
bugs in addition to (often) breaking mobile because a web-only feature gets
imported on mobile too, thanks to the implicit loading.

This PR changes that to make the process explicit. Both middlewares and reducers
are imported in a single place, the app entrypoint. They have been divided into
3 categories: any, web and native, which represent each of the platforms
  respectively.

Ideally no feature should have an index.js exporting actions, action types and
components, but that's a larger ordeal, so this is just the first step in
getting there. In order to both set example and avoid large cycles the app
feature has been refactored to not have an idex.js itself.
2020-06-16 11:24:15 +02:00
Emil Ivov 6aed9bc0c8
interface_config: enforce logo by default 2020-06-12 17:38:51 +02:00
Vlad Piersec 8758c222c6 feat(branding): Add ability to customize logo & background 2020-06-10 14:58:27 +02:00
Bettenbuk Zoltan 0598e7369b ref: eslint-config-jitsi@1.0.3 2020-05-20 17:14:29 +02:00
Vlad Piersec b2895b7095 feat(prejoin_page): Add ability for guest to join audio by phone 2020-05-18 14:47:44 +02:00
Hristo Terezov d388a7bd3c feat(reload): Preserve local track mute state. 2020-05-07 18:18:21 -05:00
Paweł Domas f646bc7a7a
ref: disable ICE restart by default (#6594)
* ref: disable ICE restart by default

The reason for that it's currently causing issues with signaling when
Octo is enabled. Also when we do an "ICE restart"(which is not a real
ICE restart), the client maintains the TCC sequence number counter, but
the bridge resets it. The bridge sends media packets with TCC sequence
numbers starting from 0.

The 'enableIceRestart' config option can be used to force it, but it's
not recommended.
2020-05-07 06:59:37 -05:00
Vlad Piersec a45cbf41ef feat(prejoin_page): Add prejoin page 2020-05-04 12:49:35 +02:00
Hristo Terezov 1ffd75c0a6 fix(localStorage): exception when disabled. 2020-05-01 14:48:08 -05:00
Saúl Ibarra Corretgé 9962a2ea61 config: whitelist disableSimulcast 2020-04-11 11:37:02 +02:00
Bettenbuk Zoltan 39d789a088 feat: add url params: config.disableInviteFunctions, config.doNotStoreRoom and userInfo.displayName 2020-04-09 17:14:16 +02:00
Horatiu Muresan 7f1eb83dbd feat(notifications): Manage audio notifications 2020-04-01 22:40:07 +02:00
Hristo Terezov 3a871cbed8 feat(remote-menu):option for disable mute and kick 2020-03-31 10:06:30 -05:00
Saúl Ibarra Corretgé c1fb276937 config: whitelist disableThirdPartyRequests 2020-03-29 08:42:25 +02:00
bgrozev 16c09c9645
Upadte ljm (configurable pc stats interval), whitelist config options. (#5106) 2020-03-04 15:11:27 -06:00
Bettenbuk Zoltan bbca0fc357 allow setting the feedback percentage 2020-02-12 10:59:54 +01:00
Jaya Allamsetty 9855fac805 fix(screenshot-capture): Move the flag for enabling/disabling the feature to config.js
This will let us enable/disable the feature based on environment/deployment
2020-02-05 16:47:21 -05:00
Leonard Kim 5cfae2c419 fix(config): make SHOW_CHROME_EXTENSION_BANNER overridable 2020-01-27 21:26:38 -08:00
Andrei Gavrilescu ee525ae569 Whitelist audio detection related configs 2020-01-23 15:15:55 +01:00
Vlad Piersec ad68a87dba Add config options for presence & join/leave message visibility 2020-01-22 11:08:31 +01:00
Saúl Ibarra Corretgé 792f506425 ios: drop support for iOS 10 2019-11-22 10:46:02 +01:00
Boris Grozev 72435dee56 Order fields alphabetically. 2019-11-14 17:49:06 -06:00
Boris Grozev 42f2eff02a Whitelists the "stereo" flag. 2019-11-14 17:49:06 -06:00
Bettenbuk Zoltan 53f01a39c9 feat: private message interface config flag 2019-11-12 15:48:53 +01:00
Дамян Минков 50f4796144
Adds an option to set email through iframe API init and to stats. (#4842)
* Adds an option to set email through iframe API init and to stats.

* Simplifies configuring email and displayName in stats.

Removes enableStatsID as not needed as when off we are sending as callstats id xmpp resource which is unique per call and id must be something that sticks between calls (callstatsUsername).

* Adds email and displayName in stats config for mobile.

* chore(deps): Updates lib-jitsi-meet to latest dd31f0a.

* Removes enableStatsID from config and whitelist.
2019-11-12 13:37:54 +00:00
Hristo Terezov 5da4e43e50 fix(settings): respect configWhitelist 2019-11-05 02:13:54 -08:00
Hristo Terezov eae6f7760f fix(configWhitelist): add startWithAudioMuted. 2019-11-05 02:13:54 -08:00
Saúl Ibarra Corretgé 36654cb808 rn: disable H.264 on select devices even when not in P2P
iOS 10 crashes, so don't use it there, in any case.
2019-10-31 16:41:08 +01:00
Saúl Ibarra Corretgé 6d16e087d9 rn: add a new advanced settings section
Currently only 2 options are implemented, mainly aimed at helping troubleshoot
audio related problems:

- Disable native call integration (it disables CallKit / ConnectionService)
- Disable P2P
2019-10-31 16:41:08 +01:00
Saúl Ibarra Corretgé d85b869934 rn: skip loading configured scriptUrls
None of them work on mobile.
2019-10-14 12:20:58 +02:00
Saúl Ibarra Corretgé 1feff9709c config: drop configLocation and getroomnode options
They never worked on mobile and pose an impediment for makinf config.js more
future proof. Specially if we want to move to a non-executable form of
configuration.
2019-10-14 12:20:58 +02:00
Leonard Kim 1010f53a84 fix(config): add whitelisting for interface config
For now all keys are whitelisted.
2019-10-11 09:38:56 -07:00
Bettenbuk Zoltan 13d78d6b49 fix: utf-8 room name case sensitivity 2019-10-08 10:35:19 +02:00
Saúl Ibarra Corretgé afccf6f06d rn: disable H.264 on iOS 10 devices
It crashes like hell. See:
https://bugs.chromium.org/p/webrtc/issues/detail?id=11002
2019-10-02 14:10:37 +02:00
Saúl Ibarra Corretgé 3cc181a2e5 rn,config: create a fake config if we cannot load one on the welcome page
We try to load the configuration with every room change, even when there is no
room. There is a bad (corner) case: when we have no config cached (first boot or
wiped app data). In such case the user is trapped in an infinite loop because we
require the config to show the welcome page, oh well.

Pretend we have a configuration by creating the most minimal one to at least get
to the welcome page.
2019-09-13 19:07:26 +02:00
Saúl Ibarra Corretgé 5a934c071a logging: use individual, names loggers
React Native doesn't define __filename nor __dirname so do it artisanally. In
addition, this helps with centralizing the configuration passed to loggers.
2019-08-23 10:57:38 +02:00
Saúl Ibarra Corretgé 35f934e197 config: remove old backwards compatibility shim
It was added for
3ea2f00578
over 2 years ago. That's long enough!
2019-07-25 11:45:16 +02:00
Leonard Kim 0097360396 feat(deep-linking): allow disabling through override 2019-07-19 14:48:46 -07:00
Leonard Kim 57b9954d9c fix(api): support params with value of undefined 2019-07-10 11:09:11 -07:00
damencho faee1c139e Adds a config param startSilent to disable audio output. 2019-06-05 18:01:18 +01:00
Saúl Ibarra Corretgé 579d291bca config: add ability to pass the subject as a URL parameter 2019-05-29 14:48:02 +02:00
Hristo Terezov 72a1def571 feat(config): whitelist config.analytics 2019-05-24 13:42:12 -07:00
damencho 0dad99c3b7 Enables local video flip menu by default. 2019-05-24 23:09:24 +03:00
Saúl Ibarra Corretgé 2d45709a6a android: add the ability to make a "libre" build
A libre build will exclude the following:

- Analytics modules
- Google Play services GMS
- Crashlytics
- Firebase
2019-05-02 09:26:20 +02:00
Bettenbuk Zoltan 8bb56be317 [RN] Add conference connecting overlay 2019-04-10 15:47:36 +02:00
Saúl Ibarra Corretgé c025c7e132 flow: tame the beast
🔥🔥🔥
2019-03-21 14:47:55 +01:00
Saúl Ibarra Corretgé 0e92e73789 chore: use strings as action types
Using anything non-serializable for action types is discouraged:
https://redux.js.org/faq/actions#actions

In fact, this is the Flow definition for dispatching actions:

declare export type DispatchAPI<A> = (action: A) => A;
declare export type Dispatch<A: { type: $Subtype<string> }> = DispatchAPI<A>;

Note how the `type` field is defined as a subtype of string, which Symbol isn’t.
2019-03-21 14:47:55 +01:00
Leonard Kim 03f8d8b51a fix(external_api): detect and skip params for hash routers 2019-02-22 10:34:49 -06:00
virtuacoplenny a1383bf730
fix(local-recording): allow config override to enable (#3615)
* fix(local-recording): allow config override to enable

Config overrides are not set until some time after
APP_WILL_MOUNT has completed and not in the same execution
context as when APP_WILL_MOUNT is called. So instead
choose recording controller initialization at a later time.
The time chosen is after conference join because the
controller needs the conference instance to work.

* remove redundant conditional check
2019-01-29 08:22:50 -08:00
Leonard Kim 69dfa30142 feat(screenshare): use camera as a screenshare source
This feature is intended for spot. Spot can have an
HDMI -> usb adapter hooked up to it. In that case,
attempting to screenshare should use that adapter
as a screensharing source. Jitsi-Meet should pass
a configured screenshare source into lib-jitsi-meet
so it can be used as a source.
2019-01-11 09:52:53 -08:00
Hristo Terezov 5ad98dd058 ref(config): Create 'analytics' section. 2019-01-07 14:32:31 +00:00
bgrozev 2ee1bf9351 feat: Displays the E2E RTT in the connection stats table. (#3344)
* feat: Displays the E2E RTT in the connection stats table.

* fix: Whitelists the ping config properties.

* ref: Addresses feedback.

* npm: Updates lib-jitsi-meet to e097a1189ed99838605d90b959e129155bc0e50a.

* ref: Moves the e2ertt and region to the existing stats object.
2018-08-07 11:31:51 -07:00
virtuacoplenny 918fb1dfc6
ref(utils): use web reportError helper (#3283) 2018-07-21 08:16:32 -07:00
Saúl Ibarra Corretgé dc246960df feat(App): refactor App and split it into BaseApp and App
BaseApp does all the heavy-lifting related to creating the redux store,
navigation, and so on.

App currently handles URL props and actually triggering navigation based on
them.
2018-07-12 11:28:19 -05:00
Lyubo Marinov c203215c54 core: refactor routing (continued) 2018-07-11 22:58:41 -05:00
Дамян Минков ac834326e7
Token based features (#3075)
* Adds an option to disable features based on token data.

Reverts changes from b84e910086, removes disableDesktopSharing option and an interface_config option.

* Disable recording button based on token features data.

Hide recording if local participant isGuest and roles based on token.
When enableUserRolesBasedOnToken is enabled we were not hiding the record button for guests.

* Adds filtering of jibri iqs and rayo based on features.

Moves feature checking in separate utility function.
Renames utility method.

* Adds a footer text when outbound-call is not feature enabled.

* Fixes comments.
2018-06-15 13:10:22 -05:00
bbaldino 8df54d2cb3 document layer suspension config and add to whitelist (#3123) 2018-06-12 09:06:10 -07:00
Lyubo Marinov a82ed4653e [RN] Allow to override callHandle for CallKit (coding style) 2018-06-08 15:18:11 -05:00
Daniel Ornelas 81be082fe7 [RN] Allow to override callHandle for CallKit 2018-06-08 15:18:11 -05:00
virtuacoplenny 84f303dd3c ref(toolbar): show recording features based on explicit configs (#3080)
* ref(toolbar): show recording features based on explicit configs

* squash: bring back button configs, use final config names

* squash: update interfaceConfig comment, remove unused config whitelist

* squash: change order of button enabled checks to reduce diff

* squash: fileRecording -> fileRecordings
2018-06-05 22:19:28 -07:00
Guus der Kinderen acc41e6d0b feat(toolbar): add 'always-visibile' config option
The visibility of the toolbar can be toggled by interacting with the main screen.
This change allows the toolbar to be configured to be 'always visible'. This voids
the 'toggle' functionality.
2018-05-30 16:12:05 +02:00
Daniel Ornelas 72487fa7c7 [iOS] Custom CallKit display name
Add ability to provide a display name in the configOverwrite object that
when available it will be used to customize the name of the meeting in
callkit screen and recent call list.

Co-authored-by: Daniel Ornelas <daniel.ob64@gmail.com>
Co-authored-by: Lyubo Marinov <lmarinov@atlassian.com>
2018-05-28 18:53:48 -05:00
hristoterezov 3dbb663922 feat(call-flows): Add config property for enabling call flows. (#3031) 2018-05-23 14:52:44 -07:00
Lyubo Marinov 592305df74 [RN] Fix processing outdated loadConfig requests (continued)
Co-authored-by: Lyubo Marinov <lmarinov@atlassian.com>
Co-authored-by: Paweł Domas <pawel.domas@jitsi.org>
2018-05-23 16:48:23 -05:00
Saúl Ibarra Corretgé 357b206831 [RN] Fix processing outdated loadConfig requests
This fix is based on storing the location URL object we are loading the
configuration for in the redux store. Once the config has been loaded (or it has
failed, for that matter!) we'll check if the current "config URL" is the same we
set, and discard the old one if they don't match.
2018-05-23 16:48:23 -05:00
Lyubo Marinov 75fe3e3b9d [RN] If base/config knows a domain, then the app knows it
Knowledge is power, man!

The config.js cache predates the feature base/known-domains.
Technically, it's also able to recall more domains that the feature
recent-list can (because the latter limits its entries).
2018-05-14 16:33:02 -05:00
Daniel Ornelas e5309a6482 [iOS] Proxy CallKit API to be a feature of the SDK
With this the RN component and the consumer app can share same CallKit
provider, configuration, and enable to be part of multiple listeners of
the CallKit flow events. The main driver of this is to enable the
consumer app to be able to report an incoming call to the OS before
loading the JitsiMeetView. Once the user answers the call, the app can
instantiate a JitsiMeetView, pass the CallKit call UUIID, and the Jitsi
Meet components will handle the connection and report back to CallKit
that the  call has been established.
2018-05-03 18:04:59 -05:00
George Politis 4e36127dc7 config: Whitelists enable{Remb,Tcc} and minParticipants. 2018-04-24 16:01:23 -05:00
Leonard Kim 5270da4c14 ref(toolbar): remove reference to unused config autoEnableDesktopSharing 2018-04-11 10:35:01 +02:00
virtuacoplenny e5596c3cd5 fix(recording): let the google app for api calls be overridable (#2653) 2018-03-23 10:52:32 -07:00
Paweł Domas 15e1633d86 fix(config): no legacy over non-legacy override (#2644)
Do not take legacy property into account if there's non-legacy value.
2018-03-22 10:57:08 -05:00
paweldomas b5b99301ca fix: synchronize global 'config' var with the reducer's state 2018-03-20 21:07:45 -04:00
paweldomas ef52f09910 ref(config): override config from URL on mobile
Moves the things around to be able to override the config with the URL
params specified in the hash part of the location URI to which the app
is navigating to.
2018-03-20 21:07:45 -04:00
George Politis 1c8b8e031b feat: Whitelists the gatherStats option. (#2561)
* feat: Whitelists the gatherStats option.

* doc: Replaces obsolete disableStats option with gatherStats.
2018-03-05 11:12:39 -06:00
George Politis fd0749000e feat: Whitelists the iceTransportPolicy option. (#2535) 2018-02-28 11:28:47 -08:00
Boris Grozev 5d0ac7653d config: Whitelists the desktopSharingFrameRate config key. 2018-02-26 11:45:42 -06:00
Saúl Ibarra Corretgé c05c8e0f1e [RN] Handle config loading errors
They will be stored in redux and the PageReloadOverlay will be displayed.

Note that this commit also introduces a subtle (and yet important!) change:
the location URL is now always set, regardless of the configuration loading or
not. This is needed in order for the retry logic to pick it up.
2017-12-12 22:59:04 -06:00
Дамян Минков e28b847fb0 Updates config feature and whitelists options that can be overridden. (#2282)
* Removes unused config logic.

* Whitelists config options that can be overridden using the URL.

* Recorder login with credentials, not supported by externalconnect.

Jibri uses xmpp credentials to login, which is not supported by externalconnect, so we want to skip it till that is supported.

* Whitelist only config.js

* Extracts whitelisting in separate function.
2017-12-12 11:16:55 -08:00
Saúl Ibarra Corretgé 3c3b05e3ea Add ability to disable h264 (#2061)
* doc: document disableH264 option

* [RN] Override disableH264 config option

We never want it disabled on mobile.
2017-10-12 15:42:55 -07: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 fce0e4c22c [RN] Report loadConfigError with locationURL to the SDK consumers 2017-09-06 20:34:46 -05:00
Saúl Ibarra Corretgé 284e4e543e [RN] Detect errors when loading the configuration
The error is stored in the redux store in base/config so other components can
consult it. It is also broadcasted as a new event in the external API for the
SDK.
2017-09-06 16:31:14 -05:00
Saúl Ibarra Corretgé 18d1572dab [RN] Load config.js only when the room is known
This patch loads the config later than we used to, that is, only once we
know the room the user is about to join.

Due to architectural limitations in lib-jitsi-meet, it needs to be
initialized with a configuration in order to properly function. This is
unfortunate because we need to create a video track in the welcome page,
but don't know the room (hence no config) yet. In order to circumvent
this problem an empty configuration is used, which is later swapped with
the appropriate one, once loaded.

Some interesting side-effects of this change are a perceived speed
increase when the app starts or a conference is hangup. They are both
due to the fact that no config needs to be fetched from a remote server
in those cases.
2017-09-02 13:26:07 -05:00
Saúl Ibarra Corretgé 8eebfcad72 [RN] Add support for callstats on mobile
The global.performance.now polyfill is removed since it's polyfilled by
react-native-callstats.
2017-08-29 18:47:35 -05:00
Leonard Kim 5358f022ff fix(config): override config values instead of merging
Iterate over objects and copy over primitives and arrays
instead of using _.merge, as merge will not replace a config
entry completely. For arrays in a target object, the arrays
will have its indices replaced. This means if a source array
is empty, the target array will be left alone. Similarly,
if the target array is longer than a source array, there
will be indices not touched in the target array.
2017-08-21 07:07:18 -05:00
Lyubo Marinov e542af28a2 [RN] Converge with Web's ExternalAPI a bit
Web's ExternalAPI accepts an object with properties as one of its
constructor arguments and from which it generated a URL. Mobile's
JitsiMeetView.loadURLObject is supposed to accept pretty much the same
object.
2017-07-27 16:48:38 -05:00
Saúl Ibarra Corretgé 1d90826098 [RN] Use a more resilient way for testing if we are on React Native
navigator.product is read-only, so we don't run into the risk of it being
changed.
2017-07-19 16:40:06 -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
Saúl Ibarra Corretgé 4e5bc172c9 feat(config): allow overriding nested config objects
This makes it possible for the following URL params to work:

config.p2p.enabled=true&config.p2p.preferH264=true
2017-06-28 17:29:04 +02:00
Lyubo Marinov 320e67baa1 Fix the initialization of the (external) API
The counterpart of the external API in the Jitsi Meet Web app uses the
search URL param jwt to heuristically detect that the Web app is very
likely embedded (as an iframe) and, consequently, needs to forcefully
enable itself. It was looking at whether there was a JSON Web Token
(JWT) but that logic got broken when the JWT support was rewritten
because the check started happening before the search URL param jwt was
parsed.
2017-05-30 09:38:18 -05:00
Saúl Ibarra Corretgé 5304660e14 [RN] Polyfill Symbol 2017-05-26 16:37:22 -05:00
Lyubo Marinov 3c31a60b32 Fix TypeError: Cannot read property 'isGuest' of undefined 2017-05-18 11:53:45 -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
Ilya Daynatovich 96b1f0ca74 Create config util 2017-05-09 00:21:13 -05:00
Lyubo Marinov 92e765ea21 Introduce features/base/config
The config object defined by lib-jitsi-meet is not used by
lib-jitsi-meet only, jitsi-meet respects its values as well.
Moreover, jitsi-meet defined classes and/or functions which manipulate
that config object. Consequently, it makes sense to move the config
object and the associated classes and functions in a dedicated feature.
2017-04-23 15:18:41 -05:00