mirror of
https://gitcode.com/GitHub_Trending/ji/jitsi-meet.git
synced 2026-01-06 14:52:28 +00:00
Compare commits
335 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4857664f15 | ||
|
|
0f84b0b9fe | ||
|
|
eda3e620d3 | ||
|
|
e8df8f75a8 | ||
|
|
f2b2b02029 | ||
|
|
66769136ed | ||
|
|
179647c93c | ||
|
|
25bd824621 | ||
|
|
be25ad855f | ||
|
|
b1931de7b0 | ||
|
|
02da4a1c42 | ||
|
|
5c2ec5df54 | ||
|
|
e30b0306f9 | ||
|
|
11e13e1849 | ||
|
|
0f7aa5a084 | ||
|
|
ad4707c660 | ||
|
|
d0c22806ec | ||
|
|
be7f2643df | ||
|
|
6c9441fa7b | ||
|
|
a2d39ca5b1 | ||
|
|
d2a36ea3a8 | ||
|
|
e52c9043a5 | ||
|
|
ee5817539b | ||
|
|
da9b5a9156 | ||
|
|
bb84c47e78 | ||
|
|
13f4da7855 | ||
|
|
f935b29629 | ||
|
|
f5f689c53d | ||
|
|
af4ba32803 | ||
|
|
9e11bc302b | ||
|
|
438b3924d7 | ||
|
|
a2d0492007 | ||
|
|
c35d1d8d4b | ||
|
|
7d7bf987a1 | ||
|
|
3e744c5ffe | ||
|
|
f4f8808d95 | ||
|
|
21bcbdc12f | ||
|
|
090433b6e8 | ||
|
|
230cbfac1e | ||
|
|
c56c5bd145 | ||
|
|
f5a4fd4bc2 | ||
|
|
cb881311e7 | ||
|
|
ac2698f829 | ||
|
|
5fafb5d29e | ||
|
|
fbcdb250f4 | ||
|
|
ba8529d72b | ||
|
|
1230cebde2 | ||
|
|
93406bb12c | ||
|
|
d43eea91cf | ||
|
|
7364c7f27b | ||
|
|
2de2500080 | ||
|
|
349e4bfb57 | ||
|
|
4f92811263 | ||
|
|
a4e35f81cf | ||
|
|
7aefc3b94a | ||
|
|
3c180d3932 | ||
|
|
c523c07cb7 | ||
|
|
5c77f61037 | ||
|
|
8162ae4dbe | ||
|
|
69e0a37529 | ||
|
|
bfa88f13dc | ||
|
|
0d917df1fb | ||
|
|
95a3a8de0b | ||
|
|
f4985d8028 | ||
|
|
5d6aec3f3c | ||
|
|
2e6f14f872 | ||
|
|
90b17046f6 | ||
|
|
86ab2be65e | ||
|
|
11f138d28f | ||
|
|
e163d6438b | ||
|
|
24cb07b830 | ||
|
|
53df3a7b55 | ||
|
|
ca54533153 | ||
|
|
02f5987187 | ||
|
|
ce96b71bfa | ||
|
|
a32d237d54 | ||
|
|
48db099134 | ||
|
|
1106a86ba7 | ||
|
|
54346c065d | ||
|
|
c3ebde18df | ||
|
|
c613082ce1 | ||
|
|
eee096e0c0 | ||
|
|
9c6119606f | ||
|
|
077afecdba | ||
|
|
1b4bbcba3d | ||
|
|
32b8c62ec9 | ||
|
|
a9bc83db03 | ||
|
|
90bcbebedb | ||
|
|
c06d456ae6 | ||
|
|
fe0c804cc0 | ||
|
|
4ee77b1f65 | ||
|
|
7cbb377a66 | ||
|
|
0bccda2c9e | ||
|
|
3426960d5a | ||
|
|
fb2cfaa204 | ||
|
|
d61d47fae3 | ||
|
|
2cb9596536 | ||
|
|
62a10e6587 | ||
|
|
e38f9a293b | ||
|
|
eba7cfcec5 | ||
|
|
ae70370a38 | ||
|
|
45c67142e9 | ||
|
|
6a03e49b9e | ||
|
|
25e7b79237 | ||
|
|
779ecd6da6 | ||
|
|
dd4d49a591 | ||
|
|
63b6b5a72d | ||
|
|
df9185f92a | ||
|
|
9bb0decb30 | ||
|
|
e18240cfc6 | ||
|
|
1703ed8b23 | ||
|
|
945eda680c | ||
|
|
a378ba7827 | ||
|
|
73ab43ac0c | ||
|
|
3f5fa1e663 | ||
|
|
e05ad18ee4 | ||
|
|
6dd04136de | ||
|
|
ffe005ba0a | ||
|
|
7393c20ed8 | ||
|
|
7509b520f3 | ||
|
|
4c9f3d287a | ||
|
|
fef562d767 | ||
|
|
d9bbf35466 | ||
|
|
1cd80a33c6 | ||
|
|
2d6e181a13 | ||
|
|
f5e60a7ca4 | ||
|
|
f0a45a9976 | ||
|
|
81f5e68382 | ||
|
|
e68ede65e1 | ||
|
|
8c0de928ab | ||
|
|
9d57c8e058 | ||
|
|
35442c6094 | ||
|
|
d6f3c2a0f4 | ||
|
|
b83c55e9c4 | ||
|
|
a1d20dc188 | ||
|
|
95084e1004 | ||
|
|
5502601fb3 | ||
|
|
3fa72c99bc | ||
|
|
079a2a505d | ||
|
|
139884fbe7 | ||
|
|
3ef3233242 | ||
|
|
443f4e4feb | ||
|
|
21a1d52753 | ||
|
|
0f63e560b0 | ||
|
|
43bea201e6 | ||
|
|
6e1e6df952 | ||
|
|
8ce1423373 | ||
|
|
ede97584f2 | ||
|
|
247c54b6c6 | ||
|
|
10bb186c13 | ||
|
|
e296008d95 | ||
|
|
01001d6438 | ||
|
|
fce15b491d | ||
|
|
cf37ba8771 | ||
|
|
0350f18e68 | ||
|
|
c9bbc6c762 | ||
|
|
fa942e9f3b | ||
|
|
fd67fb652b | ||
|
|
a87d4f4a1d | ||
|
|
efb69d5382 | ||
|
|
db988f6e62 | ||
|
|
f4b46128bc | ||
|
|
9323b86e3c | ||
|
|
06842c724a | ||
|
|
5f62acc67c | ||
|
|
17008237dc | ||
|
|
271ea8315b | ||
|
|
f18f8c1061 | ||
|
|
b535b8c583 | ||
|
|
adcd9a501b | ||
|
|
cfb1fef162 | ||
|
|
8b4f2495dc | ||
|
|
7e7107d45a | ||
|
|
45c0597aff | ||
|
|
c77e2c8301 | ||
|
|
3403d7bec2 | ||
|
|
c4557c66aa | ||
|
|
cfda02ee10 | ||
|
|
575ab1f1cb | ||
|
|
b4f98e7386 | ||
|
|
e8de9b4d66 | ||
|
|
6fe353cfa4 | ||
|
|
882d343e8b | ||
|
|
cc3a8b7b8d | ||
|
|
104bfe7339 | ||
|
|
fb9d35a991 | ||
|
|
8fabba1679 | ||
|
|
5fbf741278 | ||
|
|
bebcc8234f | ||
|
|
1e9f599a35 | ||
|
|
cc5a3e499f | ||
|
|
dbcbafe088 | ||
|
|
b034cf27cb | ||
|
|
126dba8070 | ||
|
|
a7c1aa4900 | ||
|
|
206215c7c1 | ||
|
|
f38c5f39d2 | ||
|
|
09efaecc41 | ||
|
|
3bb581c8d9 | ||
|
|
96099a06a8 | ||
|
|
4ef5da6c82 | ||
|
|
289ece42df | ||
|
|
7dba5f8a7e | ||
|
|
1010955393 | ||
|
|
3bd3be4df0 | ||
|
|
fc60ab8383 | ||
|
|
85d2123fac | ||
|
|
5790742d53 | ||
|
|
be1752c162 | ||
|
|
b9aeb19379 | ||
|
|
7951dc3ce7 | ||
|
|
dfb2a07cfa | ||
|
|
94dc6309de | ||
|
|
3f2018a1de | ||
|
|
cd4ab8a5f1 | ||
|
|
594f9dfcdd | ||
|
|
8dd71a921b | ||
|
|
6d39d13af7 | ||
|
|
372c2cb0f9 | ||
|
|
5b41d68d39 | ||
|
|
1b9870dade | ||
|
|
38eff2ba24 | ||
|
|
11f6b442fe | ||
|
|
e458eed931 | ||
|
|
f07bd4a0d6 | ||
|
|
40637aa3dc | ||
|
|
2f10d80184 | ||
|
|
739c060018 | ||
|
|
41a6cbd3fc | ||
|
|
61df6f6794 | ||
|
|
d44cbb6d1e | ||
|
|
06ed0e43ad | ||
|
|
eb911ec9b5 | ||
|
|
e8cdf38fda | ||
|
|
e578f6c30f | ||
|
|
77d687952d | ||
|
|
bf222c5094 | ||
|
|
08f9dc5e83 | ||
|
|
9c83831b2c | ||
|
|
97bc41f644 | ||
|
|
f70ed9cb8a | ||
|
|
123ab32e75 | ||
|
|
3c370eb6ca | ||
|
|
3e6c988c30 | ||
|
|
649ace1f44 | ||
|
|
57f27b4234 | ||
|
|
2ae4ba3875 | ||
|
|
0bfa1027a9 | ||
|
|
f412ff7f11 | ||
|
|
3975db7a68 | ||
|
|
02e4d2b902 | ||
|
|
ca095240b9 | ||
|
|
3d60773963 | ||
|
|
895ce56e8d | ||
|
|
d12860082c | ||
|
|
4e03f20a51 | ||
|
|
0435c3cc64 | ||
|
|
ea4be6cb30 | ||
|
|
fa39c10766 | ||
|
|
82c047707f | ||
|
|
00221b7482 | ||
|
|
8266d55cb9 | ||
|
|
b2396ff809 | ||
|
|
fb20786b65 | ||
|
|
f5649efa49 | ||
|
|
7b361b3e23 | ||
|
|
05fdd5f31f | ||
|
|
5c52ee97ed | ||
|
|
3626e51c24 | ||
|
|
ef748c576d | ||
|
|
dd044ad252 | ||
|
|
5f04c5ba64 | ||
|
|
8f5eabe1f2 | ||
|
|
43578474a0 | ||
|
|
6dbf283f3d | ||
|
|
a1e0a46bad | ||
|
|
627027b167 | ||
|
|
4d41d36020 | ||
|
|
0f57c37d6a | ||
|
|
5b34068435 | ||
|
|
52ce9a86ed | ||
|
|
bdff92397b | ||
|
|
1abc6b1e4a | ||
|
|
ca259287be | ||
|
|
5601a62b60 | ||
|
|
d3c7b074d4 | ||
|
|
0fa0e99ffa | ||
|
|
002d0fed42 | ||
|
|
873cdbb404 | ||
|
|
91cbeb0b3f | ||
|
|
3a87282e26 | ||
|
|
fa5ee32720 | ||
|
|
03c91de5c1 | ||
|
|
2ec82c371c | ||
|
|
abc9d36c4c | ||
|
|
efa0a132c4 | ||
|
|
083b009eba | ||
|
|
f0ba37e605 | ||
|
|
a2c3bdf05f | ||
|
|
22a52dafca | ||
|
|
3960b59765 | ||
|
|
db54c45b13 | ||
|
|
3e66e0009d | ||
|
|
d091881851 | ||
|
|
de44c53482 | ||
|
|
64fef80f31 | ||
|
|
87f6d27fb2 | ||
|
|
3f0e50a9cd | ||
|
|
d63e0c5ab6 | ||
|
|
9b9fbc0bc9 | ||
|
|
5505f01cd9 | ||
|
|
7e7d3c0cc7 | ||
|
|
1f99ce3457 | ||
|
|
94074836ec | ||
|
|
ccba7e8f75 | ||
|
|
727b6dab9e | ||
|
|
0f1bf09c69 | ||
|
|
a6f93db8e3 | ||
|
|
8e0cb583af | ||
|
|
30a0a624a2 | ||
|
|
2cea6c7b98 | ||
|
|
69365d7e1f | ||
|
|
5783e8992a | ||
|
|
dbc29a08ee | ||
|
|
6f4b858e35 | ||
|
|
ffef8f78ea | ||
|
|
82b2e77747 | ||
|
|
abc752635d | ||
|
|
5ec6581d2e | ||
|
|
e139c6d32d | ||
|
|
4e1af131fb | ||
|
|
867d998d15 | ||
|
|
b1a9d68cf5 | ||
|
|
8b4c7ebc03 | ||
|
|
63ea273b20 |
@@ -1,5 +1,6 @@
|
||||
module.exports = {
|
||||
'extends': [
|
||||
'@jitsi/eslint-config'
|
||||
]
|
||||
],
|
||||
'ignorePatterns': [ '*.d.ts' ]
|
||||
};
|
||||
|
||||
34
.github/workflows/ci.yml
vendored
34
.github/workflows/ci.yml
vendored
@@ -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
|
||||
@@ -20,6 +21,25 @@ jobs:
|
||||
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: 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
|
||||
|
||||
26
Makefile
26
Makefile
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -27,10 +27,6 @@ ext {
|
||||
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
11
android/scripts/logcat.sh
Executable 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
|
||||
@@ -77,9 +77,9 @@ 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-reanimated')
|
||||
implementation project(':react-native-safe-area-context')
|
||||
implementation project(':react-native-screens')
|
||||
implementation project(':react-native-slider')
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -30,6 +31,7 @@ import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||
|
||||
import com.facebook.react.modules.core.PermissionListener;
|
||||
|
||||
import org.wonday.orientation.OrientationActivityLifecycle;
|
||||
import org.jitsi.meet.sdk.log.JitsiMeetLogger;
|
||||
|
||||
import java.util.HashMap;
|
||||
@@ -86,6 +88,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);
|
||||
@@ -94,6 +104,7 @@ public class JitsiMeetActivity extends AppCompatActivity
|
||||
this.jitsiView = findViewById(R.id.jitsiView);
|
||||
|
||||
registerForBroadcastMessages();
|
||||
registerActivityLifecycleCallbacks(OrientationActivityLifecycle.getInstance());
|
||||
|
||||
if (!extraInitialize()) {
|
||||
initialize();
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -85,6 +85,7 @@ class ReactInstanceManagerHolder {
|
||||
WebRTCModule.Options options = new WebRTCModule.Options();
|
||||
|
||||
AudioDeviceModule adm = JavaAudioDeviceModule.builder(reactContext)
|
||||
.setEnableVolumeLogger(false)
|
||||
.createAudioDeviceModule();
|
||||
options.setAudioDeviceModule(adm);
|
||||
|
||||
@@ -117,7 +118,6 @@ class ReactInstanceManagerHolder {
|
||||
new com.oblador.performance.PerformancePackage(),
|
||||
new com.reactnativecommunity.slider.ReactSliderPackage(),
|
||||
new com.brentvatne.react.ReactVideoPackage(),
|
||||
new com.swmansion.reanimated.ReanimatedPackage(),
|
||||
new org.reactnative.maskedview.RNCMaskedViewPackage(),
|
||||
new com.reactnativecommunity.webview.RNCWebViewPackage(),
|
||||
new com.kevinresol.react_native_default_preference.RNDefaultPreferencePackage(),
|
||||
@@ -129,6 +129,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) {
|
||||
|
||||
@@ -33,12 +33,12 @@ 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'
|
||||
project(':react-native-performance').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-performance/android')
|
||||
include ':react-native-reanimated'
|
||||
project(':react-native-reanimated').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-reanimated/android')
|
||||
include ':react-native-safe-area-context'
|
||||
project(':react-native-safe-area-context').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-safe-area-context/android')
|
||||
include ':react-native-screens'
|
||||
|
||||
6
app.js
6
app.js
@@ -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';
|
||||
|
||||
|
||||
126
conference.js
126
conference.js
@@ -15,8 +15,8 @@ import Recorder from './modules/recorder/Recorder';
|
||||
import { createTaskQueue } from './modules/util/helpers';
|
||||
import {
|
||||
createDeviceChangedEvent,
|
||||
createStartSilentEvent,
|
||||
createScreenSharingEvent,
|
||||
createStartSilentEvent,
|
||||
createTrackMutedEvent,
|
||||
sendAnalytics
|
||||
} from './react/features/analytics';
|
||||
@@ -30,14 +30,15 @@ import { shouldShowModeratedNotification } from './react/features/av-moderation/
|
||||
import { setAudioOnly } from './react/features/base/audio-only';
|
||||
import {
|
||||
AVATAR_URL_COMMAND,
|
||||
CONFERENCE_LEAVE_REASONS,
|
||||
EMAIL_COMMAND,
|
||||
_conferenceWillJoin,
|
||||
authStatusChanged,
|
||||
commonUserJoinedHandling,
|
||||
commonUserLeftHandling,
|
||||
conferenceFailed,
|
||||
conferenceJoined,
|
||||
conferenceJoinInProgress,
|
||||
conferenceJoined,
|
||||
conferenceLeft,
|
||||
conferenceSubjectChanged,
|
||||
conferenceTimestampChanged,
|
||||
@@ -49,14 +50,14 @@ import {
|
||||
getConferenceOptions,
|
||||
kickedOut,
|
||||
lockStateChanged,
|
||||
nonParticipantMessageReceived,
|
||||
onStartMutedPolicyChanged,
|
||||
p2pStatusChanged,
|
||||
sendLocalParticipant,
|
||||
nonParticipantMessageReceived
|
||||
sendLocalParticipant
|
||||
} from './react/features/base/conference';
|
||||
import {
|
||||
getReplaceParticipant,
|
||||
getMultipleVideoSendingSupportFeatureFlag
|
||||
getMultipleVideoSendingSupportFeatureFlag,
|
||||
getReplaceParticipant
|
||||
} from './react/features/base/config/functions';
|
||||
import {
|
||||
checkAndNotifyForNewDevice,
|
||||
@@ -68,7 +69,6 @@ import {
|
||||
updateDeviceList
|
||||
} from './react/features/base/devices';
|
||||
import {
|
||||
browser,
|
||||
JitsiConferenceErrors,
|
||||
JitsiConferenceEvents,
|
||||
JitsiConnectionErrors,
|
||||
@@ -77,14 +77,15 @@ import {
|
||||
JitsiMediaDevicesEvents,
|
||||
JitsiParticipantConnectionStatus,
|
||||
JitsiTrackErrors,
|
||||
JitsiTrackEvents
|
||||
JitsiTrackEvents,
|
||||
browser
|
||||
} from './react/features/base/lib-jitsi-meet';
|
||||
import { isFatalJitsiConnectionError } from './react/features/base/lib-jitsi-meet/functions';
|
||||
import {
|
||||
MEDIA_TYPE,
|
||||
getStartWithAudioMuted,
|
||||
getStartWithVideoMuted,
|
||||
isVideoMutedByUser,
|
||||
MEDIA_TYPE,
|
||||
setAudioAvailable,
|
||||
setAudioMuted,
|
||||
setAudioUnmutePermissions,
|
||||
@@ -139,11 +140,11 @@ import {
|
||||
import { maybeSetLobbyChatMessageListener } from './react/features/lobby/actions.any';
|
||||
import { setNoiseSuppressionEnabled } from './react/features/noise-suppression/actions';
|
||||
import {
|
||||
NOTIFICATION_TIMEOUT_TYPE,
|
||||
isModerationNotificationDisplayed,
|
||||
showNotification,
|
||||
NOTIFICATION_TIMEOUT_TYPE
|
||||
showNotification
|
||||
} from './react/features/notifications';
|
||||
import { mediaPermissionPromptVisibilityChanged, toggleSlowGUMOverlay } from './react/features/overlay';
|
||||
import { mediaPermissionPromptVisibilityChanged } from './react/features/overlay';
|
||||
import { suspendDetected } from './react/features/power-monitor';
|
||||
import {
|
||||
initPrejoin,
|
||||
@@ -152,13 +153,14 @@ import {
|
||||
setJoiningInProgress
|
||||
} from './react/features/prejoin';
|
||||
import { disableReceiver, stopReceiver } from './react/features/remote-control';
|
||||
import { setScreenAudioShareState, isScreenAudioShared } from './react/features/screen-share/';
|
||||
import { isScreenAudioShared, setScreenAudioShareState } from './react/features/screen-share/';
|
||||
import { toggleScreenshotCaptureSummary } from './react/features/screenshot-capture';
|
||||
import { isScreenshotCaptureEnabled } from './react/features/screenshot-capture/functions';
|
||||
import { AudioMixerEffect } from './react/features/stream-effects/audio-mixer/AudioMixerEffect';
|
||||
import { createPresenterEffect } from './react/features/stream-effects/presenter';
|
||||
import { createRnnoiseProcessor } from './react/features/stream-effects/rnnoise';
|
||||
import { endpointMessageReceived } from './react/features/subtitles';
|
||||
import { handleToggleVideoMuted } from './react/features/toolbox/actions.any';
|
||||
import { muteLocal } from './react/features/video-menu/actions.any';
|
||||
import UIEvents from './service/UI/UIEvents';
|
||||
|
||||
@@ -381,7 +383,7 @@ class ConferenceConnector {
|
||||
// FIXME the conference should be stopped by the library and not by
|
||||
// the app. Both the errors above are unrecoverable from the library
|
||||
// perspective.
|
||||
room.leave().then(() => connection.disconnect());
|
||||
room.leave(CONFERENCE_LEAVE_REASONS.UNRECOVERABLE_ERROR).then(() => connection.disconnect());
|
||||
break;
|
||||
|
||||
case JitsiConferenceErrors.CONFERENCE_MAX_USERS:
|
||||
@@ -464,7 +466,7 @@ function _connectionFailedHandler(error) {
|
||||
_connectionFailedHandler);
|
||||
if (room) {
|
||||
APP.store.dispatch(conferenceWillLeave(room));
|
||||
room.leave();
|
||||
room.leave(CONFERENCE_LEAVE_REASONS.UNRECOVERABLE_ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -517,11 +519,6 @@ export default {
|
||||
);
|
||||
}
|
||||
|
||||
JitsiMeetJS.mediaDevices.addEventListener(
|
||||
JitsiMediaDevicesEvents.SLOW_GET_USER_MEDIA,
|
||||
() => APP.store.dispatch(toggleSlowGUMOverlay(true))
|
||||
);
|
||||
|
||||
let tryCreateLocalTracks;
|
||||
|
||||
// On Electron there is no permission prompt for granting permissions. That's why we don't need to
|
||||
@@ -531,8 +528,7 @@ export default {
|
||||
const audioOptions = {
|
||||
devices: [ MEDIA_TYPE.AUDIO ],
|
||||
timeout,
|
||||
firePermissionPromptIsShownEvent: true,
|
||||
fireSlowPromiseEvent: true
|
||||
firePermissionPromptIsShownEvent: true
|
||||
};
|
||||
|
||||
// FIXME is there any simpler way to rewrite this spaghetti below ?
|
||||
@@ -583,8 +579,7 @@ export default {
|
||||
tryCreateLocalTracks = createLocalTracksF({
|
||||
devices: initialDevices,
|
||||
timeout,
|
||||
firePermissionPromptIsShownEvent: true,
|
||||
fireSlowPromiseEvent: true
|
||||
firePermissionPromptIsShownEvent: true
|
||||
})
|
||||
.catch(err => {
|
||||
if (requestedAudio && requestedVideo) {
|
||||
@@ -627,8 +622,7 @@ export default {
|
||||
return requestedVideo
|
||||
? createLocalTracksF({
|
||||
devices: [ MEDIA_TYPE.VIDEO ],
|
||||
firePermissionPromptIsShownEvent: true,
|
||||
fireSlowPromiseEvent: true
|
||||
firePermissionPromptIsShownEvent: true
|
||||
})
|
||||
: [];
|
||||
})
|
||||
@@ -649,7 +643,6 @@ export default {
|
||||
// the user inputs their credentials, but the dialog would be
|
||||
// overshadowed by the overlay.
|
||||
tryCreateLocalTracks.then(tracks => {
|
||||
APP.store.dispatch(toggleSlowGUMOverlay(false));
|
||||
APP.store.dispatch(mediaPermissionPromptVisibilityChanged(false));
|
||||
|
||||
return tracks;
|
||||
@@ -789,7 +782,6 @@ export default {
|
||||
startAudioOnly: config.startAudioOnly,
|
||||
startScreenSharing: config.startScreenSharing,
|
||||
startWithAudioMuted: getStartWithAudioMuted(APP.store.getState())
|
||||
|| config.startSilent
|
||||
|| isUserInteractionRequiredForUnmute(APP.store.getState()),
|
||||
startWithVideoMuted: getStartWithVideoMuted(APP.store.getState())
|
||||
|| isUserInteractionRequiredForUnmute(APP.store.getState())
|
||||
@@ -1151,9 +1143,13 @@ export default {
|
||||
* Simulates toolbar button click for video mute. Used by shortcuts and API.
|
||||
* @param {boolean} [showUI] when set to false will not display any error
|
||||
* dialogs in case of media permissions error.
|
||||
* @param {boolean} ensureTrack - True if we want to ensure that a new track is
|
||||
* created if missing.
|
||||
*/
|
||||
toggleVideoMuted(showUI = true) {
|
||||
this.muteVideo(!this.isLocalVideoMuted(), showUI);
|
||||
toggleVideoMuted(showUI = true, ensureTrack = false) {
|
||||
const mute = !this.isLocalVideoMuted();
|
||||
|
||||
APP.store.dispatch(handleToggleVideoMuted(mute, showUI, ensureTrack));
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -2285,7 +2281,9 @@ export default {
|
||||
|
||||
room.on(
|
||||
JitsiConferenceEvents.DOMINANT_SPEAKER_CHANGED,
|
||||
(dominant, previous) => APP.store.dispatch(dominantSpeakerChanged(dominant, previous, room)));
|
||||
(dominant, previous, silence) => {
|
||||
APP.store.dispatch(dominantSpeakerChanged(dominant, previous, Boolean(silence), room));
|
||||
});
|
||||
|
||||
room.on(
|
||||
JitsiConferenceEvents.CONFERENCE_CREATED_TIMESTAMP,
|
||||
@@ -2420,8 +2418,8 @@ export default {
|
||||
APP.UI.addListener(UIEvents.AUDIO_MUTED, muted => {
|
||||
this.muteAudio(muted);
|
||||
});
|
||||
APP.UI.addListener(UIEvents.VIDEO_MUTED, muted => {
|
||||
this.muteVideo(muted);
|
||||
APP.UI.addListener(UIEvents.VIDEO_MUTED, (muted, showUI = false) => {
|
||||
this.muteVideo(muted, showUI);
|
||||
});
|
||||
|
||||
room.addCommandListener(this.commands.defaults.ETHERPAD,
|
||||
@@ -2577,16 +2575,16 @@ export default {
|
||||
return stream;
|
||||
})
|
||||
.then(stream => {
|
||||
logger.log('Switching the local video device.');
|
||||
logger.info(`Switching the local video device to ${cameraDeviceId}.`);
|
||||
|
||||
return this.useVideoStream(stream);
|
||||
})
|
||||
.then(() => {
|
||||
logger.log('Switched local video device.');
|
||||
logger.info(`Switched local video device to ${cameraDeviceId}.`);
|
||||
this._updateVideoDeviceId();
|
||||
})
|
||||
.catch(error => {
|
||||
logger.error(`Switching the local video device failed: ${error}`);
|
||||
logger.error(`Failed to switch to selected camera:${cameraDeviceId}, error:${error}`);
|
||||
|
||||
return APP.store.dispatch(notifyCameraError(error));
|
||||
});
|
||||
@@ -2602,20 +2600,20 @@ export default {
|
||||
// Disable noise suppression if it was enabled on the previous track.
|
||||
await APP.store.dispatch(setNoiseSuppressionEnabled(false));
|
||||
|
||||
// When the 'default' mic needs to be selected, we need to
|
||||
// pass the real device id to gUM instead of 'default' in order
|
||||
// to get the correct MediaStreamTrack from chrome because of the
|
||||
// following bug.
|
||||
// https://bugs.chromium.org/p/chromium/issues/detail?id=997689
|
||||
const hasDefaultMicChanged = micDeviceId === 'default';
|
||||
// When the 'default' mic needs to be selected, we need to pass the real device id to gUM instead of
|
||||
// 'default' in order to get the correct MediaStreamTrack from chrome because of the following bug.
|
||||
// https://bugs.chromium.org/p/chromium/issues/detail?id=997689.
|
||||
const isDefaultMicSelected = micDeviceId === 'default';
|
||||
const selectedDeviceId = isDefaultMicSelected
|
||||
? getDefaultDeviceId(APP.store.getState(), 'audioInput')
|
||||
: micDeviceId;
|
||||
|
||||
logger.info(`Switching audio input device to ${selectedDeviceId}`);
|
||||
sendAnalytics(createDeviceChangedEvent('audio', 'input'));
|
||||
createLocalTracksF({
|
||||
devices: [ 'audio' ],
|
||||
cameraDeviceId: null,
|
||||
micDeviceId: hasDefaultMicChanged
|
||||
? getDefaultDeviceId(APP.store.getState(), 'audioInput')
|
||||
: micDeviceId
|
||||
micDeviceId: selectedDeviceId
|
||||
})
|
||||
.then(([ stream ]) => {
|
||||
// if audio was muted before changing the device, mute
|
||||
@@ -2635,45 +2633,24 @@ export default {
|
||||
.then(() => {
|
||||
const localAudio = getLocalJitsiAudioTrack(APP.store.getState());
|
||||
|
||||
if (localAudio && hasDefaultMicChanged) {
|
||||
if (localAudio && isDefaultMicSelected) {
|
||||
// workaround for the default device to be shown as selected in the
|
||||
// settings even when the real device id was passed to gUM because of the
|
||||
// above mentioned chrome bug.
|
||||
localAudio._realDeviceId = localAudio.deviceId = 'default';
|
||||
}
|
||||
logger.log(`switched local audio device: ${localAudio?.getDeviceId()}`);
|
||||
|
||||
logger.info(`switched local audio input device to: ${selectedDeviceId}`);
|
||||
this._updateAudioDeviceId();
|
||||
})
|
||||
.catch(err => {
|
||||
logger.error(`Failed to switch to selected audio input device ${selectedDeviceId}, error=${err}`);
|
||||
APP.store.dispatch(notifyMicError(err));
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
APP.UI.addListener(UIEvents.TOGGLE_AUDIO_ONLY, audioOnly => {
|
||||
|
||||
// FIXME On web video track is stored both in redux and in
|
||||
// 'localVideo' field, video is attempted to be unmuted twice when
|
||||
// turning off the audio only mode. This will crash the app with
|
||||
// 'unmute operation is already in progress'.
|
||||
// Because there's no logic in redux about creating new track in
|
||||
// case unmute when not track exists the things have to go through
|
||||
// muteVideo logic in such case.
|
||||
const tracks = APP.store.getState()['features/base/tracks'];
|
||||
const isTrackInRedux
|
||||
= Boolean(tracks.find(track => track.jitsiTrack && track.jitsiTrack.getType() === MEDIA_TYPE.VIDEO));
|
||||
|
||||
if (isTrackInRedux && !this.isSharingScreen) {
|
||||
this.muteVideo(audioOnly);
|
||||
}
|
||||
|
||||
// Immediately update the UI by having remote videos and the large
|
||||
// video update themselves instead of waiting for some other event
|
||||
// to cause the update, usually PARTICIPANT_CONN_STATUS_CHANGED.
|
||||
// There is no guarantee another event will trigger the update
|
||||
// immediately and in all situations, for example because a remote
|
||||
// participant is having connection trouble so no status changes.
|
||||
APP.UI.addListener(UIEvents.TOGGLE_AUDIO_ONLY, () => {
|
||||
// Immediately update the UI by having remote videos and the large video update themselves.
|
||||
const displayedUserId = APP.UI.getLargeVideoID();
|
||||
|
||||
if (displayedUserId) {
|
||||
@@ -2998,7 +2975,6 @@ export default {
|
||||
const available = audioDeviceCount > 0 || Boolean(localAudio);
|
||||
|
||||
APP.store.dispatch(setAudioAvailable(available));
|
||||
APP.API.notifyAudioAvailabilityChanged(available);
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -3080,13 +3056,14 @@ export default {
|
||||
* Leaves the room.
|
||||
*
|
||||
* @param {boolean} doDisconnect - Whether leaving the room should also terminate the connection.
|
||||
* @param {string} reason - reason for leaving the room.
|
||||
* @returns {Promise}
|
||||
*/
|
||||
async leaveRoom(doDisconnect = true) {
|
||||
async leaveRoom(doDisconnect = true, reason = '') {
|
||||
APP.store.dispatch(conferenceWillLeave(room));
|
||||
|
||||
if (room && room.isJoined()) {
|
||||
return room.leave().finally(() => {
|
||||
return room.leave(reason).finally(() => {
|
||||
if (doDisconnect) {
|
||||
return disconnect();
|
||||
}
|
||||
@@ -3261,7 +3238,6 @@ export default {
|
||||
*/
|
||||
setAudioMuteStatus(muted) {
|
||||
APP.UI.setAudioMuted(this.getMyUserId(), muted);
|
||||
APP.API.notifyAudioMutedStatusChanged(muted);
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
134
config.js
134
config.js
@@ -1,10 +1,29 @@
|
||||
/* eslint-disable comma-dangle, no-unused-vars, no-var */
|
||||
/* eslint-disable comma-dangle, no-unused-vars, no-var, prefer-template, vars-on-top */
|
||||
|
||||
/*
|
||||
* NOTE: If you add a new option please remember to document it here:
|
||||
* https://jitsi.github.io/handbook/docs/dev-guide/dev-guide-configuration
|
||||
*/
|
||||
|
||||
var subdir = '<!--# echo var="subdir" default="" -->';
|
||||
var subdomain = '<!--# echo var="subdomain" default="" -->';
|
||||
|
||||
if (subdomain) {
|
||||
subdomain = subdomain.substr(0, subdomain.length - 1).split('.')
|
||||
.join('_')
|
||||
.toLowerCase() + '.';
|
||||
}
|
||||
|
||||
// In case of no ssi provided by the webserver, use empty strings
|
||||
if (subdir.startsWith('<!--')) {
|
||||
subdir = '';
|
||||
}
|
||||
if (subdomain.startsWith('<!--')) {
|
||||
subdomain = '';
|
||||
}
|
||||
|
||||
var enableJaaS = false;
|
||||
|
||||
var config = {
|
||||
// Connection
|
||||
//
|
||||
@@ -23,14 +42,14 @@ var config = {
|
||||
// focus: 'focus.jitsi-meet.example.com',
|
||||
|
||||
// XMPP MUC domain. FIXME: use XEP-0030 to discover it.
|
||||
muc: 'conference.jitsi-meet.example.com',
|
||||
muc: 'conference.' + subdomain + 'jitsi-meet.example.com',
|
||||
},
|
||||
|
||||
// BOSH URL. FIXME: use XEP-0156 to discover it.
|
||||
bosh: '//jitsi-meet.example.com/http-bind',
|
||||
bosh: '//jitsi-meet.example.com/' + subdir + 'http-bind',
|
||||
|
||||
// Websocket URL
|
||||
// websocket: 'wss://jitsi-meet.example.com/xmpp-websocket',
|
||||
// websocket: 'wss://jitsi-meet.example.com/' + subdir + 'xmpp-websocket',
|
||||
|
||||
// The real JID of focus participant - can be overridden here
|
||||
// Do not change username - FIXME: Make focus username configurable
|
||||
@@ -95,7 +114,7 @@ var config = {
|
||||
|
||||
// Signal that this client supports receiving multiple video streams. Without this flag jicofo will enable
|
||||
// multi-stream backward compatibility.
|
||||
receiveMultipleVideoStreams: true,
|
||||
// receiveMultipleVideoStreams: true,
|
||||
},
|
||||
|
||||
// Disables moderator indicators.
|
||||
@@ -189,9 +208,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 won’t be transmitted while participant is silent or muted.
|
||||
// audioQuality: {
|
||||
// stereo: false,
|
||||
// opusMaxAverageBitrate: null, // Value to fit the 6000 to 510000 range.
|
||||
// enableOpusDtx: false,
|
||||
// },
|
||||
|
||||
// Video
|
||||
@@ -310,9 +332,6 @@ var config = {
|
||||
// DEPRECATED. Use recordingService.sharingEnabled instead.
|
||||
// fileRecordingsServiceSharingEnabled: false,
|
||||
|
||||
// Whether to enable live streaming or not.
|
||||
// liveStreamingEnabled: false,
|
||||
|
||||
// Local recording configuration.
|
||||
// localRecording: {
|
||||
// // Whether to disable local recording or not.
|
||||
@@ -325,6 +344,23 @@ var config = {
|
||||
// disableSelfRecording: false,
|
||||
// },
|
||||
|
||||
// Customize the Live Streaming dialog. Can be modified for a non-YouTube provider.
|
||||
// liveStreaming: {
|
||||
// // Whether to enable live streaming or not.
|
||||
// enabled: false,
|
||||
// // Terms link
|
||||
// termsLink: 'https://www.youtube.com/t/terms',
|
||||
// // Data privacy link
|
||||
// dataPrivacyLink: 'https://policies.google.com/privacy',
|
||||
// // RegExp string that validates the stream key input field
|
||||
// validatorRegExpString: '^(?:[a-zA-Z0-9]{4}(?:-(?!$)|$)){4}',
|
||||
// // Documentation reference for the live streaming feature.
|
||||
// helpLink: 'https://jitsi.org/live'
|
||||
// },
|
||||
|
||||
// DEPRECATED. Use liveStreaming.enabled instead.
|
||||
// liveStreamingEnabled: false,
|
||||
|
||||
// DEPRECATED. Use transcription.enabled instead.
|
||||
// transcribingEnabled: false,
|
||||
|
||||
@@ -342,6 +378,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
|
||||
@@ -587,9 +631,6 @@ var config = {
|
||||
// Hides the email section under profile settings.
|
||||
// hideEmailInSettings: false,
|
||||
|
||||
// Whether or not some features are checked based on token.
|
||||
// enableFeaturesBasedOnToken: false,
|
||||
|
||||
// When enabled the password used for locking a room is restricted to up to the number of digits specified
|
||||
// default: roomPasswordNumberOfDigits: false,
|
||||
// roomPasswordNumberOfDigits: 10,
|
||||
@@ -670,7 +711,7 @@ var config = {
|
||||
// 'chat',
|
||||
// 'closedcaptions',
|
||||
// 'desktop',
|
||||
// 'dock-iframe'
|
||||
// 'dock-iframe',
|
||||
// 'download',
|
||||
// 'embedmeeting',
|
||||
// 'etherpad',
|
||||
@@ -684,6 +725,7 @@ var config = {
|
||||
// 'linktosalesforce',
|
||||
// 'livestreaming',
|
||||
// 'microphone',
|
||||
// 'noisesuppression',
|
||||
// 'participants-pane',
|
||||
// 'profile',
|
||||
// 'raisehand',
|
||||
@@ -704,13 +746,13 @@ var config = {
|
||||
// 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,
|
||||
@@ -748,6 +790,7 @@ var config = {
|
||||
// 'microphone',
|
||||
// 'mute-everyone',
|
||||
// 'mute-video-everyone',
|
||||
// 'noisesuppression',
|
||||
// 'participants-pane',
|
||||
// 'profile',
|
||||
// {
|
||||
@@ -792,6 +835,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
|
||||
@@ -928,14 +972,19 @@ 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/,
|
||||
|
||||
// The interval at which rtcstats will poll getStats, defaults to 1000ms.
|
||||
// The interval at which rtcstats will poll getStats, defaults to 10000ms.
|
||||
// If the value is set to 0 getStats won't be polled and the rtcstats client
|
||||
// will only send data related to RTCPeerConnection events.
|
||||
// rtcstatsPolIInterval: 1000,
|
||||
// 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: [
|
||||
@@ -1029,7 +1078,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,
|
||||
// },
|
||||
|
||||
@@ -1125,7 +1174,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: {
|
||||
@@ -1251,11 +1300,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
|
||||
/**
|
||||
@@ -1356,6 +1400,7 @@ var config = {
|
||||
// 'notify.leftTwoMembers', // show when two participants left simultaneously
|
||||
// 'notify.leftThreePlusMembers', // show when more than 2 participants left simultaneously
|
||||
// 'notify.grantedTo', // shown when moderator rights were granted to a participant
|
||||
// 'notify.hostAskedUnmute', // shown to participant when host asks them to unmute
|
||||
// 'notify.invitedOneMember', // shown when 1 participant has been invited
|
||||
// 'notify.invitedThreePlusMembers', // shown when 3+ participants have been invited
|
||||
// 'notify.invitedTwoMembers', // shown when 2 participants have been invited
|
||||
@@ -1376,7 +1421,7 @@ var config = {
|
||||
// 'notify.raisedHand', // shown when a partcipant used raise hand,
|
||||
// 'notify.startSilentTitle', // shown when user joined with no audio
|
||||
// 'notify.unmute', // shown to moderator when user raises hand during AV moderation
|
||||
// 'notify.hostAskedUnmute', // shown to participant when host asks them to unmute
|
||||
// 'notify.videoMutedRemotelyTitle', // shown when user's video is muted by a remote party,
|
||||
// 'prejoin.errorDialOut',
|
||||
// 'prejoin.errorDialOutDisconnected',
|
||||
// 'prejoin.errorDialOutFailed',
|
||||
@@ -1407,6 +1452,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,
|
||||
|
||||
@@ -1436,7 +1485,40 @@ 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,
|
||||
// },
|
||||
|
||||
// Logging
|
||||
// logging: {
|
||||
// // Default log level for the app and lib-jitsi-meet.
|
||||
// defaultLogLevel: 'trace',
|
||||
// // Option to disable LogCollector (which stores the logs on CallStats).
|
||||
// //disableLogCollector: true,
|
||||
// // 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)
|
||||
}
|
||||
|
||||
@@ -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';
|
||||
|
||||
116
css/_chat.scss
116
css/_chat.scss
@@ -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;
|
||||
@@ -119,63 +125,18 @@
|
||||
|
||||
.chat-input-container {
|
||||
padding: 0 16px 16px;
|
||||
|
||||
&.populated {
|
||||
#chat-input {
|
||||
.send-button {
|
||||
background: #1B67EC;
|
||||
cursor: pointer;
|
||||
margin-left: 0.3rem;
|
||||
|
||||
@media (hover: hover) and (pointer: fine) {
|
||||
&:hover {
|
||||
background: #3D82FB;
|
||||
}
|
||||
}
|
||||
|
||||
&:active {
|
||||
background: #0852D4;
|
||||
}
|
||||
|
||||
path {
|
||||
fill: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#chat-input {
|
||||
border: 1px solid $chatInputSeparatorColor;
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
padding: 4px;
|
||||
border-radius: 3px;
|
||||
|
||||
&:focus-within {
|
||||
border: 1px solid #619CF4;
|
||||
}
|
||||
|
||||
* {
|
||||
background-color: transparent;
|
||||
}
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.send-button-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.send-button {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 40px;
|
||||
width: 40px;
|
||||
border-radius: 3px;
|
||||
|
||||
path {
|
||||
fill: $chatInputSeparatorColor;
|
||||
}
|
||||
.chat-input {
|
||||
flex: 1;
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
.smiley-button {
|
||||
@@ -395,7 +356,9 @@
|
||||
|
||||
.smiley-input {
|
||||
display: flex;
|
||||
position: relative;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.smileys-panel {
|
||||
@@ -403,7 +366,7 @@
|
||||
box-sizing: border-box;
|
||||
background-color: rgba(0, 0, 0, .6) !important;
|
||||
height: auto;
|
||||
display: none;
|
||||
display: flex;
|
||||
overflow: hidden;
|
||||
position: absolute;
|
||||
width: calc(#{$sidebarWidth} - 32px);
|
||||
@@ -418,11 +381,6 @@
|
||||
*/
|
||||
transition: max-height 0.3s;
|
||||
|
||||
&.show-smileys {
|
||||
display: flex;
|
||||
max-height: 500%;
|
||||
}
|
||||
|
||||
#smileysContainer {
|
||||
background-color: $chatBackgroundColor;
|
||||
border-top: 1px solid $chatInputSeparatorColor;
|
||||
@@ -573,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;
|
||||
}
|
||||
|
||||
@@ -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%;
|
||||
|
||||
112
css/_polls.scss
112
css/_polls.scss
@@ -28,32 +28,23 @@
|
||||
}
|
||||
|
||||
.poll-answer-container {
|
||||
display: flex;
|
||||
padding: 4px;
|
||||
background: #3D3D3D;
|
||||
border-radius: 3px;
|
||||
margin-bottom: 8px;
|
||||
|
||||
@media (max-width: 580px) {
|
||||
&> span {
|
||||
padding: 8px 0;
|
||||
}
|
||||
&> span {
|
||||
padding: 8px 0;
|
||||
}
|
||||
|
||||
svg {
|
||||
margin-top: 6px;
|
||||
}
|
||||
svg {
|
||||
margin-top: 6px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.poll-answer-option {
|
||||
font-weight: 400;
|
||||
display: block;
|
||||
margin: 4px;
|
||||
|
||||
@media (max-width: 580px) {
|
||||
font-size: 16px;
|
||||
margin: 11px 8px
|
||||
}
|
||||
}
|
||||
|
||||
.poll-answer-field-list, .poll-answer-list, .poll-result-list {
|
||||
list-style-type: none;
|
||||
padding: 0;
|
||||
@@ -84,7 +75,7 @@ ol.poll-result-list {
|
||||
}
|
||||
|
||||
.poll-create-option-row {
|
||||
display: 'flex';
|
||||
display: flex;
|
||||
margin-bottom: 4;
|
||||
}
|
||||
|
||||
@@ -291,6 +282,10 @@ ol.poll-result-list {
|
||||
h1, strong ,span {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
button > span {
|
||||
color: inherit;
|
||||
}
|
||||
}
|
||||
|
||||
.poll-create-label {
|
||||
@@ -315,7 +310,7 @@ ol.poll-result-list {
|
||||
}
|
||||
|
||||
#polls-panel {
|
||||
height: calc(100% - 102px);
|
||||
height: calc(100% - 119px);
|
||||
}
|
||||
|
||||
.poll-container {
|
||||
@@ -363,82 +358,3 @@ ol.poll-result-list {
|
||||
.poll-answer-footer {
|
||||
padding: 8px 0 0 0;
|
||||
}
|
||||
|
||||
.poll-button {
|
||||
align-items: center;
|
||||
border: 0;
|
||||
border-radius: 6px;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
min-height: 40px;
|
||||
width: 100%;
|
||||
|
||||
&:disabled {
|
||||
cursor: initial;
|
||||
}
|
||||
|
||||
@media (max-width: 580px) {
|
||||
min-height: 48px;
|
||||
}
|
||||
}
|
||||
|
||||
.poll-button-primary {
|
||||
background-color: #0056E0;
|
||||
|
||||
&:hover {
|
||||
background-color: #246FE5;
|
||||
}
|
||||
|
||||
&:active {
|
||||
background-color: #0045B3;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
background-color: #0045B3;
|
||||
border: 3px solid #99BBF3;
|
||||
}
|
||||
|
||||
&:disabled {
|
||||
background-color: #00225A;
|
||||
color: #858585;
|
||||
}
|
||||
}
|
||||
|
||||
.poll-button-secondary {
|
||||
background-color: #3D3D3D;
|
||||
|
||||
&:hover {
|
||||
background-color: #525252;
|
||||
}
|
||||
|
||||
&:active {
|
||||
background-color: #292929;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
background-color: #292929;
|
||||
border: 3px solid #858585;
|
||||
}
|
||||
|
||||
&:disabled {
|
||||
background-color: #141414;
|
||||
color: #858585;
|
||||
}
|
||||
}
|
||||
|
||||
.poll-button-short {
|
||||
max-width: 132px;
|
||||
}
|
||||
|
||||
.poll-button-shortest {
|
||||
max-width: 117px;
|
||||
}
|
||||
|
||||
.poll-button-short,
|
||||
.poll-button-shortest {
|
||||
@media (max-width: 580px) {
|
||||
min-width: 49%;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,3 +45,7 @@
|
||||
margin: -16px -24px;
|
||||
z-index: $popoverZ;
|
||||
}
|
||||
|
||||
.excalidraw .popover {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
$baseFontFamily: -apple-system, BlinkMacSystemFont, 'open_sanslight', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||
$hangupColor:#DD3849;
|
||||
$hangupHoverColor: #F25363;
|
||||
$hangupMenuButtonColor:#0056E0;;
|
||||
$hangupMenuButtonHoverColor: #246FE5;
|
||||
$hangupFontSize: 2em;
|
||||
|
||||
/**
|
||||
|
||||
@@ -68,6 +68,12 @@
|
||||
}
|
||||
.buttons {
|
||||
margin-top: 16px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
&>button:first-child {
|
||||
margin-right: 8px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
* tiled thumbnail experience.
|
||||
*/
|
||||
.tile-view,
|
||||
.whiteboard-container,
|
||||
.stage-filmstrip {
|
||||
/**
|
||||
* Let the avatar grow with the tile.
|
||||
|
||||
@@ -46,6 +46,8 @@
|
||||
}
|
||||
|
||||
.feedback-dialog {
|
||||
margin-bottom: 5px;
|
||||
|
||||
.details {
|
||||
textarea {
|
||||
min-height: 100px;
|
||||
|
||||
@@ -38,19 +38,6 @@
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.info-password-input {
|
||||
width: 100%;
|
||||
background-color: #0E1624;
|
||||
border-radius: 3px;
|
||||
border: 2px solid #202B3D;
|
||||
color: inherit;
|
||||
padding-left: 0;
|
||||
}
|
||||
.info-password-input:focus ,
|
||||
.info-password-input:active {
|
||||
border: 2px solid #B8C7E0;
|
||||
}
|
||||
|
||||
.info-password-local {
|
||||
user-select: text;
|
||||
}
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
.share-audio-dialog-container {
|
||||
max-height: none;
|
||||
}
|
||||
|
||||
.share-audio-dialog {
|
||||
.share-audio-animation {
|
||||
width: 100%;
|
||||
height: 90%;
|
||||
object-fit: contain;
|
||||
}
|
||||
input[type="checkbox"] + svg + span {
|
||||
color: #9FB0CC;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.separator-line {
|
||||
|
||||
@@ -13,12 +13,14 @@
|
||||
}
|
||||
|
||||
.password {
|
||||
align-items: center;
|
||||
align-items: flex-start;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
justify-content: flex-start;
|
||||
margin-top: 15px;
|
||||
flex-direction: column;
|
||||
|
||||
&-actions {
|
||||
margin-top: 10px;
|
||||
a {
|
||||
cursor: pointer;
|
||||
text-decoration: none;
|
||||
@@ -26,8 +28,8 @@
|
||||
color: #6FB1EA;
|
||||
}
|
||||
|
||||
& > :first-child:not(:last-child) {
|
||||
margin-right: 24px;
|
||||
& > :not(:last-child) {
|
||||
margin-right: 24px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
font-weight: 600;
|
||||
letter-spacing: -0.015;
|
||||
line-height: 36px;
|
||||
margin-bottom: 32px;
|
||||
margin-bottom: 16px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
|
||||
6
debian/control
vendored
6
debian/control
vendored
@@ -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 | 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
|
||||
|
||||
1
debian/jitsi-meet-prosody.install
vendored
1
debian/jitsi-meet-prosody.install
vendored
@@ -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/
|
||||
|
||||
76
debian/jitsi-meet-prosody.postinst
vendored
76
debian/jitsi-meet-prosody.postinst
vendored
@@ -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
|
||||
|
||||
2
debian/jitsi-meet-prosody.postrm
vendored
2
debian/jitsi-meet-prosody.postrm
vendored
@@ -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
|
||||
|
||||
1
debian/jitsi-meet-turnserver.install
vendored
1
debian/jitsi-meet-turnserver.install
vendored
@@ -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/
|
||||
|
||||
17
debian/jitsi-meet-turnserver.postinst
vendored
17
debian/jitsi-meet-turnserver.postinst
vendored
@@ -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
|
||||
;;
|
||||
|
||||
8
debian/jitsi-meet-web-config.config
vendored
8
debian/jitsi-meet-web-config.config
vendored
@@ -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
|
||||
146
debian/jitsi-meet-web-config.postinst
vendored
146
debian/jitsi-meet-web-config.postinst
vendored
@@ -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
|
||||
|
||||
@@ -77,13 +69,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 +103,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 +116,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,51 +141,45 @@ 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"
|
||||
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
|
||||
fi
|
||||
|
||||
# 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 Let’s Encrypt certificates please re-run the script."
|
||||
echo ""
|
||||
echo "------------------------------------------------"
|
||||
echo ""
|
||||
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
|
||||
|
||||
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"
|
||||
# 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
|
||||
|
||||
db_set jitsi-meet/jvb-serve "false"
|
||||
# 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_NGINX" = "true" && ( -z "$JVB_HOSTNAME_OLD" || "$RECONFIGURING" = "true" ) ]] ; then
|
||||
@@ -239,12 +244,45 @@ case "$1" in
|
||||
invoke-rc.d apache2 reload || true
|
||||
fi
|
||||
|
||||
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 ""
|
||||
echo " ;dOocd;"
|
||||
echo " .dNMM0dKO."
|
||||
echo " lNMMMKd0K,"
|
||||
echo " .xMMMMNxkNc"
|
||||
echo " dMMMMMkxXc"
|
||||
echo " cNMMMNl.."
|
||||
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'"
|
||||
echo " :0WMMMMMMNOkk0Kk,"
|
||||
echo " .cdOWMMMMMWXOkOl"
|
||||
echo " .;dKWMMMMMXc."
|
||||
echo " .,:cll:'"
|
||||
echo ""
|
||||
echo "You can now switch to a Let’s Encrypt certificate. To do so, execute:"
|
||||
echo "/usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh"
|
||||
echo ""
|
||||
echo "----------------"
|
||||
|
||||
# and we're done with debconf
|
||||
db_stop
|
||||
|
||||
33
debian/jitsi-meet-web-config.templates
vendored
33
debian/jitsi-meet-web-config.templates
vendored
@@ -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 Let’s 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 "Let’s 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
|
||||
@@ -30,3 +30,20 @@ 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: Interested in adding telephony to your Jitsi meetings?
|
||||
You can easily add dialing in support to your meetings. You need to give us the 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.
|
||||
|
||||
1
debian/jitsi-meet-web.install
vendored
1
debian/jitsi-meet-web.install
vendored
@@ -1,5 +1,4 @@
|
||||
interface_config.js /usr/share/jitsi-meet/
|
||||
logging_config.js /usr/share/jitsi-meet/
|
||||
*.html /usr/share/jitsi-meet/
|
||||
*.ico /usr/share/jitsi-meet/
|
||||
libs /usr/share/jitsi-meet/
|
||||
|
||||
2
debian/po/templates.pot
vendored
2
debian/po/templates.pot
vendored
@@ -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
|
||||
|
||||
12
doc/debian/jitsi-meet-prosody/jaas.cfg.lua
Normal file
12
doc/debian/jitsi-meet-prosody/jaas.cfg.lua
Normal 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" }
|
||||
@@ -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
|
||||
|
||||
@@ -90,7 +94,6 @@ Component "breakout.jitmeet.example.com" "muc"
|
||||
modules_enabled = {
|
||||
"muc_meeting_id";
|
||||
"muc_domain_mapper";
|
||||
--"token_verification";
|
||||
"muc_rate_limit";
|
||||
"polls";
|
||||
}
|
||||
@@ -124,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"
|
||||
|
||||
@@ -137,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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
22
globals.d.ts
vendored
Normal file
22
globals.d.ts
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
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;
|
||||
};
|
||||
const interfaceConfig: any;
|
||||
|
||||
interface Window {
|
||||
config: IConfig;
|
||||
JITSI_MEET_LITE_SDK?: boolean;
|
||||
interfaceConfig?: any;
|
||||
}
|
||||
|
||||
const config: IConfig;
|
||||
}
|
||||
@@ -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');
|
||||
@@ -67,7 +68,6 @@
|
||||
"utils.js",
|
||||
"do_external_connect.js",
|
||||
"interface_config.js",
|
||||
"logging_config.js",
|
||||
"lib-jitsi-meet.min.js",
|
||||
"app.bundle.min.js",
|
||||
"all.css"
|
||||
@@ -185,7 +185,6 @@
|
||||
<!--#include virtual="connection_optimization/connection_optimization.html" -->
|
||||
<script src="libs/do_external_connect.min.js?v=1"></script>
|
||||
<script><!--#include virtual="/interface_config.js" --></script>
|
||||
<script><!--#include virtual="/logging_config.js" --></script>
|
||||
<script src="libs/lib-jitsi-meet.min.js?v=139"></script>
|
||||
<script src="libs/app.bundle.min.js?v=139"></script>
|
||||
<!--#include virtual="title.html" -->
|
||||
|
||||
@@ -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,
|
||||
@@ -90,7 +89,6 @@ var interfaceConfig = {
|
||||
JITSI_WATERMARK_LINK: 'https://jitsi.org',
|
||||
|
||||
LANG_DETECTION: true, // Allow i18n to detect the system language
|
||||
LIVE_STREAMING_HELP_LINK: 'https://jitsi.org/live', // Documentation reference for the live streaming feature.
|
||||
LOCAL_THUMBNAIL_RATIO: 16 / 9, // 16:9
|
||||
|
||||
/**
|
||||
@@ -242,12 +240,19 @@ 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',
|
||||
|
||||
// Moved to config.js as `toolbarConfig.initialTimeout`.
|
||||
// INITIAL_TOOLBAR_TIMEOUT: 20000,
|
||||
|
||||
// Please use `liveStreaming.helpLink` from config.js
|
||||
// Documentation reference for the live streaming feature.
|
||||
// LIVE_STREAMING_HELP_LINK: 'https://jitsi.org/live',
|
||||
|
||||
// Moved to config.js as `toolbarConfig.alwaysVisible`.
|
||||
// TOOLBAR_ALWAYS_VISIBLE: false,
|
||||
|
||||
|
||||
40
ios/Podfile
40
ios/Podfile
@@ -29,19 +29,57 @@ target 'JitsiMeetSDK' do
|
||||
:app_path => "#{Pod::Config.instance.installation_root}/.."
|
||||
)
|
||||
|
||||
# We use auto linking, but some dependencies are excluded from the lite build
|
||||
# (see react-native.config.js) so we add them here.
|
||||
|
||||
pod 'giphy-react-native-sdk', :path => '../node_modules/@giphy/react-native-sdk'
|
||||
pod 'RNCalendarEvents', :path => '../node_modules/react-native-calendar-events'
|
||||
pod 'RNGoogleSignin', :path => '../node_modules/@react-native-google-signin/google-signin'
|
||||
pod 'RNWatch', :path => '../node_modules/react-native-watch-connectivity'
|
||||
|
||||
# Native pod dependencies
|
||||
#
|
||||
|
||||
pod 'CocoaLumberjack', '3.7.2'
|
||||
pod 'ObjectiveDropboxOfficial', '6.2.3'
|
||||
pod 'JitsiWebRTC', '~> 106.0.0'
|
||||
end
|
||||
|
||||
target 'JitsiMeetSDKLite' do
|
||||
project 'sdk/sdk.xcodeproj'
|
||||
|
||||
# This is a more lightweight target, which removes some functionality.
|
||||
# Check the react-native.config.js for the list of excluded packages.
|
||||
|
||||
# React Native and its dependencies
|
||||
#
|
||||
|
||||
config = use_native_modules!
|
||||
use_react_native!(
|
||||
:path => config["reactNativePath"],
|
||||
:hermes_enabled => false,
|
||||
:fabric_enabled => false,
|
||||
# An absolute path to your application root.
|
||||
:app_path => "#{Pod::Config.instance.installation_root}/.."
|
||||
)
|
||||
|
||||
# Native pod dependencies
|
||||
#
|
||||
|
||||
pod 'CocoaLumberjack', '3.7.2'
|
||||
end
|
||||
|
||||
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
|
||||
|
||||
476
ios/Podfile.lock
476
ios/Podfile.lock
@@ -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.3)
|
||||
- FBReactNativeSpec (0.68.3):
|
||||
- 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.3)
|
||||
- RCTTypeSafety (= 0.68.3)
|
||||
- React-Core (= 0.68.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- ReactCommon/turbomodule/core (= 0.68.3)
|
||||
- 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.3)
|
||||
- RCTTypeSafety (0.68.3):
|
||||
- FBLazyVector (= 0.68.3)
|
||||
- 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.3)
|
||||
- React-Core (= 0.68.3)
|
||||
- React (0.68.3):
|
||||
- React-Core (= 0.68.3)
|
||||
- React-Core/DevSupport (= 0.68.3)
|
||||
- React-Core/RCTWebSocket (= 0.68.3)
|
||||
- React-RCTActionSheet (= 0.68.3)
|
||||
- React-RCTAnimation (= 0.68.3)
|
||||
- React-RCTBlob (= 0.68.3)
|
||||
- React-RCTImage (= 0.68.3)
|
||||
- React-RCTLinking (= 0.68.3)
|
||||
- React-RCTNetwork (= 0.68.3)
|
||||
- React-RCTSettings (= 0.68.3)
|
||||
- React-RCTText (= 0.68.3)
|
||||
- React-RCTVibration (= 0.68.3)
|
||||
- React-callinvoker (0.68.3)
|
||||
- React-Codegen (0.68.3):
|
||||
- FBReactNativeSpec (= 0.68.3)
|
||||
- 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.3)
|
||||
- RCTTypeSafety (= 0.68.3)
|
||||
- React-Core (= 0.68.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- React-jsiexecutor (= 0.68.3)
|
||||
- ReactCommon/turbomodule/core (= 0.68.3)
|
||||
- React-Core (0.68.3):
|
||||
- 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.3)
|
||||
- React-cxxreact (= 0.68.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- React-jsiexecutor (= 0.68.3)
|
||||
- React-perflogger (= 0.68.3)
|
||||
- Yoga
|
||||
- React-Core/CoreModulesHeaders (0.68.1):
|
||||
- React-Core/CoreModulesHeaders (0.68.3):
|
||||
- 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.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- React-jsiexecutor (= 0.68.3)
|
||||
- React-perflogger (= 0.68.3)
|
||||
- Yoga
|
||||
- React-Core/Default (0.68.1):
|
||||
- React-Core/Default (0.68.3):
|
||||
- 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.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- React-jsiexecutor (= 0.68.3)
|
||||
- React-perflogger (= 0.68.3)
|
||||
- Yoga
|
||||
- React-Core/DevSupport (0.68.1):
|
||||
- React-Core/DevSupport (0.68.3):
|
||||
- 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.3)
|
||||
- React-Core/RCTWebSocket (= 0.68.3)
|
||||
- React-cxxreact (= 0.68.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- React-jsiexecutor (= 0.68.3)
|
||||
- React-jsinspector (= 0.68.3)
|
||||
- React-perflogger (= 0.68.3)
|
||||
- Yoga
|
||||
- React-Core/RCTActionSheetHeaders (0.68.1):
|
||||
- React-Core/RCTActionSheetHeaders (0.68.3):
|
||||
- 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.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- React-jsiexecutor (= 0.68.3)
|
||||
- React-perflogger (= 0.68.3)
|
||||
- Yoga
|
||||
- React-Core/RCTAnimationHeaders (0.68.1):
|
||||
- React-Core/RCTAnimationHeaders (0.68.3):
|
||||
- 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.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- React-jsiexecutor (= 0.68.3)
|
||||
- React-perflogger (= 0.68.3)
|
||||
- Yoga
|
||||
- React-Core/RCTBlobHeaders (0.68.1):
|
||||
- React-Core/RCTBlobHeaders (0.68.3):
|
||||
- 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.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- React-jsiexecutor (= 0.68.3)
|
||||
- React-perflogger (= 0.68.3)
|
||||
- Yoga
|
||||
- React-Core/RCTImageHeaders (0.68.1):
|
||||
- React-Core/RCTImageHeaders (0.68.3):
|
||||
- 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.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- React-jsiexecutor (= 0.68.3)
|
||||
- React-perflogger (= 0.68.3)
|
||||
- Yoga
|
||||
- React-Core/RCTLinkingHeaders (0.68.1):
|
||||
- React-Core/RCTLinkingHeaders (0.68.3):
|
||||
- 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.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- React-jsiexecutor (= 0.68.3)
|
||||
- React-perflogger (= 0.68.3)
|
||||
- Yoga
|
||||
- React-Core/RCTNetworkHeaders (0.68.1):
|
||||
- React-Core/RCTNetworkHeaders (0.68.3):
|
||||
- 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.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- React-jsiexecutor (= 0.68.3)
|
||||
- React-perflogger (= 0.68.3)
|
||||
- Yoga
|
||||
- React-Core/RCTSettingsHeaders (0.68.1):
|
||||
- React-Core/RCTSettingsHeaders (0.68.3):
|
||||
- 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.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- React-jsiexecutor (= 0.68.3)
|
||||
- React-perflogger (= 0.68.3)
|
||||
- Yoga
|
||||
- React-Core/RCTTextHeaders (0.68.1):
|
||||
- React-Core/RCTTextHeaders (0.68.3):
|
||||
- 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.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- React-jsiexecutor (= 0.68.3)
|
||||
- React-perflogger (= 0.68.3)
|
||||
- Yoga
|
||||
- React-Core/RCTVibrationHeaders (0.68.1):
|
||||
- React-Core/RCTVibrationHeaders (0.68.3):
|
||||
- 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.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- React-jsiexecutor (= 0.68.3)
|
||||
- React-perflogger (= 0.68.3)
|
||||
- Yoga
|
||||
- React-Core/RCTWebSocket (0.68.1):
|
||||
- React-Core/RCTWebSocket (0.68.3):
|
||||
- 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.3)
|
||||
- React-cxxreact (= 0.68.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- React-jsiexecutor (= 0.68.3)
|
||||
- React-perflogger (= 0.68.3)
|
||||
- Yoga
|
||||
- React-CoreModules (0.68.1):
|
||||
- React-CoreModules (0.68.3):
|
||||
- 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.3)
|
||||
- React-Codegen (= 0.68.3)
|
||||
- React-Core/CoreModulesHeaders (= 0.68.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- React-RCTImage (= 0.68.3)
|
||||
- ReactCommon/turbomodule/core (= 0.68.3)
|
||||
- React-cxxreact (0.68.3):
|
||||
- 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.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- React-jsinspector (= 0.68.3)
|
||||
- React-logger (= 0.68.3)
|
||||
- React-perflogger (= 0.68.3)
|
||||
- React-runtimeexecutor (= 0.68.3)
|
||||
- React-jsi (0.68.3):
|
||||
- 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.3)
|
||||
- React-jsi/Default (0.68.3):
|
||||
- boost (= 1.76.0)
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-jsiexecutor (0.68.1):
|
||||
- React-jsiexecutor (0.68.3):
|
||||
- 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.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- React-perflogger (= 0.68.3)
|
||||
- React-jsinspector (0.68.3)
|
||||
- React-logger (0.68.3):
|
||||
- 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,80 +379,82 @@ 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.3)
|
||||
- React-RCTActionSheet (0.68.3):
|
||||
- React-Core/RCTActionSheetHeaders (= 0.68.3)
|
||||
- React-RCTAnimation (0.68.3):
|
||||
- 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.3)
|
||||
- React-Codegen (= 0.68.3)
|
||||
- React-Core/RCTAnimationHeaders (= 0.68.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- ReactCommon/turbomodule/core (= 0.68.3)
|
||||
- React-RCTBlob (0.68.3):
|
||||
- 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.3)
|
||||
- React-Core/RCTBlobHeaders (= 0.68.3)
|
||||
- React-Core/RCTWebSocket (= 0.68.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- React-RCTNetwork (= 0.68.3)
|
||||
- ReactCommon/turbomodule/core (= 0.68.3)
|
||||
- React-RCTImage (0.68.3):
|
||||
- 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.3)
|
||||
- React-Codegen (= 0.68.3)
|
||||
- React-Core/RCTImageHeaders (= 0.68.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- React-RCTNetwork (= 0.68.3)
|
||||
- ReactCommon/turbomodule/core (= 0.68.3)
|
||||
- React-RCTLinking (0.68.3):
|
||||
- React-Codegen (= 0.68.3)
|
||||
- React-Core/RCTLinkingHeaders (= 0.68.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- ReactCommon/turbomodule/core (= 0.68.3)
|
||||
- React-RCTNetwork (0.68.3):
|
||||
- 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.3)
|
||||
- React-Codegen (= 0.68.3)
|
||||
- React-Core/RCTNetworkHeaders (= 0.68.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- ReactCommon/turbomodule/core (= 0.68.3)
|
||||
- React-RCTSettings (0.68.3):
|
||||
- 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.3)
|
||||
- React-Codegen (= 0.68.3)
|
||||
- React-Core/RCTSettingsHeaders (= 0.68.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- ReactCommon/turbomodule/core (= 0.68.3)
|
||||
- React-RCTText (0.68.3):
|
||||
- React-Core/RCTTextHeaders (= 0.68.3)
|
||||
- React-RCTVibration (0.68.3):
|
||||
- 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.3)
|
||||
- React-Core/RCTVibrationHeaders (= 0.68.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- ReactCommon/turbomodule/core (= 0.68.3)
|
||||
- React-runtimeexecutor (0.68.3):
|
||||
- React-jsi (= 0.68.3)
|
||||
- ReactCommon/turbomodule/core (0.68.3):
|
||||
- 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.3)
|
||||
- React-Core (= 0.68.3)
|
||||
- React-cxxreact (= 0.68.3)
|
||||
- React-jsi (= 0.68.3)
|
||||
- React-logger (= 0.68.3)
|
||||
- React-perflogger (= 0.68.3)
|
||||
- RNCalendarEvents (2.2.0):
|
||||
- React
|
||||
- RNCAsyncStorage (1.15.14):
|
||||
@@ -465,8 +472,6 @@ PODS:
|
||||
- RNGoogleSignin (7.0.4):
|
||||
- GoogleSignIn (~> 6.0.0)
|
||||
- React-Core
|
||||
- RNReanimated (1.13.4):
|
||||
- React-Core
|
||||
- RNScreens (3.13.1):
|
||||
- React-Core
|
||||
- React-RCTImage
|
||||
@@ -475,9 +480,9 @@ PODS:
|
||||
- RNSound/Core (= 0.11.1)
|
||||
- RNSound/Core (0.11.1):
|
||||
- React-Core
|
||||
- RNSVG (12.1.0):
|
||||
- React
|
||||
- RNWatch (1.0.4):
|
||||
- RNSVG (12.4.3):
|
||||
- React-Core
|
||||
- RNWatch (1.0.11):
|
||||
- React
|
||||
- Yoga (1.14.0)
|
||||
|
||||
@@ -493,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`)
|
||||
@@ -513,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`)
|
||||
@@ -541,7 +548,6 @@ DEPENDENCIES:
|
||||
- RNDeviceInfo (from `../node_modules/react-native-device-info`)
|
||||
- RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
|
||||
- "RNGoogleSignin (from `../node_modules/@react-native-google-signin/google-signin`)"
|
||||
- RNReanimated (from `../node_modules/react-native-reanimated`)
|
||||
- RNScreens (from `../node_modules/react-native-screens`)
|
||||
- RNSound (from `../node_modules/react-native-sound`)
|
||||
- RNSVG (from `../node_modules/react-native-svg`)
|
||||
@@ -568,10 +574,12 @@ SPEC REPOS:
|
||||
- GoogleUtilities
|
||||
- GTMAppAuth
|
||||
- GTMSessionFetcher
|
||||
- JitsiWebRTC
|
||||
- libwebp
|
||||
- nanopb
|
||||
- ObjectiveDropboxOfficial
|
||||
- PromisesObjC
|
||||
- PromisesSwift
|
||||
|
||||
EXTERNAL SOURCES:
|
||||
amplitude-react-native:
|
||||
@@ -622,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:
|
||||
@@ -678,8 +688,6 @@ EXTERNAL SOURCES:
|
||||
:path: "../node_modules/react-native-gesture-handler"
|
||||
RNGoogleSignin:
|
||||
:path: "../node_modules/@react-native-google-signin/google-signin"
|
||||
RNReanimated:
|
||||
:path: "../node_modules/react-native-reanimated"
|
||||
RNScreens:
|
||||
:path: "../node_modules/react-native-screens"
|
||||
RNSound:
|
||||
@@ -698,8 +706,8 @@ SPEC CHECKSUMS:
|
||||
boost: a7c83b31436843459a1961bfd74b96033dc77234
|
||||
CocoaLumberjack: b7e05132ff94f6ae4dfa9d5bce9141893a21d9da
|
||||
DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662
|
||||
FBLazyVector: 2c76493a346ef8cacf1f442926a39f805fffec1f
|
||||
FBReactNativeSpec: 371350f24afa87b6aba606972ec959dcd4a95c9a
|
||||
FBLazyVector: 34f7420274737b6fcf2e2d9fd42641e66b4436a3
|
||||
FBReactNativeSpec: 68c23fb2cea9393190e0815b673d742fa33d2dab
|
||||
Firebase: 5f8193dff4b5b7c5d5ef72ae54bb76c08e2b841d
|
||||
FirebaseAnalytics: 7761cbadb00a717d8d0939363eb46041526474fa
|
||||
FirebaseCore: 5743c5785c074a794d35f2fff7ecc254a91e08b1
|
||||
@@ -717,47 +725,50 @@ 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: b8caca023d386d43740dfb94c2cf68f695fa5e77
|
||||
RCTTypeSafety: ec44ea1d6ad1e5cd6447b22159ff40c2ebbd23b1
|
||||
React: 9f8c8afb9a9d61b7a1b01a1c6fb7f0d4f902988f
|
||||
React-callinvoker: f813eee352cfd333208e8d67a72f584f5435769d
|
||||
React-Codegen: 771562186fec8c7830897f97ca59de683abd3184
|
||||
React-Core: 74670b4b715083e1c9003462f3f4fe32a70ba5c5
|
||||
React-CoreModules: 34bd5b93e5322e60102a5ad78b992c882e558022
|
||||
React-cxxreact: adc9fc6a9333ae779bd72effaf77173bd9f22bf7
|
||||
React-jsi: ab91137ea7d92a86e48b6f15d3a5580bea471776
|
||||
React-jsiexecutor: a5043e9e1e1bd13b80b58b228c6901b3721a4f54
|
||||
React-jsinspector: 86e89b9f135787a2e8eb74b3fc00ec61e9a80ae1
|
||||
React-logger: f790bd10f86b38012e108fb4b564023602702270
|
||||
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: fa15d1d29ff7557ee25ea48f7f59e65896fb3215
|
||||
React-RCTActionSheet: e83515333352a3cc19c146e3c7a63a8a9269da8f
|
||||
React-RCTAnimation: 8032daa2846e3db7ac28c4c5a207d0bfb5e1e3ad
|
||||
React-RCTBlob: fe40e206cebcb4f552e0ecdac3ef81b3baf3cb37
|
||||
React-RCTImage: dfc0df14cbfec1ec54fdd4700b8fe3bf8127dde2
|
||||
React-RCTLinking: ac9f65f0c8db738a6156ae7640ba92494b4770a5
|
||||
React-RCTNetwork: cf289a0386a1bd057e5eabb8563dfe5ce0af868c
|
||||
React-RCTSettings: 7889cfcf6c7d5738f3cb8889557a38eeea2f04ff
|
||||
React-RCTText: fd249e1f8406fb6e35cc77a2b9ff66a3477bf41a
|
||||
React-RCTVibration: f41f116aad644973f24653effb3db3de64fa0314
|
||||
React-runtimeexecutor: 8cdd80915ed6dabf2221a689f1f7ddb50ea5e9f3
|
||||
ReactCommon: 5b1b43a7d81a1ac4eec85f7c4db3283a14a3b13d
|
||||
RNCalendarEvents: 7e65eb4a94f53c1744d1e275f7fafcfaa619f7a3
|
||||
RNCAsyncStorage: ea6b5c280997b2b32a587793163b1f10e580c4f7
|
||||
RNCClipboard: 41d8d918092ae8e676f18adada19104fa3e68495
|
||||
@@ -766,13 +777,12 @@ SPEC CHECKSUMS:
|
||||
RNDeviceInfo: 0400a6d0c94186d1120c3cbd97b23abc022187a9
|
||||
RNGestureHandler: e5c7cab5f214503dcefd6b2b0cefb050e1f51c4a
|
||||
RNGoogleSignin: c4381751eefd73c552b923ba347a9bfc6f18771c
|
||||
RNReanimated: c1b56d030d1616239861534d9adb531f8cffab68
|
||||
RNScreens: 40a2cb40a02a609938137a1e0acfbf8fc9eebf19
|
||||
RNSound: 27e8268bdb0a1f191f219a33267f7e0445e8d62f
|
||||
RNSVG: ce9d996113475209013317e48b05c21ee988d42e
|
||||
RNWatch: 99637948ec9b5c9ec5a41920642594ad5ba07e80
|
||||
Yoga: 17cd9a50243093b547c1e539c749928dd68152da
|
||||
RNSVG: f3b60aeeaa81960e2e0536c3a9eef50b667ef3a9
|
||||
RNWatch: dae6c858a2051dbdcfb00b9a86cf4d90400263b4
|
||||
Yoga: 2f6a78c58dcc2963bd8e34d96a4246d9dff2e3a7
|
||||
|
||||
PODFILE CHECKSUM: 0e8826a5cb9ee147354a83321ecb3104132f510b
|
||||
PODFILE CHECKSUM: e671cdcdb80fab67e305861c36bfae8ed5a5b0ef
|
||||
|
||||
COCOAPODS: 1.11.3
|
||||
|
||||
@@ -8,11 +8,11 @@
|
||||
<string>applinks:beta.meet.jit.si</string>
|
||||
<string>applinks:meet.jit.si</string>
|
||||
</array>
|
||||
<key>com.apple.developer.siri</key>
|
||||
<true/>
|
||||
<key>com.apple.security.application-groups</key>
|
||||
<array>
|
||||
<string>group.org.jitsi.meet.appgroup</string>
|
||||
</array>
|
||||
<key>com.apple.developer.siri</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -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 */,
|
||||
@@ -369,6 +371,7 @@
|
||||
DEF4813D224925A2002AD03A /* Copy Google Plist file */,
|
||||
DE11877A21EE09640078D059 /* Setup Google reverse URL handler */,
|
||||
DE4F6D6E22005C0400DE699E /* Setup Dropbox */,
|
||||
4E81688528A408E600F8FA9E /* Update App Entitlements */,
|
||||
0BEA5C491F7B8F73000D0AB4 /* Embed Watch Content */,
|
||||
4EC49B9025BED71300E76218 /* Embed App Extensions */,
|
||||
);
|
||||
@@ -522,6 +525,24 @@
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "../scripts/run-packager.sh\n";
|
||||
};
|
||||
4E81688528A408E600F8FA9E /* Update App Entitlements */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
name = "Update App Entitlements";
|
||||
outputFileListPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "if test \"$PRODUCT_BUNDLE_IDENTIFIER\" = \"com.atlassian.JitsiMeet.ios\"; then\n ENTITLEMENTS_PLIST=\"$PROJECT_DIR/app.entitlements\"\n \n /usr/libexec/PlistBuddy -c \"Add :com.apple.developer.avfoundation.multitasking-camera-access bool 1\" $ENTITLEMENTS_PLIST\nfi\n";
|
||||
};
|
||||
69BC5020DBE393B56BD76636 /* [CP] Check Pods Manifest.lock */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
@@ -835,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 = (
|
||||
@@ -866,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 = (
|
||||
@@ -984,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*]" = "";
|
||||
@@ -1045,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*]" = "";
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -124,4 +124,10 @@
|
||||
options:options];
|
||||
}
|
||||
|
||||
- (UIInterfaceOrientationMask)application:(UIApplication *)application
|
||||
supportedInterfaceOrientationsForWindow:(UIWindow *)window {
|
||||
return [[JitsiMeet sharedInstance] application:application
|
||||
supportedInterfaceOrientationsForWindow:window];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -78,7 +78,6 @@ platform :ios do
|
||||
# Actually build the app
|
||||
build_app(
|
||||
scheme: "JitsiMeet",
|
||||
include_bitcode: true,
|
||||
include_symbols: true,
|
||||
export_xcargs: "-allowProvisioningUpdates"
|
||||
)
|
||||
|
||||
73
ios/scripts/release-sdk-lite.sh
Executable file
73
ios/scripts/release-sdk-lite.sh
Executable file
@@ -0,0 +1,73 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e -u
|
||||
|
||||
THIS_DIR=$(cd -P "$(dirname "$(readlink "${BASH_SOURCE[0]}" || echo "${BASH_SOURCE[0]}")")" && pwd)
|
||||
PROJECT_REPO=$(realpath ${THIS_DIR}/../..)
|
||||
RELEASE_REPO=$(realpath ${THIS_DIR}/../../../jitsi-meet-ios-sdk-releases)
|
||||
DEFAULT_SDK_VERSION=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" ${THIS_DIR}/../sdk/src/Lite-Info.plist)
|
||||
SDK_VERSION=${OVERRIDE_SDK_VERSION:-${DEFAULT_SDK_VERSION}}
|
||||
DO_GIT_TAG=${GIT_TAG:-0}
|
||||
|
||||
|
||||
echo "Releasing Jitsi Meet SDK Lite ${SDK_VERSION}"
|
||||
|
||||
pushd ${RELEASE_REPO}
|
||||
|
||||
# Generate podspec file
|
||||
cat JitsiMeetSDKLite.podspec.tpl | sed -e s/VERSION/${SDK_VERSION}-lite/g > JitsiMeetSDKLite.podspec
|
||||
|
||||
# Cleanup
|
||||
rm -rf lite/Frameworks/*
|
||||
|
||||
popd
|
||||
|
||||
# Build the SDK
|
||||
pushd ${PROJECT_REPO}
|
||||
rm -rf ios/sdk/out
|
||||
xcodebuild clean \
|
||||
-workspace ios/jitsi-meet.xcworkspace \
|
||||
-scheme JitsiMeetSDKLite
|
||||
xcodebuild archive \
|
||||
-workspace ios/jitsi-meet.xcworkspace \
|
||||
-scheme JitsiMeetSDKLite \
|
||||
-configuration Release \
|
||||
-sdk iphonesimulator \
|
||||
-destination='generic/platform=iOS Simulator' \
|
||||
-archivePath ios/sdk/out/ios-simulator \
|
||||
SKIP_INSTALL=NO \
|
||||
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
|
||||
xcodebuild archive \
|
||||
-workspace ios/jitsi-meet.xcworkspace \
|
||||
-scheme JitsiMeetSDKLite \
|
||||
-configuration Release \
|
||||
-sdk iphoneos \
|
||||
-destination='generic/platform=iOS' \
|
||||
-archivePath ios/sdk/out/ios-device \
|
||||
SKIP_INSTALL=NO \
|
||||
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
|
||||
xcodebuild -create-xcframework \
|
||||
-framework ios/sdk/out/ios-device.xcarchive/Products/Library/Frameworks/JitsiMeetSDK.framework \
|
||||
-framework ios/sdk/out/ios-simulator.xcarchive/Products/Library/Frameworks/JitsiMeetSDK.framework \
|
||||
-output ios/sdk/out/JitsiMeetSDK.xcframework
|
||||
if [[ $DO_GIT_TAG == 1 ]]; then
|
||||
git tag ios-sdk-lite-${SDK_VERSION}
|
||||
fi
|
||||
popd
|
||||
|
||||
pushd ${RELEASE_REPO}
|
||||
|
||||
# Put the new files in the repo
|
||||
cp -a ${PROJECT_REPO}/ios/sdk/out/JitsiMeetSDK.xcframework lite/Frameworks/
|
||||
|
||||
# Add all files to git
|
||||
if [[ $DO_GIT_TAG == 1 ]]; then
|
||||
git add -A .
|
||||
git commit -m "${SDK_VERSION} lite"
|
||||
git tag "${SDK_VERSION}-lite"
|
||||
fi
|
||||
|
||||
popd
|
||||
|
||||
echo "Finished! Don't forget to push the tags and releases repo artifacts."
|
||||
echo "The new pod can be pushed to CocoaPods by doing: pod trunk push JitsiMeetSDKLite.podspec"
|
||||
@@ -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 \
|
||||
|
||||
@@ -22,6 +22,17 @@
|
||||
0BCA49601EC4B6C600B793EE /* POSIX.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BCA495D1EC4B6C600B793EE /* POSIX.m */; };
|
||||
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 */; };
|
||||
@@ -32,13 +43,11 @@
|
||||
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 /* libPods-JitsiMeetSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E4376CA6886DE68FD7A4294B /* libPods-JitsiMeetSDK.a */; };
|
||||
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 */; };
|
||||
@@ -54,6 +63,55 @@
|
||||
DE81A2D92316AC7600AE1940 /* LogBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = DE81A2D72316AC7600AE1940 /* LogBridge.m */; };
|
||||
DE81A2DE2317ED5400AE1940 /* JitsiMeetBaseLogHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = DE81A2DC2317ED5400AE1940 /* JitsiMeetBaseLogHandler.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
DE81A2DF2317ED5400AE1940 /* JitsiMeetBaseLogHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = DE81A2DD2317ED5400AE1940 /* JitsiMeetBaseLogHandler.m */; };
|
||||
DE9A0130289A9A9A00E41CBB /* JitsiMeetUserInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = DE762DB322AFDE76000DEBD6 /* JitsiMeetUserInfo.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
DE9A0131289A9A9A00E41CBB /* JitsiMeetView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B412F161EDEC65D00B1A0A6 /* JitsiMeetView.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
DE9A0132289A9A9A00E41CBB /* RCTBridgeWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B93EF7C1EC9DDCD0030D24D /* RCTBridgeWrapper.h */; };
|
||||
DE9A0133289A9A9A00E41CBB /* JitsiMeetBaseLogHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = DE81A2DC2317ED5400AE1940 /* JitsiMeetBaseLogHandler.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
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 */; };
|
||||
DE9A0149289A9A9A00E41CBB /* RNRootView.m in Sources */ = {isa = PBXBuildFile; fileRef = DEAFA778229EAD520033A7FA /* RNRootView.m */; };
|
||||
DE9A014A289A9A9A00E41CBB /* JitsiMeetUserInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = DE762DB522AFDE8D000DEBD6 /* JitsiMeetUserInfo.m */; };
|
||||
DE9A014B289A9A9A00E41CBB /* JitsiMeetConferenceOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = DEAD3225220C497000E93636 /* JitsiMeetConferenceOptions.m */; };
|
||||
DE9A014C289A9A9A00E41CBB /* RCTBridgeWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B93EF7D1EC9DDCD0030D24D /* RCTBridgeWrapper.m */; };
|
||||
DE9A014D289A9A9A00E41CBB /* ExternalAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BA13D301EE83FF8007BEF7F /* ExternalAPI.m */; };
|
||||
DE9A014E289A9A9A00E41CBB /* POSIX.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BCA495D1EC4B6C600B793EE /* POSIX.m */; };
|
||||
DE9A014F289A9A9A00E41CBB /* InfoPlistUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = C8AFD27E2462C613000293D2 /* InfoPlistUtil.m */; };
|
||||
DE9A0150289A9A9A00E41CBB /* PiPViewCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6CC49AE207412CF000DFA42 /* PiPViewCoordinator.swift */; };
|
||||
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 */; };
|
||||
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 */; };
|
||||
DE9A015C289A9A9A00E41CBB /* JitsiMeetLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = DE81A2D32316AC4D00AE1940 /* JitsiMeetLogger.m */; };
|
||||
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 */; };
|
||||
DE9A0162289A9A9A00E41CBB /* Intents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BB9AD781F5EC6D7001C08DB /* Intents.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
|
||||
DE9A0163289A9A9A00E41CBB /* CallKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BB9AD761F5EC6CE001C08DB /* CallKit.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
|
||||
DE9A0166289A9A9A00E41CBB /* CallKitIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = 0BC4B8681F8C01E100CE8B21 /* CallKitIcon.png */; };
|
||||
DE9A0167289A9A9A00E41CBB /* image-resize@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = C6245F5B2053091D0040BE68 /* image-resize@2x.png */; };
|
||||
DE9A0168289A9A9A00E41CBB /* image-resize@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = C6245F5C2053091D0040BE68 /* image-resize@3x.png */; };
|
||||
DEA9F284258A5D9900D4CD74 /* JitsiMeetSDK.h in Headers */ = {isa = PBXBuildFile; fileRef = DEA9F283258A5D9900D4CD74 /* JitsiMeetSDK.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
DEAD3226220C497000E93636 /* JitsiMeetConferenceOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = DEAD3224220C497000E93636 /* JitsiMeetConferenceOptions.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
DEAD3227220C497000E93636 /* JitsiMeetConferenceOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = DEAD3225220C497000E93636 /* JitsiMeetConferenceOptions.m */; };
|
||||
@@ -83,6 +141,11 @@
|
||||
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>"; };
|
||||
@@ -94,16 +157,17 @@
|
||||
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>"; };
|
||||
927ED7DF018DE5E12C4C3404 /* libPods-JitsiMeetSDK.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-JitsiMeetSDK.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
98E09B5C73D9036B4ED252FC /* Pods-JitsiMeet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet.debug.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
9C77CA3CC919B081F1A52982 /* Pods-JitsiMeet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet.release.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet.release.xcconfig"; sourceTree = "<group>"; };
|
||||
A4A934E8212F3ADB001E9388 /* Dropbox.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Dropbox.m; sourceTree = "<group>"; };
|
||||
A4A934EB21349A06001E9388 /* Dropbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Dropbox.h; sourceTree = "<group>"; };
|
||||
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>"; };
|
||||
@@ -120,6 +184,8 @@
|
||||
DE81A2D72316AC7600AE1940 /* LogBridge.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LogBridge.m; sourceTree = "<group>"; };
|
||||
DE81A2DC2317ED5400AE1940 /* JitsiMeetBaseLogHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JitsiMeetBaseLogHandler.h; sourceTree = "<group>"; };
|
||||
DE81A2DD2317ED5400AE1940 /* JitsiMeetBaseLogHandler.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = JitsiMeetBaseLogHandler.m; sourceTree = "<group>"; };
|
||||
DE9A016F289A9A9A00E41CBB /* JitsiMeetSDK.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = JitsiMeetSDK.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
DE9A0170289A9A9A00E41CBB /* Lite-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Lite-Info.plist"; path = "/Users/saghul/work/jitsi/jitsi-meet-prs/ios/sdk/src/Lite-Info.plist"; sourceTree = "<absolute>"; };
|
||||
DEA9F283258A5D9900D4CD74 /* JitsiMeetSDK.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JitsiMeetSDK.h; sourceTree = "<group>"; };
|
||||
DEAD3224220C497000E93636 /* JitsiMeetConferenceOptions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JitsiMeetConferenceOptions.h; sourceTree = "<group>"; };
|
||||
DEAD3225220C497000E93636 /* JitsiMeetConferenceOptions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = JitsiMeetConferenceOptions.m; sourceTree = "<group>"; };
|
||||
@@ -131,7 +197,6 @@
|
||||
DEFE535521FB2E8300011A3A /* ReactUtils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ReactUtils.m; sourceTree = "<group>"; };
|
||||
DEFE535721FB2E9E00011A3A /* ReactUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ReactUtils.h; sourceTree = "<group>"; };
|
||||
DEFE535821FB311F00011A3A /* JitsiMeet+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "JitsiMeet+Private.h"; sourceTree = "<group>"; };
|
||||
E4376CA6886DE68FD7A4294B /* libPods-JitsiMeetSDK.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-JitsiMeetSDK.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@@ -141,7 +206,18 @@
|
||||
files = (
|
||||
0BB9AD791F5EC6D7001C08DB /* Intents.framework in Frameworks */,
|
||||
0BB9AD771F5EC6CE001C08DB /* CallKit.framework in Frameworks */,
|
||||
6F08DF7D4458EE3CF3F36F6D /* libPods-JitsiMeetSDK.a in Frameworks */,
|
||||
6F08DF7D4458EE3CF3F36F6D /* BuildFile in Frameworks */,
|
||||
3453F4A32680898C4A40E821 /* libPods-JitsiMeetSDK.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
DE9A0161289A9A9A00E41CBB /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
DE9A0162289A9A9A00E41CBB /* Intents.framework in Frameworks */,
|
||||
DE9A0163289A9A9A00E41CBB /* CallKit.framework in Frameworks */,
|
||||
9A8EE79C77C17743BB66E8BD /* libPods-JitsiMeetSDKLite.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -173,6 +249,7 @@
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
0BD906E51EC0C00300C8C18E /* JitsiMeetSDK.framework */,
|
||||
DE9A016F289A9A9A00E41CBB /* JitsiMeetSDK.framework */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
@@ -231,6 +308,7 @@
|
||||
0BA13D301EE83FF8007BEF7F /* ExternalAPI.m */,
|
||||
4E51B76225E5345E0038575A /* ScheenshareEventEmiter.h */,
|
||||
4E51B76325E5345E0038575A /* ScheenshareEventEmiter.m */,
|
||||
DE9A0170289A9A9A00E41CBB /* Lite-Info.plist */,
|
||||
);
|
||||
path = src;
|
||||
sourceTree = "<group>";
|
||||
@@ -241,7 +319,8 @@
|
||||
0BB9AD761F5EC6CE001C08DB /* CallKit.framework */,
|
||||
0B93EF7A1EC608550030D24D /* CoreText.framework */,
|
||||
0BB9AD781F5EC6D7001C08DB /* Intents.framework */,
|
||||
E4376CA6886DE68FD7A4294B /* libPods-JitsiMeetSDK.a */,
|
||||
B46497DE9A95BDF5E312AF48 /* libPods-JitsiMeetSDKLite.a */,
|
||||
927ED7DF018DE5E12C4C3404 /* libPods-JitsiMeetSDK.a */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
@@ -262,6 +341,8 @@
|
||||
9C77CA3CC919B081F1A52982 /* Pods-JitsiMeet.release.xcconfig */,
|
||||
09A78016288AF50ACD28A10D /* Pods-JitsiMeetSDK.debug.xcconfig */,
|
||||
891FE43DAD30BC8976683100 /* Pods-JitsiMeetSDK.release.xcconfig */,
|
||||
8F48C340DE0D91D1012976C5 /* Pods-JitsiMeetSDKLite.debug.xcconfig */,
|
||||
86389F55993FAAF6AEB3FA3E /* Pods-JitsiMeetSDKLite.release.xcconfig */,
|
||||
);
|
||||
name = Pods;
|
||||
sourceTree = "<group>";
|
||||
@@ -270,9 +351,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>";
|
||||
@@ -302,7 +385,10 @@
|
||||
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 */,
|
||||
4E0EF63928CA4069005D1B03 /* JMCallKitProxy.h in Headers */,
|
||||
4EEC9630286C73A2008705FA /* JitsiMeetView+Private.h in Headers */,
|
||||
0BD906EA1EC0C00300C8C18E /* JitsiMeet.h in Headers */,
|
||||
DE81A2D42316AC4D00AE1940 /* JitsiMeetLogger.h in Headers */,
|
||||
@@ -314,6 +400,34 @@
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
DE9A012F289A9A9A00E41CBB /* Headers */ = {
|
||||
isa = PBXHeadersBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
DE9A0130289A9A9A00E41CBB /* JitsiMeetUserInfo.h in Headers */,
|
||||
DE9A0131289A9A9A00E41CBB /* JitsiMeetView.h in Headers */,
|
||||
DE9A0132289A9A9A00E41CBB /* RCTBridgeWrapper.h in Headers */,
|
||||
DE9A0133289A9A9A00E41CBB /* JitsiMeetBaseLogHandler.h in Headers */,
|
||||
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 */,
|
||||
4E0EF63A28CA4069005D1B03 /* JMCallKitProxy.h in Headers */,
|
||||
DE9A013A289A9A9A00E41CBB /* JitsiMeetView+Private.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 */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXHeadersBuildPhase section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
@@ -339,6 +453,28 @@
|
||||
productReference = 0BD906E51EC0C00300C8C18E /* JitsiMeetSDK.framework */;
|
||||
productType = "com.apple.product-type.framework";
|
||||
};
|
||||
DE9A012D289A9A9A00E41CBB /* JitsiMeetSDKLite */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = DE9A016C289A9A9A00E41CBB /* Build configuration list for PBXNativeTarget "JitsiMeetSDKLite" */;
|
||||
buildPhases = (
|
||||
DE9A012E289A9A9A00E41CBB /* [CP] Check Pods Manifest.lock */,
|
||||
DE9A012F289A9A9A00E41CBB /* Headers */,
|
||||
DE9A0142289A9A9A00E41CBB /* Sources */,
|
||||
DE9A0161289A9A9A00E41CBB /* Frameworks */,
|
||||
DE9A0165289A9A9A00E41CBB /* Resources */,
|
||||
DE9A0169289A9A9A00E41CBB /* Copy sounds */,
|
||||
DE9A016A289A9A9A00E41CBB /* Package React bundle */,
|
||||
DE9A016B289A9A9A00E41CBB /* [CP] Copy Pods Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = JitsiMeetSDKLite;
|
||||
productName = "Jitsi Meet SDK";
|
||||
productReference = DE9A016F289A9A9A00E41CBB /* JitsiMeetSDK.framework */;
|
||||
productType = "com.apple.product-type.framework";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
@@ -369,6 +505,7 @@
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
0BD906E41EC0C00300C8C18E /* JitsiMeetSDK */,
|
||||
DE9A012D289A9A9A00E41CBB /* JitsiMeetSDKLite */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
@@ -384,6 +521,16 @@
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
DE9A0165289A9A9A00E41CBB /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
DE9A0166289A9A9A00E41CBB /* CallKitIcon.png in Resources */,
|
||||
DE9A0167289A9A9A00E41CBB /* image-resize@2x.png in Resources */,
|
||||
DE9A0168289A9A9A00E41CBB /* image-resize@3x.png in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
@@ -459,6 +606,76 @@
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "SOUNDS_DIR=\"${PROJECT_DIR}/../../sounds\"\n\ncp $SOUNDS_DIR/* ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/\n";
|
||||
};
|
||||
DE9A012E289A9A9A00E41CBB /* [CP] Check Pods Manifest.lock */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
|
||||
"${PODS_ROOT}/Manifest.lock",
|
||||
);
|
||||
name = "[CP] Check Pods Manifest.lock";
|
||||
outputPaths = (
|
||||
"$(DERIVED_FILE_DIR)/Pods-JitsiMeetSDKLite-checkManifestLockResult.txt",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
DE9A0169289A9A9A00E41CBB /* Copy sounds */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
name = "Copy sounds";
|
||||
outputFileListPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "SOUNDS_DIR=\"${PROJECT_DIR}/../../sounds\"\n\ncp $SOUNDS_DIR/* ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/\n";
|
||||
};
|
||||
DE9A016A289A9A9A00E41CBB /* Package React bundle */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
name = "Package React bundle";
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "export NODE_BINARY=node\nexport NODE_ARGS=\"--max_old_space_size=4096\"\n../../node_modules/react-native/scripts/react-native-xcode.sh\n";
|
||||
};
|
||||
DE9A016B289A9A9A00E41CBB /* [CP] Copy Pods Resources */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-JitsiMeetSDKLite/Pods-JitsiMeetSDKLite-resources.sh",
|
||||
"${PODS_ROOT}/Amplitude/Sources/Resources/ComodoRsaDomainValidationCA.der",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle",
|
||||
);
|
||||
name = "[CP] Copy Pods Resources";
|
||||
outputPaths = (
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ComodoRsaDomainValidationCA.der",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-JitsiMeetSDKLite/Pods-JitsiMeetSDKLite-resources.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
@@ -468,6 +685,7 @@
|
||||
files = (
|
||||
0BB9AD7B1F5EC8F4001C08DB /* CallKit.m in Sources */,
|
||||
DE81A2DF2317ED5400AE1940 /* JitsiMeetBaseLogHandler.m in Sources */,
|
||||
4E0EF63B28CA4069005D1B03 /* JMCallKitProxy.m in Sources */,
|
||||
4EBA6E662860B1E800B31882 /* JitsiMeetRenderingView.m in Sources */,
|
||||
4ED4FFF42721B9B90074E620 /* JitsiAudioSession.m in Sources */,
|
||||
0BB9AD7D1F60356D001C08DB /* AppInfo.m in Sources */,
|
||||
@@ -483,22 +701,55 @@
|
||||
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 */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
DE9A0142289A9A9A00E41CBB /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
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 */,
|
||||
DE9A014A289A9A9A00E41CBB /* JitsiMeetUserInfo.m in Sources */,
|
||||
DE9A014B289A9A9A00E41CBB /* JitsiMeetConferenceOptions.m in Sources */,
|
||||
DE9A014C289A9A9A00E41CBB /* RCTBridgeWrapper.m in Sources */,
|
||||
DE9A014D289A9A9A00E41CBB /* ExternalAPI.m in Sources */,
|
||||
DE9A014E289A9A9A00E41CBB /* POSIX.m in Sources */,
|
||||
DE9A014F289A9A9A00E41CBB /* InfoPlistUtil.m in Sources */,
|
||||
DE9A0150289A9A9A00E41CBB /* PiPViewCoordinator.swift in Sources */,
|
||||
DE9A0151289A9A9A00E41CBB /* LocaleDetector.m in Sources */,
|
||||
DE9A0152289A9A9A00E41CBB /* AudioMode.m in Sources */,
|
||||
DE9A0153289A9A9A00E41CBB /* Proximity.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 */,
|
||||
DE9A015C289A9A9A00E41CBB /* JitsiMeetLogger.m in Sources */,
|
||||
4E0EF63328CA2FB3005D1B03 /* JMCallKitEmitter.m in Sources */,
|
||||
DE9A015E289A9A9A00E41CBB /* JitsiMeetView.m in Sources */,
|
||||
DE9A015F289A9A9A00E41CBB /* JitsiMeet.m in Sources */,
|
||||
DE9A0160289A9A9A00E41CBB /* JavaScriptSandbox.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
@@ -537,7 +788,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*]" = "";
|
||||
@@ -600,7 +850,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*]" = "";
|
||||
@@ -637,7 +886,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";
|
||||
@@ -646,7 +894,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;
|
||||
};
|
||||
@@ -666,7 +915,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";
|
||||
@@ -675,7 +923,75 @@
|
||||
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;
|
||||
};
|
||||
DE9A016D289A9A9A00E41CBB /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 8F48C340DE0D91D1012976C5 /* Pods-JitsiMeetSDKLite.debug.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
|
||||
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_IDENTITY = "";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
|
||||
DEFINES_MODULE = YES;
|
||||
DEVELOPMENT_TEAM = "";
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
DYLIB_CURRENT_VERSION = 1;
|
||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"$(inherited)",
|
||||
"COCOAPODS=1",
|
||||
"JITSI_MEET_SDK_LITE=1",
|
||||
);
|
||||
INFOPLIST_FILE = "src/Lite-Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.JitsiMeetSDK.ios;
|
||||
PRODUCT_NAME = JitsiMeetSDK;
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SKIP_INSTALL = YES;
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SWIFT_INSTALL_OBJC_HEADER = NO;
|
||||
SWIFT_OBJC_INTERFACE_HEADER_NAME = "";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
DE9A016E289A9A9A00E41CBB /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 86389F55993FAAF6AEB3FA3E /* Pods-JitsiMeetSDKLite.release.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
|
||||
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_IDENTITY = "";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
|
||||
DEFINES_MODULE = YES;
|
||||
DEVELOPMENT_TEAM = "";
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
DYLIB_CURRENT_VERSION = 1;
|
||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"$(inherited)",
|
||||
"COCOAPODS=1",
|
||||
JITSI_MEET_SDK_LITE,
|
||||
);
|
||||
INFOPLIST_FILE = "src/Lite-Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.JitsiMeetSDK.ios;
|
||||
PRODUCT_NAME = JitsiMeetSDK;
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SKIP_INSTALL = YES;
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SWIFT_INSTALL_OBJC_HEADER = NO;
|
||||
SWIFT_OBJC_INTERFACE_HEADER_NAME = "";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Release;
|
||||
@@ -701,6 +1017,15 @@
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
DE9A016C289A9A9A00E41CBB /* Build configuration list for PBXNativeTarget "JitsiMeetSDKLite" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
DE9A016D289A9A9A00E41CBB /* Debug */,
|
||||
DE9A016E289A9A9A00E41CBB /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 0BD906DC1EC0C00300C8C18E /* Project object */;
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1340"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "DE9A012D289A9A9A00E41CBB"
|
||||
BuildableName = "JitsiMeetSDK.framework"
|
||||
BlueprintName = "JitsiMeetSDKLite"
|
||||
ReferencedContainer = "container:sdk.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<Testables>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "DE9A012D289A9A9A00E41CBB"
|
||||
BuildableName = "JitsiMeetSDK.framework"
|
||||
BlueprintName = "JitsiMeetSDKLite"
|
||||
ReferencedContainer = "container:sdk.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@@ -37,8 +37,10 @@ RCT_EXPORT_MODULE();
|
||||
= [[NSBundle mainBundle] infoDictionary];
|
||||
|
||||
// calendarEnabled
|
||||
BOOL calendarEnabled
|
||||
= infoDictionary[@"NSCalendarsUsageDescription"] != nil;
|
||||
BOOL calendarEnabled = NO;
|
||||
#if !defined(JITSI_MEET_SDK_LITE)
|
||||
calendarEnabled = infoDictionary[@"NSCalendarsUsageDescription"] != nil;
|
||||
#endif
|
||||
|
||||
// name
|
||||
NSString *name = infoDictionary[@"CFBundleDisplayName"];
|
||||
@@ -63,19 +65,39 @@ RCT_EXPORT_MODULE();
|
||||
}
|
||||
}
|
||||
|
||||
// SDK version
|
||||
NSDictionary<NSString *, id> *sdkInfoDictionary
|
||||
= [[NSBundle bundleForClass:self.class] infoDictionary];
|
||||
NSString *sdkVersion = sdkInfoDictionary[@"CFBundleShortVersionString"];
|
||||
if (sdkVersion == nil) {
|
||||
sdkVersion = sdkInfoDictionary[@"CFBundleVersion"];
|
||||
if (sdkVersion == nil) {
|
||||
sdkVersion = @"";
|
||||
}
|
||||
}
|
||||
|
||||
// build number
|
||||
NSString *buildNumber = infoDictionary[@"CFBundleVersion"];
|
||||
if (buildNumber == nil) {
|
||||
buildNumber = @"";
|
||||
}
|
||||
|
||||
// google services (sign in)
|
||||
BOOL isGoogleServiceEnabled = [InfoPlistUtil containsRealServiceInfoPlistInBundle:[NSBundle mainBundle]];
|
||||
|
||||
// lite SDK
|
||||
BOOL isLiteSDK = NO;
|
||||
#if defined(JITSI_MEET_SDK_LITE)
|
||||
isLiteSDK = YES;
|
||||
#endif
|
||||
|
||||
return @{
|
||||
@"calendarEnabled": [NSNumber numberWithBool:calendarEnabled],
|
||||
@"buildNumber": buildNumber,
|
||||
@"isLiteSDK": [NSNumber numberWithBool:isLiteSDK],
|
||||
@"name": name,
|
||||
@"sdkBundlePath": sdkBundlePath,
|
||||
@"sdkVersion": sdkVersion,
|
||||
@"version": version,
|
||||
@"GOOGLE_SERVICES_ENABLED": [NSNumber numberWithBool:isGoogleServiceEnabled]
|
||||
};
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
#import <WebRTC/WebRTC.h>
|
||||
|
||||
#import "JitsiAudioSession+Private.h"
|
||||
#import "LogUtils.h"
|
||||
|
||||
|
||||
// Audio mode
|
||||
@@ -178,7 +177,7 @@ RCT_EXPORT_METHOD(setMode:(int)mode
|
||||
RCT_EXPORT_METHOD(setAudioDevice:(NSString *)device
|
||||
resolve:(RCTPromiseResolveBlock)resolve
|
||||
reject:(RCTPromiseRejectBlock)reject) {
|
||||
DDLogInfo(@"[AudioMode] Selected device: %@", device);
|
||||
RCTLogInfo(@"[AudioMode] Selected device: %@", device);
|
||||
|
||||
RTCAudioSession *session = JitsiAudioSession.rtcAudioSession;
|
||||
[session lockForConfiguration];
|
||||
@@ -248,7 +247,7 @@ RCT_EXPORT_METHOD(updateDeviceList) {
|
||||
- (void)audioSessionDidChangeRoute:(RTCAudioSession *)session
|
||||
reason:(AVAudioSessionRouteChangeReason)reason
|
||||
previousRoute:(AVAudioSessionRouteDescription *)previousRoute {
|
||||
DDLogInfo(@"[AudioMode] Route changed, reason: %lu", (unsigned long)reason);
|
||||
RCTLogInfo(@"[AudioMode] Route changed, reason: %lu", (unsigned long)reason);
|
||||
|
||||
// Update JS about the changes.
|
||||
[self notifyDevicesChanged];
|
||||
@@ -275,7 +274,7 @@ RCT_EXPORT_METHOD(updateDeviceList) {
|
||||
// This is to play well with other components which could be integrated
|
||||
// into the final application.
|
||||
if (self->activeMode != kAudioModeDefault) {
|
||||
DDLogInfo(@"[AudioMode] Route changed, reapplying RTCAudioSession config");
|
||||
RCTLogInfo(@"[AudioMode] Route changed, reapplying RTCAudioSession config");
|
||||
RTCAudioSessionConfiguration *config = [self configForMode:self->activeMode];
|
||||
[self setConfig:config error:nil];
|
||||
if (self->forceSpeaker && !self->isSpeakerOn) {
|
||||
@@ -288,7 +287,7 @@ RCT_EXPORT_METHOD(updateDeviceList) {
|
||||
}
|
||||
|
||||
- (void)audioSession:(RTCAudioSession *)audioSession didSetActive:(BOOL)active {
|
||||
DDLogInfo(@"[AudioMode] Audio session didSetActive:%d", active);
|
||||
RCTLogInfo(@"[AudioMode] Audio session didSetActive:%d", active);
|
||||
}
|
||||
|
||||
#pragma mark - Helper methods
|
||||
|
||||
@@ -57,6 +57,9 @@
|
||||
openURL:(NSURL *_Nonnull)url
|
||||
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *_Nonnull)options;
|
||||
|
||||
- (UIInterfaceOrientationMask)application:(UIApplication *)application
|
||||
supportedInterfaceOrientationsForWindow:(UIWindow *)window;
|
||||
|
||||
#pragma mark - Utility methods
|
||||
|
||||
/**
|
||||
|
||||
@@ -15,10 +15,9 @@
|
||||
*/
|
||||
|
||||
#import <Intents/Intents.h>
|
||||
#import <RNGoogleSignin/RNGoogleSignin.h>
|
||||
#import <WebRTC/RTCLogging.h>
|
||||
#import "Orientation.h"
|
||||
|
||||
#import "Dropbox.h"
|
||||
#import "JitsiMeet+Private.h"
|
||||
#import "JitsiMeetConferenceOptions+Private.h"
|
||||
#import "JitsiMeetView+Private.h"
|
||||
@@ -27,6 +26,11 @@
|
||||
#import "RNSplashScreen.h"
|
||||
#import "ScheenshareEventEmiter.h"
|
||||
|
||||
#if !defined(JITSI_MEET_SDK_LITE)
|
||||
#import <RNGoogleSignin/RNGoogleSignin.h>
|
||||
#import "Dropbox.h"
|
||||
#endif
|
||||
|
||||
@implementation JitsiMeet {
|
||||
RCTBridgeWrapper *_bridgeWrapper;
|
||||
NSDictionary *_launchOptions;
|
||||
@@ -76,7 +80,9 @@
|
||||
|
||||
_launchOptions = [launchOptions copy];
|
||||
|
||||
#if !defined(JITSI_MEET_SDK_LITE)
|
||||
[Dropbox setAppKey];
|
||||
#endif
|
||||
|
||||
return YES;
|
||||
}
|
||||
@@ -98,6 +104,7 @@
|
||||
openURL:(NSURL *)url
|
||||
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
|
||||
|
||||
#if !defined(JITSI_MEET_SDK_LITE)
|
||||
if ([Dropbox application:app openURL:url options:options]) {
|
||||
return YES;
|
||||
}
|
||||
@@ -107,6 +114,7 @@
|
||||
options:options]) {
|
||||
return YES;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (_customUrlScheme == nil || ![_customUrlScheme isEqualToString:url.scheme]) {
|
||||
return NO;
|
||||
@@ -120,6 +128,10 @@
|
||||
return true;
|
||||
}
|
||||
|
||||
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
|
||||
return [Orientation getOrientation];
|
||||
}
|
||||
|
||||
#pragma mark - Utility methods
|
||||
|
||||
- (void)instantiateReactNativeBridge {
|
||||
|
||||
@@ -22,3 +22,5 @@
|
||||
#import <JitsiMeetSDK/JitsiMeetBaseLogHandler.h>
|
||||
#import <JitsiMeetSDK/JitsiAudioSession.h>
|
||||
#import <JitsiMeetSDK/InfoPlistUtil.h>
|
||||
#import <JitsiMeetSDK/JMCallKitListener.h>
|
||||
#import <JitsiMeetSDK/JMCallKitProxy.h>
|
||||
|
||||
24
ios/sdk/src/Lite-Info.plist
Normal file
24
ios/sdk/src/Lite-Info.plist
Normal file
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>99.0.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -26,12 +26,11 @@
|
||||
#import <React/RCTBridge.h>
|
||||
#import <React/RCTEventEmitter.h>
|
||||
#import <React/RCTUtils.h>
|
||||
#import <React/RCTLog.h>
|
||||
#import <WebRTC/WebRTC.h>
|
||||
|
||||
#import <JitsiMeetSDK/JitsiMeetSDK-Swift.h>
|
||||
|
||||
#import "../LogUtils.h"
|
||||
#import "JitsiAudioSession.h"
|
||||
#import "../JitsiAudioSession.h"
|
||||
#import "JMCallKitProxy.h"
|
||||
|
||||
|
||||
// The events emitted/supported by RNCallKit:
|
||||
@@ -73,7 +72,7 @@ RCT_EXPORT_MODULE();
|
||||
RCT_EXPORT_METHOD(endCall:(NSString *)callUUID
|
||||
resolve:(RCTPromiseResolveBlock)resolve
|
||||
reject:(RCTPromiseRejectBlock)reject) {
|
||||
DDLogInfo(@"[RNCallKit][endCall] callUUID = %@", callUUID);
|
||||
RCTLogInfo(@"[RNCallKit][endCall] callUUID = %@", callUUID);
|
||||
|
||||
NSUUID *callUUID_ = [[NSUUID alloc] initWithUUIDString:callUUID];
|
||||
|
||||
@@ -94,7 +93,7 @@ RCT_EXPORT_METHOD(setMuted:(NSString *)callUUID
|
||||
muted:(BOOL)muted
|
||||
resolve:(RCTPromiseResolveBlock)resolve
|
||||
reject:(RCTPromiseRejectBlock)reject) {
|
||||
DDLogInfo(@"[RNCallKit][setMuted] callUUID = %@", callUUID);
|
||||
RCTLogInfo(@"[RNCallKit][setMuted] callUUID = %@", callUUID);
|
||||
|
||||
NSUUID *callUUID_ = [[NSUUID alloc] initWithUUIDString:callUUID];
|
||||
|
||||
@@ -111,7 +110,7 @@ RCT_EXPORT_METHOD(setMuted:(NSString *)callUUID
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(setProviderConfiguration:(NSDictionary *)dictionary) {
|
||||
DDLogInfo(@"[RNCallKit][setProviderConfiguration:] dictionary = %@", dictionary);
|
||||
RCTLogInfo(@"[RNCallKit][setProviderConfiguration:] dictionary = %@", dictionary);
|
||||
|
||||
if (![JMCallKitProxy isProviderConfigured]) {
|
||||
JMCallKitProxy.enabled = true;
|
||||
@@ -128,7 +127,7 @@ RCT_EXPORT_METHOD(startCall:(NSString *)callUUID
|
||||
video:(BOOL)video
|
||||
resolve:(RCTPromiseResolveBlock)resolve
|
||||
reject:(RCTPromiseRejectBlock)reject) {
|
||||
DDLogInfo(@"[RNCallKit][startCall] callUUID = %@", callUUID);
|
||||
RCTLogInfo(@"[RNCallKit][startCall] callUUID = %@", callUUID);
|
||||
|
||||
NSUUID *callUUID_ = [[NSUUID alloc] initWithUUIDString:callUUID];
|
||||
|
||||
@@ -192,7 +191,7 @@ RCT_EXPORT_METHOD(updateCall:(NSString *)callUUID
|
||||
options:(NSDictionary *)options
|
||||
resolve:(RCTPromiseResolveBlock)resolve
|
||||
reject:(RCTPromiseRejectBlock)reject) {
|
||||
DDLogInfo(@"[RNCallKit][updateCall] callUUID = %@ options = %@", callUUID, options);
|
||||
RCTLogInfo(@"[RNCallKit][updateCall] callUUID = %@ options = %@", callUUID, options);
|
||||
|
||||
NSUUID *callUUID_ = [[NSUUID alloc] initWithUUIDString:callUUID];
|
||||
|
||||
@@ -215,7 +214,7 @@ RCT_EXPORT_METHOD(updateCall:(NSString *)callUUID
|
||||
#pragma mark - Helper methods
|
||||
|
||||
- (void)configureProviderFromDictionary:(NSDictionary* )dictionary {
|
||||
DDLogInfo(@"[RNCallKit][providerConfigurationFromDictionary: %@]", dictionary);
|
||||
RCTLogInfo(@"[RNCallKit][providerConfigurationFromDictionary: %@]", dictionary);
|
||||
|
||||
if (!dictionary) {
|
||||
dictionary = @{};
|
||||
@@ -259,12 +258,12 @@ RCT_EXPORT_METHOD(updateCall:(NSString *)callUUID
|
||||
- (void)requestTransaction:(CXTransaction *)transaction
|
||||
resolve:(RCTPromiseResolveBlock)resolve
|
||||
reject:(RCTPromiseRejectBlock)reject {
|
||||
DDLogInfo(@"[RNCallKit][requestTransaction] transaction = %@", transaction);
|
||||
RCTLogInfo(@"[RNCallKit][requestTransaction] transaction = %@", transaction);
|
||||
|
||||
[JMCallKitProxy request:transaction
|
||||
completion:^(NSError * _Nullable error) {
|
||||
if (error) {
|
||||
DDLogError(@"[RNCallKit][requestTransaction] Error requesting transaction (%@): (%@)", transaction.actions, error);
|
||||
RCTLogError(@"[RNCallKit][requestTransaction] Error requesting transaction (%@): (%@)", transaction.actions, error);
|
||||
reject(nil, @"Error processing CallKit transaction", error);
|
||||
} else {
|
||||
resolve(nil);
|
||||
@@ -276,14 +275,14 @@ RCT_EXPORT_METHOD(updateCall:(NSString *)callUUID
|
||||
|
||||
// Called when the provider has been reset. We should terminate all calls.
|
||||
- (void)providerDidReset {
|
||||
DDLogInfo(@"[RNCallKit][CXProviderDelegate][providerDidReset:]");
|
||||
RCTLogInfo(@"[RNCallKit][CXProviderDelegate][providerDidReset:]");
|
||||
|
||||
[self sendEventWithName:RNCallKitProviderDidReset body:nil];
|
||||
}
|
||||
|
||||
// Answering incoming call
|
||||
- (void) performAnswerCallWithUUID:(NSUUID *)UUID {
|
||||
DDLogInfo(@"[RNCallKit][CXProviderDelegate][provider:performAnswerCallAction:]");
|
||||
RCTLogInfo(@"[RNCallKit][CXProviderDelegate][provider:performAnswerCallAction:]");
|
||||
|
||||
[self sendEventWithName:RNCallKitPerformAnswerCallAction
|
||||
body:@{ @"callUUID": UUID.UUIDString }];
|
||||
@@ -291,7 +290,7 @@ RCT_EXPORT_METHOD(updateCall:(NSString *)callUUID
|
||||
|
||||
// Call ended, user request
|
||||
- (void) performEndCallWithUUID:(NSUUID *)UUID {
|
||||
DDLogInfo(@"[RNCallKit][CXProviderDelegate][provider:performEndCallAction:]");
|
||||
RCTLogInfo(@"[RNCallKit][CXProviderDelegate][provider:performEndCallAction:]");
|
||||
|
||||
[self sendEventWithName:RNCallKitPerformEndCallAction
|
||||
body:@{ @"callUUID": UUID.UUIDString }];
|
||||
@@ -300,7 +299,7 @@ RCT_EXPORT_METHOD(updateCall:(NSString *)callUUID
|
||||
// Handle audio mute from CallKit view
|
||||
- (void) performSetMutedCallWithUUID:(NSUUID *)UUID
|
||||
isMuted:(BOOL)isMuted {
|
||||
DDLogInfo(@"[RNCallKit][CXProviderDelegate][provider:performSetMutedCallAction:]");
|
||||
RCTLogInfo(@"[RNCallKit][CXProviderDelegate][provider:performSetMutedCallAction:]");
|
||||
|
||||
[self sendEventWithName:RNCallKitPerformSetMutedCallAction
|
||||
body:@{
|
||||
@@ -312,26 +311,26 @@ RCT_EXPORT_METHOD(updateCall:(NSString *)callUUID
|
||||
// Starting outgoing call
|
||||
- (void) performStartCallWithUUID:(NSUUID *)UUID
|
||||
isVideo:(BOOL)isVideo {
|
||||
DDLogInfo(@"[RNCallKit][CXProviderDelegate][provider:performStartCallAction:]");
|
||||
RCTLogInfo(@"[RNCallKit][CXProviderDelegate][provider:performStartCallAction:]");
|
||||
|
||||
[JMCallKitProxy reportOutgoingCallWith:UUID
|
||||
startedConnectingAt:nil];
|
||||
}
|
||||
|
||||
- (void) providerDidActivateAudioSessionWithSession:(AVAudioSession *)session {
|
||||
DDLogInfo(@"[RNCallKit][CXProviderDelegate][provider:didActivateAudioSession:]");
|
||||
RCTLogInfo(@"[RNCallKit][CXProviderDelegate][provider:didActivateAudioSession:]");
|
||||
|
||||
[JitsiAudioSession activateWithAudioSession:session];
|
||||
}
|
||||
|
||||
- (void) providerDidDeactivateAudioSessionWithSession:(AVAudioSession *)session {
|
||||
DDLogInfo(@"[RNCallKit][CXProviderDelegate][provider:didDeactivateAudioSession:]");
|
||||
RCTLogInfo(@"[RNCallKit][CXProviderDelegate][provider:didDeactivateAudioSession:]");
|
||||
|
||||
[JitsiAudioSession deactivateWithAudioSession:session];
|
||||
}
|
||||
|
||||
- (void) providerTimedOutPerformingActionWithAction:(CXAction *)action {
|
||||
DDLogWarn(@"[RNCallKit][CXProviderDelegate][provider:timedOutPerformingAction:]");
|
||||
RCTLogWarn(@"[RNCallKit][CXProviderDelegate][provider:timedOutPerformingAction:]");
|
||||
}
|
||||
|
||||
|
||||
|
||||
35
ios/sdk/src/callkit/JMCallKitEmitter.h
Normal file
35
ios/sdk/src/callkit/JMCallKitEmitter.h
Normal file
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* 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
|
||||
|
||||
@interface JMCallKitEmitter : NSObject <CXProviderDelegate>
|
||||
|
||||
#pragma mark Add/Remove listeners
|
||||
- (void)addListener:(id<JMCallKitListener>)listener;
|
||||
- (void)removeListener:(id<JMCallKitListener>)listener;
|
||||
|
||||
#pragma mark Add mute action
|
||||
- (void)addMuteAction:(NSUUID *)actionUUID;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
117
ios/sdk/src/callkit/JMCallKitEmitter.m
Normal file
117
ios/sdk/src/callkit/JMCallKitEmitter.m
Normal 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
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
34
ios/sdk/src/callkit/JMCallKitListener.h
Normal file
34
ios/sdk/src/callkit/JMCallKitListener.h
Normal 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
|
||||
@@ -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)
|
||||
}
|
||||
87
ios/sdk/src/callkit/JMCallKitProxy.h
Normal file
87
ios/sdk/src/callkit/JMCallKitProxy.h
Normal 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
|
||||
284
ios/sdk/src/callkit/JMCallKitProxy.m
Normal file
284
ios/sdk/src/callkit/JMCallKitProxy.m
Normal 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 ([CXAction 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
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
{
|
||||
"af": "",
|
||||
"az": "Azerbeidjans",
|
||||
"bg": "Bulgaars",
|
||||
"cs": "Tsjeggies",
|
||||
"de": "Duits",
|
||||
@@ -22,6 +21,7 @@
|
||||
"sl": "Sloweens",
|
||||
"sv": "Sweeds",
|
||||
"tr": "Turks",
|
||||
"uk": "Oekraïens",
|
||||
"vi": "Viëtnamees",
|
||||
"zhCN": "Sjinees (Sjina)"
|
||||
}
|
||||
|
||||
@@ -38,7 +38,6 @@
|
||||
"sk": "السلوفاكية",
|
||||
"sl": "السلوفينية",
|
||||
"sv": "السويدية",
|
||||
"th": "التايلندية",
|
||||
"tr": "التركية",
|
||||
"uk": "الأوكرانية",
|
||||
"vi": "الفيتنامية",
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
"ru": "Расійская",
|
||||
"sv": "Шведская",
|
||||
"tr": "Турэцкая",
|
||||
"uk": "Украінская",
|
||||
"vi": "В'етнамская",
|
||||
"zhCN": "Кітайская (Кітай)",
|
||||
"zhTW": "Кітайская (Тайвань)"
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
"ru": "Руски",
|
||||
"sv": "Шведски",
|
||||
"tr": "Турски",
|
||||
"uk": "Украински",
|
||||
"vi": "Виетнамски",
|
||||
"zhCN": "Китайски (Китай)",
|
||||
"zhTW": "Тайвански"
|
||||
|
||||
@@ -46,7 +46,6 @@
|
||||
"sr": "Serbi",
|
||||
"sv": "Suec",
|
||||
"te": "Telugu",
|
||||
"th": "tailandès",
|
||||
"tr": "Turc",
|
||||
"uk": "Ucraïnès",
|
||||
"vi": "Vietnamita",
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"af": "Afrikánština",
|
||||
"ar": "Arabština",
|
||||
"az": "Ázerbájdžánština",
|
||||
"bg": "Bulharština",
|
||||
"ca": "Katalánština",
|
||||
"cs": "Čeština",
|
||||
@@ -41,7 +40,6 @@
|
||||
"sl": "Slovinština",
|
||||
"sr": "Srbština",
|
||||
"sv": "Švédština",
|
||||
"th": "Thajština",
|
||||
"tr": "Turečtina",
|
||||
"uk": "Ukrajinština",
|
||||
"vi": "Vietnamština",
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
"ru": "Russisk",
|
||||
"sv": "Svensk",
|
||||
"tr": "Tyrkisk",
|
||||
"uk": "Ukrainsk",
|
||||
"vi": "Vietnamesisk",
|
||||
"zhCN": "Kinesisk (China)",
|
||||
"zhTW": "Kinesisk (Taiwan)"
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
{
|
||||
"af": "Afrikaans",
|
||||
"az": "Aserbaidschanisch",
|
||||
"bg": "Bulgarisch",
|
||||
"ca": "Katalanisch",
|
||||
"cs": "Tschechisch",
|
||||
@@ -34,6 +33,7 @@
|
||||
"sr": "Serbish",
|
||||
"sv": "Schwedisch",
|
||||
"tr": "Türkisch",
|
||||
"uk": "Ukrainisch",
|
||||
"vi": "Vietnamesisch",
|
||||
"zhCN": "Chinesisch (China)",
|
||||
"zhTW": "Chinesisch (Taiwan)"
|
||||
|
||||
@@ -33,7 +33,6 @@
|
||||
"sc": "Σαρδηνικά",
|
||||
"sk": "Σλοβακικά",
|
||||
"sv": "Σουηδικά",
|
||||
"th": "Ταϊλανδικά",
|
||||
"tr": "Τουρκικά",
|
||||
"uk": "Ουκρανικά",
|
||||
"vi": "Βιετναμέζικα",
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
{
|
||||
"af": "Afrikaans",
|
||||
"az": "",
|
||||
"bg": "Bulgarian",
|
||||
"ca": "Catalan",
|
||||
"cs": "Czech",
|
||||
@@ -34,6 +33,7 @@
|
||||
"sr": "Serbian",
|
||||
"sv": "Swedish",
|
||||
"tr": "Turkish",
|
||||
"uk": "Ukrainian",
|
||||
"vi": "Vietnamese",
|
||||
"zhCN": "Chinese (China)",
|
||||
"zhTW": "Chinese (Taiwan)"
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
{
|
||||
"af": "Afrikansa",
|
||||
"az": "Azera",
|
||||
"bg": "Bulgara",
|
||||
"cs": "Ĉeĥa",
|
||||
"de": "Germana",
|
||||
@@ -22,6 +21,7 @@
|
||||
"sl": "Slovena",
|
||||
"sv": "Sveda",
|
||||
"tr": "Turka",
|
||||
"uk": "Ukraina",
|
||||
"vi": "Vjetnama",
|
||||
"zhCN": "Ĉina (Ĉinuja)"
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
"sk": "Eslovaco",
|
||||
"sv": "Sueco",
|
||||
"tr": "Turco",
|
||||
"uk": "Ucraniano",
|
||||
"vi": "Vietnamita",
|
||||
"zhCN": "Chino (China)",
|
||||
"zhTW": "Chino (Taiwán)"
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
"sk": "Eslovaco",
|
||||
"sv": "Sueco",
|
||||
"tr": "Turco",
|
||||
"uk": "Ucraniano",
|
||||
"vi": "Vietnamita",
|
||||
"zhCN": "Chino (China)",
|
||||
"zhTW": "Chino (Taiwan)"
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
"ru": "Vene keel",
|
||||
"sv": "Roosi keel",
|
||||
"tr": "Türgi keel",
|
||||
"uk": "Ukraina keel",
|
||||
"vi": "Vietnami keel",
|
||||
"zhCN": "Hiina keel (Hiina)",
|
||||
"zhTW": "Hiina keel (Tai)"
|
||||
|
||||
@@ -42,7 +42,6 @@
|
||||
"sl": "اسلوونیایی",
|
||||
"sr": "صربی",
|
||||
"sv": "سوئدی",
|
||||
"th": "تایلندی",
|
||||
"tr": "ترکی",
|
||||
"uk": "اوکراینی",
|
||||
"vi": "ویتنامی",
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
{
|
||||
"af": "afrikaans",
|
||||
"az": "",
|
||||
"bg": "bulgaria",
|
||||
"ca": "katalaani",
|
||||
"cs": "tšekki",
|
||||
@@ -32,6 +31,7 @@
|
||||
"sl": "",
|
||||
"sv": "ruotsi",
|
||||
"tr": "turkki",
|
||||
"uk": "ukraina",
|
||||
"vi": "vietnam",
|
||||
"zhCN": "kiina (Kiina)",
|
||||
"zhTW": "kiina (Taiwan)"
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
"sk": "Slovaque",
|
||||
"sv": "Suédois",
|
||||
"tr": "Turc",
|
||||
"uk": "Ukrainien",
|
||||
"vi": "Vietnamien",
|
||||
"zhCN": "Chinois (Chine)",
|
||||
"zhTW": "Chinois (Taiwan)"
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
"sk": "Slovaque",
|
||||
"sv": "Suédois",
|
||||
"tr": "Turc",
|
||||
"uk": "Ukrainien",
|
||||
"vi": "Vietnamien",
|
||||
"zhCN": "Chinois (Chine)",
|
||||
"zhTW": "Chinois (Taiwan)"
|
||||
|
||||
@@ -1,34 +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": "",
|
||||
"vi": "",
|
||||
"zhCN": "",
|
||||
"zhTW": ""
|
||||
}
|
||||
@@ -41,7 +41,6 @@
|
||||
"sl": "Esloveno",
|
||||
"sr": "Serbio",
|
||||
"sv": "Sueco",
|
||||
"th": "Tailandés",
|
||||
"tr": "Turco",
|
||||
"uk": "Ucraíno",
|
||||
"vi": "Vietnamita",
|
||||
|
||||
@@ -44,7 +44,6 @@
|
||||
"sl": "Slovenian",
|
||||
"sr": "Serbian",
|
||||
"sv": "Swedish",
|
||||
"th": "Thailand",
|
||||
"tr": "Turkish",
|
||||
"uk": "Ukrainian",
|
||||
"vi": "Vietnamese",
|
||||
|
||||
@@ -47,7 +47,6 @@
|
||||
"sr": "Srpski",
|
||||
"sv": "Švedski",
|
||||
"te": "Teluški",
|
||||
"th": "Tajski",
|
||||
"tr": "Turski",
|
||||
"uk": "Ukrajinski",
|
||||
"vi": "Vijetnamski",
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
"sk": "Szlovákul",
|
||||
"sv": "Svéd",
|
||||
"tr": "Török",
|
||||
"uk": "Ukrán",
|
||||
"vi": "Vietnámi",
|
||||
"zhCN": "Kínai (Kína)",
|
||||
"zhTW": "Kínai (Tajvan)"
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
{
|
||||
"af": "",
|
||||
"az": "",
|
||||
"bg": "Բուլղարերեն",
|
||||
"cs": "",
|
||||
"de": "Գերմաներեն ",
|
||||
@@ -22,6 +21,7 @@
|
||||
"sl": "Սլովեներեն ",
|
||||
"sv": "Շվեդերեն ",
|
||||
"tr": "Թուրքերեն",
|
||||
"uk": "Ուկրաիներեն",
|
||||
"vi": "",
|
||||
"zhCN": "Չիներեն"
|
||||
}
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
"sk": "Bahasa Slovakia",
|
||||
"sv": "Bahasa Swedia",
|
||||
"tr": "Bahasa Turki",
|
||||
"uk": "Bahasa Ukraina",
|
||||
"vi": "Bahasa Vietnam",
|
||||
"zhCN": "Bahasa Mandarin",
|
||||
"zhTW": "Bahasa Mandarin - Taiwan"
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
"ru": "Rússneska",
|
||||
"sv": "Sænska",
|
||||
"tr": "Tyrkneska",
|
||||
"uk": "Úkraínska",
|
||||
"vi": "Víetnamska",
|
||||
"zhCN": "Kínverska (Kína)",
|
||||
"zhTW": "Kínverska (Taívan)"
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
{
|
||||
"af": "Afrikaans",
|
||||
"az": "Azero",
|
||||
"bg": "Bulgaro",
|
||||
"ca": "Catalano",
|
||||
"cs": "Ceco",
|
||||
@@ -41,7 +40,6 @@
|
||||
"sl": "Sloveno",
|
||||
"sr": "Serbo",
|
||||
"sv": "Svedese",
|
||||
"th": "Tailandese",
|
||||
"tr": "Turco",
|
||||
"uk": "Ucraino",
|
||||
"vi": "Vietnamita",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user