Compare commits

...

420 Commits
6478 ... 6830

Author SHA1 Message Date
Robert Pintilii
643cc2db81 ref(TS) Convert some features to TS (#12591) 2022-11-23 11:12:26 +02:00
Calinteodor
6bce0bc917 fix: Native styles fixes (#12606)
* feat(conference/native): update indicator styles

* feat(prejoin/native): removed unnecessary styles

* feat(mobile/navigation): fixed header buttons style

* feat(mobile/navigation): fixed linter
2022-11-22 21:50:16 +02:00
Calinteodor
93566e313e feat(native): Last mobile release UI fixes (#12603)
* feat(base/modal): order props alphabetically

* feat(base/ui): added ripple color for tertiary button

* feat(prejoin): removed autoFocus from input and adjusted content

* feat(conference): adjusted RaisedHandCountLabel and added extra code spaces

* feat(prejoin): fixed content to fit tablets

* feat(conference): moved header button styles to navigation styles

* feat(mobile/navigation): updated header navigation button styles

* feat(prejoin): updated elements width, removed left inset
2022-11-22 18:13:36 +02:00
Gabriel Borlea
a7c653bc30 chore(deps) lib-jitsi-meet@latest (#12604)
https://github.com/jitsi/lib-jitsi-meet/compare/v1538.0.0+871968af...v1539.0.0+eb4873d2
2022-11-22 16:19:34 +02:00
Gabriel Borlea
4b969cf4ab feat(face-landmarks): add face landmarks timeline (#12561)
* feat(face-landmarks): add face landmarks timeline

fixes after rebase

* fixes after rebase compiling and linting

* fix: change keyboard shorcut for participants stats

* fix: label for emotions switch

* fix: linting issues

* code review changes

* fix linting issues

* code review changes 2

* fix typo
2022-11-22 15:56:37 +02:00
Saúl Ibarra Corretgé
3081b41d0d fix(android) temporarily disable P2P
For some reason one of the users gets a black screen when doing Android
to Android calls. If iOS is involved things Just Work (TM).

It seems to be related to the use of H.264, but since it works with iOS
there must be something else to it.
2022-11-22 14:00:47 +01:00
Saúl Ibarra Corretgé
30e5d213cb fix(android) sort codecs in the same order as iOS 2022-11-22 14:00:47 +01:00
Saúl Ibarra Corretgé
752da71387 feat(android) set compile and target SDKs to 32 2022-11-22 11:37:08 +01:00
Saúl Ibarra Corretgé
645609974a deps(android) update native dependencies 2022-11-22 11:37:08 +01:00
Saúl Ibarra Corretgé
4f2f6df2bb chore(deps) update xmldom to version 0.79 2022-11-22 11:37:08 +01:00
Jaya Allamsetty
e93c480e7c fix(conference) Remove the check for multi-stream mode for web client. 2022-11-21 14:40:25 -05:00
Calinteodor
a795e0797a feat(native): New mobile release UI fixes (#12592) 2022-11-21 16:07:27 +02:00
Andrei Gavrilescu
94ec2c720d feat(rtcstats): report pc connection failure (#12560)
* report pc connection failure

* typos

* code review / update rtcstats

* check for undefined APP
2022-11-21 15:32:18 +02:00
Abdullah Kerem Öğe
b11e14ea34 feat(deps,rn) update React Native to version 0.68.5 2022-11-21 10:37:48 +01:00
Robert Pintilii
f5f55c4f23 fix(dialog) Improvements (#12590)
Remove focus outline for the close icon
Increase max height
2022-11-21 11:09:03 +02:00
Duduman Bogdan Vlad
243a330318 feat(thumbnail,filmstrip) show blackend thumbnail for participant on stage 2022-11-21 10:03:03 +01:00
_norbert
98bc87ea18 lang: fixing typo in a hungarian lang file (#12559)
* fixing typo in a hungarian lang file

* revert end of line

Co-authored-by: bartuczns <bartucz.norbertsandor@nisz.hu>
2022-11-19 15:35:43 -06:00
Saúl Ibarra Corretgé
f7926c9cfb fixup! 2022-11-18 19:56:36 +01:00
Saúl Ibarra Corretgé
533501deb6 fixup! 2022-11-18 19:56:36 +01:00
Saúl Ibarra Corretgé
f38c9f5450 feat(notification,external-api) notify bridge channel failures 2022-11-18 19:56:36 +01:00
Jaya Allamsetty
55b80c948f chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1535.0.0+e6263e7c...v1538.0.0+871968af
2022-11-18 13:38:37 -05:00
Calinteodor
971fe0481f feat(chat/polls/native) Update chat and polls UI (#12550)
* feat(chat/polls/native): update ui
2022-11-18 14:46:54 +02:00
Calin-Teodor
1259e54d46 fix(conference/native): apply width and height only on the connection indicator 2022-11-18 13:22:55 +01:00
Calin-Teodor
0cb95f1dd6 fix(conference/native): video quality label ui updates 2022-11-18 13:22:55 +01:00
Calin-Teodor
5cde9a138b fix(conference/native): fixed title bar indicators style 2022-11-18 13:22:55 +01:00
robertpin
867c488e10 fix(dialog) Update max height 2022-11-18 13:22:43 +01:00
Calin-Teodor
7d9c13a618 feat(prejoin): updated styles 2022-11-18 11:02:05 +02:00
Hristo Terezov
48ed3b7dc6 fix(dialog): cancel hide timeout on openDialog
Since we unmount the dialog after a timeout because of an animation we
need to cancel the timeout in case we need to render new dialog.
Otherwise the actual hiding can be executed after we render the new
dialog.
2022-11-17 17:00:02 -06:00
Hristo Terezov
04abfe1a3b feat(dialog): add disableAutoHideOnSubmit prop
Needed for shared video dialog.
2022-11-17 17:00:02 -06:00
Alex Bumbu
d45decc393 Update JitsiMeet.h (#12574) 2022-11-17 16:31:37 +02:00
Saúl Ibarra Corretgé
88f8f48465 fix(participants) don't treat Jigasi like a fake participant
We only really want to know if a participant is Jigasi for displaying a
specific icon, for all other intents and purposes it's a normal
participant.
2022-11-17 15:13:54 +01:00
Saúl Ibarra Corretgé
8127ea2479 feat(redux) throw exception in case invalid listeners are registered
This allows catching mistakes early.
2022-11-17 11:07:57 +01:00
Saúl Ibarra Corretgé
b22915c169 fix(rn,filmstrip) fix invalid selector registered as state listener 2022-11-17 11:07:57 +01:00
Saúl Ibarra Corretgé
14fcd153e5 fix(rn,connection-indicator) align rendering with web
Use the same way for calculating que perceived quality and display it.
2022-11-17 11:07:57 +01:00
Robert Pintilii
48efe36cdf fix(dial-in) Fix warning (#12571)
Only show warning if the feature is enabled
2022-11-16 12:14:58 +02:00
Saúl Ibarra Corretgé
0c373e105b ref(StageFilmstrip) mark as experimental
THere are a bunch of unhandled corner cases involving virtual
screen-sharing participants.
2022-11-15 10:34:58 -06:00
Shawn
e57c7f92a8 refactor(end-conference): distinguish between component vs host module logic 2022-11-15 10:34:40 -06:00
Jaya Allamsetty
70fa44f85f chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1533.0.0+7b257686...v1535.0.0+e6263e7c
2022-11-15 11:08:37 -05:00
rinenweb
bcc5beb73d fix(lang) fixup main-el.json
Missing "{" in line 74 and name is not displayed at all when {name} is used in line 520.
2022-11-15 09:41:43 +01:00
Joseph Garrone
4ef4e45ee4 fix(styles) Remove Theme type annotation (#12544)
* tss-react doesn't need a type anotation for the Theme

* Update tss-react to 4.4.4
2022-11-15 09:50:22 +02:00
TTG
c9ff0bb75f lang: Remove Indonesian & Norwegian translations (#12554)
* Remove Indonesian translation

* Remove Norwegian translation
2022-11-13 21:38:42 -06:00
chipechop
282817db28 lang: Update main-it.json (#12541)
refining
2022-11-11 16:37:54 -06:00
Shawn
93ab7725e7 feat(toolbox) notify click for hangup-menu and end-meeting menu button 2022-11-11 16:06:53 -06:00
Calin-Teodor
53ccb97d34 fix(welcome/native): removed unused constant 2022-11-11 18:11:41 +01:00
Calin-Teodor
6346d99d0e fix(welcome/native): placeholder fix 2022-11-11 18:11:41 +01:00
Saúl Ibarra Corretgé
79c4cabbad feat(rn) make status bar visible at all times 2022-11-11 17:25:28 +01:00
Robert Pintilii
7a9f51b01b ref(TS) Convert some features to TS (#12546) 2022-11-11 10:20:33 +02:00
Robert Pintilii
a884a6b232 fix(ui) Fix new icons issues (#12545) 2022-11-11 09:58:55 +02:00
Jaya Allamsetty
b00a17c1c3 fix(connection-stats) Do not display max enabled resolution on SS tile. 2022-11-10 17:00:34 -05:00
bgrozev
99955df5c8 Cleanup sounds (switch to mp3, encode at lower bitrate).' (#12507)
* Reencode mp3 sounds at lower bitrate, mono.
* Encode wav sounds as mp3.
* Remove unused sound file.
* Add opus encoded sounds.
* Add a script to encode sounds.
2022-11-10 10:06:40 -06:00
Calin-Teodor
c0f0803f01 feat(base/modal): addBottomPadding default prop for extra padding on JitsiScreen 2022-11-10 17:22:36 +02:00
dependabot[bot]
b2c864cbba chore(deps): bump loader-utils from 1.4.0 to 1.4.1
Bumps [loader-utils](https://github.com/webpack/loader-utils) from 1.4.0 to 1.4.1.
- [Release notes](https://github.com/webpack/loader-utils/releases)
- [Changelog](https://github.com/webpack/loader-utils/blob/v1.4.1/CHANGELOG.md)
- [Commits](https://github.com/webpack/loader-utils/compare/v1.4.0...v1.4.1)

---
updated-dependencies:
- dependency-name: loader-utils
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-10 11:30:02 +01:00
Saúl Ibarra Corretgé
31957d4085 chore(fonts) drop no longer used font 2022-11-10 11:16:22 +01:00
Saúl Ibarra Corretgé
4f83fc2a6d fix(ios) fix uploading symbols to Crashlytics
Since we no longer use bitcode we need to upload them when we build the
app.
2022-11-10 11:16:06 +01:00
Robert Pintilii
4bd27730ce ref(TS) Convert some features to TS (#12523) 2022-11-10 10:45:56 +02:00
Robert Pintilii
817d7f0c0d fix(thumbnail) Fix top indicators sizes (#12539)
Fix sizes after icon update
2022-11-10 10:22:57 +02:00
Robert Pintilii
19a9b17425 fix(recording) Fix local recording (#12531)
Starting chrome 107, the recorder does not record any data if the audio stream has no tracks
To fix this we create a track for the local user (muted track)
2022-11-10 10:22:42 +02:00
Robert Pintilii
cc33930259 fix(thumbnail) Open native video context menu (#12532) 2022-11-10 09:20:42 +02:00
Jaya Allamsetty
6223e16ca5 ref(config) Cleanup unused flags related to multi-stream mode. 2022-11-09 15:23:30 -05:00
José Luís Andrade
99385ae3d7 fix(config) add "whiteboard" to toolbarButtons 2022-11-09 17:37:51 +01:00
Shawn
17cace070e feat(external-api) Add endConference command 2022-11-09 16:00:17 +01:00
Calin-Teodor
cdb2436b73 feat(base/ui): updated BUTTON_TYPES imports based upon native or web 2022-11-09 16:35:08 +02:00
Calin-Teodor
10db5ecf1f feat(welcome/native): improved ui 2022-11-09 14:52:26 +02:00
Robert Pintilii
cbb8b5f620 fix(dialog) Fix initial focus (#12509)
Don't focus on the close button if there's another focusable element
2022-11-09 12:07:37 +02:00
Jaya Allamsetty
f3e4c57036 Remove legacy signaling and legacy SS mode. (#12499)
* fix(connection-status): remove unused participant connectionStatus.
Always use trackStreamingStatus now that legacy endpoint based signaling has been removed.

* remove the check for source-name signaling.
Default to source-name signaling always.

* Remove the check for multi-stream mode.
Make that the default mode and remove the support for legacy SS mode.

* Remove presenter mode.

* update latest@lib-jitsi-meet
2022-11-08 14:15:49 -05:00
Calinteodor
1731d5188d feat(prejoin/native): updated UI (#12528) 2022-11-08 19:14:29 +02:00
Calinteodor
2c7dc5e40e feat(base/ui/native): Use new Input component (#12526)
feat(base/ui/native): replaced react native TextInput component with our native Input component
2022-11-08 17:46:46 +02:00
Calinteodor
74cd486232 feat(chat/native): moved ChatAndPollsNavigator to mobile/navigation (#12527)
* feat(chat/native): moved ChatAndPollsNavigator to mobile/navigation
2022-11-08 17:43:02 +02:00
Alexey Matveev
30f3bac217 feat(ios) add ability to go PiP while screen sharing 2022-11-08 16:25:36 +01:00
Vadim A. Misbakh-Soloviov
84fc4dd63f (feat) OpenResty Support
Signed-off-by: Vadim A. Misbakh-Soloviov <git@mva.name>
2022-11-08 08:53:50 -06:00
Robert Pintilii
936a1a6b0e ref(design) Update icons (#12489)
Remove unused icons
Remove fill none from icons
Rename some icons
2022-11-08 12:24:32 +02:00
Gabriel Borlea
f4e8f860b1 feat(rtc-stats): send camera off and on events (#12522)
* feat(rtc-stats): send camera off and on events

* code review
2022-11-08 11:41:53 +02:00
Nils Ohlmeier
ee544d25f8 chore(deps) @jitsi/rtcstats 9.4.1 (#12512)
* chore(deps) @jitsi/rtcstats 9.4.1

* squash: Fix missing package-lock change.

Co-authored-by: damencho <damencho@jitsi.org>
2022-11-07 09:59:35 -06:00
Alexey Matveev
c32866f6a2 flag to hide settings button in overflow menu (#12515)
* flag to hide settings button in overflow menu
2022-11-07 14:00:46 +02:00
Alexey Matveev
215c2825de fix(rn) fix hangup all action
Co-authored-by: Alexey Matveev <malex@1forma.ru>
2022-11-07 10:30:08 +01:00
Christoph Settgast
edb614783b fix(lang) update German translation
Signed-off-by: Christoph Settgast <csett86@web.de>
2022-11-05 14:18:16 -05:00
Alexey Matveev
0e19bc9cd6 ru-localization minors 2022-11-04 13:46:41 -05:00
Johan Bernhardsson
caff0c64af lang: Update Swedish 100% translation (#12511)
* first Swedish update

* 100% swedish

* Update main-sv.json

* Updated Swedish translation

* Updated Swedish translation dropped product name

Co-authored-by: Johan Bernhardsson <johan@kafait.se>
2022-11-04 13:45:15 -05:00
Petr Ferschmann
fcb1845e2a lang: Updated Czech Translation (#12388)
* Translation to czech language

* Updated czech translation

* Updated czech translation

Co-authored-by: Дамян Минков <damencho@jitsi.org>
2022-11-03 16:01:31 -05:00
Suleyman BİLGİN
977295bd87 lang: Update Turkish translation (#12348)
* Turkish translations that were missing were added, and certain terms were changed to sound pleasant.

* squash: new line

Co-authored-by: Suleyman Bilgin <suleymanbilgin@thy.com>
Co-authored-by: Дамян Минков <damencho@jitsi.org>
2022-11-03 16:01:12 -05:00
apetrus20
ed139f53ca fix(polls) refactor storage of poll data 2022-11-03 16:08:20 +01:00
Alexey Matveev
5692c3cb4d fix(lang) update Russian translation 2022-11-03 14:24:58 +01:00
TTG
ed62409ad5 fix(lang) update translations 2022-11-03 10:53:25 +01:00
Robert Pintilii
b52b4c2a78 ref(TS ) Improve TS (#12491)
Remove global variables from files
Change type to interface
2022-11-03 10:35:51 +02:00
Duduman Bogdan Vlad
36bef94c3c Remove logic show toolbar on new message received (#12488) 2022-11-03 09:18:21 +02:00
Hristo Terezov
a995b33753 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1528.0.0+23644901...v1530.0.0+f2af389e
2022-11-03 07:28:05 +01:00
Nils Ohlmeier
bfb15a2523 chore(deps) @jitsi/rtcstats 9.4.0 2022-11-03 07:26:14 +01:00
TTG
1d59c8122d fix(lang) update Chinese translations (#12344)
* Update Simplified Chinese translation

* Update Traditional Chinese translation

* Update translations

* Updated translation for #12391

* Updated translation for 12371
2022-11-02 16:41:26 -05:00
Hristo Terezov
31766c891b Fix get rooms info (#12492)
* Include local participant; filter out hidden participants for getRoomsInfo

* Review fixes: include ts changes and types

Co-authored-by: Bogdan Duduman <bogdan.duduman@8x8.com>
2022-11-02 12:06:45 -05:00
Robert Pintilii
7a3b8d6ac4 fix(recording-dialog) Fix broken dialog content (#12490) 2022-11-02 12:49:30 +02:00
Saúl Ibarra Corretgé
edf5e1c094 fix(ts) fix mysterious linting errors
We have a rule that should apply here, but somehow it doesn't...
2022-11-02 09:03:14 +01:00
Saúl Ibarra Corretgé
7cd39b7983 feat(ts) make tsc happy 2022-11-02 09:03:14 +01:00
Hristo Terezov
49bcf5c179 fix(iframeAPI): pinParticipant & setLargeVideo
Add the ability to specify video type when in multistream mode.
2022-11-01 18:33:09 -05:00
Filip Rejmus
2b3989e5e6 ref(features/base) remove no sound for id warn 2022-11-01 19:05:22 +01:00
Saúl Ibarra Corretgé
9b1e662a93 fix(connection-indicator) use SSRCs to match tiles to stats 2022-11-01 16:21:29 +01:00
Saúl Ibarra Corretgé
73160de3b7 fix(connection-stats) make local / remote layout consistent
Move region information and server count to the "More" section on both
types of tiles.
2022-11-01 16:21:29 +01:00
Saúl Ibarra Corretgé
f5fc524030 fix(connection-stats) fix rendering codec information
Ref: https://github.com/jitsi/lib-jitsi-meet/pull/2143
2022-11-01 16:21:29 +01:00
Saúl Ibarra Corretgé
6e3b3879cc chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1522.0.0+28436e57...v1528.0.0+23644901
2022-11-01 16:21:07 +01:00
Filip Rejmus
c9f9708166 ref(remove ReactInstanceHolder from AudioModule 2022-11-01 12:45:13 +01:00
Calinteodor
7a8350356a feat(base/react): removed old web Switch component and exports (#12481)
* feat(base/react): removed old Switch component and exports
2022-11-01 11:42:36 +02:00
Saúl Ibarra Corretgé
2596c463fe fix(ts) make tsc (almost) not cry on native
Co-authored-by: Calinteodor <calin.chitu@8x8.com>
Co-authored-by: Robert Pintilii <robert.pin9@gmail.com>
2022-11-01 10:07:10 +01:00
Saúl Ibarra Corretgé
2de0520835 chore(deps) eslint-config-jitsi@latest 2022-11-01 10:07:10 +01:00
JohnProv
c276c204ac lang: Update main-nl.json (#12479)
Fix name
2022-10-31 12:20:02 -05:00
Calinteodor
67cf6e6d18 feat(base/ui/native): removed unused files and updated imports (#12477)
* feat(base/ui/native): removed unused files and updated imports
2022-10-31 16:34:26 +02:00
Robert Pintilii
b321cf3639 ref(add-people-dialog) Update design (#12468)
Convert some files to TS
2022-10-31 09:56:26 +02:00
TTG
8e54a69160 feat: Adjust language list to be shown in native language (#12475)
* Remove language lists

* Replace with native language

* Remove languages resource
2022-10-29 09:20:50 -05:00
Milo Ivir
93e5e48648 lang: Update Croatian translation (#12441)
* Update Croatian translation

- update according to the current "main.json" file

* Update main-hr.json

- added the comma at line 486
I hope that solves the issue.
2022-10-28 11:22:25 -05:00
polfernandez
c945b9cc5e Misspelling. Update main-ca.json
There is a misspelling in the "joiningTitle" label. "S'està demanat per a entrar a la reunió...", should be "S'ha demanat per a entrar a la reunió..."
2022-10-28 09:33:39 -05:00
Robert Pintilii
7c3d2010e4 ref(TS) Convert some features to TS (#12471) 2022-10-28 11:53:24 +03:00
José Luís Andrade
894c5cd788 fix(lang) update Portuguese translation 2022-10-28 10:05:09 +02:00
chipechop
1c7e457879 fix(lang) update Italian translation 2022-10-28 10:04:30 +02:00
chipechop
b6b536962d fix(lang) update Italian language list 2022-10-28 10:03:35 +02:00
nomadbyte
b625b7b0ec fix(lang) update Ukrainian translation 2022-10-28 10:00:14 +02:00
Saúl Ibarra Corretgé
eb59949dfa fix(dialog,web) fix opening dialogs in succession
If onSubmit opens a new dialog, we'd be hiding it otherwise.
2022-10-28 08:57:56 +02:00
Robert Pintilii
69f4b116a9 ref(TS) Convert some features to TS (#12469) 2022-10-28 09:41:12 +03:00
Robert Pintilii
75d7c4b160 ref(dialog) Update some dialogs' styles (#12467) 2022-10-27 11:36:50 +03:00
Robert Pintilii
b5065306e5 ref(audio-popup) Replace InlineDialog with Popover (#12466) 2022-10-27 11:03:28 +03:00
Robert Pintilii
9f5a56bbc7 ref(TS) Convert some features to TS (#12462) 2022-10-27 10:33:11 +03:00
Mihaela Dumitru
b4809fe083 feat(gif) Support rating config + show display name over gif tile (#12461) 2022-10-26 16:23:39 +03:00
Robert Pintilii
6dedc7fb1a ref(TS) Convert some features to TS (#12454) 2022-10-26 09:59:21 +03:00
Robert Pintilii
a780051720 fix(input) Fix background color (#12452)
Use theme background on autofill Firefox
2022-10-26 09:09:58 +03:00
Armel Chesnais
51ac3ef64a fix(noise-suppression) exit out early if no input data to Worklet
Disconnecting the input node to the worklet causes the worklet to crash. Adding a guard clause for empty input prevents this.
2022-10-25 21:55:47 +02:00
Filip Rejmus
a915238b49 chore(deps) @react-native-async-storage 1.17.3 2022-10-25 21:49:59 +02:00
Robert Pintilii
687837310a ref(components) Replace some InlineDialogs with Popover (#12453)
Remove comments referencing InlineDialog
2022-10-25 16:11:55 +03:00
Robert Pintilii
7f879d2154 ref(SCSS) Remove some unused SASS variables (#12451) 2022-10-25 11:01:53 +03:00
Robert Pintilii
faec46dd17 ref(popover) Update Popover to support click trigger (#12447)
Convert Popover to TS
Update OverflowMenu to use Popover instead of InlineDialog
2022-10-24 12:51:18 +03:00
Saúl Ibarra Corretgé
33ec975e19 fix(rn,config) fix forcing VP8 for bridge calls 2022-10-24 10:28:38 +02:00
Saúl Ibarra Corretgé
db6165209b feat(rn) use H.264 (HW codec) for P2P calls
This requires a custom video encoder / decoder factory which uses the
hardware codec only for H.264 and the software implementations for the rest.
2022-10-24 10:28:38 +02:00
Robert Pintilii
27775de48d fix(label) Fix Participants Count label color (#12445) 2022-10-24 10:44:41 +03:00
Saúl Ibarra Corretgé
8818f4f4e6 fix(rn,filmstrip) fix dropping tiles on conference join 2022-10-21 18:45:56 +02:00
Jaya Allamsetty
aebe4885bb ref(filmstrip) Remove the option to disable thumbnail re-ordering. 2022-10-21 09:17:17 -04:00
Saúl Ibarra Corretgé
146cc2f9c9 fix(deps) update xmldom@0.7.6 2022-10-21 14:21:31 +02:00
Saúl Ibarra Corretgé
3b5878d078 fix(ios) also bump the lite SDK version when bumping versions 2022-10-21 13:34:30 +02:00
Robert Pintilii
6ab996568b ref(TS, rn) Fix some TS errors on tsconfig.native (#12432) 2022-10-21 14:09:15 +03:00
Robert Pintilii
4755f5a031 fix(dialog) Wrap dialog in FocusLock (#12431)
Improve accessibility by not allowing the user to navigate outside the dialog
2022-10-21 10:42:00 +03:00
Robert Pintilii
0b48e55a35 ref(TS) Convert some features to TS (#12425) 2022-10-21 10:33:10 +03:00
Hristo Terezov
9e1ac3bea6 fix(recording): recording link.
Show the start recording notification on jicofo update only. This way
the initiator will be available and we will be able to fetch and display
recording link and send iframe API event.
2022-10-20 20:09:50 -05:00
Shawn
7249406960 fix(persistent_lobby): properly destroy main room when empty 2022-10-20 12:15:56 -05:00
Saúl Ibarra Corretgé
a9f5829e58 fix(rn,filmstrip) clear participants cache when changing conferences 2022-10-20 17:03:30 +02:00
Saúl Ibarra Corretgé
4bb1697115 fix(filmstrip) prevent duplicated participants 2022-10-20 17:03:30 +02:00
Robert Pintilii
2938d1f2dc ref(TS) Require interfaces to start with I (#12424) 2022-10-20 12:11:27 +03:00
Robert Pintilii
10d202439b ref: Update npm scripts (#12422) 2022-10-20 11:17:57 +03:00
Robert Pintilii
af0715dc17 ref(keyboard-avoider) Don't use styled components (#12420) 2022-10-20 10:31:27 +03:00
Дамян Минков
601e21ffcd fix: Drops participants count white background. (#12416)
* fix: Drops participants count white background.

Currently, it is white background with white icon.

* squash: Drop unused import.
2022-10-19 11:42:28 -05:00
Robert Pintilii
ff29196f3a ref(participants-pane) Change to function component (#12410)
Use makeStyles instead of withStyles
2022-10-19 14:38:54 +03:00
Robert Pintilii
748b66b04a ref(toolbox) Convert feature to TS (#12413) 2022-10-19 14:38:38 +03:00
Robert Pintilii
ca4db54e6e ref(overflow-menu-button) Change to function component (#12411)
Use makeStyles instead of withStyles
2022-10-19 11:43:10 +03:00
Robert Pintilii
3eecf8063f ref(TS) Remove unnecessary ts-ignores (#12412)
Remove ts-ignores that are no longer needed because of tsconfig.web.json
Change ts-ignore to ts-expect-error for files outside react/features
2022-10-19 11:42:54 +03:00
Robert Pintilii
440339dea8 ref(display-name) Change to function component (#12402)
Use makeStyles instead of withStyles
2022-10-19 10:19:40 +03:00
Jaya Allamsetty
dbb0a953c6 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1519.0.0+eb623e75...v1522.0.0+28436e57
2022-10-18 17:41:21 -04:00
Robert Pintilii
442ae6c3cb chore(TS): Create web tsconfig (#12381)
* fix(ts,connection) avoid mixing web and native code

* chore(ts) split config

The mobile part is still WIP.

* Remove default tsconfig

* Fix ts-loader - use web tsconfig

* Fix tsconfig

Use noEmit only on npm scripts (for type checking), but don't use it in webpack

* Fix

* Fix import

* Fix

Co-authored-by: Saúl Ibarra Corretgé <saghul@jitsi.org>
2022-10-18 11:21:48 -05:00
tamasdomokos
30051d2b0e feat(translation): add description for source language (#12371) 2022-10-18 14:42:51 +03:00
Robert Pintilii
9ae236a010 ref(keyboard-shortcuts) Change Dialog to function component (#12403)
Use makeStyles instead of withStyles
Fix style
2022-10-18 13:56:26 +03:00
Robert Pintilii
6f209a8139 ref(salesforce) Use new Dialog component (#12400) 2022-10-18 13:56:08 +03:00
Jaya Allamsetty
69567fb371 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1508.0.0+238dd7b2...v1519.0.0+eb623e75
2022-10-17 20:16:33 -04:00
Jaya Allamsetty
66cddddd3e fix(video-layout) Fix auto-pinning latest screenshare. 2022-10-17 16:53:27 -04:00
bogdandarie
485c875ee5 feat(config) add ability to hide speaker stats 2022-10-17 22:40:13 +02:00
Horatiu Muresan
ceb1cd9673 fix(screenshare-jwt) Disable screen share based on jwt 2022-10-17 11:01:56 -05:00
Calinteodor
4d817af060 feat(settings/native): fixed scroll inside screen (#12395)
* feat(settings): fixed scroll, bottom insets and bounce
2022-10-17 18:14:40 +03:00
Дамян Минков
a082a3fb0f feat: Updates deb install texts. (#12394)
* fix: Changes dialog txt for deb install.

* squash: Adjust jaas account creation txt.

* squash: Small update.

* squash: Small update2.
2022-10-17 09:18:31 -05:00
Robert Pintilii
2a321d6b1f ref(TS) Convert some files to TS (#12364) 2022-10-17 14:28:01 +03:00
Robert Pintilii
dd6478b3cf ref(ui-components) Use new Dialog (#12363)
Convert some files to TS
Improve Dialog component
2022-10-17 14:27:48 +03:00
Saúl Ibarra Corretgé
6274299d49 chore(ios) sync project file 2022-10-17 12:51:30 +02:00
Alex Bumbu
d77d2f0c5b fix(iOS, layout): fix iOS 16 layout
This (partially) reverts commit ddab27e292.

We're reverting this to fix the iOS 16 layout problems caused by the interaction between the app rootViewControoler and JitsiMeetViewController, with the downside that using any RN components based on native view controllers will most likely be faulty. The solution for this would be to change the SDK's entry point to a view controller, instead of JitsiMeetView.
2022-10-17 12:33:44 +02:00
Janitz
33be0dc32e fix(lang) add chat.sendButton translation 2022-10-17 12:05:59 +02:00
Robert Pintilii
44c8b31187 ref(styles) Change some withStyles to makeStyles (#12373)
Convert PreMeetingScreen to TS and transform it to function component
2022-10-17 12:28:04 +03:00
bogdandarie
1279c5b0da fix(jaas) redirect to about blank when close meeting opened in iframe 2022-10-17 09:32:18 +02:00
bogdandarie
495957104c fix(notifications) don't show self view notifications if already one is active 2022-10-17 09:03:06 +02:00
Calinteodor
b558d7936c feat(chat): fixed chat counter (#12385)
* feat(chat): fixed chat counter and updated new messages button web styles
2022-10-14 17:09:42 +03:00
Calin-Teodor
1fe2a9193f feat(conference/native): adjusted carmode ui 2022-10-14 16:13:54 +03:00
Calin-Teodor
e8e6beabab feat(prejoin/native): adjusted room name margins 2022-10-14 16:00:44 +03:00
Saúl Ibarra Corretgé
3e31e1816d fix(ios) fix mute "ping-pong" 2022-10-14 14:32:09 +02:00
kerem
eb1c3d8c56 feat(deps,rn) update React Native to version 0.68.4 (#12376)
* BREAKING: update rn to 0.68.4
2022-10-14 14:37:10 +03:00
Saúl Ibarra Corretgé
4a54f4bedc fix(rn,large-video) don't render video for the local SS 2022-10-13 19:14:40 +02:00
Calinteodor
4d84123c71 feat(prejoin/native): clear notifications when joining (#12361)
* feat(prejoin/native): clear notifications when joining
2022-10-13 17:05:21 +03:00
Saúl Ibarra Corretgé
4018e8875f fix(rn,screensharing) fix build 2022-10-13 15:19:24 +02:00
Calinteodor
be93fbd512 feat(toolbox/conference/audio-mode/chat/native): UI fixes and updates (#12375)
feat(toolbox/conference/audio-mode/chat/native): UI fixes and updates
2022-10-13 16:13:00 +03:00
Robert Pintilii
51bbc3f87f ref(ui-components) Use new Button on prejoin (#12372) 2022-10-13 13:42:39 +03:00
Robert Pintilii
f5fb402784 ref(TS) Convert some features to TS (#12366) 2022-10-13 11:26:28 +03:00
Robert Pintilii
70503d2518 ref(label) Convert to function component (#12370)
Fixes issue where Label styles would take precedence over parent styles (raised hand counter would be gray instead of yellow)
2022-10-13 10:46:00 +03:00
Дамян Минков
40e1f28fc2 fix: Fix log messages in end_conference module. (#12369)
* fix: Fix log message.

From `general error No muc_component specified` to `endconference.meet.damencho.net:end_conference error No muc_component specified`

* squash: more.
2022-10-12 13:31:06 -05:00
Calinteodor
935f95a3d5 feat(prejoin/native): ui updates (#12368)
* feat(prejoin/native): ui updates
2022-10-12 15:43:11 +03:00
Hristo Terezov
53e4f584f9 fix(remote-control): when multistream is enabled 2022-10-11 15:48:24 -05:00
Saúl Ibarra Corretgé
e218c0d3af fix(conference) fix Spot wireless screen sharing
Make sure we use the same screen-sharing flow which takes multi-stream
into consideration.
2022-10-11 18:09:50 +02:00
Robert Pintilii
6c3206e4d4 ref: TS Improvements (#12358)
Remove unnecessary ts-ignores
Remove unnecessary eslint-disable
Fix type errors
Change Dispatch type to IStore['dispatch']
2022-10-11 13:47:54 +03:00
Saúl Ibarra Corretgé
6365b699c1 chore(deps) make sure all deps are pinned to exact versions 2022-10-11 11:16:00 +02:00
Saúl Ibarra Corretgé
768cca6162 fix(android) fix crash in Android < 10
Activity.registerActivityLifecycleCallbacks is only available in API level 29.

Ref: https://developer.android.com/reference/android/app/Activity.html#registerActivityLifecycleCallbacks(android.app.Application.ActivityLifecycleCallbacks)
2022-10-11 11:16:00 +02:00
Calinteodor
abdc5123eb feat(base/ui): fixed native button active style (#12353)
* feat(base/ui): fixed native button active style
2022-10-11 11:26:09 +03:00
Robert Pintilii
6423ed8fb5 ref(ui-components) Use new Dialog component (#12351)
Convert some files to TS
2022-10-11 11:24:11 +03:00
Robert Pintilii
b858496adb ref(ui-components) Use new Dialog component (#12349)
Convert some files to TS
Refactor MuteEveryone and MuteEveryonesVideo dialogs. Move shared code to abstract components. Remove unnecessary code
2022-10-10 12:12:02 +03:00
Jaya Allamsetty
68f79e52e7 fix(virtual-background) Remove unused action type VIRTUAL_BACKGROUND_TRACK_CHANGED. 2022-10-07 19:22:54 -04:00
Jaya Allamsetty
3f78de2d34 fix(virtual-backgroud) Remove desktop share as virtual background.
Its no longer supported in multi-stream mode.
2022-10-07 19:22:54 -04:00
Shawn
2029db5a59 fix(reservations): skip reservations check for breakout rooms 2022-10-07 17:07:28 -05:00
Jaya Allamsetty
6ede5c478f fix(external-api) Remove muted SS tracks from the list of participants currently screensharing.
Fixes an issue where 'contentSharingParticipantsChanged' event and 'getContentSharingParticipants' API continue to list IDs of the participants that have already stopped their screenshares.
2022-10-07 11:25:01 -04:00
Duduman Bogdan Vlad
2ba7b3acb7 fix(large-view) fix selection if local SS auto-select is true 2022-10-07 17:06:25 +02:00
robertpin
ebcd1d85f2 fix(local-recording) don't use tab audio
We have observed that participant audio is distant and garbled, so we
added the tracks individually to the mixer.

In addition, using tab audio prevents us from using preferCurrentTab due
to: https://bugs.chromium.org/p/chromium/issues/detail?id=1317964 so
losing audio effects but having better participant audio quality (in
addition to better UX) is not a bad compromise.
2022-10-07 17:04:31 +02:00
Saúl Ibarra Corretgé
4857664f15 fix(rn,display-name) fix displaying for virtual SS 2022-10-07 15:30:11 +02:00
Saúl Ibarra Corretgé
0f84b0b9fe fix(rn,thumbnail) fix not rendering indicators for virtual SS 2022-10-07 15:30:11 +02:00
Saúl Ibarra Corretgé
eda3e620d3 fix(rn,participants) fix not rendering connection info messages
Also move shouldRenderParticipantVideo to the only place it's used.
2022-10-07 15:30:11 +02:00
Saúl Ibarra Corretgé
e8df8f75a8 fix(rn,participants) fix rendering screen-sharing 2022-10-07 15:30:11 +02:00
Calin-Teodor
f2b2b02029 feat(base/modal): enable scroll for jitsi screen component 2022-10-07 16:27:40 +03:00
Avram Tudor
66769136ed fix(prejoin) show subject in prejoin if available (#12338) 2022-10-07 15:14:53 +03:00
Calin-Teodor
179647c93c feat(base/ui/native): centered button label 2022-10-07 12:21:25 +03:00
Robert Pintilii
25bd824621 ref(ui-components) Use new Dialog component (#12306)
Convert some files to TS
2022-10-07 12:16:41 +03:00
Robert Pintilii
be25ad855f ref(TS) Convert some files to TS (#12307) 2022-10-07 11:39:18 +03:00
Jaya Allamsetty
b1931de7b0 fix(screenshare): Pass _desktopSharingSourceDevice as shareOptions when available.
Fixes an issue when external cam as screensharing source fails on Spot with multi-stream enabled.
2022-10-07 07:38:21 +02:00
Horatiu Muresan
02da4a1c42 fix(hide-buttons-on-jwt) Fix getting disabled buttons (#12326) 2022-10-06 18:01:53 +03:00
damencho
5c2ec5df54 fix: Switches by default mutli-stream and through config.js.
We need that for mobile clients that are not updated.
2022-10-06 09:43:05 -05:00
Mihaela Dumitru
e30b0306f9 fix(whiteboard) account for moderation rights (#12323) 2022-10-06 16:01:45 +03:00
Mihaela Dumitru
11e13e1849 fix(whiteboard) use randomly generated room id for collaboration (#12321) 2022-10-06 15:22:48 +03:00
Calinteodor
0f7aa5a084 feat(mobile/navigation): disabled bottom tab navigator backBehavior (#12320)
* feat(mobile/navigation): disabled backBehavior in bottom tab navigator
2022-10-06 14:55:44 +03:00
Calinteodor
ad4707c660 feat(settings/native): start car mode in low bandwidth mode (#12286)
* feat(settings/native): start car mode in low bandwidth mode
2022-10-06 14:29:39 +03:00
Mihaela Dumitru
d0c22806ec ref(participants) use enum type to store fake participants (#12316) 2022-10-06 14:12:57 +03:00
tmoldovan8x8
be7f2643df fix(rn) disables joinButton while navigating 2022-10-06 13:33:26 +03:00
Robert Pintilii
6c9441fa7b ref(ui-components) Update ContextMenu and move it to base/ui (#12318) 2022-10-06 13:09:40 +03:00
Saúl Ibarra Corretgé
a2d39ca5b1 fix(rn,util) avoid 'clipboard-copy' being bundled in native
The copyText wrapper is used in the `showStartedRecordingNotification`
action, which is common for web and native. Provide a native
implementation so the right one is bundled.
2022-10-06 11:24:20 +02:00
Saúl Ibarra Corretgé
d2a36ea3a8 fix(doc) update README 2022-10-06 07:06:06 +02:00
Дамян Минков
e52c9043a5 feat: Adds some compatibility for building on windows. 2022-10-05 10:49:51 -05:00
Дамян Минков
ee5817539b fix: Fixes cert choice when pre-set in automations. (#12312)
* fix: Fixes cert choice when pre-set in automations.

* squash: fix
2022-10-05 10:49:21 -05:00
Jaya Allamsetty
da9b5a9156 fix(multi-stream): Set mediaType to screenshare on SS tracks.
Fixes an issue where camera video doesn't get requested by RN clients when the remote ep starts SS first before turning on their camera.
2022-10-05 09:50:57 -04:00
Дамян Минков
bb84c47e78 feat: Updates prosody dependency to be at least 0.11.7. 2022-10-05 08:16:43 -05:00
Дамян Минков
13f4da7855 fix: Workaround failure to install jitsi-meet-prosody Fixes #12300 2022-10-05 06:56:25 -05:00
Saúl Ibarra Corretgé
f935b29629 feat(rn,config) default to VP8 on mobile
VP9 is too resource intensive.

H.264 might be coming back for P2P but we need to fix support for
Android first, since it's not available with the default software codec
factory.
2022-10-04 22:43:51 +02:00
mbondarenko
f5f689c53d Added config option for enabling Opus DTX flag which used for reduction in the audio traffic, when a participant is silent then the audio packet won’t be transmitted. 2022-10-04 16:05:35 -04:00
Saúl Ibarra Corretgé
af4ba32803 chore(deps) react-native-webrtc@1.106.1
Last to support Plan B.

The method to embed WebRTC has changed to use CocoaPods.
2022-10-04 22:02:19 +02:00
kerem
9e11bc302b feat(deps,rn) update React Native to version 0.68.3 (#12293)
* feat(deps,rn) update React Native to version 0.68.3

Co-authored-by: keremoge <kerem.oge@albarakatech.com>
2022-10-04 19:29:23 +03:00
Saúl Ibarra Corretgé
438b3924d7 fix(ios,callkit) make sure the start call action is fulfilled 2022-10-04 16:32:46 +02:00
Horatiu Muresan
a2d0492007 feat(toolbar-buttons) Hide buttons disabled through JWT (#12261) 2022-10-04 16:02:49 +03:00
Robert Pintilii
c35d1d8d4b ref(polls) Convert files to TS (#12296) 2022-10-04 15:06:02 +03:00
Robert Pintilii
7d7bf987a1 fix(lobby) Make password hidden by default (#12295) 2022-10-04 13:52:37 +03:00
Robert Pintilii
3e744c5ffe ref(TS) Convert some files to TS (#12289) 2022-10-04 13:52:09 +03:00
Robert Pintilii
f4f8808d95 ref(ui-components) Update some dialogs to use the new component (#12288)
Improve Dialog component to auto close on cancel or on submit
Change logic to determine whether a dialog is using the new component
Convert some files to TS
2022-10-04 12:44:48 +03:00
Robert Pintilii
21bcbdc12f feat(local-recording) Change tab title to help identifying it (#12294) 2022-10-04 11:59:19 +03:00
Saúl Ibarra Corretgé
090433b6e8 feat(ci) cache npm package data
Ref: https://github.com/actions/setup-node#caching-global-packages-data
2022-10-03 13:13:53 +02:00
Saúl Ibarra Corretgé
230cbfac1e feat(ci) move linting to its own step
This allows it to run in parallel, and should make the overall run
faster.
2022-10-03 13:13:53 +02:00
Horatiu Muresan
c56c5bd145 fix(polls) Fix autoscroll for polls causing layout issues 2022-10-03 12:39:08 +03:00
Tamas Domokos
f5a4fd4bc2 fix (translation) remove unused i18n import 2022-10-03 11:15:12 +02:00
Calin-Teodor
cb881311e7 feat(mobile/navigation): updated translations for screen headers 2022-10-03 12:04:06 +03:00
Nakorn
ac2698f829 12272 2022-10-01 07:16:37 +02:00
Nakorn
5fafb5d29e Update Chinese translations 2022-10-01 07:16:37 +02:00
Saúl Ibarra Corretgé
fbcdb250f4 fix(ts) fix build on macOS
Why this line fails is a mystery, but it's only reproducible on macOS.
2022-09-30 15:43:40 -05:00
Saúl Ibarra Corretgé
ba8529d72b feat(ci) run GHA also on macOS 2022-09-30 15:43:40 -05:00
Mihaela Dumitru
1230cebde2 fix(avatar) support icons alongside cors avatars (#12280) 2022-09-30 17:51:16 +03:00
Mihaela Dumitru
93406bb12c feat(whiteboard) add initial implementation (#12185) 2022-09-30 17:50:45 +03:00
dependabot[bot]
d43eea91cf chore(deps): bump nth-check and @svgr/webpack
Bumps [nth-check](https://github.com/fb55/nth-check) to 2.1.1 and updates ancestor dependency [@svgr/webpack](https://github.com/gregberge/svgr). These dependencies need to be updated together.


Updates `nth-check` from 1.0.2 to 2.1.1
- [Release notes](https://github.com/fb55/nth-check/releases)
- [Commits](https://github.com/fb55/nth-check/compare/v1.0.2...v2.1.1)

Updates `@svgr/webpack` from 4.3.2 to 6.3.1
- [Release notes](https://github.com/gregberge/svgr/releases)
- [Changelog](https://github.com/gregberge/svgr/blob/main/CHANGELOG.md)
- [Commits](https://github.com/gregberge/svgr/compare/v4.3.2...v6.3.1)

---
updated-dependencies:
- dependency-name: nth-check
  dependency-type: indirect
- dependency-name: "@svgr/webpack"
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-30 11:08:45 +02:00
Robert Pintilii
7364c7f27b ref(TS) Remove unnecessary ts-ignores 2022-09-30 11:08:03 +02:00
Calinteodor
2de2500080 feat(mobile/navigation/welcome): welcome page tabs translations 2022-09-30 11:07:00 +02:00
TTG
349e4bfb57 fix(lang) update Chinese translations & fix typo 2022-09-30 09:08:34 +02:00
Christoph Settgast
4f92811263 fix(lang) update German translation (#12277) 2022-09-29 22:10:01 +02:00
abora8x8
a4e35f81cf fix(polls) refactor message handling 2022-09-29 19:28:24 +02:00
Alexandru Petrus
7aefc3b94a feat(invite-dialog) Add limit message for invite dialog 2022-09-29 19:06:14 +03:00
Avram Tudor
3c180d3932 ref(join) remove overlay shown for a slow gUM flow (#12268) 2022-09-29 16:55:31 +03:00
Saúl Ibarra Corretgé
c523c07cb7 fix(config) drop debug lefover 2022-09-29 13:47:43 +02:00
Robert Pintilii
5c77f61037 ref(gifs) Convert feature to TS (#12264) 2022-09-29 14:45:34 +03:00
tamasdomokos
8162ae4dbe fix(translation) translation button visibility for users, add missing languages 2022-09-29 13:44:59 +02:00
Calin-Teodor
69e0a37529 feat(base/ui): added autofocus prop 2022-09-29 13:31:20 +03:00
Robert Pintilii
bfa88f13dc feat(ui-components) Add Dialog Component (#12260) 2022-09-29 13:26:34 +03:00
Robert Pintilii
0d917df1fb ref(feedback) Use new Input component (#12265)
Remove @atlaskit/field-text-area dep
2022-09-29 12:40:16 +03:00
Jaya Allamsetty
95a3a8de0b fix(face-landmarks): Check mute state from redux before starting detection. 2022-09-28 11:48:13 -04:00
Bogdan Duduman
f4985d8028 increase heap node for build 2022-09-28 06:27:31 -05:00
William Liang
5d6aec3f3c fix(speaker-stats) decouple sort order from speaker stats (#12197) 2022-09-28 10:51:53 +03:00
Shawn Chin
2e6f14f872 feat(reservations) start lobby and set password from reservation (#12215)
* feat(reservations) support enabling lobby and password based on reservations data

* Add warning about unhandled use case

* feat(lobby) Support automated activation of lobby
2022-09-27 14:59:30 -05:00
TTG
90b17046f6 fix(lang) remove non-existent languages (#12258)
* Remove Thai from all language.json

* Remove Azerbaijani from all language.json
2022-09-27 14:50:37 -05:00
Saúl Ibarra Corretgé
86ab2be65e chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1506.0.0+3fc03265...v1508.0.0+238dd7b2
2022-09-27 21:43:58 +02:00
Saúl Ibarra Corretgé
11f138d28f feat(room-metadata) add module for generic room metadata storage 2022-09-27 20:50:41 +02:00
damencho
e163d6438b chore(deps) update js-utils
Updates dict.
2022-09-27 12:44:53 -05:00
TTG
24cb07b830 lang: Update Chinese translations (#12104)
* lang: Update Chinese translation

* lang: Remove nonexistent language

* Update main-zhTW.json

* Update main-zhCN.json

* Update main-zhTW.json

* Update languages-zhTW.json

* Delete languages.json

* Revert "Delete languages.json"

This reverts commit 7f96a19ba7.

* Update languages.json

* Update languages-zhCN.json

* Update languages-zhTW.json

* Add newline at end of file

* Update languages.json

* Update languages-zhCN.json
2022-09-27 12:44:34 -05:00
Bogdan Duduman
53df3a7b55 fix: fix copyText import 2022-09-27 11:43:29 -05:00
Horatiu Muresan
ca54533153 fix(audio-configs) Fix startWithAudioMuted overrriding startSilent (#12251) 2022-09-27 15:56:59 +03:00
Saúl Ibarra Corretgé
02f5987187 feat(rn,conference) show participants pane in the top bar
Replace the invite button, which is accessible within the participants
pane.

Show the screen-sharing button in the toolbox when space allows, and fix
it so it's rendered when outside the overflow menu.
2022-09-27 13:21:08 +02:00
Horatiu Muresan
ce96b71bfa fix(config) Update link to to UI tokens 2022-09-27 13:32:32 +03:00
Saúl Ibarra Corretgé
a32d237d54 chore(deps,eslint) update eslint-config-jitsi to 4.1.4 2022-09-27 11:22:36 +02:00
Bogdan Duduman
48db099134 feat: include sort members eslint changes 2022-09-27 10:25:20 +02:00
Robert Pintilii
1106a86ba7 ref(connection-indicator) Convert to TS (#12239) 2022-09-27 10:42:30 +03:00
Jaya Allamsetty
54346c065d feat(large-video) Show SS on large-video instead of camera tile.
This is helpful in live streaming scenarios when AUTO_PIN_LATEST_SCREEN_SHARE is disabled and multi-stream is enabled. Dominant speaker's SS tile (if available) will be on stage instead of their camera tile. Fixes https://github.com/jitsi/jitsi-meet/issues/10869.
2022-09-26 16:57:11 -04:00
Filip Rejmus
c3ebde18df fix(helpers) move copyText function to web.js file
It gets bundled on mobile for no reason otherwise.
2022-09-26 19:31:06 +02:00
José Luís Andrade
c613082ce1 lang: Update Portuguese translation (#12241) 2022-09-26 11:26:49 -05:00
Saúl Ibarra Corretgé
eee096e0c0 fix(ts,build) fix TS error in web build 2022-09-26 09:47:35 -05:00
Robert Pintilii
9c6119606f ref(chat) Convert some files to TS (#12238) 2022-09-26 12:54:22 +03:00
Robert Pintilii
077afecdba fix(external-api) Fix pin function (#12236)
Make pin function work with stage filmstrip
2022-09-26 12:13:32 +03:00
Дамян Минков
1b4bbcba3d fix: Fixes jaas and cert choice when package configure is reordered. (#12234)
* fix: Fixes jaas and cert choice when package configure is reordered.

* squash: Checks for jaas-choice before asking.
2022-09-24 08:24:18 -05:00
Jaya Allamsetty
32b8c62ec9 fix(face-landmarks) Do not start detection on muted tracks 2022-09-23 14:26:40 -04:00
Дамян Минков
a9bc83db03 feat: Set LE as default choice when installing. (#12232)
* feat: Set LE as default choice when installing.

* squash: Text updates.
2022-09-23 13:10:06 -05:00
Horatiu Muresan
90bcbebedb fix(carmode) Don`t show rec/live labels after rec/ls finished 2022-09-23 15:26:33 +03:00
Robert Pintilii
c06d456ae6 fix(external-api) Fix start recording (#12227)
Check recording is enabled before start
2022-09-23 13:22:37 +03:00
Saúl Ibarra Corretgé
fe0c804cc0 feat(android) add logcat helper script 2022-09-23 11:56:49 +02:00
Robert Pintilii
4ee77b1f65 ref(TS) Convert some base files to TS (#12226) 2022-09-23 12:03:25 +03:00
Shawn Chin
7cbb377a66 feat(external-api) start/stop local recording (#12210) 2022-09-23 11:46:54 +03:00
Robert Pintilii
0bccda2c9e ref(TS) Convert more base files to TS (#12222) 2022-09-23 11:13:32 +03:00
Robert Pintilii
3426960d5a ref(TS) Convert base/tracks to TS (#12219) 2022-09-23 10:48:20 +03:00
Horatiu Muresan
fb2cfaa204 fix(carmode) Force portrait when in carmode 2022-09-22 17:17:19 +03:00
Дамян Минков
d61d47fae3 fix: Fixes LE script on existing cert. (#12223)
* fix: Fixes LE script on existing cert.

Updates jaas shown message.

* squash: Make sure .well-known folder exists.

* squash: Fix LE when running apt commands with sudo.

Forces acme.sh to work when it detects sudo.

* squash: Change jaas message on install.

* squash: Uses issue return code to check for existing cert.
2022-09-22 09:08:32 -05:00
Gabriel Borlea
2cb9596536 feat(rtc-stats): send face landmarks detection off timestamp to service (#12183)
* feat(rtc-stats): send camera off timestamp to service

* code review

* improve error handling

* improve rtcstats middleware and complete typescript types
2022-09-22 13:06:31 +03:00
Robert Pintilii
62a10e6587 fix(giphy) Allow space in input (#12221)
Fixes: space closes gif menu
2022-09-22 11:34:46 +03:00
damencho
e38f9a293b fix: Fixes postinst after pull/12213. 2022-09-21 17:28:02 -04:00
Дамян Минков
eba7cfcec5 feat: Adds automatic jaas account creation. (#12213)
* feat: Adds automatic jaas account creation.

* squash: Prints return data if any.

* squash: Moves jitsi-challenge.txt to /usr/share/jitsi-meet/.well-known.
2022-09-21 13:57:30 -05:00
Jaya Allamsetty
ae70370a38 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1505.0.0+f49afde5...v1506.0.0+3fc03265
2022-09-21 14:00:48 -04:00
Jaya Allamsetty
45c67142e9 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1504.0.0+85fb01c0...v1505.0.0+f49afde5
2022-09-21 10:43:18 -04:00
Jaya Allamsetty
6a03e49b9e update config.js 2022-09-21 10:15:38 -04:00
Jaya Allamsetty
25e7b79237 feat(multi-stream) Enable multi-stream by default (if not disabled explicitly). 2022-09-21 10:15:38 -04:00
Robert Pintilii
779ecd6da6 feat(ui-components) Add Tabs component (#12199) 2022-09-21 14:57:59 +03:00
Robert Pintilii
dd4d49a591 fix(filmstrip) Fix stage filmstrip (#12209)
Use new settings action to determine when max has been reduced
2022-09-21 14:57:40 +03:00
Robert Pintilii
63b6b5a72d ref(TS) Convert some files to TS (#12204) 2022-09-21 11:32:50 +03:00
George Politis
df9185f92a ref(callstats): Removes redundant config.js option. 2022-09-20 16:54:25 +03:00
Saúl Ibarra Corretgé
9bb0decb30 fix(build) speed up webpack dev build by 4x
Skip type checking, only do it in prod builds (the CI will check those).

Main bundle build times:

- Before: 255101ms
- After: 58463ms
2022-09-20 08:40:34 +02:00
Saúl Ibarra Corretgé
e18240cfc6 chore(build) rename option for clarity 2022-09-20 08:40:34 +02:00
Jaya Allamsetty
1703ed8b23 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1502.0.0+62b0e5c4...v1504.0.0+85fb01c0
2022-09-19 12:43:05 -04:00
Saúl Ibarra Corretgé
945eda680c chore(ios) sync Podfile.lock 2022-09-19 15:39:32 +02:00
Saúl Ibarra Corretgé
a378ba7827 feat(ios) Xcode 14 compatibility
Bitcode is no longer supported, so remove it. The M106 WebRTC version no
longer contains bitcode either, but it embeds dSYMs.
2022-09-19 15:01:47 +02:00
Saúl Ibarra Corretgé
73ab43ac0c feat(android) disable volume logger thread 2022-09-19 15:01:47 +02:00
Saúl Ibarra Corretgé
3f5fa1e663 feat(rn,deps) update WebRTC to M106 2022-09-19 15:01:47 +02:00
Robert Pintilii
e05ad18ee4 fix(prejoin) Remove no longer needed hack 2022-09-19 14:57:57 +02:00
Robert Pintilii
6dd04136de ref(TS Convert some files to TS (#12191) 2022-09-19 10:40:03 +03:00
Jaya Allamsetty
ffe005ba0a chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1500.0.0+d96dad72...v1502.0.0+62b0e5c4
2022-09-16 15:30:41 -04:00
Jaya Allamsetty
7393c20ed8 fix(testing): Fixes for multi-stream torture tests to work. 2022-09-16 14:31:41 -04:00
tmoldovan8x8
7509b520f3 fix(e2ee) check if e2ee is supported before playing the sound 2022-09-16 14:28:36 +03:00
Robert Pintilii
4c9f3d287a fix(prejoin) Fix focus stealing in settings (#12188)
Remove ref focus from InputField component
Replace input component in GifsMenu and add ref focus
2022-09-16 13:05:15 +03:00
TTG
fef562d767 fix(lang) remove unused language lists 2022-09-16 10:58:28 +02:00
Saúl Ibarra Corretgé
d9bbf35466 fix(settings) fix not storing maxStageParticipants 2022-09-15 23:30:44 +02:00
Saúl Ibarra Corretgé
1cd80a33c6 fix(config) fix check for filmstrip property
The whole object might be undefined.
2022-09-15 19:43:33 +02:00
Robert Pintilii
2d6e181a13 feat(ui-components) Add Select component (#12182)
Remove @atlaskit/dropdown
Convert some files to TS
2022-09-15 15:20:11 +03:00
Robert Pintilii
f5e60a7ca4 fix(filmstrip) Save stage filmstrip in settings (#12170)
Add config for stage participants number
Enable stage filmstrip by default
2022-09-15 10:57:48 +03:00
Hristo Terezov
f0a45a9976 feat: Handle dominant speaker silence 2022-09-14 12:13:41 -05:00
Hristo Terezov
81f5e68382 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1498.0.0+bc3aae02...v1500.0.0+d96dad72
2022-09-14 12:13:16 -05:00
Alex Bumbu
e68ede65e1 feat(iOS): callkit objc implementation 2022-09-14 18:52:39 +02:00
damencho
8c0de928ab fix: Set default choice for jaas, keeps old behavior. 2022-09-14 10:15:49 -05:00
Horatiu Muresan
9d57c8e058 fix(external-api) Add email to local participant info 2022-09-14 17:57:08 +03:00
Horatiu Muresan
35442c6094 fix(external-api) Fix notify audio muted/audio available 2022-09-14 16:39:03 +03:00
Gabriel Borlea
d6f3c2a0f4 ref(face-landmarks): convert to typescript and add detector class (#12144)
* fix(face-landmarks): stop recognition when imageCapture error

* ref(face-landmarks): convert files in typescript

fix: lint issues

* code review

* ref(face-landmarks): move detection part to a class

* ref(face-landmarks): make FaceLandmarksDetector singleton

* fix typo and ts-ignore problematic types

* fix linting issues
2022-09-14 15:42:46 +03:00
tmoldovan8x8
b83c55e9c4 fix(rn) fixes typo in functions.native 2022-09-14 14:49:13 +03:00
Robert Pintilii
a1d20dc188 ref(TS) Convert some features to TS (#12149)
Convert AV Moderation and Breakout Rooms to TS
2022-09-14 14:32:58 +03:00
Robert Pintilii
95084e1004 ref(TS) Convert some base features to TS (#12138) 2022-09-14 10:54:56 +03:00
Saúl Ibarra Corretgé
5502601fb3 fix(subtitles) web components must not be used in generic action files 2022-09-13 16:17:10 +02:00
Saúl Ibarra Corretgé
3fa72c99bc fix(rn,conference) fix mobile build
Looks like Metro is confused by these imports.
2022-09-13 16:17:10 +02:00
Дамян Минков
079a2a505d feat: Adds LE choice when installing debian package. (#12154)
* feat: Adds LE choice when installing debian package.

* Update debian/jitsi-meet-web-config.templates

Co-authored-by: raluca8x8 <raluca.tocmag@8x8.com>

* squash: Print in the console the JaaS link everytime.

* squash: Note that JaaS does not support self-signed certs.

* squash: Fix message.

* squash: Moves acme.sh stuff into a script, so it is easy to re-run.

Co-authored-by: raluca8x8 <raluca.tocmag@8x8.com>
2022-09-13 07:55:00 -05:00
Robert Pintilii
139884fbe7 ref(dep) Upgrade MUI (#12089) 2022-09-13 10:36:00 +03:00
Misha
3ef3233242 ref(conn-indicator): remove E2E RTT (#12139)
There was a fundamental change in how e2e pings work in lib-jitsi-meet where it does few pings at the beginning, pushes metrics and shuts the whole thing down, so there are no more e2ertt updates after that. Plus it's disabled by default. @paweldomas have decided with @bgrozev to remove that instead of trying to adjust. Even if e2e pings are enabled the data is not feed correctly to the indicators, what's wrong there is as soon as the pings stop going the new data does not arrive and then all you get is N/A if the UI component is recreated.
2022-09-12 15:57:15 -05:00
JohnProv
443f4e4feb fix(lang) update Dutch translation 2022-09-12 19:28:25 +02:00
Alexandru Petrus
21a1d52753 fix(large-video) disable screen-sharing placeholder on Spot
Temporary hack, this should likely be configurable.
2022-09-12 18:00:02 +02:00
Bogdan Duduman
0f63e560b0 feat(external_api) add adbility to resize the filmstrip 2022-09-12 14:08:55 +02:00
Horatiu Muresan
43bea201e6 fix(prejoin) Hide conference name based on config 2022-09-12 10:35:37 +03:00
Horatiu Muresan
6e1e6df952 fix(prejoin) Fix roomname showing for 3rd party prejoin app (#12155)
* fix(prejoin) Fix roomname showing for 3rd party prejoin app

* fix: Do not convert roomName to string when undefined.

Co-authored-by: damencho <damencho@jitsi.org>
2022-09-09 12:10:50 -05:00
Saúl Ibarra Corretgé
8ce1423373 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1496.0.0+e1ca2f5a...v1498.0.0+bc3aae02
2022-09-09 16:57:08 +02:00
Saúl Ibarra Corretgé
ede97584f2 fix(ios) fix lite SDK release process 2022-09-09 13:37:08 +02:00
Robert Pintilii
247c54b6c6 ref(TS) Convert constants tiles to TS (#12148)
Remove unnecessary ts-ignores
2022-09-09 12:22:30 +03:00
Robert Pintilii
10bb186c13 ref(eslint) Use new TypeScript ESlint config (#12143)
Use new TS config from @jitsi/eslint
Fix all lint errors
2022-09-08 12:52:36 +03:00
Artur Shepilko
e296008d95 lang: update Ukrainian translation 2022-09-07 18:33:00 -05:00
Jaya Allamsetty
01001d6438 fix(large-video) Update large-video when the streamingStatus of the attached track changes.
This fixes an issue where screenshare appears on the thumbnail but not on the large-video.
2022-09-07 18:31:23 -04:00
damencho
fce15b491d feat: Adds jaas choice when installing. 2022-09-07 08:21:12 -05:00
damencho
cf37ba8771 feat: Drops prosody 0.10 checks. 2022-09-07 08:21:12 -05:00
damencho
0350f18e68 feat: Drops migration from jetty deployments. 2022-09-07 08:21:12 -05:00
Robert Pintilii
c9bbc6c762 ref(TS) Remove unnecessary ts-ignores (#12136) 2022-09-07 11:20:05 +03:00
Christoph Settgast
fa942e9f3b fix(lang) update German translation (#12122)
Signed-off-by: Christoph Settgast <csett86@web.de>
2022-09-07 09:13:19 +02:00
Robert Pintilii
fd67fb652b fix(analytics) Fix lint error (#12135) 2022-09-07 09:54:31 +03:00
Ali Alhaidary
a87d4f4a1d fix(lang) updated Arabic translation 2022-09-06 19:32:47 +02:00
Robert Pintilii
efb69d5382 ref: Improve TS files (#12130)
Remove unnecessary ts-ignores
Change any to actual types
Fix eslint rule
2022-09-06 20:32:20 +03:00
Flying-Light
db988f6e62 fix(lang) improve Arabic translation
Modify some translations for their difficulty for the user.
Add some missing translations like "ask to unmute"
2022-09-06 19:27:44 +02:00
Robert Pintilii
f4b46128bc ref(analytics) Convert to TS (#12099) 2022-09-06 15:51:50 +03:00
Gabriel Borlea
9323b86e3c feat(rtc-stats): support for react native and breakout rooms (#11835)
* feat(rtc-stats): mobile flow

* fix(rtc-stats): create websocket connection event

* feat(rtc-stats): separate middlewares and filter callstats pcs

* fix: linting problems

* fix: linting problems 2

* fix(rtc-stats): middlewares

* ref(rtc-stats): rewrite in typescript

* remove blank line and flow tag

* fix: linting problems

* remove redundant comment

* remove index file

* fix: sort interface keys

* feat(rtc-stats): support for breakout rooms

* ref(rtc-stats): send isBreakoutRoom flag when connecting to rtc stats

* code review

* fix(rtc-stats): rebase issues

* remove empty lines

* chore(rtc-stats): update rtc-stats to latest version

* fix: linting issues
2022-09-06 10:42:59 +03:00
Saúl Ibarra Corretgé
06842c724a fix(rn,video-layout) fix mobile
In adcd9a501b a call to getCurrentLayout
was introduced, which is not mobile-friendly :-(
2022-09-06 09:27:47 +02:00
Duduman Bogdan Vlad
5f62acc67c fix(external_api): Fix number of participants in meeting (#12052) 2022-09-06 09:51:38 +03:00
Robert Pintilii
17008237dc ref: Improve TS state (#12125)
Create IStateful interface
Use IState interface everywhere
Remove unnecessary @ts-ignore
2022-09-05 14:24:13 +03:00
Robert Pintilii
271ea8315b ref: Improve reducers TS (#12123) 2022-09-05 12:05:07 +03:00
Alexey Matveev
f18f8c1061 fix(lang) update Russian translation 2022-09-05 10:22:13 +02:00
Saúl Ibarra Corretgé
b535b8c583 fix(lobby) fix opening lobby chat after API change 2022-09-01 14:21:32 -05:00
Hristo Terezov
adcd9a501b ref(receiver-constraints): Refactor and fixes. 2022-09-01 13:22:09 -05:00
Saúl Ibarra Corretgé
cfb1fef162 fix(breakout-rooms) fix broadcast timer 2022-09-01 18:19:29 +02:00
Saúl Ibarra Corretgé
8b4f2495dc fixup! 2022-09-01 17:13:33 +02:00
Saúl Ibarra Corretgé
7e7107d45a feat(build,ljm) don't expose jquery
lib-jitsi-meet no longer requires it.
2022-09-01 17:13:33 +02:00
Saúl Ibarra Corretgé
45c0597aff chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1494.0.0+c9be46e2...v1496.0.0+e1ca2f5a
2022-09-01 17:12:50 +02:00
Calinteodor
c77e2c8301 feat(settings/native): fixes and updates (#12094)
feat(settings/native): fixes and updates
2022-09-01 15:05:14 +03:00
Robert Pintilii
3403d7bec2 ref: Convert reducers to TS (#12101) 2022-09-01 14:00:49 +03:00
Robert Pintilii
c4557c66aa chore(dep) Update caniuse-lite (#12109) 2022-09-01 11:32:11 +03:00
Robert Pintilii
cfda02ee10 ref(shared-video) Merge web and native reducers (#12108)
Convert reducer to TS
2022-09-01 11:32:01 +03:00
JohnProv
575ab1f1cb fix(lang) update Dutch translation 2022-09-01 09:19:29 +02:00
tamasdomokos
b4f98e7386 feat(translation) enable cc translation (#12046)
* feat(translation) enable cc translation

* Refactor translation for ListItem.

* fix language file sorting

* fix translation order

* change import order
2022-08-31 10:57:31 -05:00
Calin-Teodor
e8de9b4d66 feat(prejoin/native): update react-native-video dep and unmount LargeVideo is Prejoin is not focused 2022-08-31 12:55:02 +03:00
damencho
6fe353cfa4 fix: Fixes lua log lines.
When using directly log( the log lines come from `general` not from the module itself.
`Aug 29 19:38:08 general	info	Starting speakerstats for conference...`
2022-08-30 11:24:28 -05:00
Stefan Weil
882d343e8b chore(typos) fix some typos 2022-08-30 16:21:58 +02:00
Hristo Terezov
cc3a8b7b8d fix(stage-filmstrip): Pinning
Pinning participant was not working for stage filmstrip and
screen sharing filmstirp layouts
2022-08-30 08:41:38 -05:00
Saúl Ibarra Corretgé
104bfe7339 fix(rn,thumbnail) show SS indicator on the local thumbnail 2022-08-30 14:13:17 +02:00
Saúl Ibarra Corretgé
fb9d35a991 fix(rn,tracks) fix muting local screenshare when remote is muted
A "is local" check was missing.
2022-08-30 14:13:17 +02:00
Saúl Ibarra Corretgé
8fabba1679 fix(shared-video) fix exception on mobile
Also use the "standardized" way of instantiating loggers.
2022-08-30 14:13:17 +02:00
Saúl Ibarra Corretgé
5fbf741278 fix(rn,filmstrip) avoid "red" screen sharing tile
Mobile does not render screen-shares in tiles for performance reasons.
This coincidentally fixes the "red" tile that was attempted to be
rendered when the local partitipant started screen-sharing.
2022-08-30 14:13:17 +02:00
Saúl Ibarra Corretgé
bebcc8234f fix(rn,multi-stream) don't send multiple streams on mobile
Mobile does not do multiple local video streams for performance reasons,
so avoid creating the local fake participant.

WIP
2022-08-30 14:13:17 +02:00
Avram Tudor
1e9f599a35 ref(config) move defaultLogoUrl to config object (#12087)
* ref(config) move defaultLogoUrl to config object

* code review changes
2022-08-30 14:52:36 +03:00
Horatiu Muresan
cc5a3e499f feat(aot-prejoin) Add support for showing AOT on prejoin 2022-08-30 11:42:29 +03:00
Calin-Teodor
dbcbafe088 feat(polls/native): fixed scroll inside screen 2022-08-29 17:09:50 +03:00
José Luís Andrade
b034cf27cb lang: Update Portuguese translation (#12081) 2022-08-29 08:08:14 -05:00
Calin-Teodor
126dba8070 feat(security/native): options available only if participant is moderator 2022-08-29 15:30:36 +03:00
Calin-Teodor
a7c1aa4900 feat(settings/native): updated placeholder and placeholder text color 2022-08-29 15:21:50 +03:00
Saúl Ibarra Corretgé
206215c7c1 feat(ios) add generated Swift interface header
We need it for the RN module since it won't be (re)generated. It has not
changed in 4 years, so I guess it's safe to assume it'll stay that way.
2022-08-29 12:49:07 +02:00
Jaya Allamsetty
f38c5f39d2 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1493.0.0+3cf3db1a...v1494.0.0+c9be46e2
2022-08-26 15:12:56 -04:00
wfleischer
09efaecc41 feat(conference) add end conference
Add the ability (for moderators) to end the meeting for everyone.
2022-08-26 20:25:04 +02:00
Saúl Ibarra Corretgé
3bb581c8d9 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1487.0.0+f3f922a8...v1493.0.0+3cf3db1a
2022-08-26 20:24:08 +02:00
Nils Ohlmeier
96099a06a8 feature(rtcstats): expose sendSdp as config option (#12072)
* feature(rtcstats): expose sendSdp as config option

* fixed linting error
2022-08-26 13:03:08 -05:00
Saúl Ibarra Corretgé
4ef5da6c82 fix(ts) fix build 2022-08-26 08:01:59 -05:00
George Politis
289ece42df feat(logging): Store JS console logs in RTCStats.
With this commit JS console logs can optionally be sent to the RTCstats server
for storage and processing.

The functionality is off by default and can be enabled by setting to `true` the
config.js option

    config.analytics.rtcstatsStoreLogs: false // off by default

Obviously, if rtcstats is disabled/not configured nothing will be sent to the
rtcstats backend, even if this setting is set to `true`.

This commit also adds a config.js option that can be used to disable sending the
logs back to callstats:

    config.callstatsStoreLogs: true // on by default

Obviously, if callstats is disabled nothing would be sent in the first place,
but if callstats is enabled and this new configuration parameter is set to
`false`, then callstats will be kept active but no logs will be sent to
callstats.
2022-08-26 14:19:48 +03:00
Saúl Ibarra Corretgé
7dba5f8a7e fix(prejoin) use the conference display name instead of the room name
The room name could be a UUID and the conference display name an actual
name, using the subject.
2022-08-26 12:21:01 +02:00
Robert Pintilii
1010955393 ref: Convert some reducers to TS (#12065) 2022-08-26 12:54:16 +03:00
Robert Pintilii
3bd3be4df0 ref: Convert files to TS (#12007)
Convert files that use material-ui to TS (needed for material-ui upgrade)
2022-08-26 12:54:03 +03:00
Duduman Bogdan Vlad
fc60ab8383 feat(conference) send leave reasons on switching room and when errors occur 2022-08-26 11:53:32 +02:00
Rokixy
85d2123fac fix(chore) fix typo 2022-08-26 10:11:08 +02:00
Дамян Минков
5790742d53 fix(debian) add missing dependency of lua-inspect 2022-08-26 09:31:11 +02:00
bogdandarie
be1752c162 Feat (chat) add new message badge (#11987)
Change scroll to bottom when receive a new message with:
- scroll to bottom if scroll was at the bottom before getting a new message
- keep the scroll in his original position when the scroll position was not at the bottom
- scroll to bottom when open first time the chat
2022-08-26 09:21:41 +03:00
Gabriel Borlea
b9aeb19379 fix(face-landmarks): not sending duplicate expressions when recognition stops (#12067)
fix(facelandmarks): do not perform stop recognition if it is not active
2022-08-25 16:52:03 +03:00
Jaya Allamsetty
7951dc3ce7 fix(audio-only) Do not enable video automatically when audio-only is disabled (#12056)
* fix(audio-only) Do not enable video automatically when audio-only is disabled.
2022-08-25 08:40:32 -04:00
Robert Pintilii
dfb2a07cfa ref: Convert material-ui files to TS (#12013)
Convert files that use material-ui to TS (needed for material-ui upgrade)
2022-08-25 14:35:19 +03:00
Calinteodor
94dc6309de feat(base/native): Switch thumb track color (#12066)
* feat(base/native): Switch thumbColor and trackColor default props
2022-08-25 14:25:13 +03:00
Rokixy
3f2018a1de fix(chore) fix typo 2022-08-25 11:30:39 +02:00
Calin-Teodor
cd4ab8a5f1 feat(polls/native): added thumbColor for android 2022-08-25 10:57:34 +03:00
Hristo Terezov
594f9dfcdd fix(follow-me): SS not visible
The remote screen shares stored in redux were not updated when follow
me is active. Therefore the receiver constraints were not correct.
2022-08-24 16:42:51 -05:00
Robert Pintilii
8dd71a921b ref(ui-components) Improve native and web Switch (#12061)
Bring Switch component more in line
Convert some files to TS
2022-08-24 12:46:22 +03:00
Calinteodor
6d39d13af7 feat(lobby/prejoin): added room name title (#12054)
* feat(lobby/prejoin): added room name title
2022-08-24 12:43:28 +03:00
Robert Pintilii
372c2cb0f9 fix(participant) Avoid unnecessary unpin calls (#12060) 2022-08-24 11:26:09 +03:00
Calin-Teodor
5b41d68d39 feat(settings): changed switch enabled track color 2022-08-24 11:10:26 +03:00
JohnProv
1b9870dade Update main-nl.json 2022-08-23 13:13:27 -05:00
Mariusz Krzaczkowski
38eff2ba24 lang: Update for Polish (#12053)
* [i18n] Update for Polish

* [i18n] Update for Polish

* [i18n] Update for Polish
2022-08-23 09:54:50 -05:00
apetrus20
11f6b442fe feat (screen-share) Added logs and emit iframe event for video and audio sharing (#12051) 2022-08-23 15:17:18 +03:00
Calinteodor
e458eed931 feat(recording): StartRecordingDialogContent web and native (#12009)
* feat(recording): StartRecordingDialogContent web and native
2022-08-23 11:56:02 +03:00
1726 changed files with 37101 additions and 36251 deletions

View File

@@ -1,5 +1,6 @@
module.exports = {
'extends': [
'@jitsi/eslint-config'
]
],
'ignorePatterns': [ '*.d.ts' ]
};

View File

@@ -3,14 +3,15 @@ name: Simple CI
on: [pull_request]
jobs:
run-ci:
name: Build Frontend
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
- uses: actions/setup-node@v3
with:
node-version: '16.x'
node-version: 16
cache: 'npm'
- run: npm install
- name: Check git status
run: git status
@@ -18,8 +19,27 @@ jobs:
run: npm run lang-sort
- name: Check if the git repository is clean
run: $(exit $(git status --porcelain --untracked-files=no | head -255 | wc -l)) || (echo "Dirty git tree"; git diff; exit 1)
- run: npm run lint
- run: npm run lint:ci
- run: for file in lang/*.json; do npx --yes jsonlint -q $file || exit 1; done
- env:
NODE_OPTIONS: '--max-old-space-size=4096'
run: make
linux-build:
name: Build Frontend (Linux)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v3
with:
node-version: 16
cache: 'npm'
- run: npm install
- run: make
macos-ci:
name: Build Frontend (macOS)
runs-on: macOS-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v3
with:
node-version: 16
cache: 'npm'
- run: npm install
- run: make

1
.gitignore vendored
View File

@@ -92,3 +92,4 @@ twa/*.apk
twa/*.aab
twa/assetlinks.json
tsconfig.json

View File

@@ -5,6 +5,8 @@ LIBJITSIMEET_DIR = node_modules/lib-jitsi-meet
OLM_DIR = node_modules/@matrix-org/olm
TF_WASM_DIR = node_modules/@tensorflow/tfjs-backend-wasm/dist/
RNNOISE_WASM_DIR = node_modules/@jitsi/rnnoise-wasm/dist
EXCALIDRAW_DIR = node_modules/@jitsi/excalidraw/dist/excalidraw-assets
EXCALIDRAW_DIR_DEV = node_modules/@jitsi/excalidraw/dist/excalidraw-assets-dev
TFLITE_WASM = react/features/stream-effects/virtual-background/vendor/tflite
MEET_MODELS_DIR = react/features/stream-effects/virtual-background/vendor/models
FACE_MODELS_DIR = node_modules/@vladmandic/human-models/models
@@ -14,19 +16,25 @@ OUTPUT_DIR = .
STYLES_BUNDLE = css/all.bundle.css
STYLES_DESTINATION = css/all.css
STYLES_MAIN = css/main.scss
WEBPACK = ./node_modules/.bin/webpack
WEBPACK_DEV_SERVER = ./node_modules/.bin/webpack serve --mode development
ifeq ($(OS),Windows_NT)
WEBPACK = .\node_modules\.bin\webpack
WEBPACK_DEV_SERVER = .\node_modules\.bin\webpack serve --mode development
else
WEBPACK = ./node_modules/.bin/webpack
WEBPACK_DEV_SERVER = ./node_modules/.bin/webpack serve --mode development
endif
all: compile deploy clean
compile:
NODE_OPTIONS=--max-old-space-size=8192 \
$(WEBPACK)
clean:
rm -fr $(BUILD_DIR)
.NOTPARALLEL:
deploy: deploy-init deploy-appbundle deploy-rnnoise-binary deploy-tflite deploy-meet-models deploy-lib-jitsi-meet deploy-olm deploy-tf-wasm deploy-css deploy-local deploy-face-landmarks
deploy: deploy-init deploy-appbundle deploy-rnnoise-binary deploy-excalidraw deploy-tflite deploy-meet-models deploy-lib-jitsi-meet deploy-olm deploy-tf-wasm deploy-css deploy-local deploy-face-landmarks
deploy-init:
rm -fr $(DEPLOY_DIR)
@@ -86,6 +94,16 @@ deploy-tflite:
$(TFLITE_WASM)/*.wasm \
$(DEPLOY_DIR)
deploy-excalidraw:
cp -R \
$(EXCALIDRAW_DIR) \
$(DEPLOY_DIR)/
deploy-excalidraw-dev:
cp -R \
$(EXCALIDRAW_DIR_DEV) \
$(DEPLOY_DIR)/
deploy-meet-models:
cp \
$(MEET_MODELS_DIR)/*.tflite \
@@ -108,7 +126,7 @@ deploy-local:
([ ! -x deploy-local.sh ] || ./deploy-local.sh)
.NOTPARALLEL:
dev: deploy-init deploy-css deploy-rnnoise-binary deploy-tflite deploy-meet-models deploy-lib-jitsi-meet deploy-olm deploy-tf-wasm deploy-face-landmarks
dev: deploy-init deploy-css deploy-rnnoise-binary deploy-tflite deploy-meet-models deploy-lib-jitsi-meet deploy-olm deploy-tf-wasm deploy-excalidraw-dev deploy-face-landmarks
$(WEBPACK_DEV_SERVER)
source-package:

View File

@@ -18,7 +18,6 @@ Amongst others here are the main features Jitsi Meet offers:
* Web and native SDKs for integration
* HD audio and video
* Content sharing
* End-to-End Encryption
* Raise hand and reactions
* Chat with private conversations
* Polls

View File

@@ -76,7 +76,7 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'androidx.appcompat:appcompat:1.5.1'
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.7'

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#17A0DB</color>
<color name="colorPrimaryDark">#1081B2</color>
<color name="navigationBarColor">#161618</color>
</resources>

View File

@@ -2,7 +2,7 @@
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:editTextBackground">@drawable/rn_edit_text_material</item>
<item name="android:forceDarkAllowed">false</item>
<item name="android:navigationBarColor">@color/colorPrimaryDark</item>
<item name="android:navigationBarColor">@color/navigationBarColor</item>
<item name="android:windowDisablePreview">true</item>
</style>
</resources>

View File

@@ -1,5 +1,4 @@
import groovy.json.JsonSlurper
import org.apache.tools.ant.taskdefs.condition.Os
import org.gradle.util.VersionNumber
// Top-level build file where you can add configuration options common to all
@@ -12,25 +11,21 @@ buildscript {
}
dependencies {
classpath 'com.android.tools.build:gradle:7.0.4'
classpath 'com.google.gms:google-services:4.3.10'
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1'
classpath 'com.google.gms:google-services:4.3.14'
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.2'
}
}
ext {
buildToolsVersion = "31.0.0"
compileSdkVersion = 31
compileSdkVersion = 32
minSdkVersion = 23
targetSdkVersion = 31
targetSdkVersion = 32
supportLibVersion = "28.0.0"
if (System.properties['os.arch'] == "aarch64") {
// For M1 Users we need to use the NDK 24 which added support for aarch64
ndkVersion = "24.0.8215888"
} else if (Os.isFamily(Os.FAMILY_WINDOWS)) {
// For Android Users, we need to use NDK 23, otherwise the build will
// fail due to paths longer than the OS limit
ndkVersion = "23.1.7779620"
} else {
// Otherwise we default to the side-by-side NDK version from AGP.
ndkVersion = "21.4.7075529"

11
android/scripts/logcat.sh Executable file
View File

@@ -0,0 +1,11 @@
#!/bin/bash
PKG_NAME=${1:-org.jitsi.meet}
APP_PID=$(adb shell ps | grep $PKG_NAME | awk '{print $2}')
if [[ -z "$APP_PID" ]]; then
echo "App is not running"
exit 1
fi
exec adb logcat --pid=$APP_PID

View File

@@ -77,6 +77,7 @@ dependencies {
implementation project(':react-native-immersive')
implementation project(':react-native-keep-awake')
implementation project(':react-native-masked-view_masked-view')
implementation project(':react-native-orientation-locker')
implementation project(':react-native-pager-view')
implementation project(':react-native-performance')
implementation project(':react-native-safe-area-context')

View File

@@ -22,6 +22,8 @@ import android.os.Build;
import android.telecom.CallAudioState;
import androidx.annotation.RequiresApi;
import com.facebook.react.bridge.ReactContext;
import java.util.HashSet;
import java.util.Set;
@@ -49,6 +51,8 @@ class AudioDeviceHandlerConnectionService implements
*/
private AudioModeModule module;
private RNConnectionService rcs;
/**
* Converts any of the "DEVICE_" constants into the corresponding
* {@link android.telecom.CallAudioState} "ROUTE_" number.
@@ -141,8 +145,8 @@ class AudioDeviceHandlerConnectionService implements
JitsiMeetLogger.i("Using " + TAG + " as the audio device handler");
module = audioModeModule;
rcs = module.getContext().getNativeModule(RNConnectionService.class);
RNConnectionService rcs = ReactInstanceManagerHolder.getNativeModule(RNConnectionService.class);
if (rcs != null) {
rcs.setCallAudioStateListener(this);
} else {
@@ -152,9 +156,9 @@ class AudioDeviceHandlerConnectionService implements
@Override
public void stop() {
RNConnectionService rcs = ReactInstanceManagerHolder.getNativeModule(RNConnectionService.class);
if (rcs != null) {
rcs.setCallAudioStateListener(null);
rcs = null;
} else {
JitsiMeetLogger.w(TAG + " Couldn't set call audio state listener, module is null");
}

View File

@@ -26,10 +26,13 @@ import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.WritableArray;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.module.annotations.ReactModule;
import com.facebook.react.modules.core.DeviceEventManagerModule;
import org.jitsi.meet.sdk.log.JitsiMeetLogger;
@@ -196,7 +199,7 @@ class AudioModeModule extends ReactContextBaseJavaModule {
deviceInfo.putBoolean("selected", device.equals(selectedDevice));
data.pushMap(deviceInfo);
}
ReactInstanceManagerHolder.emitEvent(DEVICE_CHANGE_EVENT, data);
getContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(DEVICE_CHANGE_EVENT, data);
JitsiMeetLogger.i(TAG + " Updating audio device list");
}
});
@@ -212,6 +215,10 @@ class AudioModeModule extends ReactContextBaseJavaModule {
return NAME;
}
public ReactContext getContext(){
return this.getReactApplicationContext();
}
/**
* Initializes the audio device handler module. This function is called *after* all Catalyst
* modules have been created, and that's why we use it, because {@link AudioDeviceHandlerConnectionService}

View File

@@ -0,0 +1,46 @@
/*
* Copyright 2017 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
package org.jitsi.meet.sdk;
import org.webrtc.VideoCodecInfo;
import java.util.Map;
import java.util.HashMap;
/** Container for static helper functions related to dealing with H264 codecs. */
class H264Utils {
public static final String H264_FMTP_PROFILE_LEVEL_ID = "profile-level-id";
public static final String H264_FMTP_LEVEL_ASYMMETRY_ALLOWED = "level-asymmetry-allowed";
public static final String H264_FMTP_PACKETIZATION_MODE = "packetization-mode";
public static final String H264_PROFILE_CONSTRAINED_BASELINE = "42e0";
public static final String H264_PROFILE_CONSTRAINED_HIGH = "640c";
public static final String H264_LEVEL_3_1 = "1f"; // 31 in hex.
public static final String H264_CONSTRAINED_HIGH_3_1 =
H264_PROFILE_CONSTRAINED_HIGH + H264_LEVEL_3_1;
public static final String H264_CONSTRAINED_BASELINE_3_1 =
H264_PROFILE_CONSTRAINED_BASELINE + H264_LEVEL_3_1;
public static Map<String, String> getDefaultH264Params(boolean isHighProfile) {
final Map<String, String> params = new HashMap<>();
params.put(VideoCodecInfo.H264_FMTP_LEVEL_ASYMMETRY_ALLOWED, "1");
params.put(VideoCodecInfo.H264_FMTP_PACKETIZATION_MODE, "1");
params.put(VideoCodecInfo.H264_FMTP_PROFILE_LEVEL_ID,
isHighProfile ? VideoCodecInfo.H264_CONSTRAINED_HIGH_3_1
: VideoCodecInfo.H264_CONSTRAINED_BASELINE_3_1);
return params;
}
public static VideoCodecInfo DEFAULT_H264_BASELINE_PROFILE_CODEC =
new VideoCodecInfo("H264", getDefaultH264Params(/* isHighProfile= */ false));
public static VideoCodecInfo DEFAULT_H264_HIGH_PROFILE_CODEC =
new VideoCodecInfo("H264", getDefaultH264Params(/* isHighProfile= */ true));
}

View File

@@ -15,6 +15,7 @@
*/
package org.jitsi.meet.sdk;
import android.app.Application;
import android.content.Context;
import android.util.Log;
@@ -22,6 +23,7 @@ import androidx.annotation.NonNull;
import androidx.startup.Initializer;
import com.facebook.soloader.SoLoader;
import org.wonday.orientation.OrientationActivityLifecycle;
import java.util.Collections;
import java.util.List;
@@ -37,6 +39,10 @@ public class JitsiInitializer implements Initializer<Boolean> {
// Register our uncaught exception handler.
JitsiMeetUncaughtExceptionHandler.register();
// Register activity lifecycle handler for the orientation locker module.
((Application) context).registerActivityLifecycleCallbacks(OrientationActivityLifecycle.getInstance());
return true;
}

View File

@@ -21,6 +21,7 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Configuration;
import android.net.Uri;
import android.os.Bundle;
@@ -86,6 +87,14 @@ public class JitsiMeetActivity extends AppCompatActivity
// Overrides
//
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Intent intent = new Intent("onConfigurationChanged");
intent.putExtra("newConfig", newConfig);
this.sendBroadcast(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

View File

@@ -206,7 +206,7 @@ public class JitsiMeetView extends FrameLayout {
// by leaving the conference. However, React and, respectively,
// appProperties/initialProperties are declarative expressions i.e. one
// and the same URL will not trigger an automatic re-render in the
// JavaScript source code. The workaround implemented bellow introduces
// JavaScript source code. The workaround implemented below introduces
// "imperativeness" in React Component props by defining a unique value
// per setProps() invocation.
props.putLong("timestamp", System.currentTimeMillis());

View File

@@ -193,7 +193,7 @@ class RNConnectionService extends ReactContextBaseJavaModule {
* Called by the JS side to update the call's state.
*
* @param callUUID - the call's UUID.
* @param callState - the map which carries infor about the current call's
* @param callState - the map which carries info about the current call's
* state. See static fields in {@link ConnectionService.ConnectionImpl}
* prefixed with "KEY_" for the values supported by the Android
* implementation.

View File

@@ -31,12 +31,12 @@ import com.facebook.react.common.LifecycleState;
import com.facebook.react.jscexecutor.JSCExecutorFactory;
import com.facebook.react.modules.core.DeviceEventManagerModule;
import com.facebook.react.uimanager.ViewManager;
import com.oney.WebRTCModule.EglUtils;
import com.oney.WebRTCModule.RTCVideoViewManager;
import com.oney.WebRTCModule.WebRTCModule;
import org.devio.rn.splashscreen.SplashScreenModule;
import org.webrtc.SoftwareVideoDecoderFactory;
import org.webrtc.SoftwareVideoEncoderFactory;
import org.webrtc.EglBase;
import org.webrtc.audio.AudioDeviceModule;
import org.webrtc.audio.JavaAudioDeviceModule;
@@ -85,11 +85,14 @@ class ReactInstanceManagerHolder {
WebRTCModule.Options options = new WebRTCModule.Options();
AudioDeviceModule adm = JavaAudioDeviceModule.builder(reactContext)
.setEnableVolumeLogger(false)
.createAudioDeviceModule();
options.setAudioDeviceModule(adm);
options.setVideoDecoderFactory(new SoftwareVideoDecoderFactory());
options.setVideoEncoderFactory(new SoftwareVideoEncoderFactory());
EglBase.Context eglContext = EglUtils.getRootEglBaseContext();
options.setVideoDecoderFactory(new WebRTCVideoDecoderFactory(eglContext));
options.setVideoEncoderFactory(new WebRTCVideoEncoderFactory(eglContext));
nativeModules.add(new WebRTCModule(reactContext, options));
@@ -128,6 +131,7 @@ class ReactInstanceManagerHolder {
new com.zmxv.RNSound.RNSoundPackage(),
new com.th3rdwave.safeareacontext.SafeAreaContextPackage(),
new com.horcrux.svg.SvgPackage(),
new org.wonday.orientation.OrientationPackage(),
new ReactPackageAdapter() {
@Override
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {

View File

@@ -0,0 +1,19 @@
package org.jitsi.meet.sdk;
/** Enumeration of supported video codec types. */
public enum VideoCodecMimeType {
VP8("video/x-vnd.on2.vp8"),
VP9("video/x-vnd.on2.vp9"),
H264("video/avc"),
AV1("video/av01");
private final String mimeType;
private VideoCodecMimeType(String mimeType) {
this.mimeType = mimeType;
}
String mimeType() {
return mimeType;
}
}

View File

@@ -0,0 +1,52 @@
package org.jitsi.meet.sdk;
import androidx.annotation.Nullable;
import org.webrtc.EglBase;
import org.webrtc.HardwareVideoDecoderFactory;
import org.webrtc.SoftwareVideoDecoderFactory;
import org.webrtc.VideoCodecInfo;
import org.webrtc.VideoDecoder;
import org.webrtc.VideoDecoderFactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* This is a custom video decoder factory for WebRTC which behaves similarly
* to the default one in iOS. It supports the following codecs:
*
* - In hardware: H.264 (baseline)
* - In software: VP8, VP9, AV1
*/
public class WebRTCVideoDecoderFactory implements VideoDecoderFactory {
private final VideoDecoderFactory hardwareVideoDecoderFactory;
private final VideoDecoderFactory softwareVideoDecoderFactory = new SoftwareVideoDecoderFactory();
public WebRTCVideoDecoderFactory(@Nullable EglBase.Context eglContext) {
this.hardwareVideoDecoderFactory = new HardwareVideoDecoderFactory(eglContext);
}
@Nullable
@Override
public VideoDecoder createDecoder(VideoCodecInfo codecInfo) {
if (codecInfo.name.equalsIgnoreCase(VideoCodecMimeType.H264.name())) {
return this.hardwareVideoDecoderFactory.createDecoder(codecInfo);
}
return this.softwareVideoDecoderFactory.createDecoder(codecInfo);
}
@Override
public VideoCodecInfo[] getSupportedCodecs() {
List<VideoCodecInfo> codecs = new ArrayList<>();
codecs.add(H264Utils.DEFAULT_H264_BASELINE_PROFILE_CODEC);
codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP8.name(), new HashMap<>()));
codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP9.name(), new HashMap<>()));
codecs.add(new VideoCodecInfo(VideoCodecMimeType.AV1.name(), new HashMap<>()));
return codecs.toArray(new VideoCodecInfo[codecs.size()]);
}
}

View File

@@ -0,0 +1,53 @@
package org.jitsi.meet.sdk;
import androidx.annotation.Nullable;
import org.webrtc.EglBase;
import org.webrtc.HardwareVideoEncoderFactory;
import org.webrtc.SoftwareVideoEncoderFactory;
import org.webrtc.VideoCodecInfo;
import org.webrtc.VideoEncoder;
import org.webrtc.VideoEncoderFactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* This is a custom video encoder factory for WebRTC which behaves similarly
* to the default one in iOS. It supports the following codecs:
*
* - In hardware: H.264 (baseline)
* - In software: VP8, VP9, AV1
*/
public class WebRTCVideoEncoderFactory implements VideoEncoderFactory {
private final VideoEncoderFactory hardwareVideoEncoderFactory;
private final VideoEncoderFactory softwareVideoEncoderFactory = new SoftwareVideoEncoderFactory();
public WebRTCVideoEncoderFactory(@Nullable EglBase.Context eglContext) {
this.hardwareVideoEncoderFactory =
new HardwareVideoEncoderFactory(eglContext, false, false);
}
@Nullable
@Override
public VideoEncoder createEncoder(VideoCodecInfo codecInfo) {
if (codecInfo.name.equalsIgnoreCase(VideoCodecMimeType.H264.name())) {
return this.hardwareVideoEncoderFactory.createEncoder(codecInfo);
}
return this.softwareVideoEncoderFactory.createEncoder(codecInfo);
}
@Override
public VideoCodecInfo[] getSupportedCodecs() {
List<VideoCodecInfo> codecs = new ArrayList<>();
codecs.add(H264Utils.DEFAULT_H264_BASELINE_PROFILE_CODEC);
codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP8.name(), new HashMap<>()));
codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP9.name(), new HashMap<>()));
codecs.add(new VideoCodecInfo(VideoCodecMimeType.AV1.name(), new HashMap<>()));
return codecs.toArray(new VideoCodecInfo[codecs.size()]);
}
}

View File

@@ -33,6 +33,8 @@ include ':react-native-keep-awake'
project(':react-native-keep-awake').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-keep-awake/android')
include ':react-native-masked-view_masked-view'
project(':react-native-masked-view_masked-view').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-masked-view/masked-view/android')
include ':react-native-orientation-locker'
project(':react-native-orientation-locker').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-orientation-locker/android')
include ':react-native-pager-view'
project(':react-native-pager-view').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-pager-view/android')
include ':react-native-performance'

6
app.js
View File

@@ -1,6 +1,10 @@
/* application specific logic */
import 'jquery';
// Re-export jQuery
// FIXME: Remove this requirement from torture tests.
import $ from 'jquery';
window.$ = window.jQuery = $;
import '@matrix-org/olm';

File diff suppressed because it is too large Load Diff

117
config.js
View File

@@ -22,6 +22,8 @@ if (subdomain.startsWith('<!--')) {
subdomain = '';
}
var enableJaaS = false;
var config = {
// Connection
//
@@ -63,10 +65,6 @@ var config = {
// issues related to insertable streams.
// disableE2EE: false,
// Enables/disables thumbnail reordering in the filmstrip. It is enabled by default unless explicitly
// disabled by the below option.
// enableThumbnailReordering: true,
// Enables XMPP WebSocket (as opposed to BOSH) for the given amount of users.
// mobileXmppWsThreshold: 10, // enable XMPP WebSockets on mobile for 10% of the users
@@ -81,15 +79,6 @@ var config = {
// This is useful when the client runs on a host with limited resources.
// noAutoPlayVideo: false,
// Enable / disable 500 Kbps bitrate cap on desktop tracks. When enabled,
// simulcast is turned off for the desktop share. If presenter is turned
// on while screensharing is in progress, the max bitrate is automatically
// adjusted to 2.5 Mbps. This takes a value between 0 and 1 which determines
// the probability for this to be enabled. This setting has been deprecated.
// desktopSharingFrameRate.max now determines whether simulcast will be enabled
// or disabled for the screenshare.
// capScreenshareBitrate: 1, // 0 to disable - deprecated.
// Whether to use fake constraints (height: 99999, width: 99999) when calling getDisplayMedia on
// Chromium based browsers. This is intended as a workaround for
// https://bugs.chromium.org/p/chromium/issues/detail?id=1056311
@@ -101,20 +90,6 @@ var config = {
// callStatsThreshold: 5, // enable callstats for 5% of the users.
},
// Feature Flags.
flags: {
// Enables source names in the signaling.
// sourceNameSignaling: false,
// Enables sending multiple video streams, i.e., camera and desktop tracks can be shared in the conference
// separately as two different streams instead of one composite stream.
// sendMultipleVideoStreams: false,
// Signal that this client supports receiving multiple video streams. Without this flag jicofo will enable
// multi-stream backward compatibility.
receiveMultipleVideoStreams: true,
},
// Disables moderator indicators.
// disableModeratorIndicator: false,
@@ -206,9 +181,12 @@ var config = {
// Specify audio quality stereo and opusMaxAverageBitrate values in order to enable HD audio.
// Beware, by doing so, you are disabling echo cancellation, noise suppression and AGC.
// Specify enableOpusDtx to enable support for opus-dtx where
// audio packets wont be transmitted while participant is silent or muted.
// audioQuality: {
// stereo: false,
// opusMaxAverageBitrate: null, // Value to fit the 6000 to 510000 range.
// enableOpusDtx: false,
// },
// Video
@@ -219,9 +197,29 @@ var config = {
// Specifies whether the raised hand will hide when someone becomes a dominant speaker or not
// disableRemoveRaisedHandOnFocus: false,
// speakerStats: {
// // Specifies whether the speaker stats is enable or not.
// disabled: false,
// // Specifies whether there will be a search field in speaker stats or not.
// disableSearch: false,
// // Specifies whether participants in speaker stats should be ordered or not, and with what priority.
// // 'role', <- Moderators on top.
// // 'name', <- Alphabetically by name.
// // 'hasLeft', <- The ones that have left in the bottom.
// order: [
// 'role',
// 'name',
// 'hasLeft',
// ],
// },
// DEPRECATED. Please use speakerStats.disableSearch instead.
// Specifies whether there will be a search field in speaker stats or not
// disableSpeakerStatsSearch: false,
// DEPRECATED. Please use speakerStats.order .
// Specifies whether participants in speaker stats should be ordered or not, and with what priority
// speakerStatsOrder: [
// 'role', <- Moderators on top
@@ -373,6 +371,14 @@ var config = {
// // Whether the feature should be enabled or not.
// enabled: false,
// // Translation languages.
// // Available languages can be found in
// // ./src/react/features/transcribing/translation-languages.json.
// translationLanguages: ['en', 'es', 'fr', 'ro'],
// // Important languages to show on the top of the language list.
// translationLanguagesHead: ['en'],
// // If true transcriber will use the application language.
// // The application language is either explicitly set by participants in their settings or automatically
// // detected based on the environment, e.g. if the app is opened in a chrome instance which
@@ -494,9 +500,6 @@ var config = {
// 720: 'high',
// },
//
// // Provides a way to resize the desktop track to 720p (if it is greater than 720p) before creating a canvas
// // for the presenter mode (camera picture-in-picture mode with screenshare).
// resizeDesktopForPresenter: false,
// },
// Notification timeouts
@@ -728,18 +731,19 @@ var config = {
// 'toggle-camera',
// 'undock-iframe',
// 'videoquality',
// 'whiteboard',
// ],
// Holds values related to toolbar visibility control.
// toolbarConfig: {
// // Moved from interfaceConfig.INITIAL_TOOLBAR_TIMEOUT
// // The initial numer of miliseconds for the toolbar buttons to be visible on screen.
// // The initial number of milliseconds for the toolbar buttons to be visible on screen.
// initialTimeout: 20000,
// // Moved from interfaceConfig.TOOLBAR_TIMEOUT
// // Number of miliseconds for the toolbar buttons to be visible on screen.
// // Number of milliseconds for the toolbar buttons to be visible on screen.
// timeout: 4000,
// // Moved from interfaceConfig.TOOLBAR_ALWAYS_VISIBLE
// // Whether toolbar should be always visible or should hide after x miliseconds.
// // Whether toolbar should be always visible or should hide after x milliseconds.
// alwaysVisible: false,
// // Indicates whether the toolbar should still autohide when chat is open
// autoHideWhileChatIsOpen: false,
@@ -763,11 +767,13 @@ var config = {
// 'desktop',
// 'download',
// 'embedmeeting',
// 'end-meeting',
// 'etherpad',
// 'feedback',
// 'filmstrip',
// 'fullscreen',
// 'hangup',
// 'hangup-menu',
// 'help',
// {
// key: 'invite',
@@ -800,6 +806,7 @@ var config = {
// key: 'add-passcode',
// preventExecution: false
// },
// 'whiteboard',
// ],
// List of pre meeting screens buttons to hide. The values must be one or more of the 5 allowed buttons:
@@ -822,6 +829,7 @@ var config = {
// Application ID and Secret.
// callStatsID: '',
// callStatsSecret: '',
// callStatsApplicationLogsDisabled: false,
// The callstats initialize config params as described in the API:
// https://docs.callstats.io/docs/javascript#callstatsinitialize-with-app-secret
@@ -958,6 +966,7 @@ var config = {
// PeerConnection states along with getStats metrics polled at the specified
// interval.
// rtcstatsEnabled: false,
// rtcstatsStoreLogs: false,
// In order to enable rtcstats one needs to provide a endpoint url.
// rtcstatsEndpoint: wss://rtcstats-server-pilot.jitsi.net/,
@@ -967,6 +976,10 @@ var config = {
// will only send data related to RTCPeerConnection events.
// rtcstatsPollInterval: 10000,
// This determines if rtcstats sends the SDP to the rtcstats server or replaces
// all SDPs with an empty string instead.
// rtcstatsSendSdp: false,
// Array of script URLs to load as lib-jitsi-meet "analytics handlers".
// scriptURLs: [
// "libs/analytics-ga.min.js", // google-analytics
@@ -1059,7 +1072,7 @@ var config = {
// maxConferenceSize: 200,
//
// // The maximum number of e2e ping messages per second for the whole conference to aim for.
// // This is used to contol the pacing of messages in order to reduce the load on the backend.
// // This is used to control the pacing of messages in order to reduce the load on the backend.
// maxMessagesPerSecond: 250,
// },
@@ -1155,7 +1168,7 @@ var config = {
// For a list of all possible theme tokens and their current defaults, please check:
// https://github.com/jitsi/jitsi-meet/tree/master/resources/custom-theme/custom-theme.json
// For a short explanations on each of the tokens, please check:
// https://github.com/jitsi/jitsi-meet/blob/master/react/features/base/ui/Tokens.js
// https://github.com/jitsi/jitsi-meet/blob/master/react/features/base/ui/Tokens.ts
// IMPORTANT!: This is work in progress so many of the various tokens are not yet applied in code
// or they are partially applied.
customTheme: {
@@ -1281,11 +1294,6 @@ var config = {
// {"countryCode":"US","tollFree":false,"formattedNumber":"+1 123-456-7890"}
// dialInConfCodeUrl is the conference mapper converting a meeting id to a PIN used for dial-in
// or the other way around (more info in resources/cloud-api.swagger)
//
// For JaaS customers the default values are:
// dialInNumbersUrl: 'https://conference-mapper.jitsi.net/v1/access/dids',
// dialInConfCodeUrl: 'https://conference-mapper.jitsi.net/v1/access',
//
// List of undocumented settings used in jitsi-meet
/**
@@ -1438,6 +1446,10 @@ var config = {
// // (displaying multiple participants on stage besides the vertical filmstrip)
// disableStageFilmstrip: false,
// // Default number of participants that can be displayed on stage.
// // The user can change this in settings. Number must be between 1 and 6.
// stageFilmstripParticipants: 1,
// // Disables the top panel (only shown when a user is sharing their screen).
// disableTopPanel: false,
@@ -1467,8 +1479,10 @@ var config = {
// // - chat: show the GIF as a message in chat
// // - all: all of the above. This is the default option
// displayMode: 'all',
// // How long the GIF should be displayed on the tile (in miliseconds).
// // How long the GIF should be displayed on the tile (in milliseconds).
// tileTime: 5000,
// // Limit results by rating: g, pg, pg-13, r. Default value: g.
// rating: 'pg',
// },
// Logging
@@ -1477,11 +1491,30 @@ var config = {
// defaultLogLevel: 'trace',
// // Option to disable LogCollector (which stores the logs on CallStats).
// //disableLogCollector: true,
// // Indivual loggers are customizable.
// // Individual loggers are customizable.
// loggers: {
// // The following are too verbose in their logging with the default level.
// 'modules/RTC/TraceablePeerConnection.js': 'info',
// 'modules/statistics/CallStats.js': 'info',
// 'modules/xmpp/strophe.util.js': 'log',
// },
// Application logo url
// defaultLogoUrl: 'images/watermark.svg',
// Settings for the Excalidraw whiteboard integration.
// whiteboard: {
// // Whether the feature is enabled or not.
// enabled: true,
// // The server used to support whiteboard collaboration.
// // https://github.com/jitsi/excalidraw-backend
// collabServerBaseUrl: 'https://excalidraw-backend.example.com',
// },
};
// Set the default values for JaaS customers
if (enableJaaS) {
config.dialInNumbersUrl = 'https://conference-mapper.jitsi.net/v1/access/dids';
config.dialInConfCodeUrl = 'https://conference-mapper.jitsi.net/v1/access';
config.roomPasswordNumberOfDigits = 10; // skip re-adding it (do not remove comment)
}

View File

@@ -10,7 +10,7 @@ import {
connectionEstablished,
connectionFailed,
constructOptions
} from './react/features/base/connection/actions';
} from './react/features/base/connection/actions.web';
import { openDialog } from './react/features/base/dialog/actions';
import { setJWT } from './react/features/base/jwt';
import {
@@ -19,7 +19,7 @@ import {
} from './react/features/base/lib-jitsi-meet';
import { isFatalJitsiConnectionError } from './react/features/base/lib-jitsi-meet/functions';
import { getCustomerDetails } from './react/features/jaas/actions.any';
import { isVpaasMeeting, getJaasJWT } from './react/features/jaas/functions';
import { getJaasJWT, isVpaasMeeting } from './react/features/jaas/functions';
import {
setPrejoinDisplayNameRequired
} from './react/features/prejoin/actions';

View File

@@ -182,3 +182,8 @@ form {
background: rgba(0, 0, 0, .5);
border-radius: 4px;
}
/* Necessary for the new icons to work properly. */
.jitsi-icon svg path {
fill: inherit !important;
}

View File

@@ -22,7 +22,7 @@
display: flex;
flex-direction: column;
// extract header + tabs height
height: calc(100% - 102px);
height: calc(100% - 119px);
}
.chat-panel-no-tabs {
@@ -30,12 +30,18 @@
height: calc(100% - 70px);
}
#chat-conversation-container {
// extract message input height
height: calc(100% - 68px);
overflow: hidden;
position: relative;
}
#chatconversation {
box-sizing: border-box;
flex: 1;
font-size: 10pt;
// extract message input height
height: calc(100% - 68px);
height: 100%;
line-height: 20px;
overflow: auto;
padding: 16px;
@@ -525,41 +531,3 @@
background: #36383C;
border-radius: 3px;
}
.chat-tabs-container {
width: 100%;
border-bottom: thin solid #292929;
display: flex;
justify-content: space-around;
}
.chat-tab {
font-size: 1.2em;
padding-bottom: 0.5em;
width: 50%;
text-align: center;
color: #8B8B8B;
cursor: pointer;
}
.chat-tab-focus {
border-bottom-style: solid;
color: #FFF;
}
.chat-tab-title {
margin-right: 8px;
}
.chat-tab-badge {
background-color: #165ecc;
border-radius: 50%;
box-sizing: border-box;
font-weight: 700;
overflow: hidden;
text-align: center;
text-overflow: ellipsis;
vertical-align: middle;
padding: 0 4px;
color: #FFF;
}

View File

@@ -24,8 +24,6 @@
}
.drawer-menu {
background: #242528;
border-radius: 16px 16px 0 0;
overflow-y: auto;
margin-bottom: env(safe-area-inset-bottom, 0);
width: 100%;

View File

@@ -310,7 +310,7 @@ ol.poll-result-list {
}
#polls-panel {
height: calc(100% - 102px);
height: calc(100% - 119px);
}
.poll-container {

View File

@@ -45,3 +45,7 @@
margin: -16px -24px;
z-index: $popoverZ;
}
.excalidraw .popover {
margin: 0;
}

View File

@@ -25,7 +25,7 @@
box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25), 0px 0px 0px 1px rgba(0, 0, 0, 0.1);
border-radius: 3px;
cursor: pointer;
padding: 4px;
padding: 1px;
position: absolute;
right: -4px;
top: -3px;

View File

@@ -134,6 +134,20 @@
}
}
.hangup-menu-button {
background-color: $hangupMenuButtonColor;
@media (hover: hover) and (pointer: fine) {
&:hover {
background-color: $hangupMenuButtonHoverColor;
}
}
svg {
fill: #fff;
}
}
.profile-button-avatar {
align-items: center;
}

View File

@@ -6,7 +6,8 @@
$baseFontFamily: -apple-system, BlinkMacSystemFont, 'open_sanslight', 'Helvetica Neue', Helvetica, Arial, sans-serif;
$hangupColor:#DD3849;
$hangupHoverColor: #F25363;
$hangupFontSize: 2em;
$hangupMenuButtonColor:#0056E0;;
$hangupMenuButtonHoverColor: #246FE5;
/**
* Size variables.
@@ -43,7 +44,6 @@ $newToolbarSizeMobile: 60px;
$newToolbarSizeWithPadding: calc(#{$newToolbarSize} + 24px);
$toolbarTitleFontSize: 19px;
$overflowMenuItemColor: #fff;
$overflowMenuItemBackground: #36383C;
/**
@@ -86,7 +86,7 @@ $chatPrivateMessageBackgroundColor: rgb(153, 69, 77);
$chatRemoteMessageBackgroundColor: #242528;
$sidebarWidth: 315px;
/**
/**
* Misc.
*/
$borderRadius: 4px;
@@ -101,8 +101,6 @@ $zindex0: 0;
$zindex1: 1;
$zindex2: 2;
$zindex3: 3;
$toolbarBackgroundZ: 4;
$labelsZ: 5;
$subtitlesZ: 7;
$popoverZ: 8;
$reloadZ: 20;
@@ -111,10 +109,7 @@ $ringingZ: 300;
$sideToolbarContainerZ: 300;
$toolbarZ: 250;
$drawerZ: 351;
$tooltipsZ: 401;
$dropdownMaskZ: 900;
$dropdownZ: 901;
$centeredVideoLabelZ: 1010;
$overlayZ: 1016;
// Place filmstrip videos over toolbar in order
// to make connection info visible.
@@ -248,7 +243,6 @@ $chromeExtensionBannerRightInMeeeting: 10px;
/**
* media type thresholds
*/
$smallScreen: 700px;
$verySmallScreen: 500px;
/**

View File

@@ -8,6 +8,7 @@
border-radius: 3px;
overflow: auto;
padding: 8px;
margin-bottom: 8px;
}
&-entry {

View File

@@ -3,6 +3,7 @@
* tiled thumbnail experience.
*/
.tile-view,
.whiteboard-container,
.stage-filmstrip {
/**
* Let the avatar grow with the tile.

View File

@@ -38,3 +38,7 @@
margin-top: 2px;
display: block;
}
.dialog-bottom-margin {
margin-bottom: 5px;
}

View File

@@ -9,7 +9,6 @@
font-size: 15px;
margin-left: auto;
margin-top: 16px;
width: auto;
}
&-code {

View File

@@ -46,6 +46,8 @@
}
.feedback-dialog {
margin-bottom: 5px;
.details {
textarea {
min-height: 100px;

View File

@@ -84,56 +84,6 @@
}
}
&.icon-container {
display: none;
&.active {
display: flex;
width: calc(100% - 26px);
padding: 8px 8px 8px 16px;
background: #2A3A4B;
border: 1px solid #5E6D7A;
border-top: none;
border-radius: 0 0 3px 3px;
.copy-invite-icon, .provider-icon {
align-items: center;
cursor: pointer;
display: flex;
height: 40px;
place-content: center;
width: 40px;
}
&:hover > div:hover {
background-color: rgba(255, 255, 255, 0.2);
border-radius: 4px;
}
& > :not(:last-child) {
margin-right: 16px;
}
.copy-invite-icon > div > svg > path {
fill: #A4B8D1;
}
}
}
&.dial-in-display {
.info-label {
color: #A4B8D1;
}
.dial-in-copy {
display: inline-block;
vertical-align: middle;
cursor: pointer;
height: 24px;
}
}
&.invite-buttons {
width: 100%;
text-align: right;

View File

@@ -1,3 +1,7 @@
.share-audio-dialog-container {
max-height: none;
}
.share-audio-dialog {
.share-audio-animation {
width: 100%;

View File

@@ -28,7 +28,7 @@
color: #6FB1EA;
}
& > :first-child:not(:last-child) {
& > :not(:last-child) {
margin-right: 24px;
}
}

View File

@@ -204,3 +204,7 @@
}
}
}
.lobby-button-margin {
margin-bottom: 16px;
}

View File

@@ -6,8 +6,6 @@ $baseLight: #FFFFFF;
/**
* Controls
*/
$controlBackground: $baseLight;
$controlColor: #333333;
$sliderTrackBackground: #474747;
$sliderThumbBackground: #3572b0;
@@ -60,42 +58,21 @@ $readOnlyInputColor: #a7a7a7;
$defaultDarkSelectionColor: #ccc;
$buttonFontWeight: 400;
$labelFontWeight: 400;
$hintFontSize: em(13, 14);
$linkFontColor: #3572b0;
$linkHoverFontColor: darken(#3572b0, 10%);
$dropdownColor: #333;
$errorColor: #c61600;
// Feedback colors
$feedbackCancelFontColor: #333;
// Popover colors
$popoverFontColor: #ffffff !important;
$popupSliderColor: #0376da;
// Toolbar
$secondaryToolbarBg: rgba(0, 0, 0, 0.5);
// TOFIX: Once moved to react rename to match the side panel class name.
$sideToolbarContainerBg: rgba(0, 0, 0, 0.75);
$toolbarBackground: rgba(0, 0, 0, 0.5);
$toolbarBadgeBackground: #165ECC;
$toolbarBadgeColor: #FFFFFF;
$toolbarButtonColor: #FFFFFF;
$toolbarSelectBackground: rgba(0, 0, 0, .6);
$toolbarTitleColor: #FFFFFF;
$toolbarToggleBackground: #12499C;
/**
* Forms
*/
//dropdown
$selectFontColor: $controlColor;
$selectBg: $controlBackground;
$selectActiveBg: darken($controlBackground, 5%);
$selectActiveItemBg: darken($controlBackground, 20%);
/**
* TODO: Replace by themed component.
*/
$videoQualityActive: #57A0ff;
$selectBg: $baseLight;

6
debian/control vendored
View File

@@ -20,7 +20,7 @@ Description: WebRTC JavaScript video conferences
Package: jitsi-meet-web-config
Architecture: all
Depends: openssl, nginx | nginx-full | nginx-extras | apache2
Depends: openssl, nginx | nginx-full | nginx-extras | openresty | apache2, curl
Description: Configuration for web serving of Jitsi Meet
Jitsi Meet is a WebRTC JavaScript application that uses Jitsi
Videobridge to provide high quality, scalable video conferences.
@@ -33,7 +33,7 @@ Description: Configuration for web serving of Jitsi Meet
Package: jitsi-meet-prosody
Architecture: all
Depends: openssl, prosody (>= 0.11.0) | prosody-trunk | prosody-0.12 | prosody-0.11, lua-sec, lua-basexx, lua-luaossl, lua-cjson
Depends: openssl, prosody (>= 0.11.7) | prosody-trunk | prosody-0.12 | prosody-0.11, lua-sec, lua-basexx, lua-luaossl, lua-cjson, lua-inspect
Replaces: jitsi-meet-tokens
Description: Prosody configuration for Jitsi Meet
Jitsi Meet is a WebRTC JavaScript application that uses Jitsi
@@ -47,7 +47,7 @@ Description: Prosody configuration for Jitsi Meet
Package: jitsi-meet-tokens
Architecture: all
Depends: ${misc:Depends}, prosody-trunk | prosody-0.11 | prosody-0.12 | prosody (>= 0.11.2), jitsi-meet-prosody
Depends: ${misc:Depends}, prosody-trunk | prosody-0.11 | prosody-0.12 | prosody (>= 0.11.7), jitsi-meet-prosody
Description: Prosody token authentication plugin for Jitsi Meet
Package: jitsi-meet-turnserver

View File

@@ -1,2 +1,3 @@
doc/debian/jitsi-meet-prosody/prosody.cfg.lua-jvb.example /usr/share/jitsi-meet-prosody/
doc/debian/jitsi-meet-prosody/jaas.cfg.lua /usr/share/jitsi-meet-prosody/
resources/prosody-plugins/ /usr/share/jitsi-meet/

View File

@@ -83,6 +83,31 @@ case "$1" in
TURN_SECRET="$RET"
fi
SELF_SIGNED_CHOICE="Generate a new self-signed certificate"
# In the case of updating from an older version the configure of -prosody package may happen before the -config
# one, so if JAAS_INPUT is empty (the question is not asked), let's ask it now.
# If db_get returns an error (workaround for strange Debian failure) continue without stopping the config
db_get jitsi-meet/cert-choice || CERT_CHOICE=$SELF_SIGNED_CHOICE
CERT_CHOICE="$RET"
if [ -z "$CERT_CHOICE" ] ; then
db_input critical jitsi-meet/cert-choice || true
db_go
db_get jitsi-meet/cert-choice
CERT_CHOICE="$RET"
fi
if [ "$CERT_CHOICE" != "$SELF_SIGNED_CHOICE" ]; then
db_get jitsi-meet/jaas-choice
JAAS_INPUT="$RET"
if [ -z "$JAAS_INPUT" ] ; then
db_subst jitsi-meet/jaas-choice domain "${JVB_HOSTNAME}"
db_set jitsi-meet/jaas-choice false
db_input critical jitsi-meet/jaas-choice || true
db_go
db_get jitsi-meet/jaas-choice
JAAS_INPUT="$RET"
fi
fi
# and we're done with debconf
db_stop
@@ -141,7 +166,7 @@ case "$1" in
# New:
# Component "focus.jitmeet.example.com" "client_proxy"
# target_address = "focus@auth.jitmeet.example.com"
if grep -q "Component \"focus.$JVB_HOSTNAME\"" $PROSODY_HOST_CONFIG && ! grep "Component \"focus.$JVB_HOSTNAME\" \"client_proxy\"" $PROSODY_HOST_CONFIG ;then
if grep -q "Component \"focus.$JVB_HOSTNAME\"" $PROSODY_HOST_CONFIG && ! grep -q "Component \"focus.$JVB_HOSTNAME\" \"client_proxy\"" $PROSODY_HOST_CONFIG ;then
sed -i "s/Component \"focus.$JVB_HOSTNAME\"/Component \"focus.$JVB_HOSTNAME\" \"client_proxy\"\n target_address = \"$JICOFO_AUTH_USER@$JICOFO_AUTH_DOMAIN\"/g" $PROSODY_HOST_CONFIG
PROSODY_CONFIG_PRESENT="false"
fi
@@ -166,6 +191,29 @@ case "$1" in
PROSODY_CONFIG_PRESENT="false"
fi
JAAS_HOST_CONFIG="/etc/prosody/conf.avail/jaas.cfg.lua"
if [ "${JAAS_INPUT}" = "true" ] && [ ! -f $JAAS_HOST_CONFIG ]; then
sed -i "s/enabled = false -- Jitsi meet components/enabled = true -- Jitsi meet components/g" $PROSODY_HOST_CONFIG
PROSODY_CONFIG_PRESENT="false"
fi
# For those deployments that don't have the config in the jitsi-meet prosody config add the new jaas file
if [ ! -f $JAAS_HOST_CONFIG ] && ! grep -q "VirtualHost \"jigasi.meet.jitsi\"" $PROSODY_HOST_CONFIG; then
PROSODY_CONFIG_PRESENT="false"
cp /usr/share/jitsi-meet-prosody/jaas.cfg.lua $JAAS_HOST_CONFIG
sed -i "s/jitmeet.example.com/$JVB_HOSTNAME/g" $JAAS_HOST_CONFIG
fi
if [ "${JAAS_INPUT}" = "true" ]; then
JAAS_HOST_CONFIG_ENABLED="/etc/prosody/conf.d/jaas.cfg.lua "
if [ ! -f $JAAS_HOST_CONFIG_ENABLED ] && ! grep -q "VirtualHost \"jigasi.meet.jitsi\"" $PROSODY_HOST_CONFIG; then
if [ -f $JAAS_HOST_CONFIG ]; then
ln -s $JAAS_HOST_CONFIG $JAAS_HOST_CONFIG_ENABLED
PROSODY_CONFIG_PRESENT="false"
fi
fi
fi
# Make sure the focus@auth user's roster includes the proxy component (this is idempotent)
prosodyctl mod_roster_command subscribe focus.$JVB_HOSTNAME $JICOFO_AUTH_USER@$JICOFO_AUTH_DOMAIN
@@ -178,32 +226,6 @@ case "$1" in
ln -sf /var/lib/prosody/$JVB_HOSTNAME.crt /etc/prosody/certs/$JVB_HOSTNAME.crt
fi
PRTRUNK_INSTALL_CHECK="$(dpkg-query -f '${Status}' -W 'prosody-trunk' 2>/dev/null | awk '{print $3}' || true)"
PR10_INSTALL_CHECK="$(dpkg-query -f '${Status}' -W 'prosody-0.10' 2>/dev/null | awk '{print $3}' || true)"
PR_VER_INSTALLED=$(dpkg-query -f='${Version}\n' --show prosody 2>/dev/null || true)
if [ "$PRTRUNK_INSTALL_CHECK" = "installed" ] \
|| [ "$PRTRUNK_INSTALL_CHECK" = "unpacked" ] ; then
if [ -f $PROSODY_HOST_CONFIG ]; then
sed -i 's/storage = \"memory\"/storage = \"null\"/g' $PROSODY_HOST_CONFIG
# trigger a restart
PROSODY_CONFIG_PRESENT="false"
fi
fi
if [ "$PR10_INSTALL_CHECK" = "installed" ] \
|| [ "$PR10_INSTALL_CHECK" = "unpacked" ] \
|| dpkg --compare-versions "$PR_VER_INSTALLED" gt "0.10" ; then
# if the version is 0.10.X (>0.10 and <0.11)
if [ -f $PROSODY_HOST_CONFIG ] \
&& dpkg --compare-versions "$PR_VER_INSTALLED" lt "0.11" ; then
sed -i 's/storage = \"memory\"/storage = \"none\"/g' $PROSODY_HOST_CONFIG
# trigger a restart
PROSODY_CONFIG_PRESENT="false"
fi
fi
CERT_ADDED_TO_TRUST="false"
if [ ! -f /var/lib/prosody/$JICOFO_AUTH_DOMAIN.crt ]; then

View File

@@ -35,6 +35,8 @@ case "$1" in
if [ -n "$RET" ]; then
rm -f /etc/prosody/conf.avail/$JVB_HOSTNAME.cfg.lua
rm -f /etc/prosody/conf.d/$JVB_HOSTNAME.cfg.lua
rm -f /etc/prosody/conf.avail/jaas.cfg.lua
rm -f /etc/prosody/conf.d/jaas.cfg.lua
JICOFO_AUTH_DOMAIN="auth.$JVB_HOSTNAME"
# clean up generated certificates

View File

@@ -1,12 +1,12 @@
Template: jitsi-meet-prosody/jvb-hostname
Type: string
_Description: The hostname of the current installation:
The value for the hostname that is set in Jitsi Videobridge installation.
_Description: The domain of the current installation (e.g. meet.jitsi.com):
The value of the domain that is set in the Jitsi Videobridge installation.
Template: jitsi-videobridge/jvb-hostname
Type: string
_Description: The hostname of the current installation:
The value for the hostname that is set in Jitsi Videobridge installation.
_Description: The domain of the current installation (e.g. meet.jitsi.com):
The value of the domain that is set in the Jitsi Videobridge installation.
Template: jitsi-videobridge/jvbsecret
Type: password

View File

@@ -1,3 +1,2 @@
doc/debian/jitsi-meet-turn/turnserver.conf /usr/share/jitsi-meet-turnserver/
doc/debian/jitsi-meet/jitsi-meet.conf /usr/share/jitsi-meet-turnserver/
doc/debian/jitsi-meet-turn/coturn-certbot-deploy.sh /usr/share/jitsi-meet-turnserver/

View File

@@ -107,7 +107,9 @@ denied-peer-ip=240.0.0.0-255.255.255.255" >> $TURN_CONFIG
db_get jitsi-meet/cert-choice
CERT_CHOICE="$RET"
if [ "$CERT_CHOICE" = "I want to use my own certificate" ] ; then
UPLOADED_CERT_CHOICE="I want to use my own certificate"
LE_CERT_CHOICE="Let's Encrypt certificates"
if [ "$CERT_CHOICE" = "$UPLOADED_CERT_CHOICE" ]; then
db_get jitsi-meet/cert-path-key
CERT_KEY="$RET"
db_get jitsi-meet/cert-path-crt
@@ -120,22 +122,13 @@ denied-peer-ip=240.0.0.0-255.255.255.255" >> $TURN_CONFIG
CERT_CRT_ESC=$(echo $CERT_CRT | sed 's/\./\\\./g')
CERT_CRT_ESC=$(echo $CERT_CRT_ESC | sed 's/\//\\\//g')
sed -i "s/cert=\/etc\/jitsi\/meet\/.*crt/cert=$CERT_CRT_ESC/g" $TURN_CONFIG
elif [ "$CERT_CHOICE" = "$LE_CERT_CHOICE" ]; then
/usr/share/jitsi-meet/scripts/coturn-le-update.sh ${JVB_HOSTNAME}
fi
sed -i "s/#TURNSERVER_ENABLED/TURNSERVER_ENABLED/g" /etc/default/coturn
invoke-rc.d coturn restart || true
NGINX_STREAM_CONFIG="/etc/nginx/modules-enabled/60-jitsi-meet.conf"
if [ -f $NGINX_STREAM_CONFIG ] ; then
echo "------------------------------------------------"
echo ""
echo "You have multiplexing enabled, it is recommended to disable it and migrate to using websockets for the bridge channel."
echo "The support for sctp data channels is deprecated and will be dropped at some point."
echo "How to do it at: https://jitsi.org/multiplexing-to-bridge-ws-howto"
echo ""
echo "------------------------------------------------"
fi
# and we're done with debconf
db_stop
;;

View File

@@ -1,9 +1,9 @@
Template: jitsi-meet-turnserver/jvb-hostname
Type: string
_Description: The hostname of the current installation:
The value for the hostname that is set in Jitsi Videobridge installation.
_Description: The domain of the current installation (e.g. meet.jitsi.com):
The value of the domain that is set in the Jitsi Videobridge installation.
Template: jitsi-videobridge/jvb-hostname
Type: string
_Description: The hostname of the current installation:
The value for the hostname that is set in Jitsi Videobridge installation.
_Description: The domain of the current installation (e.g. meet.jitsi.com):
The value of the domain that is set in the Jitsi Videobridge installation.

View File

@@ -1,8 +0,0 @@
#!/bin/sh -e
# Source debconf library.
. /usr/share/debconf/confmodule
# certificate type choice
db_input critical jitsi-meet/cert-choice || true
db_go

View File

@@ -43,14 +43,6 @@ case "$1" in
rm -f /etc/jitsi/meet/$JVB_HOSTNAME_OLD-config.js
fi
JVB_SERVE="false"
# this detect only old installations
RET=""
db_get jitsi-meet/jvb-serve || true
if [ "$RET" = "true" ] ; then
JVB_SERVE="true"
fi
# stores the hostname so we will reuse it later, like in purge
db_set jitsi-meet/jvb-hostname $JVB_HOSTNAME
@@ -65,6 +57,10 @@ case "$1" in
|| [ "$NGINX_EXTRAS_INSTALL_CHECK" = "unpacked" ] ; then
FORCE_NGINX="true"
fi
OPENRESTY_INSTALL_CHECK="$(dpkg-query -f '${Status}' -W 'openresty' 2>/dev/null | awk '{print $3}' || true)"
if [ "$OPENRESTY_INSTALL_CHECK" = "installed" ] || [ "$OPENRESTY_INSTALL_CHECK" = "unpacked" ] ; then
FORCE_OPENRESTY="true"
fi
APACHE_INSTALL_CHECK="$(dpkg-query -f '${Status}' -W 'apache2' 2>/dev/null | awk '{print $3}' || true)"
if [ "$APACHE_INSTALL_CHECK" = "installed" ] || [ "$APACHE_INSTALL_CHECK" = "unpacked" ] ; then
FORCE_APACHE="true"
@@ -77,13 +73,21 @@ case "$1" in
fi
UPLOADED_CERT_CHOICE="I want to use my own certificate"
LE_CERT_CHOICE="Let's Encrypt certificates"
# if first time config ask for certs, or if we are reconfiguring
if [ -z "$JVB_HOSTNAME_OLD" ] || [ "$RECONFIGURING" = "true" ] ; then
RET=""
# ask the question only if there is nothing stored, option to pre-set it on install in automations
db_get jitsi-meet/cert-choice
CERT_CHOICE="$RET"
if [ -z "$CERT_CHOICE" ] ; then
db_input critical jitsi-meet/cert-choice || true
db_go
db_get jitsi-meet/cert-choice
CERT_CHOICE="$RET"
fi
if [ "$CERT_CHOICE" = "$UPLOADED_CERT_CHOICE" ] ; then
if [ "$CERT_CHOICE" = "$UPLOADED_CERT_CHOICE" ]; then
RET=""
db_get jitsi-meet/cert-path-key
if [ -z "$RET" ] ; then
@@ -103,7 +107,7 @@ case "$1" in
fi
CERT_CRT="$RET"
else
# create self-signed certs
# create self-signed certs (we also need them for the case of LE so we can start nginx)
CERT_KEY="/etc/jitsi/meet/$JVB_HOSTNAME.key"
CERT_CRT="/etc/jitsi/meet/$JVB_HOSTNAME.crt"
HOST="$( (hostname -s; echo localhost) | head -n 1)"
@@ -116,6 +120,17 @@ case "$1" in
-extensions SAN \
-config <(cat /etc/ssl/openssl.cnf \
<(printf "[SAN]\nsubjectAltName=DNS:localhost,DNS:$JVB_HOSTNAME"))
if [ "$CERT_CHOICE" = "$LE_CERT_CHOICE" ]; then
db_subst jitsi-meet/email domain "${JVB_HOSTNAME}"
db_input critical jitsi-meet/email || true
db_go
db_get jitsi-meet/email
EMAIL="$RET"
if [ ! -z "$EMAIL" ] ; then
ISSUE_LE_CERT="true"
fi
fi
fi
fi
@@ -130,68 +145,82 @@ case "$1" in
sed -i "s/jitsi-meet.example.com/$JVB_HOSTNAME/g" $JITSI_MEET_CONFIG
fi
# getting rid of jetty serving web
if [[ "$JVB_SERVE" = "true" ]] ; then
JVB_CONFIG="/etc/jitsi/videobridge/sip-communicator.properties"
# we will write to the file if missing create it
if [ -f $JVB_CONFIG ] ; then
echo ""
echo "------------------------------------------------"
echo ""
echo "You are using jetty to serve jitsi-meet, we are now upgrading you to use nginx!"
echo ""
echo "If you are using Lets Encrypt certificates please re-run the script."
echo ""
echo "------------------------------------------------"
echo ""
sed -i "s/org.jitsi.videobridge.rest.jetty/#org.jitsi.videobridge.rest.jetty/g" $JVB_CONFIG
sed -i "s/org.jitsi.videobridge.TCP_HARVESTER_PORT/#org.jitsi.videobridge.TCP_HARVESTER_PORT/g" $JVB_CONFIG
if [ -d /run/systemd/system ]; then
systemctl restart jitsi-videobridge2.service >/dev/null || true
fi
# Removing this value will force nginx or apache to be locally configured
JVB_HOSTNAME_OLD=""
RET=""
db_get jitsi-meet/cert-choice
CERT_CHOICE="$RET"
# Fix certs on upgrade from jetty
if [ "$CERT_CHOICE" = "$UPLOADED_CERT_CHOICE" ] ; then
RET=""
db_get jitsi-meet/cert-path-key
CERT_KEY="$RET"
RET=""
db_get jitsi-meet/cert-path-crt
CERT_CRT="$RET"
else
# create self-signed certs
CERT_KEY="/etc/jitsi/meet/$JVB_HOSTNAME.key"
CERT_CRT="/etc/jitsi/meet/$JVB_HOSTNAME.crt"
fi
if [ "$CERT_CHOICE" = "$LE_CERT_CHOICE" ] || [ "$CERT_CHOICE" = "$UPLOADED_CERT_CHOICE" ]; then
# Make sure jaas-choice is not answered already
db_get jitsi-meet/jaas-choice
JAAS_INPUT="$RET"
if [ -z "$JAAS_INPUT" ] ; then
db_subst jitsi-meet/jaas-choice domain "${JVB_HOSTNAME}"
db_set jitsi-meet/jaas-choice false
db_input critical jitsi-meet/jaas-choice || true
db_go
db_get jitsi-meet/jaas-choice
JAAS_INPUT="$RET"
fi
db_set jitsi-meet/jvb-serve "false"
fi
if [[ "$FORCE_NGINX" = "true" && ( -z "$JVB_HOSTNAME_OLD" || "$RECONFIGURING" = "true" ) ]] ; then
if [ "${JAAS_INPUT}" = "true" ] && ! grep -q "^var enableJaaS = true;$" $JITSI_MEET_CONFIG; then
if grep -q "^var enableJaaS = false;$" $JITSI_MEET_CONFIG; then
sed -i "s/^var enableJaaS = false;$/var enableJaaS = true;/g" $JITSI_MEET_CONFIG
else
# old config, let's add the lines at the end. Adding var enableJaaS to avoid adding it on update again
echo "var enableJaaS = true;" >> $JITSI_MEET_CONFIG
echo "config.dialInNumbersUrl = 'https://conference-mapper.jitsi.net/v1/access/dids';" >> $JITSI_MEET_CONFIG
echo "config.dialInConfCodeUrl = 'https://conference-mapper.jitsi.net/v1/access';" >> $JITSI_MEET_CONFIG
# Sets roomPasswordNumberOfDigits only if there was not already set
if ! cat $JITSI_MEET_CONFIG | grep roomPasswordNumberOfDigits | grep -qv //; then
echo "config.roomPasswordNumberOfDigits = 10; // skip re-adding it (do not remove comment)" >> $JITSI_MEET_CONFIG
fi
fi
fi
# Fixes multi-stream flags to workaround problem with mobile joining a multi-stream call with multi-stream disabled
if ! grep -q "^config.flags.sourceNameSignaling*" $JITSI_MEET_CONFIG; then
echo "config.flags.sourceNameSignaling = true;" >> $JITSI_MEET_CONFIG
fi
if ! grep -q "^config.flags.sendMultipleVideoStreams*" $JITSI_MEET_CONFIG; then
echo "config.flags.sendMultipleVideoStreams = true;" >> $JITSI_MEET_CONFIG
fi
if ! grep -q "^config.flags.receiveMultipleVideoStreams*" $JITSI_MEET_CONFIG; then
echo "config.flags.receiveMultipleVideoStreams = true;" >> $JITSI_MEET_CONFIG
fi
if [[ "$FORCE_OPENRESTY" = "true" ]]; then
NGX_COMMON_CONF_PATH="/usr/local/openresty/nginx/conf/$JVB_HOSTNAME.conf"
NGX_SVC_NAME=openresty
OPENRESTY_NGX_CONF="/usr/local/openresty/nginx/conf/nginx.conf"
else
NGX_COMMON_CONF_PATH="/etc/nginx/sites-available/$JVB_HOSTNAME.conf"
NGX_SVC_NAME=nginx
fi
if [[ ( "$FORCE_NGINX" = "true" || "$FORCE_OPENRESTY" = "true" ) && ( -z "$JVB_HOSTNAME_OLD" || "$RECONFIGURING" = "true" ) ]] ; then
# this is a reconfigure, lets just delete old links
if [ "$RECONFIGURING" = "true" ] ; then
rm -f /etc/nginx/sites-enabled/$JVB_HOSTNAME_OLD.conf
rm -f /etc/jitsi/meet/$JVB_HOSTNAME_OLD-config.js
if [[ "$FORCE_OPENRESTY" = "true" ]]; then
sed -i "/include.*$JVB_HOSTNAME_OLD/d" "$OPENRESTY_NGX_CONF"
fi
fi
# nginx conf
if [ ! -f /etc/nginx/sites-available/$JVB_HOSTNAME.conf ] ; then
cp /usr/share/jitsi-meet-web-config/jitsi-meet.example /etc/nginx/sites-available/$JVB_HOSTNAME.conf
if [ ! -f /etc/nginx/sites-enabled/$JVB_HOSTNAME.conf ] ; then
ln -s /etc/nginx/sites-available/$JVB_HOSTNAME.conf /etc/nginx/sites-enabled/$JVB_HOSTNAME.conf
if [ ! -f "$NGX_COMMON_CONF_PATH" ] ; then
cp /usr/share/jitsi-meet-web-config/jitsi-meet.example "$NGX_COMMON_CONF_PATH"
if [ ! -f /etc/nginx/sites-enabled/$JVB_HOSTNAME.conf ] && ! [[ "$FORCE_OPENRESTY" = "true" ]] ; then
ln -s "$NGX_COMMON_CONF_PATH" /etc/nginx/sites-enabled/$JVB_HOSTNAME.conf
fi
sed -i "s/jitsi-meet.example.com/$JVB_HOSTNAME/g" "$NGX_COMMON_CONF_PATH"
if [[ "$FORCE_OPENRESTY" = "true" ]]; then
OPENRESTY_NGX_CONF_MD5_ORIG=$(dpkg-query -s openresty | sed -n '/\/nginx\.conf /{s@.* @@;p}')
OPENRESTY_NGX_CONF_MD5_USERS=$(md5sum "$OPENRESTY_NGX_CONF" | sed 's@ .*@@')
if [[ "$OPENRESTY_NGX_CONF_MD5_USERS" = "$OPENRESTY_NGX_CONF_MD5_ORIG" ]]; then
sed -i "/^http \x7b/,/^\x7d/s@^\x7d@\tinclude $NGX_COMMON_CONF_PATH;\n\x7d@" "$OPENRESTY_NGX_CONF"
fi
fi
sed -i "s/jitsi-meet.example.com/$JVB_HOSTNAME/g" /etc/nginx/sites-available/$JVB_HOSTNAME.conf
fi
if [ "$CERT_CHOICE" = "$UPLOADED_CERT_CHOICE" ] ; then
@@ -199,14 +228,14 @@ case "$1" in
CERT_KEY_ESC=$(echo $CERT_KEY | sed 's/\./\\\./g')
CERT_KEY_ESC=$(echo $CERT_KEY_ESC | sed 's/\//\\\//g')
sed -i "s/ssl_certificate_key\ \/etc\/jitsi\/meet\/.*key/ssl_certificate_key\ $CERT_KEY_ESC/g" \
/etc/nginx/sites-available/$JVB_HOSTNAME.conf
"$NGX_COMMON_CONF_PATH"
CERT_CRT_ESC=$(echo $CERT_CRT | sed 's/\./\\\./g')
CERT_CRT_ESC=$(echo $CERT_CRT_ESC | sed 's/\//\\\//g')
sed -i "s/ssl_certificate\ \/etc\/jitsi\/meet\/.*crt/ssl_certificate\ $CERT_CRT_ESC/g" \
/etc/nginx/sites-available/$JVB_HOSTNAME.conf
"$NGX_COMMON_CONF_PATH"
fi
invoke-rc.d nginx reload || true
invoke-rc.d $NGX_SVC_NAME reload || true
elif [[ "$FORCE_APACHE" = "true" && ( -z "$JVB_HOSTNAME_OLD" || "$RECONFIGURING" = "true" ) ]] ; then
# this is a reconfigure, lets just delete old links
@@ -239,12 +268,16 @@ case "$1" in
invoke-rc.d apache2 reload || true
fi
echo "----------------"
echo ""
echo "You can now switch to a Lets Encrypt certificate. To do so, execute:"
echo "/usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh"
echo ""
echo "----------------"
# If scripts fail they will print suggestions for next steps, do not fail install
# those can be re-run later
# run the scripts only on new install or when re-configuring
if [[ "$ISSUE_LE_CERT" = "true" && ( -z "$JVB_HOSTNAME_OLD" || "$RECONFIGURING" = "true" ) ]] ; then
/usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh $EMAIL $JVB_HOSTNAME || true
fi
JAAS_REG_ERROR=0
if [[ "${JAAS_INPUT}" = "true" && ( -z "$JVB_HOSTNAME_OLD" || "$RECONFIGURING" = "true" ) ]] ; then
/usr/share/jitsi-meet/scripts/register-jaas-account.sh $EMAIL $JVB_HOSTNAME || JAAS_REG_ERROR=$?
fi
echo ""
echo ""
@@ -254,10 +287,17 @@ case "$1" in
echo " .xMMMMNxkNc"
echo " dMMMMMkxXc"
echo " cNMMMNl.."
echo " .kMMMX; Interested in adding telephony to your Jitsi meetings?"
echo " ;XMMMO'"
echo " lNMMWO' Sign up on https://jaas.8x8.vc/#/components"
echo " lNMMM0, and follow the guide in the dev console."
if [ "${JAAS_INPUT}" != "true" ] || [ ${JAAS_REG_ERROR} -ne 0 ]; then
echo " .kMMMX; Interested in adding telephony to your Jitsi meetings?"
echo " ;XMMMO'"
echo " lNMMWO' Sign up on https://jaas.8x8.vc/components?host=${JVB_HOSTNAME}"
echo " lNMMM0, and follow the guide in the dev console."
else
echo " .kMMMX;"
echo " ;XMMMO' Congratulations! Now you can use telephony in your Jitsi meetings!"
echo " lNMMWO' We have created a free JaaS (Jitsi as a Service) account for you. "
echo " lNMMM0, You can login to https://jaas.8x8.vc/components to check our developer console and your account details."
fi
echo " lXMMMK:."
echo " ;KMMMNKd. 'oo,"
echo " 'xNMMMMXkkkkOKOl'"

View File

@@ -24,6 +24,9 @@ set -e
case "$1" in
remove)
if [ -x "/etc/init.d/openresty" ]; then
invoke-rc.d openresty reload || true
fi
if [ -x "/etc/init.d/nginx" ]; then
invoke-rc.d nginx reload || true
fi
@@ -38,6 +41,7 @@ case "$1" in
rm -f /etc/jitsi/meet/$JVB_HOSTNAME-config.js
rm -f /etc/nginx/sites-available/$JVB_HOSTNAME.conf
rm -f /etc/nginx/sites-enabled/$JVB_HOSTNAME.conf
rm -f /usr/local/openresty/nginx/conf/$JVB_HOSTNAME.conf
rm -f /etc/apache2/sites-available/$JVB_HOSTNAME.conf
rm -f /etc/apache2/sites-enabled/$JVB_HOSTNAME.conf
rm -f /etc/jitsi/meet/$JVB_HOSTNAME.key

View File

@@ -1,13 +1,13 @@
Template: jitsi-meet/cert-choice
Type: select
__Choices: Generate a new self-signed certificate (You will later get a chance to obtain a Let's encrypt certificate), I want to use my own certificate
_Description: SSL certificate for the Jitsi Meet instance
Jitsi Meet is best to be set up with an SSL certificate.
Having no certificate, a self-signed one will be generated.
By choosing self-signed you will later have a chance to install Lets Encrypt certificates.
Having a certificate signed by a recognised CA, it can be uploaded on the server
and point its location. The default filenames will be /etc/ssl/--domain.name--.key
for the key and /etc/ssl/--domain.name--.crt for the certificate.
__Choices: Let's Encrypt certificates, I want to use my own certificate, Generate a new self-signed certificate
_Description: SSL certificate
.
Jitsi Meet requires an SSL certificate. This installer can generate one automatically for your using "Lets Encrypt". This is the recommended and simplest option for most installations.
.
In the event you need to use a certificate of your own, you can configure its location which defaults to /etc/ssl/--domain.name--.key for the key and /etc/ssl/--domain.name--.crt for the certificate.
.
If you are a developer and are only looking for a quick way to test basic Jitsi Meet functionality then this installer can also generate a self-signed certificate.
Template: jitsi-meet/cert-path-key
Type: string
@@ -23,10 +23,27 @@ _Description: Full local server path to the SSL certificate file:
Template: jitsi-meet/jvb-hostname
Type: string
_Description: The hostname of the current installation:
The value for the hostname that is set in Jitsi Videobridge installation.
_Description: The domain of the current installation (e.g. meet.jitsi.com):
The value of the domain that is set in the Jitsi Videobridge installation.
Template: jitsi-videobridge/jvb-hostname
Type: string
_Description: Hostname:
The Jitsi Meet web config package needs the DNS hostname of your instance.
Template: jitsi-meet/jaas-choice
Type: boolean
_Description: Add telephony to your Jitsi meetings?
You can easily add dial-in support to your meetings. To allow this we would need your permission to create a free JaaS (Jitsi as a Service) account for you.
Template: jitsi-meet/email
Type: string
_Description: Enter your email:
To successfully issue Let's Encrypt certificates:
.
You need a working DNS record pointing to this machine(for hostname ${domain})"
.
You need to agree to the ACME server's Subscriber Agreement (https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf)
by providing an email address for important account notifications.
.
We will use the email for creating your JaaS (Jitsi as a Service) account if that option was selected.

View File

@@ -20,7 +20,7 @@ msgstr ""
#. Type: select
#. Choices
#: ../jitsi-meet-web-config.templates:1001
msgid "Generate a new self-signed certificate (You will later get a chance to obtain a Let's encrypt certificate)"
msgid "Generate a new self-signed certificate"
msgstr ""
#. Type: select
@@ -84,7 +84,7 @@ msgstr ""
#. Description
#: ../jitsi-meet-web-config.templates:4001
msgid ""
"The value for the hostname that is set in Jitsi Videobridge installation."
"The value of the domain that is set in the Jitsi Videobridge installation."
msgstr ""
#. Type: boolean

View File

@@ -0,0 +1,12 @@
-- Enables dial-in for Jitsi meet components customers
VirtualHost "jigasi.meet.jitsi"
modules_enabled = {
"ping";
"bosh";
"muc_password_check";
}
authentication = "token"
app_id = "jitsi";
asap_key_server = "https://jaas-public-keys.jitsi.net/jitsi-components/prod-8x8"
asap_accepted_issuers = { "jaas-components" }
asap_accepted_audiences = { "jigasi.jitmeet.example.com" }

View File

@@ -52,6 +52,7 @@ VirtualHost "jitmeet.example.com"
av_moderation_component = "avmoderation.jitmeet.example.com"
speakerstats_component = "speakerstats.jitmeet.example.com"
conference_duration_component = "conferenceduration.jitmeet.example.com"
end_conference_component = "endconference.jitmeet.example.com"
-- we need bosh
modules_enabled = {
"bosh";
@@ -60,13 +61,16 @@ VirtualHost "jitmeet.example.com"
"speakerstats";
"external_services";
"conference_duration";
"end_conference";
"muc_lobby_rooms";
"muc_breakout_rooms";
"av_moderation";
"room_metadata";
}
c2s_require_encryption = false
lobby_muc = "lobby.jitmeet.example.com"
breakout_rooms_muc = "breakout.jitmeet.example.com"
room_metadata_component = "metadata.jitmeet.example.com"
main_muc = "conference.jitmeet.example.com"
-- muc_lobby_whitelist = { "recorder.jitmeet.example.com" } -- Here we can whitelist jibri to enter lobby enabled rooms
@@ -123,6 +127,9 @@ Component "speakerstats.jitmeet.example.com" "speakerstats_component"
Component "conferenceduration.jitmeet.example.com" "conference_duration_component"
muc_component = "conference.jitmeet.example.com"
Component "endconference.jitmeet.example.com" "end_conference"
muc_component = "conference.jitmeet.example.com"
Component "avmoderation.jitmeet.example.com" "av_moderation_component"
muc_component = "conference.jitmeet.example.com"
@@ -136,18 +143,6 @@ Component "lobby.jitmeet.example.com" "muc"
"polls";
}
-- Enables dial-in for Jitsi meet components customers
-- Note: make sure you have the following packages installed: lua-basexx, liblua5.3-dev, libssl-dev, luarocks
-- and execute $ sudo luarocks install luajwtjitsi 3.0-0
VirtualHost "jigasi.meet.jitsi"
enabled = false -- Jitsi meet components customers remove this line
modules_enabled = {
"ping";
"bosh";
"muc_password_check";
}
authentication = "token"
app_id = "jitsi";
asap_key_server = "https://jaas-public-keys.jitsi.net/jitsi-components/prod-8x8"
asap_accepted_issuers = { "jaas-components" }
asap_accepted_audiences = { "jigasi.jitmeet.example.com" }
Component "metadata.jitmeet.example.com" "room_metadata_component"
muc_component = "conference.jitmeet.example.com"
breakout_rooms_component = "breakout.jitmeet.example.com"

View File

@@ -1,45 +0,0 @@
#!/bin/sh
set -e
COTURN_CERT_DIR="/etc/coturn/certs"
TURN_CONFIG="/etc/turnserver.conf"
# create a directory to store certs if it does not exists
if [ ! -d "$COTURN_CERT_DIR" ]; then
mkdir -p $COTURN_CERT_DIR
chown -R turnserver:turnserver /etc/coturn/
chmod -R 700 /etc/coturn/
fi
# This is a template and when copied to /etc/letsencrypt/renewal-hooks/deploy/
# during creating the Let's encrypt certs script
# jitsi-meet.example.com will be replaced with the real domain of deployment
for domain in $RENEWED_DOMAINS; do
case $domain in
jitsi-meet.example.com)
# Make sure the certificate and private key files are
# never world readable, even just for an instant while
# we're copying them into daemon_cert_root.
umask 077
cp "$RENEWED_LINEAGE/fullchain.pem" "$COTURN_CERT_DIR/$domain.fullchain.pem"
cp "$RENEWED_LINEAGE/privkey.pem" "$COTURN_CERT_DIR/$domain.privkey.pem"
# Apply the proper file ownership and permissions for
# the daemon to read its certificate and key.
chown turnserver "$COTURN_CERT_DIR/$domain.fullchain.pem" \
"$COTURN_CERT_DIR/$domain.privkey.pem"
chmod 400 "$COTURN_CERT_DIR/$domain.fullchain.pem" \
"$COTURN_CERT_DIR/$domain.privkey.pem"
if [ -f $TURN_CONFIG ] && grep -q "jitsi-meet coturn config" "$TURN_CONFIG" ; then
echo "Configuring turnserver"
sed -i "/^cert/c\cert=\/etc\/coturn\/certs\/${domain}.fullchain.pem" $TURN_CONFIG
sed -i "/^pkey/c\pkey=\/etc\/coturn\/certs\/${domain}.privkey.pem" $TURN_CONFIG
fi
service coturn restart
;;
esac
done

View File

@@ -16,6 +16,8 @@ no-tlsv1
no-tlsv1_1
# https://ssl-config.mozilla.org/#server=haproxy&version=2.1&config=intermediate&openssl=1.1.0g&guideline=5.4
cipher-list=ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
# without it there are errors when running on Ubuntu 20.04
dh2066
# jitsi-meet coturn relay disable config. Do not modify this line
denied-peer-ip=0.0.0.0-0.255.255.255
denied-peer-ip=10.0.0.0-10.255.255.255

Binary file not shown.

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Binary file not shown.

31
globals.d.ts vendored Normal file
View File

@@ -0,0 +1,31 @@
import { IStore } from "./react/features/app/types";
import { IConfig } from "./react/features/base/config/configType";
export {};
declare global {
const APP: {
store: IStore;
UI: any;
API: any;
conference: any;
debugLogs: any;
keyboardshortcut: {
registerShortcut: Function;
unregisterShortcut: Function;
openDialog: Function;
}
};
const interfaceConfig: any;
interface Window {
config: IConfig;
JITSI_MEET_LITE_SDK?: boolean;
interfaceConfig?: any;
JitsiMeetJS?: any;
}
const config: IConfig;
const JitsiMeetJS: any;
}

45
globals.native.d.ts vendored Normal file
View File

@@ -0,0 +1,45 @@
import { IConfig } from "./react/features/base/config/configType";
export {};
interface ILocation extends URL {
assign(url: string);
replace(url: string);
reload();
};
interface IWindow {
JITSI_MEET_LITE_SDK: boolean;
JitsiMeetJS: any;
config: IConfig;
document: any;
innerHeight: number;
innerWidth: number;
interfaceConfig: any;
location: ILocation;
self: any;
top: any;
onerror: (event: string, source: any, lineno: any, colno: any, e: Error) => void;
onunhandledrejection: (event: any) => void;
setInterval: typeof setInterval;
clearInterval: typeof clearInterval;
setTimeout: typeof setTimeout;
clearTimeout: typeof clearTimeout;
setImmediate: typeof setImmediate;
clearImmediate: typeof clearImmediate;
addEventListener: Function;
}
interface INavigator {
product: string;
}
declare global {
const APP: any;
const document: any;
const interfaceConfig: any;
const navigator: INavigator;
const window: IWindow;
}

View File

@@ -13,6 +13,7 @@
<link rel="manifest" id="manifest-placeholder">
<script>
window.EXCALIDRAW_ASSET_PATH = 'libs/';
// Dynamically generate the manifest location URL. It must be served from the document origin, and we may have
// the base pointing to the CDN. This way we can generate a full URL which will bypass the base.
document.querySelector('#manifest-placeholder').setAttribute('href', window.location.origin + '/manifest.json');

View File

@@ -27,7 +27,6 @@ var interfaceConfig = {
CLOSE_PAGE_GUEST_HINT: false, // A html text to be shown to guests on the close page, false disables it
DEFAULT_BACKGROUND: '#040404',
DEFAULT_LOGO_URL: 'images/watermark.svg',
DEFAULT_WELCOME_PAGE_LOGO_URL: 'images/watermark.svg',
DISABLE_DOMINANT_SPEAKER_INDICATOR: false,
@@ -241,6 +240,9 @@ var interfaceConfig = {
// Please use defaultLocalDisplayName from config.js
// DEFAULT_LOCAL_DISPLAY_NAME: 'me',
// Please use defaultLogoUrl from config.js
// DEFAULT_LOGO_URL: 'images/watermark.svg',
// Please use defaultRemoteDisplayName from config.js
// DEFAULT_REMOTE_DISPLAY_NAME: 'Fellow Jitster',

View File

@@ -42,6 +42,7 @@ target 'JitsiMeetSDK' do
pod 'CocoaLumberjack', '3.7.2'
pod 'ObjectiveDropboxOfficial', '6.2.3'
pod 'JitsiWebRTC', '~> 106.0.0'
end
target 'JitsiMeetSDKLite' do
@@ -72,8 +73,13 @@ post_install do |installer|
react_native_post_install(installer)
__apply_Xcode_12_5_M1_post_install_workaround(installer)
installer.pods_project.targets.each do |target|
# https://github.com/CocoaPods/CocoaPods/issues/11402
if target.respond_to?(:product_type) and target.product_type == "com.apple.product-type.bundle"
target.build_configurations.each do |config|
config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
end
end
target.build_configurations.each do |config|
config.build_settings['ENABLE_BITCODE'] = 'YES'
config.build_settings['SUPPORTS_MACCATALYST'] = 'NO'
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
end

View File

@@ -13,14 +13,14 @@ PODS:
- CocoaLumberjack/Core (= 3.7.2)
- CocoaLumberjack/Core (3.7.2)
- DoubleConversion (1.1.6)
- FBLazyVector (0.68.1)
- FBReactNativeSpec (0.68.1):
- FBLazyVector (0.68.5)
- FBReactNativeSpec (0.68.5):
- RCT-Folly (= 2021.06.28.00-v2)
- RCTRequired (= 0.68.1)
- RCTTypeSafety (= 0.68.1)
- React-Core (= 0.68.1)
- React-jsi (= 0.68.1)
- ReactCommon/turbomodule/core (= 0.68.1)
- RCTRequired (= 0.68.5)
- RCTTypeSafety (= 0.68.5)
- React-Core (= 0.68.5)
- React-jsi (= 0.68.5)
- ReactCommon/turbomodule/core (= 0.68.5)
- Firebase/Analytics (8.15.0):
- Firebase/Core
- Firebase/Core (8.15.0):
@@ -133,6 +133,7 @@ PODS:
- AppAuth/Core (~> 1.4)
- GTMSessionFetcher/Core (~> 1.5)
- GTMSessionFetcher/Core (1.7.0)
- JitsiWebRTC (106.0.0)
- libwebp (1.2.1):
- libwebp/demux (= 1.2.1)
- libwebp/mux (= 1.2.1)
@@ -149,6 +150,8 @@ PODS:
- nanopb/encode (2.30908.0)
- ObjectiveDropboxOfficial (6.2.3)
- PromisesObjC (2.1.1)
- PromisesSwift (2.1.1):
- PromisesObjC (= 2.1.1)
- RCT-Folly (2021.06.28.00-v2):
- boost
- DoubleConversion
@@ -160,201 +163,201 @@ PODS:
- DoubleConversion
- fmt (~> 6.2.1)
- glog
- RCTRequired (0.68.1)
- RCTTypeSafety (0.68.1):
- FBLazyVector (= 0.68.1)
- RCTRequired (0.68.5)
- RCTTypeSafety (0.68.5):
- FBLazyVector (= 0.68.5)
- RCT-Folly (= 2021.06.28.00-v2)
- RCTRequired (= 0.68.1)
- React-Core (= 0.68.1)
- React (0.68.1):
- React-Core (= 0.68.1)
- React-Core/DevSupport (= 0.68.1)
- React-Core/RCTWebSocket (= 0.68.1)
- React-RCTActionSheet (= 0.68.1)
- React-RCTAnimation (= 0.68.1)
- React-RCTBlob (= 0.68.1)
- React-RCTImage (= 0.68.1)
- React-RCTLinking (= 0.68.1)
- React-RCTNetwork (= 0.68.1)
- React-RCTSettings (= 0.68.1)
- React-RCTText (= 0.68.1)
- React-RCTVibration (= 0.68.1)
- React-callinvoker (0.68.1)
- React-Codegen (0.68.1):
- FBReactNativeSpec (= 0.68.1)
- RCTRequired (= 0.68.5)
- React-Core (= 0.68.5)
- React (0.68.5):
- React-Core (= 0.68.5)
- React-Core/DevSupport (= 0.68.5)
- React-Core/RCTWebSocket (= 0.68.5)
- React-RCTActionSheet (= 0.68.5)
- React-RCTAnimation (= 0.68.5)
- React-RCTBlob (= 0.68.5)
- React-RCTImage (= 0.68.5)
- React-RCTLinking (= 0.68.5)
- React-RCTNetwork (= 0.68.5)
- React-RCTSettings (= 0.68.5)
- React-RCTText (= 0.68.5)
- React-RCTVibration (= 0.68.5)
- React-callinvoker (0.68.5)
- React-Codegen (0.68.5):
- FBReactNativeSpec (= 0.68.5)
- RCT-Folly (= 2021.06.28.00-v2)
- RCTRequired (= 0.68.1)
- RCTTypeSafety (= 0.68.1)
- React-Core (= 0.68.1)
- React-jsi (= 0.68.1)
- React-jsiexecutor (= 0.68.1)
- ReactCommon/turbomodule/core (= 0.68.1)
- React-Core (0.68.1):
- RCTRequired (= 0.68.5)
- RCTTypeSafety (= 0.68.5)
- React-Core (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- ReactCommon/turbomodule/core (= 0.68.5)
- React-Core (0.68.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default (= 0.68.1)
- React-cxxreact (= 0.68.1)
- React-jsi (= 0.68.1)
- React-jsiexecutor (= 0.68.1)
- React-perflogger (= 0.68.1)
- React-Core/Default (= 0.68.5)
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-perflogger (= 0.68.5)
- Yoga
- React-Core/CoreModulesHeaders (0.68.1):
- React-Core/CoreModulesHeaders (0.68.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.68.1)
- React-jsi (= 0.68.1)
- React-jsiexecutor (= 0.68.1)
- React-perflogger (= 0.68.1)
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-perflogger (= 0.68.5)
- Yoga
- React-Core/Default (0.68.1):
- React-Core/Default (0.68.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-cxxreact (= 0.68.1)
- React-jsi (= 0.68.1)
- React-jsiexecutor (= 0.68.1)
- React-perflogger (= 0.68.1)
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-perflogger (= 0.68.5)
- Yoga
- React-Core/DevSupport (0.68.1):
- React-Core/DevSupport (0.68.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default (= 0.68.1)
- React-Core/RCTWebSocket (= 0.68.1)
- React-cxxreact (= 0.68.1)
- React-jsi (= 0.68.1)
- React-jsiexecutor (= 0.68.1)
- React-jsinspector (= 0.68.1)
- React-perflogger (= 0.68.1)
- React-Core/Default (= 0.68.5)
- React-Core/RCTWebSocket (= 0.68.5)
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-jsinspector (= 0.68.5)
- React-perflogger (= 0.68.5)
- Yoga
- React-Core/RCTActionSheetHeaders (0.68.1):
- React-Core/RCTActionSheetHeaders (0.68.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.68.1)
- React-jsi (= 0.68.1)
- React-jsiexecutor (= 0.68.1)
- React-perflogger (= 0.68.1)
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-perflogger (= 0.68.5)
- Yoga
- React-Core/RCTAnimationHeaders (0.68.1):
- React-Core/RCTAnimationHeaders (0.68.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.68.1)
- React-jsi (= 0.68.1)
- React-jsiexecutor (= 0.68.1)
- React-perflogger (= 0.68.1)
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-perflogger (= 0.68.5)
- Yoga
- React-Core/RCTBlobHeaders (0.68.1):
- React-Core/RCTBlobHeaders (0.68.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.68.1)
- React-jsi (= 0.68.1)
- React-jsiexecutor (= 0.68.1)
- React-perflogger (= 0.68.1)
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-perflogger (= 0.68.5)
- Yoga
- React-Core/RCTImageHeaders (0.68.1):
- React-Core/RCTImageHeaders (0.68.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.68.1)
- React-jsi (= 0.68.1)
- React-jsiexecutor (= 0.68.1)
- React-perflogger (= 0.68.1)
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-perflogger (= 0.68.5)
- Yoga
- React-Core/RCTLinkingHeaders (0.68.1):
- React-Core/RCTLinkingHeaders (0.68.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.68.1)
- React-jsi (= 0.68.1)
- React-jsiexecutor (= 0.68.1)
- React-perflogger (= 0.68.1)
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-perflogger (= 0.68.5)
- Yoga
- React-Core/RCTNetworkHeaders (0.68.1):
- React-Core/RCTNetworkHeaders (0.68.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.68.1)
- React-jsi (= 0.68.1)
- React-jsiexecutor (= 0.68.1)
- React-perflogger (= 0.68.1)
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-perflogger (= 0.68.5)
- Yoga
- React-Core/RCTSettingsHeaders (0.68.1):
- React-Core/RCTSettingsHeaders (0.68.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.68.1)
- React-jsi (= 0.68.1)
- React-jsiexecutor (= 0.68.1)
- React-perflogger (= 0.68.1)
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-perflogger (= 0.68.5)
- Yoga
- React-Core/RCTTextHeaders (0.68.1):
- React-Core/RCTTextHeaders (0.68.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.68.1)
- React-jsi (= 0.68.1)
- React-jsiexecutor (= 0.68.1)
- React-perflogger (= 0.68.1)
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-perflogger (= 0.68.5)
- Yoga
- React-Core/RCTVibrationHeaders (0.68.1):
- React-Core/RCTVibrationHeaders (0.68.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.68.1)
- React-jsi (= 0.68.1)
- React-jsiexecutor (= 0.68.1)
- React-perflogger (= 0.68.1)
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-perflogger (= 0.68.5)
- Yoga
- React-Core/RCTWebSocket (0.68.1):
- React-Core/RCTWebSocket (0.68.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default (= 0.68.1)
- React-cxxreact (= 0.68.1)
- React-jsi (= 0.68.1)
- React-jsiexecutor (= 0.68.1)
- React-perflogger (= 0.68.1)
- React-Core/Default (= 0.68.5)
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-perflogger (= 0.68.5)
- Yoga
- React-CoreModules (0.68.1):
- React-CoreModules (0.68.5):
- RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.68.1)
- React-Codegen (= 0.68.1)
- React-Core/CoreModulesHeaders (= 0.68.1)
- React-jsi (= 0.68.1)
- React-RCTImage (= 0.68.1)
- ReactCommon/turbomodule/core (= 0.68.1)
- React-cxxreact (0.68.1):
- RCTTypeSafety (= 0.68.5)
- React-Codegen (= 0.68.5)
- React-Core/CoreModulesHeaders (= 0.68.5)
- React-jsi (= 0.68.5)
- React-RCTImage (= 0.68.5)
- ReactCommon/turbomodule/core (= 0.68.5)
- React-cxxreact (0.68.5):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-callinvoker (= 0.68.1)
- React-jsi (= 0.68.1)
- React-jsinspector (= 0.68.1)
- React-logger (= 0.68.1)
- React-perflogger (= 0.68.1)
- React-runtimeexecutor (= 0.68.1)
- React-jsi (0.68.1):
- React-callinvoker (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsinspector (= 0.68.5)
- React-logger (= 0.68.5)
- React-perflogger (= 0.68.5)
- React-runtimeexecutor (= 0.68.5)
- React-jsi (0.68.5):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-jsi/Default (= 0.68.1)
- React-jsi/Default (0.68.1):
- React-jsi/Default (= 0.68.5)
- React-jsi/Default (0.68.5):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-jsiexecutor (0.68.1):
- React-jsiexecutor (0.68.5):
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-cxxreact (= 0.68.1)
- React-jsi (= 0.68.1)
- React-perflogger (= 0.68.1)
- React-jsinspector (0.68.1)
- React-logger (0.68.1):
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-perflogger (= 0.68.5)
- React-jsinspector (0.68.5)
- React-logger (0.68.5):
- glog
- react-native-background-timer (2.4.1):
- React-Core
@@ -364,6 +367,8 @@ PODS:
- React
- react-native-netinfo (7.1.7):
- React-Core
- react-native-orientation-locker (1.5.0):
- React-Core
- react-native-pager-view (5.4.9):
- React-Core
- react-native-performance (2.1.0):
@@ -374,83 +379,85 @@ PODS:
- React-Core
- react-native-splash-screen (3.3.0):
- React-Core
- react-native-video (5.2.0):
- react-native-video (6.0.0-alpha.1):
- React-Core
- react-native-video/Video (= 5.2.0)
- react-native-video/Video (5.2.0):
- react-native-video/Video (= 6.0.0-alpha.1)
- react-native-video/Video (6.0.0-alpha.1):
- PromisesSwift
- React-Core
- react-native-webrtc (1.100.1):
- react-native-webrtc (1.106.1):
- JitsiWebRTC (~> 106.0.0)
- React-Core
- react-native-webview (11.15.1):
- React-Core
- React-perflogger (0.68.1)
- React-RCTActionSheet (0.68.1):
- React-Core/RCTActionSheetHeaders (= 0.68.1)
- React-RCTAnimation (0.68.1):
- React-perflogger (0.68.5)
- React-RCTActionSheet (0.68.5):
- React-Core/RCTActionSheetHeaders (= 0.68.5)
- React-RCTAnimation (0.68.5):
- RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.68.1)
- React-Codegen (= 0.68.1)
- React-Core/RCTAnimationHeaders (= 0.68.1)
- React-jsi (= 0.68.1)
- ReactCommon/turbomodule/core (= 0.68.1)
- React-RCTBlob (0.68.1):
- RCTTypeSafety (= 0.68.5)
- React-Codegen (= 0.68.5)
- React-Core/RCTAnimationHeaders (= 0.68.5)
- React-jsi (= 0.68.5)
- ReactCommon/turbomodule/core (= 0.68.5)
- React-RCTBlob (0.68.5):
- RCT-Folly (= 2021.06.28.00-v2)
- React-Codegen (= 0.68.1)
- React-Core/RCTBlobHeaders (= 0.68.1)
- React-Core/RCTWebSocket (= 0.68.1)
- React-jsi (= 0.68.1)
- React-RCTNetwork (= 0.68.1)
- ReactCommon/turbomodule/core (= 0.68.1)
- React-RCTImage (0.68.1):
- React-Codegen (= 0.68.5)
- React-Core/RCTBlobHeaders (= 0.68.5)
- React-Core/RCTWebSocket (= 0.68.5)
- React-jsi (= 0.68.5)
- React-RCTNetwork (= 0.68.5)
- ReactCommon/turbomodule/core (= 0.68.5)
- React-RCTImage (0.68.5):
- RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.68.1)
- React-Codegen (= 0.68.1)
- React-Core/RCTImageHeaders (= 0.68.1)
- React-jsi (= 0.68.1)
- React-RCTNetwork (= 0.68.1)
- ReactCommon/turbomodule/core (= 0.68.1)
- React-RCTLinking (0.68.1):
- React-Codegen (= 0.68.1)
- React-Core/RCTLinkingHeaders (= 0.68.1)
- React-jsi (= 0.68.1)
- ReactCommon/turbomodule/core (= 0.68.1)
- React-RCTNetwork (0.68.1):
- RCTTypeSafety (= 0.68.5)
- React-Codegen (= 0.68.5)
- React-Core/RCTImageHeaders (= 0.68.5)
- React-jsi (= 0.68.5)
- React-RCTNetwork (= 0.68.5)
- ReactCommon/turbomodule/core (= 0.68.5)
- React-RCTLinking (0.68.5):
- React-Codegen (= 0.68.5)
- React-Core/RCTLinkingHeaders (= 0.68.5)
- React-jsi (= 0.68.5)
- ReactCommon/turbomodule/core (= 0.68.5)
- React-RCTNetwork (0.68.5):
- RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.68.1)
- React-Codegen (= 0.68.1)
- React-Core/RCTNetworkHeaders (= 0.68.1)
- React-jsi (= 0.68.1)
- ReactCommon/turbomodule/core (= 0.68.1)
- React-RCTSettings (0.68.1):
- RCTTypeSafety (= 0.68.5)
- React-Codegen (= 0.68.5)
- React-Core/RCTNetworkHeaders (= 0.68.5)
- React-jsi (= 0.68.5)
- ReactCommon/turbomodule/core (= 0.68.5)
- React-RCTSettings (0.68.5):
- RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.68.1)
- React-Codegen (= 0.68.1)
- React-Core/RCTSettingsHeaders (= 0.68.1)
- React-jsi (= 0.68.1)
- ReactCommon/turbomodule/core (= 0.68.1)
- React-RCTText (0.68.1):
- React-Core/RCTTextHeaders (= 0.68.1)
- React-RCTVibration (0.68.1):
- RCTTypeSafety (= 0.68.5)
- React-Codegen (= 0.68.5)
- React-Core/RCTSettingsHeaders (= 0.68.5)
- React-jsi (= 0.68.5)
- ReactCommon/turbomodule/core (= 0.68.5)
- React-RCTText (0.68.5):
- React-Core/RCTTextHeaders (= 0.68.5)
- React-RCTVibration (0.68.5):
- RCT-Folly (= 2021.06.28.00-v2)
- React-Codegen (= 0.68.1)
- React-Core/RCTVibrationHeaders (= 0.68.1)
- React-jsi (= 0.68.1)
- ReactCommon/turbomodule/core (= 0.68.1)
- React-runtimeexecutor (0.68.1):
- React-jsi (= 0.68.1)
- ReactCommon/turbomodule/core (0.68.1):
- React-Codegen (= 0.68.5)
- React-Core/RCTVibrationHeaders (= 0.68.5)
- React-jsi (= 0.68.5)
- ReactCommon/turbomodule/core (= 0.68.5)
- React-runtimeexecutor (0.68.5):
- React-jsi (= 0.68.5)
- ReactCommon/turbomodule/core (0.68.5):
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-callinvoker (= 0.68.1)
- React-Core (= 0.68.1)
- React-cxxreact (= 0.68.1)
- React-jsi (= 0.68.1)
- React-logger (= 0.68.1)
- React-perflogger (= 0.68.1)
- React-callinvoker (= 0.68.5)
- React-Core (= 0.68.5)
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-logger (= 0.68.5)
- React-perflogger (= 0.68.5)
- RNCalendarEvents (2.2.0):
- React
- RNCAsyncStorage (1.15.14):
- RNCAsyncStorage (1.17.3):
- React-Core
- RNCClipboard (1.5.1):
- React-Core
@@ -491,6 +498,7 @@ DEPENDENCIES:
- Firebase/DynamicLinks (~> 8.0)
- "giphy-react-native-sdk (from `../node_modules/@giphy/react-native-sdk`)"
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
- JitsiWebRTC (~> 106.0.0)
- ObjectiveDropboxOfficial (= 6.2.3)
- RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
- RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`)
@@ -511,6 +519,7 @@ DEPENDENCIES:
- react-native-get-random-values (from `../node_modules/react-native-get-random-values`)
- react-native-keep-awake (from `../node_modules/react-native-keep-awake`)
- "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)"
- react-native-orientation-locker (from `../node_modules/react-native-orientation-locker`)
- react-native-pager-view (from `../node_modules/react-native-pager-view`)
- react-native-performance (from `../node_modules/react-native-performance/ios`)
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
@@ -565,10 +574,12 @@ SPEC REPOS:
- GoogleUtilities
- GTMAppAuth
- GTMSessionFetcher
- JitsiWebRTC
- libwebp
- nanopb
- ObjectiveDropboxOfficial
- PromisesObjC
- PromisesSwift
EXTERNAL SOURCES:
amplitude-react-native:
@@ -619,6 +630,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native-keep-awake"
react-native-netinfo:
:path: "../node_modules/@react-native-community/netinfo"
react-native-orientation-locker:
:path: "../node_modules/react-native-orientation-locker"
react-native-pager-view:
:path: "../node_modules/react-native-pager-view"
react-native-performance:
@@ -693,8 +706,8 @@ SPEC CHECKSUMS:
boost: a7c83b31436843459a1961bfd74b96033dc77234
CocoaLumberjack: b7e05132ff94f6ae4dfa9d5bce9141893a21d9da
DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662
FBLazyVector: 2c76493a346ef8cacf1f442926a39f805fffec1f
FBReactNativeSpec: 371350f24afa87b6aba606972ec959dcd4a95c9a
FBLazyVector: 2b47ff52037bd9ae07cc9b051c9975797814b736
FBReactNativeSpec: 0e0d384ef17a33b385f13f0c7f97702c7cd17858
Firebase: 5f8193dff4b5b7c5d5ef72ae54bb76c08e2b841d
FirebaseAnalytics: 7761cbadb00a717d8d0939363eb46041526474fa
FirebaseCore: 5743c5785c074a794d35f2fff7ecc254a91e08b1
@@ -712,49 +725,52 @@ SPEC CHECKSUMS:
GoogleUtilities: e0913149f6b0625b553d70dae12b49fc62914fd1
GTMAppAuth: ad5c2b70b9a8689e1a04033c9369c4915bfcbe89
GTMSessionFetcher: 43748f93435c2aa068b1cbe39655aaf600652e91
JitsiWebRTC: f441eb0e2d67f0588bf24e21c5162e97342714fb
libwebp: 98a37e597e40bfdb4c911fc98f2c53d0b12d05fc
nanopb: a0ba3315591a9ae0a16a309ee504766e90db0c96
ObjectiveDropboxOfficial: fe206ce8c0bc49976c249d472db7fdbc53ebbd53
PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb
PromisesSwift: 99fddfe4a0ec88a56486644c0da106694c92a604
RCT-Folly: 4d8508a426467c48885f1151029bc15fa5d7b3b8
RCTRequired: 00581111c53531e39e3c6346ef0d2c0cf52a5a37
RCTTypeSafety: 07e03ee7800e7dd65cba8e52ad0c2edb06c96604
React: e61f4bf3c573d0c61c56b53dc3eb1d9daf0768a0
React-callinvoker: 047d47230bb6fd66827f8cb0bea4e944ffd1309b
React-Codegen: bb0403cde7374af091530e84e492589485aab480
React-Core: a4a3a8e10d004b08e013c3d0438259dd89a3894c
React-CoreModules: bb9f8bc36f1ae6d780b856927fa9d4aa01ccccc0
React-cxxreact: 7dd472aefb8629d6080cbb859240bafccd902704
React-jsi: b25808afe821b607d51c779bdd1717be8393b7ec
React-jsiexecutor: 4a4bae5671b064a2248a690cf75957669489d08c
React-jsinspector: 218a2503198ff28a085f8e16622a8d8f507c8019
React-logger: f79dd3cc0f9b44f5611c6c7862badd891a862cf8
RCTRequired: 0f06b6068f530932d10e1a01a5352fad4eaacb74
RCTTypeSafety: b0ee81f10ef1b7d977605a2b266823dabd565e65
React: 3becd12bd51ea8a43bdde7e09d0f40fba7820e03
React-callinvoker: 11abfff50e6bf7a55b3a90b4dc2187f71f224593
React-Codegen: f8946ce0768fb8e92e092e30944489c4b2955b2d
React-Core: 203cdb6ee2657b198d97d41031c249161060e6ca
React-CoreModules: 6eb0c06a4a223fde2cb6a8d0f44f58b67e808942
React-cxxreact: afb0c6c07d19adbd850747fedeac20c6832d40b9
React-jsi: 14d37a6db2af2c1a49f6f5c2e4ee667c364ae45c
React-jsiexecutor: 45c0496ca8cef6b02d9fa0274c25cf458fe91a56
React-jsinspector: eb202e43b3879aba9a14f3f65788aec85d4e1ea9
React-logger: 98f663b292a60967ebbc6d803ae96c1381183b6d
react-native-background-timer: 17ea5e06803401a379ebf1f20505b793ac44d0fe
react-native-get-random-values: 30b3f74ca34e30e2e480de48e4add2706a40ac8f
react-native-keep-awake: afad8a51dfef9fe9655a6344771be32c8596d774
react-native-netinfo: 27f287f2d191693f3b9d01a4273137fcf91c3b5d
react-native-orientation-locker: 851f6510d8046ea2f14aa169b1e01fcd309a94ba
react-native-pager-view: 3ee7d4c7697fb3ef788346e834a60cca97ed8540
react-native-performance: f4b6604a9d5a8a7407e34a82fab6c641d9a3ec12
react-native-safe-area-context: 584dc04881deb49474363f3be89e4ca0e854c057
react-native-slider: 6e9b86e76cce4b9e35b3403193a6432ed07e0c81
react-native-splash-screen: 4312f786b13a81b5169ef346d76d33bc0c6dc457
react-native-video: a4c2635d0802f983594b7057e1bce8f442f0ad28
react-native-webrtc: 206a0ac12a5633d2ec4605174d7c9f12f0d674b2
react-native-video: bb6f12a7198db53b261fefb5d609dc77417acc8b
react-native-webrtc: 4a4c31be61f88d1d3356526eebce72f462a6760e
react-native-webview: ea4899a1056c782afa96dd082179a66cbebf5504
React-perflogger: 30ab8d6db10e175626069e742eead3ebe8f24fd5
React-RCTActionSheet: 4b45da334a175b24dabe75f856b98fed3dfd6201
React-RCTAnimation: d6237386cb04500889877845b3e9e9291146bc2e
React-RCTBlob: bc9e2cd738c43bd2948e862e371402ef9584730a
React-RCTImage: 9f8cac465c6e5837007f59ade2a0a741016dd6a3
React-RCTLinking: 5073abb7d30cc0824b2172bd4582fc15bfc40510
React-RCTNetwork: 28ff94aa7d8fc117fc800b87dd80869a00d2bef3
React-RCTSettings: f27aa036f7270fe6ca43f8cdd1819e821fa429a0
React-RCTText: 7cb6f86fa7bc86f22f16333ad243b158e63b2a68
React-RCTVibration: 9e344c840176b0af9c84d5019eb4fed8b3c105a1
React-runtimeexecutor: 7285b499d0339104b2813a1f58ad1ada4adbd6c0
ReactCommon: bf2888a826ceedf54b99ad1b6182d1bc4a8a3984
React-perflogger: 0458a87ea9a7342079e7a31b0d32b3734fb8415f
React-RCTActionSheet: 22538001ea2926dea001111dd2846c13a0730bc9
React-RCTAnimation: 732ce66878d4aa151d56a0d142b1105aa12fd313
React-RCTBlob: 9cb9e3e9a41d27be34aaf89b0e0f52c7ca415d57
React-RCTImage: 6bd16627eb9c4bb79903c4cdec7c551266ee1a5b
React-RCTLinking: e9edfc8919c8fa9a3f3c7b34362811f58a2ebba4
React-RCTNetwork: 880eccd21bbe2660a0b63da5ccba75c46eceeaa6
React-RCTSettings: 8c85d8188c97d6c6bd470af6631a6c4555b79bb3
React-RCTText: bbd275ee287730c5acbab1aadc0db39c25c5c64e
React-RCTVibration: 9819a3bf6230e4b2a99877c21268b0b2416157a1
React-runtimeexecutor: b1f1995089b90696dbc2a7ffe0059a80db5c8eb1
ReactCommon: 149e2c0acab9bac61378da0db5b2880a1b5ff59b
RNCalendarEvents: 7e65eb4a94f53c1744d1e275f7fafcfaa619f7a3
RNCAsyncStorage: ea6b5c280997b2b32a587793163b1f10e580c4f7
RNCAsyncStorage: 005c0e2f09575360f142d0d1f1f15e4ec575b1af
RNCClipboard: 41d8d918092ae8e676f18adada19104fa3e68495
RNCMaskedView: c298b644a10c0c142055b3ae24d83879ecb13ccd
RNDefaultPreference: 08bdb06cfa9188d5da97d4642dac745218d7fb31
@@ -765,8 +781,8 @@ SPEC CHECKSUMS:
RNSound: 27e8268bdb0a1f191f219a33267f7e0445e8d62f
RNSVG: f3b60aeeaa81960e2e0536c3a9eef50b667ef3a9
RNWatch: dae6c858a2051dbdcfb00b9a86cf4d90400263b4
Yoga: 17cd9a50243093b547c1e539c749928dd68152da
Yoga: c4d61225a466f250c35c1ee78d2d0b3d41fe661c
PODFILE CHECKSUM: a437875b597d999a137c671b1da54153fe31d23f
PODFILE CHECKSUM: e671cdcdb80fab67e305861c36bfae8ed5a5b0ef
COCOAPODS: 1.11.3

View File

@@ -31,11 +31,11 @@
4EB0603C260E09D000F524C5 /* SocketConnection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB06039260E09D000F524C5 /* SocketConnection.swift */; };
4EB0603D260E09D000F524C5 /* DarwinNotificationCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB0603A260E09D000F524C5 /* DarwinNotificationCenter.swift */; };
4EB0603E260E09D000F524C5 /* SampleUploader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB0603B260E09D000F524C5 /* SampleUploader.swift */; };
DE050389256E904600DEE3A5 /* WebRTC.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE050388256E904600DEE3A5 /* WebRTC.xcframework */; };
DE05038A256E904600DEE3A5 /* WebRTC.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DE050388256E904600DEE3A5 /* WebRTC.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
DE4C456121DE1E4E00EA0709 /* FIRUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = DE4C455F21DE1E4E00EA0709 /* FIRUtilities.m */; };
DEA9F289258A6EA800D4CD74 /* JitsiMeetSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DEA9F288258A6EA800D4CD74 /* JitsiMeetSDK.framework */; };
DEA9F28A258A6EA800D4CD74 /* JitsiMeetSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DEA9F288258A6EA800D4CD74 /* JitsiMeetSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
DED016F128ECBC9D009D5E8D /* WebRTC.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = DED016F028ECBC9D009D5E8D /* WebRTC.xcframework */; };
DED016F228ECBC9D009D5E8D /* WebRTC.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DED016F028ECBC9D009D5E8D /* WebRTC.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
E588011722789D43008B0561 /* JitsiMeetContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = E58801132278944E008B0561 /* JitsiMeetContext.swift */; };
E5C97B63227A1EB400199214 /* JitsiMeetCommands.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5C97B62227A1EB400199214 /* JitsiMeetCommands.swift */; };
FD572B9827EDF32300A800FB /* GiphyUISDK.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD572B9727EDF32300A800FB /* GiphyUISDK.xcframework */; };
@@ -75,7 +75,7 @@
files = (
DEA9F28A258A6EA800D4CD74 /* JitsiMeetSDK.framework in Embed Frameworks */,
FD572B9927EDF32300A800FB /* GiphyUISDK.xcframework in Embed Frameworks */,
DE05038A256E904600DEE3A5 /* WebRTC.xcframework in Embed Frameworks */,
DED016F228ECBC9D009D5E8D /* WebRTC.xcframework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
@@ -158,6 +158,7 @@
DE4C455F21DE1E4E00EA0709 /* FIRUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FIRUtilities.m; sourceTree = "<group>"; };
DE4C456021DE1E4E00EA0709 /* FIRUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FIRUtilities.h; sourceTree = "<group>"; };
DEA9F288258A6EA800D4CD74 /* JitsiMeetSDK.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = JitsiMeetSDK.framework; sourceTree = BUILT_PRODUCTS_DIR; };
DED016F028ECBC9D009D5E8D /* WebRTC.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = WebRTC.xcframework; path = ../Pods/JitsiWebRTC/WebRTC.xcframework; sourceTree = "<group>"; };
DEFDBBDB25656E3B00344B23 /* WebRTC.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = WebRTC.xcframework; path = "../../node_modules/react-native-webrtc/ios/WebRTC.xcframework"; sourceTree = "<group>"; };
E58801132278944E008B0561 /* JitsiMeetContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JitsiMeetContext.swift; sourceTree = "<group>"; };
E5C97B62227A1EB400199214 /* JitsiMeetCommands.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JitsiMeetCommands.swift; sourceTree = "<group>"; };
@@ -176,7 +177,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
DE050389256E904600DEE3A5 /* WebRTC.xcframework in Frameworks */,
DED016F128ECBC9D009D5E8D /* WebRTC.xcframework in Frameworks */,
DEA9F289258A6EA800D4CD74 /* JitsiMeetSDK.framework in Frameworks */,
FD572B9827EDF32300A800FB /* GiphyUISDK.xcframework in Frameworks */,
2681BB562C7A0B42CFBA6719 /* libPods-JitsiMeet.a in Frameworks */,
@@ -204,6 +205,7 @@
0B26BE711EC5BC4D00EEFB41 /* Frameworks */ = {
isa = PBXGroup;
children = (
DED016F028ECBC9D009D5E8D /* WebRTC.xcframework */,
FD572B9727EDF32300A800FB /* GiphyUISDK.xcframework */,
DEA9F288258A6EA800D4CD74 /* JitsiMeetSDK.framework */,
DE050388256E904600DEE3A5 /* WebRTC.xcframework */,
@@ -854,7 +856,6 @@
CURRENT_PROJECT_VERSION = 1;
DEAD_CODE_STRIPPING = NO;
DEVELOPMENT_TEAM = FC967L3QRG;
ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
INFOPLIST_FILE = src/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -885,7 +886,6 @@
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = FC967L3QRG;
ENABLE_BITCODE = YES;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
INFOPLIST_FILE = src/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -1003,7 +1003,6 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
ENABLE_BITCODE = YES;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
@@ -1064,7 +1063,6 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = YES;
ENABLE_BITCODE = YES;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";

View File

@@ -107,7 +107,7 @@ extension SocketConnection: StreamDelegate {
streamHasSpaceAvailable?()
}
case .errorOccurred:
print("client stream error occured: \(String(describing: aStream.streamError))")
print("client stream error occurred: \(String(describing: aStream.streamError))")
close()
notifyDidClose(error: aStream.streamError)

View File

@@ -124,4 +124,10 @@
options:options];
}
- (UIInterfaceOrientationMask)application:(UIApplication *)application
supportedInterfaceOrientationsForWindow:(UIWindow *)window {
return [[JitsiMeet sharedInstance] application:application
supportedInterfaceOrientationsForWindow:window];
}
@end

View File

@@ -78,12 +78,11 @@ platform :ios do
# Actually build the app
build_app(
scheme: "JitsiMeet",
include_bitcode: true,
include_symbols: true,
export_xcargs: "-allowProvisioningUpdates"
)
# Upload the build to TestFlight (but don't distribute it)
# Upload the build to TestFlight
upload_to_testflight(
beta_app_description: ENV["JITSI_CHANGELOG"],
beta_app_feedback_email: ENV["JITSI_REVIEW_EMAIL"],
@@ -103,24 +102,10 @@ platform :ios do
uses_non_exempt_encryption: false
)
upload_symbols_to_crashlytics
# Cleanup
clean_build_artifacts
reset_git_repo(skip_clean: true)
end
lane :refresh_dsyms do
# Connect to Apple Store Connect
app_store_connect_api_key(
key_id: ENV["ASC_KEY_ID"],
issuer_id: ENV["ASC_ISSUER_ID"],
key_content: ENV["ASC_KEY_CONTENT"],
duration: 1200,
in_house: false
)
# Upload dSYMs to Crashlytics
download_dsyms(min_version: ENV["DSYMS_MIN_VERSION"]) # Download dSYM files from iTC
upload_symbols_to_crashlytics # Upload them to Crashlytics
clean_build_artifacts # Delete the local dSYM files
end
end

View File

@@ -15,7 +15,7 @@ echo "Releasing Jitsi Meet SDK Lite ${SDK_VERSION}"
pushd ${RELEASE_REPO}
# Generate podspec file
cat JitsiMeetSDKLite.podspec.tpl | sed -e s/VERSION/${SDK_VERSION}/g > JitsiMeetSDKLite.podspec
cat JitsiMeetSDKLite.podspec.tpl | sed -e s/VERSION/${SDK_VERSION}-lite/g > JitsiMeetSDKLite.podspec
# Cleanup
rm -rf lite/Frameworks/*
@@ -35,7 +35,6 @@ xcodebuild archive \
-sdk iphonesimulator \
-destination='generic/platform=iOS Simulator' \
-archivePath ios/sdk/out/ios-simulator \
ENABLE_BITCODE=NO \
SKIP_INSTALL=NO \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
xcodebuild archive \
@@ -45,7 +44,6 @@ xcodebuild archive \
-sdk iphoneos \
-destination='generic/platform=iOS' \
-archivePath ios/sdk/out/ios-device \
ENABLE_BITCODE=NO \
SKIP_INSTALL=NO \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
xcodebuild -create-xcframework \
@@ -66,7 +64,7 @@ cp -a ${PROJECT_REPO}/ios/sdk/out/JitsiMeetSDK.xcframework lite/Frameworks/
if [[ $DO_GIT_TAG == 1 ]]; then
git add -A .
git commit -m "${SDK_VERSION} lite"
git tag "lite-${SDK_VERSION}"
git tag "${SDK_VERSION}-lite"
fi
popd

View File

@@ -12,8 +12,6 @@ DO_GIT_TAG=${GIT_TAG:-0}
echo "Releasing Jitsi Meet SDK ${SDK_VERSION}"
${THIS_DIR}/../../node_modules/react-native-webrtc/tools/downloadBitcode.sh
pushd ${RELEASE_REPO}
# Generate podspec file
@@ -37,7 +35,6 @@ xcodebuild archive \
-sdk iphonesimulator \
-destination='generic/platform=iOS Simulator' \
-archivePath ios/sdk/out/ios-simulator \
ENABLE_BITCODE=YES \
SKIP_INSTALL=NO \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
xcodebuild archive \
@@ -47,7 +44,6 @@ xcodebuild archive \
-sdk iphoneos \
-destination='generic/platform=iOS' \
-archivePath ios/sdk/out/ios-device \
ENABLE_BITCODE=YES \
SKIP_INSTALL=NO \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
xcodebuild -create-xcframework \

View File

@@ -23,24 +23,29 @@
0BCA49611EC4B6C600B793EE /* Proximity.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BCA495E1EC4B6C600B793EE /* Proximity.m */; };
0BD906EA1EC0C00300C8C18E /* JitsiMeet.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BD906E81EC0C00300C8C18E /* JitsiMeet.h */; settings = {ATTRIBUTES = (Public, ); }; };
3453F4A32680898C4A40E821 /* libPods-JitsiMeetSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 927ED7DF018DE5E12C4C3404 /* libPods-JitsiMeetSDK.a */; };
4E0EF63028CA2FB3005D1B03 /* JMCallKitEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E0EF62E28CA2FB3005D1B03 /* JMCallKitEmitter.h */; };
4E0EF63128CA2FB3005D1B03 /* JMCallKitEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E0EF62E28CA2FB3005D1B03 /* JMCallKitEmitter.h */; };
4E0EF63228CA2FB3005D1B03 /* JMCallKitEmitter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E0EF62F28CA2FB3005D1B03 /* JMCallKitEmitter.m */; };
4E0EF63328CA2FB3005D1B03 /* JMCallKitEmitter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E0EF62F28CA2FB3005D1B03 /* JMCallKitEmitter.m */; };
4E0EF63528CA317E005D1B03 /* JMCallKitListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E0EF63428CA317E005D1B03 /* JMCallKitListener.h */; settings = {ATTRIBUTES = (Public, ); }; };
4E0EF63628CA317E005D1B03 /* JMCallKitListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E0EF63428CA317E005D1B03 /* JMCallKitListener.h */; settings = {ATTRIBUTES = (Public, ); }; };
4E0EF63928CA4069005D1B03 /* JMCallKitProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E0EF63728CA4069005D1B03 /* JMCallKitProxy.h */; settings = {ATTRIBUTES = (Public, ); }; };
4E0EF63A28CA4069005D1B03 /* JMCallKitProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E0EF63728CA4069005D1B03 /* JMCallKitProxy.h */; settings = {ATTRIBUTES = (Public, ); }; };
4E0EF63B28CA4069005D1B03 /* JMCallKitProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E0EF63828CA4069005D1B03 /* JMCallKitProxy.m */; };
4E0EF63C28CA4069005D1B03 /* JMCallKitProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E0EF63828CA4069005D1B03 /* JMCallKitProxy.m */; };
4E51B76425E5345E0038575A /* ScheenshareEventEmiter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E51B76225E5345E0038575A /* ScheenshareEventEmiter.h */; };
4E51B76525E5345E0038575A /* ScheenshareEventEmiter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E51B76325E5345E0038575A /* ScheenshareEventEmiter.m */; };
4EBA6E61286072E300B31882 /* JitsiMeetViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EBA6E5F286072E300B31882 /* JitsiMeetViewController.h */; };
4EBA6E62286072E300B31882 /* JitsiMeetViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EBA6E60286072E300B31882 /* JitsiMeetViewController.m */; };
4EBA6E652860B1E800B31882 /* JitsiMeetRenderingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EBA6E632860B1E800B31882 /* JitsiMeetRenderingView.h */; };
4EBA6E662860B1E800B31882 /* JitsiMeetRenderingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EBA6E642860B1E800B31882 /* JitsiMeetRenderingView.m */; };
4E812F3328F9A4290087ACC9 /* JitsiMeetView+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E812F3228F9A4290087ACC9 /* JitsiMeetView+Private.h */; };
4E812F3428F9A4290087ACC9 /* JitsiMeetView+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E812F3228F9A4290087ACC9 /* JitsiMeetView+Private.h */; };
4E812F3928F9A4ED0087ACC9 /* JitsiMeetView+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E812F3628F9A4ED0087ACC9 /* JitsiMeetView+Private.m */; };
4E812F3A28F9A4ED0087ACC9 /* JitsiMeetView+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E812F3628F9A4ED0087ACC9 /* JitsiMeetView+Private.m */; };
4ED4FFF32721B9B90074E620 /* JitsiAudioSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ED4FFF12721B9B90074E620 /* JitsiAudioSession.h */; settings = {ATTRIBUTES = (Public, ); }; };
4ED4FFF42721B9B90074E620 /* JitsiAudioSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 4ED4FFF22721B9B90074E620 /* JitsiAudioSession.m */; };
4EEC9630286C73A2008705FA /* JitsiMeetView+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EEC962E286C73A2008705FA /* JitsiMeetView+Private.h */; };
4EEC9631286C73A2008705FA /* JitsiMeetView+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EEC962F286C73A2008705FA /* JitsiMeetView+Private.m */; };
6F08DF7D4458EE3CF3F36F6D /* BuildFile in Frameworks */ = {isa = PBXBuildFile; };
9A8EE79C77C17743BB66E8BD /* libPods-JitsiMeetSDKLite.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B46497DE9A95BDF5E312AF48 /* libPods-JitsiMeetSDKLite.a */; };
A4A934E9212F3ADB001E9388 /* Dropbox.m in Sources */ = {isa = PBXBuildFile; fileRef = A4A934E8212F3ADB001E9388 /* Dropbox.m */; };
C6245F5D2053091D0040BE68 /* image-resize@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = C6245F5B2053091D0040BE68 /* image-resize@2x.png */; };
C6245F5E2053091D0040BE68 /* image-resize@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = C6245F5C2053091D0040BE68 /* image-resize@3x.png */; };
C69EFA0C209A0F660027712B /* JMCallKitEmitter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C69EFA09209A0F650027712B /* JMCallKitEmitter.swift */; };
C69EFA0D209A0F660027712B /* JMCallKitProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C69EFA0A209A0F660027712B /* JMCallKitProxy.swift */; };
C69EFA0E209A0F660027712B /* JMCallKitListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = C69EFA0B209A0F660027712B /* JMCallKitListener.swift */; };
C6A34261204EF76800E062DD /* DragGestureController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A3425E204EF76800E062DD /* DragGestureController.swift */; };
C6CC49AF207412CF000DFA42 /* PiPViewCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6CC49AE207412CF000DFA42 /* PiPViewCoordinator.swift */; };
C81E9AB925AC5AD800B134D9 /* ExternalAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = C81E9AB825AC5AD800B134D9 /* ExternalAPI.h */; };
@@ -63,20 +68,16 @@
DE9A0134289A9A9A00E41CBB /* JitsiMeetSDK.h in Headers */ = {isa = PBXBuildFile; fileRef = DEA9F283258A5D9900D4CD74 /* JitsiMeetSDK.h */; settings = {ATTRIBUTES = (Public, ); }; };
DE9A0135289A9A9A00E41CBB /* ScheenshareEventEmiter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E51B76225E5345E0038575A /* ScheenshareEventEmiter.h */; };
DE9A0136289A9A9A00E41CBB /* JitsiMeetBaseLogHandler+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DE65AACB2318028300290BEC /* JitsiMeetBaseLogHandler+Private.h */; };
DE9A0137289A9A9A00E41CBB /* JitsiMeetRenderingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EBA6E632860B1E800B31882 /* JitsiMeetRenderingView.h */; };
DE9A0138289A9A9A00E41CBB /* JitsiMeetViewDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B412F1B1EDEC80100B1A0A6 /* JitsiMeetViewDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
DE9A0139289A9A9A00E41CBB /* JitsiAudioSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ED4FFF12721B9B90074E620 /* JitsiAudioSession.h */; settings = {ATTRIBUTES = (Public, ); }; };
DE9A013A289A9A9A00E41CBB /* JitsiMeetView+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EEC962E286C73A2008705FA /* JitsiMeetView+Private.h */; };
DE9A013B289A9A9A00E41CBB /* JitsiMeet.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BD906E81EC0C00300C8C18E /* JitsiMeet.h */; settings = {ATTRIBUTES = (Public, ); }; };
DE9A013C289A9A9A00E41CBB /* JitsiMeetLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = DE81A2D22316AC4D00AE1940 /* JitsiMeetLogger.h */; settings = {ATTRIBUTES = (Public, ); }; };
DE9A013D289A9A9A00E41CBB /* LogUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = DE65AAC92317FFCD00290BEC /* LogUtils.h */; };
DE9A013E289A9A9A00E41CBB /* JitsiMeetViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EBA6E5F286072E300B31882 /* JitsiMeetViewController.h */; };
DE9A013F289A9A9A00E41CBB /* JitsiMeetConferenceOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = DEAD3224220C497000E93636 /* JitsiMeetConferenceOptions.h */; settings = {ATTRIBUTES = (Public, ); }; };
DE9A0140289A9A9A00E41CBB /* ExternalAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = C81E9AB825AC5AD800B134D9 /* ExternalAPI.h */; };
DE9A0141289A9A9A00E41CBB /* InfoPlistUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = C8AFD27D2462C613000293D2 /* InfoPlistUtil.h */; settings = {ATTRIBUTES = (Public, ); }; };
DE9A0143289A9A9A00E41CBB /* CallKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BB9AD7A1F5EC8F4001C08DB /* CallKit.m */; };
DE9A0144289A9A9A00E41CBB /* JitsiMeetBaseLogHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = DE81A2DD2317ED5400AE1940 /* JitsiMeetBaseLogHandler.m */; };
DE9A0145289A9A9A00E41CBB /* JitsiMeetRenderingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EBA6E642860B1E800B31882 /* JitsiMeetRenderingView.m */; };
DE9A0146289A9A9A00E41CBB /* JitsiAudioSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 4ED4FFF22721B9B90074E620 /* JitsiAudioSession.m */; };
DE9A0147289A9A9A00E41CBB /* AppInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BB9AD7C1F60356D001C08DB /* AppInfo.m */; };
DE9A0148289A9A9A00E41CBB /* LogBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = DE81A2D72316AC7600AE1940 /* LogBridge.m */; };
@@ -91,15 +92,10 @@
DE9A0151289A9A9A00E41CBB /* LocaleDetector.m in Sources */ = {isa = PBXBuildFile; fileRef = DEFC743D21B178FA00E4DD96 /* LocaleDetector.m */; };
DE9A0152289A9A9A00E41CBB /* AudioMode.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BCA495C1EC4B6C600B793EE /* AudioMode.m */; };
DE9A0153289A9A9A00E41CBB /* Proximity.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BCA495E1EC4B6C600B793EE /* Proximity.m */; };
DE9A0154289A9A9A00E41CBB /* JMCallKitEmitter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C69EFA09209A0F650027712B /* JMCallKitEmitter.swift */; };
DE9A0155289A9A9A00E41CBB /* ReactUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = DEFE535521FB2E8300011A3A /* ReactUtils.m */; };
DE9A0156289A9A9A00E41CBB /* JitsiMeetView+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EEC962F286C73A2008705FA /* JitsiMeetView+Private.m */; };
DE9A0157289A9A9A00E41CBB /* DragGestureController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A3425E204EF76800E062DD /* DragGestureController.swift */; };
DE9A0158289A9A9A00E41CBB /* ScheenshareEventEmiter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E51B76325E5345E0038575A /* ScheenshareEventEmiter.m */; };
DE9A015A289A9A9A00E41CBB /* JitsiMeetViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EBA6E60286072E300B31882 /* JitsiMeetViewController.m */; };
DE9A015B289A9A9A00E41CBB /* JMCallKitProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C69EFA0A209A0F660027712B /* JMCallKitProxy.swift */; };
DE9A015C289A9A9A00E41CBB /* JitsiMeetLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = DE81A2D32316AC4D00AE1940 /* JitsiMeetLogger.m */; };
DE9A015D289A9A9A00E41CBB /* JMCallKitListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = C69EFA0B209A0F660027712B /* JMCallKitListener.swift */; };
DE9A015E289A9A9A00E41CBB /* JitsiMeetView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B412F171EDEC65D00B1A0A6 /* JitsiMeetView.m */; };
DE9A015F289A9A9A00E41CBB /* JitsiMeet.m in Sources */ = {isa = PBXBuildFile; fileRef = DEFE535321FB1BF800011A3A /* JitsiMeet.m */; };
DE9A0160289A9A9A00E41CBB /* JavaScriptSandbox.m in Sources */ = {isa = PBXBuildFile; fileRef = DE438CD82350934700DD541D /* JavaScriptSandbox.m */; };
@@ -137,17 +133,18 @@
0BD906E51EC0C00300C8C18E /* JitsiMeetSDK.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = JitsiMeetSDK.framework; sourceTree = BUILT_PRODUCTS_DIR; };
0BD906E81EC0C00300C8C18E /* JitsiMeet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JitsiMeet.h; sourceTree = "<group>"; };
0BD906E91EC0C00300C8C18E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
4E0EF62E28CA2FB3005D1B03 /* JMCallKitEmitter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JMCallKitEmitter.h; sourceTree = "<group>"; };
4E0EF62F28CA2FB3005D1B03 /* JMCallKitEmitter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = JMCallKitEmitter.m; sourceTree = "<group>"; };
4E0EF63428CA317E005D1B03 /* JMCallKitListener.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JMCallKitListener.h; sourceTree = "<group>"; };
4E0EF63728CA4069005D1B03 /* JMCallKitProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JMCallKitProxy.h; sourceTree = "<group>"; };
4E0EF63828CA4069005D1B03 /* JMCallKitProxy.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = JMCallKitProxy.m; sourceTree = "<group>"; };
4E51B76225E5345E0038575A /* ScheenshareEventEmiter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ScheenshareEventEmiter.h; sourceTree = "<group>"; };
4E51B76325E5345E0038575A /* ScheenshareEventEmiter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ScheenshareEventEmiter.m; sourceTree = "<group>"; };
4EBA6E5F286072E300B31882 /* JitsiMeetViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JitsiMeetViewController.h; sourceTree = "<group>"; };
4EBA6E60286072E300B31882 /* JitsiMeetViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = JitsiMeetViewController.m; sourceTree = "<group>"; };
4EBA6E632860B1E800B31882 /* JitsiMeetRenderingView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JitsiMeetRenderingView.h; sourceTree = "<group>"; };
4EBA6E642860B1E800B31882 /* JitsiMeetRenderingView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = JitsiMeetRenderingView.m; sourceTree = "<group>"; };
4E812F3228F9A4290087ACC9 /* JitsiMeetView+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "JitsiMeetView+Private.h"; sourceTree = "<group>"; };
4E812F3628F9A4ED0087ACC9 /* JitsiMeetView+Private.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "JitsiMeetView+Private.m"; sourceTree = "<group>"; };
4ED4FFF12721B9B90074E620 /* JitsiAudioSession.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JitsiAudioSession.h; sourceTree = "<group>"; };
4ED4FFF22721B9B90074E620 /* JitsiAudioSession.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = JitsiAudioSession.m; sourceTree = "<group>"; };
4ED4FFF52721BAE10074E620 /* JitsiAudioSession+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "JitsiAudioSession+Private.h"; sourceTree = "<group>"; };
4EEC962E286C73A2008705FA /* JitsiMeetView+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "JitsiMeetView+Private.h"; sourceTree = "<group>"; };
4EEC962F286C73A2008705FA /* JitsiMeetView+Private.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "JitsiMeetView+Private.m"; sourceTree = "<group>"; };
86389F55993FAAF6AEB3FA3E /* Pods-JitsiMeetSDKLite.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeetSDKLite.release.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeetSDKLite/Pods-JitsiMeetSDKLite.release.xcconfig"; sourceTree = "<group>"; };
891FE43DAD30BC8976683100 /* Pods-JitsiMeetSDK.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeetSDK.release.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeetSDK/Pods-JitsiMeetSDK.release.xcconfig"; sourceTree = "<group>"; };
8F48C340DE0D91D1012976C5 /* Pods-JitsiMeetSDKLite.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeetSDKLite.debug.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeetSDKLite/Pods-JitsiMeetSDKLite.debug.xcconfig"; sourceTree = "<group>"; };
@@ -159,9 +156,6 @@
B46497DE9A95BDF5E312AF48 /* libPods-JitsiMeetSDKLite.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-JitsiMeetSDKLite.a"; sourceTree = BUILT_PRODUCTS_DIR; };
C6245F5B2053091D0040BE68 /* image-resize@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "image-resize@2x.png"; path = "src/picture-in-picture/image-resize@2x.png"; sourceTree = "<group>"; };
C6245F5C2053091D0040BE68 /* image-resize@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "image-resize@3x.png"; path = "src/picture-in-picture/image-resize@3x.png"; sourceTree = "<group>"; };
C69EFA09209A0F650027712B /* JMCallKitEmitter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JMCallKitEmitter.swift; sourceTree = "<group>"; };
C69EFA0A209A0F660027712B /* JMCallKitProxy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JMCallKitProxy.swift; sourceTree = "<group>"; };
C69EFA0B209A0F660027712B /* JMCallKitListener.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JMCallKitListener.swift; sourceTree = "<group>"; };
C6A3425E204EF76800E062DD /* DragGestureController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DragGestureController.swift; sourceTree = "<group>"; };
C6CC49AE207412CF000DFA42 /* PiPViewCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PiPViewCoordinator.swift; sourceTree = "<group>"; };
C81E9AB825AC5AD800B134D9 /* ExternalAPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ExternalAPI.h; sourceTree = "<group>"; };
@@ -275,14 +269,10 @@
DE81A2DC2317ED5400AE1940 /* JitsiMeetBaseLogHandler.h */,
DE65AACB2318028300290BEC /* JitsiMeetBaseLogHandler+Private.h */,
DE81A2DD2317ED5400AE1940 /* JitsiMeetBaseLogHandler.m */,
4E812F3228F9A4290087ACC9 /* JitsiMeetView+Private.h */,
4E812F3628F9A4ED0087ACC9 /* JitsiMeetView+Private.m */,
0B412F161EDEC65D00B1A0A6 /* JitsiMeetView.h */,
4EEC962E286C73A2008705FA /* JitsiMeetView+Private.h */,
4EEC962F286C73A2008705FA /* JitsiMeetView+Private.m */,
0B412F171EDEC65D00B1A0A6 /* JitsiMeetView.m */,
4EBA6E632860B1E800B31882 /* JitsiMeetRenderingView.h */,
4EBA6E642860B1E800B31882 /* JitsiMeetRenderingView.m */,
4EBA6E5F286072E300B31882 /* JitsiMeetViewController.h */,
4EBA6E60286072E300B31882 /* JitsiMeetViewController.m */,
DE81A2D72316AC7600AE1940 /* LogBridge.m */,
DE65AAC92317FFCD00290BEC /* LogUtils.h */,
DEAFA777229EAD3B0033A7FA /* RNRootView.h */,
@@ -345,9 +335,11 @@
isa = PBXGroup;
children = (
0BB9AD7A1F5EC8F4001C08DB /* CallKit.m */,
C69EFA09209A0F650027712B /* JMCallKitEmitter.swift */,
C69EFA0B209A0F660027712B /* JMCallKitListener.swift */,
C69EFA0A209A0F660027712B /* JMCallKitProxy.swift */,
4E0EF62E28CA2FB3005D1B03 /* JMCallKitEmitter.h */,
4E0EF62F28CA2FB3005D1B03 /* JMCallKitEmitter.m */,
4E0EF63428CA317E005D1B03 /* JMCallKitListener.h */,
4E0EF63728CA4069005D1B03 /* JMCallKitProxy.h */,
4E0EF63828CA4069005D1B03 /* JMCallKitProxy.m */,
);
path = callkit;
sourceTree = "<group>";
@@ -375,17 +367,18 @@
DEA9F284258A5D9900D4CD74 /* JitsiMeetSDK.h in Headers */,
4E51B76425E5345E0038575A /* ScheenshareEventEmiter.h in Headers */,
DE65AACC2318028300290BEC /* JitsiMeetBaseLogHandler+Private.h in Headers */,
4EBA6E652860B1E800B31882 /* JitsiMeetRenderingView.h in Headers */,
0B412F221EDEF6EA00B1A0A6 /* JitsiMeetViewDelegate.h in Headers */,
4E0EF63528CA317E005D1B03 /* JMCallKitListener.h in Headers */,
4E0EF63028CA2FB3005D1B03 /* JMCallKitEmitter.h in Headers */,
4ED4FFF32721B9B90074E620 /* JitsiAudioSession.h in Headers */,
4EEC9630286C73A2008705FA /* JitsiMeetView+Private.h in Headers */,
4E0EF63928CA4069005D1B03 /* JMCallKitProxy.h in Headers */,
0BD906EA1EC0C00300C8C18E /* JitsiMeet.h in Headers */,
DE81A2D42316AC4D00AE1940 /* JitsiMeetLogger.h in Headers */,
DE65AACA2317FFCD00290BEC /* LogUtils.h in Headers */,
4EBA6E61286072E300B31882 /* JitsiMeetViewController.h in Headers */,
DEAD3226220C497000E93636 /* JitsiMeetConferenceOptions.h in Headers */,
C81E9AB925AC5AD800B134D9 /* ExternalAPI.h in Headers */,
C8AFD27F2462C613000293D2 /* InfoPlistUtil.h in Headers */,
4E812F3328F9A4290087ACC9 /* JitsiMeetView+Private.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -400,17 +393,18 @@
DE9A0134289A9A9A00E41CBB /* JitsiMeetSDK.h in Headers */,
DE9A0135289A9A9A00E41CBB /* ScheenshareEventEmiter.h in Headers */,
DE9A0136289A9A9A00E41CBB /* JitsiMeetBaseLogHandler+Private.h in Headers */,
DE9A0137289A9A9A00E41CBB /* JitsiMeetRenderingView.h in Headers */,
DE9A0138289A9A9A00E41CBB /* JitsiMeetViewDelegate.h in Headers */,
4E0EF63628CA317E005D1B03 /* JMCallKitListener.h in Headers */,
4E0EF63128CA2FB3005D1B03 /* JMCallKitEmitter.h in Headers */,
DE9A0139289A9A9A00E41CBB /* JitsiAudioSession.h in Headers */,
DE9A013A289A9A9A00E41CBB /* JitsiMeetView+Private.h in Headers */,
4E0EF63A28CA4069005D1B03 /* JMCallKitProxy.h in Headers */,
DE9A013B289A9A9A00E41CBB /* JitsiMeet.h in Headers */,
DE9A013C289A9A9A00E41CBB /* JitsiMeetLogger.h in Headers */,
DE9A013D289A9A9A00E41CBB /* LogUtils.h in Headers */,
DE9A013E289A9A9A00E41CBB /* JitsiMeetViewController.h in Headers */,
DE9A013F289A9A9A00E41CBB /* JitsiMeetConferenceOptions.h in Headers */,
DE9A0140289A9A9A00E41CBB /* ExternalAPI.h in Headers */,
DE9A0141289A9A9A00E41CBB /* InfoPlistUtil.h in Headers */,
4E812F3428F9A4290087ACC9 /* JitsiMeetView+Private.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -671,8 +665,9 @@
files = (
0BB9AD7B1F5EC8F4001C08DB /* CallKit.m in Sources */,
DE81A2DF2317ED5400AE1940 /* JitsiMeetBaseLogHandler.m in Sources */,
4EBA6E662860B1E800B31882 /* JitsiMeetRenderingView.m in Sources */,
4E0EF63B28CA4069005D1B03 /* JMCallKitProxy.m in Sources */,
4ED4FFF42721B9B90074E620 /* JitsiAudioSession.m in Sources */,
4E812F3928F9A4ED0087ACC9 /* JitsiMeetView+Private.m in Sources */,
0BB9AD7D1F60356D001C08DB /* AppInfo.m in Sources */,
DE81A2D92316AC7600AE1940 /* LogBridge.m in Sources */,
DEAFA779229EAD520033A7FA /* RNRootView.m in Sources */,
@@ -686,16 +681,12 @@
DEFC743F21B178FA00E4DD96 /* LocaleDetector.m in Sources */,
0BCA495F1EC4B6C600B793EE /* AudioMode.m in Sources */,
0BCA49611EC4B6C600B793EE /* Proximity.m in Sources */,
C69EFA0C209A0F660027712B /* JMCallKitEmitter.swift in Sources */,
4E0EF63228CA2FB3005D1B03 /* JMCallKitEmitter.m in Sources */,
DEFE535621FB2E8300011A3A /* ReactUtils.m in Sources */,
4EEC9631286C73A2008705FA /* JitsiMeetView+Private.m in Sources */,
C6A34261204EF76800E062DD /* DragGestureController.swift in Sources */,
4E51B76525E5345E0038575A /* ScheenshareEventEmiter.m in Sources */,
A4A934E9212F3ADB001E9388 /* Dropbox.m in Sources */,
4EBA6E62286072E300B31882 /* JitsiMeetViewController.m in Sources */,
C69EFA0D209A0F660027712B /* JMCallKitProxy.swift in Sources */,
DE81A2D52316AC4D00AE1940 /* JitsiMeetLogger.m in Sources */,
C69EFA0E209A0F660027712B /* JMCallKitListener.swift in Sources */,
0B412F191EDEC65D00B1A0A6 /* JitsiMeetView.m in Sources */,
DEFE535421FB1BF800011A3A /* JitsiMeet.m in Sources */,
DE438CDA2350934700DD541D /* JavaScriptSandbox.m in Sources */,
@@ -708,8 +699,8 @@
files = (
DE9A0143289A9A9A00E41CBB /* CallKit.m in Sources */,
DE9A0144289A9A9A00E41CBB /* JitsiMeetBaseLogHandler.m in Sources */,
DE9A0145289A9A9A00E41CBB /* JitsiMeetRenderingView.m in Sources */,
DE9A0146289A9A9A00E41CBB /* JitsiAudioSession.m in Sources */,
4E0EF63C28CA4069005D1B03 /* JMCallKitProxy.m in Sources */,
DE9A0147289A9A9A00E41CBB /* AppInfo.m in Sources */,
DE9A0148289A9A9A00E41CBB /* LogBridge.m in Sources */,
DE9A0149289A9A9A00E41CBB /* RNRootView.m in Sources */,
@@ -723,15 +714,12 @@
DE9A0151289A9A9A00E41CBB /* LocaleDetector.m in Sources */,
DE9A0152289A9A9A00E41CBB /* AudioMode.m in Sources */,
DE9A0153289A9A9A00E41CBB /* Proximity.m in Sources */,
DE9A0154289A9A9A00E41CBB /* JMCallKitEmitter.swift in Sources */,
4E812F3A28F9A4ED0087ACC9 /* JitsiMeetView+Private.m in Sources */,
DE9A0155289A9A9A00E41CBB /* ReactUtils.m in Sources */,
DE9A0156289A9A9A00E41CBB /* JitsiMeetView+Private.m in Sources */,
DE9A0157289A9A9A00E41CBB /* DragGestureController.swift in Sources */,
DE9A0158289A9A9A00E41CBB /* ScheenshareEventEmiter.m in Sources */,
DE9A015A289A9A9A00E41CBB /* JitsiMeetViewController.m in Sources */,
DE9A015B289A9A9A00E41CBB /* JMCallKitProxy.swift in Sources */,
DE9A015C289A9A9A00E41CBB /* JitsiMeetLogger.m in Sources */,
DE9A015D289A9A9A00E41CBB /* JMCallKitListener.swift in Sources */,
4E0EF63328CA2FB3005D1B03 /* JMCallKitEmitter.m in Sources */,
DE9A015E289A9A9A00E41CBB /* JitsiMeetView.m in Sources */,
DE9A015F289A9A9A00E41CBB /* JitsiMeet.m in Sources */,
DE9A0160289A9A9A00E41CBB /* JavaScriptSandbox.m in Sources */,
@@ -776,7 +764,6 @@
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_BITCODE = YES;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
@@ -839,7 +826,6 @@
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_BITCODE = YES;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
@@ -876,7 +862,6 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
INFOPLIST_FILE = src/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
@@ -885,7 +870,8 @@
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SUPPORTS_MACCATALYST = NO;
SWIFT_OBJC_BRIDGING_HEADER = "";
SWIFT_INSTALL_OBJC_HEADER = NO;
SWIFT_OBJC_INTERFACE_HEADER_NAME = "";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
};
@@ -905,7 +891,6 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_BITCODE = YES;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
INFOPLIST_FILE = src/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
@@ -914,7 +899,8 @@
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SUPPORTS_MACCATALYST = NO;
SWIFT_OBJC_BRIDGING_HEADER = "";
SWIFT_INSTALL_OBJC_HEADER = NO;
SWIFT_OBJC_INTERFACE_HEADER_NAME = "";
SWIFT_VERSION = 5.0;
};
name = Release;
@@ -933,7 +919,6 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
GCC_PREPROCESSOR_DEFINITIONS = (
"$(inherited)",
@@ -947,7 +932,8 @@
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SUPPORTS_MACCATALYST = NO;
SWIFT_OBJC_BRIDGING_HEADER = "";
SWIFT_INSTALL_OBJC_HEADER = NO;
SWIFT_OBJC_INTERFACE_HEADER_NAME = "";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
};
@@ -967,7 +953,6 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_BITCODE = YES;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
GCC_PREPROCESSOR_DEFINITIONS = (
"$(inherited)",
@@ -981,7 +966,8 @@
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SUPPORTS_MACCATALYST = NO;
SWIFT_OBJC_BRIDGING_HEADER = "";
SWIFT_INSTALL_OBJC_HEADER = NO;
SWIFT_OBJC_INTERFACE_HEADER_NAME = "";
SWIFT_VERSION = 5.0;
};
name = Release;

View File

@@ -57,6 +57,9 @@
openURL:(NSURL *_Nonnull)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *_Nonnull)options;
- (UIInterfaceOrientationMask)application:(UIApplication *_Nonnull)application
supportedInterfaceOrientationsForWindow:(UIWindow *_Nonnull)window;
#pragma mark - Utility methods
/**

View File

@@ -16,6 +16,7 @@
#import <Intents/Intents.h>
#import <WebRTC/RTCLogging.h>
#import "Orientation.h"
#import "JitsiMeet+Private.h"
#import "JitsiMeetConferenceOptions+Private.h"
@@ -127,6 +128,10 @@
return true;
}
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
return [Orientation getOrientation];
}
#pragma mark - Utility methods
- (void)instantiateReactNativeBridge {

View File

@@ -1,83 +0,0 @@
/*
* Copyright @ 2022-present 8x8, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <mach/mach_time.h>
#import "JitsiMeetRenderingView.h"
#import "ReactUtils.h"
#import "RNRootView.h"
#import "JitsiMeet+Private.h"
/**
* Backwards compatibility: turn the boolean prop into a feature flag.
*/
static NSString *const PiPEnabledFeatureFlag = @"pip.enabled";
@interface JitsiMeetRenderingView ()
@end
@implementation JitsiMeetRenderingView {
/**
* React Native view where the entire content will be rendered.
*/
RNRootView *rootView;
}
/**
* Passes the given props to the React Native application. The props which we pass
* are a combination of 3 different sources:
*
* - JitsiMeet.defaultConferenceOptions
* - This function's parameters
* - Some extras which are added by this function
*/
- (void)setProps:(NSDictionary *_Nonnull)newProps {
NSMutableDictionary *props = mergeProps([[JitsiMeet sharedInstance] getDefaultProps], newProps);
// Set the PiP flag if it wasn't manually set.
NSMutableDictionary *featureFlags = props[@"flags"];
// TODO: temporary implementation
if (featureFlags[PiPEnabledFeatureFlag] == nil) {
featureFlags[PiPEnabledFeatureFlag] = @(self.isPiPEnabled);
}
// This method is supposed to be imperative i.e. a second
// invocation with one and the same URL is expected to join the respective
// conference again if the first invocation was followed by leaving the
// conference. However, React and, respectively,
// appProperties/initialProperties are declarative expressions i.e. one and
// the same URL will not trigger an automatic re-render in the JavaScript
// source code. The workaround implemented below introduces imperativeness
// in React Component props by defining a unique value per invocation.
props[@"timestamp"] = @(mach_absolute_time());
if (rootView) {
// Update props with the new URL.
rootView.appProperties = props;
} else {
RCTBridge *bridge = [[JitsiMeet sharedInstance] getReactBridge];
rootView = [[RNRootView alloc] initWithBridge:bridge
moduleName:@"App"
initialProperties:props];
rootView.backgroundColor = self.backgroundColor;
// Add rootView as a subview which completely covers this one.
[rootView setFrame:[self bounds]];
rootView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self addSubview:rootView];
}
}
@end

View File

@@ -22,3 +22,5 @@
#import <JitsiMeetSDK/JitsiMeetBaseLogHandler.h>
#import <JitsiMeetSDK/JitsiAudioSession.h>
#import <JitsiMeetSDK/InfoPlistUtil.h>
#import <JitsiMeetSDK/JMCallKitListener.h>
#import <JitsiMeetSDK/JMCallKitProxy.h>

View File

@@ -20,22 +20,23 @@
#import "ExternalAPI.h"
#import "JitsiMeet+Private.h"
#import "JitsiMeetConferenceOptions+Private.h"
#import "JitsiMeetView.h"
#import "JitsiMeetViewController.h"
#import "JitsiMeetView+Private.h"
#import "ReactUtils.h"
#import "RNRootView.h"
@interface JitsiMeetView ()
@property (nonatomic, strong) JitsiMeetViewController *jitsiMeetViewController;
@property (nonatomic, strong) UINavigationController *navController;
@property (nonatomic, readonly) BOOL isPiPEnabled;
/**
* Backwards compatibility: turn the boolean prop into a feature flag.
*/
static NSString *const PiPEnabledFeatureFlag = @"pip.enabled";
@end
@implementation JitsiMeetView
@dynamic isPiPEnabled;
@implementation JitsiMeetView {
/**
* React Native view where the entire content will be rendered.
*/
RNRootView *rootView;
}
#pragma mark Initializers
@@ -66,10 +67,6 @@
return self;
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
/**
* Internal initialization:
*
@@ -77,57 +74,72 @@
* - initializes the external API scope
*/
- (void)initWithXXX {
self.jitsiMeetViewController = [[JitsiMeetViewController alloc] init];
self.jitsiMeetViewController.view.frame = [self bounds];
[self addSubview:self.jitsiMeetViewController.view];
// Set a background color which is in accord with the JavaScript and Android
// parts of the application and causes less perceived visual flicker than
// the default background color.
self.backgroundColor
= [UIColor colorWithRed:.07f green:.07f blue:.07f alpha:1];
[self registerObservers];
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
#pragma mark API
- (void)join:(JitsiMeetConferenceOptions *)options {
[self.jitsiMeetViewController join:options withPiP:self.isPiPEnabled];
[self setProps:options == nil ? @{} : [options asProps]];
}
- (void)leave {
[self.jitsiMeetViewController leave];
[self setProps:@{}];
}
- (void)hangUp {
[self.jitsiMeetViewController hangUp];
ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
[externalAPI sendHangUp];
}
- (void)setAudioMuted:(BOOL)muted {
[self.jitsiMeetViewController setAudioMuted:muted];
ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
[externalAPI sendSetAudioMuted:muted];
}
- (void)sendEndpointTextMessage:(NSString * _Nonnull)message :(NSString * _Nullable)to {
[self.jitsiMeetViewController sendEndpointTextMessage:message :to];
ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
[externalAPI sendEndpointTextMessage:message :to];
}
- (void)toggleScreenShare:(BOOL)enabled {
[self.jitsiMeetViewController toggleScreenShare:enabled];
ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
[externalAPI toggleScreenShare:enabled];
}
- (void)retrieveParticipantsInfo:(void (^ _Nonnull)(NSArray * _Nullable))completionHandler {
[self.jitsiMeetViewController retrieveParticipantsInfo:completionHandler];
ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
[externalAPI retrieveParticipantsInfo:completionHandler];
}
- (void)openChat:(NSString*)to {
[self.jitsiMeetViewController openChat:to];
ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
[externalAPI openChat:to];
}
- (void)closeChat {
[self.jitsiMeetViewController closeChat];
ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
[externalAPI closeChat];
}
- (void)sendChatMessage:(NSString * _Nonnull)message :(NSString * _Nullable)to {
[self.jitsiMeetViewController sendChatMessage:message :to];
ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
[externalAPI sendChatMessage:message :to];
}
- (void)setVideoMuted:(BOOL)muted {
[self.jitsiMeetViewController setVideoMuted:muted];
ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
[externalAPI sendSetVideoMuted:muted];
}
- (void)setClosedCaptionsEnabled:(BOOL)enabled {
@@ -135,47 +147,97 @@
[externalAPI sendSetClosedCaptionsEnabled:enabled];
}
#pragma mark Private
- (BOOL)isPiPEnabled {
return self.delegate && [self.delegate respondsToSelector:@selector(enterPictureInPicture:)];
}
#pragma mark Private methods
- (void)registerObservers {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleUpdateViewPropsNotification:) name:updateViewPropsNotificationName object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleSendEventNotification:) name:sendEventNotificationName object:nil];
}
- (void)handleUpdateViewPropsNotification:(NSNotification *)notification {
NSDictionary *props = [notification.userInfo objectForKey:@"props"];
[self setProps:props];
}
- (void)handleSendEventNotification:(NSNotification *)notification {
NSString *eventName = notification.userInfo[@"name"];
NSString *eventData = notification.userInfo[@"data"];
SEL sel = NSSelectorFromString([self methodNameFromEventName:eventName]);
SEL sel = NSSelectorFromString([self methodNameFromEventName:eventName]);
if (sel && [self.delegate respondsToSelector:sel]) {
[self.delegate performSelector:sel withObject:eventData];
}
}
/**
* Converts a specific event name i.e. redux action type description to a
* method name.
* Converts a specific event name i.e. redux action type description to a
* method name.
*
* @param eventName The event name to convert to a method name.
* @return A method name constructed from the specified `eventName`.
*/
- (NSString *)methodNameFromEventName:(NSString *)eventName {
NSMutableString *methodName
= [NSMutableString stringWithCapacity:eventName.length];
for (NSString *c in [eventName componentsSeparatedByString:@"_"]) {
if (c.length) {
[methodName appendString:
methodName.length ? c.capitalizedString : c.lowercaseString];
}
}
[methodName appendString:@":"];
return methodName;
}
/**
* Passes the given props to the React Native application. The props which we pass
* are a combination of 3 different sources:
*
* @param eventName The event name to convert to a method name.
* @return A method name constructed from the specified `eventName`.
* - JitsiMeet.defaultConferenceOptions
* - This function's parameters
* - Some extras which are added by this function
*/
- (NSString *)methodNameFromEventName:(NSString *)eventName {
NSMutableString *methodName
= [NSMutableString stringWithCapacity:eventName.length];
- (void)setProps:(NSDictionary *_Nonnull)newProps {
NSMutableDictionary *props = mergeProps([[JitsiMeet sharedInstance] getDefaultProps], newProps);
for (NSString *c in [eventName componentsSeparatedByString:@"_"]) {
if (c.length) {
[methodName appendString:
methodName.length ? c.capitalizedString : c.lowercaseString];
}
}
[methodName appendString:@":"];
// Set the PiP flag if it wasn't manually set.
NSMutableDictionary *featureFlags = props[@"flags"];
if (featureFlags[PiPEnabledFeatureFlag] == nil) {
featureFlags[PiPEnabledFeatureFlag]
= [NSNumber numberWithBool:
self.delegate && [self.delegate respondsToSelector:@selector(enterPictureInPicture:)]];
}
return methodName;
// This method is supposed to be imperative i.e. a second
// invocation with one and the same URL is expected to join the respective
// conference again if the first invocation was followed by leaving the
// conference. However, React and, respectively,
// appProperties/initialProperties are declarative expressions i.e. one and
// the same URL will not trigger an automatic re-render in the JavaScript
// source code. The workaround implemented below introduces imperativeness
// in React Component props by defining a unique value per invocation.
props[@"timestamp"] = @(mach_absolute_time());
if (rootView) {
// Update props with the new URL.
rootView.appProperties = props;
} else {
RCTBridge *bridge = [[JitsiMeet sharedInstance] getReactBridge];
rootView
= [[RNRootView alloc] initWithBridge:bridge
moduleName:@"App"
initialProperties:props];
rootView.backgroundColor = self.backgroundColor;
// Add rootView as a subview which completely covers this one.
[rootView setFrame:[self bounds]];
rootView.autoresizingMask
= UIViewAutoresizingFlexibleWidth
| UIViewAutoresizingFlexibleHeight;
[self addSubview:rootView];
}
}
@end

View File

@@ -1,38 +0,0 @@
/*
* Copyright @ 2022-present 8x8, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#import <UIKit/UIKit.h>
#import "JitsiMeetConferenceOptions.h"
NS_ASSUME_NONNULL_BEGIN
@interface JitsiMeetViewController : UIViewController
- (void)join:(JitsiMeetConferenceOptions *)options withPiP:(BOOL)enablePiP;
- (void)leave;
- (void)hangUp;
- (void)setAudioMuted:(BOOL)muted;
- (void)sendEndpointTextMessage:(NSString * _Nonnull)message :(NSString * _Nullable)to;
- (void)toggleScreenShare:(BOOL)enabled;
- (void)retrieveParticipantsInfo:(void (^ _Nonnull)(NSArray * _Nullable))completionHandler;
- (void)openChat:(NSString*)to;
- (void)closeChat;
- (void)sendChatMessage:(NSString * _Nonnull)message :(NSString * _Nullable)to;
- (void)setVideoMuted:(BOOL)muted;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,127 +0,0 @@
/*
* Copyright @ 2022-present 8x8, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#import "JitsiMeetViewController.h"
#import "JitsiMeet+Private.h"
#import "JitsiMeetConferenceOptions+Private.h"
#import "JitsiMeetRenderingView.h"
#import "JitsiMeetView+Private.h"
@interface JitsiMeetViewController ()
@property (strong, nonatomic) JitsiMeetRenderingView *view;
@end
@implementation JitsiMeetViewController
@dynamic view;
- (instancetype)init {
self = [super init];
if (self) {
[self registerObservers];
}
return self;
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)loadView {
[super loadView];
self.view = [[JitsiMeetRenderingView alloc] init];
self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Set a background color which is in accord with the JavaScript and Android
// parts of the application and causes less perceived visual flicker than
// the default background color.
self.view.backgroundColor = [UIColor colorWithRed:.07f green:.07f blue:.07f alpha:1];
}
- (void)join:(JitsiMeetConferenceOptions *)options withPiP:(BOOL)enablePiP {
self.view.isPiPEnabled = enablePiP;
[self.view setProps:options == nil ? @{} : [options asProps]];
}
- (void)leave {
[self.view setProps:@{}];
}
- (void)hangUp {
ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
[externalAPI sendHangUp];
}
- (void)setAudioMuted:(BOOL)muted {
ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
[externalAPI sendSetAudioMuted:muted];
}
- (void)sendEndpointTextMessage:(NSString * _Nonnull)message :(NSString * _Nullable)to {
ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
[externalAPI sendEndpointTextMessage:message :to];
}
- (void)toggleScreenShare:(BOOL)enabled {
ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
[externalAPI toggleScreenShare:enabled];
}
- (void)retrieveParticipantsInfo:(void (^ _Nonnull)(NSArray * _Nullable))completionHandler {
ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
[externalAPI retrieveParticipantsInfo:completionHandler];
}
- (void)openChat:(NSString*)to {
ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
[externalAPI openChat:to];
}
- (void)closeChat {
ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
[externalAPI closeChat];
}
- (void)sendChatMessage:(NSString * _Nonnull)message :(NSString * _Nullable)to {
ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
[externalAPI sendChatMessage:message :to];
}
- (void)setVideoMuted:(BOOL)muted {
ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
[externalAPI sendSetVideoMuted:muted];
}
#pragma mark Private
- (void)registerObservers {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleUpdateViewPropsNotification:) name:updateViewPropsNotificationName object:nil];
}
- (void)handleUpdateViewPropsNotification:(NSNotification *)notification {
NSDictionary *props = [notification.userInfo objectForKey:@"props"];
[self.view setProps:props];
}
@end

View File

@@ -29,8 +29,8 @@
#import <React/RCTLog.h>
#import <WebRTC/WebRTC.h>
#import <JitsiMeetSDK/JitsiMeetSDK-Swift.h>
#import "JitsiAudioSession.h"
#import "../JitsiAudioSession.h"
#import "JMCallKitProxy.h"
// The events emitted/supported by RNCallKit:

View File

@@ -1,5 +1,6 @@
/*
* Copyright @ 2022-present 8x8, Inc.
* Copyright @ 2018-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,16 +15,20 @@
* limitations under the License.
*/
#import <UIKit/UIKit.h>
#import "JitsiMeetViewDelegate.h"
#import <CallKit/CallKit.h>
#import <Foundation/Foundation.h>
#import "JMCallKitListener.h"
NS_ASSUME_NONNULL_BEGIN
@interface JitsiMeetRenderingView : UIView
@interface JMCallKitEmitter : NSObject <CXProviderDelegate>
@property (nonatomic, assign) BOOL isPiPEnabled;
#pragma mark Add/Remove listeners
- (void)addListener:(id<JMCallKitListener>)listener;
- (void)removeListener:(id<JMCallKitListener>)listener;
- (void)setProps:(NSDictionary *_Nonnull)newProps;
#pragma mark Add mute action
- (void)addMuteAction:(NSUUID *)actionUUID;
@end

View File

@@ -0,0 +1,117 @@
/*
* Copyright @ 2022-present 8x8, Inc.
* Copyright @ 2018-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#import "JMCallKitEmitter.h"
@interface JMCallKitEmitter()
@property(nonatomic, strong) NSMutableArray<id<JMCallKitListener>> *listeners;
@property(nonatomic, strong) NSMutableSet<NSUUID *> *pendingMuteActions;
@end
@implementation JMCallKitEmitter
- (instancetype)init {
self = [super init];
if (self) {
self.listeners = [[NSMutableArray alloc] init];
self.pendingMuteActions = [[NSMutableSet alloc] init];
}
return self;
}
#pragma mark Add/Remove listeners
- (void)addListener:(id<JMCallKitListener>)listener {
if (![self.listeners containsObject:listener]) {
[self.listeners addObject:listener];
}
}
- (void)removeListener:(id<JMCallKitListener>)listener {
[self.listeners removeObject:listener];
}
#pragma mark Add mute action
- (void)addMuteAction:(NSUUID *)actionUUID {
[self.pendingMuteActions addObject:actionUUID];
}
#pragma mark CXProviderDelegate
- (void)providerDidReset:(CXProvider *)provider {
for (id listener in self.listeners) {
[listener providerDidReset];
}
[self.pendingMuteActions removeAllObjects];
}
- (void)provider:(CXProvider *)provider performAnswerCallAction:(CXAnswerCallAction *)action {
for (id listener in self.listeners) {
[listener performAnswerCallWithUUID:action.callUUID];
}
[action fulfill];
}
- (void)provider:(CXProvider *)provider performEndCallAction:(CXEndCallAction *)action {
for (id listener in self.listeners) {
[listener performEndCallWithUUID:action.callUUID];
}
[action fulfill];
}
- (void)provider:(CXProvider *)provider performSetMutedCallAction:(CXSetMutedCallAction *)action {
NSUUID *uuid = ([self.pendingMuteActions containsObject:action.UUID]) ? action.UUID : nil;
[self.pendingMuteActions removeObject:action.UUID];
// Avoid mute actions ping-pong: if the mute action was caused by
// the JS side (we requested a transaction) don't call the delegate
// method. If it was called by the provider itself (when the user presses
// the mute button in the CallKit view) then call the delegate method.
//
// NOTE: don't try to be clever and remove this. Been there, done that.
// Won't work.
if (uuid == nil) {
for (id listener in self.listeners) {
[listener performSetMutedCallWithUUID:action.callUUID isMuted:action.isMuted];
}
}
[action fulfill];
}
- (void)provider:(CXProvider *)provider performStartCallAction:(CXStartCallAction *)action {
for (id listener in self.listeners) {
[listener performStartCallWithUUID:action.callUUID isVideo:action.isVideo];
}
[action fulfill];
}
- (void)provider:(CXProvider *)provider didActivateAudioSession:(AVAudioSession *)audioSession {
for (id listener in self.listeners) {
[listener providerDidActivateAudioSessionWithSession:audioSession];
}
}
- (void)provider:(CXProvider *)provider didDeactivateAudioSession:(AVAudioSession *)audioSession {
for (id listener in self.listeners) {
[listener providerDidDeactivateAudioSessionWithSession:audioSession];
}
}
@end

View File

@@ -1,118 +0,0 @@
/*
* Copyright @ 2018-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import AVKit
import CallKit
import Foundation
internal final class JMCallKitEmitter: NSObject, CXProviderDelegate {
private let listeners = NSMutableArray()
private var pendingMuteActions = Set<UUID>()
internal override init() {}
// MARK: - Add/remove listeners
func addListener(_ listener: JMCallKitListener) {
if (!listeners.contains(listener)) {
listeners.add(listener)
}
}
func removeListener(_ listener: JMCallKitListener) {
listeners.remove(listener)
}
// MARK: - Add mute action
func addMuteAction(_ actionUUID: UUID) {
pendingMuteActions.insert(actionUUID)
}
// MARK: - CXProviderDelegate
func providerDidReset(_ provider: CXProvider) {
listeners.forEach {
let listener = $0 as! JMCallKitListener
listener.providerDidReset?()
}
pendingMuteActions.removeAll()
}
func provider(_ provider: CXProvider, perform action: CXAnswerCallAction) {
listeners.forEach {
let listener = $0 as! JMCallKitListener
listener.performAnswerCall?(UUID: action.callUUID)
}
action.fulfill()
}
func provider(_ provider: CXProvider, perform action: CXEndCallAction) {
listeners.forEach {
let listener = $0 as! JMCallKitListener
listener.performEndCall?(UUID: action.callUUID)
}
action.fulfill()
}
func provider(_ provider: CXProvider, perform action: CXSetMutedCallAction) {
let uuid = pendingMuteActions.remove(action.uuid)
// Avoid mute actions ping-pong: if the mute action was caused by
// the JS side (we requested a transaction) don't call the delegate
// method. If it was called by the provider itself (when the user presses
// the mute button in the CallKit view) then call the delegate method.
//
// NOTE: don't try to be clever and remove this. Been there, done that.
// Won't work.
if (uuid == nil) {
listeners.forEach {
let listener = $0 as! JMCallKitListener
listener.performSetMutedCall?(UUID: action.callUUID, isMuted: action.isMuted)
}
}
action.fulfill()
}
func provider(_ provider: CXProvider, perform action: CXStartCallAction) {
listeners.forEach {
let listener = $0 as! JMCallKitListener
listener.performStartCall?(UUID: action.callUUID, isVideo: action.isVideo)
}
action.fulfill()
}
func provider(_ provider: CXProvider,
didActivate audioSession: AVAudioSession) {
listeners.forEach {
let listener = $0 as! JMCallKitListener
listener.providerDidActivateAudioSession?(session: audioSession)
}
}
func provider(_ provider: CXProvider,
didDeactivate audioSession: AVAudioSession) {
listeners.forEach {
let listener = $0 as! JMCallKitListener
listener.providerDidDeactivateAudioSession?(session: audioSession)
}
}
}

View File

@@ -0,0 +1,34 @@
/*
* Copyright @ 2022-present 8x8, Inc.
* Copyright @ 2018-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#import <AVKit/AVKit.h>
#import <CallKit/CallKit.h>
#import <Foundation/Foundation.h>
@protocol JMCallKitListener <NSObject>
@optional
- (void)providerDidReset;
- (void)performAnswerCallWithUUID:(nonnull NSUUID *)UUID;
- (void)performEndCallWithUUID:(nonnull NSUUID *)UUID;
- (void)performSetMutedCallWithUUID:(nonnull NSUUID *)UUID isMuted:(BOOL)isMuted;
- (void)performStartCallWithUUID:(nonnull NSUUID *)UUID isVideo:(BOOL)isVideo;
- (void)providerDidActivateAudioSessionWithSession:(nonnull AVAudioSession *)session;
- (void)providerDidDeactivateAudioSessionWithSession:(nonnull AVAudioSession *)session;
- (void)providerTimedOutPerformingActionWithAction:(nonnull CXAction *)action;
@end

View File

@@ -1,38 +0,0 @@
/*
* Copyright @ 2018-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import AVKit
import CallKit
import Foundation
@objc public protocol JMCallKitListener: NSObjectProtocol {
@objc optional func providerDidReset()
@objc optional func performAnswerCall(UUID: UUID)
@objc optional func performEndCall(UUID: UUID)
@objc optional func performSetMutedCall(UUID: UUID, isMuted: Bool)
@objc optional func performStartCall(UUID: UUID, isVideo: Bool)
@objc optional func providerDidActivateAudioSession(session: AVAudioSession)
@objc optional func providerDidDeactivateAudioSession(session: AVAudioSession)
@objc optional func providerTimedOutPerformingAction(action: CXAction)
}

View File

@@ -0,0 +1,87 @@
/*
* Copyright @ 2022-present 8x8, Inc.
* Copyright @ 2018-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#import <CallKit/CallKit.h>
#import <Foundation/Foundation.h>
#import "JMCallKitListener.h"
NS_ASSUME_NONNULL_BEGIN
@protocol CXProviderProtocol <NSObject>
@property (nonatomic, readwrite, copy) CXProviderConfiguration* configuration;
- (void)setDelegate:(nullable id<CXProviderDelegate>)delegate queue:(nullable dispatch_queue_t)queue;
- (void)reportNewIncomingCallWithUUID:(NSUUID *)uuid update:(CXCallUpdate *)update completion:(void (^)(NSError *))completion;
- (void)reportCallWithUUID:(NSUUID *)uuid updated:(CXCallUpdate *)update;
- (void)reportCallWithUUID:(NSUUID *)uuid endedAtDate:(NSDate *)dateEnded reason:(CXCallEndedReason)endedReason;
- (void)reportOutgoingCallWithUUID:(NSUUID *)uuid startedConnectingAtDate:(NSDate *)dateStartedConnecting;
- (void)reportOutgoingCallWithUUID:(NSUUID *)uuid connectedAtDate:(NSDate *)dateConnected;
- (void)invalidate;
@end
#pragma mark -
@protocol CXCallControllerProtocol <NSObject>
@property (nonatomic, readonly) NSArray<CXCall*> *calls;
- (void)requestTransaction:(CXTransaction *)transaction completion:(void (^)(NSError *_Nullable))completion;
@end
#pragma mark -
/// JitsiMeet CallKit proxy
// NOTE: The methods this class exposes are meant to be called in the UI thread.
// All delegate methods called by JMCallKitEmitter will be called in the UI thread.
@interface JMCallKitProxy : NSObject
/// Enables the proxy in between CallKit and the consumers of the SDK.
/// Defaults to disabled. Set to true when you want to use CallKit.
@property (class) BOOL enabled;
@property (class) id<CXProviderProtocol> callKitProvider;
@property (class) id<CXCallControllerProtocol> callKitCallController;
+ (void)configureProviderWithLocalizedName:(nonnull NSString *)localizedName
ringtoneSound:(nullable NSString *)ringtoneSound
iconTemplateImageData:(nullable NSData*)imageData
NS_SWIFT_NAME(configureProvider(localizedName:ringtoneSound:iconTemplateImageData:));
+ (BOOL)isProviderConfigured;
+ (void)addListener:(nonnull id<JMCallKitListener>)listener NS_SWIFT_NAME(addListener(_:));
+ (void)removeListener:(nonnull id<JMCallKitListener>)listener NS_SWIFT_NAME(removeListener(_:));
+ (BOOL)hasActiveCallForUUID:(nonnull NSString *)callUUID NS_SWIFT_NAME(hasActiveCallForUUID(_:));
+ (void)reportNewIncomingCallWithUUID:(nonnull NSUUID *)uuid
handle:(nullable NSString*)handle
displayName:(nullable NSString*)displayName
hasVideo:(BOOL)hasVideo
completion:(nonnull void (^)(NSError *_Nullable))completion
NS_SWIFT_NAME(reportNewIncomingCall(UUID:handle:displayName:hasVideo:completion:));
+ (void)reportCallUpdateWith:(nonnull NSUUID *)uuid
handle:(nullable NSString *)handle
displayName:(nullable NSString *)displayName
hasVideo:(BOOL)hasVideo;
+ (void)reportCallWith:(nonnull NSUUID *)uuid
endedAt:(nullable NSDate *)dateEnded
reason:(CXCallEndedReason)endedReason;
+ (void)reportOutgoingCallWith:(nonnull NSUUID *)uuid startedConnectingAt:(nullable NSDate *)dateStartedConnecting;
+ (void)reportOutgoingCallWith:(nonnull NSUUID *)uuid connectedAt:(nullable NSDate *)dateConnected;
+ (void)request:(nonnull CXTransaction *)transaction completion:(nonnull void (^)(NSError *_Nullable))completion;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,284 @@
/*
* Copyright @ 2022-present 8x8, Inc.
* Copyright @ 2018-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#import "JMCallKitProxy.h"
#import "JMCallKitEmitter.h"
#pragma mark -
@interface CXProvider(CXProviderProtocol) <CXProviderProtocol>
@end
@implementation CXProvider(CXProviderProtocol)
@end
#pragma mark -
@interface CXCallController(CXCallControllerProtocol) <CXCallControllerProtocol>
@property (nonatomic, readonly) NSArray<CXCall*> *calls;
@end
@implementation CXCallController(CXCallControllerProtocol)
@dynamic calls;
- (NSArray<CXCall*> *)calls {
return self.callObserver.calls;
}
@end
#pragma mark -
@interface JMCallKitProxy ()
@property (class) CXProvider *defaultProvider;
@property (class) CXProviderConfiguration *providerConfiguration;
@end
@interface JMCallKitProxy (Helpers)
+ (CXCallUpdate *)makeCXUpdateWithHandle:(nullable NSString *)handle displayName:(nullable NSString *)displayName hasVideo:(BOOL)hasVideo;
@end
@implementation JMCallKitProxy
@dynamic callKitProvider, callKitCallController, enabled;
@dynamic defaultProvider, providerConfiguration;
static id<CXProviderProtocol> _callKitProvider = nil;
static id<CXCallControllerProtocol> _callKitCallController = nil;
static BOOL _enabled = false;
static CXProvider *_defaultProvider = nil;
static CXProviderConfiguration *_providerConfiguration = nil;
#pragma mark CallJit proxy
+ (id<CXProviderProtocol>)callKitProvider {
return _callKitProvider;
}
+ (void)setCallKitProvider:(id<CXProviderProtocol>)callKitProvider {
if (_callKitProvider != callKitProvider) {
_callKitProvider = callKitProvider;
}
}
+ (id<CXCallControllerProtocol>)callKitCallController {
return _callKitCallController;
}
+ (void)setCallKitCallController:(id<CXCallControllerProtocol>)callKitCallController {
if (_callKitCallController != callKitCallController) {
_callKitCallController = callKitCallController;
}
}
+ (BOOL)enabled {
return _enabled;
}
+ (void)setEnabled:(BOOL)enabled {
_enabled = enabled ;
if (!self.callKitProvider) {
[self.provider invalidate];
}
if (enabled) {
CXProviderConfiguration *configuration = self.providerConfiguration? self.providerConfiguration : [[CXProviderConfiguration alloc] initWithLocalizedName:@""];
if (!self.callKitProvider) {
self.defaultProvider = [[CXProvider alloc] initWithConfiguration: configuration];
}
[self.provider setDelegate:self.emitter queue:nil];
} else {
[self.provider setDelegate:nil queue:nil];
}
}
+ (CXProvider *)defaultProvider {
return _defaultProvider;
}
+ (void)setDefaultProvider:(CXProvider *)defaultProvider {
if (_defaultProvider != defaultProvider) {
_defaultProvider = defaultProvider;
}
}
+ (id<CXProviderProtocol>)provider {
return self.callKitProvider != nil ? self.callKitProvider : self.defaultProvider;
}
+ (id<CXCallControllerProtocol>)callController {
return self.callKitCallController != nil ? self.callKitCallController : self.defaultCallController;
}
+ (CXProviderConfiguration *)providerConfiguration {
return _providerConfiguration;
}
+ (void)setProviderConfiguration:(CXProviderConfiguration *)providerConfiguration {
if (_providerConfiguration != providerConfiguration) {
_providerConfiguration = providerConfiguration;
if (providerConfiguration) {
self.provider.configuration = providerConfiguration;
[self.provider setDelegate:self.emitter queue:nil];
}
}
}
+ (CXCallController *)defaultCallController {
static dispatch_once_t once;
static CXCallController *defaultCallController;
dispatch_once(&once, ^{
defaultCallController = [[CXCallController alloc] init];
});
return defaultCallController;
}
+ (JMCallKitEmitter *)emitter {
static dispatch_once_t once;
static JMCallKitEmitter *emitter;
dispatch_once(&once, ^{
emitter = [[JMCallKitEmitter alloc] init];
});
return emitter;
}
+ (void)configureProviderWithLocalizedName:(nonnull NSString *)localizedName
ringtoneSound:(nullable NSString *)ringtoneSound
iconTemplateImageData:(nullable NSData*)imageData {
if (!self.enabled) {
return;
}
CXProviderConfiguration *configuration = [[CXProviderConfiguration alloc] initWithLocalizedName:localizedName];
configuration.iconTemplateImageData = imageData;
configuration.maximumCallGroups = 1;
configuration.maximumCallsPerCallGroup = 1;
configuration.ringtoneSound = ringtoneSound;
configuration.supportedHandleTypes = [NSSet setWithArray:@[@(CXHandleTypeGeneric)]];
configuration.supportsVideo = true;
self.providerConfiguration = configuration;
}
+ (BOOL)isProviderConfigured {
return self.providerConfiguration != nil;
}
+ (void)addListener:(nonnull id<JMCallKitListener>)listener {
[self.emitter addListener:listener];
}
+ (void)removeListener:(nonnull id<JMCallKitListener>)listener {
[self.emitter removeListener:listener];
}
+ (BOOL)hasActiveCallForUUID:(nonnull NSString *)callUUID {
CXCall *activeCallForUUID = [[self.callController calls] filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(CXCall *evaluatedObject, NSDictionary<NSString *,id> *bindings) {
return evaluatedObject.UUID.UUIDString == callUUID;
}]].firstObject;
if (!activeCallForUUID) {
return false;
}
return true;
}
+ (void)reportNewIncomingCallWithUUID:(nonnull NSUUID *)uuid
handle:(nullable NSString*)handle
displayName:(nullable NSString*)displayName
hasVideo:(BOOL)hasVideo
completion:(nonnull void (^)(NSError *_Nullable))completion {
if (!self.enabled) {
return;
}
CXCallUpdate *callUpdate = [self makeCXUpdateWithHandle:handle displayName:displayName hasVideo:hasVideo];
[self.provider reportNewIncomingCallWithUUID:uuid update:callUpdate completion:completion];
}
+ (void)reportCallUpdateWith:(nonnull NSUUID *)uuid
handle:(nullable NSString *)handle
displayName:(nullable NSString *)displayName
hasVideo:(BOOL)hasVideo {
if (!self.enabled) {
return;
}
CXCallUpdate *callUpdate = [self makeCXUpdateWithHandle:handle displayName:displayName hasVideo:hasVideo];
[self.provider reportCallWithUUID:uuid updated:callUpdate];
}
+ (void)reportCallWith:(nonnull NSUUID *)uuid
endedAt:(nullable NSDate *)dateEnded
reason:(CXCallEndedReason)endedReason {
[self.provider reportCallWithUUID:uuid endedAtDate:dateEnded reason:endedReason];
}
+ (void)reportOutgoingCallWith:(nonnull NSUUID *)uuid startedConnectingAt:(nullable NSDate *)dateStartedConnecting {
[self.provider reportOutgoingCallWithUUID:uuid startedConnectingAtDate:dateStartedConnecting];
}
+ (void)reportOutgoingCallWith:(nonnull NSUUID *)uuid connectedAt:(nullable NSDate *)dateConnected {
[self.provider reportOutgoingCallWithUUID:uuid connectedAtDate:dateConnected];
}
+ (void)request:(nonnull CXTransaction *)transaction completion:(nonnull void (^)(NSError *_Nullable))completion {
if (!self.enabled) {
return;
}
// XXX keep track of muted actions to avoid "ping-pong"ing. See
// JMCallKitEmitter for details on the CXSetMutedCallAction handling.
for (CXAction *action in transaction.actions) {
if ([action isKindOfClass:[CXSetMutedCallAction class]]) {
[self.emitter addMuteAction:action.UUID];
}
}
[self.callController requestTransaction:transaction completion:completion];
}
@end
@implementation JMCallKitProxy (Helpers)
+ (CXCallUpdate *)makeCXUpdateWithHandle:(nullable NSString *)handle displayName:(nullable NSString *)displayName hasVideo:(BOOL)hasVideo {
CXCallUpdate *update = [[CXCallUpdate alloc] init];
update.supportsDTMF = false;
update.supportsHolding = false;
update.supportsGrouping = false;
update.supportsUngrouping = false;
update.hasVideo = hasVideo;
update.localizedCallerName = displayName;
if (handle) {
update.remoteHandle = [[CXHandle alloc] initWithType:CXHandleTypeGeneric value:handle];
}
return update;
}
@end

View File

@@ -1,231 +0,0 @@
/*
* Copyright @ 2018-present 8x8, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import CallKit
import Foundation
public protocol CXProviderProtocol: AnyObject {
var configuration: CXProviderConfiguration { get set }
func setDelegate(_ delegate: CXProviderDelegate?, queue: DispatchQueue?)
func reportNewIncomingCall(with UUID: UUID, update: CXCallUpdate, completion: @escaping (Error?) -> Void)
func reportCall(with UUID: UUID, updated update: CXCallUpdate)
func reportCall(with UUID: UUID, endedAt dateEnded: Date?, reason endedReason: CXCallEndedReason)
func reportOutgoingCall(with UUID: UUID, startedConnectingAt dateStartedConnecting: Date?)
func reportOutgoingCall(with UUID: UUID, connectedAt dateConnected: Date?)
func invalidate()
}
public protocol CXCallControllerProtocol: AnyObject {
var calls: [CXCall] { get }
func request(_ transaction: CXTransaction, completion: @escaping (Error?) -> Swift.Void)
}
extension CXProvider: CXProviderProtocol {}
extension CXCallController: CXCallControllerProtocol {
public var calls: [CXCall] {
return callObserver.calls
}
}
/// JitsiMeet CallKit proxy
// NOTE: The methods this class exposes are meant to be called in the UI thread.
// All delegate methods called by JMCallKitEmitter will be called in the UI thread.
@objc public final class JMCallKitProxy: NSObject {
private override init() {}
// MARK: - CallKit proxy
public static var callKitProvider: CXProviderProtocol?
public static var callKitCallController: CXCallControllerProtocol?
private static var defaultProvider: CXProvider?
private static var provider: CXProviderProtocol? {
callKitProvider ?? defaultProvider
}
private static var callController: CXCallControllerProtocol {
callKitCallController ?? defaultCallController
}
private static var providerConfiguration: CXProviderConfiguration? {
didSet {
guard let configuration = providerConfiguration else { return }
provider?.configuration = configuration
provider?.setDelegate(emitter, queue: nil)
}
}
private static let defaultCallController: CXCallController = {
return CXCallController()
}()
private static let emitter: JMCallKitEmitter = {
return JMCallKitEmitter()
}()
/// Enables the proxy in between CallKit and the consumers of the SDK.
/// Defaults to disabled. Set to true when you want to use CallKit.
@objc public static var enabled: Bool = false {
didSet {
if callKitProvider == nil {
provider?.invalidate()
}
if enabled {
let configuration = providerConfiguration ?? CXProviderConfiguration(localizedName: "")
if callKitProvider == nil {
defaultProvider = CXProvider(configuration: configuration)
}
provider?.setDelegate(emitter, queue: nil)
} else {
provider?.setDelegate(nil, queue: nil)
}
}
}
@objc public static func configureProvider(localizedName: String,
ringtoneSound: String?,
iconTemplateImageData: Data?) {
guard enabled else { return }
let configuration = CXProviderConfiguration(localizedName: localizedName)
configuration.iconTemplateImageData = iconTemplateImageData
configuration.maximumCallGroups = 1
configuration.maximumCallsPerCallGroup = 1
configuration.ringtoneSound = ringtoneSound
configuration.supportedHandleTypes = [CXHandle.HandleType.generic]
configuration.supportsVideo = true
providerConfiguration = configuration
}
@objc public static func isProviderConfigured() -> Bool {
return providerConfiguration != nil
}
@objc public static func addListener(_ listener: JMCallKitListener) {
emitter.addListener(listener)
}
@objc public static func removeListener(_ listener: JMCallKitListener) {
emitter.removeListener(listener)
}
@objc public static func hasActiveCallForUUID(_ callUUID: String) -> Bool {
let activeCallForUUID = callController.calls.first {
$0.uuid == UUID(uuidString: callUUID)
}
guard activeCallForUUID != nil else { return false }
return true
}
@objc public static func reportNewIncomingCall(UUID: UUID,
handle: String?,
displayName: String?,
hasVideo: Bool,
completion: @escaping (Error?) -> Void) {
guard enabled else { return }
let callUpdate = makeCXUpdate(handle: handle,
displayName: displayName,
hasVideo: hasVideo)
provider?.reportNewIncomingCall(with: UUID,
update: callUpdate,
completion: completion)
}
@objc public static func reportCallUpdate(with UUID: UUID,
handle: String?,
displayName: String?,
hasVideo: Bool) {
guard enabled else { return }
let callUpdate = makeCXUpdate(handle: handle,
displayName: displayName,
hasVideo: hasVideo)
provider?.reportCall(with: UUID, updated: callUpdate)
}
@objc public static func reportCall(
with UUID: UUID,
endedAt dateEnded: Date?,
reason endedReason: CXCallEndedReason) {
guard enabled else { return }
provider?.reportCall(with: UUID,
endedAt: dateEnded,
reason: endedReason)
}
@objc public static func reportOutgoingCall(
with UUID: UUID,
startedConnectingAt dateStartedConnecting: Date?) {
guard enabled else { return }
provider?.reportOutgoingCall(with: UUID,
startedConnectingAt: dateStartedConnecting)
}
@objc public static func reportOutgoingCall(
with UUID: UUID,
connectedAt dateConnected: Date?) {
guard enabled else { return }
provider?.reportOutgoingCall(with: UUID, connectedAt: dateConnected)
}
@objc public static func request(
_ transaction: CXTransaction,
completion: @escaping (Error?) -> Swift.Void) {
guard enabled else { return }
// XXX keep track of muted actions to avoid "ping-pong"ing. See
// JMCallKitEmitter for details on the CXSetMutedCallAction handling.
for action in transaction.actions {
if (action as? CXSetMutedCallAction) != nil {
emitter.addMuteAction(action.uuid)
}
}
callController.request(transaction, completion: completion)
}
// MARK: - Callkit Proxy helpers
private static func makeCXUpdate(handle: String?,
displayName: String?,
hasVideo: Bool) -> CXCallUpdate {
let update = CXCallUpdate()
update.supportsDTMF = false
update.supportsHolding = false
update.supportsGrouping = false
update.supportsUngrouping = false
update.hasVideo = hasVideo
if let handle = handle {
update.remoteHandle = CXHandle(type: .generic,
value: handle)
}
if let displayName = displayName {
update.localizedCallerName = displayName
}
return update
}
}

View File

@@ -1,28 +0,0 @@
{
"af": "",
"az": "Azerbeidjans",
"bg": "Bulgaars",
"cs": "Tsjeggies",
"de": "Duits",
"el": "Grieks",
"en": "Engels",
"eo": "Esperanto",
"es": "Spaans",
"fr": "Frans",
"hy": "Armeens",
"it": "Italiaans",
"ja": "Japannees",
"ko": "Koreaans",
"nb": "Bokmal-Noorweegs",
"oc": "Oksitaans",
"pl": "Pools",
"ptBR": "Portugees (Brasilië)",
"ru": "Russies",
"sk": "Slowaaks",
"sl": "Sloweens",
"sv": "Sweeds",
"tr": "Turks",
"uk": "Oekraïens",
"vi": "Viëtnamees",
"zhCN": "Sjinees (Sjina)"
}

View File

@@ -1,47 +0,0 @@
{
"af": "الأفريكانية",
"ar": "العربية",
"bg": "البلغارية",
"ca": "الكاتالانية",
"cs": "التشيكية",
"da": "الدنماركية",
"de": "الألمانية",
"el": "اليونانية",
"en": "الإنجليزية",
"enGB": "الإنجليزية (المملكة المتحدة)",
"eo": "الإسبرانتو",
"es": "الإسبانية",
"esUS": "الإسبانية (أمريكا اللاتينية)",
"et": "الإستونية",
"eu": "الباسكية",
"fi": "الفنلندية",
"fr": "الفرنسية",
"frCA": "الفرنسية (الكندية)",
"he": "العبرية",
"hr": "الكرواتية",
"hu": "الهنغارية",
"hy": "الأرمنية",
"id": "الإندونيسية",
"it": "الإيطالية",
"ja": "اليابانية",
"kab": "قَبَلي",
"ko": "الكورية",
"lt": "الليتوانية",
"mr": "الماراثى",
"nl": "الهولندية",
"oc": "القسطانية",
"pl": "البولندية",
"ptBR": "البرتغالية (البرازيل)",
"ro": "الرومانية",
"ru": "الروسية",
"sc": "السردينية",
"sk": "السلوفاكية",
"sl": "السلوفينية",
"sv": "السويدية",
"th": "التايلندية",
"tr": "التركية",
"uk": "الأوكرانية",
"vi": "الفيتنامية",
"zhCN": "الصينية (الصين)",
"zhTW": "الصينية (تايوان)"
}

View File

@@ -1,35 +0,0 @@
{
"af": "Афрыкаанс",
"bg": "Балгарская",
"ca": "Каталанская",
"cs": "Чэшская",
"da": "Дацкая",
"de": "Нямецкая",
"el": "Грэцкая",
"en": "Англійская",
"enGB": "Англійская (Вялікабрытанія)",
"eo": "Эсперанта",
"es": "Іспанская",
"esUS": "Іспанская (Лацінская Амерыка)",
"et": "Эстонская",
"fi": "Фінская",
"fr": "Французская",
"frCA": "Французская (канадская)",
"hr": "Харвацкая",
"hu": "Венгерская",
"hy": "Армянская",
"it": "Італьянская",
"ja": "Японская",
"ko": "Карэйская",
"nl": "Галандская",
"oc": "Аксітанская",
"pl": "Польская",
"ptBR": "Партугальская (Бразілія)",
"ru": "Расійская",
"sv": "Шведская",
"tr": "Турэцкая",
"uk": "Украінская",
"vi": "В'етнамская",
"zhCN": "Кітайская (Кітай)",
"zhTW": "Кітайская (Тайвань)"
}

View File

@@ -1,33 +0,0 @@
{
"af": "Африканс",
"bg": "Български",
"ca": "Каталонски",
"cs": "Чешки",
"de": "Немски",
"el": "Гръцки",
"en": "Английски",
"enGB": "Английски (Великобритания)",
"eo": "Есперанто",
"es": "Испански",
"esUS": "Испански (Латинска Америка)",
"fi": "Фински",
"fr": "Френски",
"frCA": "Френски (Канада)",
"hr": "Хърватски",
"hu": "Унгарски",
"hy": "Арменски",
"it": "Италиански",
"ja": "Японски",
"ko": "Корейски",
"nl": "Нидерландски",
"oc": "Окситански",
"pl": "Полски",
"ptBR": "Португалски (Бразилия)",
"ru": "Руски",
"sv": "Шведски",
"tr": "Турски",
"uk": "Украински",
"vi": "Виетнамски",
"zhCN": "Китайски (Китай)",
"zhTW": "Тайвански"
}

Some files were not shown because too many files have changed in this diff Show More