mirror of
https://gitcode.com/GitHub_Trending/ji/jitsi-meet.git
synced 2026-05-25 00:57:47 +00:00
Compare commits
259 Commits
5857
...
saghul-pat
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
624b650138 | ||
|
|
8bf42e79a0 | ||
|
|
930852cd88 | ||
|
|
fcc8e98aad | ||
|
|
c633929c58 | ||
|
|
6085220bfc | ||
|
|
ed6759c6cf | ||
|
|
0259d1c260 | ||
|
|
537d3ae53a | ||
|
|
bf463e37ca | ||
|
|
c246174555 | ||
|
|
0cf1b7e3d9 | ||
|
|
41d8b9fbeb | ||
|
|
cc5f65f58f | ||
|
|
3097ac8cc4 | ||
|
|
d78b591e68 | ||
|
|
7c523f3250 | ||
|
|
23b91c0336 | ||
|
|
ceb8d3348d | ||
|
|
ae6454c59c | ||
|
|
57672ebea8 | ||
|
|
41c068feaf | ||
|
|
856ef757d4 | ||
|
|
9bcc5896ba | ||
|
|
1fbbe7bc46 | ||
|
|
6342e6b51a | ||
|
|
ec78cf2784 | ||
|
|
bdd8400057 | ||
|
|
23f40db889 | ||
|
|
94ba69dd74 | ||
|
|
a451923ec9 | ||
|
|
c05a983c98 | ||
|
|
6687c3f4ab | ||
|
|
42703fed47 | ||
|
|
a99532b0d8 | ||
|
|
33db511d93 | ||
|
|
eb716af29b | ||
|
|
92121803a1 | ||
|
|
d7c8164b74 | ||
|
|
ed9b85f287 | ||
|
|
14597e835b | ||
|
|
9325de8cbc | ||
|
|
b7c2ccd814 | ||
|
|
0713240c3d | ||
|
|
70090fd716 | ||
|
|
14d200a0cf | ||
|
|
5b07b6dc42 | ||
|
|
2c165d4313 | ||
|
|
4b84f71021 | ||
|
|
d415d02f35 | ||
|
|
c2399deb55 | ||
|
|
3443d256f2 | ||
|
|
db16250e6e | ||
|
|
2039b61a3f | ||
|
|
c94726be81 | ||
|
|
03286eb07e | ||
|
|
84ac6298eb | ||
|
|
1e58a7cbec | ||
|
|
6e0f53293e | ||
|
|
6a1067733a | ||
|
|
cb2b2436eb | ||
|
|
e062c394e8 | ||
|
|
d2c4e81e25 | ||
|
|
ec0e824a43 | ||
|
|
343a1b87e2 | ||
|
|
1618093f30 | ||
|
|
0b8bd9da94 | ||
|
|
549423da69 | ||
|
|
c2c4325ff7 | ||
|
|
515bb31b95 | ||
|
|
781bb5bd18 | ||
|
|
dc8925cbf4 | ||
|
|
c69eccb690 | ||
|
|
00092d5139 | ||
|
|
1355876f83 | ||
|
|
1a3432d580 | ||
|
|
270070716b | ||
|
|
1b1d976791 | ||
|
|
5f858a1c2c | ||
|
|
be1828d9e9 | ||
|
|
3a36945c3c | ||
|
|
00d68f08ab | ||
|
|
23c7ac4da4 | ||
|
|
f503bd7352 | ||
|
|
ab91f79448 | ||
|
|
26b3eb34f0 | ||
|
|
ef125968ce | ||
|
|
45e8140209 | ||
|
|
d2f70b0006 | ||
|
|
70efa31c16 | ||
|
|
3eafaeeedd | ||
|
|
9278414821 | ||
|
|
17faefd757 | ||
|
|
c4db12cbd6 | ||
|
|
4db7312d53 | ||
|
|
66153087e1 | ||
|
|
b7c68d09e7 | ||
|
|
7e5ffdb390 | ||
|
|
9ea2b5836a | ||
|
|
7208e781b3 | ||
|
|
dc96324d3b | ||
|
|
0b93569df2 | ||
|
|
c731e2f8cb | ||
|
|
b1e3f2b50d | ||
|
|
7751060b63 | ||
|
|
25f53503e8 | ||
|
|
8d737adc65 | ||
|
|
3fcfb64338 | ||
|
|
f8628dfeef | ||
|
|
39793110b6 | ||
|
|
e5e7aa87d3 | ||
|
|
18fa56ff1b | ||
|
|
ccf7939316 | ||
|
|
a518498bff | ||
|
|
9a78011daf | ||
|
|
35d0fefa1e | ||
|
|
b6792d9287 | ||
|
|
cfb480932a | ||
|
|
21083e6777 | ||
|
|
a3c60d5943 | ||
|
|
28556e030c | ||
|
|
e54685a566 | ||
|
|
9ffb3eddb0 | ||
|
|
d064f607ec | ||
|
|
be454137f9 | ||
|
|
530369613a | ||
|
|
6b0b575bd4 | ||
|
|
aa5dd92846 | ||
|
|
85c505a29d | ||
|
|
b8e12e581f | ||
|
|
8456a63a23 | ||
|
|
89394e69b6 | ||
|
|
3ae50c1701 | ||
|
|
5da40a5fb0 | ||
|
|
f04a01ee3a | ||
|
|
9ad57127d4 | ||
|
|
a131644dfb | ||
|
|
649c1b0669 | ||
|
|
7bcf7bb686 | ||
|
|
8e035b03b0 | ||
|
|
3b05fd70a3 | ||
|
|
64d32a5005 | ||
|
|
fbe15aaa47 | ||
|
|
16bcb1b217 | ||
|
|
d4c314deb3 | ||
|
|
e8e9e24f77 | ||
|
|
9f72c318d6 | ||
|
|
5f1a4f189c | ||
|
|
cb9511ef2c | ||
|
|
e7c4a55add | ||
|
|
3884862996 | ||
|
|
8f1c693c3e | ||
|
|
4d2000a7a4 | ||
|
|
f6a79860f2 | ||
|
|
4ed2d55cae | ||
|
|
2dad8163bb | ||
|
|
985b37195c | ||
|
|
052b588b33 | ||
|
|
320aeaa4df | ||
|
|
8c9c1a29be | ||
|
|
c25fb702c2 | ||
|
|
a6b55b676c | ||
|
|
0ce6fce58d | ||
|
|
c5fbe14de2 | ||
|
|
506f72d43e | ||
|
|
3d5f838870 | ||
|
|
e18173adc9 | ||
|
|
096ba054db | ||
|
|
d651ecb166 | ||
|
|
faac45b5bc | ||
|
|
14ee7e247b | ||
|
|
8604b1f64d | ||
|
|
190041fc5a | ||
|
|
b6d55571ba | ||
|
|
ec96acac71 | ||
|
|
26f21e5eb9 | ||
|
|
6820f48fd2 | ||
|
|
14cad060cb | ||
|
|
f0f135ac7d | ||
|
|
c60a51e671 | ||
|
|
4b95a5d6cb | ||
|
|
8b149f9138 | ||
|
|
4fa377c12a | ||
|
|
371f3ee199 | ||
|
|
98256a8d5b | ||
|
|
9d8ae922a9 | ||
|
|
981e96fb6a | ||
|
|
74384bfa66 | ||
|
|
d718d9d8fb | ||
|
|
2863b05f37 | ||
|
|
fca9a249dc | ||
|
|
7522de033a | ||
|
|
7a4a234f8e | ||
|
|
bc5e9e2258 | ||
|
|
a65ab1c029 | ||
|
|
5d41da9358 | ||
|
|
0936a64d3f | ||
|
|
c6eccb1a5a | ||
|
|
0c042ca720 | ||
|
|
feb1b93ce6 | ||
|
|
75d80ad879 | ||
|
|
8bb5c114f8 | ||
|
|
936d9b41f1 | ||
|
|
5d68a53f79 | ||
|
|
7f8c43d477 | ||
|
|
c30038236a | ||
|
|
577d62ea53 | ||
|
|
c35473d5e4 | ||
|
|
c69fdd766c | ||
|
|
389d455daa | ||
|
|
1ab086247b | ||
|
|
f62dc44f3e | ||
|
|
06800f88bf | ||
|
|
c9ea193d04 | ||
|
|
c8895b2d04 | ||
|
|
a1337dff38 | ||
|
|
ebe16af809 | ||
|
|
d018d19874 | ||
|
|
be152b12d7 | ||
|
|
c2a3d29353 | ||
|
|
1d275e1976 | ||
|
|
fea59e472a | ||
|
|
c16c6688b8 | ||
|
|
2dda749b1f | ||
|
|
fde33b72d0 | ||
|
|
011fe40853 | ||
|
|
34d8843a35 | ||
|
|
05dc018671 | ||
|
|
fa65a54f50 | ||
|
|
20fd671b68 | ||
|
|
fd9d19a951 | ||
|
|
f9384fdc87 | ||
|
|
0945d373b6 | ||
|
|
9651229a17 | ||
|
|
0826ec16c2 | ||
|
|
e0881502d3 | ||
|
|
c84e6eecdd | ||
|
|
e61ccc956f | ||
|
|
6aa0e3902a | ||
|
|
eaba4798db | ||
|
|
08f388e17a | ||
|
|
2c68817f4c | ||
|
|
e8e62a0213 | ||
|
|
85581266e4 | ||
|
|
a2155aad7f | ||
|
|
59e51f107e | ||
|
|
40353cf762 | ||
|
|
a1d0111c1b | ||
|
|
b1be511d67 | ||
|
|
c4ddaa8b87 | ||
|
|
2d61b564a1 | ||
|
|
9062c91d77 | ||
|
|
387af2db20 | ||
|
|
75fd61eed6 | ||
|
|
d655acdc30 | ||
|
|
4340d5b7fc | ||
|
|
79877e56f0 | ||
|
|
59065d10f8 | ||
|
|
ac8ae50cf0 |
@@ -8,7 +8,7 @@ libs/*
|
||||
resources/*
|
||||
react/features/stream-effects/virtual-background/vendor/*
|
||||
load-test/*
|
||||
react/features/facial-recognition/resources/*
|
||||
react/features/face-landmarks/resources/*
|
||||
|
||||
# ESLint will by default ignore its own configuration file. However, there does
|
||||
# not seem to be a reason why we will want to risk being inconsistent with our
|
||||
@@ -16,4 +16,4 @@ react/features/facial-recognition/resources/*
|
||||
!.eslintrc.js
|
||||
|
||||
# Not worth it.
|
||||
actionTypes.js
|
||||
actionTypes.ts
|
||||
|
||||
4
.github/workflows/ci.yml
vendored
4
.github/workflows/ci.yml
vendored
@@ -16,10 +16,8 @@ jobs:
|
||||
run: git status
|
||||
- name: Normalize lang files to ensure sorted
|
||||
run: npm run lang-sort
|
||||
- name: Check git diff
|
||||
run: git diff
|
||||
- name: Check if the git repository is clean
|
||||
run: exit $( git status --porcelain --untracked-files=no | head -255 | wc -l )
|
||||
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
|
||||
- run: make
|
||||
|
||||
@@ -3,8 +3,8 @@ We would love to have your help. Before you start working however, please read
|
||||
and follow this short guide.
|
||||
|
||||
# Reporting Issues
|
||||
Provide as much information as possible. Mention the version of Jitsi Meet,
|
||||
Jicofo and JVB you are using, and explain (as detailed as you can) how the
|
||||
Provide as much information as possible. Mention the version of Jitsi Meet,
|
||||
Jicofo and JVB you are using, and explain (as detailed as you can) how the
|
||||
problem can be reproduced.
|
||||
|
||||
# Code contributions
|
||||
@@ -130,7 +130,7 @@ When adding a new feature, this would be the usual layout.
|
||||
|
||||
```
|
||||
react/features/sample/
|
||||
├── actionTypes.js
|
||||
├── actionTypes.ts
|
||||
├── actions.js
|
||||
├── components
|
||||
│ ├── AnotherComponent.js
|
||||
|
||||
23
Makefile
23
Makefile
@@ -4,10 +4,11 @@ DEPLOY_DIR = libs
|
||||
LIBJITSIMEET_DIR = node_modules/lib-jitsi-meet
|
||||
LIBFLAC_DIR = node_modules/libflacjs/dist/min
|
||||
OLM_DIR = node_modules/@matrix-org/olm
|
||||
TF_WASM_DIR = node_modules/@tensorflow/tfjs-backend-wasm/dist/
|
||||
RNNOISE_WASM_DIR = node_modules/rnnoise-wasm/dist
|
||||
TFLITE_WASM = react/features/stream-effects/virtual-background/vendor/tflite
|
||||
MEET_MODELS_DIR = react/features/stream-effects/virtual-background/vendor/models
|
||||
FACIAL_MODELS_DIR = react/features/facial-recognition/resources
|
||||
FACE_MODELS_DIR = node_modules/@vladmandic/face-api/model
|
||||
NODE_SASS = ./node_modules/.bin/sass
|
||||
NPM = npm
|
||||
OUTPUT_DIR = .
|
||||
@@ -29,7 +30,7 @@ clean:
|
||||
rm -fr $(BUILD_DIR)
|
||||
|
||||
.NOTPARALLEL:
|
||||
deploy: deploy-init deploy-appbundle deploy-rnnoise-binary deploy-tflite deploy-meet-models deploy-lib-jitsi-meet deploy-libflac deploy-olm deploy-css deploy-local deploy-facial-expressions
|
||||
deploy: deploy-init deploy-appbundle deploy-rnnoise-binary deploy-tflite deploy-meet-models deploy-lib-jitsi-meet deploy-libflac deploy-olm deploy-tf-wasm deploy-css deploy-local deploy-face-landmarks
|
||||
|
||||
deploy-init:
|
||||
rm -fr $(DEPLOY_DIR)
|
||||
@@ -52,8 +53,8 @@ deploy-appbundle:
|
||||
$(OUTPUT_DIR)/analytics-ga.js \
|
||||
$(BUILD_DIR)/analytics-ga.min.js \
|
||||
$(BUILD_DIR)/analytics-ga.min.js.map \
|
||||
$(BUILD_DIR)/facial-expressions-worker.min.js \
|
||||
$(BUILD_DIR)/facial-expressions-worker.min.js.map \
|
||||
$(BUILD_DIR)/face-landmarks-worker.min.js \
|
||||
$(BUILD_DIR)/face-landmarks-worker.min.js.map \
|
||||
$(DEPLOY_DIR)
|
||||
cp \
|
||||
$(BUILD_DIR)/close3.min.js \
|
||||
@@ -80,6 +81,11 @@ deploy-olm:
|
||||
$(OLM_DIR)/olm.wasm \
|
||||
$(DEPLOY_DIR)
|
||||
|
||||
deploy-tf-wasm:
|
||||
cp \
|
||||
$(TF_WASM_DIR)/*.wasm \
|
||||
$(DEPLOY_DIR)
|
||||
|
||||
deploy-rnnoise-binary:
|
||||
cp \
|
||||
$(RNNOISE_WASM_DIR)/rnnoise.wasm \
|
||||
@@ -95,9 +101,12 @@ deploy-meet-models:
|
||||
$(MEET_MODELS_DIR)/*.tflite \
|
||||
$(DEPLOY_DIR)
|
||||
|
||||
deploy-facial-expressions:
|
||||
deploy-face-landmarks:
|
||||
cp \
|
||||
$(FACIAL_MODELS_DIR)/* \
|
||||
$(FACE_MODELS_DIR)/tiny_face_detector_model-weights_manifest.json \
|
||||
$(FACE_MODELS_DIR)/tiny_face_detector_model.bin \
|
||||
$(FACE_MODELS_DIR)/face_expression_model-weights_manifest.json \
|
||||
$(FACE_MODELS_DIR)/face_expression_model.bin \
|
||||
$(DEPLOY_DIR)
|
||||
|
||||
deploy-css:
|
||||
@@ -109,7 +118,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-libflac deploy-olm deploy-facial-expressions
|
||||
dev: deploy-init deploy-css deploy-rnnoise-binary deploy-tflite deploy-meet-models deploy-lib-jitsi-meet deploy-libflac deploy-olm deploy-tf-wasm deploy-face-landmarks
|
||||
$(WEBPACK_DEV_SERVER)
|
||||
|
||||
source-package:
|
||||
|
||||
@@ -45,7 +45,7 @@ developed you can also sign up for our open beta testing here:
|
||||
|
||||
## Running your own instance
|
||||
|
||||
If you'd like to run your own Jitsi Meet installation head over to the [handbook](https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-start) to get started.
|
||||
If you'd like to run your own Jitsi Meet installation head over to the [handbook](https://jitsi.github.io/handbook/docs/devops-guide/) to get started.
|
||||
|
||||
We provide Debian packages and a comprehensive Docker setup to make deployments as simple as possible.
|
||||
Advanced users also have the possibility of building all the components from source.
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
android:extractNativeLibs="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:name=".MainApplication"
|
||||
android:networkSecurityConfig="@xml/network_security_config"
|
||||
android:theme="@style/AppTheme">
|
||||
<meta-data
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright @ 2022-present 8x8, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jitsi.meet;
|
||||
|
||||
import android.app.Application;
|
||||
import android.util.Log;
|
||||
|
||||
import com.facebook.react.ReactApplication;
|
||||
import com.facebook.react.ReactNativeHost;
|
||||
|
||||
import org.jitsi.meet.sdk.JitsiReactNativeHost;
|
||||
|
||||
/**
|
||||
* Application class for Jitsi Meet. The only reason why this exists is for Detox
|
||||
* to believe our app is a "greenfield" app. SDK users need not use this.
|
||||
*/
|
||||
public class MainApplication extends Application implements ReactApplication {
|
||||
private final ReactNativeHost mReactNativeHost = new JitsiReactNativeHost(this);
|
||||
|
||||
@Override
|
||||
public ReactNativeHost getReactNativeHost() {
|
||||
return mReactNativeHost;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
|
||||
// Initialize RN
|
||||
Log.d(this.getClass().getCanonicalName(), "app onCreate");
|
||||
getReactNativeHost().getReactInstanceManager();
|
||||
}
|
||||
}
|
||||
36
android/app/src/main/res/drawable/rn_edit_text_material.xml
Normal file
36
android/app/src/main/res/drawable/rn_edit_text_material.xml
Normal file
@@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2014 The Android Open Source Project
|
||||
|
||||
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.
|
||||
-->
|
||||
<inset xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:insetLeft="@dimen/abc_edit_text_inset_horizontal_material"
|
||||
android:insetRight="@dimen/abc_edit_text_inset_horizontal_material"
|
||||
android:insetTop="@dimen/abc_edit_text_inset_top_material"
|
||||
android:insetBottom="@dimen/abc_edit_text_inset_bottom_material">
|
||||
|
||||
<selector>
|
||||
<!--
|
||||
This file is a copy of abc_edit_text_material (https://bit.ly/3k8fX7I).
|
||||
The item below with state_pressed="false" and state_focused="false" causes a NullPointerException.
|
||||
NullPointerException:tempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)'
|
||||
|
||||
<item android:state_pressed="false" android:state_focused="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
|
||||
|
||||
For more info, see https://bit.ly/3CdLStv (react-native/pull/29452) and https://bit.ly/3nxOMoR.
|
||||
-->
|
||||
<item android:state_enabled="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
|
||||
<item android:drawable="@drawable/abc_textfield_activated_mtrl_alpha"/>
|
||||
</selector>
|
||||
|
||||
</inset>
|
||||
@@ -2,6 +2,7 @@
|
||||
<!-- Base application theme. -->
|
||||
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
|
||||
<!-- Customize your theme here. -->
|
||||
<item name="android:editTextBackground">@drawable/rn_edit_text_material</item>
|
||||
<item name="android:navigationBarColor">@color/colorPrimaryDark</item>
|
||||
<item name="android:windowDisablePreview">true</item>
|
||||
</style>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
# Specifies the JVM arguments used for the daemon process.
|
||||
# The setting is particularly useful for tweaking memory settings.
|
||||
# Default value: -Xmx10248m -XX:MaxPermSize=256m
|
||||
# Default value: -Xmx1024m -XX:MaxPermSize=256m
|
||||
|
||||
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
|
||||
|
||||
@@ -26,5 +26,5 @@ android.useAndroidX=true
|
||||
android.enableJetifier=true
|
||||
android.bundle.enableUncompressedNativeLibs=false
|
||||
|
||||
appVersion=22.0.0
|
||||
sdkVersion=5.0.0
|
||||
appVersion=22.2.0
|
||||
sdkVersion=5.1.0
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
||||
@@ -50,7 +50,8 @@ dependencies {
|
||||
api 'com.facebook.react:react-native:+'
|
||||
//noinspection GradleDynamicVersion
|
||||
implementation 'org.webkit:android-jsc:+'
|
||||
|
||||
|
||||
implementation 'com.facebook.fresco:animated-gif:2.5.0'
|
||||
implementation 'com.dropbox.core:dropbox-core-sdk:4.0.1'
|
||||
implementation 'com.jakewharton.timber:timber:4.7.1'
|
||||
implementation 'com.squareup.duktape:duktape-android:1.3.0'
|
||||
@@ -80,6 +81,7 @@ dependencies {
|
||||
implementation project(':react-native-default-preference')
|
||||
implementation project(':react-native-gesture-handler')
|
||||
implementation project(':react-native-get-random-values')
|
||||
implementation project(':react-native-giphy')
|
||||
implementation project(':react-native-immersive')
|
||||
implementation project(':react-native-keep-awake')
|
||||
implementation project(':react-native-masked-view_masked-view')
|
||||
|
||||
@@ -20,6 +20,7 @@ package org.jitsi.meet.sdk;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.FrameLayout;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -93,7 +94,7 @@ public abstract class BaseReactView<ListenerT>
|
||||
* inspired by postis which we use on Web for the similar purposes of the
|
||||
* iframe-based external API.
|
||||
*/
|
||||
protected final String externalAPIScope;
|
||||
protected String externalAPIScope;
|
||||
|
||||
/**
|
||||
* The listener (e.g. {@link JitsiMeetViewListener}) instance for reporting
|
||||
@@ -109,16 +110,17 @@ public abstract class BaseReactView<ListenerT>
|
||||
|
||||
public BaseReactView(@NonNull Context context) {
|
||||
super(context);
|
||||
initialize((Activity)context);
|
||||
}
|
||||
|
||||
setBackgroundColor(BACKGROUND_COLOR);
|
||||
public BaseReactView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
initialize((Activity)context);
|
||||
}
|
||||
|
||||
ReactInstanceManagerHolder.initReactInstanceManager((Activity)context);
|
||||
|
||||
// Hook this BaseReactView into ExternalAPI.
|
||||
externalAPIScope = UUID.randomUUID().toString();
|
||||
synchronized (views) {
|
||||
views.add(this);
|
||||
}
|
||||
public BaseReactView(Context context, AttributeSet attrs, int defStyle) {
|
||||
super(context, attrs, defStyle);
|
||||
initialize((Activity)context);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -223,4 +225,16 @@ public abstract class BaseReactView<ListenerT>
|
||||
public void setListener(ListenerT listener) {
|
||||
this.listener = listener;
|
||||
}
|
||||
|
||||
private void initialize(Activity activity) {
|
||||
setBackgroundColor(BACKGROUND_COLOR);
|
||||
|
||||
ReactInstanceManagerHolder.initReactInstanceManager(activity);
|
||||
|
||||
// Hook this BaseReactView into ExternalAPI.
|
||||
externalAPIScope = UUID.randomUUID().toString();
|
||||
synchronized (views) {
|
||||
views.add(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,13 +16,14 @@
|
||||
package org.jitsi.meet.sdk;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.startup.Initializer;
|
||||
|
||||
import com.facebook.soloader.SoLoader;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class JitsiInitializer implements Initializer<Boolean> {
|
||||
@@ -30,13 +31,18 @@ public class JitsiInitializer implements Initializer<Boolean> {
|
||||
@NonNull
|
||||
@Override
|
||||
public Boolean create(@NonNull Context context) {
|
||||
Log.d(this.getClass().getCanonicalName(), "create");
|
||||
|
||||
SoLoader.init(context, /* native exopackage */ false);
|
||||
|
||||
// Register our uncaught exception handler.
|
||||
JitsiMeetUncaughtExceptionHandler.register();
|
||||
return true;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public List<Class<? extends Initializer<?>>> dependencies() {
|
||||
return new ArrayList<>();
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.jitsi.meet.sdk;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
@@ -32,11 +33,16 @@ import com.facebook.react.modules.core.PermissionListener;
|
||||
import org.jitsi.meet.sdk.log.JitsiMeetLogger;
|
||||
|
||||
import java.util.HashMap;
|
||||
import android.app.Activity;
|
||||
|
||||
/**
|
||||
* A base activity for SDK users to embed. It uses {@link JitsiMeetFragment} to do the heavy
|
||||
* lifting and wires the remaining Activity lifecycle methods so it works out of the box.
|
||||
* A base activity for SDK users to embed. It contains all the required wiring
|
||||
* between the {@code JitsiMeetView} and the Activity lifecycle methods.
|
||||
*
|
||||
* In this activity we use a single {@code JitsiMeetView} instance. This
|
||||
* instance gives us access to a view which displays the welcome page and the
|
||||
* conference itself. All lifecycle methods associated with this Activity are
|
||||
* hooked to the React Native subsystem via proxy calls through the
|
||||
* {@code JitsiMeetActivityDelegate} static methods.
|
||||
*/
|
||||
public class JitsiMeetActivity extends AppCompatActivity
|
||||
implements JitsiMeetActivityInterface {
|
||||
@@ -52,6 +58,12 @@ public class JitsiMeetActivity extends AppCompatActivity
|
||||
onBroadcastReceived(intent);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Instance of the {@link JitsiMeetView} which this activity will display.
|
||||
*/
|
||||
private JitsiMeetView jitsiView;
|
||||
|
||||
// Helpers for starting the activity
|
||||
//
|
||||
|
||||
@@ -79,6 +91,7 @@ public class JitsiMeetActivity extends AppCompatActivity
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
setContentView(R.layout.activity_jitsi_meet);
|
||||
this.jitsiView = findViewById(R.id.jitsiView);
|
||||
|
||||
registerForBroadcastMessages();
|
||||
|
||||
@@ -87,6 +100,18 @@ public class JitsiMeetActivity extends AppCompatActivity
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
JitsiMeetActivityDelegate.onHostResume(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
JitsiMeetActivityDelegate.onHostPause(this);
|
||||
super.onStop();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
// Here we are trying to handle the following corner case: an application using the SDK
|
||||
@@ -97,6 +122,9 @@ public class JitsiMeetActivity extends AppCompatActivity
|
||||
// be operational so the external API won't be able to notify the native side that the
|
||||
// conference terminated. Thus, try our best to clean up.
|
||||
leave();
|
||||
|
||||
this.jitsiView = null;
|
||||
|
||||
if (AudioModeModule.useConnectionService()) {
|
||||
ConnectionService.abortConnections();
|
||||
}
|
||||
@@ -104,6 +132,8 @@ public class JitsiMeetActivity extends AppCompatActivity
|
||||
|
||||
LocalBroadcastManager.getInstance(this).unregisterReceiver(broadcastReceiver);
|
||||
|
||||
JitsiMeetActivityDelegate.onHostDestroy(this);
|
||||
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
@@ -118,9 +148,7 @@ public class JitsiMeetActivity extends AppCompatActivity
|
||||
//
|
||||
|
||||
protected JitsiMeetView getJitsiView() {
|
||||
JitsiMeetFragment fragment
|
||||
= (JitsiMeetFragment) getSupportFragmentManager().findFragmentById(R.id.jitsiFragment);
|
||||
return fragment != null ? fragment.getJitsiView() : null;
|
||||
return jitsiView;
|
||||
}
|
||||
|
||||
public void join(@Nullable String url) {
|
||||
@@ -132,20 +160,16 @@ public class JitsiMeetActivity extends AppCompatActivity
|
||||
}
|
||||
|
||||
public void join(JitsiMeetConferenceOptions options) {
|
||||
JitsiMeetView view = getJitsiView();
|
||||
|
||||
if (view != null) {
|
||||
view.join(options);
|
||||
if (this.jitsiView != null) {
|
||||
this.jitsiView .join(options);
|
||||
} else {
|
||||
JitsiMeetLogger.w("Cannot join, view is null");
|
||||
}
|
||||
}
|
||||
|
||||
public void leave() {
|
||||
JitsiMeetView view = getJitsiView();
|
||||
|
||||
if (view != null) {
|
||||
view.leave();
|
||||
if (this.jitsiView != null) {
|
||||
this.jitsiView .leave();
|
||||
} else {
|
||||
JitsiMeetLogger.w("Cannot leave, view is null");
|
||||
}
|
||||
@@ -252,10 +276,8 @@ public class JitsiMeetActivity extends AppCompatActivity
|
||||
|
||||
@Override
|
||||
protected void onUserLeaveHint() {
|
||||
JitsiMeetView view = getJitsiView();
|
||||
|
||||
if (view != null) {
|
||||
view.enterPictureInPicture();
|
||||
if (this.jitsiView != null) {
|
||||
this.jitsiView .enterPictureInPicture();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
|
||||
package org.jitsi.meet.sdk;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -37,7 +36,10 @@ import android.view.ViewGroup;
|
||||
* conference itself. All lifecycle methods associated with this Fragment are
|
||||
* hooked to the React Native subsystem via proxy calls through the
|
||||
* {@code JitsiMeetActivityDelegate} static methods.
|
||||
*
|
||||
* @deprecated use {@link JitsiMeetActivity} or directly {@link JitsiMeetView}
|
||||
*/
|
||||
@Deprecated
|
||||
public class JitsiMeetFragment extends Fragment {
|
||||
|
||||
/**
|
||||
|
||||
@@ -51,11 +51,20 @@ public class JitsiMeetOngoingConferenceService extends Service
|
||||
intent.setAction(Action.START.getName());
|
||||
|
||||
ComponentName componentName;
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
componentName = context.startForegroundService(intent);
|
||||
} else {
|
||||
componentName = context.startService(intent);
|
||||
|
||||
try {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
componentName = context.startForegroundService(intent);
|
||||
} else {
|
||||
componentName = context.startService(intent);
|
||||
}
|
||||
} catch (RuntimeException e) {
|
||||
// Avoid crashing due to ForegroundServiceStartNotAllowedException (API level 31).
|
||||
// See: https://developer.android.com/guide/components/foreground-services#background-start-restrictions
|
||||
JitsiMeetLogger.w(TAG + " Ongoing conference service not started", e);
|
||||
return;
|
||||
}
|
||||
|
||||
if (componentName == null) {
|
||||
JitsiMeetLogger.w(TAG + " Ongoing conference service not started");
|
||||
}
|
||||
|
||||
@@ -18,6 +18,8 @@ package org.jitsi.meet.sdk;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.util.AttributeSet;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
@@ -28,7 +30,6 @@ import org.jitsi.meet.sdk.log.JitsiMeetLogger;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
public class JitsiMeetView extends BaseReactView<JitsiMeetViewListener>
|
||||
implements OngoingConferenceTracker.OngoingConferenceListener {
|
||||
|
||||
@@ -95,14 +96,17 @@ public class JitsiMeetView extends BaseReactView<JitsiMeetViewListener>
|
||||
|
||||
public JitsiMeetView(@NonNull Context context) {
|
||||
super(context);
|
||||
initialize(context);
|
||||
}
|
||||
|
||||
// Check if the parent Activity implements JitsiMeetActivityInterface,
|
||||
// otherwise things may go wrong.
|
||||
if (!(context instanceof JitsiMeetActivityInterface)) {
|
||||
throw new RuntimeException("Enclosing Activity must implement JitsiMeetActivityInterface");
|
||||
}
|
||||
public JitsiMeetView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
initialize(context);
|
||||
}
|
||||
|
||||
OngoingConferenceTracker.getInstance().addListener(this);
|
||||
public JitsiMeetView(Context context, AttributeSet attrs, int defStyle) {
|
||||
super(context, attrs, defStyle);
|
||||
initialize(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -207,4 +211,14 @@ public class JitsiMeetView extends BaseReactView<JitsiMeetViewListener>
|
||||
dispose();
|
||||
super.onDetachedFromWindow();
|
||||
}
|
||||
|
||||
private void initialize(@NonNull Context context) {
|
||||
// Check if the parent Activity implements JitsiMeetActivityInterface,
|
||||
// otherwise things may go wrong.
|
||||
if (!(context instanceof JitsiMeetActivityInterface)) {
|
||||
throw new RuntimeException("Enclosing Activity must implement JitsiMeetActivityInterface");
|
||||
}
|
||||
|
||||
OngoingConferenceTracker.getInstance().addListener(this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
package org.jitsi.meet.sdk;
|
||||
|
||||
import android.app.Application;
|
||||
|
||||
import com.facebook.react.ReactInstanceManager;
|
||||
import com.facebook.react.ReactNativeHost;
|
||||
import com.facebook.react.ReactPackage;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* This is the minimal implementation of ReactNativeHost that will make things like the
|
||||
* Detox testing framework believe we are a "greenfield" app.
|
||||
*
|
||||
* Generally speaking, apps using the SDK (other than the Jitsi Meet app itself) should not
|
||||
* need to use this because the
|
||||
*/
|
||||
public class JitsiReactNativeHost extends ReactNativeHost {
|
||||
public JitsiReactNativeHost(Application application) {
|
||||
super(application);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getUseDeveloperSupport() {
|
||||
// Unused since we override `createReactInstanceManager`.
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<ReactPackage> getPackages() {
|
||||
// Unused since we override `createReactInstanceManager`.
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ReactInstanceManager createReactInstanceManager() {
|
||||
ReactInstanceManagerHolder.initReactInstanceManager(this.getApplication());
|
||||
|
||||
return ReactInstanceManagerHolder.getReactInstanceManager();
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,8 @@
|
||||
package org.jitsi.meet.sdk;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Application;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
@@ -99,6 +101,70 @@ class ReactInstanceManagerHolder {
|
||||
);
|
||||
}
|
||||
|
||||
static List<ReactPackage> getReactNativePackages() {
|
||||
List<ReactPackage> packages
|
||||
= new ArrayList<>(Arrays.asList(
|
||||
new com.reactnativecommunity.asyncstorage.AsyncStoragePackage(),
|
||||
new com.ocetnik.timer.BackgroundTimerPackage(),
|
||||
new com.calendarevents.RNCalendarEventsPackage(),
|
||||
new com.corbt.keepawake.KCKeepAwakePackage(),
|
||||
new com.facebook.react.shell.MainReactPackage(),
|
||||
new com.reactnativecommunity.clipboard.ClipboardPackage(),
|
||||
new com.giphyreactnativesdk.GiphyReactNativeSdkPackage(),
|
||||
new com.reactnativecommunity.netinfo.NetInfoPackage(),
|
||||
new com.reactnativepagerview.PagerViewPackage(),
|
||||
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(),
|
||||
new com.learnium.RNDeviceInfo.RNDeviceInfo(),
|
||||
new com.swmansion.gesturehandler.react.RNGestureHandlerPackage(),
|
||||
new org.linusu.RNGetRandomValuesPackage(),
|
||||
new com.rnimmersive.RNImmersivePackage(),
|
||||
new com.swmansion.rnscreens.RNScreensPackage(),
|
||||
new com.zmxv.RNSound.RNSoundPackage(),
|
||||
new com.th3rdwave.safeareacontext.SafeAreaContextPackage(),
|
||||
new com.horcrux.svg.SvgPackage(),
|
||||
new ReactPackageAdapter() {
|
||||
@Override
|
||||
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
|
||||
return ReactInstanceManagerHolder.createNativeModules(reactContext);
|
||||
}
|
||||
@Override
|
||||
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
|
||||
return ReactInstanceManagerHolder.createViewManagers(reactContext);
|
||||
}
|
||||
}));
|
||||
|
||||
// AmplitudeReactNativePackage
|
||||
try {
|
||||
Class<?> amplitudePackageClass = Class.forName("com.amplitude.reactnative.AmplitudeReactNativePackage");
|
||||
Constructor constructor = amplitudePackageClass.getConstructor();
|
||||
packages.add((ReactPackage)constructor.newInstance());
|
||||
} catch (Exception e) {
|
||||
// Ignore any error, the module is not compiled when LIBRE_BUILD is enabled.
|
||||
}
|
||||
|
||||
// RNGoogleSignInPackage
|
||||
try {
|
||||
Class<?> googlePackageClass = Class.forName("com.reactnativegooglesignin.RNGoogleSigninPackage");
|
||||
Constructor constructor = googlePackageClass.getConstructor();
|
||||
packages.add((ReactPackage)constructor.newInstance());
|
||||
} catch (Exception e) {
|
||||
// Ignore any error, the module is not compiled when LIBRE_BUILD is enabled.
|
||||
}
|
||||
|
||||
return packages;
|
||||
}
|
||||
|
||||
static JSCExecutorFactory getReactNativeJSFactory() {
|
||||
// Keep on using JSC, the jury is out on Hermes.
|
||||
return new JSCExecutorFactory("", "");
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to send an event to JavaScript.
|
||||
*
|
||||
@@ -159,6 +225,35 @@ class ReactInstanceManagerHolder {
|
||||
return reactInstanceManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* Internal method to initialize the React Native instance manager. We
|
||||
* create a single instance in order to load the JavaScript bundle a single
|
||||
* time. All {@code ReactRootView} instances will be tied to the one and
|
||||
* only {@code ReactInstanceManager}.
|
||||
*
|
||||
* This method is only meant to be called when integrating with {@code JitsiReactNativeHost}.
|
||||
*
|
||||
* @param app {@code Application} current running Application.
|
||||
*/
|
||||
static void initReactInstanceManager(Application app) {
|
||||
if (reactInstanceManager != null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Log.d(ReactInstanceManagerHolder.class.getCanonicalName(), "initializing RN with Application");
|
||||
|
||||
reactInstanceManager
|
||||
= ReactInstanceManager.builder()
|
||||
.setApplication(app)
|
||||
.setBundleAssetName("index.android.bundle")
|
||||
.setJSMainModulePath("index.android")
|
||||
.setJavaScriptExecutorFactory(getReactNativeJSFactory())
|
||||
.addPackages(getReactNativePackages())
|
||||
.setUseDeveloperSupport(BuildConfig.DEBUG)
|
||||
.setInitialLifecycleState(LifecycleState.BEFORE_CREATE)
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Internal method to initialize the React Native instance manager. We
|
||||
* create a single instance in order to load the JavaScript bundle a single
|
||||
@@ -172,63 +267,7 @@ class ReactInstanceManagerHolder {
|
||||
return;
|
||||
}
|
||||
|
||||
List<ReactPackage> packages
|
||||
= new ArrayList<>(Arrays.asList(
|
||||
new com.reactnativecommunity.asyncstorage.AsyncStoragePackage(),
|
||||
new com.ocetnik.timer.BackgroundTimerPackage(),
|
||||
new com.calendarevents.RNCalendarEventsPackage(),
|
||||
new com.corbt.keepawake.KCKeepAwakePackage(),
|
||||
new com.facebook.react.shell.MainReactPackage(),
|
||||
new com.reactnativecommunity.clipboard.ClipboardPackage(),
|
||||
new com.reactnativecommunity.netinfo.NetInfoPackage(),
|
||||
new com.reactnativepagerview.PagerViewPackage(),
|
||||
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(),
|
||||
new com.learnium.RNDeviceInfo.RNDeviceInfo(),
|
||||
new com.swmansion.gesturehandler.react.RNGestureHandlerPackage(),
|
||||
new org.linusu.RNGetRandomValuesPackage(),
|
||||
new com.rnimmersive.RNImmersivePackage(),
|
||||
new com.swmansion.rnscreens.RNScreensPackage(),
|
||||
new com.zmxv.RNSound.RNSoundPackage(),
|
||||
new com.th3rdwave.safeareacontext.SafeAreaContextPackage(),
|
||||
new com.horcrux.svg.SvgPackage(),
|
||||
new ReactPackageAdapter() {
|
||||
@Override
|
||||
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
|
||||
return ReactInstanceManagerHolder.createNativeModules(reactContext);
|
||||
}
|
||||
@Override
|
||||
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
|
||||
return ReactInstanceManagerHolder.createViewManagers(reactContext);
|
||||
}
|
||||
}));
|
||||
|
||||
// AmplitudeReactNativePackage
|
||||
try {
|
||||
Class<?> amplitudePackageClass = Class.forName("com.amplitude.reactnative.AmplitudeReactNativePackage");
|
||||
Constructor constructor = amplitudePackageClass.getConstructor();
|
||||
packages.add((ReactPackage)constructor.newInstance());
|
||||
} catch (Exception e) {
|
||||
// Ignore any error, the module is not compiled when LIBRE_BUILD is enabled.
|
||||
}
|
||||
|
||||
// RNGoogleSigninPackage
|
||||
try {
|
||||
Class<?> googlePackageClass = Class.forName("com.reactnativegooglesignin.RNGoogleSigninPackage");
|
||||
Constructor constructor = googlePackageClass.getConstructor();
|
||||
packages.add((ReactPackage)constructor.newInstance());
|
||||
} catch (Exception e) {
|
||||
// Ignore any error, the module is not compiled when LIBRE_BUILD is enabled.
|
||||
}
|
||||
|
||||
// Keep on using JSC, the jury is out on Hermes.
|
||||
JSCExecutorFactory jsFactory
|
||||
= new JSCExecutorFactory("", "");
|
||||
Log.d(ReactInstanceManagerHolder.class.getCanonicalName(), "initializing RN with Activity");
|
||||
|
||||
reactInstanceManager
|
||||
= ReactInstanceManager.builder()
|
||||
@@ -236,13 +275,10 @@ class ReactInstanceManagerHolder {
|
||||
.setCurrentActivity(activity)
|
||||
.setBundleAssetName("index.android.bundle")
|
||||
.setJSMainModulePath("index.android")
|
||||
.setJavaScriptExecutorFactory(jsFactory)
|
||||
.addPackages(packages)
|
||||
.setJavaScriptExecutorFactory(getReactNativeJSFactory())
|
||||
.addPackages(getReactNativePackages())
|
||||
.setUseDeveloperSupport(BuildConfig.DEBUG)
|
||||
.setInitialLifecycleState(LifecycleState.RESUMED)
|
||||
.build();
|
||||
|
||||
// Register our uncaught exception handler.
|
||||
JitsiMeetUncaughtExceptionHandler.register();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,72 +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.
|
||||
*/
|
||||
|
||||
package org.jitsi.meet.sdk.incoming_call;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
public class IncomingCallInfo {
|
||||
/**
|
||||
* URL for the caller avatar.
|
||||
*/
|
||||
private final String callerAvatarURL;
|
||||
|
||||
/**
|
||||
* Caller's name.
|
||||
*/
|
||||
private final String callerName;
|
||||
|
||||
/**
|
||||
* Whether this is a regular call or a video call.
|
||||
*/
|
||||
private final boolean hasVideo;
|
||||
|
||||
public IncomingCallInfo(
|
||||
@NonNull String callerName,
|
||||
@NonNull String callerAvatarURL,
|
||||
boolean hasVideo) {
|
||||
this.callerName = callerName;
|
||||
this.callerAvatarURL = callerAvatarURL;
|
||||
this.hasVideo = hasVideo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the caller's avatar URL.
|
||||
*
|
||||
* @return - The URL as a string.
|
||||
*/
|
||||
public String getCallerAvatarURL() {
|
||||
return callerAvatarURL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the caller's name.
|
||||
*
|
||||
* @return - The caller's name.
|
||||
*/
|
||||
public String getCallerName() {
|
||||
return callerName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets whether the call is a video call or not.
|
||||
*
|
||||
* @return - {@code true} if this call has video; {@code false}, otherwise.
|
||||
*/
|
||||
public boolean hasVideo() {
|
||||
return hasVideo;
|
||||
}
|
||||
}
|
||||
@@ -1,73 +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.
|
||||
*/
|
||||
|
||||
package org.jitsi.meet.sdk.incoming_call;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.facebook.react.bridge.ReadableMap;
|
||||
|
||||
import org.jitsi.meet.sdk.BaseReactView;
|
||||
import org.jitsi.meet.sdk.ListenerUtils;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Map;
|
||||
|
||||
public class IncomingCallView
|
||||
extends BaseReactView<IncomingCallViewListener> {
|
||||
|
||||
/**
|
||||
* The {@code Method}s of {@code JitsiMeetViewListener} by event name i.e.
|
||||
* redux action types.
|
||||
*/
|
||||
private static final Map<String, Method> LISTENER_METHODS
|
||||
= ListenerUtils.mapListenerMethods(IncomingCallViewListener.class);
|
||||
|
||||
public IncomingCallView(@NonNull Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handler for {@link ExternalAPIModule} events.
|
||||
*
|
||||
* @param name The name of the event.
|
||||
* @param data The details/specifics of the event to send determined
|
||||
* by/associated with the specified {@code name}.
|
||||
*/
|
||||
@Override
|
||||
protected void onExternalAPIEvent(String name, ReadableMap data) {
|
||||
onExternalAPIEvent(LISTENER_METHODS, name, data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the information for the incoming call this {@code IncomingCallView}
|
||||
* represents.
|
||||
*
|
||||
* @param callInfo - {@link IncomingCallInfo} object representing the caller
|
||||
* information.
|
||||
*/
|
||||
public void setIncomingCallInfo(IncomingCallInfo callInfo) {
|
||||
Bundle props = new Bundle();
|
||||
|
||||
props.putString("callerAvatarURL", callInfo.getCallerAvatarURL());
|
||||
props.putString("callerName", callInfo.getCallerName());
|
||||
props.putBoolean("hasVideo", callInfo.hasVideo());
|
||||
|
||||
createReactRootView("IncomingCallApp", props);
|
||||
}
|
||||
}
|
||||
@@ -1,41 +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.
|
||||
*/
|
||||
|
||||
package org.jitsi.meet.sdk.incoming_call;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Interface for listening to events coming from Jitsi Meet, related to
|
||||
* {@link IncomingCallView}.
|
||||
*/
|
||||
public interface IncomingCallViewListener {
|
||||
/**
|
||||
* Called when the user presses the "Answer" button on the
|
||||
* {@link IncomingCallView}.
|
||||
*
|
||||
* @param data - Unused at the moment.
|
||||
*/
|
||||
void onIncomingCallAnswered(Map<String, Object> data);
|
||||
|
||||
/**
|
||||
* Called when the user presses the "Decline" button on the
|
||||
* {@link IncomingCallView}.
|
||||
*
|
||||
* @param data - Unused at the moment.
|
||||
*/
|
||||
void onIncomingCallDeclined(Map<String, Object> data);
|
||||
}
|
||||
@@ -1,12 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/jitsi_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".JitsiMeetActivity">
|
||||
<fragment
|
||||
|
||||
<org.jitsi.meet.sdk.JitsiMeetView
|
||||
android:id="@+id/jitsiView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:name="org.jitsi.meet.sdk.JitsiMeetFragment"
|
||||
android:id="@+id/jitsiFragment"/>
|
||||
android:layout_height="match_parent" />
|
||||
</FrameLayout>
|
||||
@@ -21,6 +21,8 @@ include ':react-native-gesture-handler'
|
||||
project(':react-native-gesture-handler').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-gesture-handler/android')
|
||||
include ':react-native-get-random-values'
|
||||
project(':react-native-get-random-values').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-get-random-values/android')
|
||||
include ':react-native-giphy'
|
||||
project(':react-native-giphy').projectDir = new File(rootProject.projectDir, '../node_modules/@giphy/react-native-sdk/android')
|
||||
include ':react-native-google-signin'
|
||||
project(':react-native-google-signin').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-google-signin/google-signin/android')
|
||||
include ':react-native-immersive'
|
||||
|
||||
106
conference.js
106
conference.js
@@ -27,6 +27,7 @@ import {
|
||||
} from './react/features/app/actions';
|
||||
import { showModeratedNotification } from './react/features/av-moderation/actions';
|
||||
import { shouldShowModeratedNotification } from './react/features/av-moderation/functions';
|
||||
import { setAudioOnly } from './react/features/base/audio-only';
|
||||
import {
|
||||
AVATAR_URL_COMMAND,
|
||||
EMAIL_COMMAND,
|
||||
@@ -36,6 +37,7 @@ import {
|
||||
commonUserLeftHandling,
|
||||
conferenceFailed,
|
||||
conferenceJoined,
|
||||
conferenceJoinInProgress,
|
||||
conferenceLeft,
|
||||
conferenceSubjectChanged,
|
||||
conferenceTimestampChanged,
|
||||
@@ -43,6 +45,7 @@ import {
|
||||
conferenceWillJoin,
|
||||
conferenceWillLeave,
|
||||
dataChannelOpened,
|
||||
e2eRttChanged,
|
||||
getConferenceOptions,
|
||||
kickedOut,
|
||||
lockStateChanged,
|
||||
@@ -51,7 +54,7 @@ import {
|
||||
sendLocalParticipant,
|
||||
nonParticipantMessageReceived
|
||||
} from './react/features/base/conference';
|
||||
import { getReplaceParticipant } from './react/features/base/config/functions';
|
||||
import { getReplaceParticipant, getMultipleVideoSupportFeatureFlag } from './react/features/base/config/functions';
|
||||
import {
|
||||
checkAndNotifyForNewDevice,
|
||||
getAvailableDevices,
|
||||
@@ -63,16 +66,17 @@ import {
|
||||
} from './react/features/base/devices';
|
||||
import {
|
||||
browser,
|
||||
isFatalJitsiConnectionError,
|
||||
JitsiConferenceErrors,
|
||||
JitsiConferenceEvents,
|
||||
JitsiConnectionErrors,
|
||||
JitsiConnectionEvents,
|
||||
JitsiE2ePingEvents,
|
||||
JitsiMediaDevicesEvents,
|
||||
JitsiParticipantConnectionStatus,
|
||||
JitsiTrackErrors,
|
||||
JitsiTrackEvents
|
||||
} from './react/features/base/lib-jitsi-meet';
|
||||
import { isFatalJitsiConnectionError } from './react/features/base/lib-jitsi-meet/functions';
|
||||
import {
|
||||
getStartWithAudioMuted,
|
||||
getStartWithVideoMuted,
|
||||
@@ -105,6 +109,7 @@ import {
|
||||
updateSettings
|
||||
} from './react/features/base/settings';
|
||||
import {
|
||||
addLocalTrack,
|
||||
createLocalPresenterTrack,
|
||||
createLocalTracksF,
|
||||
destroyLocalTracks,
|
||||
@@ -126,6 +131,7 @@ import {
|
||||
maybeOpenFeedbackDialog,
|
||||
submitFeedback
|
||||
} from './react/features/feedback';
|
||||
import { maybeSetLobbyChatMessageListener } from './react/features/lobby/actions.any';
|
||||
import {
|
||||
isModerationNotificationDisplayed,
|
||||
showNotification,
|
||||
@@ -137,8 +143,7 @@ import {
|
||||
initPrejoin,
|
||||
isPrejoinPageVisible,
|
||||
makePrecallTest,
|
||||
setJoiningInProgress,
|
||||
setPrejoinPageVisibility
|
||||
setJoiningInProgress
|
||||
} from './react/features/prejoin';
|
||||
import { disableReceiver, stopReceiver } from './react/features/remote-control';
|
||||
import { setScreenAudioShareState, isScreenAudioShared } from './react/features/screen-share/';
|
||||
@@ -148,6 +153,7 @@ import { AudioMixerEffect } from './react/features/stream-effects/audio-mixer/Au
|
||||
import { createPresenterEffect } from './react/features/stream-effects/presenter';
|
||||
import { createRnnoiseProcessor } from './react/features/stream-effects/rnnoise';
|
||||
import { endpointMessageReceived } from './react/features/subtitles';
|
||||
import { muteLocal } from './react/features/video-menu/actions.any';
|
||||
import UIEvents from './service/UI/UIEvents';
|
||||
|
||||
const logger = Logger.getLogger(__filename);
|
||||
@@ -1144,7 +1150,8 @@ export default {
|
||||
* Used by Jibri to detect when it's alone and the meeting should be terminated.
|
||||
*/
|
||||
get membersCount() {
|
||||
return room.getParticipants().filter(p => !p.isHidden()).length + 1;
|
||||
return room.getParticipants()
|
||||
.filter(p => !p.isHidden() || !(config.iAmRecorder && p.isHiddenFromRecorder())).length + 1;
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -1440,11 +1447,13 @@ export default {
|
||||
* @returns {Promise}
|
||||
*/
|
||||
useVideoStream(newTrack) {
|
||||
const state = APP.store.getState();
|
||||
|
||||
logger.debug(`useVideoStream: ${newTrack}`);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
_replaceLocalVideoTrackQueue.enqueue(onFinish => {
|
||||
const oldTrack = getLocalJitsiVideoTrack(APP.store.getState());
|
||||
const oldTrack = getLocalJitsiVideoTrack(state);
|
||||
|
||||
logger.debug(`useVideoStream: Replacing ${oldTrack} with ${newTrack}`);
|
||||
|
||||
@@ -1455,6 +1464,26 @@ export default {
|
||||
return;
|
||||
}
|
||||
|
||||
// In the multi-stream mode, add the track to the conference if there is no existing track, replace it
|
||||
// otherwise.
|
||||
if (getMultipleVideoSupportFeatureFlag(state)) {
|
||||
const trackAction = oldTrack
|
||||
? replaceLocalTrack(oldTrack, newTrack, room)
|
||||
: addLocalTrack(newTrack);
|
||||
|
||||
APP.store.dispatch(trackAction)
|
||||
.then(() => {
|
||||
this.setVideoMuteStatus();
|
||||
})
|
||||
.then(resolve)
|
||||
.catch(error => {
|
||||
logger.error(`useVideoStream failed: ${error}`);
|
||||
reject(error);
|
||||
})
|
||||
.then(onFinish);
|
||||
|
||||
return;
|
||||
}
|
||||
APP.store.dispatch(
|
||||
replaceLocalTrack(oldTrack, newTrack, room))
|
||||
.then(() => {
|
||||
@@ -1604,7 +1633,8 @@ export default {
|
||||
// In case there was no local audio when screen sharing was started the fact that we set the audio stream to
|
||||
// null will take care of the desktop audio stream cleanup.
|
||||
} else if (this._desktopAudioStream) {
|
||||
await this.useAudioStream(null);
|
||||
await room.replaceTrack(this._desktopAudioStream, null);
|
||||
this._desktopAudioStream.dispose();
|
||||
this._desktopAudioStream = undefined;
|
||||
}
|
||||
|
||||
@@ -1659,9 +1689,12 @@ export default {
|
||||
* toggles between screen sharing and camera video.
|
||||
* @param {Object} [options] - Screen sharing options that will be passed to
|
||||
* createLocalTracks.
|
||||
* @param {boolean} [options.audioOnly] - Whether or not audioOnly is enabled.
|
||||
* @param {Array<string>} [options.desktopSharingSources] - Array with the
|
||||
* sources that have to be displayed in the desktop picker window ('screen',
|
||||
* 'window', etc.).
|
||||
* @param {Object} [options.desktopStream] - An existing desktop stream to
|
||||
* use instead of creating a new desktop stream.
|
||||
* @param {boolean} ignoreDidHaveVideo - if true ignore if video was on when sharing started.
|
||||
* @return {Promise.<T>}
|
||||
*/
|
||||
@@ -1675,9 +1708,8 @@ export default {
|
||||
}
|
||||
|
||||
if (this.isAudioOnly()) {
|
||||
return Promise.reject('No screensharing in audio only mode');
|
||||
APP.store.dispatch(setAudioOnly(false));
|
||||
}
|
||||
|
||||
if (toggle) {
|
||||
try {
|
||||
await this._switchToScreenSharing(options);
|
||||
@@ -1939,13 +1971,15 @@ export default {
|
||||
// api.
|
||||
if (localAudio) {
|
||||
this._mixerEffect = new AudioMixerEffect(this._desktopAudioStream);
|
||||
|
||||
logger.debug(`_switchToScreenSharing is mixing ${this._desktopAudioStream} and ${localAudio}`
|
||||
+ ' as a single audio stream');
|
||||
await localAudio.setEffect(this._mixerEffect);
|
||||
} else {
|
||||
// If no local stream is present ( i.e. no input audio devices) we use the screen share audio
|
||||
// stream as we would use a regular stream.
|
||||
await this.useAudioStream(this._desktopAudioStream);
|
||||
|
||||
logger.debug(`_switchToScreenSharing is using ${this._desktopAudioStream} for replacing it as`
|
||||
+ ' the only audio track on the conference');
|
||||
await room.replaceTrack(null, this._desktopAudioStream);
|
||||
}
|
||||
APP.store.dispatch(setScreenAudioShareState(true));
|
||||
}
|
||||
@@ -2034,9 +2068,9 @@ export default {
|
||||
room.on(JitsiConferenceEvents.CONFERENCE_JOINED, () => {
|
||||
this._onConferenceJoined();
|
||||
});
|
||||
room.on(JitsiConferenceEvents.CONFERENCE_JOIN_IN_PROGRESS, () => {
|
||||
APP.store.dispatch(setPrejoinPageVisibility(false));
|
||||
});
|
||||
room.on(
|
||||
JitsiConferenceEvents.CONFERENCE_JOIN_IN_PROGRESS,
|
||||
() => APP.store.dispatch(conferenceJoinInProgress(room)));
|
||||
|
||||
room.on(
|
||||
JitsiConferenceEvents.CONFERENCE_LEFT,
|
||||
@@ -2063,6 +2097,10 @@ export default {
|
||||
APP.store.dispatch(updateRemoteParticipantFeatures(user));
|
||||
});
|
||||
room.on(JitsiConferenceEvents.USER_JOINED, (id, user) => {
|
||||
if (config.iAmRecorder && user.isHiddenFromRecorder()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// The logic shared between RN and web.
|
||||
commonUserJoinedHandling(APP.store, room, user);
|
||||
|
||||
@@ -2100,6 +2138,10 @@ export default {
|
||||
if (this.isLocalId(id)) {
|
||||
logger.info(`My role changed, new role: ${role}`);
|
||||
|
||||
if (role === 'moderator') {
|
||||
APP.store.dispatch(maybeSetLobbyChatMessageListener());
|
||||
}
|
||||
|
||||
APP.store.dispatch(localParticipantRoleChanged(role));
|
||||
APP.API.notifyUserRoleChanged(id, role);
|
||||
} else {
|
||||
@@ -2112,6 +2154,14 @@ export default {
|
||||
return;
|
||||
}
|
||||
|
||||
if (config.iAmRecorder) {
|
||||
const participant = room.getParticipantById(track.getParticipantId());
|
||||
|
||||
if (participant.isHiddenFromRecorder()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
APP.store.dispatch(trackAdded(track));
|
||||
});
|
||||
|
||||
@@ -2296,6 +2346,10 @@ export default {
|
||||
APP.store.dispatch(setVideoUnmutePermissions(disableVideoMuteChange));
|
||||
});
|
||||
|
||||
room.on(
|
||||
JitsiE2ePingEvents.E2E_RTT_CHANGED,
|
||||
(...args) => APP.store.dispatch(e2eRttChanged(...args)));
|
||||
|
||||
APP.UI.addListener(UIEvents.AUDIO_MUTED, muted => {
|
||||
this.muteAudio(muted);
|
||||
});
|
||||
@@ -2599,13 +2653,24 @@ export default {
|
||||
* @returns {void}
|
||||
*/
|
||||
_onConferenceJoined() {
|
||||
const { dispatch } = APP.store;
|
||||
|
||||
APP.UI.initConference();
|
||||
|
||||
if (!config.disableShortcuts) {
|
||||
APP.keyboardshortcut.init();
|
||||
}
|
||||
|
||||
APP.store.dispatch(conferenceJoined(room));
|
||||
dispatch(conferenceJoined(room));
|
||||
|
||||
const jwt = APP.store.getState()['features/base/jwt'];
|
||||
|
||||
if (jwt?.user?.hiddenFromRecorder) {
|
||||
dispatch(muteLocal(true, MEDIA_TYPE.AUDIO));
|
||||
dispatch(muteLocal(true, MEDIA_TYPE.VIDEO));
|
||||
dispatch(setAudioUnmutePermissions(true, true));
|
||||
dispatch(setVideoUnmutePermissions(true, true));
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -3051,15 +3116,6 @@ export default {
|
||||
room.sendEndpointMessage(to, payload);
|
||||
},
|
||||
|
||||
/**
|
||||
* Sends a facial expression as a string and its duration as a number
|
||||
* @param {object} payload - Object containing the {string} facialExpression
|
||||
* and {number} duration
|
||||
*/
|
||||
sendFacialExpression(payload) {
|
||||
room.sendFacialExpression(payload);
|
||||
},
|
||||
|
||||
/**
|
||||
* Adds new listener.
|
||||
* @param {String} eventName the name of the event
|
||||
|
||||
115
config.js
115
config.js
@@ -1,3 +1,4 @@
|
||||
|
||||
/* eslint-disable no-unused-vars, no-var */
|
||||
|
||||
var config = {
|
||||
@@ -78,6 +79,10 @@ var config = {
|
||||
flags: {
|
||||
// Enables source names in the signaling.
|
||||
// sourceNameSignaling: false,
|
||||
|
||||
// Enables sending multiple video streams, i.e., camera and desktop tracks can be shared in the conference
|
||||
// separately as two different streams instead of one composite stream.
|
||||
// sendMultipleVideoStreams: false
|
||||
},
|
||||
|
||||
// Disables moderator indicators.
|
||||
@@ -473,6 +478,10 @@ var config = {
|
||||
// If Lobby is enabled starts knocking automatically.
|
||||
// autoKnockLobby: false,
|
||||
|
||||
// Enable lobby chat.
|
||||
// enableLobbyChat: true,
|
||||
|
||||
// DEPRECATED! Use `breakoutRooms.hideAddRoomButton` instead.
|
||||
// Hides add breakout room button
|
||||
// hideAddRoomButton: false,
|
||||
|
||||
@@ -511,7 +520,7 @@ var config = {
|
||||
// Hides the dominant speaker name badge that hovers above the toolbox
|
||||
// hideDominantSpeakerBadge: false,
|
||||
|
||||
// Default language for the user interface.
|
||||
// Default language for the user interface. Cannot be overwritten.
|
||||
// defaultLanguage: 'en',
|
||||
|
||||
// Disables profile and the edit of all fields from the profile settings (display name and email)
|
||||
@@ -598,7 +607,9 @@ var config = {
|
||||
// 'fullscreen',
|
||||
// 'hangup',
|
||||
// 'help',
|
||||
// 'highlight',
|
||||
// 'invite',
|
||||
// 'linktosalesforce',
|
||||
// 'livestreaming',
|
||||
// 'microphone',
|
||||
// 'mute-everyone',
|
||||
@@ -630,7 +641,9 @@ var config = {
|
||||
// timeout: 4000,
|
||||
// // Moved from interfaceConfig.TOOLBAR_ALWAYS_VISIBLE
|
||||
// // Whether toolbar should be always visible or should hide after x miliseconds.
|
||||
// alwaysVisible: false
|
||||
// alwaysVisible: false,
|
||||
// // Indicates whether the toolbar should still autohide when chat is open
|
||||
// autoHideWhileChatIsOpen: false
|
||||
// },
|
||||
|
||||
// Toolbar buttons which have their click/tap event exposed through the API on
|
||||
@@ -739,11 +752,22 @@ var config = {
|
||||
// Enables sending participants' emails (if available) to callstats and other analytics
|
||||
// enableEmailInStats: false,
|
||||
|
||||
// Enables detecting faces of participants and get their expression and send it to other participants
|
||||
// enableFacialRecognition: true,
|
||||
// faceLandmarks: {
|
||||
// // Enables sharing your face cordinates. Used for centering faces within a video.
|
||||
// enableFaceCentering: false,
|
||||
|
||||
// Enables displaying facial expressions in speaker stats
|
||||
// enableDisplayFacialExpressions: true,
|
||||
// // Enables detecting face expressions and sharing data with other participants
|
||||
// enableFaceExpressionsDetection: false,
|
||||
|
||||
// // Enables displaying face expressions in speaker stats
|
||||
// enableDisplayFaceExpressions: false,
|
||||
|
||||
// // Minimum required face movement percentage threshold for sending new face centering coordinates data.
|
||||
// faceCenteringThreshold: 10,
|
||||
|
||||
// // Miliseconds for processing a new image capture in order to detect face coordinates if they exist.
|
||||
// captureInterval: 100
|
||||
// },
|
||||
|
||||
// Controls the percentage of automatic feedback shown to participants when callstats is enabled.
|
||||
// The default value is 100%. If set to 0, no automatic feedback will be requested
|
||||
@@ -930,14 +954,18 @@ var config = {
|
||||
|
||||
// Options related to end-to-end (participant to participant) ping.
|
||||
// e2eping: {
|
||||
// // The interval in milliseconds at which pings will be sent.
|
||||
// // Defaults to 10000, set to <= 0 to disable.
|
||||
// pingInterval: 10000,
|
||||
// // Whether ene-to-end pings should be enabled.
|
||||
// enabled: false,
|
||||
//
|
||||
// // The interval in milliseconds at which analytics events
|
||||
// // with the measured RTT will be sent. Defaults to 60000, set
|
||||
// // to <= 0 to disable.
|
||||
// analyticsInterval: 60000,
|
||||
// // The number of responses to wait for.
|
||||
// numRequests: 5,
|
||||
//
|
||||
// // The max conference size in which e2e pings will be sent.
|
||||
// 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.
|
||||
// maxMessagesPerSecond: 250
|
||||
// },
|
||||
|
||||
// If set, will attempt to use the provided video input device label when
|
||||
@@ -979,12 +1007,25 @@ var config = {
|
||||
|
||||
// Options related to the remote participant menu.
|
||||
// remoteVideoMenu: {
|
||||
// // Whether the remote video context menu to be rendered or not.
|
||||
// disabled: true,
|
||||
// // If set to true the 'Kick out' button will be disabled.
|
||||
// disableKick: true,
|
||||
// // If set to true the 'Grant moderator' button will be disabled.
|
||||
// disableGrantModerator: true
|
||||
// disableGrantModerator: true,
|
||||
// // If set to true the 'Send private message' button will be disabled.
|
||||
// disablePrivateChat: true
|
||||
// },
|
||||
|
||||
// Endpoint that enables support for salesforce integration with in-meeting resource linking
|
||||
// This is required for:
|
||||
// listing the most recent records - salesforceUrl/records/recents
|
||||
// searching records - salesforceUrl/records?text=${text}
|
||||
// retrieving record details - salesforceUrl/records/${id}?type=${type}
|
||||
// and linking the meeting - salesforceUrl/sessions/${sessionId}/records/${id}
|
||||
//
|
||||
// salesforceUrl: 'https://api.example.com/',
|
||||
|
||||
// If set to true all muting operations of remote participants will be disabled.
|
||||
// disableRemoteMute: true,
|
||||
|
||||
@@ -1048,6 +1089,14 @@ var config = {
|
||||
*/
|
||||
// dynamicBrandingUrl: '',
|
||||
|
||||
// Options related to the breakout rooms feature.
|
||||
// breakoutRooms: {
|
||||
// // Hides the add breakout room button. This replaces `hideAddRoomButton`.
|
||||
// hideAddRoomButton: false,
|
||||
// // Hides the join breakout room button.
|
||||
// hideJoinRoomButton: false
|
||||
// },
|
||||
|
||||
// When true the user cannot add more images to be used as virtual background.
|
||||
// Only the default ones from will be available.
|
||||
// disableAddingBackgroundImages: false,
|
||||
@@ -1083,7 +1132,8 @@ var config = {
|
||||
// 'e2ee',
|
||||
// 'transcribing',
|
||||
// 'video-quality',
|
||||
// 'insecure-room'
|
||||
// 'insecure-room',
|
||||
// 'highlight-moment'
|
||||
// ]
|
||||
// },
|
||||
|
||||
@@ -1167,6 +1217,7 @@ var config = {
|
||||
forceJVB121Ratio
|
||||
forceTurnRelay
|
||||
hiddenDomain
|
||||
hiddenFromRecorderFeatureEnabled
|
||||
ignoreStartMuted
|
||||
websocketKeepAlive
|
||||
websocketKeepAliveUrl
|
||||
@@ -1222,6 +1273,7 @@ var config = {
|
||||
// 'notify.invitedThreePlusMembers', // shown when 3+ participants have been invited
|
||||
// 'notify.invitedTwoMembers', // shown when 2 participants have been invited
|
||||
// 'notify.kickParticipant', // shown when a participant is kicked
|
||||
// 'notify.linkToSalesforce', // shown when joining a meeting with salesforce integration
|
||||
// 'notify.moderationStartedTitle', // shown when AV moderation is activated
|
||||
// 'notify.moderationStoppedTitle', // shown when AV moderation is deactivated
|
||||
// 'notify.moderationInEffectTitle', // shown when user attempts to unmute audio during AV moderation
|
||||
@@ -1237,6 +1289,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
|
||||
// 'prejoin.errorDialOut',
|
||||
// 'prejoin.errorDialOutDisconnected',
|
||||
// 'prejoin.errorDialOutFailed',
|
||||
@@ -1255,9 +1308,41 @@ var config = {
|
||||
// Prevent the filmstrip from autohiding when screen width is under a certain threshold
|
||||
// disableFilmstripAutohiding: false,
|
||||
|
||||
// filmstrip: {
|
||||
// // Disables user resizable filmstrip. Also, allows configuration of the filmstrip
|
||||
// // (width, tiles aspect ratios) through the interfaceConfig options.
|
||||
// disableResizable: false,
|
||||
|
||||
// // Disables the stage filmstrip
|
||||
// // (displaying multiple participants on stage besides the vertical filmstrip)
|
||||
// disableStageFilmstrip: false
|
||||
// },
|
||||
|
||||
// Tile view related config options.
|
||||
// tileView: {
|
||||
// // The optimal number of tiles that are going to be shown in tile view. Depending on the screen size it may
|
||||
// // not be possible to show the exact number of participants specified here.
|
||||
// numberOfVisibleTiles: 25
|
||||
// },
|
||||
|
||||
// Specifies whether the chat emoticons are disabled or not
|
||||
// disableChatSmileys: false,
|
||||
|
||||
// Settings for the GIPHY integration.
|
||||
// giphy: {
|
||||
// // Whether the feature is enabled or not.
|
||||
// enabled: false,
|
||||
// // SDK API Key from Giphy.
|
||||
// sdkKey: '',
|
||||
// // Display mode can be one of:
|
||||
// // - tile: show the GIF on the tile of the participant that sent it.
|
||||
// // - 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).
|
||||
// tileTime: 5000
|
||||
// },
|
||||
|
||||
// Allow all above example options to include a trailing comma and
|
||||
// prevent fear when commenting out the last value.
|
||||
makeJsonParserHappy: 'even if last key had a trailing comma'
|
||||
|
||||
@@ -13,10 +13,10 @@ import {
|
||||
import { openDialog } from './react/features/base/dialog/actions';
|
||||
import { setJWT } from './react/features/base/jwt';
|
||||
import {
|
||||
isFatalJitsiConnectionError,
|
||||
JitsiConnectionErrors,
|
||||
JitsiConnectionEvents
|
||||
} 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 { setPrejoinDisplayNameRequired } from './react/features/prejoin/actions';
|
||||
|
||||
@@ -4,11 +4,12 @@
|
||||
text-align: center;
|
||||
|
||||
h2 {
|
||||
font-size: 36px;
|
||||
font-size: 48px;
|
||||
color : #f2f2f2;
|
||||
}
|
||||
|
||||
&__message {
|
||||
font-size: 24px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
/**
|
||||
* Keep overflow menu within screen vertical bounds and make it scrollable.
|
||||
*/
|
||||
.toolbox-button-wth-dialog > div:nth-child(2) {
|
||||
.toolbox-button-wth-dialog > div:nth-child(2) {
|
||||
background: $menuBG;
|
||||
max-height: calc(100vh - #{$newToolbarSizeWithPadding} - 46px);
|
||||
margin-bottom: 4px;
|
||||
@@ -36,6 +36,15 @@
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove background color and box-shadow for the context menu container.
|
||||
*/
|
||||
.toolbox-button-wth-dialog.context-menu > div:nth-child(2) {
|
||||
background: transparent;
|
||||
box-shadow: none;
|
||||
overflow-y: initial;
|
||||
}
|
||||
|
||||
.audio-preview > div:nth-child(2),
|
||||
.video-preview > div:nth-child(2),
|
||||
.reactions-menu-popup > div:nth-child(2) {
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
.avatar {
|
||||
background-color: #AAA;
|
||||
border-radius: 50%;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
font-weight: 100;
|
||||
object-fit: cover;
|
||||
|
||||
&.avatar-small {
|
||||
height: 28px !important;
|
||||
width: 28px !important;
|
||||
}
|
||||
|
||||
&.avatar-xsmall {
|
||||
height: 16px !important;
|
||||
width: 16px !important;
|
||||
}
|
||||
|
||||
.jitsi-icon {
|
||||
transform: translateY(50%);
|
||||
}
|
||||
}
|
||||
|
||||
.avatar-svg {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.avatar-badge {
|
||||
position: relative;
|
||||
|
||||
&-available::after {
|
||||
@include avatarBadge;
|
||||
background-color: $presence-available;
|
||||
}
|
||||
|
||||
&-away::after {
|
||||
@include avatarBadge;
|
||||
background-color: $presence-away;
|
||||
}
|
||||
|
||||
&-busy::after {
|
||||
@include avatarBadge;
|
||||
background-color: $presence-busy;
|
||||
}
|
||||
|
||||
&-idle::after {
|
||||
@include avatarBadge;
|
||||
background-color: $presence-idle;
|
||||
}
|
||||
}
|
||||
@@ -43,18 +43,6 @@ body {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* AtlasKit sets a default margin on the rendered modals, so
|
||||
* when the shift-right class is set when the chat opens, we
|
||||
* pad the modal container in order for the modals to be centered
|
||||
* while also taking the chat size into consideration.
|
||||
*/
|
||||
@media (min-width: 581px) {
|
||||
.shift-right .atlaskit-portal > div:not(.Tooltip) {
|
||||
padding-left: $sidebarWidth;
|
||||
}
|
||||
}
|
||||
|
||||
.jitsi-icon {
|
||||
&-default svg {
|
||||
fill: white;
|
||||
@@ -164,16 +152,6 @@ form {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Dialogs fade
|
||||
*/
|
||||
.aui-blanket {
|
||||
background: #000;
|
||||
transition: opacity 0.2s, visibility 0.2s;
|
||||
transition-delay: 0.1s;
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
#inviteLinkRef {
|
||||
-webkit-user-select: text;
|
||||
user-select: text;
|
||||
|
||||
@@ -1,15 +1,20 @@
|
||||
#sideToolbarContainer {
|
||||
background-color: $chatBackgroundColor;
|
||||
box-sizing: border-box;
|
||||
color: #FFF;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
flex-shrink: 0;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
transition: width .16s ease-in-out;
|
||||
width: $sidebarWidth;
|
||||
z-index: $sideToolbarContainerZ;
|
||||
|
||||
@media (max-width: 580px) {
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
height: -webkit-fill-available;
|
||||
left: 0;
|
||||
position: fixed;
|
||||
right: 0;
|
||||
top: 0;
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,6 +90,10 @@
|
||||
fill: white;
|
||||
}
|
||||
}
|
||||
|
||||
&.lobby-chat-recipient {
|
||||
background-color: $chatLobbyMessageBackgroundColor;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -455,6 +464,9 @@
|
||||
&.privatemessage {
|
||||
background-color: $chatPrivateMessageBackgroundColor;
|
||||
}
|
||||
&.lobbymessage {
|
||||
background-color: $chatLobbyMessageBackgroundColor;
|
||||
}
|
||||
}
|
||||
|
||||
.display-name {
|
||||
@@ -494,6 +506,10 @@
|
||||
justify-content: center;
|
||||
padding: 5px;
|
||||
|
||||
&.lobbychatmessageactions {
|
||||
border-left-color: $chatLobbyActionsSeparatorColor;
|
||||
}
|
||||
|
||||
.toolbox-icon {
|
||||
cursor: pointer;
|
||||
}
|
||||
@@ -511,6 +527,9 @@
|
||||
&.privatemessage {
|
||||
background-color: $chatPrivateMessageBackgroundColor;
|
||||
}
|
||||
&.lobbymessage {
|
||||
background-color: $chatLobbyMessageBackgroundColor;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
%connection-info {
|
||||
font-size: 12px;
|
||||
font-weight: 400;
|
||||
|
||||
td {
|
||||
padding: 2px 0;
|
||||
}
|
||||
}
|
||||
|
||||
.connection-info
|
||||
{
|
||||
@extend %connection-info;
|
||||
|
||||
> table {
|
||||
white-space: nowrap;
|
||||
@extend %connection-info;
|
||||
}
|
||||
|
||||
td:nth-child(n-1) {
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
&__icon {
|
||||
margin-right: 2px;
|
||||
}
|
||||
|
||||
&__download
|
||||
{
|
||||
@extend .connection-info__icon;
|
||||
}
|
||||
|
||||
&__status
|
||||
{
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
&__upload
|
||||
{
|
||||
@extend .connection-info__icon;
|
||||
}
|
||||
|
||||
&__mobile {
|
||||
margin: 15px;
|
||||
}
|
||||
|
||||
.connection-actions {
|
||||
margin: 10px auto;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
.shortcuts-list {
|
||||
list-style-type: none;
|
||||
padding: 0;
|
||||
|
||||
&__item {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-bottom: em(7, 14);
|
||||
}
|
||||
}
|
||||
@@ -195,14 +195,15 @@
|
||||
}
|
||||
|
||||
/**
|
||||
* Avatar status badge mixin
|
||||
* Change the direction of the current element to LTR, but do not change the direction
|
||||
* of its children; Keep them RTL.
|
||||
*/
|
||||
@mixin avatarBadge {
|
||||
border-radius: 50%;
|
||||
content: '';
|
||||
display: block;
|
||||
height: 35%;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 35%;
|
||||
@mixin ltr {
|
||||
body[dir=rtl] & {
|
||||
direction: ltr;
|
||||
|
||||
& > * {
|
||||
direction: rtl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,10 +6,6 @@
|
||||
transition: width .16s ease-in-out;
|
||||
width: 315px;
|
||||
z-index: $zindex0;
|
||||
|
||||
&--closed {
|
||||
width: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.participants_pane-content {
|
||||
@@ -25,10 +21,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
.participant-avatar {
|
||||
margin: 8px 16px 8px 0;
|
||||
}
|
||||
|
||||
@media (max-width: 580px) {
|
||||
.participants_pane {
|
||||
height: 100vh;
|
||||
@@ -38,11 +30,6 @@
|
||||
right: 0;
|
||||
top: 0;
|
||||
width: auto;
|
||||
|
||||
&--closed {
|
||||
display: none;
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
|
||||
.participants_pane-content {
|
||||
|
||||
@@ -7,7 +7,20 @@
|
||||
border-radius: 3px;
|
||||
padding: 16px;
|
||||
|
||||
&.with-gif {
|
||||
width: 328px;
|
||||
|
||||
.reactions-row .toolbox-button:last-of-type {
|
||||
top: 3px;
|
||||
|
||||
& .toolbox-icon.toggled {
|
||||
background-color: #000000;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.overflow {
|
||||
width: 100%;
|
||||
|
||||
.toolbox-icon {
|
||||
width: 48px;
|
||||
@@ -27,6 +40,10 @@
|
||||
.toolbox-button {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.toolbox-button:last-of-type {
|
||||
top: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,6 +73,7 @@
|
||||
.toolbox-button {
|
||||
margin-right: 8px;
|
||||
touch-action: manipulation;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.toolbox-button:last-of-type {
|
||||
|
||||
@@ -7,22 +7,23 @@
|
||||
flex-direction: column;
|
||||
|
||||
.recording-header {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex: 0;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
padding-top: 32px;
|
||||
|
||||
.recording-title {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
font-size: 16px;
|
||||
font-size: 14px;
|
||||
margin-left: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
.recording-header-line {
|
||||
border-top: 1px solid #5e6d7a;
|
||||
padding-top: 32px;
|
||||
}
|
||||
|
||||
.recording-switch-disabled {
|
||||
@@ -34,10 +35,79 @@
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.file-sharing-icon-container {
|
||||
background-color: #525252;
|
||||
border-radius: 4px;
|
||||
height: 40px;
|
||||
justify-content: center;
|
||||
width: 56px;
|
||||
}
|
||||
|
||||
.cloud-content-recording-icon-container {
|
||||
background-color: #FFFFFF;
|
||||
border-radius: 4px;
|
||||
height: 40px;
|
||||
justify-content: center;
|
||||
width: 40px;
|
||||
}
|
||||
|
||||
.jitsi-recording-header {
|
||||
margin-bottom: 32px;
|
||||
}
|
||||
|
||||
.jitsi-content-recording-icon-container-with-switch {
|
||||
background-color: #FFFFFF;
|
||||
border-radius: 4px;
|
||||
height: 40px;
|
||||
width: 56px;
|
||||
}
|
||||
|
||||
.jitsi-content-recording-icon-container-without-switch {
|
||||
background-color: #FFFFFF;
|
||||
border-radius: 4px;
|
||||
height: 40px;
|
||||
width: 46px;
|
||||
}
|
||||
|
||||
.recording-icon {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
height: 40px;
|
||||
object-fit: contain;
|
||||
width: 40px;
|
||||
}
|
||||
|
||||
.content-recording-icon {
|
||||
height: 18px;
|
||||
margin: 10px 0 0 10px;
|
||||
object-fit: contain;
|
||||
width: 18px;
|
||||
}
|
||||
|
||||
.recording-file-sharing-icon {
|
||||
height: 18px;
|
||||
object-fit: contain;
|
||||
width: 18px;
|
||||
}
|
||||
|
||||
.recording-info{
|
||||
background-color: #FFD740;
|
||||
color: black;
|
||||
display: inline-flex;
|
||||
margin: 32px 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.recording-info-icon {
|
||||
align-self: center;
|
||||
height: 14px;
|
||||
margin: 0 24px 0 16px;
|
||||
object-fit: contain;
|
||||
width: 14px;
|
||||
}
|
||||
|
||||
.recording-info-title {
|
||||
display: inline-flex;
|
||||
font-size: 14px;
|
||||
width: 290px
|
||||
}
|
||||
|
||||
.recording-switch {
|
||||
|
||||
@@ -48,6 +48,7 @@ canvas,
|
||||
progress,
|
||||
video {
|
||||
display: inline-block;
|
||||
transition: object-position 0.5s ease 0s;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
audio:not([controls]) {
|
||||
@@ -1,7 +1,7 @@
|
||||
.subject {
|
||||
color: #fff;
|
||||
transition: opacity .6s ease-in-out;
|
||||
z-index: $zindex3;
|
||||
z-index: $toolbarZ + 2;
|
||||
margin-top: 20px;
|
||||
opacity: 0;
|
||||
|
||||
@@ -88,10 +88,6 @@
|
||||
max-width: calc(100% - 24px);
|
||||
}
|
||||
|
||||
.shift-right .details-container {
|
||||
margin-left: calc(#{$sidebarWidth} / 2);
|
||||
}
|
||||
|
||||
@keyframes hideSubject {
|
||||
0% {
|
||||
max-width: 100%;
|
||||
|
||||
@@ -39,13 +39,6 @@
|
||||
&.no-buttons {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@media (min-width: 581px) {
|
||||
&.shift-right {
|
||||
margin-left: $sidebarWidth;
|
||||
width: calc(100% - #{$sidebarWidth});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.toolbox-content {
|
||||
@@ -99,6 +92,10 @@
|
||||
max-width: 100%;
|
||||
pointer-events: all;
|
||||
border-radius: 6px;
|
||||
|
||||
.toolbox-content-items {
|
||||
@include ltr;
|
||||
}
|
||||
}
|
||||
|
||||
.toolbox-content-wrapper::after {
|
||||
@@ -183,6 +180,7 @@
|
||||
}
|
||||
|
||||
.toolbox-content-items {
|
||||
@include ltr;
|
||||
border-radius: 0;
|
||||
display: flex;
|
||||
justify-content: space-evenly;
|
||||
|
||||
@@ -28,10 +28,6 @@ $defaultSemiDarkColor: #ACACAC;
|
||||
$defaultDarkColor: #2b3d5c;
|
||||
$defaultWarningColor: rgb(215, 121, 118);
|
||||
$participantsPaneBgColor: #141414;
|
||||
$presence-available: rgb(110, 176, 5);
|
||||
$presence-away: rgb(250, 201, 20);
|
||||
$presence-busy: rgb(233, 0, 27);
|
||||
$presence-idle: rgb(172, 172, 172);
|
||||
|
||||
/**
|
||||
* Toolbar
|
||||
@@ -83,6 +79,8 @@ $modalTextColor: #333;
|
||||
$chatActionsSeparatorColor: rgb(173, 105, 112);
|
||||
$chatBackgroundColor: #131519;
|
||||
$chatInputSeparatorColor: #A4B8D1;
|
||||
$chatLobbyMessageBackgroundColor: #6A50D3;
|
||||
$chatLobbyActionsSeparatorColor: #6A50D3;
|
||||
$chatLocalMessageBackgroundColor: #484A4F;
|
||||
$chatPrivateMessageBackgroundColor: rgb(153, 69, 77);
|
||||
$chatRemoteMessageBackgroundColor: #242528;
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
.video-preview {
|
||||
background: none;
|
||||
display: inline-block;
|
||||
max-height: 344px;
|
||||
|
||||
&-container {
|
||||
max-height: 344px;
|
||||
background: $menuBG;
|
||||
border-radius: 3px;
|
||||
overflow: auto;
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
}
|
||||
|
||||
#layout_wrapper {
|
||||
@include ltr;
|
||||
display: flex;
|
||||
height: 100%;
|
||||
}
|
||||
@@ -44,15 +45,6 @@
|
||||
position: relative;
|
||||
text-align: center;
|
||||
overflow: 'hidden';
|
||||
|
||||
@media (min-width: 581px) {
|
||||
&.shift-right {
|
||||
&#largeVideoContainer {
|
||||
margin-left: $sidebarWidth;
|
||||
width: calc(100% - #{$sidebarWidth});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#localVideoWrapper {
|
||||
@@ -78,6 +70,10 @@
|
||||
#largeVideoContainer {
|
||||
overflow: hidden;
|
||||
text-align: center;
|
||||
|
||||
&.transition {
|
||||
transition: width 1s, height 1s, top 1s;
|
||||
}
|
||||
}
|
||||
|
||||
#largeVideoContainer {
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
.select2-container.aui-select2-container {
|
||||
background-color: transparent !important;
|
||||
margin-top: 2px;
|
||||
|
||||
a.select2-choice {
|
||||
height: 28px !important;
|
||||
line-height: 18px !important;
|
||||
width: 100% !important;
|
||||
background-color: $selectBg !important;
|
||||
border-color: $selectBg !important;
|
||||
color: $selectFontColor !important;
|
||||
text-shadow: none !important;
|
||||
font-size: 12px !important;
|
||||
margin: 0 auto !important;
|
||||
|
||||
&:after {
|
||||
border-top-color: $selectFontColor;
|
||||
}
|
||||
}
|
||||
|
||||
&.select2-dropdown-open{
|
||||
a.select2-choice {
|
||||
background-color: $selectActiveBg !important;
|
||||
border-color: $selectActiveBg !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.select2-drop.aui-select2-drop.aui-style-default {
|
||||
z-index: $dropdownZ;
|
||||
background-color: $selectActiveBg;
|
||||
border-color: $selectActiveBg;
|
||||
|
||||
.select2-results{
|
||||
background-color: $selectActiveBg;
|
||||
border-color: $selectActiveBg;
|
||||
|
||||
&::-webkit-scrollbar {
|
||||
background-color: transparent;
|
||||
}
|
||||
&::-webkit-scrollbar-track {
|
||||
background-color: transparent;
|
||||
}
|
||||
&::-webkit-scrollbar-track-piece {
|
||||
background-color: transparent;
|
||||
}
|
||||
&::-webkit-scrollbar-thumb {
|
||||
background-color: $selectActiveItemBg;
|
||||
}
|
||||
|
||||
.select2-result{
|
||||
&.select2-highlighted{
|
||||
background-color: $selectActiveItemBg;
|
||||
}
|
||||
|
||||
.select2-result-label{
|
||||
font-size: 12px;
|
||||
color: $selectFontColor !important;
|
||||
line-height: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.select2-drop-mask {
|
||||
z-index: $dropdownMaskZ;
|
||||
}
|
||||
@@ -48,7 +48,8 @@
|
||||
/**
|
||||
* The local video identifier.
|
||||
*/
|
||||
&#filmstripLocalVideo {
|
||||
&#filmstripLocalVideo,
|
||||
&#filmstripLocalScreenShare {
|
||||
align-self: flex-end;
|
||||
display: block;
|
||||
margin-bottom: 8px;
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
* CSS styles that are specific to the filmstrip that shows the thumbnail tiles.
|
||||
*/
|
||||
.tile-view {
|
||||
|
||||
.remote-videos {
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
@@ -42,17 +41,6 @@
|
||||
top: 0;
|
||||
width: 100%;
|
||||
|
||||
@media (min-width: 581px) {
|
||||
&.shift-right {
|
||||
margin-left: $sidebarWidth;
|
||||
width: calc(100% - #{$sidebarWidth});
|
||||
|
||||
.remote-videos {
|
||||
width: calc(100vw - #{$sidebarWidth});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.collapse {
|
||||
#remoteVideos {
|
||||
height: calc(100% - #{$newToolbarSizeMobile}) !important;
|
||||
@@ -74,6 +62,10 @@
|
||||
display: block;
|
||||
}
|
||||
|
||||
.filmstrip__videos.has-scroll {
|
||||
padding-left: 7px;
|
||||
}
|
||||
|
||||
.remote-videos {
|
||||
box-sizing: border-box;
|
||||
|
||||
@@ -91,7 +83,6 @@
|
||||
margin-top: auto;
|
||||
margin-bottom: auto;
|
||||
justify-content: center;
|
||||
position: absolute;
|
||||
|
||||
.videocontainer {
|
||||
border: 0;
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
* Various overrides outside of the filmstrip to style the app to support a
|
||||
* tiled thumbnail experience.
|
||||
*/
|
||||
.tile-view {
|
||||
.tile-view,
|
||||
.stage-filmstrip {
|
||||
/**
|
||||
* Let the avatar grow with the tile.
|
||||
*/
|
||||
@@ -15,9 +16,9 @@
|
||||
* Hide various features that should not be displayed while in tile view.
|
||||
*/
|
||||
#dominantSpeaker,
|
||||
#filmstripLocalVideoThumbnail,
|
||||
#largeVideoElementsContainer,
|
||||
#sharedVideo {
|
||||
#sharedVideo,
|
||||
.stage-participant-label {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.vertical-filmstrip .filmstrip {
|
||||
.vertical-filmstrip span:not(.tile-view) .filmstrip {
|
||||
&.hide-videos {
|
||||
.remote-videos {
|
||||
& > div {
|
||||
@@ -28,7 +28,7 @@
|
||||
flex-direction: column-reverse;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
padding: ($desktopAppDragBarHeight - 5px) 5px calc(env(safe-area-inset-bottom, 0) + 10px);
|
||||
padding: 0;
|
||||
/**
|
||||
* fixed positioning is necessary for remote menus and tooltips to pop
|
||||
* out of the scrolling filmstrip. AtlasKit dialogs and tooltips use
|
||||
@@ -40,6 +40,10 @@
|
||||
right: 0;
|
||||
z-index: $filmstripVideosZ;
|
||||
|
||||
&.no-vertical-padding {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hide videos by making them slight to the right.
|
||||
*/
|
||||
@@ -58,7 +62,10 @@
|
||||
&#remoteVideos {
|
||||
border: $thumbnailsBorder solid transparent;
|
||||
padding-left: 0;
|
||||
border-left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,11 +74,12 @@
|
||||
*/
|
||||
#filmstripLocalVideo {
|
||||
align-self: initial;
|
||||
bottom: 5px;
|
||||
margin-bottom: 5px;
|
||||
display: flex;
|
||||
flex-direction: column-reverse;
|
||||
height: auto;
|
||||
justify-content: flex-start;
|
||||
width: 100%;
|
||||
|
||||
#filmstripLocalVideoThumbnail {
|
||||
width: calc(100% - 15px);
|
||||
@@ -79,9 +87,27 @@
|
||||
.videocontainer {
|
||||
height: 0px;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#filmstripLocalScreenShare {
|
||||
align-self: initial;
|
||||
margin-bottom: 5px;
|
||||
display: flex;
|
||||
flex-direction: column-reverse;
|
||||
height: auto;
|
||||
justify-content: flex-start;
|
||||
width: 100%;
|
||||
|
||||
#filmstripLocalScreenShareThumbnail {
|
||||
width: calc(100% - 15px);
|
||||
|
||||
.videocontainer {
|
||||
height: 0px;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -89,6 +115,7 @@
|
||||
* filmstrip from overlapping the left edge of the screen.
|
||||
*/
|
||||
#filmstripLocalVideo,
|
||||
#filmstripLocalScreenShare,
|
||||
.remote-videos {
|
||||
padding: 0;
|
||||
}
|
||||
@@ -100,15 +127,42 @@
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.resizable-filmstrip #remoteVideos .videocontainer {
|
||||
border-left: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
&.reduce-height {
|
||||
height: calc(100% - calc(#{$newToolbarSizeWithPadding} + #{$scrollHeight}));
|
||||
}
|
||||
|
||||
.filmstrip__videos.vertical-view-grid#remoteVideos {
|
||||
align-items: 'center';
|
||||
border: 0px;
|
||||
padding-right: 7px;
|
||||
|
||||
&.has-scroll {
|
||||
padding-right: 0px;
|
||||
}
|
||||
|
||||
.remote-videos > div {
|
||||
left: 0px; // fixes an issue on FF - the div is aligned to the right by default for some reason
|
||||
}
|
||||
|
||||
.videocontainer {
|
||||
border: 0px;
|
||||
margin: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
.remote-videos {
|
||||
display: flex;
|
||||
transition: height .3s ease-in;
|
||||
overscroll-behavior: contain;
|
||||
|
||||
&.height-transition {
|
||||
transition: height .3s ease-in;
|
||||
}
|
||||
|
||||
& > div {
|
||||
position: absolute;
|
||||
transition: opacity 1s;
|
||||
|
||||
@@ -24,8 +24,7 @@ $flagsImagePath: "../images/";
|
||||
/* Flags END */
|
||||
|
||||
/* Modules BEGIN */
|
||||
|
||||
@import 'aui_reset';
|
||||
@import 'reset';
|
||||
@import 'atlaskit_overrides';
|
||||
@import 'base';
|
||||
@import 'utils';
|
||||
@@ -39,11 +38,8 @@ $flagsImagePath: "../images/";
|
||||
@import 'modals/embed-meeting/embed-meeting';
|
||||
@import 'modals/feedback/feedback';
|
||||
@import 'modals/invite/info';
|
||||
@import 'modals/settings/settings';
|
||||
@import 'modals/screen-share/share-audio';
|
||||
@import 'modals/screen-share/share-screen-warning';
|
||||
@import 'modals/speaker_stats/speaker_stats';
|
||||
@import 'modals/virtual-background/virtual-background';
|
||||
@import 'modals/local-recording/local-recording';
|
||||
@import 'videolayout_default';
|
||||
@import 'notice';
|
||||
@@ -57,15 +53,12 @@ $flagsImagePath: "../images/";
|
||||
@import 'welcome_page_content';
|
||||
@import 'welcome_page_settings_toolbar';
|
||||
@import 'toolbars';
|
||||
@import 'keyboard-shortcuts';
|
||||
@import 'redirect_page';
|
||||
@import 'components/form-control';
|
||||
@import 'components/link';
|
||||
@import 'components/button-control';
|
||||
@import 'components/input-control';
|
||||
@import 'components/input-slider';
|
||||
@import "connection-info";
|
||||
@import 'aui-components/dropdown';
|
||||
@import '404';
|
||||
@import 'policy';
|
||||
@import 'popover';
|
||||
@@ -83,7 +76,6 @@ $flagsImagePath: "../images/";
|
||||
@import 'navigate_section_list';
|
||||
@import 'third-party-branding/google';
|
||||
@import 'third-party-branding/microsoft';
|
||||
@import 'avatar';
|
||||
@import 'promotional-footer';
|
||||
@import 'chrome-extension-banner';
|
||||
@import 'settings-button';
|
||||
@@ -94,7 +86,6 @@ $flagsImagePath: "../images/";
|
||||
@import 'country-picker';
|
||||
@import 'modals/invite/invite_more';
|
||||
@import 'modals/security/security';
|
||||
@import 'modals/mute/mute-dialog';
|
||||
@import 'e2ee';
|
||||
@import 'responsive';
|
||||
@import 'drawer';
|
||||
|
||||
@@ -1,114 +1,3 @@
|
||||
.dialog {
|
||||
box-sizing: border-box;
|
||||
height: auto;
|
||||
min-height: 131px;
|
||||
overflow: visible;
|
||||
visibility: visible;
|
||||
width: 400px;
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
color: $auiDialogColor;
|
||||
}
|
||||
|
||||
.aui {
|
||||
|
||||
&-dialog2 {
|
||||
&-header, &-footer {
|
||||
background-color: $auiDialogBg;
|
||||
border: none;
|
||||
}
|
||||
|
||||
&-header {
|
||||
border-bottom: 1px solid $auiBorderColor;
|
||||
border-radius: 5px 5px 0 0;
|
||||
box-sizing: border-box;
|
||||
color: #333;
|
||||
display: table;
|
||||
font-weight: normal;
|
||||
height: em(58, 12);
|
||||
margin-top: -69px;
|
||||
padding: 0 20px;
|
||||
width: 100%;
|
||||
|
||||
h2 {
|
||||
font-size: em(20, 12);
|
||||
font-weight: $dialogTitleFontWeight;
|
||||
color: $auiDialogColor;
|
||||
}
|
||||
|
||||
&-main {
|
||||
display: table-cell;
|
||||
padding-right: 0;
|
||||
max-width: 400px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
vertical-align: middle;
|
||||
white-space: nowrap;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
&-footer {
|
||||
border-top: 1px solid $auiBorderColor;
|
||||
border-radius: 0 0 5px 5px;
|
||||
box-sizing: border-box;
|
||||
height: 51px;
|
||||
overflow: hidden;
|
||||
padding: 10px 20px;
|
||||
width: 100%;
|
||||
|
||||
&:empty {
|
||||
height: 5px;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
&-content {
|
||||
background-color: $auiDialogBg;
|
||||
box-sizing: border-box;
|
||||
color: $auiDialogColor;
|
||||
font-size: em(14, 12);
|
||||
overflow: auto;
|
||||
max-height: 100%;
|
||||
padding: 20px;
|
||||
|
||||
p,span, h3 {
|
||||
font-weight: $labelFontWeight;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
border-bottom-right-radius: 5px;
|
||||
border-bottom-left-radius: 5px;
|
||||
}
|
||||
|
||||
&:first-child {
|
||||
border-top-right-radius: 5px;
|
||||
border-top-left-radius: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&-hide {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.input-control {
|
||||
background-color: $auiDialogContentBg;
|
||||
color: $auiDialogColor;
|
||||
}
|
||||
|
||||
.form-control:not(:last-child) {
|
||||
border-bottom: 1px solid $auiBorderColor;
|
||||
}
|
||||
}
|
||||
|
||||
@media all and (max-width: 420px) {
|
||||
.aui-dialog2-small .aui-dialog2-content {
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.modal-dialog-form {
|
||||
margin-top: 5px !important;
|
||||
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
.mute-dialog {
|
||||
.separator-line {
|
||||
margin: 24px 0 24px -20px;
|
||||
padding: 0 20px;
|
||||
width: 100%;
|
||||
height: 1px;
|
||||
background: #5E6D7A;
|
||||
}
|
||||
|
||||
.control-row {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 15px;
|
||||
|
||||
label {
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,102 +0,0 @@
|
||||
.settings-pane {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
|
||||
&.profile-pane {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.auth-name {
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.calendar-tab,
|
||||
.device-selection {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.mock-atlaskit-label {
|
||||
color: #b8c7e0;
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
line-height: 1.33;
|
||||
padding: 20px 0px 4px 0px;
|
||||
}
|
||||
input[type="checkbox"]:checked + svg {
|
||||
--checkbox-background-color: #6492e7;
|
||||
--checkbox-border-color: #6492e7;
|
||||
}
|
||||
input[type="checkbox"] + svg + span {
|
||||
color: #b8c7e0;
|
||||
}
|
||||
|
||||
input[type="checkbox"] + svg + span {
|
||||
color: #9FB0CC;
|
||||
}
|
||||
|
||||
.calendar-tab,
|
||||
.more-tab,
|
||||
.box {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.profile-edit {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.profile-edit-field {
|
||||
flex: .5;
|
||||
}
|
||||
.settings-sub-pane {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.settings-sub-pane .right {
|
||||
flex: 1;
|
||||
}
|
||||
.settings-sub-pane .left {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.settings-sub-pane-element {
|
||||
text-align: left;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.moderator-settings-wrapper {
|
||||
padding-top: 20px;
|
||||
}
|
||||
|
||||
.profile-edit-field {
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.calendar-tab {
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
font-size: 14px;
|
||||
min-height: 100px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.calendar-tab-sign-in {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.sign-out-cta {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: $smallScreen) {
|
||||
.device-selection {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.more-tab {
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
.speaker-stats {
|
||||
list-style: none;
|
||||
.row{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
.avatar {
|
||||
width: 32px;
|
||||
margin-right: 16px;
|
||||
}
|
||||
.name-time {
|
||||
width: calc(100% - 48px);
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
|
||||
}
|
||||
.name-time_expressions-on {
|
||||
width: calc(47% - 48px);
|
||||
}
|
||||
.expressions {
|
||||
width: calc(53% - 29px);
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
.expression {
|
||||
width: 30px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,207 +0,0 @@
|
||||
.virtual-background-dialog {
|
||||
margin-left: -10px;
|
||||
position: relative;
|
||||
max-height: 300px;
|
||||
color: white;
|
||||
display: inline-grid;
|
||||
grid-template-columns: auto auto auto auto auto;
|
||||
column-gap: 9px;
|
||||
cursor: pointer;
|
||||
.desktop-share:hover,
|
||||
.thumbnail:hover,
|
||||
.blur:hover,
|
||||
.slight-blur:hover,
|
||||
.virtual-background-none:hover {
|
||||
opacity: 0.5;
|
||||
border: 2px solid #99bbf3;
|
||||
@media (max-width: 632px) {
|
||||
height: 60px;
|
||||
width: 60px;
|
||||
}
|
||||
}
|
||||
.background-option {
|
||||
margin-top: 8px;
|
||||
border-radius: 6px;
|
||||
height: 60px;
|
||||
width: 107px;
|
||||
text-align: center;
|
||||
justify-content: center;
|
||||
font-weight: bold;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.thumbnail {
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.thumbnail:hover ~ .delete-image-icon {
|
||||
display: block;
|
||||
}
|
||||
.thumbnail-selected {
|
||||
object-fit: cover;
|
||||
border: 2px solid #246fe5;
|
||||
}
|
||||
.blur {
|
||||
box-shadow: inset 0 0 12px #000000;
|
||||
background: #7e8287;
|
||||
padding: 0 10px;
|
||||
}
|
||||
.blur-selected {
|
||||
box-shadow: inset 0 0 12px #000000;
|
||||
background: #7e8287;
|
||||
border: 2px solid #246fe5;
|
||||
padding: 0 10px;
|
||||
}
|
||||
.slight-blur {
|
||||
box-shadow: inset 0 0 12px #000000;
|
||||
background: #a4a4a4;
|
||||
padding: 0 10px;
|
||||
}
|
||||
.slight-blur-selected {
|
||||
box-shadow: inset 0 0 12px #000000;
|
||||
background: #a4a4a4;
|
||||
border: 2px solid #246fe5;
|
||||
padding: 0 10px;
|
||||
}
|
||||
.virtual-background-none {
|
||||
background: #525252;
|
||||
padding: 0 10px;
|
||||
}
|
||||
.none-selected {
|
||||
background: #525252;
|
||||
border: 2px solid #246fe5;
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
.desktop-share {
|
||||
background: #525252;
|
||||
}
|
||||
.desktop-share-selected {
|
||||
background: #525252;
|
||||
border: 2px solid #246fe5;
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
@media (max-width: 632px) {
|
||||
font-size: 1.5vw;
|
||||
.desktop-share,
|
||||
.virtual-background-none,
|
||||
.thumbnail,
|
||||
.blur,
|
||||
.slight-blur {
|
||||
height: 60px;
|
||||
width: 60px;
|
||||
}
|
||||
.desktop-share-selected,
|
||||
.thumbnail-selected,
|
||||
.none-selected,
|
||||
.blur-selected,
|
||||
.slight-blur-selected {
|
||||
height: 60px;
|
||||
width: 60px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 360px) {
|
||||
grid-template-columns: auto auto auto;
|
||||
}
|
||||
}
|
||||
|
||||
.modal-dialog-form .virtual-background-loading {
|
||||
overflow: hidden;
|
||||
position: fixed;
|
||||
left: 50%;
|
||||
margin-top: 10px;
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
.modal-dialog-form .video-preview {
|
||||
height: 250px;
|
||||
}
|
||||
.file-upload-btn {
|
||||
display: none;
|
||||
}
|
||||
.file-upload-label {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
line-height: 20px;
|
||||
margin-left: -10px;
|
||||
margin-top: 16px;
|
||||
margin-bottom: 8px;
|
||||
color: #669aec;
|
||||
display: inline-flex;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.delete-image-icon {
|
||||
background: #3d3d3d;
|
||||
position: absolute;
|
||||
display: none;
|
||||
left: 96;
|
||||
bottom: 51;
|
||||
@media (max-width: 632px) {
|
||||
left: 51px;
|
||||
}
|
||||
}
|
||||
|
||||
.delete-image-icon:hover {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.thumbnail-container {
|
||||
position: relative;
|
||||
&:focus-within {
|
||||
.thumbnail ~ .delete-image-icon {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.add-background {
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
.apply-background-btn {
|
||||
margin-top: 16px;
|
||||
float: right;
|
||||
}
|
||||
|
||||
.video-background-preview-entry {
|
||||
margin-left: -10px;
|
||||
height: 250px;
|
||||
width: 570px;
|
||||
margin-bottom: 8px;
|
||||
z-index: 2;
|
||||
@media (max-width: 632px) {
|
||||
max-width: 336;
|
||||
}
|
||||
}
|
||||
|
||||
.virtual-background-preview-video {
|
||||
margin-left: -10;
|
||||
border-radius: 6px;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
width: 100%;
|
||||
}
|
||||
.video-preview-loader {
|
||||
border-radius: 6px;
|
||||
background-color: transparent;
|
||||
height: 250px;
|
||||
margin-bottom: 8px;
|
||||
width: 572px;
|
||||
position: fixed;
|
||||
z-index: 2;
|
||||
@media (min-width: 432px) and (max-width: 632px) {
|
||||
width: 340px;
|
||||
}
|
||||
}
|
||||
|
||||
.video-preview-loader svg {
|
||||
position: absolute;
|
||||
top: 40%;
|
||||
left: 45%;
|
||||
}
|
||||
|
||||
.dialog-margin-top{
|
||||
margin-top: 44px;
|
||||
}
|
||||
@@ -1,71 +0,0 @@
|
||||
.con-status {
|
||||
border-radius: 6px;
|
||||
color: #fff;
|
||||
font-size: 12px;
|
||||
letter-spacing: 0.16px;
|
||||
line-height: 16px;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
|
||||
&-header {
|
||||
background-color: rgba(0, 0, 0, 0.7);
|
||||
align-items: center;
|
||||
display: flex;
|
||||
padding: 14px 16px;
|
||||
}
|
||||
|
||||
&-circle {
|
||||
border-radius: 50%;
|
||||
display: inline-block;
|
||||
padding: 4px;
|
||||
margin-right: 16px;
|
||||
}
|
||||
|
||||
&--good {
|
||||
background: #31B76A;
|
||||
}
|
||||
|
||||
&--poor {
|
||||
background: #E12D2D;
|
||||
}
|
||||
|
||||
&--non-optimal {
|
||||
background: #E39623;
|
||||
}
|
||||
|
||||
&-arrow {
|
||||
margin-left: auto;
|
||||
transition: background-color 0.16s ease-out;
|
||||
|
||||
&--up {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
||||
&>svg {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background-color: rgba(1,1,1, 0.1);
|
||||
}
|
||||
}
|
||||
|
||||
&-text {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
&-details {
|
||||
background-color: rgba(0, 0, 0, 0.7);
|
||||
border-top: 1px solid #5E6D7A;
|
||||
padding: 16px;
|
||||
transition: opacity 0.16s ease-out;
|
||||
|
||||
&-visible {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
&-hidden {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
.device {
|
||||
&-status {
|
||||
align-items: center;
|
||||
color: #fff;
|
||||
display: flex;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
padding: 6px;
|
||||
text-align: center;
|
||||
|
||||
&-error {
|
||||
align-items: flex-start;
|
||||
background-color: #F8AE1A;
|
||||
border-radius: 6px;
|
||||
color: #040404;
|
||||
padding: 12px 16px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
span {
|
||||
margin-left: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
&-icon {
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
display: inline-block;
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
|
||||
&--ok {
|
||||
svg path {
|
||||
fill: #189b55;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12,11 +12,29 @@
|
||||
margin: 8px;
|
||||
}
|
||||
|
||||
.lobby-chat-container {
|
||||
background-color: $chatBackgroundColor;
|
||||
width: 100%;
|
||||
height: 314px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
margin-bottom: 16px;
|
||||
border-radius: 5px;
|
||||
.lobby-chat-header {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.joining-message {
|
||||
color: white;
|
||||
margin: 24px auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.open-chat-button {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,3 +58,149 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#notification-participant-list {
|
||||
background-color: $newToolbarBackgroundColor;
|
||||
border: 1px solid rgba(255, 255, 255, .4);
|
||||
border-radius: 8px;
|
||||
left: 0;
|
||||
margin: 20px;
|
||||
max-height: 600px;
|
||||
overflow: hidden;
|
||||
overflow-y: auto;
|
||||
position: fixed;
|
||||
top: 30px;
|
||||
z-index: $toolbarZ + 1;
|
||||
|
||||
&:empty {
|
||||
border: none;
|
||||
}
|
||||
|
||||
&.toolbox-visible {
|
||||
// Same as toolbox subject position
|
||||
top: 120px;
|
||||
}
|
||||
|
||||
&.avoid-chat {
|
||||
left: 315px;
|
||||
}
|
||||
|
||||
.title {
|
||||
background-color: rgba(0, 0, 0, .2);
|
||||
font-size: 1.2em;
|
||||
padding: 15px
|
||||
}
|
||||
|
||||
button {
|
||||
align-self: stretch;
|
||||
margin-bottom: 8px 0;
|
||||
padding: 12px;
|
||||
transition: .2s transform ease;
|
||||
|
||||
&:disabled {
|
||||
opacity: .5;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
transform: scale(1.05);
|
||||
|
||||
&:disabled {
|
||||
transform: none;
|
||||
}
|
||||
}
|
||||
|
||||
&.borderLess {
|
||||
background-color: transparent;
|
||||
border-width: 0;
|
||||
}
|
||||
|
||||
&.primary {
|
||||
background-color: rgb(3, 118, 218);
|
||||
border-width: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.knocking-participants-container {
|
||||
list-style-type: none;
|
||||
padding: 0 15px 15px 15px;
|
||||
}
|
||||
|
||||
.knocking-participant {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
margin: 8px 0;
|
||||
|
||||
.details {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
flex-direction: column;
|
||||
justify-content: space-evenly;
|
||||
margin: 0 30px 0 10px;
|
||||
}
|
||||
|
||||
button {
|
||||
align-self: unset;
|
||||
margin: 0 5px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 300px) {
|
||||
#knocking-participant-list {
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
|
||||
.avatar {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.knocking-participant {
|
||||
flex-direction: column;
|
||||
|
||||
.details {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1000px) {
|
||||
.lobby-screen-content {
|
||||
|
||||
.lobby-chat-container {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 255;
|
||||
|
||||
&.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.lobby-chat-header {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
padding-top: 20px;
|
||||
padding-left: 16px;
|
||||
padding-right: 16px;
|
||||
|
||||
.title {
|
||||
flex: 1;
|
||||
color: #fff;
|
||||
font-size: 20px;
|
||||
font-weight: 600;
|
||||
line-height: 28px;
|
||||
letter-spacing: -1.2%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.open-chat-button {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
@import 'connection-status';
|
||||
@import 'device-status';
|
||||
@import 'lobby';
|
||||
@import 'premeeting-screens';
|
||||
@import 'prejoin';
|
||||
|
||||
@@ -116,72 +116,3 @@
|
||||
margin: 8px 0 16px 0;
|
||||
}
|
||||
}
|
||||
|
||||
.prejoin-dialog-dialin {
|
||||
text-align: center;
|
||||
|
||||
&-header {
|
||||
align-items: center;
|
||||
margin: 16px 0 32px 16px;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
&-icon {
|
||||
margin-right: 16px;
|
||||
}
|
||||
|
||||
&-num {
|
||||
background: #3e474f;
|
||||
border-radius: 4px;
|
||||
display: inline-block;
|
||||
font-size: 15px;
|
||||
line-height: 24px;
|
||||
margin: 4px;
|
||||
padding: 8px;
|
||||
|
||||
&-container {
|
||||
min-height: 48px;
|
||||
margin: 8px 0;
|
||||
}
|
||||
}
|
||||
|
||||
&-link {
|
||||
color: #6FB1EA;
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
font-size: 13px;
|
||||
line-height: 20px;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
&-spaced-label {
|
||||
margin-bottom: 16px;
|
||||
margin-top: 28px;
|
||||
}
|
||||
|
||||
&-btns {
|
||||
&> div {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.prejoin-dialog-calling {
|
||||
padding: 16px;
|
||||
text-align: center;
|
||||
|
||||
&-header {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
&-label {
|
||||
font-size: 15px;
|
||||
margin: 8px 0 16px 0;
|
||||
}
|
||||
|
||||
&-number {
|
||||
font-size: 19px;
|
||||
line-height: 28px;
|
||||
margin: 16px 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,30 +23,6 @@
|
||||
padding: 8px 0;
|
||||
}
|
||||
|
||||
&-dropdown-btn {
|
||||
align-items: center;
|
||||
color: #1C2025;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
height: 40px;
|
||||
font-size: 15px;
|
||||
line-height: 24px;
|
||||
padding: 0 16px;
|
||||
|
||||
&:hover {
|
||||
background-color: #DAEBFA;
|
||||
}
|
||||
}
|
||||
|
||||
&-dropdown-icon {
|
||||
display: inline-block;
|
||||
margin-right: 16px;
|
||||
|
||||
& > svg {
|
||||
fill: #1C2025;
|
||||
}
|
||||
}
|
||||
|
||||
&-dropdown-container {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
z-index: $toolbarZ + 1;
|
||||
z-index: $toolbarZ + 2;
|
||||
|
||||
.action-btn {
|
||||
border-radius: 6px;
|
||||
@@ -82,7 +82,7 @@
|
||||
flex-direction: column;
|
||||
flex-shrink: 0;
|
||||
height: 100%;
|
||||
margin: 0 110px;
|
||||
margin: 0 30px;
|
||||
padding: 24px 0 16px;
|
||||
position: relative;
|
||||
width: $prejoinDefaultContentWidth;
|
||||
@@ -137,6 +137,7 @@
|
||||
}
|
||||
|
||||
.toolbox-content-items {
|
||||
@include ltr;
|
||||
background: transparent;
|
||||
box-shadow: none;
|
||||
display: flex;
|
||||
@@ -154,33 +155,20 @@
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1000px) {
|
||||
@media (max-width: 720px) {
|
||||
flex-direction: column-reverse;
|
||||
|
||||
.content {
|
||||
height: auto;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.con-status {
|
||||
margin: 24px auto;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
width: $prejoinDefaultContentWidth;
|
||||
}
|
||||
}
|
||||
|
||||
// mobile phone landscape
|
||||
@media (max-height: 420px) {
|
||||
flex-direction: row;
|
||||
|
||||
div.content {
|
||||
padding: 16px 16px 0 16px;
|
||||
}
|
||||
|
||||
.con-status {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 400px) {
|
||||
@@ -200,11 +188,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
.con-status {
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.device-status-error {
|
||||
border-radius: 0;
|
||||
margin: 0 -16px;
|
||||
|
||||
@@ -46,11 +46,6 @@ $reloadProgressBarBg: #0074E0;
|
||||
/**
|
||||
* Dialog colors
|
||||
**/
|
||||
$auiDialogColor: #eceef1;
|
||||
$auiDialogBg: #253858;
|
||||
$auiDialogContentBg: #344563;
|
||||
$auiBorderColor: #253858;
|
||||
$dialogTitleFontWeight: 400;
|
||||
$dialogErrorText: #344563;
|
||||
|
||||
/**
|
||||
|
||||
2
debian/control
vendored
2
debian/control
vendored
@@ -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.11, lua-sec
|
||||
Depends: openssl, prosody (>= 0.11.0) | prosody-trunk | prosody-0.12 | prosody-0.11, lua-sec
|
||||
Replaces: jitsi-meet-tokens
|
||||
Description: Prosody configuration for Jitsi Meet
|
||||
Jitsi Meet is a WebRTC JavaScript application that uses Jitsi
|
||||
|
||||
@@ -14,6 +14,16 @@ cross_domain_bosh = false;
|
||||
consider_bosh_secure = true;
|
||||
-- https_ports = { }; -- Remove this line to prevent listening on port 5284
|
||||
|
||||
-- by default prosody 0.12 sends cors headers, if you want to disable it uncomment the following (the config is available on 0.12.1)
|
||||
--http_cors_override = {
|
||||
-- bosh = {
|
||||
-- enabled = false;
|
||||
-- };
|
||||
-- websocket = {
|
||||
-- enabled = false;
|
||||
-- };
|
||||
--}
|
||||
|
||||
-- https://ssl-config.mozilla.org/#server=haproxy&version=2.1&config=intermediate&openssl=1.1.0g&guideline=5.4
|
||||
ssl = {
|
||||
protocol = "tlsv1_2+";
|
||||
@@ -83,6 +93,7 @@ Component "breakout.jitmeet.example.com" "muc"
|
||||
"muc_domain_mapper";
|
||||
--"token_verification";
|
||||
"muc_rate_limit";
|
||||
"polls";
|
||||
}
|
||||
admins = { "focusUser@auth.jitmeet.example.com" }
|
||||
muc_room_locking = false
|
||||
|
||||
@@ -4,6 +4,16 @@ types {
|
||||
# nginx's default mime.types doesn't include a mapping for wasm
|
||||
application/wasm wasm;
|
||||
}
|
||||
upstream prosody {
|
||||
zone upstreams 64K;
|
||||
server 127.0.0.1:5280;
|
||||
keepalive 2;
|
||||
}
|
||||
upstream jvb1 {
|
||||
zone upstreams 64K;
|
||||
server 127.0.0.1:9090;
|
||||
keepalive 2;
|
||||
}
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
@@ -77,14 +87,16 @@ server {
|
||||
|
||||
# BOSH
|
||||
location = /http-bind {
|
||||
proxy_pass http://127.0.0.1:5280/http-bind?prefix=$prefix&$args;
|
||||
proxy_pass http://prosody/http-bind?prefix=$prefix&$args;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header X-Forwarded-For $remote_addr;
|
||||
proxy_set_header Host $http_host;
|
||||
proxy_set_header Connection "";
|
||||
}
|
||||
|
||||
# xmpp websockets
|
||||
location = /xmpp-websocket {
|
||||
proxy_pass http://127.0.0.1:5280/xmpp-websocket?prefix=$prefix&$args;
|
||||
proxy_pass http://prosody/xmpp-websocket?prefix=$prefix&$args;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
@@ -94,7 +106,7 @@ server {
|
||||
|
||||
# colibri (JVB) websockets for jvb1
|
||||
location ~ ^/colibri-ws/default-id/(.*) {
|
||||
proxy_pass http://127.0.0.1:9090/colibri-ws/default-id/$1$is_args$args;
|
||||
proxy_pass http://jvb1/colibri-ws/default-id/$1$is_args$args;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
|
||||
BIN
images/GIPHY_icon.png
Normal file
BIN
images/GIPHY_icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 284 B |
BIN
images/GIPHY_logo.png
Normal file
BIN
images/GIPHY_logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.0 KiB |
BIN
images/icon-info.png
Normal file
BIN
images/icon-info.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
@@ -91,7 +91,7 @@ var interfaceConfig = {
|
||||
|
||||
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: 1, // 1:1
|
||||
LOCAL_THUMBNAIL_RATIO: 16 / 9, // 16:9
|
||||
|
||||
/**
|
||||
* Maximum coefficient of the ratio of the large video to the visible area
|
||||
|
||||
12
ios/Podfile
12
ios/Podfile
@@ -29,24 +29,18 @@ target 'JitsiMeetSDK' do
|
||||
# Native pod dependencies
|
||||
#
|
||||
|
||||
pod 'CocoaLumberjack', '~>3.5.3'
|
||||
pod 'ObjectiveDropboxOfficial', '~>6.1.0'
|
||||
pod 'CocoaLumberjack', '3.7.2'
|
||||
pod 'ObjectiveDropboxOfficial', '6.2.3'
|
||||
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|
|
||||
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
|
||||
# https://github.com/facebook/react-native/issues/32351#issuecomment-939157955
|
||||
case target.name
|
||||
when 'RCT-Folly'
|
||||
target.build_configurations.each do |config|
|
||||
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.0'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
468
ios/Podfile.lock
468
ios/Podfile.lock
@@ -9,18 +9,18 @@ PODS:
|
||||
- AppAuth/Core (1.4.0)
|
||||
- AppAuth/ExternalUserAgent (1.4.0)
|
||||
- boost (1.76.0)
|
||||
- CocoaLumberjack (3.5.3):
|
||||
- CocoaLumberjack/Core (= 3.5.3)
|
||||
- CocoaLumberjack/Core (3.5.3)
|
||||
- CocoaLumberjack (3.7.2):
|
||||
- CocoaLumberjack/Core (= 3.7.2)
|
||||
- CocoaLumberjack/Core (3.7.2)
|
||||
- DoubleConversion (1.1.6)
|
||||
- FBLazyVector (0.66.4)
|
||||
- FBReactNativeSpec (0.66.4):
|
||||
- FBLazyVector (0.67.4)
|
||||
- FBReactNativeSpec (0.67.4):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTRequired (= 0.66.4)
|
||||
- RCTTypeSafety (= 0.66.4)
|
||||
- React-Core (= 0.66.4)
|
||||
- React-jsi (= 0.66.4)
|
||||
- ReactCommon/turbomodule/core (= 0.66.4)
|
||||
- RCTRequired (= 0.67.4)
|
||||
- RCTTypeSafety (= 0.67.4)
|
||||
- React-Core (= 0.67.4)
|
||||
- React-jsi (= 0.67.4)
|
||||
- ReactCommon/turbomodule/core (= 0.67.4)
|
||||
- Firebase/Analytics (6.33.0):
|
||||
- Firebase/Core
|
||||
- Firebase/Core (6.33.0):
|
||||
@@ -66,6 +66,11 @@ PODS:
|
||||
- GoogleUtilities/UserDefaults (~> 6.7)
|
||||
- PromisesObjC (~> 1.2)
|
||||
- fmt (6.2.1)
|
||||
- Giphy (2.1.20):
|
||||
- libwebp
|
||||
- giphy-react-native-sdk (1.7.0):
|
||||
- Giphy (= 2.1.20)
|
||||
- React-Core
|
||||
- glog (0.3.5)
|
||||
- GoogleAppMeasurement (6.8.3):
|
||||
- GoogleUtilities/AppDelegateSwizzler (~> 6.7)
|
||||
@@ -102,12 +107,21 @@ PODS:
|
||||
- AppAuth/Core (~> 1.4)
|
||||
- GTMSessionFetcher/Core (~> 1.5)
|
||||
- GTMSessionFetcher/Core (1.7.0)
|
||||
- libwebp (1.2.1):
|
||||
- libwebp/demux (= 1.2.1)
|
||||
- libwebp/mux (= 1.2.1)
|
||||
- libwebp/webp (= 1.2.1)
|
||||
- libwebp/demux (1.2.1):
|
||||
- libwebp/webp
|
||||
- libwebp/mux (1.2.1):
|
||||
- libwebp/demux
|
||||
- libwebp/webp (1.2.1)
|
||||
- nanopb (1.30906.0):
|
||||
- nanopb/decode (= 1.30906.0)
|
||||
- nanopb/encode (= 1.30906.0)
|
||||
- nanopb/decode (1.30906.0)
|
||||
- nanopb/encode (1.30906.0)
|
||||
- ObjectiveDropboxOfficial (6.1.0)
|
||||
- ObjectiveDropboxOfficial (6.2.3)
|
||||
- PromisesObjC (1.2.12)
|
||||
- RCT-Folly (2021.06.28.00-v2):
|
||||
- boost
|
||||
@@ -120,192 +134,192 @@ PODS:
|
||||
- DoubleConversion
|
||||
- fmt (~> 6.2.1)
|
||||
- glog
|
||||
- RCTRequired (0.66.4)
|
||||
- RCTTypeSafety (0.66.4):
|
||||
- FBLazyVector (= 0.66.4)
|
||||
- RCTRequired (0.67.4)
|
||||
- RCTTypeSafety (0.67.4):
|
||||
- FBLazyVector (= 0.67.4)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTRequired (= 0.66.4)
|
||||
- React-Core (= 0.66.4)
|
||||
- React (0.66.4):
|
||||
- React-Core (= 0.66.4)
|
||||
- React-Core/DevSupport (= 0.66.4)
|
||||
- React-Core/RCTWebSocket (= 0.66.4)
|
||||
- React-RCTActionSheet (= 0.66.4)
|
||||
- React-RCTAnimation (= 0.66.4)
|
||||
- React-RCTBlob (= 0.66.4)
|
||||
- React-RCTImage (= 0.66.4)
|
||||
- React-RCTLinking (= 0.66.4)
|
||||
- React-RCTNetwork (= 0.66.4)
|
||||
- React-RCTSettings (= 0.66.4)
|
||||
- React-RCTText (= 0.66.4)
|
||||
- React-RCTVibration (= 0.66.4)
|
||||
- React-callinvoker (0.66.4)
|
||||
- React-Core (0.66.4):
|
||||
- RCTRequired (= 0.67.4)
|
||||
- React-Core (= 0.67.4)
|
||||
- React (0.67.4):
|
||||
- React-Core (= 0.67.4)
|
||||
- React-Core/DevSupport (= 0.67.4)
|
||||
- React-Core/RCTWebSocket (= 0.67.4)
|
||||
- React-RCTActionSheet (= 0.67.4)
|
||||
- React-RCTAnimation (= 0.67.4)
|
||||
- React-RCTBlob (= 0.67.4)
|
||||
- React-RCTImage (= 0.67.4)
|
||||
- React-RCTLinking (= 0.67.4)
|
||||
- React-RCTNetwork (= 0.67.4)
|
||||
- React-RCTSettings (= 0.67.4)
|
||||
- React-RCTText (= 0.67.4)
|
||||
- React-RCTVibration (= 0.67.4)
|
||||
- React-callinvoker (0.67.4)
|
||||
- React-Core (0.67.4):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default (= 0.66.4)
|
||||
- React-cxxreact (= 0.66.4)
|
||||
- React-jsi (= 0.66.4)
|
||||
- React-jsiexecutor (= 0.66.4)
|
||||
- React-perflogger (= 0.66.4)
|
||||
- React-Core/Default (= 0.67.4)
|
||||
- React-cxxreact (= 0.67.4)
|
||||
- React-jsi (= 0.67.4)
|
||||
- React-jsiexecutor (= 0.67.4)
|
||||
- React-perflogger (= 0.67.4)
|
||||
- Yoga
|
||||
- React-Core/CoreModulesHeaders (0.66.4):
|
||||
- React-Core/CoreModulesHeaders (0.67.4):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.66.4)
|
||||
- React-jsi (= 0.66.4)
|
||||
- React-jsiexecutor (= 0.66.4)
|
||||
- React-perflogger (= 0.66.4)
|
||||
- React-cxxreact (= 0.67.4)
|
||||
- React-jsi (= 0.67.4)
|
||||
- React-jsiexecutor (= 0.67.4)
|
||||
- React-perflogger (= 0.67.4)
|
||||
- Yoga
|
||||
- React-Core/Default (0.66.4):
|
||||
- React-Core/Default (0.67.4):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-cxxreact (= 0.66.4)
|
||||
- React-jsi (= 0.66.4)
|
||||
- React-jsiexecutor (= 0.66.4)
|
||||
- React-perflogger (= 0.66.4)
|
||||
- React-cxxreact (= 0.67.4)
|
||||
- React-jsi (= 0.67.4)
|
||||
- React-jsiexecutor (= 0.67.4)
|
||||
- React-perflogger (= 0.67.4)
|
||||
- Yoga
|
||||
- React-Core/DevSupport (0.66.4):
|
||||
- React-Core/DevSupport (0.67.4):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default (= 0.66.4)
|
||||
- React-Core/RCTWebSocket (= 0.66.4)
|
||||
- React-cxxreact (= 0.66.4)
|
||||
- React-jsi (= 0.66.4)
|
||||
- React-jsiexecutor (= 0.66.4)
|
||||
- React-jsinspector (= 0.66.4)
|
||||
- React-perflogger (= 0.66.4)
|
||||
- React-Core/Default (= 0.67.4)
|
||||
- React-Core/RCTWebSocket (= 0.67.4)
|
||||
- React-cxxreact (= 0.67.4)
|
||||
- React-jsi (= 0.67.4)
|
||||
- React-jsiexecutor (= 0.67.4)
|
||||
- React-jsinspector (= 0.67.4)
|
||||
- React-perflogger (= 0.67.4)
|
||||
- Yoga
|
||||
- React-Core/RCTActionSheetHeaders (0.66.4):
|
||||
- React-Core/RCTActionSheetHeaders (0.67.4):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.66.4)
|
||||
- React-jsi (= 0.66.4)
|
||||
- React-jsiexecutor (= 0.66.4)
|
||||
- React-perflogger (= 0.66.4)
|
||||
- React-cxxreact (= 0.67.4)
|
||||
- React-jsi (= 0.67.4)
|
||||
- React-jsiexecutor (= 0.67.4)
|
||||
- React-perflogger (= 0.67.4)
|
||||
- Yoga
|
||||
- React-Core/RCTAnimationHeaders (0.66.4):
|
||||
- React-Core/RCTAnimationHeaders (0.67.4):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.66.4)
|
||||
- React-jsi (= 0.66.4)
|
||||
- React-jsiexecutor (= 0.66.4)
|
||||
- React-perflogger (= 0.66.4)
|
||||
- React-cxxreact (= 0.67.4)
|
||||
- React-jsi (= 0.67.4)
|
||||
- React-jsiexecutor (= 0.67.4)
|
||||
- React-perflogger (= 0.67.4)
|
||||
- Yoga
|
||||
- React-Core/RCTBlobHeaders (0.66.4):
|
||||
- React-Core/RCTBlobHeaders (0.67.4):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.66.4)
|
||||
- React-jsi (= 0.66.4)
|
||||
- React-jsiexecutor (= 0.66.4)
|
||||
- React-perflogger (= 0.66.4)
|
||||
- React-cxxreact (= 0.67.4)
|
||||
- React-jsi (= 0.67.4)
|
||||
- React-jsiexecutor (= 0.67.4)
|
||||
- React-perflogger (= 0.67.4)
|
||||
- Yoga
|
||||
- React-Core/RCTImageHeaders (0.66.4):
|
||||
- React-Core/RCTImageHeaders (0.67.4):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.66.4)
|
||||
- React-jsi (= 0.66.4)
|
||||
- React-jsiexecutor (= 0.66.4)
|
||||
- React-perflogger (= 0.66.4)
|
||||
- React-cxxreact (= 0.67.4)
|
||||
- React-jsi (= 0.67.4)
|
||||
- React-jsiexecutor (= 0.67.4)
|
||||
- React-perflogger (= 0.67.4)
|
||||
- Yoga
|
||||
- React-Core/RCTLinkingHeaders (0.66.4):
|
||||
- React-Core/RCTLinkingHeaders (0.67.4):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.66.4)
|
||||
- React-jsi (= 0.66.4)
|
||||
- React-jsiexecutor (= 0.66.4)
|
||||
- React-perflogger (= 0.66.4)
|
||||
- React-cxxreact (= 0.67.4)
|
||||
- React-jsi (= 0.67.4)
|
||||
- React-jsiexecutor (= 0.67.4)
|
||||
- React-perflogger (= 0.67.4)
|
||||
- Yoga
|
||||
- React-Core/RCTNetworkHeaders (0.66.4):
|
||||
- React-Core/RCTNetworkHeaders (0.67.4):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.66.4)
|
||||
- React-jsi (= 0.66.4)
|
||||
- React-jsiexecutor (= 0.66.4)
|
||||
- React-perflogger (= 0.66.4)
|
||||
- React-cxxreact (= 0.67.4)
|
||||
- React-jsi (= 0.67.4)
|
||||
- React-jsiexecutor (= 0.67.4)
|
||||
- React-perflogger (= 0.67.4)
|
||||
- Yoga
|
||||
- React-Core/RCTSettingsHeaders (0.66.4):
|
||||
- React-Core/RCTSettingsHeaders (0.67.4):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.66.4)
|
||||
- React-jsi (= 0.66.4)
|
||||
- React-jsiexecutor (= 0.66.4)
|
||||
- React-perflogger (= 0.66.4)
|
||||
- React-cxxreact (= 0.67.4)
|
||||
- React-jsi (= 0.67.4)
|
||||
- React-jsiexecutor (= 0.67.4)
|
||||
- React-perflogger (= 0.67.4)
|
||||
- Yoga
|
||||
- React-Core/RCTTextHeaders (0.66.4):
|
||||
- React-Core/RCTTextHeaders (0.67.4):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.66.4)
|
||||
- React-jsi (= 0.66.4)
|
||||
- React-jsiexecutor (= 0.66.4)
|
||||
- React-perflogger (= 0.66.4)
|
||||
- React-cxxreact (= 0.67.4)
|
||||
- React-jsi (= 0.67.4)
|
||||
- React-jsiexecutor (= 0.67.4)
|
||||
- React-perflogger (= 0.67.4)
|
||||
- Yoga
|
||||
- React-Core/RCTVibrationHeaders (0.66.4):
|
||||
- React-Core/RCTVibrationHeaders (0.67.4):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.66.4)
|
||||
- React-jsi (= 0.66.4)
|
||||
- React-jsiexecutor (= 0.66.4)
|
||||
- React-perflogger (= 0.66.4)
|
||||
- React-cxxreact (= 0.67.4)
|
||||
- React-jsi (= 0.67.4)
|
||||
- React-jsiexecutor (= 0.67.4)
|
||||
- React-perflogger (= 0.67.4)
|
||||
- Yoga
|
||||
- React-Core/RCTWebSocket (0.66.4):
|
||||
- React-Core/RCTWebSocket (0.67.4):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default (= 0.66.4)
|
||||
- React-cxxreact (= 0.66.4)
|
||||
- React-jsi (= 0.66.4)
|
||||
- React-jsiexecutor (= 0.66.4)
|
||||
- React-perflogger (= 0.66.4)
|
||||
- React-Core/Default (= 0.67.4)
|
||||
- React-cxxreact (= 0.67.4)
|
||||
- React-jsi (= 0.67.4)
|
||||
- React-jsiexecutor (= 0.67.4)
|
||||
- React-perflogger (= 0.67.4)
|
||||
- Yoga
|
||||
- React-CoreModules (0.66.4):
|
||||
- FBReactNativeSpec (= 0.66.4)
|
||||
- React-CoreModules (0.67.4):
|
||||
- FBReactNativeSpec (= 0.67.4)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.66.4)
|
||||
- React-Core/CoreModulesHeaders (= 0.66.4)
|
||||
- React-jsi (= 0.66.4)
|
||||
- React-RCTImage (= 0.66.4)
|
||||
- ReactCommon/turbomodule/core (= 0.66.4)
|
||||
- React-cxxreact (0.66.4):
|
||||
- RCTTypeSafety (= 0.67.4)
|
||||
- React-Core/CoreModulesHeaders (= 0.67.4)
|
||||
- React-jsi (= 0.67.4)
|
||||
- React-RCTImage (= 0.67.4)
|
||||
- ReactCommon/turbomodule/core (= 0.67.4)
|
||||
- React-cxxreact (0.67.4):
|
||||
- boost (= 1.76.0)
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-callinvoker (= 0.66.4)
|
||||
- React-jsi (= 0.66.4)
|
||||
- React-jsinspector (= 0.66.4)
|
||||
- React-logger (= 0.66.4)
|
||||
- React-perflogger (= 0.66.4)
|
||||
- React-runtimeexecutor (= 0.66.4)
|
||||
- React-jsi (0.66.4):
|
||||
- React-callinvoker (= 0.67.4)
|
||||
- React-jsi (= 0.67.4)
|
||||
- React-jsinspector (= 0.67.4)
|
||||
- React-logger (= 0.67.4)
|
||||
- React-perflogger (= 0.67.4)
|
||||
- React-runtimeexecutor (= 0.67.4)
|
||||
- React-jsi (0.67.4):
|
||||
- boost (= 1.76.0)
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-jsi/Default (= 0.66.4)
|
||||
- React-jsi/Default (0.66.4):
|
||||
- React-jsi/Default (= 0.67.4)
|
||||
- React-jsi/Default (0.67.4):
|
||||
- boost (= 1.76.0)
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-jsiexecutor (0.66.4):
|
||||
- React-jsiexecutor (0.67.4):
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-cxxreact (= 0.66.4)
|
||||
- React-jsi (= 0.66.4)
|
||||
- React-perflogger (= 0.66.4)
|
||||
- React-jsinspector (0.66.4)
|
||||
- React-logger (0.66.4):
|
||||
- React-cxxreact (= 0.67.4)
|
||||
- React-jsi (= 0.67.4)
|
||||
- React-perflogger (= 0.67.4)
|
||||
- React-jsinspector (0.67.4)
|
||||
- React-logger (0.67.4):
|
||||
- glog
|
||||
- react-native-background-timer (2.4.1):
|
||||
- React-Core
|
||||
@@ -330,75 +344,75 @@ PODS:
|
||||
- react-native-video/Video (= 5.2.0)
|
||||
- react-native-video/Video (5.2.0):
|
||||
- React-Core
|
||||
- react-native-webrtc (1.94.1):
|
||||
- react-native-webrtc (1.100.0):
|
||||
- React-Core
|
||||
- react-native-webview (11.15.1):
|
||||
- React-Core
|
||||
- React-perflogger (0.66.4)
|
||||
- React-RCTActionSheet (0.66.4):
|
||||
- React-Core/RCTActionSheetHeaders (= 0.66.4)
|
||||
- React-RCTAnimation (0.66.4):
|
||||
- FBReactNativeSpec (= 0.66.4)
|
||||
- React-perflogger (0.67.4)
|
||||
- React-RCTActionSheet (0.67.4):
|
||||
- React-Core/RCTActionSheetHeaders (= 0.67.4)
|
||||
- React-RCTAnimation (0.67.4):
|
||||
- FBReactNativeSpec (= 0.67.4)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.66.4)
|
||||
- React-Core/RCTAnimationHeaders (= 0.66.4)
|
||||
- React-jsi (= 0.66.4)
|
||||
- ReactCommon/turbomodule/core (= 0.66.4)
|
||||
- React-RCTBlob (0.66.4):
|
||||
- FBReactNativeSpec (= 0.66.4)
|
||||
- RCTTypeSafety (= 0.67.4)
|
||||
- React-Core/RCTAnimationHeaders (= 0.67.4)
|
||||
- React-jsi (= 0.67.4)
|
||||
- ReactCommon/turbomodule/core (= 0.67.4)
|
||||
- React-RCTBlob (0.67.4):
|
||||
- FBReactNativeSpec (= 0.67.4)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/RCTBlobHeaders (= 0.66.4)
|
||||
- React-Core/RCTWebSocket (= 0.66.4)
|
||||
- React-jsi (= 0.66.4)
|
||||
- React-RCTNetwork (= 0.66.4)
|
||||
- ReactCommon/turbomodule/core (= 0.66.4)
|
||||
- React-RCTImage (0.66.4):
|
||||
- FBReactNativeSpec (= 0.66.4)
|
||||
- React-Core/RCTBlobHeaders (= 0.67.4)
|
||||
- React-Core/RCTWebSocket (= 0.67.4)
|
||||
- React-jsi (= 0.67.4)
|
||||
- React-RCTNetwork (= 0.67.4)
|
||||
- ReactCommon/turbomodule/core (= 0.67.4)
|
||||
- React-RCTImage (0.67.4):
|
||||
- FBReactNativeSpec (= 0.67.4)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.66.4)
|
||||
- React-Core/RCTImageHeaders (= 0.66.4)
|
||||
- React-jsi (= 0.66.4)
|
||||
- React-RCTNetwork (= 0.66.4)
|
||||
- ReactCommon/turbomodule/core (= 0.66.4)
|
||||
- React-RCTLinking (0.66.4):
|
||||
- FBReactNativeSpec (= 0.66.4)
|
||||
- React-Core/RCTLinkingHeaders (= 0.66.4)
|
||||
- React-jsi (= 0.66.4)
|
||||
- ReactCommon/turbomodule/core (= 0.66.4)
|
||||
- React-RCTNetwork (0.66.4):
|
||||
- FBReactNativeSpec (= 0.66.4)
|
||||
- RCTTypeSafety (= 0.67.4)
|
||||
- React-Core/RCTImageHeaders (= 0.67.4)
|
||||
- React-jsi (= 0.67.4)
|
||||
- React-RCTNetwork (= 0.67.4)
|
||||
- ReactCommon/turbomodule/core (= 0.67.4)
|
||||
- React-RCTLinking (0.67.4):
|
||||
- FBReactNativeSpec (= 0.67.4)
|
||||
- React-Core/RCTLinkingHeaders (= 0.67.4)
|
||||
- React-jsi (= 0.67.4)
|
||||
- ReactCommon/turbomodule/core (= 0.67.4)
|
||||
- React-RCTNetwork (0.67.4):
|
||||
- FBReactNativeSpec (= 0.67.4)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.66.4)
|
||||
- React-Core/RCTNetworkHeaders (= 0.66.4)
|
||||
- React-jsi (= 0.66.4)
|
||||
- ReactCommon/turbomodule/core (= 0.66.4)
|
||||
- React-RCTSettings (0.66.4):
|
||||
- FBReactNativeSpec (= 0.66.4)
|
||||
- RCTTypeSafety (= 0.67.4)
|
||||
- React-Core/RCTNetworkHeaders (= 0.67.4)
|
||||
- React-jsi (= 0.67.4)
|
||||
- ReactCommon/turbomodule/core (= 0.67.4)
|
||||
- React-RCTSettings (0.67.4):
|
||||
- FBReactNativeSpec (= 0.67.4)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.66.4)
|
||||
- React-Core/RCTSettingsHeaders (= 0.66.4)
|
||||
- React-jsi (= 0.66.4)
|
||||
- ReactCommon/turbomodule/core (= 0.66.4)
|
||||
- React-RCTText (0.66.4):
|
||||
- React-Core/RCTTextHeaders (= 0.66.4)
|
||||
- React-RCTVibration (0.66.4):
|
||||
- FBReactNativeSpec (= 0.66.4)
|
||||
- RCTTypeSafety (= 0.67.4)
|
||||
- React-Core/RCTSettingsHeaders (= 0.67.4)
|
||||
- React-jsi (= 0.67.4)
|
||||
- ReactCommon/turbomodule/core (= 0.67.4)
|
||||
- React-RCTText (0.67.4):
|
||||
- React-Core/RCTTextHeaders (= 0.67.4)
|
||||
- React-RCTVibration (0.67.4):
|
||||
- FBReactNativeSpec (= 0.67.4)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/RCTVibrationHeaders (= 0.66.4)
|
||||
- React-jsi (= 0.66.4)
|
||||
- ReactCommon/turbomodule/core (= 0.66.4)
|
||||
- React-runtimeexecutor (0.66.4):
|
||||
- React-jsi (= 0.66.4)
|
||||
- ReactCommon/turbomodule/core (0.66.4):
|
||||
- React-Core/RCTVibrationHeaders (= 0.67.4)
|
||||
- React-jsi (= 0.67.4)
|
||||
- ReactCommon/turbomodule/core (= 0.67.4)
|
||||
- React-runtimeexecutor (0.67.4):
|
||||
- React-jsi (= 0.67.4)
|
||||
- ReactCommon/turbomodule/core (0.67.4):
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-callinvoker (= 0.66.4)
|
||||
- React-Core (= 0.66.4)
|
||||
- React-cxxreact (= 0.66.4)
|
||||
- React-jsi (= 0.66.4)
|
||||
- React-logger (= 0.66.4)
|
||||
- React-perflogger (= 0.66.4)
|
||||
- React-callinvoker (= 0.67.4)
|
||||
- React-Core (= 0.67.4)
|
||||
- React-cxxreact (= 0.67.4)
|
||||
- React-jsi (= 0.67.4)
|
||||
- React-logger (= 0.67.4)
|
||||
- React-perflogger (= 0.67.4)
|
||||
- RNCalendarEvents (2.2.0):
|
||||
- React
|
||||
- RNCAsyncStorage (1.15.14):
|
||||
@@ -407,7 +421,7 @@ PODS:
|
||||
- React-Core
|
||||
- RNCMaskedView (0.2.6):
|
||||
- React-Core
|
||||
- RNDefaultPreference (1.4.3):
|
||||
- RNDefaultPreference (1.4.4):
|
||||
- React-Core
|
||||
- RNDeviceInfo (8.4.8):
|
||||
- React-Core
|
||||
@@ -416,7 +430,7 @@ PODS:
|
||||
- RNGoogleSignin (7.0.4):
|
||||
- GoogleSignIn (~> 6.0.0)
|
||||
- React-Core
|
||||
- RNReanimated (1.13.3):
|
||||
- RNReanimated (1.13.4):
|
||||
- React-Core
|
||||
- RNScreens (3.10.1):
|
||||
- React-Core
|
||||
@@ -435,15 +449,16 @@ PODS:
|
||||
DEPENDENCIES:
|
||||
- "amplitude-react-native (from `../node_modules/@amplitude/react-native`)"
|
||||
- boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`)
|
||||
- CocoaLumberjack (~> 3.5.3)
|
||||
- CocoaLumberjack (= 3.7.2)
|
||||
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
|
||||
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
|
||||
- FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`)
|
||||
- Firebase/Analytics (~> 6.33.0)
|
||||
- Firebase/Crashlytics (~> 6.33.0)
|
||||
- Firebase/DynamicLinks (~> 6.33.0)
|
||||
- "giphy-react-native-sdk (from `../node_modules/@giphy/react-native-sdk`)"
|
||||
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
|
||||
- ObjectiveDropboxOfficial (~> 6.1.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`)
|
||||
- RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
|
||||
@@ -510,12 +525,14 @@ SPEC REPOS:
|
||||
- FirebaseDynamicLinks
|
||||
- FirebaseInstallations
|
||||
- fmt
|
||||
- Giphy
|
||||
- GoogleAppMeasurement
|
||||
- GoogleDataTransport
|
||||
- GoogleSignIn
|
||||
- GoogleUtilities
|
||||
- GTMAppAuth
|
||||
- GTMSessionFetcher
|
||||
- libwebp
|
||||
- nanopb
|
||||
- ObjectiveDropboxOfficial
|
||||
- PromisesObjC
|
||||
@@ -531,6 +548,8 @@ EXTERNAL SOURCES:
|
||||
:path: "../node_modules/react-native/Libraries/FBLazyVector"
|
||||
FBReactNativeSpec:
|
||||
:path: "../node_modules/react-native/React/FBReactNativeSpec"
|
||||
giphy-react-native-sdk:
|
||||
:path: "../node_modules/@giphy/react-native-sdk"
|
||||
glog:
|
||||
:podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec"
|
||||
RCT-Folly:
|
||||
@@ -639,10 +658,10 @@ SPEC CHECKSUMS:
|
||||
amplitude-react-native: 0ed8cab759aafaa94961b82122bf56297da607ad
|
||||
AppAuth: 31bcec809a638d7bd2f86ea8a52bd45f6e81e7c7
|
||||
boost: a7c83b31436843459a1961bfd74b96033dc77234
|
||||
CocoaLumberjack: 2f44e60eb91c176d471fdba43b9e3eae6a721947
|
||||
CocoaLumberjack: b7e05132ff94f6ae4dfa9d5bce9141893a21d9da
|
||||
DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662
|
||||
FBLazyVector: e5569e42a1c79ca00521846c223173a57aca1fe1
|
||||
FBReactNativeSpec: fe08c1cd7e2e205718d77ad14b34957cce949b58
|
||||
FBLazyVector: f7b0632c6437e312acf6349288d9aa4cb6d59030
|
||||
FBReactNativeSpec: 0f4e1f4cfeace095694436e7c7fcc5bf4b03a0ff
|
||||
Firebase: 8db6f2d1b2c5e2984efba4949a145875a8f65fe5
|
||||
FirebaseAnalytics: 5dd088bd2e67bb9d13dbf792d1164ceaf3052193
|
||||
FirebaseCore: d889d9e12535b7f36ac8bfbf1713a0836a3012cd
|
||||
@@ -651,28 +670,31 @@ SPEC CHECKSUMS:
|
||||
FirebaseDynamicLinks: 6eac37d86910382eafb6315d952cc44c9e176094
|
||||
FirebaseInstallations: 466c7b4d1f58fe16707693091da253726a731ed2
|
||||
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
|
||||
glog: 5337263514dd6f09803962437687240c5dc39aa4
|
||||
Giphy: b6d5087521d251bb8c99cdc0eb07bbdf86d142d5
|
||||
giphy-react-native-sdk: 7abccf2b52123a0f30ce99da895ab6288023680c
|
||||
glog: 85ecdd10ee8d8ec362ef519a6a45ff9aa27b2e85
|
||||
GoogleAppMeasurement: 966e88df9d19c15715137bb2ddaf52373f111436
|
||||
GoogleDataTransport: f56af7caa4ed338dc8e138a5d7c5973e66440833
|
||||
GoogleSignIn: fd381840dbe7c1137aa6dc30849a5c3e070c034a
|
||||
GoogleUtilities: 7f2f5a07f888cdb145101d6042bc4422f57e70b3
|
||||
GTMAppAuth: ad5c2b70b9a8689e1a04033c9369c4915bfcbe89
|
||||
GTMSessionFetcher: 43748f93435c2aa068b1cbe39655aaf600652e91
|
||||
libwebp: 98a37e597e40bfdb4c911fc98f2c53d0b12d05fc
|
||||
nanopb: 59317e09cf1f1a0af72f12af412d54edf52603fc
|
||||
ObjectiveDropboxOfficial: b4765572e334d6fc6214b43a7595510324bbbbaa
|
||||
ObjectiveDropboxOfficial: fe206ce8c0bc49976c249d472db7fdbc53ebbd53
|
||||
PromisesObjC: 3113f7f76903778cf4a0586bd1ab89329a0b7b97
|
||||
RCT-Folly: a21c126816d8025b547704b777a2ba552f3d9fa9
|
||||
RCTRequired: 4bf86c70714490bca4bf2696148638284622644b
|
||||
RCTTypeSafety: c475a7059eb77935fa53d2c17db299893f057d5d
|
||||
React: f64af14e3f2c50f6f2c91a5fd250e4ff1b3c3459
|
||||
React-callinvoker: b74e4ae80287780dcdf0cab262bcb581eeef56e7
|
||||
React-Core: 3eb7432bad96ff1d25aebc1defbae013fee2fd0e
|
||||
React-CoreModules: ad9e1fd5650e16666c57a08328df86fd7e480cb9
|
||||
React-cxxreact: 02633ff398cf7e91a2c1e12590d323c4a4b8668a
|
||||
React-jsi: 805c41a927d6499fb811772acb971467d9204633
|
||||
React-jsiexecutor: 94ce921e1d8ce7023366873ec371f3441383b396
|
||||
React-jsinspector: d0374f7509d407d2264168b6d0fad0b54e300b85
|
||||
React-logger: 933f80c97c633ee8965d609876848148e3fef438
|
||||
RCT-Folly: 803a9cfd78114b2ec0f140cfa6fa2a6bafb2d685
|
||||
RCTRequired: 0aa6c1c27e1d65920df35ceea5341a5fe76bdb79
|
||||
RCTTypeSafety: d76a59d00632891e11ed7522dba3fd1a995e573a
|
||||
React: ab8c09da2e7704f4b3ebad4baa6cfdfcc852dcb5
|
||||
React-callinvoker: 216fb96b482da516b8aba4142b145938f6ea92f0
|
||||
React-Core: af99b93aff83599485e0e0879879aafa35ceae32
|
||||
React-CoreModules: 137a054ce8c547e81dc3502933b1bc0fd08df05d
|
||||
React-cxxreact: ec5ee6b08664f5b8ac71d8ad912f54d540c4f817
|
||||
React-jsi: 3e084c80fd364cee64668d5df46d40c39f7973e1
|
||||
React-jsiexecutor: cbdf37cebdc4f5d8b3d0bf5ccaa6147fd9de9f3d
|
||||
React-jsinspector: f4775ea9118cbe1f72b834f0f842baa7a99508d8
|
||||
React-logger: a1f028f6d8639a3f364ef80419e5e862e1115250
|
||||
react-native-background-timer: 17ea5e06803401a379ebf1f20505b793ac44d0fe
|
||||
react-native-get-random-values: 30b3f74ca34e30e2e480de48e4add2706a40ac8f
|
||||
react-native-keep-awake: afad8a51dfef9fe9655a6344771be32c8596d774
|
||||
@@ -683,35 +705,35 @@ SPEC CHECKSUMS:
|
||||
react-native-slider: 6e9b86e76cce4b9e35b3403193a6432ed07e0c81
|
||||
react-native-splash-screen: 4312f786b13a81b5169ef346d76d33bc0c6dc457
|
||||
react-native-video: a4c2635d0802f983594b7057e1bce8f442f0ad28
|
||||
react-native-webrtc: 2f20515f3ebb9dbf1f2aad638cc7573396cf948f
|
||||
react-native-webrtc: b8f2769386d51a6a8c89778478618fe311226bc3
|
||||
react-native-webview: ea4899a1056c782afa96dd082179a66cbebf5504
|
||||
React-perflogger: 93075d8931c32cd1fce8a98c15d2d5ccc4d891bd
|
||||
React-RCTActionSheet: 7d3041e6761b4f3044a37079ddcb156575fb6d89
|
||||
React-RCTAnimation: 743e88b55ac62511ae5c2e22803d4f503f2a3a13
|
||||
React-RCTBlob: bee3a2f98fa7fc25c957c8643494244f74bea0a0
|
||||
React-RCTImage: 19fc9e29b06cc38611c553494f8d3040bf78c24e
|
||||
React-RCTLinking: dc799503979c8c711126d66328e7ce8f25c2848f
|
||||
React-RCTNetwork: 417e4e34cf3c19eaa5fd4e9eb20180d662a799ce
|
||||
React-RCTSettings: 4df89417265af26501a7e0e9192a34d3d9848dff
|
||||
React-RCTText: f8a21c3499ab322326290fa9b701ae29aa093aa5
|
||||
React-RCTVibration: e3ffca672dd3772536cb844274094b0e2c31b187
|
||||
React-runtimeexecutor: dec32ee6f2e2a26e13e58152271535fadff5455a
|
||||
ReactCommon: 57b69f6383eafcbd7da625bfa6003810332313c4
|
||||
React-perflogger: 0afaf2f01a47fd0fc368a93bfbb5bd3b26db6e7f
|
||||
React-RCTActionSheet: 59f35c4029e0b532fc42114241a06e170b7431a2
|
||||
React-RCTAnimation: aae4f4bed122e78bdab72f7118d291d70a932ce2
|
||||
React-RCTBlob: f6fb23394b4f28cd86fa7e9f5f6ae45c23669fda
|
||||
React-RCTImage: 638815cf96124386dd296067246d91441932ae3f
|
||||
React-RCTLinking: 254dd06283dd6fdb784285f95e7cec8053c3270f
|
||||
React-RCTNetwork: 8a4c2d4f357268e520b060572d02bc69a9b991fb
|
||||
React-RCTSettings: 35d44cbb9972ab933bd0a59ea3e6646dcb030ba3
|
||||
React-RCTText: cc5315df8458cfa7b537e621271ef43273955a97
|
||||
React-RCTVibration: 3b52a7dced19cdb025b4f88ab26ceb2d85f30ba2
|
||||
React-runtimeexecutor: a9d3c82ddf7ffdad9fbe6a81c6d6f8c06385464d
|
||||
ReactCommon: 07d0c460b9ba9af3eaf1b8f5abe7daaad28c9c4e
|
||||
RNCalendarEvents: 7e65eb4a94f53c1744d1e275f7fafcfaa619f7a3
|
||||
RNCAsyncStorage: ea6b5c280997b2b32a587793163b1f10e580c4f7
|
||||
RNCClipboard: 41d8d918092ae8e676f18adada19104fa3e68495
|
||||
RNCMaskedView: c298b644a10c0c142055b3ae24d83879ecb13ccd
|
||||
RNDefaultPreference: 326860d42a681bfd7338c8f6d061cf58745bd860
|
||||
RNDefaultPreference: 08bdb06cfa9188d5da97d4642dac745218d7fb31
|
||||
RNDeviceInfo: 0400a6d0c94186d1120c3cbd97b23abc022187a9
|
||||
RNGestureHandler: e5c7cab5f214503dcefd6b2b0cefb050e1f51c4a
|
||||
RNGoogleSignin: c4381751eefd73c552b923ba347a9bfc6f18771c
|
||||
RNReanimated: 514a11da3a2bcc6c3dfd9de32b38e2b9bf101926
|
||||
RNReanimated: c1b56d030d1616239861534d9adb531f8cffab68
|
||||
RNScreens: 522705f2e5c9d27efb17f24aceb2bf8335bc7b8e
|
||||
RNSound: 27e8268bdb0a1f191f219a33267f7e0445e8d62f
|
||||
RNSVG: ce9d996113475209013317e48b05c21ee988d42e
|
||||
RNWatch: 99637948ec9b5c9ec5a41920642594ad5ba07e80
|
||||
Yoga: e7dc4e71caba6472ff48ad7d234389b91dadc280
|
||||
Yoga: d6b6a80659aa3e91aaba01d0012e7edcbedcbecd
|
||||
|
||||
PODFILE CHECKSUM: 93620e428bb16cc7fb8fd7314c0402e26929b5bf
|
||||
PODFILE CHECKSUM: 2167362b8c8cacb433b763a9ae6c3f4b590190c7
|
||||
|
||||
COCOAPODS: 1.11.2
|
||||
|
||||
@@ -38,6 +38,8 @@
|
||||
DEA9F28A258A6EA800D4CD74 /* JitsiMeetSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DEA9F288258A6EA800D4CD74 /* JitsiMeetSDK.framework */; 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 */; };
|
||||
FD572B9927EDF32300A800FB /* GiphyUISDK.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = FD572B9727EDF32300A800FB /* GiphyUISDK.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
@@ -72,6 +74,7 @@
|
||||
dstSubfolderSpec = 10;
|
||||
files = (
|
||||
DEA9F28A258A6EA800D4CD74 /* JitsiMeetSDK.framework in Embed Frameworks */,
|
||||
FD572B9927EDF32300A800FB /* GiphyUISDK.xcframework in Embed Frameworks */,
|
||||
DE05038A256E904600DEE3A5 /* WebRTC.xcframework in Embed Frameworks */,
|
||||
);
|
||||
name = "Embed Frameworks";
|
||||
@@ -158,6 +161,7 @@
|
||||
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>"; };
|
||||
FD572B9727EDF32300A800FB /* GiphyUISDK.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = GiphyUISDK.xcframework; path = ../Pods/Giphy/GiphySDK/GiphyUISDK.xcframework; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@@ -174,6 +178,7 @@
|
||||
files = (
|
||||
DE050389256E904600DEE3A5 /* WebRTC.xcframework in Frameworks */,
|
||||
DEA9F289258A6EA800D4CD74 /* JitsiMeetSDK.framework in Frameworks */,
|
||||
FD572B9827EDF32300A800FB /* GiphyUISDK.xcframework in Frameworks */,
|
||||
2681BB562C7A0B42CFBA6719 /* libPods-JitsiMeet.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
@@ -199,6 +204,7 @@
|
||||
0B26BE711EC5BC4D00EEFB41 /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FD572B9727EDF32300A800FB /* GiphyUISDK.xcframework */,
|
||||
DEA9F288258A6EA800D4CD74 /* JitsiMeetSDK.framework */,
|
||||
DE050388256E904600DEE3A5 /* WebRTC.xcframework */,
|
||||
0B26BE6D1EC5BC3C00EEFB41 /* JitsiMeet.framework */,
|
||||
@@ -821,6 +827,7 @@
|
||||
baseConfigurationReference = 756FCE06C08D9B947653C98A /* Pods-JitsiMeet.debug.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIconDebug;
|
||||
CODE_SIGN_ENTITLEMENTS = app.entitlements;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
@@ -829,6 +836,7 @@
|
||||
DEAD_CODE_STRIPPING = NO;
|
||||
DEVELOPMENT_TEAM = FC967L3QRG;
|
||||
ENABLE_BITCODE = NO;
|
||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
|
||||
INFOPLIST_FILE = src/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
@@ -851,6 +859,7 @@
|
||||
baseConfigurationReference = 3E0F4ED943C0B12BE77F6B45 /* Pods-JitsiMeet.release.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIconRelease;
|
||||
CODE_SIGN_ENTITLEMENTS = app.entitlements;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
@@ -858,6 +867,7 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEVELOPMENT_TEAM = FC967L3QRG;
|
||||
ENABLE_BITCODE = YES;
|
||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
|
||||
INFOPLIST_FILE = src/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
@@ -977,7 +987,7 @@
|
||||
ENABLE_BITCODE = YES;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "arm64 ";
|
||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
@@ -1038,7 +1048,7 @@
|
||||
ENABLE_BITCODE = YES;
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "arm64 ";
|
||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>22.0.0</string>
|
||||
<string>22.2.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>NSExtension</key>
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
*/
|
||||
|
||||
import ReplayKit
|
||||
import JitsiMeetSDK
|
||||
|
||||
private enum Constants {
|
||||
// the App Group ID value that the app and the broadcast extension targets are setup with. It differs for each app.
|
||||
|
||||
@@ -37,13 +37,8 @@
|
||||
[builder setFeatureFlag:@"welcomepage.enabled" withBoolean:YES];
|
||||
[builder setFeatureFlag:@"resolution" withValue:@(360)];
|
||||
[builder setFeatureFlag:@"ios.screensharing.enabled" withBoolean:YES];
|
||||
builder.serverURL = [NSURL URLWithString:@"https://meet.jit.si"];
|
||||
|
||||
// Apple rejected our app because they claim requiring a
|
||||
// Dropbox account for recording is not acceptable.
|
||||
#if DEBUG
|
||||
[builder setFeatureFlag:@"ios.recording.enabled" withBoolean:YES];
|
||||
#endif
|
||||
builder.serverURL = [NSURL URLWithString:@"https://meet.jit.si"];
|
||||
}];
|
||||
|
||||
[jitsiMeet application:application didFinishLaunchingWithOptions:launchOptions];
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>22.0.0</string>
|
||||
<string>22.2.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleURLTypes</key>
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>22.0.0</string>
|
||||
<string>22.2.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>XPC!</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>22.0.0</string>
|
||||
<string>22.2.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>CLKComplicationPrincipalClass</key>
|
||||
|
||||
@@ -71,7 +71,7 @@ platform :ios do
|
||||
|
||||
# Inrement the build number by 1
|
||||
increment_build_number(
|
||||
build_number: latest_testflight_build_number + 1,
|
||||
build_number: Time.now.to_i,
|
||||
xcodeproj: "app/app.xcodeproj"
|
||||
)
|
||||
|
||||
|
||||
@@ -35,7 +35,6 @@ xcodebuild archive \
|
||||
-sdk iphonesimulator \
|
||||
-destination='generic/platform=iOS Simulator' \
|
||||
-archivePath ios/sdk/out/ios-simulator \
|
||||
VALID_ARCHS=x86_64 \
|
||||
ENABLE_BITCODE=NO \
|
||||
SKIP_INSTALL=NO \
|
||||
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
|
||||
@@ -46,7 +45,6 @@ xcodebuild archive \
|
||||
-sdk iphoneos \
|
||||
-destination='generic/platform=iOS' \
|
||||
-archivePath ios/sdk/out/ios-device \
|
||||
VALID_ARCHS=arm64 \
|
||||
ENABLE_BITCODE=NO \
|
||||
SKIP_INSTALL=NO \
|
||||
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
|
||||
|
||||
@@ -303,9 +303,9 @@
|
||||
buildConfigurationList = 0BD906ED1EC0C00300C8C18E /* Build configuration list for PBXNativeTarget "JitsiMeetSDK" */;
|
||||
buildPhases = (
|
||||
26796D8589142D80C8AFDA51 /* [CP] Check Pods Manifest.lock */,
|
||||
0BD906E21EC0C00300C8C18E /* Headers */,
|
||||
0BD906E01EC0C00300C8C18E /* Sources */,
|
||||
0BD906E11EC0C00300C8C18E /* Frameworks */,
|
||||
0BD906E21EC0C00300C8C18E /* Headers */,
|
||||
0BD906E31EC0C00300C8C18E /* Resources */,
|
||||
DE17D0D426E0B86300F77E2E /* Copy sounds */,
|
||||
0BCA49651EC4B77500B793EE /* Package React bundle */,
|
||||
@@ -518,7 +518,7 @@
|
||||
ENABLE_BITCODE = YES;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "arm64 ";
|
||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
@@ -581,7 +581,7 @@
|
||||
ENABLE_BITCODE = YES;
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "arm64 ";
|
||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
@@ -606,6 +606,7 @@
|
||||
baseConfigurationReference = 09A78016288AF50ACD28A10D /* Pods-JitsiMeetSDK.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*]" = "";
|
||||
@@ -615,6 +616,7 @@
|
||||
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";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.JitsiMeetSDK.ios;
|
||||
@@ -633,6 +635,7 @@
|
||||
baseConfigurationReference = 891FE43DAD30BC8976683100 /* Pods-JitsiMeetSDK.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*]" = "";
|
||||
@@ -642,6 +645,7 @@
|
||||
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";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.JitsiMeetSDK.ios;
|
||||
|
||||
@@ -35,9 +35,10 @@ typedef enum {
|
||||
static NSString * const kDevicesChanged = @"org.jitsi.meet:features/audio-mode#devices-update";
|
||||
|
||||
// Device types (must match JS and Java)
|
||||
static NSString * const kDeviceTypeHeadphones = @"HEADPHONES";
|
||||
static NSString * const kDeviceTypeBluetooth = @"BLUETOOTH";
|
||||
static NSString * const kDeviceTypeCar = @"CAR";
|
||||
static NSString * const kDeviceTypeEarpiece = @"EARPIECE";
|
||||
static NSString * const kDeviceTypeHeadphones = @"HEADPHONES";
|
||||
static NSString * const kDeviceTypeSpeaker = @"SPEAKER";
|
||||
static NSString * const kDeviceTypeUnknown = @"UNKNOWN";
|
||||
|
||||
@@ -190,7 +191,7 @@ RCT_EXPORT_METHOD(setAudioDevice:(NSString *)device
|
||||
|
||||
// The speaker is special, so test for it first.
|
||||
if ([device isEqualToString:kDeviceTypeSpeaker]) {
|
||||
forceSpeaker = NO;
|
||||
forceSpeaker = YES;
|
||||
success = [session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error];
|
||||
} else {
|
||||
// Here we use AVAudioSession because RTCAudioSession doesn't expose availableInputs.
|
||||
@@ -258,10 +259,16 @@ RCT_EXPORT_METHOD(updateDeviceList) {
|
||||
self->forceSpeaker = NO;
|
||||
self->forceEarpiece = NO;
|
||||
break;
|
||||
case AVAudioSessionRouteChangeReasonCategoryChange:
|
||||
case AVAudioSessionRouteChangeReasonCategoryChange: {
|
||||
// The category has changed. Check if it's the one we want and adjust as
|
||||
// needed.
|
||||
RTCAudioSessionConfiguration *currentConfig = [self configForMode:self->activeMode];
|
||||
if ([session.category isEqualToString:currentConfig.category]) {
|
||||
// We are in the desired category, nothing to do here.
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
return;
|
||||
}
|
||||
@@ -274,7 +281,6 @@ RCT_EXPORT_METHOD(updateDeviceList) {
|
||||
RTCAudioSessionConfiguration *config = [self configForMode:self->activeMode];
|
||||
[self setConfig:config error:nil];
|
||||
if (self->forceSpeaker && !self->isSpeakerOn) {
|
||||
RTCAudioSession *session = JitsiAudioSession.rtcAudioSession;
|
||||
[session lockForConfiguration];
|
||||
[session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];
|
||||
[session unlockForConfiguration];
|
||||
@@ -320,6 +326,8 @@ RCT_EXPORT_METHOD(updateDeviceList) {
|
||||
|| [portType isEqualToString:AVAudioSessionPortBluetoothLE]
|
||||
|| [portType isEqualToString:AVAudioSessionPortBluetoothA2DP]) {
|
||||
return kDeviceTypeBluetooth;
|
||||
} else if ([portType isEqualToString:AVAudioSessionPortCarAudio]) {
|
||||
return kDeviceTypeCar;
|
||||
} else {
|
||||
return kDeviceTypeUnknown;
|
||||
}
|
||||
@@ -355,7 +363,7 @@ RCT_EXPORT_METHOD(updateDeviceList) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (AVAudioSessionPortDescription *portDesc in session.availableInputs) {
|
||||
// Skip "Phone" if headphones are present.
|
||||
if (headphonesAvailable && [portDesc.portType isEqualToString:AVAudioSessionPortBuiltInMic]) {
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>5.0.0</string>
|
||||
<string>5.1.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
|
||||
@@ -141,7 +141,6 @@
|
||||
"Share": "Deel",
|
||||
"Submit": "Dien in",
|
||||
"WaitForHostMsg": "",
|
||||
"WaitForHostMsgWOk": "",
|
||||
"WaitingForHost": "Wag tans vir die gasheer …",
|
||||
"Yes": "Ja",
|
||||
"accessibilityLabel": {
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
"addPeople": {
|
||||
"add": "ادع",
|
||||
"addContacts": "ادع كل جهات الاتصال لدي",
|
||||
"contacts": "contacts",
|
||||
"copyInvite": "انسخ دعوةً للاجتماع",
|
||||
"copyLink": "انسخ رابط الاجتماع",
|
||||
"contacts": "جهات اتصال",
|
||||
"copyInvite": "انسخ دعوةً للمُلتقى",
|
||||
"copyLink": "انسخ رابط المُلتقى",
|
||||
"copyStream": "انسخ رابط البث المباشر",
|
||||
"countryNotSupported": "لا ندعم هذه الوجهة حاليًا.",
|
||||
"countryReminder": "أتريد الاتصال بمن هو خارج الولايات المتحدة؟ تأكد من الابتداء برمز الدولة أولًا!",
|
||||
@@ -13,20 +13,20 @@
|
||||
"failedToAdd": "فشل إضافة مشاركين",
|
||||
"footerText": "الاتصال لدعوة الغير مُعطَّل.",
|
||||
"googleEmail": "بريد غوغل",
|
||||
"inviteMoreHeader": "أنت بمفردك في هذا الاجتماع",
|
||||
"inviteMoreMailSubject": "ضم {{appName}} للاجتماع",
|
||||
"inviteMoreHeader": "أنت بمفردك في هذا المُلتقى",
|
||||
"inviteMoreMailSubject": "ضم {{appName}} للمُلتقى",
|
||||
"inviteMorePrompt": "ادعُ أشخاصًا آخرين",
|
||||
"linkCopied": "نُسِخ الرابط",
|
||||
"noResults": "لم يُعثَر على أي نتيجة بحث متطابقة",
|
||||
"outlookEmail": "بريد مايكروسوفت",
|
||||
"phoneNumbers": "أضف ارقام هواتف",
|
||||
"searching": "يبحث",
|
||||
"shareInvite": "شارك دعوةً للاجتماع",
|
||||
"shareLink": "شارك رابط الاجتماع لدعوة الأخرين",
|
||||
"shareStream": "شارك رابط البث المباشر للاجتماع",
|
||||
"shareInvite": "شارك دعوةً للمُلتقى",
|
||||
"shareLink": "شارك رابط المُلتقى لدعوة الأخرين",
|
||||
"shareStream": "شارك رابط البث المباشر للمُلتقى",
|
||||
"sipAddresses": "sip عنوان",
|
||||
"telephone": "رقم الهاتف: {{number}}",
|
||||
"title": "ادعُ أحدًا لهذا الاجتماع",
|
||||
"title": "ادعُ أحدًا لهذا المُلتقى",
|
||||
"yahooEmail": "بريد ياهوو"
|
||||
},
|
||||
"audioDevices": {
|
||||
@@ -39,9 +39,6 @@
|
||||
"audioOnly": {
|
||||
"audioOnly": "معدل تبادل البيانات منخفض"
|
||||
},
|
||||
"blankPage": {
|
||||
"meetingEnded": "انتهى الاجتماع."
|
||||
},
|
||||
"breakoutRooms": {
|
||||
"actions": {
|
||||
"add": "أضف غرفة جانبية",
|
||||
@@ -53,7 +50,7 @@
|
||||
"remove": "إزالة",
|
||||
"sendToBreakoutRoom": "أرسل المشارك إلى:"
|
||||
},
|
||||
"defaultName": "غرفة الاجتماعات الفرعية رقم {{index}}",
|
||||
"defaultName": "غرفة المُلتقيات الفرعية رقم {{index}}",
|
||||
"mainRoom": "الغرفة الرئيسية",
|
||||
"notifications": {
|
||||
"joined": " الغرفة الجانبيةالانضمام إلى {{index}}",
|
||||
@@ -62,7 +59,7 @@
|
||||
}
|
||||
},
|
||||
"calendarSync": {
|
||||
"addMeetingURL": "أضف رابطًا لاجتماع",
|
||||
"addMeetingURL": "أضف رابطًا لمُلتقى",
|
||||
"confirmAddLink": "هل تريد إضافة رابط جيستسي لهذا الحدث؟",
|
||||
"error": {
|
||||
"appConfiguration": "لم تُضبَط عملية إضافة الرزنامة ضبطًا صحيحًا.",
|
||||
@@ -70,12 +67,12 @@
|
||||
"notSignedIn": "حدث خطأ أثناء إجراء عملية الاستيثاق للوصول إلى تفاصيل الأحداث المسجلة في الرزنامة. تحقق رجاءً من إعدادات رزنامتك وجرب التسجيل مرة أخرى."
|
||||
},
|
||||
"join": "انضم",
|
||||
"joinTooltip": "انضم إلى الاجتماع",
|
||||
"nextMeeting": "الاجتماع التالي",
|
||||
"joinTooltip": "انضم إلى المُلتقى",
|
||||
"nextMeeting": "المُلتقى التالي",
|
||||
"noEvents": "لا يوجد أي أحدات آتية مجدولة.",
|
||||
"ongoingMeeting": "اجتماع قائم",
|
||||
"ongoingMeeting": "مُلتقى قائم",
|
||||
"permissionButton": "افتح الإعدادات",
|
||||
"permissionMessage": "يطلب إذن الوصول إلى الرزنامة لرؤية مواعيد اجتماعاتك.",
|
||||
"permissionMessage": "يطلب إذن الوصول إلى الرزنامة لرؤية مواعيد مُلتقياتك.",
|
||||
"refresh": "حدِّث الرزنامة",
|
||||
"today": "اليوم"
|
||||
},
|
||||
@@ -83,6 +80,7 @@
|
||||
"enter": "أدخل الغرفة",
|
||||
"error": "خطأ: لم تُرسَل رسالتك. السبب: {{error}}",
|
||||
"fieldPlaceHolder": "اكتب رسالتك هنا",
|
||||
"lobbyChatMessageTo": "رسالة دردشة لوبي إلى {{recipient}}",
|
||||
"message": "رسالة",
|
||||
"messageAccessibleTitle": "{{user}} مقولة:",
|
||||
"messageAccessibleTitleMe": "أنا أقول:",
|
||||
@@ -93,7 +91,7 @@
|
||||
"title": "اكتب لقبًا لاعتماده في المحادثة",
|
||||
"titleWithPolls": "اكتب لقبًا لاعتماده في المحادثة"
|
||||
},
|
||||
"noMessagesMessage": "لا يوجد أي رسالة في الاجتماع بعد. ابدأ محادثة هنا.",
|
||||
"noMessagesMessage": "لا يوجد أي رسالة في المُلتقى بعد. ابدأ محادثة هنا.",
|
||||
"privateNotice": "أرسل رسالة خاصة إلى {{recipient}}",
|
||||
"smileysPanel": "واجهة الإيموجي",
|
||||
"tabs": {
|
||||
@@ -171,15 +169,15 @@
|
||||
"yesterday": "البارحة"
|
||||
},
|
||||
"deepLinking": {
|
||||
"appNotInstalled": "تحتاج إلى تطبيق الجوال {{app}} للانضمام إلى إلى هذا الاجتماع على هاتفك.",
|
||||
"description": "ألم يحدث شيء؟ جربنا عقد اجتماعك على تطبيق الحاسوب {{app}}. جرب مرة أخرى أو اعقد الاجتماع على تطبيق الويب {{app}}.",
|
||||
"descriptionWithoutWeb": "ألم يحدث شيء؟ جربنا عقد اجتماعك على تطبيق الحاسوب {{app}}.",
|
||||
"appNotInstalled": "تحتاج إلى تطبيق الجوال {{app}} للانضمام إلى إلى هذا المُلتقى على هاتفك.",
|
||||
"description": "ألم يحدث شيء؟ جربنا عقد مُلتقىك على تطبيق الحاسوب {{app}}. جرب مرة أخرى أو اعقد المُلتقى على تطبيق الويب {{app}}.",
|
||||
"descriptionWithoutWeb": "ألم يحدث شيء؟ جربنا عقد مُلتقىك على تطبيق الحاسوب {{app}}.",
|
||||
"downloadApp": "نزِّل التطبيق",
|
||||
"ifDoNotHaveApp": "إن لم تملك التطبيق بعد:",
|
||||
"ifHaveApp": "إن كان لديك التطبيق:",
|
||||
"joinInApp": "انضم للاجتماع عبر تطبيق الجوال",
|
||||
"joinInApp": "انضم للمُلتقى عبر تطبيق الجوال",
|
||||
"launchWebButton": "افتح تطبيق الويب",
|
||||
"title": "قيد عقد اجتماعك في {{app}}...",
|
||||
"title": "قيد عقد مُلتقىك في {{app}}...",
|
||||
"tryAgainButton": "جرب مرة أخرى في تطبيق الحاسوب",
|
||||
"unsupportedBrowser": "يبدو أنك تستخدم متصفحًا لا ندعمه."
|
||||
},
|
||||
@@ -208,14 +206,15 @@
|
||||
"Remove": "أزل",
|
||||
"Share": "شارك",
|
||||
"Submit": "أرسل",
|
||||
"WaitForHostMsg": "لم يبدأ المؤتمر <b>{{room}}</b> بعد. إن كنت المضيف والراعي، فنرجو تأكيد ذلك عبر الاستيثاق أو انتظر وصول المضيف رجاءً. ",
|
||||
"WaitForHostMsgWOk": "لم يبدأ المؤتمر <b>{{room}}</b> بعد. إن كنت المضيف والراعي، فاضغط على «تمام» للاستيثاق أو انتظر وصول المضيف رجاءً.",
|
||||
"WaitForHostMsg": "لم يبدأ المؤتمر بعد. إن كنت المضيف والراعي، فنرجو تأكيد ذلك عبر الاستيثاق أو انتظر وصول المضيف رجاءً. ",
|
||||
"WaitingForHostTitle": "في انتظار المضيف ...",
|
||||
"Yes": "نعم",
|
||||
"accessibilityLabel": {
|
||||
"liveStreaming": "بث حي مباشر"
|
||||
},
|
||||
"add": "أضف",
|
||||
"addMeetingNote": "أضف ملاحظة حول هذا المُلتقى",
|
||||
"addOptionalNote": "أضف ملاحظة (اختياري)",
|
||||
"allow": "اسمح",
|
||||
"alreadySharedVideoMsg": "يشارك أحد الحضور الفيديو حاليًا، ولا يسمح هذا الإجتماع سوى بمشاركة فيديو واحد في آن واحد",
|
||||
"alreadySharedVideoTitle": "لا يُسمَح سوى بفيديو مشارك واحد على الأكثر في آن واحد.",
|
||||
@@ -246,12 +245,12 @@
|
||||
"dismiss": "تجاهل",
|
||||
"displayNameRequired": "السلام عليكم! ما اسمك؟",
|
||||
"done": "اُنجِز",
|
||||
"e2eeDescription": "<p>عملية التعمية من طرف لطرف <strong>قيد التجريب</strong> حاليًا. زر رجاءً <a href='https://jitsi.org/blog/e2ee/' target='_blank'>هذا المنشور</a> لمزيد من التفاصيل.</p><br/><p>ضع في ذهنك أن تشغيل عملية التعمية من طرف لطرف ستعطل عمل بعض الخدمات التي يقدمها المُخدِّم مثل: التسجيل، والبث الحي، الاشتراك عبر الهاتف. أضف إلى ذلك أن الاجتماع سيعمل مع الأشخاص المنضمين من المتصفح التي تدعم قابلية الدخول إلى البث.</p>",
|
||||
"e2eeDescription": "<p>عملية التعمية من طرف لطرف <strong>قيد التجريب</strong> حاليًا. زر رجاءً <a href='https://jitsi.org/blog/e2ee/' target='_blank'>هذا المنشور</a> لمزيد من التفاصيل.</p><br/><p>ضع في ذهنك أن تشغيل عملية التعمية من طرف لطرف ستعطل عمل بعض الخدمات التي يقدمها المُخدِّم مثل: التسجيل، والبث الحي، الاشتراك عبر الهاتف. أضف إلى ذلك أن المُلتقى سيعمل مع الأشخاص المنضمين من المتصفح التي تدعم قابلية الدخول إلى البث.</p>",
|
||||
"e2eeDisabledDueToMaxModeDescription": "لا يمكن تمكين التشفير من طرف إلى طرف بسبب العدد الكبير من المشاركين في المؤتمر.",
|
||||
"e2eeLabel": "المفتاح",
|
||||
"e2eeWarning": "تحذير: لا يبدو أن جميع المشاركين في هذا الاجتماع لديهم دعم للتشفير من طرف إلى طرف. إذا قمت بتمكينه فلن يتمكنوا من رؤيتك أو سماعك.",
|
||||
"e2eeWarning": "تحذير: لا يبدو أن جميع المشاركين في هذا المُلتقى لديهم دعم للتشفير من طرف إلى طرف. إذا قمت بتمكينه فلن يتمكنوا من رؤيتك أو سماعك.",
|
||||
"e2eeWillDisableDueToMaxModeDescription": "تحذير: سيتم تعطيل التشفير من طرف إلى طرف تلقائيًا إذا انضم المزيد من المشاركين إلى المؤتمر.",
|
||||
"embedMeeting": "تضمين الاجتماع",
|
||||
"embedMeeting": "تضمين المُلتقى",
|
||||
"enterDisplayName": "أدخل اسمك هنا، رجاءً",
|
||||
"error": "خطأ",
|
||||
"gracefulShutdown": "خدمتنا متوقفة حاليًا لعمليات الصيانة. جرب مرة أخرى في وقت لاحق.",
|
||||
@@ -266,13 +265,15 @@
|
||||
"kickParticipantButton": "اطرد",
|
||||
"kickParticipantDialog": "أمتأكد من طرد هذا المشارك؟",
|
||||
"kickParticipantTitle": "أتريد طرد هذا المشارك؟",
|
||||
"kickTitle": "عذرًا! تم طردك {{participantDisplayName}} من الاجتماع",
|
||||
"kickTitle": "عذرًا! تم طردك {{participantDisplayName}} من المُلتقى",
|
||||
"linkMeeting": "ربط المُلتقى",
|
||||
"linkMeetingTitle": "ربط المُلتقى بـ Salesforce",
|
||||
"liveStreaming": "البث المباشر الحي",
|
||||
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "غير ممكن أثناء التسجيل",
|
||||
"liveStreamingDisabledTooltip": "بدء بثٍ حيٍّ مُعطَّل",
|
||||
"localUserControls": "ضوابط المستخدم المحلي",
|
||||
"lockMessage": "فشل جعل المؤتمر مغلقًا.",
|
||||
"lockRoom": "أضف الاجتماع $t(lockRoomPasswordUppercase)",
|
||||
"lockRoom": "أضف المُلتقى $t(lockRoomPasswordUppercase)",
|
||||
"lockTitle": "فشلت عملية القفل والإغلاق",
|
||||
"login": "تسجيل الدخول",
|
||||
"logoutQuestion": "أمتأكد من رغبتك في الخروج وإيقاف المؤتمر؟",
|
||||
@@ -311,8 +312,8 @@
|
||||
"muteParticipantsVideoTitle": "تعطيل الكاميرا لهذا المشارك؟",
|
||||
"noDropboxToken": "لا يوجد رمز مميز صالح لـ Dropbox",
|
||||
"password": "كلمه السر",
|
||||
"passwordLabel": "جعل عضو ما هذا الاجتماع مغلقًا. أدخل رجاءً $t(lockRoomPassword) للإنضمام.",
|
||||
"passwordNotSupported": "ضبط اجتماع $t(lockRoomPassword) غير مدعوم.",
|
||||
"passwordLabel": "جعل عضو ما هذا المُلتقى مغلقًا. أدخل رجاءً $t(lockRoomPassword) للإنضمام.",
|
||||
"passwordNotSupported": "ضبط مُلتقى $t(lockRoomPassword) غير مدعوم.",
|
||||
"passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) غير مدعوم",
|
||||
"passwordRequired": "يُطلَب $t(lockRoomPasswordUppercase)",
|
||||
"permissionCameraRequiredError": "مطلوب إذن الكاميرا للمشاركة في المؤتمرات بالفيديو. يرجى منحه في الإعدادات",
|
||||
@@ -321,6 +322,7 @@
|
||||
"popupError": "يمنع متصفحك النوافذ المنبثقة من هذا الموقع. فعِّل رجاءً النوافذ المنبثقة في المتصفح من إعدادات الحماية وحاول مرة أخرى.",
|
||||
"popupErrorTitle": "النوافذ المنبثقة محجوبة.",
|
||||
"readMore": "أكثر",
|
||||
"recentlyUsedObjects": "الأشياء المستخدمة مؤخرًا",
|
||||
"recording": "قيد التسجيل",
|
||||
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "ليس بالإمكان ما دمت قيد البث المباشر",
|
||||
"recordingDisabledTooltip": "عملية التسجيل معطلة.",
|
||||
@@ -343,6 +345,12 @@
|
||||
"screenSharingFailed": "عجبًا! حصل خطأ ما، فلن نتمكن من مشاركة الشاشة للأسف!",
|
||||
"screenSharingFailedTitle": "فشلت عملية مشاركة الشاشة!",
|
||||
"screenSharingPermissionDeniedError": "عجبًا! حصل خطأ ما متعلق بأذونات إضافة مشاركة الشاشة. أعد التحميل وجرِّب مرة أخرى، رجاءً.",
|
||||
"searchInSalesforce": "ابحث في Salesforce",
|
||||
"searchResults": "نتائج البحث ({{count}})",
|
||||
"searchResultsDetailsError": "حدث خطأ ما أثناء استرداد بيانات المالك.",
|
||||
"searchResultsError": "حدث خطأ ما أثناء استرداد البيانات.",
|
||||
"searchResultsNotFound": "لم يتم العثور على نتائج عن البحث.",
|
||||
"searchResultsTryAgain": "حاول استخدام كلمات رئيسية بديلة.",
|
||||
"sendPrivateMessage": "وصلتك رسالة خاصة للتو، أتنوي الرد عليها ردًا خاصًا أم تريد إرسال رسالتك على المجموعة؟",
|
||||
"sendPrivateMessageCancel": "أرسل إلى المجموعة",
|
||||
"sendPrivateMessageOk": "أرسل ردًا خاصًا",
|
||||
@@ -365,8 +373,9 @@
|
||||
"shareVideoTitle": "شارك فيديو",
|
||||
"shareYourScreen": "شارك شاشتك",
|
||||
"shareYourScreenDisabled": "مشاركة الشاشة مُعطَّلة",
|
||||
"sharedVideoDialogError": "",
|
||||
"sharedVideoDialogError": "خطأ: رابط غير صالح",
|
||||
"sharedVideoLinkPlaceholder": "رابط اليوتيوب او رابط الفيديو المباشر",
|
||||
"start": "إبدأ",
|
||||
"startLiveStreaming": "ابدأ بثًا حيًا",
|
||||
"startRecording": "ابدأ التسجيل",
|
||||
"startRemoteControlErrorMessage": "حصل خطأٌ أثناء محاولة بدء جلسة تحكم بعيد!",
|
||||
@@ -380,7 +389,7 @@
|
||||
"tokenAuthFailed": "عذرًا، لا يسمح لك بالإنضام إلى هذه المكالمة.",
|
||||
"tokenAuthFailedTitle": "فشلت عملية الاستيثاق",
|
||||
"transcribing": "يذاع",
|
||||
"unlockRoom": "إزل الاجتماع $t(lockRoomPassword)",
|
||||
"unlockRoom": "إزل المُلتقى $t(lockRoomPassword)",
|
||||
"user": "مستخدم",
|
||||
"userIdentifier": "معرف المستخدم",
|
||||
"userPassword": "كلمة مرور المستخدم",
|
||||
@@ -397,7 +406,7 @@
|
||||
"labelToolTip": "فعَّل كل المشاركين في هذا الإجتماع عملية التعمية طرف لطرف"
|
||||
},
|
||||
"embedMeeting": {
|
||||
"title": "ضمِّن هذا الاجتماع"
|
||||
"title": "ضمِّن هذا المُلتقى"
|
||||
},
|
||||
"feedback": {
|
||||
"average": "المتوسط",
|
||||
@@ -409,6 +418,10 @@
|
||||
"veryBad": "سيئة للغاية",
|
||||
"veryGood": "ممتازة"
|
||||
},
|
||||
"giphy": {
|
||||
"noResults": "لم يتم العثور على نتائج :(",
|
||||
"search": "ابحث في GIPHY"
|
||||
},
|
||||
"helpView": {
|
||||
"header": "مركز المساعدة"
|
||||
},
|
||||
@@ -416,7 +429,7 @@
|
||||
"answer": "أجب",
|
||||
"audioCallTitle": "مكالمة صوتية واردة",
|
||||
"decline": "ارفض",
|
||||
"productLabel": "إجتماع من جيتسي",
|
||||
"productLabel": "مُلتقى جيتسي",
|
||||
"videoCallTitle": "مكالمة مرئية واردة"
|
||||
},
|
||||
"info": {
|
||||
@@ -426,25 +439,25 @@
|
||||
"conferenceURL": "رابط:",
|
||||
"copyNumber": "إنسخ الرقم",
|
||||
"country": "البلد",
|
||||
"dialANumber": "إن أردت الإنضمام إلى الإجتماع، اتصل بأحد الأرقام التالية ثم أدخل رمز المرور",
|
||||
"dialANumber": "إن أردت الإنضمام إلى المُلتقى، اتصل بأحد الأرقام التالية ثم أدخل رمز المرور",
|
||||
"dialInConferenceID": "رمز المرور (PIN):",
|
||||
"dialInNotSupported": "عذرًا، الاتصال غير مدعوم حاليًا.",
|
||||
"dialInNumber": "اتصل:",
|
||||
"dialInSummaryError": "خطأ في تحصيل معلومات الاتصال. جرب مرة أخرى لاحقًا.",
|
||||
"dialInTollFree": "رقم هاتف مجاني",
|
||||
"genericError": "عفوًا، شيء ما لم يسر على ما يرام.",
|
||||
"inviteLiveStream": "لمشاهدة البث الحي لهذا الإجتماع، اضط على هذا الرابط: {{url}}",
|
||||
"inviteLiveStream": "لمشاهدة البث الحي لهذا المُلتقى، اضط على هذا الرابط: {{url}}",
|
||||
"invitePhone": "للإنضمام من الهاتف، استعمل: {{number}},,{{conferenceID}}#\n",
|
||||
"invitePhoneAlternatives": "أتبحث عن رقم اتصال مختلف؟\nأنظر أرقام الوصول إلى هذا الإجتماع: {{url}}\n\n\nإن كنت أيضًا تتصل عبر غرفة اتصال (room phone)، انضم دون الاتصال بالصوت: {{silentUrl}}",
|
||||
"inviteSipEndpoint": "للانضمام باستخدام عنوان SIP ، أدخل هذا: {{sipUri}}",
|
||||
"inviteTextiOSInviteUrl": "انقر فوق الرابط التالي للانضمام: {{inviteUrl}}.",
|
||||
"inviteTextiOSJoinSilent": "إذا كنت تقوم بالاتصال من خلال هاتف الغرفة ، فاستخدم هذا الارتباط للانضمام دون الاتصال بالصوت: {{silentUrl}}.",
|
||||
"inviteTextiOSPersonal": "{{name}} يدعوك إلى اجتماع.",
|
||||
"inviteTextiOSPersonal": "{{name}} يدعوك إلى مُلتقى.",
|
||||
"inviteTextiOSPhone": "للانضمام عبر الهاتف ، استخدم هذا الرقم: {{number}},,{{conferenceID}}#. إذا كنت تبحث عن رقم مختلف ، فهذه هي القائمة الكاملة: {{didUrl}}.",
|
||||
"inviteURLFirstPartGeneral": "دُعيِت للإنضمام إلى اجتماع",
|
||||
"inviteURLFirstPartPersonal": "دعاك {{name}} لاجتماع.\n",
|
||||
"inviteURLSecondPart": "\nانضم للاجتماع:\n{{url}}\n",
|
||||
"label": "تفاصيل الاجتماع",
|
||||
"inviteURLFirstPartGeneral": "دُعيِت للإنضمام إلى مُلتقى",
|
||||
"inviteURLFirstPartPersonal": "دعاك {{name}} لمُلتقى.\n",
|
||||
"inviteURLSecondPart": "\nانضم للمُلتقى:\n{{url}}\n",
|
||||
"label": "تفاصيل المُلتقى",
|
||||
"liveStreamURL": "بث حي:",
|
||||
"moreNumbers": "أرقام إضافية",
|
||||
"noNumbers": "لا يوجد أرقام اتصال.",
|
||||
@@ -454,7 +467,7 @@
|
||||
"password": "$t(lockRoomPasswordUppercase):",
|
||||
"sip": "SIP عنوان",
|
||||
"title": "شارك",
|
||||
"tooltip": "شارك رابط وتفاصيل الاتصال لهذا الاجتماع"
|
||||
"tooltip": "شارك رابط وتفاصيل الاتصال لهذا المُلتقى"
|
||||
},
|
||||
"inlineDialogFailure": {
|
||||
"msg": "تعثرث معنا بعض الأمور :(",
|
||||
@@ -475,6 +488,7 @@
|
||||
"focusLocal": "ركز على الفيديو الخاص بك",
|
||||
"focusRemote": "ركز على فيديو مشارك آخر",
|
||||
"fullScreen": "استعمل/اخرج من وضع الشاشة الكاملة",
|
||||
"giphyMenu": "تبديل قائمة GIPHY",
|
||||
"keyboardShortcuts": "اختصارات لوحة المفاتيح",
|
||||
"localRecording": "اظهِر أو اخفِ التحكم بالتسجيل المحلي",
|
||||
"mute": "اكتم أو ألغ كتم المجهار (المايكروفون) الخاص بك",
|
||||
@@ -499,7 +513,7 @@
|
||||
"errorAPI": "حصل خطأ أثناء الوصول إلى البث الخاص بك على يوتيوب. حاول تسجيل الدخول مرَّة أخرى.",
|
||||
"errorLiveStreamNotEnabled": "البث الحي غير مفعَّل على على {{email}}. فعَّل البث الحي رجاءً، أو سجِّل الدخل إلى حسابٍ مُفعَّل فيه البث الحي",
|
||||
"expandedOff": "أُوقِف البث الحي",
|
||||
"expandedOn": "يجري بث الاجتماع على يوتيوب",
|
||||
"expandedOn": "يجري بث المُلتقى على يوتيوب",
|
||||
"expandedPending": "تبدأ عملية البث الحي...",
|
||||
"failedToStart": "فشلت عملية بدء البث الحي",
|
||||
"getStreamKeyManually": "لم نتمكن من الوصول إلى أي بث حي. جرب جلب مفتاح بث حي خاص بك من يوتيوب.",
|
||||
@@ -529,33 +543,37 @@
|
||||
"admitAll": "سمح للجميع بالدخول",
|
||||
"allow": "اسمح",
|
||||
"backToKnockModeButton": "لا يوجد كلمة مرور، اطلب الإذن بالدخول بدلًا من ذلك.",
|
||||
"chat": "دردشة",
|
||||
"dialogTitle": "ونضع غرفة الانتظار",
|
||||
"disableDialogContent": "وضع غرفة الانتظار مفعَّل. تسمح هذه الميزة بعدم السماح للغرباء بالانضمام إلى الاجتماع، فهل تريد حقًا تعطيلها؟",
|
||||
"disableDialogContent": "وضع غرفة الانتظار مفعَّل. تسمح هذه الميزة بعدم السماح للغرباء بالانضمام إلى المُلتقى، فهل تريد حقًا تعطيلها؟",
|
||||
"disableDialogSubmit": "عطِّل",
|
||||
"emailField": "أدخل بريدك الإلكتروني",
|
||||
"enableDialogPasswordField": "حدِّد كلمة مرور (اختياري)",
|
||||
"enableDialogSubmit": "فعِّل",
|
||||
"enableDialogText": "يحمي وضع الانتظار غرفة الاجتماع عبر منح رئيس الجلسة إمكانية الموافقة على انضمام المشاركين.",
|
||||
"enterPasswordButton": "أدخل كلمة المرور لهذا الاجتماع",
|
||||
"enterPasswordTitle": "أدخل كلمة المرور للدخول للاجتماع",
|
||||
"errorMissingPassword": "الرجاء إدخال كلمة مرور الاجتماع",
|
||||
"enableDialogText": "يحمي وضع الانتظار غرفة المُلتقى عبر منح رئيس الجلسة إمكانية الموافقة على انضمام المشاركين.",
|
||||
"enterPasswordButton": "أدخل كلمة المرور لهذا المُلتقى",
|
||||
"enterPasswordTitle": "أدخل كلمة المرور للدخول للمُلتقى",
|
||||
"errorMissingPassword": "الرجاء إدخال كلمة مرور المُلتقى",
|
||||
"invalidPassword": "كلمة مرور غير صحيحة",
|
||||
"joinRejectedMessage": "رفض رئيس الجلسة منحك الإذن بالدخول إلى الاجتماع",
|
||||
"joinTitle": "انضم للاجتماع",
|
||||
"joinRejectedMessage": "رفض رئيس الجلسة منحك الإذن بالدخول إلى المُلتقى",
|
||||
"joinRejectedTitle": "تم رفض طلب الانضمام.",
|
||||
"joinTitle": "انضم للمُلتقى",
|
||||
"joinWithPasswordMessage": "الرجاء الانتظار أثناء محاولة الدخول دون كلمة مرور...",
|
||||
"joiningMessage": "ستتمكن من الانضمام للاجتماع بعد الموافقة على طلبك",
|
||||
"joiningMessage": "ستتمكن من الانضمام للمُلتقى بعد الموافقة على طلبك",
|
||||
"joiningTitle": "يجري طلب إذنٍ للدخول...",
|
||||
"joiningWithPasswordTitle": "الدخول مع كلمة مرور...",
|
||||
"knockButton": "اطلب إذن الدخول",
|
||||
"knockTitle": "يريد أحدٌ الدخول إلى الاجتماع",
|
||||
"knockTitle": "يريد أحدٌ الدخول إلى المُلتقى",
|
||||
"knockingParticipantList": "تنبيه قائمة المشاركين",
|
||||
"lobbyChatStartedNotification": "بدأ {{moderator}} دردشة في الردهة مع {{attendee}}",
|
||||
"lobbyChatStartedTitle": "بدأ {{moderator}} محادثة في الردهة معك.",
|
||||
"nameField": "أدخل اسمك",
|
||||
"notificationLobbyAccessDenied": "رفض {{originParticipantName}} مشاركة {{targetParticipantName}} للاجتماع",
|
||||
"notificationLobbyAccessGranted": "سمح {{originParticipantName}} بمشاركة {{targetParticipantName}} للاجتماع",
|
||||
"notificationLobbyAccessDenied": "رفض {{originParticipantName}} مشاركة {{targetParticipantName}} للمُلتقى",
|
||||
"notificationLobbyAccessGranted": "سمح {{originParticipantName}} بمشاركة {{targetParticipantName}} للمُلتقى",
|
||||
"notificationLobbyDisabled": "عطَّل {{originParticipantName}} وضع غرفة الانتظار",
|
||||
"notificationLobbyEnabled": "فعَّل {{originParticipantName}} وضع غرفة الانتظار",
|
||||
"notificationTitle": "غرفة الانتظار",
|
||||
"passwordField": "أدخل كلمة الدخول إلى الاجتماع",
|
||||
"passwordField": "أدخل كلمة الدخول إلى المُلتقى",
|
||||
"passwordJoinButton": "انضم",
|
||||
"reject": "رفض",
|
||||
"rejectAll": "رفض الكل",
|
||||
@@ -594,7 +612,7 @@
|
||||
"lockRoomPasswordUppercase": "كلمة المرور",
|
||||
"lonelyMeetingExperience": {
|
||||
"button": "ادعُ آخرين",
|
||||
"youAreAlone": "أنت بمفردك في الاجتماع"
|
||||
"youAreAlone": "أنت بمفردك في المُلتقى"
|
||||
},
|
||||
"me": "أنا",
|
||||
"notify": {
|
||||
@@ -604,22 +622,29 @@
|
||||
"audioUnmuteBlockedDescription": "تم حظر عملية إلغاء كتم صوت الميكروفون مؤقتًا بسبب قيود النظام.",
|
||||
"audioUnmuteBlockedTitle": "تم حظر إعادة صوت الميكروفون!",
|
||||
"chatMessages": "رسائل الدردشة",
|
||||
"connectedOneMember": "انضم {{name}} للاجتماع",
|
||||
"connectedThreePlusMembers": "انضم {{name}} وعدد {{count}} غيره إلى الاجتماع",
|
||||
"connectedTwoMembers": "انضم {{first}} و {{second}} إلى الاجتماع",
|
||||
"connectedOneMember": "انضم {{name}} للمُلتقى",
|
||||
"connectedThreePlusMembers": "انضم {{name}} وعدد {{count}} غيره إلى المُلتقى",
|
||||
"connectedTwoMembers": "انضم {{first}} و {{second}} إلى المُلتقى",
|
||||
"disconnected": "انقطع الاتصال",
|
||||
"displayNotifications": "عرض الإخطارات لـ",
|
||||
"focus": "التركيز على المؤتمر",
|
||||
"focusFail": "إنَّ {{component}} غير متاح. ستعاد المحاولة مرة أخرى خلال {{ms}} ثانية.",
|
||||
"gifsMenu": "GIPHY",
|
||||
"groupTitle": "إشعارات",
|
||||
"hostAskedUnmute": "The moderator would like you to speak",
|
||||
"invitedOneMember": "دُعِي {{name}}",
|
||||
"invitedThreePlusMembers": "دُعِي {{name}} وعدد {{count}} آخرين",
|
||||
"invitedTwoMembers": "دُعِي {{first}} و {{second}}",
|
||||
"kickParticipant": "طرد {{kicked}} المشارك {{kicker}}",
|
||||
"leftOneMember": "{{name}} غادر الاجتماع",
|
||||
"leftThreePlusMembers": "غادر {{name}} والعديد من الأشخاص الآخرين الاجتماع",
|
||||
"leftTwoMembers": "غادر {{first}} و {{second}} الاجتماع",
|
||||
"leftOneMember": "{{name}} غادر المُلتقى",
|
||||
"leftThreePlusMembers": "غادر {{name}} والعديد من الأشخاص الآخرين المُلتقى",
|
||||
"leftTwoMembers": "غادر {{first}} و {{second}} المُلتقى",
|
||||
"linkToSalesforce": "ارتباط إلى Salesforce",
|
||||
"linkToSalesforceDescription": "يمكنك ربط ملخص الاجتماع بكائن Salesforce.",
|
||||
"linkToSalesforceError": "فشل ربط المُلتقى بـ Salesforce",
|
||||
"linkToSalesforceKey": "ربط هذا المُلتقى",
|
||||
"linkToSalesforceProgress": "جارٍ ربط الاجتماع بـ Salesforce ...",
|
||||
"linkToSalesforceSuccess": "تم ربط الاجتماع بـ Salesforce",
|
||||
"me": "أنا",
|
||||
"moderationInEffectCSDescription": "يرجى رفع اليد إذا كنت تريد مشاركة شاشتك.",
|
||||
"moderationInEffectCSTitle": "تم حظر مشاركة الشاشة من قبل المشرف",
|
||||
@@ -634,7 +659,7 @@
|
||||
"moderationToggleDescription": "من {{participantDisplayName}}",
|
||||
"moderator": "مُنحَت صلاحية رئيس الجلسة!",
|
||||
"muted": "بدأ المحادثة مكتوب الصوت.",
|
||||
"mutedRemotelyDescription": "يمكنك إلغاء الكتم متى كنت جاهزًا للتحدث. اكتم الصوت بعد الانتهاء من التحدث لخفض الضجيج أثناء الاجتماع",
|
||||
"mutedRemotelyDescription": "يمكنك إلغاء الكتم متى كنت جاهزًا للتحدث. اكتم الصوت بعد الانتهاء من التحدث لخفض الضجيج أثناء المُلتقى",
|
||||
"mutedRemotelyTitle": "كتم {{participantDisplayName}} الصوت لديك!",
|
||||
"mutedTitle": "مكتوم!",
|
||||
"newDeviceAction": "استعمل",
|
||||
@@ -643,8 +668,8 @@
|
||||
"oldElectronClientDescription1": "يبدو أنَّك تستعمل إصدارًا قديمًا من جيتسي يحوي ثغرة أمنية. تأكد رجاءً من أنَّك حدَّثته إلى ",
|
||||
"oldElectronClientDescription2": "أحدث إصدار",
|
||||
"oldElectronClientDescription3": " الآن!",
|
||||
"participantWantsToJoin": "يريد الانضمام إلى الاجتماع",
|
||||
"participantsWantToJoin": "يريد الانضمام إلى الاجتماع",
|
||||
"participantWantsToJoin": "يريد الانضمام إلى المُلتقى",
|
||||
"participantsWantToJoin": "يريد الانضمام إلى المُلتقى",
|
||||
"passwordRemovedRemotely": "أزال أحد المشاركين {{participantDisplayName}}",
|
||||
"passwordSetRemotely": "ضبط أحد المشاركين $t(lockRoomPasswordUppercase)",
|
||||
"raiseHandAction": "رفع اليد",
|
||||
@@ -656,9 +681,9 @@
|
||||
"screenShareNoAudioTitle": "تعذرت مشاركة صوت النظام!",
|
||||
"selfViewTitle": "يمكنك دائمًا إلغاء إخفاء العرض الذاتي من الإعدادات",
|
||||
"somebody": "شخص ما",
|
||||
"startSilentDescription": "أنضم مجدَّدًا للاجتماع لتفعيل الصوت",
|
||||
"startSilentDescription": "أنضم مجدَّدًا للمُلتقى لتفعيل الصوت",
|
||||
"startSilentTitle": "انضممت دون مخرج للصوت!",
|
||||
"suboptimalBrowserWarning": "نخشى أن لا تكون تجربة الاجتماع جيدة. نعمل على تحسين الكثير من الأمور، لكن ننصحك حتى ذلك الحين باستعمال باستعمال أحد <a href='static/recommendedBrowsers.html' target='_blank'>المتصفحات المدعومة</a>.",
|
||||
"suboptimalBrowserWarning": "نخشى أن لا تكون تجربة المُلتقى جيدة. نعمل على تحسين الكثير من الأمور، لكن ننصحك حتى ذلك الحين باستعمال باستعمال أحد <a href='static/recommendedBrowsers.html' target='_blank'>المتصفحات المدعومة</a>.",
|
||||
"suboptimalExperienceTitle": "تحذير من المتصفح",
|
||||
"unmute": "إلغاء الكتم",
|
||||
"videoMutedRemotelyDescription": "You can always turn it on again.",
|
||||
@@ -691,13 +716,14 @@
|
||||
"header": "مشاركون",
|
||||
"headings": {
|
||||
"lobby": "الردهة ({{count}})",
|
||||
"participantsList": "المشاركون في الاجتماع({{count}})",
|
||||
"participantsList": "المشاركون في المُلتقى({{count}})",
|
||||
"waitingLobby": "منتظرون في الردهة ({{count}})"
|
||||
},
|
||||
"search": "بحث"
|
||||
},
|
||||
"passwordDigitsOnly": "حتى {{number}} عدد",
|
||||
"passwordSetRemotely": "ضبطها مشارك آخر",
|
||||
"pinnedParticipant": "تم تثبيت المشارك",
|
||||
"polls": {
|
||||
"answer": {
|
||||
"skip": "تخطى",
|
||||
@@ -717,11 +743,11 @@
|
||||
},
|
||||
"notification": {
|
||||
"description": "افتح علامة تبويب الاقتراع للتصويت",
|
||||
"title": "تمت إضافة اقتراع جديد إلى هذا الاجتماع"
|
||||
"title": "تمت إضافة اقتراع جديد إلى هذا المُلتقى"
|
||||
},
|
||||
"results": {
|
||||
"changeVote": "تغيير التصويت",
|
||||
"empty": "لا توجد استطلاعات للرأي في الاجتماع حتى الآن. ابدأ الاستطلاع هنا!",
|
||||
"empty": "لا توجد استطلاعات للرأي في المُلتقى حتى الآن. ابدأ الاستطلاع هنا!",
|
||||
"hideDetailedResults": "أخفِ التفاصيل",
|
||||
"showDetailedResults": "اظهر التفاصيل",
|
||||
"vote": "تصويت"
|
||||
@@ -757,8 +783,8 @@
|
||||
"videoLowQuality": "نتوقع أن تكون جودة الفيديو منخفضة من ناحية معدِّل الإطارات والدقة",
|
||||
"videoTearing": "نتوقع أن تكون دقة الفيديو تعيسة"
|
||||
},
|
||||
"copyAndShare": "انسخ رابط الاجتماع وشاركه",
|
||||
"dialInMeeting": "يجري الاتصال بالاجتماع",
|
||||
"copyAndShare": "انسخ رابط المُلتقى وشاركه",
|
||||
"dialInMeeting": "يجري الاتصال بالمُلتقى",
|
||||
"dialInPin": "يجري الاتصال، أدخل الرمز PIN:",
|
||||
"dialing": "يجري الاتصال",
|
||||
"doNotShow": "لا تظهر لي هذه مرة أخرى",
|
||||
@@ -766,22 +792,22 @@
|
||||
"errorDialOutDisconnected": "قطع الاتصال لفشل العملية.",
|
||||
"errorDialOutFailed": "فشلت عملية الاتصال، للأسف.",
|
||||
"errorDialOutStatus": "خطأ في معرفة حالة الاتصال",
|
||||
"errorMissingName": "أدخل اسمك للدخول للاجتماع",
|
||||
"errorMissingName": "أدخل اسمك للدخول للمُلتقى",
|
||||
"errorNoPermissions": "تحتاج إلى تمكين الوصول إلى الميكروفون والكاميرا",
|
||||
"errorStatusCode": "فشل الاتصال برمز خطأ: {{status}}",
|
||||
"errorValidation": "فشل التحقق من الرقم",
|
||||
"iWantToDialIn": "أريد الاتصال",
|
||||
"initiated": "بدأ الاتصال",
|
||||
"joinAudioByPhone": "انضم مع صوت من الجوال",
|
||||
"joinMeeting": "انضم للاجتماع",
|
||||
"joinMeeting": "انضم للمُلتقى",
|
||||
"joinWithoutAudio": "انضم دون صوت",
|
||||
"keyboardShortcuts": "تفعيل اختصارات لوحة المفاتيح",
|
||||
"linkCopied": "نُسِخ الرابط",
|
||||
"lookGood": "يبدو أن المجهار لديك تعيس",
|
||||
"or": "أو",
|
||||
"premeeting": "ما قبل الاجتماع",
|
||||
"premeeting": "ما قبل المُلتقى",
|
||||
"screenSharingError": "خطأ في مشاركة الشاشة:",
|
||||
"showScreen": "تفعيل واجهة ما قبل الاجتماع",
|
||||
"showScreen": "تفعيل واجهة ما قبل المُلتقى",
|
||||
"startWithPhone": "البدء مع جهاز الصوت من الجوال",
|
||||
"videoOnlyError": "خطأ في الفيديو:",
|
||||
"videoTrackError": "لم نتمكن من إنشاء ملف الفيديو",
|
||||
@@ -813,6 +839,18 @@
|
||||
},
|
||||
"raisedHand": "يرد التحدث",
|
||||
"raisedHandsLabel": "عدد الأيدي المرفوعة",
|
||||
"record": {
|
||||
"already": {
|
||||
"linked": "السجل مرتبط بالفعل بهذه الجلسة."
|
||||
},
|
||||
"type": {
|
||||
"account": "الحساب",
|
||||
"contact": "جهات الاتصال",
|
||||
"lead": "البدء",
|
||||
"opportunity": "الفرصة",
|
||||
"owner": "المالك"
|
||||
}
|
||||
},
|
||||
"recording": {
|
||||
"authDropboxText": "رفع إلى Dropbox",
|
||||
"availableSpace": "المساحة المتاحة: {{spaceLeft}} ميغابايت (ما يقارب {{duration}} دقيقة تسجيل).",
|
||||
@@ -823,10 +861,15 @@
|
||||
"error": "فشل التسجيل. حاول مرة أخرى.",
|
||||
"errorFetchingLink": "خطأ في جلب رابط التسجيل.",
|
||||
"expandedOff": "أوقٍف التسجيل",
|
||||
"expandedOn": "يُسجَّل الاجتماع الآن",
|
||||
"expandedOn": "يُسجَّل المُلتقى الآن",
|
||||
"expandedPending": "بدء التسجيل...",
|
||||
"failedToStart": "فشل بدء التسجيل",
|
||||
"fileSharingdescription": "شارك التسجيل مع المشاركين للاجتماع",
|
||||
"fileSharingdescription": "شارك التسجيل مع المشاركين للمُلتقى",
|
||||
"highlight": "تسليط الضوء",
|
||||
"highlightMoment": "لحظة تسليط الضوء",
|
||||
"highlightMomentDisabled": "يمكنك تمييز اللحظات التي يبدأ فيها التسجيل",
|
||||
"highlightMomentSuccess": "تم تمييز اللحظة",
|
||||
"highlightMomentSucessDescription": "ستتم إضافة اللحظة المميزة إلى ملخص المُلتقى.",
|
||||
"inProgress": "التسجيل أو البث المباشر قيد التقدم",
|
||||
"limitNotificationDescriptionNative": "نظرًا للضغط الكبير، سيقيَّد التسجيل إلى {{limit}} د، ولكن إن أردت التسجيل لمدة مفتوحة، جرِّب <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "نظرًا للضغط الكبير، سيقيَّد التسجيل إلى {{limit}} د، ولكن إن أردت التسجيل لمدة مفتوحة، جرِّب <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
@@ -837,10 +880,11 @@
|
||||
"offBy": "أوقَف {{name}} التسجيل",
|
||||
"on": "تسجيل",
|
||||
"onBy": "بدأ {{name}} التسجيل",
|
||||
"pending": "التحضير لتسجيل الاجتماع...",
|
||||
"pending": "التحضير لتسجيل المُلتقى...",
|
||||
"rec": "تسجيل",
|
||||
"serviceDescription": "ستحفظ خدمة التسجيل الفيديو المستجل",
|
||||
"serviceDescriptionCloud": "تسجيل سحابي",
|
||||
"serviceDescriptionCloudInfo": "يتم مسح المُلتقيات المسجلة تلقائيًا بعد 24 ساعة من وقت التسجيل.",
|
||||
"serviceName": "خدمة التسجيل",
|
||||
"sessionAlreadyActive": "هذه الجلسة قيد التسجيل أو البث المباشر.",
|
||||
"signIn": "دخول",
|
||||
@@ -853,10 +897,10 @@
|
||||
"pullToRefresh": "اسحب للتحديث"
|
||||
},
|
||||
"security": {
|
||||
"about": "يمكنك إضافة $t(lockRoomPassword) إلى الاجتماع. سيتوجب على المشاركين إدخال $t(lockRoomPassword) قبل السماح لهم بالانضمام إلى الاجتماع.",
|
||||
"aboutReadOnly": "المشاركون بصفة رئيس الجلسة يمكنهم إضافة $t(lockRoomPassword) إلى الاجتماع. سيتوجب على المشاركين إدخال $t(lockRoomPassword) قبل السماح لهم بالانضمام إلى الاجتماع.",
|
||||
"about": "يمكنك إضافة $t(lockRoomPassword) إلى المُلتقى. سيتوجب على المشاركين إدخال $t(lockRoomPassword) قبل السماح لهم بالانضمام إلى المُلتقى.",
|
||||
"aboutReadOnly": "المشاركون بصفة رئيس الجلسة يمكنهم إضافة $t(lockRoomPassword) إلى المُلتقى. سيتوجب على المشاركين إدخال $t(lockRoomPassword) قبل السماح لهم بالانضمام إلى المُلتقى.",
|
||||
"header": "خيارات الأمان",
|
||||
"insecureRoomNameWarning": "اسم الغرفة غير آمن، فقد ينضم عبره مشاركون غرباء إلى الاجتماع. ننصحك بتأمين الاجتماع عبر وسائل الحماية التي يوفرها زر الحماية."
|
||||
"insecureRoomNameWarning": "اسم الغرفة غير آمن، فقد ينضم عبره مشاركون غرباء إلى المُلتقى. ننصحك بتأمين المُلتقى عبر وسائل الحماية التي يوفرها زر الحماية."
|
||||
},
|
||||
"settings": {
|
||||
"calendar": {
|
||||
@@ -883,7 +927,7 @@
|
||||
"participantJoined": "انضم مشارك",
|
||||
"participantLeft": "غادر المشارك",
|
||||
"playSounds": "تشغيل الصوت عند:",
|
||||
"reactions": "ردود فعل الاجتماع",
|
||||
"reactions": "ردود فعل المُلتقى",
|
||||
"sameAsSystem": "مثل النظام ({{label}})",
|
||||
"selectAudioOutput": "خرج الصوت",
|
||||
"selectCamera": "الكاميرا",
|
||||
@@ -920,13 +964,14 @@
|
||||
"version": "الإصدار"
|
||||
},
|
||||
"share": {
|
||||
"dialInfoText": "\n\n=====\n\nأتريد الاتصال فقط من هاتفك؟\n\n{{defaultDialInNumber}}اضغط على هذا الرابط لرؤية أرقام الهواتف الخاصة بهذا الاجتماع\n{{dialInfoPageUrl}}",
|
||||
"mainText": "اضغط على الرابط التالي للانضمام إلى الاجتماع:\n{{roomUrl}}"
|
||||
"dialInfoText": "\n\n=====\n\nأتريد الاتصال فقط من هاتفك؟\n\n{{defaultDialInNumber}}اضغط على هذا الرابط لرؤية أرقام الهواتف الخاصة بهذا المُلتقى\n{{dialInfoPageUrl}}",
|
||||
"mainText": "اضغط على الرابط التالي للانضمام إلى المُلتقى:\n{{roomUrl}}"
|
||||
},
|
||||
"speaker": "المتحدث",
|
||||
"speakerStats": {
|
||||
"angry": "غاضب",
|
||||
"disgusted": "مشمئز",
|
||||
"displayEmotions": "إظهار المشاعر",
|
||||
"fearful": "خائف",
|
||||
"happy": "سعيد",
|
||||
"hours": "{{count}}س",
|
||||
@@ -941,7 +986,7 @@
|
||||
"surprised": "مندهش"
|
||||
},
|
||||
"startupoverlay": {
|
||||
"genericTitle": "يحتاج الاجتماع إلى استخدام الميكروفون والكاميرا.",
|
||||
"genericTitle": "يحتاج المُلتقى إلى استخدام الميكروفون والكاميرا.",
|
||||
"policyText": " ",
|
||||
"title": "يريد {{app}} استعمال المجهار والكاميرا خاصَّتك."
|
||||
},
|
||||
@@ -968,10 +1013,11 @@
|
||||
"collapse": "قلّص",
|
||||
"document": "اظهِر/اخفِ الملف المشارك",
|
||||
"download": "نزِّل التطبيق",
|
||||
"embedMeeting": "ضمِّن الاجتماع",
|
||||
"embedMeeting": "ضمِّن المُلتقى",
|
||||
"expand": "وسّع",
|
||||
"feedback": "أبدِ رأيك",
|
||||
"fullScreen": "استعمل/اخرج من وضع الشاشة الكاملة",
|
||||
"giphy": "تبديل قائمة GIPHY",
|
||||
"grantModerator": "امنح صلاحيات رئيس الجلسة",
|
||||
"hangup": "أغلق المكالمة",
|
||||
"help": "مساعدة",
|
||||
@@ -979,9 +1025,10 @@
|
||||
"kick": "اطرد مشاركًا",
|
||||
"laugh": "يضحك",
|
||||
"like": "رفع الإبهام متمنيا النجاح",
|
||||
"linkToSalesforce": "ارتباط إلى Salesforce",
|
||||
"lobbyButton": "فعِّل/عطِّل وضع غرفة الانتظار",
|
||||
"localRecording": "اظهِر/اخفِ التحكم بالتسجيل المحلي",
|
||||
"lockRoom": "اظهِر/اخفِ كلمة مرور الاجتماع",
|
||||
"lockRoom": "اظهِر/اخفِ كلمة مرور المُلتقى",
|
||||
"moreActions": "اظهِر/اخفِ قائمة المزيد من الإجراءات",
|
||||
"moreActionsMenu": "قائمة المزيد من الإجراءات",
|
||||
"moreOptions": "اظهر المزيد من الخيارت",
|
||||
@@ -1029,17 +1076,18 @@
|
||||
"clap": "تصفيق",
|
||||
"closeChat": "أغلق الدردشة",
|
||||
"closeReactionsMenu": "إغلاق قائمة ردود الفعل",
|
||||
"disableReactionSounds": "يمكنك تعطيل أصوات ردود الفعل لهذا الاجتماع",
|
||||
"disableReactionSounds": "يمكنك تعطيل أصوات ردود الفعل لهذا المُلتقى",
|
||||
"documentClose": "أغلق الملف المشارك",
|
||||
"documentOpen": "افتح الملف المشارك",
|
||||
"download": "نزِّل التطبيق",
|
||||
"e2ee": "تعمية طرف-لطرف",
|
||||
"embedMeeting": "ضمِّن الاجتماع",
|
||||
"embedMeeting": "ضمِّن المُلتقى",
|
||||
"enterFullScreen": "تعمية طرف-لطرف",
|
||||
"enterTileView": "عرض بشاشة كاملة",
|
||||
"exitFullScreen": "أدخل عنوان العرض",
|
||||
"exitTileView": "اخرج من وضع الشاشة الكاملة",
|
||||
"feedback": "أبدِ رأيك",
|
||||
"giphy": "تبديل قائمة GIPHY",
|
||||
"hangup": "غادر",
|
||||
"help": "مساعدة",
|
||||
"invite": "ادعُ أحدًا",
|
||||
@@ -1047,6 +1095,7 @@
|
||||
"laugh": "يضحك",
|
||||
"leaveBreakoutRoom": "اترك إلى غرفة الجانبية",
|
||||
"like": "رفع الإبهام متمنيا النجاح",
|
||||
"linkToSalesforce": "ارتباط إلى Salesforce",
|
||||
"lobbyButtonDisable": "عطِّل وضع غرفة الانتظار",
|
||||
"lobbyButtonEnable": "فعِّل وضع غرفة الانتظار",
|
||||
"login": "ادخل",
|
||||
@@ -1104,9 +1153,9 @@
|
||||
"error": "فشلت عملية الإذاعة. حاول مرة أخرى، رجاءً.",
|
||||
"expandedLabel": "عملية الإذاعة تعمل",
|
||||
"failedToStart": "فشلت عملية بدء الإذاعة",
|
||||
"labelToolTip": "يجري إذاعة الاجتماع",
|
||||
"labelToolTip": "يجري إذاعة المُلتقى",
|
||||
"off": "أوقفت الإذاعة",
|
||||
"pending": "التحضير لإذاعة الاجتماع...",
|
||||
"pending": "التحضير لإذاعة المُلتقى...",
|
||||
"start": "بدء إظهار الترجمة",
|
||||
"stop": "إيقاف عرض الترجمة",
|
||||
"tr": "يذاع"
|
||||
@@ -1166,10 +1215,12 @@
|
||||
"moderator": "رئيس الجلسة",
|
||||
"mute": "المشارك مكتوم الصوت",
|
||||
"muted": "مكتوم",
|
||||
"pinToStage": "تثبيت في المرحلة",
|
||||
"remoteControl": "بدء / إيقاف التحكم البعيد",
|
||||
"screenSharing": "المشارك يشارك شاشته",
|
||||
"show": "أظهر على المنصة",
|
||||
"showSelfView": "إظهار الواجهة الذاتية",
|
||||
"unpinFromStage": "فك",
|
||||
"videoMuted": "الكاميرا معطلة",
|
||||
"videomute": "أوقف المشارك الكاميرا"
|
||||
},
|
||||
@@ -1203,7 +1254,7 @@
|
||||
"join": "انقر للمشاركة",
|
||||
"roomname": "أدخل اسم الغرفة"
|
||||
},
|
||||
"addMeetingName": "أضف اسم الاجتماع",
|
||||
"addMeetingName": "أضف اسم المُلتقى",
|
||||
"appDescription": "انطلق وأجر محادثة مرئية مع كامل الفريق. يمكنك أيضًا أن تدعو من تريد. {{app}} مُعمَّى بالكامل، ومفتوح المصدر بالكامل ويعد حلًا لإجراء المؤتمرات المرئية يمكنك استعماله متى تريد، مجانًا، حتى دون حساب.",
|
||||
"audioVideoSwitch": {
|
||||
"audio": "صوت",
|
||||
@@ -1211,15 +1262,15 @@
|
||||
},
|
||||
"calendar": "رزنامة",
|
||||
"connectCalendarButton": "أوصل رزنامتك",
|
||||
"connectCalendarText": "أوصل رزنامتك لعرض كل اجتماعاتك في {{app}}. أضف إلى ذلك أنَّه يمكنك إضافة اجتماعات {{provider}} إلى رزنامتك وبدئها بضغطة واحدة.",
|
||||
"enterRoomTitle": "بدء اجتماع جديد",
|
||||
"connectCalendarText": "أوصل رزنامتك لعرض كل مُلتقياتك في {{app}}. أضف إلى ذلك أنَّه يمكنك إضافة مُلتقيات {{provider}} إلى رزنامتك وبدئها بضغطة واحدة.",
|
||||
"enterRoomTitle": "بدء مُلتقى جديد",
|
||||
"getHelp": "أريد مساعدة",
|
||||
"go": "ابدأ",
|
||||
"goSmall": "ابدأ",
|
||||
"headerSubtitle": "آمــن وبنـوعيـة فـائقـة الجـودة",
|
||||
"headerTitle": "حِـــوار جيتسي",
|
||||
"headerTitle": "مُلتقى جيتسي",
|
||||
"info": "معلومات",
|
||||
"jitsiOnMobile": "جيتسي على الهاتف المحمول - حمّل تطبيقاتنا وابدأ اجتماعًا من أي مكان",
|
||||
"jitsiOnMobile": "جيتسي على الهاتف المحمول - حمّل تطبيقاتنا وابدأ مُلتقىًا من أي مكان",
|
||||
"join": "أنشئ / انضم",
|
||||
"logo": {
|
||||
"calendar": "شعار التقويم",
|
||||
@@ -1232,18 +1283,18 @@
|
||||
"mobileDownLoadLinkAndroid": "قم بتنزيل تطبيق الهاتف لنظام أندرويد",
|
||||
"mobileDownLoadLinkFDroid": "قم بتنزيل تطبيق الجوال لـ F-Droid",
|
||||
"mobileDownLoadLinkIos": "قم بتنزيل تطبيق الهاتف لنظام iOS",
|
||||
"moderatedMessage": "أو a href=\"{{url}}\" rel=\"noopener noreferrer\" target=\"_blank\">احجز رابط لاجتماع</a> إن كنت رئيس الجلسة الوحيد فقط.",
|
||||
"moderatedMessage": "أو a href=\"{{url}}\" rel=\"noopener noreferrer\" target=\"_blank\">احجز رابط لمُلتقى</a> إن كنت رئيس الجلسة الوحيد فقط.",
|
||||
"privacy": "الخصوصية",
|
||||
"recentList": "الجديد",
|
||||
"recentListDelete": "حذف",
|
||||
"recentListEmpty": "قائمتك الأخيرة فارغة حاليًا. ابدأ التحدث مع الفريق وستجد كل اجتماعاتك الأخيرة هنا.",
|
||||
"recentListEmpty": "قائمتك الأخيرة فارغة حاليًا. ابدأ التحدث مع الفريق وستجد كل مُلتقياتك الأخيرة هنا.",
|
||||
"reducedUIText": "يا مرحبًا بك في {{app}}!",
|
||||
"roomNameAllowedChars": "لا يجب أن يحوي اسم الاجتماع على: ?، &، :، '، \"، %، #.",
|
||||
"roomNameAllowedChars": "لا يجب أن يحوي اسم المُلتقى على: ?، &، :، '، \"، %، #.",
|
||||
"roomname": "أدخل اسم الغرفة",
|
||||
"roomnameHint": "أدخل اسم أو رابط الغرفة التي تريد الانضمام إليها. يمكنك إنشاء اسم جديد لترسله إلى من تريد أن تجتمع معهم.",
|
||||
"sendFeedback": "أبدِ رأيك",
|
||||
"startMeeting": "إبدأ الحـِوار",
|
||||
"startMeeting": "إبدأ المُلتقى",
|
||||
"terms": "الشروط",
|
||||
"title": "منصة عقد مؤتمرات واجتماعات آمنة وكاملة المزايا ومجانية بالمطلق"
|
||||
"title": "منصة عقد مؤتمرات ومُلتقيات آمنة وكاملة المزايا ومجانية بالمطلق"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -160,8 +160,7 @@
|
||||
"Remove": "Выдаліць",
|
||||
"Share": "Падзяліцца",
|
||||
"Submit": "Адправіць",
|
||||
"WaitForHostMsg": "Канферэнцыя <b>{{room}}</b> яшчэ не пачалася. Калі вы з'яўляецеся гаспадаром, калі ласка, падтвердіце сапраўднасць. У адваротным выпадку, калі ласка, пачакайце з'яўлення гаспадара.",
|
||||
"WaitForHostMsgWOk": "Канферэнцыя <b>{{room}}</b> яшчэ не пачалася. Калі Вы арганізатар, калі ласка, націсніце Ok для аўтэнтыфікацыі. У адваротным выпадку, дачакайцеся арганізатара.",
|
||||
"WaitForHostMsg": "Канферэнцыя яшчэ не пачалася. Калі вы з'яўляецеся гаспадаром, калі ласка, падтвердіце сапраўднасць. У адваротным выпадку, калі ласка, пачакайце з'яўлення гаспадара.",
|
||||
"WaitingForHost": "Чакаем арганізатара …",
|
||||
"Yes": "Так",
|
||||
"accessibilityLabel": {
|
||||
|
||||
@@ -167,8 +167,7 @@
|
||||
"Remove": "Премахване",
|
||||
"Share": "Споделяне",
|
||||
"Submit": "Изпращане",
|
||||
"WaitForHostMsg": "Конференцията <b>{{room}}</b> все още не е започнала. Ако сте домакинът, тогава се идентифицирайте. В противен случай изчакайте докато домакинът пристигне.",
|
||||
"WaitForHostMsgWOk": "Конференцията <b>{{room}}</b> все още не е започнала. Ако сте домакинът, тогава натиснете бутона, за да се идентифицирате. В противен случай изчакайте докато домакинът пристигне.",
|
||||
"WaitForHostMsg": "Конференцията все още не е започнала. Ако сте домакинът, тогава се идентифицирайте. В противен случай изчакайте докато домакинът пристигне.",
|
||||
"WaitingForHost": "Чакаме домакина...",
|
||||
"Yes": "Да",
|
||||
"accessibilityLabel": {
|
||||
|
||||
@@ -208,8 +208,7 @@
|
||||
"Remove": "Elimina",
|
||||
"Share": "Comparteix",
|
||||
"Submit": "Tramet",
|
||||
"WaitForHostMsg": "La conferència <b>{{room}}</b> encara no ha començat. Si en sou l'amfitrió autentiqueu-vos. Altrament, espereu que arribi l'amfitrió.",
|
||||
"WaitForHostMsgWOk": "La conferència <b>{{room}}</b> encara no ha començat. Si sou l'amfitrió, aleshores pitgeu «D'acord» per a autenticar-vos. Altrament, espereu que arribi l'amfitrió.",
|
||||
"WaitForHostMsg": "La conferència encara no ha començat. Si en sou l'amfitrió autentiqueu-vos. Altrament, espereu que arribi l'amfitrió.",
|
||||
"WaitingForHostTitle": "S'està esperant l'amfitrió...",
|
||||
"Yes": "Sí",
|
||||
"accessibilityLabel": {
|
||||
|
||||
@@ -196,8 +196,7 @@
|
||||
"Remove": "Odstranit",
|
||||
"Share": "Sdílet",
|
||||
"Submit": "Potvrdit",
|
||||
"WaitForHostMsg": "Konference <b>{{room}}</b> ještě nezačala. Pokud jste hostitel, přihlaste se. Jinak prosím počkejte, až hostitel dorazí.",
|
||||
"WaitForHostMsgWOk": "Konference <b>{{room}}</b> ještě nezačala. Pokud jste hostitel, prosím přihlaste se kliknutím na OK. Jinak prosím počkejte, až hostitel dorazí.",
|
||||
"WaitForHostMsg": "Konference ještě nezačala. Pokud jste hostitel, přihlaste se. Jinak prosím počkejte, až hostitel dorazí.",
|
||||
"WaitingForHost": "Čeká se na hostitele…",
|
||||
"Yes": "Ano",
|
||||
"accessibilityLabel": {
|
||||
|
||||
@@ -156,8 +156,7 @@
|
||||
"Remove": "Fjern",
|
||||
"Share": "Del",
|
||||
"Submit": "Gem",
|
||||
"WaitForHostMsg": "Mødet <b>{{room}}</b> er ikke startet endnu. Hvis du er værten, log venligst ind. Ellers vent på at værten kommer",
|
||||
"WaitForHostMsgWOk": "Mødet <b>{{room}}</b> er ikke startet endnu. Hvis du er værten, tryk venligst på OK for at logge ind. Ellers vent på at værten kommer.",
|
||||
"WaitForHostMsg": "Mødet er ikke startet endnu. Hvis du er værten, log venligst ind. Ellers vent på at værten kommer",
|
||||
"WaitingForHost": "Venter på vært …",
|
||||
"Yes": "Ja",
|
||||
"accessibilityLabel": {
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
},
|
||||
"audioDevices": {
|
||||
"bluetooth": "Bluetooth",
|
||||
"car": "Auto",
|
||||
"headphones": "Kopfhörer",
|
||||
"none": "Keine Audiogeräte verfügbar",
|
||||
"phone": "Hörer",
|
||||
@@ -83,6 +84,7 @@
|
||||
"enter": "Chat-Raum betreten",
|
||||
"error": "Fehler: Ihre Nachricht wurde nicht versendet. Grund: {{error}}",
|
||||
"fieldPlaceHolder": "Geben Sie Ihre Nachricht hier ein",
|
||||
"lobbyChatMessageTo": "Lobby-Nachricht an {{recipient}}",
|
||||
"message": "Nachricht",
|
||||
"messageAccessibleTitle": "{{user}} sagt:",
|
||||
"messageAccessibleTitleMe": "Ich sage:",
|
||||
@@ -208,14 +210,15 @@
|
||||
"Remove": "Entfernen",
|
||||
"Share": "Teilen",
|
||||
"Submit": "OK",
|
||||
"WaitForHostMsg": "Die Konferenz <b>{{room}}</b> wurde noch nicht gestartet. Falls Sie die Konferenz leiten, authentifizieren Sie sich bitte. Warten Sie andernfalls, bis die Konferenz gestartet wird.",
|
||||
"WaitForHostMsgWOk": "Die Konferenz <b>{{room}}</b> wurde noch nicht gestartet. Falls Sie die Konferenz leiten, authentifizieren Sie sich bitte. Warten Sie andernfalls, bis die Konferenz gestartet wird.",
|
||||
"WaitForHostMsg": "Die Konferenz wurde noch nicht gestartet. Falls Sie die Konferenz leiten, authentifizieren Sie sich bitte. Warten Sie andernfalls, bis die Konferenz gestartet wird.",
|
||||
"WaitingForHostTitle": "Warten auf den Beginn der Konferenz …",
|
||||
"Yes": "Ja",
|
||||
"accessibilityLabel": {
|
||||
"liveStreaming": "Livestream"
|
||||
},
|
||||
"add": "Hinzufügen",
|
||||
"addMeetingNote": "Notiz zu dieser Konferenz hinzufügen",
|
||||
"addOptionalNote": "Notiz hinzufügen (optional):",
|
||||
"allow": "Erlauben",
|
||||
"alreadySharedVideoMsg": "Eine andere Person gibt bereits ein Video weiter. Bei dieser Konferenz ist jeweils nur ein geteiltes Video möglich.",
|
||||
"alreadySharedVideoTitle": "Nur ein geteiltes Video gleichzeitig",
|
||||
@@ -267,6 +270,8 @@
|
||||
"kickParticipantDialog": "Wollen Sie diese Person wirklich entfernen?",
|
||||
"kickParticipantTitle": "Person entfernen?",
|
||||
"kickTitle": "Autsch! {{participantDisplayName}} hat Sie aus dem Meeting geworfen",
|
||||
"linkMeeting": "Konferenz verlinken",
|
||||
"linkMeetingTitle": "Konferenz mit Salesforce verlinken",
|
||||
"liveStreaming": "Livestreaming",
|
||||
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Während einer Aufnahme nicht möglich",
|
||||
"liveStreamingDisabledTooltip": "Starten des Livestreams deaktiviert.",
|
||||
@@ -303,11 +308,11 @@
|
||||
"muteEveryonesVideoTitle": "Die Kamera von allen anderen ausschalten?",
|
||||
"muteParticipantBody": "Sie können die Stummschaltung anderer Personen nicht aufheben, aber eine Person kann ihre eigene Stummschaltung jederzeit beenden.",
|
||||
"muteParticipantButton": "Stummschalten",
|
||||
"muteParticipantDialog": "Wollen Sie diese Person wirklich stummschalten? Sie können die Stummschaltung nicht wieder aufheben, die Person kann dies aber jederzeit selbst tun.",
|
||||
"muteParticipantTitle": "Person stummschalten?",
|
||||
"muteParticipantsVideoBody": "Sie können die Kamera nicht wieder aktivieren, die Teilnehmer können dies aber jederzeit wieder ändern.",
|
||||
"muteParticipantsVideoBodyModerationOn": "Sie können die Kamera nicht wieder aktivieren und die Person selbst auch nicht.",
|
||||
"muteParticipantsVideoButton": "Kamera ausschalten",
|
||||
"muteParticipantsVideoDialog": "Wollen Sie die Kamera dieser Person wirklich deaktivieren? Sie können die Kamera nicht wieder aktivieren, die Person kann dies aber jederzeit selbst tun.",
|
||||
"muteParticipantsVideoDialogModerationOn": "Wollen Sie die Kamera dieser Person wirklich deaktivieren? Sie können die Kamea nicht wieder aktivieren und die Person selbst auch nicht.",
|
||||
"muteParticipantsVideoTitle": "Die Kamera von dieser Person ausschalten?",
|
||||
"noDropboxToken": "Kein gültiges Dropbox-Token",
|
||||
"password": "Passwort",
|
||||
@@ -321,6 +326,7 @@
|
||||
"popupError": "Ihr Browser blockiert Pop-ups von dieser Website. Bitte aktivieren Sie Pop-ups in den Sicherheitseinstellungen des Browsers und versuchen Sie es erneut.",
|
||||
"popupErrorTitle": "Pop-up blockiert",
|
||||
"readMore": "mehr",
|
||||
"recentlyUsedObjects": "Ihre zuletzt verwendeten Objekte",
|
||||
"recording": "Aufnahme",
|
||||
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Während eines Livestreams nicht möglich",
|
||||
"recordingDisabledTooltip": "Start der Aufzeichnung deaktiviert.",
|
||||
@@ -343,6 +349,12 @@
|
||||
"screenSharingFailed": "Ups! Beim Teilen des Bildschirms ist etwas schiefgegangen!",
|
||||
"screenSharingFailedTitle": "Bildschirmfreigabe fehlgeschlagen!",
|
||||
"screenSharingPermissionDeniedError": "Ups! Etwas stimmt nicht mit Ihren Berechtigungen zur Bildschirmfreigabe. Bitte neu laden und erneut versuchen.",
|
||||
"searchInSalesforce": "In Salesforce suchen",
|
||||
"searchResults": "Suchergebnisse({{count}})",
|
||||
"searchResultsDetailsError": "Beim Abrufen der Daten des Besitzers ist ein Fehler aufgetreten.",
|
||||
"searchResultsError": "Beim Abrufen der Daten ist ein Fehler aufgetreten.",
|
||||
"searchResultsNotFound": "Keine Suchergebnisse.",
|
||||
"searchResultsTryAgain": "Versuchen Sie es mit anderen Stichwörtern.",
|
||||
"sendPrivateMessage": "Sie haben kürzlich eine private Nachricht erhalten. Hatten Sie die Absicht, darauf privat zu antworten, oder wollen Sie Ihre Nachricht an die Gruppe senden?",
|
||||
"sendPrivateMessageCancel": "An die Gruppe senden",
|
||||
"sendPrivateMessageOk": "Privat antworten",
|
||||
@@ -410,6 +422,10 @@
|
||||
"veryBad": "Sehr schlecht",
|
||||
"veryGood": "Sehr gut"
|
||||
},
|
||||
"giphy": {
|
||||
"noResults": "Keine Ergebnisse :(",
|
||||
"search": "GIPHY durchsuchen"
|
||||
},
|
||||
"helpView": {
|
||||
"header": "Hilfecenter"
|
||||
},
|
||||
@@ -476,6 +492,7 @@
|
||||
"focusLocal": "Lokales Video fokussieren",
|
||||
"focusRemote": "Auf das Video einer anderen Person fokussieren",
|
||||
"fullScreen": "Vollbildmodus aktivieren oder deaktivieren",
|
||||
"giphyMenu": "GIPHY ein- oder ausblenden",
|
||||
"keyboardShortcuts": "Tastenkürzel",
|
||||
"localRecording": "Lokale Aufzeichnungssteuerelemente ein- oder ausblenden",
|
||||
"mute": "Stummschaltung aktivieren oder deaktivieren",
|
||||
@@ -530,6 +547,7 @@
|
||||
"admitAll": "Alle zulassen",
|
||||
"allow": "Annehmen",
|
||||
"backToKnockModeButton": "Kein Passwort, stattdessen Beitritt anfragen",
|
||||
"chat": "Chat",
|
||||
"dialogTitle": "Lobbymodus",
|
||||
"disableDialogContent": "Der Lobbymodus ist derzeit aktiviert. Diese Funktion stellt sicher, dass unerwünschte Personen Ihrer Konferenz nicht beitreten können. Funktion deaktivieren?",
|
||||
"disableDialogSubmit": "Deaktivieren",
|
||||
@@ -542,6 +560,7 @@
|
||||
"errorMissingPassword": "Bitte das Konferenzpasswort eingeben",
|
||||
"invalidPassword": "Ungültiges Passwort",
|
||||
"joinRejectedMessage": "Ihre Beitrittsanfrage wurde von der Moderation abgelehnt.",
|
||||
"joinRejectedTitle": "Beitrittsanfrage abgelehnt.",
|
||||
"joinTitle": "Konferenz beitreten",
|
||||
"joinWithPasswordMessage": "Beitrittsversuch mit Passwort, bitte warten …",
|
||||
"joiningMessage": "Sie treten der Konferenz bei, sobald jemand Ihre Anfrage annimmt.",
|
||||
@@ -550,6 +569,8 @@
|
||||
"knockButton": "Beitritt anfragen",
|
||||
"knockTitle": "Jemand möchte der Konferenz beitreten",
|
||||
"knockingParticipantList": "Liste anklopfender Personen",
|
||||
"lobbyChatStartedNotification": "{{moderator}} hat einen Lobby-Chat mit {{attendee}} gestartet",
|
||||
"lobbyChatStartedTitle": "{{moderator}} hat einen Lobby-Chat mit Ihnen gestartet.",
|
||||
"nameField": "Geben Sie Ihren Namen ein",
|
||||
"notificationLobbyAccessDenied": "{{targetParticipantName}} wurde von {{originParticipantName}} der Zutritt verwehrt",
|
||||
"notificationLobbyAccessGranted": "{{targetParticipantName}} wurde von {{originParticipantName}} der Zutritt gestattet",
|
||||
@@ -612,6 +633,7 @@
|
||||
"displayNotifications": "Benachrichtigungen anzeigen für",
|
||||
"focus": "Konferenzleitung",
|
||||
"focusFail": "{{component}} ist im Moment nicht verfügbar – wiederholen in {{ms}} Sekunden",
|
||||
"gifsMenu": "GIPHY",
|
||||
"groupTitle": "Benachrichtigungen",
|
||||
"hostAskedUnmute": "Die Moderation bittet Sie, das Mikrofon zu aktivieren",
|
||||
"invitedOneMember": "{{name}} wurde eingeladen",
|
||||
@@ -621,6 +643,12 @@
|
||||
"leftOneMember": "{{name}} hat die Konferenz verlassen",
|
||||
"leftThreePlusMembers": "{{name}} und Weitere haben die Konferenz verlassen",
|
||||
"leftTwoMembers": "{{first}} und {{second}} haben die Konferenz verlassen",
|
||||
"linkToSalesforce": "Mit Salesforce verlinken",
|
||||
"linkToSalesforceDescription": "Sie können die Zusammenfassung der Konferenz mit einem Objekt bei Salesforce verlinken.",
|
||||
"linkToSalesforceError": "Konferenz konnte nicht mit Salesforce verlinkt werden",
|
||||
"linkToSalesforceKey": "Konferenz verlinken",
|
||||
"linkToSalesforceProgress": "Konferenz wird mit Salesforce verlinkt...",
|
||||
"linkToSalesforceSuccess": "Die Konferenz wurde mit Salesforce verlinkt",
|
||||
"me": "Ich",
|
||||
"moderationInEffectCSDescription": "Bitte melden um ein Video zu teilen",
|
||||
"moderationInEffectCSTitle": "Die Videofreigabe ist von der Moderation gesperrt",
|
||||
@@ -699,6 +727,7 @@
|
||||
},
|
||||
"passwordDigitsOnly": "Bis zu {{number}} Ziffern",
|
||||
"passwordSetRemotely": "von einer anderen Person gesetzt",
|
||||
"pinnedParticipant": "Die Person ist angeheftet",
|
||||
"polls": {
|
||||
"answer": {
|
||||
"skip": "Überspringen",
|
||||
@@ -814,6 +843,18 @@
|
||||
},
|
||||
"raisedHand": "Ich möchte sprechen",
|
||||
"raisedHandsLabel": "Anzahl gehobener Hände",
|
||||
"record": {
|
||||
"already": {
|
||||
"linked": "Diese Konferenz ist bereits mit einem Objekt bei Salesforce verlinkt."
|
||||
},
|
||||
"type": {
|
||||
"account": "Account",
|
||||
"contact": "Contact",
|
||||
"lead": "Lead",
|
||||
"opportunity": "Opportunity",
|
||||
"owner": "Owner"
|
||||
}
|
||||
},
|
||||
"recording": {
|
||||
"authDropboxText": "In Dropbox hochladen",
|
||||
"availableSpace": "Verfügbarer Speicherplatz: {{spaceLeft}} MB (ca. {{duration}} Minuten Aufzeichnung)",
|
||||
@@ -828,6 +869,11 @@
|
||||
"expandedPending": "Aufzeichnung wird gestartet…",
|
||||
"failedToStart": "Die Aufnahme konnte nicht gestartet werden",
|
||||
"fileSharingdescription": "Aufzeichnung mit den Personen der Konferenz teilen",
|
||||
"highlight": "Highlight",
|
||||
"highlightMoment": "Moment als Highlight festhalten",
|
||||
"highlightMomentDisabled": "Sie können Momente als Highlights festhalten, sobald die Aufnahme startet",
|
||||
"highlightMomentSuccess": "Highlight festgehalten",
|
||||
"highlightMomentSucessDescription": "Ihr festgehaltener Moment wird zur Zusammenfassung des Meeting hinzugefügt.",
|
||||
"inProgress": "Aufzeichnung gestartet",
|
||||
"limitNotificationDescriptionNative": "Wegen hoher Nachfrage ist Ihre Aufnahme auf {{limit}} Min. begrenzt. Für unlimitierte Aufnahmen nutzen Sie bitte <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Wegen hoher Nachfrage ist Ihre Aufnahme auf {{limit}} Min. begrenzt. Für unlimitierte Aufnahmen nutzen Sie bitte <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
@@ -842,6 +888,7 @@
|
||||
"rec": "AUFZ",
|
||||
"serviceDescription": "Ihre Aufzeichnung wird vom Aufzeichnungsdienst gespeichert",
|
||||
"serviceDescriptionCloud": "Cloud-Aufzeichnung",
|
||||
"serviceDescriptionCloudInfo": "Aufzeichnungen werden 24 Stunden nach Aufzeichnungsende automatisch gelöscht.",
|
||||
"serviceName": "Aufnahmedienst",
|
||||
"sessionAlreadyActive": "Diese Konferenz wird bereits aufgezeichnet.",
|
||||
"signIn": "Anmelden",
|
||||
@@ -876,6 +923,7 @@
|
||||
"incomingMessage": "Eingehende Nachricht",
|
||||
"language": "Sprache",
|
||||
"loggedIn": "Als {{name}} angemeldet",
|
||||
"maxStageParticipants": "Maximale Anzahl an Personen, die zur Hauptansicht angeheftet werden können",
|
||||
"microphones": "Mikrofon",
|
||||
"moderator": "Moderation",
|
||||
"more": "Mehr",
|
||||
@@ -974,6 +1022,7 @@
|
||||
"expand": "Ausklappen",
|
||||
"feedback": "Feedback hinterlassen",
|
||||
"fullScreen": "Vollbildmodus ein-/ausschalten",
|
||||
"giphy": "GIPHY ein-/ausschalten",
|
||||
"grantModerator": "Moderationsrechte vergeben",
|
||||
"hangup": "Konferenz verlassen",
|
||||
"help": "Hilfe",
|
||||
@@ -981,6 +1030,7 @@
|
||||
"kick": "Person entfernen",
|
||||
"laugh": "Lachen",
|
||||
"like": "Daumen nach oben",
|
||||
"linkToSalesforce": "Mit Salesforce verlinken",
|
||||
"lobbyButton": "Lobbymodus ein-/ausschalten",
|
||||
"localRecording": "Lokale Aufzeichnungssteuerelemente ein-/ausschalten",
|
||||
"lockRoom": "Konferenzpasswort ein-/ausschalten",
|
||||
@@ -990,8 +1040,8 @@
|
||||
"mute": "Mikrofon aktivieren / deaktivieren",
|
||||
"muteEveryone": "Alle stummschalten",
|
||||
"muteEveryoneElse": "Alle anderen stummschalten",
|
||||
"muteEveryoneElsesVideo": "Alle anderen Kameras ausschalten",
|
||||
"muteEveryonesVideo": "Alle Kameras ausschalten",
|
||||
"muteEveryoneElsesVideoStream": "Alle anderen Kameras ausschalten",
|
||||
"muteEveryonesVideoStream": "Alle Kameras ausschalten",
|
||||
"participants": "Anwesende",
|
||||
"pip": "Bild-in-Bild-Modus ein-/ausschalten",
|
||||
"privateMessage": "Private Nachricht senden",
|
||||
@@ -1042,6 +1092,7 @@
|
||||
"exitFullScreen": "Vollbildmodus verlassen",
|
||||
"exitTileView": "Kachelansicht ausschalten",
|
||||
"feedback": "Feedback hinterlassen",
|
||||
"giphy": "GIPHY ein-/ausschalten",
|
||||
"hangup": "Konferenz verlassen",
|
||||
"help": "Hilfe",
|
||||
"invite": "Personen einladen",
|
||||
@@ -1049,6 +1100,7 @@
|
||||
"laugh": "Lachen",
|
||||
"leaveBreakoutRoom": "Breakout-Raum verlassen",
|
||||
"like": "Daumen hoch",
|
||||
"linkToSalesforce": "Mit Salesforce verknüpfen",
|
||||
"lobbyButtonDisable": "Lobbymodus deaktivieren",
|
||||
"lobbyButtonEnable": "Lobbymodus aktivieren",
|
||||
"login": "Anmelden",
|
||||
@@ -1168,10 +1220,12 @@
|
||||
"moderator": "Moderation",
|
||||
"mute": "Person ist stumm geschaltet",
|
||||
"muted": "Stummgeschaltet",
|
||||
"pinToStage": "Anheften",
|
||||
"remoteControl": "Fernsteuerung",
|
||||
"screenSharing": "Person teilt den Bildschirm",
|
||||
"show": "Im Vordergrund anzeigen",
|
||||
"showSelfView": "Eigene Ansicht anzeigen",
|
||||
"unpinFromStage": "Lösen",
|
||||
"videoMuted": "Kamera ausgeschaltet",
|
||||
"videomute": "Person hat die Kamera angehalten"
|
||||
},
|
||||
|
||||
@@ -172,8 +172,7 @@
|
||||
"Remove": "Αφαίρεση",
|
||||
"Share": "Μοιραστείτε",
|
||||
"Submit": "Υποβολή",
|
||||
"WaitForHostMsg": "Η διάσκεψη <b>{{room}}</b> δεν έχει ακόμη αρχίσει. Αν είστε ο οικοδεσπότης, τότε παρακαλούμε να πιστοποιήσετε τον εαυτό σας. Διαφορετικά, σας παρακαλώ να περιμένετε να συνδεθεί ο οικοδεσπότης.",
|
||||
"WaitForHostMsgWOk": "Η διάσκεψη <b>{{room}}</b> δεν έχει ακόμη αρχίσει. Αν είστε ο οικοδεσπότης, τότε παρακαλούμε πατήστε ΟΚ για να πιστοποιήσετε τον εαυτό σας. Διαφορετικά, σας παρακαλώ να περιμένετε να συνδεθεί ο οικοδεσπότης.",
|
||||
"WaitForHostMsg": "Η διάσκεψη δεν έχει ακόμη αρχίσει. Αν είστε ο οικοδεσπότης, τότε παρακαλούμε να πιστοποιήσετε τον εαυτό σας. Διαφορετικά, σας παρακαλώ να περιμένετε να συνδεθεί ο οικοδεσπότης.",
|
||||
"WaitingForHost": "Αναμονή για τον οικοδεσπότη ...",
|
||||
"Yes": "Ναι",
|
||||
"accessibilityLabel": {
|
||||
|
||||
@@ -160,8 +160,7 @@
|
||||
"Remove": "Remove",
|
||||
"Share": "Share",
|
||||
"Submit": "Submit",
|
||||
"WaitForHostMsg": "The conference <b>{{room}}</b> has not yet started. If you are the host then please authenticate. Otherwise, please wait for the host to arrive.",
|
||||
"WaitForHostMsgWOk": "The conference <b>{{room}}</b> has not yet started. If you are the host then please press Ok to authenticate. Otherwise, please wait for the host to arrive.",
|
||||
"WaitForHostMsg": "The conference has not yet started. If you are the host then please authenticate. Otherwise, please wait for the host to arrive.",
|
||||
"WaitingForHost": "Waiting for the host …",
|
||||
"Yes": "Yes",
|
||||
"accessibilityLabel": {
|
||||
|
||||
@@ -155,8 +155,7 @@
|
||||
"Remove": "Forigi",
|
||||
"Share": "Kundividi",
|
||||
"Submit": "Sendi",
|
||||
"WaitForHostMsg": "La kunveno <b>{{room}}</b> ankoraŭ ne komencis. Se vi estas la gastiganto, bonvolu aŭtentiĝi. Alikaze atendu, ĝis la gastiganto venos.",
|
||||
"WaitForHostMsgWOk": "La kunveno <b>{{room}}</b> ankoraŭ ne komencis. Se vi estas la gastiganto, bonvolu puŝi “Bone” por aŭtentiĝi. Alikaze atendu, ĝis la gastiganto venos.",
|
||||
"WaitForHostMsg": "La kunveno ankoraŭ ne komencis. Se vi estas la gastiganto, bonvolu aŭtentiĝi. Alikaze atendu, ĝis la gastiganto venos.",
|
||||
"WaitingForHost": "Atendo de la gastiga komputilo…",
|
||||
"Yes": "Jes",
|
||||
"accessibilityLabel": {
|
||||
|
||||
@@ -185,8 +185,7 @@
|
||||
"Remove": "Eliminar",
|
||||
"Share": "Compartir",
|
||||
"Submit": "Enviar",
|
||||
"WaitForHostMsg": "La conferencia <b>{{room}}</b> aún no ha comenzado. Si eres el anfitrión, inicia sesión. De lo contrario, espera a que llegue el anfitrión.",
|
||||
"WaitForHostMsgWOk": "La conferencia <b>{{room}}</b> aún no ha comenzado. Si eres el anfitrión, presiona Aceptar para autenticar. De lo contrario, espera a que llegue el anfitrión.",
|
||||
"WaitForHostMsg": "La conferencia aún no ha comenzado. Si eres el anfitrión, inicia sesión. De lo contrario, espera a que llegue el anfitrión.",
|
||||
"WaitingForHostTitle": "Esperando al anfitrión...",
|
||||
"Yes": "Sí",
|
||||
"accessibilityLabel": {
|
||||
@@ -650,7 +649,7 @@
|
||||
"waitingLobby": "Esperando en el vestíbulo ({{count}})"
|
||||
}
|
||||
},
|
||||
"passwordDigitsOnly": "Hasta {{number]] cifras",
|
||||
"passwordDigitsOnly": "Hasta {{number}} cifras",
|
||||
"passwordSetRemotely": "Definida por otro participante",
|
||||
"polls": {
|
||||
"answer": {
|
||||
|
||||
@@ -194,8 +194,7 @@
|
||||
"Remove": "Eliminar",
|
||||
"Share": "Compartir",
|
||||
"Submit": "Enviar",
|
||||
"WaitForHostMsg": "La conferencia <b>{{room}}</b> aún no ha comenzado. Si eres el anfitrión, inicia sesión. De lo contrario, espera a que llegue el anfitrión.",
|
||||
"WaitForHostMsgWOk": "La conferencia <b>{{room}}</b> aún no ha comenzado. Si eres el anfitrión, presiona Aceptar para autenticar. De lo contrario, espera a que llegue el anfitrión.",
|
||||
"WaitForHostMsg": "La conferencia aún no ha comenzado. Si eres el anfitrión, inicia sesión. De lo contrario, espera a que llegue el anfitrión.",
|
||||
"WaitingForHost": "Esperando al anfitrión…",
|
||||
"WaitingForHostTitle": "Esperando al anfitrión...",
|
||||
"Yes": "Sí",
|
||||
@@ -674,7 +673,7 @@
|
||||
"waitingLobby": "Esperando en el vestíbulo ({{count}})"
|
||||
}
|
||||
},
|
||||
"passwordDigitsOnly": "Hasta {{number]] cifras",
|
||||
"passwordDigitsOnly": "Hasta {{number}} cifras",
|
||||
"passwordSetRemotely": "definida por otro participante",
|
||||
"polls": {
|
||||
"answer": {
|
||||
|
||||
@@ -155,8 +155,7 @@
|
||||
"Remove": "Eemalda",
|
||||
"Share": "Jaga",
|
||||
"Submit": "Esita",
|
||||
"WaitForHostMsg": "Kõne <b>{{room}}</b> ei ole veel alanud. Autendi ennast, kui oled võõrustaja. Külalisena oota, kuni võõrustaja saabub.",
|
||||
"WaitForHostMsgWOk": "Kõne <b>{{room}}</b> ei ole veel alanud. Kui oled võõrustaja, vajuta OK, et ennast autentida. Külalisena oota, kuni võõrustaja saabub.",
|
||||
"WaitForHostMsg": "Kõne ei ole veel alanud. Autendi ennast, kui oled võõrustaja. Külalisena oota, kuni võõrustaja saabub.",
|
||||
"WaitingForHost": "Võõrustaja ootamine…",
|
||||
"Yes": "Jah",
|
||||
"accessibilityLabel": {
|
||||
|
||||
@@ -181,8 +181,7 @@
|
||||
"Remove": "Kendu",
|
||||
"Share": "Partekatu",
|
||||
"Submit": "Bidali",
|
||||
"WaitForHostMsg": "<b>{{room}}</b> konferentzia oraindik ez da hasi. Ostalaria bazara, autentifikatu. Bestela, itxaron ostalaria iritsi arte.",
|
||||
"WaitForHostMsgWOk": "<b>{{room}}</b> konferentzia oraindik ez da hasi. Ostalaria bazara, sakatu Ados autentifikatu ahal izateko. Bestela, itxaron ostalaria iritsi arte.",
|
||||
"WaitForHostMsg": "Konferentzia oraindik ez da hasi. Ostalaria bazara, autentifikatu. Bestela, itxaron ostalaria iritsi arte.",
|
||||
"WaitingForHostTitle": "Antolatzailearen zain...",
|
||||
"Yes": "Bai",
|
||||
"accessibilityLabel": {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user