mirror of
https://gitcode.com/GitHub_Trending/ji/jitsi-meet.git
synced 2026-01-04 13:52:28 +00:00
Compare commits
508 Commits
testing1.2
...
8461
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6e6a3b2f72 | ||
|
|
cbfa5e38b3 | ||
|
|
94c55f7aa4 | ||
|
|
9843aca00a | ||
|
|
816e991ae5 | ||
|
|
cfbdbd4783 | ||
|
|
f83ad5af27 | ||
|
|
a5afd011a1 | ||
|
|
c88891da5b | ||
|
|
b1af0c800b | ||
|
|
146d2c8b66 | ||
|
|
a18e193611 | ||
|
|
6ae0bc36cc | ||
|
|
b1410c34e0 | ||
|
|
070991d7ef | ||
|
|
874f59f0ff | ||
|
|
fa547b5aac | ||
|
|
d27580c016 | ||
|
|
2093ef1ea2 | ||
|
|
75540a588d | ||
|
|
fe51b4c56a | ||
|
|
c7c42f6983 | ||
|
|
68df1b1281 | ||
|
|
00efcfaae5 | ||
|
|
c6b194a073 | ||
|
|
8ac44dfbb3 | ||
|
|
ea2ab9edc0 | ||
|
|
9d27c705f6 | ||
|
|
ebdd9755ba | ||
|
|
fa2a8c5084 | ||
|
|
ac2d73b57c | ||
|
|
93902e6364 | ||
|
|
42163731b3 | ||
|
|
01ce04fe9b | ||
|
|
5d29363764 | ||
|
|
bfe8bc9b73 | ||
|
|
a6f6235dd0 | ||
|
|
ee6bf011e9 | ||
|
|
bea8a7f984 | ||
|
|
2edca5dacb | ||
|
|
69ac73c556 | ||
|
|
89556ecd66 | ||
|
|
462f91f070 | ||
|
|
d29a77b15f | ||
|
|
c31fe521c4 | ||
|
|
8f6f542e9c | ||
|
|
69d9e7d405 | ||
|
|
5e6748a88a | ||
|
|
8bc70f9c87 | ||
|
|
357d226987 | ||
|
|
6b1f7138c6 | ||
|
|
55219dc51b | ||
|
|
0eb3a9a43c | ||
|
|
4d7136b7a7 | ||
|
|
b7d9e1d85d | ||
|
|
a714058328 | ||
|
|
02ff4a1bac | ||
|
|
7833e1337e | ||
|
|
18e0e64ca0 | ||
|
|
80a3d88359 | ||
|
|
5d72028872 | ||
|
|
e89776848c | ||
|
|
70bc78e765 | ||
|
|
4fceae7733 | ||
|
|
23b7dd4abf | ||
|
|
0216bbd1d9 | ||
|
|
15a4fa45e0 | ||
|
|
f2d9ffd5f6 | ||
|
|
b0ba7c8671 | ||
|
|
e5fa25892e | ||
|
|
ae5fe24556 | ||
|
|
b9ef0aa27a | ||
|
|
f30625acf0 | ||
|
|
66d70305a0 | ||
|
|
9108b7ebec | ||
|
|
9454049220 | ||
|
|
2ce2e01803 | ||
|
|
ab25d6c5ab | ||
|
|
1b0dc0cfb0 | ||
|
|
33e484a847 | ||
|
|
67bebc0491 | ||
|
|
9186a74ae3 | ||
|
|
67d9a9819e | ||
|
|
16b88a29db | ||
|
|
9783793514 | ||
|
|
93de398a09 | ||
|
|
23e97a4284 | ||
|
|
9bb906551e | ||
|
|
b1ad82cef9 | ||
|
|
09c9f2930c | ||
|
|
74efbd7a61 | ||
|
|
1b1e7d9bce | ||
|
|
dc98fc4839 | ||
|
|
a815f97c7e | ||
|
|
8261cf2811 | ||
|
|
f2238935b5 | ||
|
|
5f12f76ada | ||
|
|
5a9464697f | ||
|
|
f44601a82b | ||
|
|
3d3de4a884 | ||
|
|
c02ad56b6d | ||
|
|
ea7c5ccd58 | ||
|
|
7ec3eae72b | ||
|
|
edf7d18308 | ||
|
|
6bf4a4e91d | ||
|
|
5fd966f042 | ||
|
|
e275f20055 | ||
|
|
ff624a34d8 | ||
|
|
c98050224c | ||
|
|
5bee373091 | ||
|
|
db4ab34ddf | ||
|
|
ef138fb5aa | ||
|
|
13bfdaed68 | ||
|
|
ff656f4e6b | ||
|
|
a27b78cef0 | ||
|
|
4fa426ace0 | ||
|
|
ac34f524fa | ||
|
|
31a4f2a4ec | ||
|
|
dc908512f9 | ||
|
|
ae983645d1 | ||
|
|
3514b22191 | ||
|
|
405af3af5f | ||
|
|
a6d333c07a | ||
|
|
0387cdc888 | ||
|
|
f670f39dd2 | ||
|
|
7262465777 | ||
|
|
75b4049529 | ||
|
|
ac6185424c | ||
|
|
9e15df8e3d | ||
|
|
83f83c17eb | ||
|
|
3e1adcd9b7 | ||
|
|
8105127571 | ||
|
|
bc99a72984 | ||
|
|
e10eaaa3d9 | ||
|
|
0e831074c0 | ||
|
|
326b694bf2 | ||
|
|
9e1f3de4e5 | ||
|
|
07a25a1f00 | ||
|
|
d6bbe07cf2 | ||
|
|
e9a8fd5392 | ||
|
|
aea9c5e79e | ||
|
|
b60210d0ad | ||
|
|
f0d2106c1a | ||
|
|
13f1cb13c5 | ||
|
|
c27ca779ab | ||
|
|
aedb43ec5b | ||
|
|
0a68eed294 | ||
|
|
3f51b10245 | ||
|
|
5260cd7e30 | ||
|
|
0d109eaf00 | ||
|
|
75c43fc8f2 | ||
|
|
532b5858c5 | ||
|
|
edc2328fd6 | ||
|
|
a603a8df06 | ||
|
|
703a4d0f34 | ||
|
|
44c1624c61 | ||
|
|
5b5e233734 | ||
|
|
5607e50b8e | ||
|
|
39c942d585 | ||
|
|
1c04f974d8 | ||
|
|
dc5142cb6b | ||
|
|
d563913499 | ||
|
|
4d0642d1a7 | ||
|
|
8d8e83cdfd | ||
|
|
6d0271338e | ||
|
|
1401eb245e | ||
|
|
27eec7b19e | ||
|
|
b0d0b3ac11 | ||
|
|
2c11b1b945 | ||
|
|
2c92ea57f0 | ||
|
|
09b696e95a | ||
|
|
d67054a550 | ||
|
|
05374e292b | ||
|
|
f038099e61 | ||
|
|
da5f2d00d4 | ||
|
|
c8a7877fdd | ||
|
|
d8da660070 | ||
|
|
4e033fff4b | ||
|
|
4861f95368 | ||
|
|
b3ee8fe127 | ||
|
|
95a6001a6f | ||
|
|
a3622a3698 | ||
|
|
4cdc193ac3 | ||
|
|
5c9b8a5a5f | ||
|
|
44bd70179c | ||
|
|
0973081fea | ||
|
|
006c491de4 | ||
|
|
24cfa7b4e1 | ||
|
|
b890aa33c3 | ||
|
|
9846228210 | ||
|
|
445eef97b3 | ||
|
|
298279a956 | ||
|
|
5ebf5adfa2 | ||
|
|
35554533d1 | ||
|
|
fb397db69f | ||
|
|
8fc295b385 | ||
|
|
ee8b62cf73 | ||
|
|
217b803652 | ||
|
|
2442a332e7 | ||
|
|
2e43706a4a | ||
|
|
e7db943b73 | ||
|
|
c1cbd37d87 | ||
|
|
ef56f1d23d | ||
|
|
2ab002650c | ||
|
|
867646da1a | ||
|
|
ff78bfb62f | ||
|
|
1827610fc1 | ||
|
|
0ae8051fb4 | ||
|
|
1b7668bbdc | ||
|
|
4c37e0d761 | ||
|
|
a6ff652a03 | ||
|
|
17f34878db | ||
|
|
37856e0fdb | ||
|
|
7c1de52f6a | ||
|
|
9e3438696b | ||
|
|
9c23cc0b70 | ||
|
|
af8157bc06 | ||
|
|
c21f84c15a | ||
|
|
1edf88e744 | ||
|
|
bad75b488e | ||
|
|
5bb3ba71d0 | ||
|
|
4e0001c9af | ||
|
|
ada6150971 | ||
|
|
62d1ee606a | ||
|
|
1e1de6acf0 | ||
|
|
e1e0fba4ff | ||
|
|
97be3fa399 | ||
|
|
fbdee85c4b | ||
|
|
b71b4c8c45 | ||
|
|
a8d123ede4 | ||
|
|
fb8e451e2e | ||
|
|
5dd7944bdb | ||
|
|
48732c6784 | ||
|
|
97146ed8a7 | ||
|
|
78b17c8d17 | ||
|
|
9732d1be86 | ||
|
|
a836187620 | ||
|
|
a0cad4c595 | ||
|
|
19b9eac84a | ||
|
|
068e33fc0f | ||
|
|
00c6bee2fd | ||
|
|
748ead7e13 | ||
|
|
174c4418fb | ||
|
|
64494cab81 | ||
|
|
50d0092e30 | ||
|
|
fdbd7239ff | ||
|
|
a30958ab23 | ||
|
|
aca55172e4 | ||
|
|
c6cce9253c | ||
|
|
c23684e11c | ||
|
|
30595584a3 | ||
|
|
3d30489cc4 | ||
|
|
7288a6dce4 | ||
|
|
697c41bffa | ||
|
|
0361830122 | ||
|
|
6bb984acc8 | ||
|
|
938d112f6b | ||
|
|
d8cca36181 | ||
|
|
c9add0a9ef | ||
|
|
aabc50da60 | ||
|
|
4aa4382d2b | ||
|
|
6bf1b46609 | ||
|
|
9d7237dc24 | ||
|
|
3745c19857 | ||
|
|
cd6419d826 | ||
|
|
a05e8fd2ef | ||
|
|
239e5743dd | ||
|
|
01a731ab4d | ||
|
|
3d56538c69 | ||
|
|
2dc135b80f | ||
|
|
4e81d4461b | ||
|
|
68b16d7bc8 | ||
|
|
45f6550d30 | ||
|
|
5c65446ef4 | ||
|
|
eee58b2945 | ||
|
|
c7cfb5218d | ||
|
|
b9017176a8 | ||
|
|
cad37306d4 | ||
|
|
83192435e7 | ||
|
|
f85d0e6469 | ||
|
|
3834f1e99c | ||
|
|
79ece5d4e5 | ||
|
|
b0ffc2cd69 | ||
|
|
5a45ebb877 | ||
|
|
dcea5332be | ||
|
|
4e72601bee | ||
|
|
ccd9386184 | ||
|
|
05a930e5f5 | ||
|
|
9bc0e7589c | ||
|
|
c0541c8737 | ||
|
|
c11147b583 | ||
|
|
ef992eaef3 | ||
|
|
0149b5f6e6 | ||
|
|
4d7c051dd0 | ||
|
|
f3324ab165 | ||
|
|
4d483f7846 | ||
|
|
478852c474 | ||
|
|
deb574a154 | ||
|
|
c2f4dd9dea | ||
|
|
67c3a50412 | ||
|
|
b303693198 | ||
|
|
a4a1619dc2 | ||
|
|
c95d1d7f7e | ||
|
|
97310b5ab5 | ||
|
|
e151be48b9 | ||
|
|
91e1007e5b | ||
|
|
8db769b174 | ||
|
|
260e5d11b9 | ||
|
|
b2fbf6d2a3 | ||
|
|
4df9087459 | ||
|
|
e0bf82aad8 | ||
|
|
91c48dfe03 | ||
|
|
a86542d650 | ||
|
|
9e9eac3e38 | ||
|
|
73cba3561e | ||
|
|
63e69c224d | ||
|
|
50e9413aad | ||
|
|
037a7c082c | ||
|
|
6af4d182d0 | ||
|
|
d438292d2c | ||
|
|
d45c108051 | ||
|
|
5cd7b9be38 | ||
|
|
aa1c3c0ad8 | ||
|
|
07810f8c2d | ||
|
|
96d41196e6 | ||
|
|
293a41d4aa | ||
|
|
def9555268 | ||
|
|
71de1d1e2d | ||
|
|
49cf63213d | ||
|
|
86d1bd3c78 | ||
|
|
122f5dffe8 | ||
|
|
da35c96afd | ||
|
|
e52c6e6b35 | ||
|
|
1e43bbbd95 | ||
|
|
2d77bf1da9 | ||
|
|
dc25a8dde4 | ||
|
|
ab51512088 | ||
|
|
956ca27b01 | ||
|
|
d7e2be200a | ||
|
|
459b5372d1 | ||
|
|
1a3dd699b7 | ||
|
|
04bee97682 | ||
|
|
aa506a7607 | ||
|
|
afac97e7d4 | ||
|
|
61a0247f30 | ||
|
|
7b4965f6b2 | ||
|
|
d78b980b35 | ||
|
|
103d1d9f35 | ||
|
|
6d3330a208 | ||
|
|
771f5af59d | ||
|
|
2c96880985 | ||
|
|
3fb968b3cb | ||
|
|
b2059060fc | ||
|
|
6ad2735efb | ||
|
|
e2a933ad92 | ||
|
|
12b682992b | ||
|
|
4f78dee708 | ||
|
|
7ff78313ff | ||
|
|
ac182c18f9 | ||
|
|
b562176062 | ||
|
|
437ed46349 | ||
|
|
f0e01da39a | ||
|
|
755ab2a108 | ||
|
|
c11f5d36ea | ||
|
|
ecf72273af | ||
|
|
960a08c066 | ||
|
|
390431f4d0 | ||
|
|
0636527146 | ||
|
|
66ba41992d | ||
|
|
036d783776 | ||
|
|
1f37e0ba8d | ||
|
|
2d15cc025e | ||
|
|
4b93cbbd8d | ||
|
|
939a9a45d3 | ||
|
|
dd859d2a26 | ||
|
|
39540531ff | ||
|
|
3d85202987 | ||
|
|
9fd6a6c822 | ||
|
|
ae00247632 | ||
|
|
2b719743d3 | ||
|
|
2b8cc89df0 | ||
|
|
b7eae6c0ca | ||
|
|
24ae69348b | ||
|
|
22f315ddfa | ||
|
|
a50d6dc0f4 | ||
|
|
15ba1bb280 | ||
|
|
3438e5d56a | ||
|
|
176e409af5 | ||
|
|
d09243c2c5 | ||
|
|
b0a050b66a | ||
|
|
26e283393f | ||
|
|
d9a0423687 | ||
|
|
39c9c24810 | ||
|
|
d6a42fbe43 | ||
|
|
808bc24d95 | ||
|
|
e04db24d15 | ||
|
|
c24c25849d | ||
|
|
d5269e881a | ||
|
|
5da69192e3 | ||
|
|
2413b8977e | ||
|
|
50b90933dc | ||
|
|
09d57972af | ||
|
|
8f1c63579c | ||
|
|
62856b0f58 | ||
|
|
a3617b042e | ||
|
|
6e13269ddb | ||
|
|
97930bfef2 | ||
|
|
7bb2f1eaad | ||
|
|
acc46c0c5f | ||
|
|
1152073b57 | ||
|
|
e328b15fcd | ||
|
|
bc21a462eb | ||
|
|
8d82c20319 | ||
|
|
574c61d3e5 | ||
|
|
9f73eb76a3 | ||
|
|
b620328861 | ||
|
|
085e6dd3b9 | ||
|
|
936fa55ce9 | ||
|
|
ede26956e8 | ||
|
|
b3742a3438 | ||
|
|
262cb0422c | ||
|
|
756c4afbdd | ||
|
|
4c9234ffec | ||
|
|
5ea2093a40 | ||
|
|
ab57a2999b | ||
|
|
7718c39319 | ||
|
|
01ef23402e | ||
|
|
15ddf04189 | ||
|
|
ac720034ab | ||
|
|
b989307c1e | ||
|
|
0fa02ff6ba | ||
|
|
d2afd5e54d | ||
|
|
7169143942 | ||
|
|
98020163ce | ||
|
|
6aa42f9850 | ||
|
|
d2ff136c15 | ||
|
|
79322f6a1f | ||
|
|
d755b9decb | ||
|
|
ad6e675b18 | ||
|
|
aa122c9652 | ||
|
|
b747fd3483 | ||
|
|
2d56dbe249 | ||
|
|
2364344046 | ||
|
|
32f9f8ba92 | ||
|
|
697ede207b | ||
|
|
c62f2f2790 | ||
|
|
1429e83a21 | ||
|
|
3f7c3b8fd2 | ||
|
|
5b4383d835 | ||
|
|
49fa243ef3 | ||
|
|
e9ca4b009a | ||
|
|
e6ccc35653 | ||
|
|
f59d04586c | ||
|
|
ec22c1fdda | ||
|
|
3441954f8b | ||
|
|
b0a87041da | ||
|
|
42586be533 | ||
|
|
65e94bd173 | ||
|
|
73c836fafb | ||
|
|
d6fa066e4d | ||
|
|
22bbf4939e | ||
|
|
ca195fd708 | ||
|
|
c3c0166731 | ||
|
|
fc94854b72 | ||
|
|
c55eb68cf2 | ||
|
|
80e08a112a | ||
|
|
896fc29af7 | ||
|
|
c88ffab370 | ||
|
|
445515da93 | ||
|
|
f5dbd6780b | ||
|
|
ba06121464 | ||
|
|
7115919206 | ||
|
|
1d95c30893 | ||
|
|
a5cd5e2733 | ||
|
|
8732675162 | ||
|
|
a074437d99 | ||
|
|
d2eb11fa5c | ||
|
|
b35200648c | ||
|
|
a8958019a5 | ||
|
|
200228339b | ||
|
|
ddc64ad687 | ||
|
|
2d2bae6ec1 | ||
|
|
fa6dc292c1 | ||
|
|
b5ac40b32a | ||
|
|
8299aa498b | ||
|
|
ce22adfe64 | ||
|
|
01bcccdd99 | ||
|
|
673a54adb1 | ||
|
|
f48c03e314 | ||
|
|
7641ddad68 | ||
|
|
26021b2dd0 | ||
|
|
a6457db819 | ||
|
|
8bfa65987d | ||
|
|
b1c0cc5322 | ||
|
|
67cbef0d7a | ||
|
|
b2e06c1c94 | ||
|
|
70a05e487e | ||
|
|
c2a446a79b | ||
|
|
56df23af35 | ||
|
|
1c12f5cf2a | ||
|
|
06b727ae1a | ||
|
|
a2aca30d57 | ||
|
|
68106feb57 | ||
|
|
3066fc1d31 | ||
|
|
4834fb7b6f | ||
|
|
1e101afe5a | ||
|
|
4d79bbb5d8 | ||
|
|
e31aff5afd |
4
.github/ISSUE_TEMPLATE/1-bug.yml
vendored
4
.github/ISSUE_TEMPLATE/1-bug.yml
vendored
@@ -30,12 +30,10 @@ body:
|
||||
- label: Android mobile app
|
||||
- label: iOS mobile app
|
||||
- label: Custom app using a mobile SDK
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
attributes:
|
||||
label: Browser / app / sdk version
|
||||
description: Please provice the version of the browser / app / sdk where the problem manifests.
|
||||
description: Please provide the version of the browser / app / sdk where the problem manifests.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
|
||||
116
.github/workflows/ci.yml
vendored
116
.github/workflows/ci.yml
vendored
@@ -34,9 +34,13 @@ jobs:
|
||||
- name: Check if the git repository is clean
|
||||
run: $(exit $(git status --porcelain --untracked-files=no | head -255 | wc -l)) || (echo "Dirty git tree"; git diff; exit 1)
|
||||
- run: npm run lint:ci && npm run tsc:ci
|
||||
linux-build:
|
||||
name: Build Frontend (Linux)
|
||||
runs-on: ubuntu-latest
|
||||
frontend:
|
||||
name: Build Frontend
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [macos-latest, ubuntu-latest]
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
@@ -49,20 +53,11 @@ jobs:
|
||||
npm -v
|
||||
- run: npm install
|
||||
- run: make
|
||||
macos-ci:
|
||||
name: Build Frontend (macOS)
|
||||
runs-on: macOS-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
cache: 'npm'
|
||||
- run: npm install
|
||||
- run: make
|
||||
android-build:
|
||||
- name: Check config.js syntax
|
||||
run: node config.js
|
||||
android-rn-bundle-build:
|
||||
name: Build mobile bundle (Android)
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: macos-15
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
@@ -75,13 +70,9 @@ jobs:
|
||||
npm -v
|
||||
- run: npm install
|
||||
- run: npx react-native bundle --entry-file react/index.native.js --platform android --bundle-output /tmp/android.bundle --reset-cache
|
||||
ios-build:
|
||||
ios-rn-bundle-build:
|
||||
name: Build mobile bundle (iOS)
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [macos-13, macos-14]
|
||||
runs-on: macos-15
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
@@ -97,20 +88,83 @@ jobs:
|
||||
run: |
|
||||
uname -a
|
||||
xcode-select -p
|
||||
sudo xcode-select -s /Applications/Xcode_15.2.app/Contents/Developer
|
||||
sudo xcode-select -s /Applications/Xcode_16.2.app/Contents/Developer
|
||||
xcodebuild -version
|
||||
- name: setup-cocoapods
|
||||
uses: maxim-lobanov/setup-cocoapods@v1
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
podfile-path: ios/Podfile.lock
|
||||
ruby-version: '3.4'
|
||||
bundler-cache: true
|
||||
- run: npx react-native info
|
||||
- name: Install Pods
|
||||
run: |
|
||||
pod --version
|
||||
cd ios
|
||||
pod install --repo-update
|
||||
- name: Check if the git repository is clean
|
||||
run: $(exit $(git status --porcelain --untracked-files=no | head -255 | wc -l)) || (echo "Dirty git tree"; git diff; exit 1)
|
||||
working-directory: ./ios
|
||||
run: bundle exec pod install --repo-update --deployment
|
||||
- run: npx react-native bundle --entry-file react/index.native.js --platform ios --bundle-output /tmp/ios.bundle --reset-cache
|
||||
android-sdk-build:
|
||||
name: Build mobile SDK (Android)
|
||||
runs-on: ubuntu-latest
|
||||
container: reactnativecommunity/react-native-android:v13.0
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
cache: 'npm'
|
||||
- name: Check Node / npm versions
|
||||
run: |
|
||||
node -v
|
||||
npm -v
|
||||
- run: npm install
|
||||
- run: |
|
||||
cd android
|
||||
./gradlew :sdk:clean
|
||||
./gradlew :sdk:assembleRelease
|
||||
ios-sdk-build:
|
||||
name: Build mobile SDK (iOS)
|
||||
runs-on: macos-15
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
cache: 'npm'
|
||||
- name: Check Node / npm versions
|
||||
run: |
|
||||
node -v
|
||||
npm -v
|
||||
- run: npm install
|
||||
- name: setup Xcode
|
||||
run: |
|
||||
uname -a
|
||||
xcode-select -p
|
||||
sudo xcode-select -s /Applications/Xcode_16.2.app/Contents/Developer
|
||||
xcodebuild -version
|
||||
- name: setup-cocoapods
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: '3.4'
|
||||
bundler-cache: true
|
||||
- run: npx react-native info
|
||||
- name: Install Pods
|
||||
working-directory: ./ios
|
||||
run: bundle exec pod install --repo-update --deployment
|
||||
- run: |
|
||||
xcodebuild clean \
|
||||
-workspace ios/jitsi-meet.xcworkspace \
|
||||
-scheme JitsiMeetSDK
|
||||
xcodebuild archive \
|
||||
-workspace ios/jitsi-meet.xcworkspace \
|
||||
-scheme JitsiMeetSDK \
|
||||
-configuration Release \
|
||||
-sdk iphoneos \
|
||||
-destination='generic/platform=iOS' \
|
||||
-archivePath ios/sdk/out/ios-device \
|
||||
SKIP_INSTALL=NO \
|
||||
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
|
||||
xcodebuild -create-xcframework \
|
||||
-framework ios/sdk/out/ios-device.xcarchive/Products/Library/Frameworks/JitsiMeetSDK.framework \
|
||||
-output ios/sdk/out/JitsiMeetSDK.xcframework
|
||||
- run: ls -lR ios/sdk/out
|
||||
debian-build:
|
||||
name: Test Debian packages build
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
10
.gitignore
vendored
10
.gitignore
vendored
@@ -38,6 +38,7 @@ DerivedData
|
||||
*.dSYM.zip
|
||||
*.xcuserstate
|
||||
project.xcworkspace
|
||||
**/.xcode.env.local
|
||||
|
||||
# Android/IntelliJ
|
||||
#
|
||||
@@ -61,6 +62,7 @@ buck-out/
|
||||
|
||||
# fastlane
|
||||
#
|
||||
.bundle/
|
||||
**/fastlane/report.xml
|
||||
**/fastlane/Preview.html
|
||||
**/fastlane/test_output
|
||||
@@ -100,6 +102,9 @@ tsconfig.json
|
||||
react-native-sdk/*.tgz
|
||||
react-native-sdk/android/src
|
||||
!react-native-sdk/android/src/main/java/org/jitsi/meet/sdk/JitsiMeetReactNativePackage.java
|
||||
!react-native-sdk/android/src/main/java/org/jitsi/meet/sdk/JitsiMeetOngoingConferenceService.java
|
||||
!react-native-sdk/android/src/main/java/org/jitsi/meet/sdk/JMOngoingConferenceModule.java
|
||||
!react-native-sdk/android/src/main/java/org/jitsi/meet/sdk/RNOngoingNotification.java
|
||||
react-native-sdk/images
|
||||
react-native-sdk/ios
|
||||
react-native-sdk/lang
|
||||
@@ -108,3 +113,8 @@ react-native-sdk/node_modules
|
||||
react-native-sdk/react
|
||||
react-native-sdk/service
|
||||
react-native-sdk/sounds
|
||||
|
||||
# tests
|
||||
tests/.env
|
||||
test-results
|
||||
|
||||
|
||||
16
Gemfile
Normal file
16
Gemfile
Normal file
@@ -0,0 +1,16 @@
|
||||
source "https://rubygems.org"
|
||||
|
||||
ruby ">= 3.4.0"
|
||||
|
||||
gem "cocoapods", "~> 1.16"
|
||||
|
||||
# (Optional) Fastlane for automation
|
||||
gem "fastlane"
|
||||
gem "abbrev"
|
||||
gem "logger"
|
||||
gem "mutex_m"
|
||||
gem "csv"
|
||||
gem "bigdecimal"
|
||||
|
||||
# (Optional) Bundler itself to ensure consistency
|
||||
gem "bundler"
|
||||
331
Gemfile.lock
Normal file
331
Gemfile.lock
Normal file
@@ -0,0 +1,331 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
CFPropertyList (3.0.7)
|
||||
base64
|
||||
nkf
|
||||
rexml
|
||||
abbrev (0.1.2)
|
||||
activesupport (7.2.2.1)
|
||||
base64
|
||||
benchmark (>= 0.3)
|
||||
bigdecimal
|
||||
concurrent-ruby (~> 1.0, >= 1.3.1)
|
||||
connection_pool (>= 2.2.5)
|
||||
drb
|
||||
i18n (>= 1.6, < 2)
|
||||
logger (>= 1.4.2)
|
||||
minitest (>= 5.1)
|
||||
securerandom (>= 0.3)
|
||||
tzinfo (~> 2.0, >= 2.0.5)
|
||||
addressable (2.8.7)
|
||||
public_suffix (>= 2.0.2, < 7.0)
|
||||
algoliasearch (1.27.5)
|
||||
httpclient (~> 2.8, >= 2.8.3)
|
||||
json (>= 1.5.1)
|
||||
artifactory (3.0.17)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.3.1)
|
||||
aws-partitions (1.1050.0)
|
||||
aws-sdk-core (3.218.1)
|
||||
aws-eventstream (~> 1, >= 1.3.0)
|
||||
aws-partitions (~> 1, >= 1.992.0)
|
||||
aws-sigv4 (~> 1.9)
|
||||
base64
|
||||
jmespath (~> 1, >= 1.6.1)
|
||||
aws-sdk-kms (1.98.0)
|
||||
aws-sdk-core (~> 3, >= 3.216.0)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sdk-s3 (1.181.0)
|
||||
aws-sdk-core (~> 3, >= 3.216.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sigv4 (1.11.0)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
babosa (1.0.4)
|
||||
base64 (0.2.0)
|
||||
benchmark (0.4.0)
|
||||
bigdecimal (3.1.9)
|
||||
claide (1.1.0)
|
||||
cocoapods (1.16.2)
|
||||
addressable (~> 2.8)
|
||||
claide (>= 1.0.2, < 2.0)
|
||||
cocoapods-core (= 1.16.2)
|
||||
cocoapods-deintegrate (>= 1.0.3, < 2.0)
|
||||
cocoapods-downloader (>= 2.1, < 3.0)
|
||||
cocoapods-plugins (>= 1.0.0, < 2.0)
|
||||
cocoapods-search (>= 1.0.0, < 2.0)
|
||||
cocoapods-trunk (>= 1.6.0, < 2.0)
|
||||
cocoapods-try (>= 1.1.0, < 2.0)
|
||||
colored2 (~> 3.1)
|
||||
escape (~> 0.0.4)
|
||||
fourflusher (>= 2.3.0, < 3.0)
|
||||
gh_inspector (~> 1.0)
|
||||
molinillo (~> 0.8.0)
|
||||
nap (~> 1.0)
|
||||
ruby-macho (>= 2.3.0, < 3.0)
|
||||
xcodeproj (>= 1.27.0, < 2.0)
|
||||
cocoapods-core (1.16.2)
|
||||
activesupport (>= 5.0, < 8)
|
||||
addressable (~> 2.8)
|
||||
algoliasearch (~> 1.0)
|
||||
concurrent-ruby (~> 1.1)
|
||||
fuzzy_match (~> 2.0.4)
|
||||
nap (~> 1.0)
|
||||
netrc (~> 0.11)
|
||||
public_suffix (~> 4.0)
|
||||
typhoeus (~> 1.0)
|
||||
cocoapods-deintegrate (1.0.5)
|
||||
cocoapods-downloader (2.1)
|
||||
cocoapods-plugins (1.0.0)
|
||||
nap
|
||||
cocoapods-search (1.0.1)
|
||||
cocoapods-trunk (1.6.0)
|
||||
nap (>= 0.8, < 2.0)
|
||||
netrc (~> 0.11)
|
||||
cocoapods-try (1.2.0)
|
||||
colored (1.2)
|
||||
colored2 (3.1.2)
|
||||
commander (4.6.0)
|
||||
highline (~> 2.0.0)
|
||||
concurrent-ruby (1.3.5)
|
||||
connection_pool (2.5.0)
|
||||
csv (3.3.2)
|
||||
declarative (0.0.20)
|
||||
digest-crc (0.7.0)
|
||||
rake (>= 12.0.0, < 14.0.0)
|
||||
domain_name (0.6.20240107)
|
||||
dotenv (2.8.1)
|
||||
drb (2.2.1)
|
||||
emoji_regex (3.2.3)
|
||||
escape (0.0.4)
|
||||
ethon (0.16.0)
|
||||
ffi (>= 1.15.0)
|
||||
excon (0.112.0)
|
||||
faraday (1.10.4)
|
||||
faraday-em_http (~> 1.0)
|
||||
faraday-em_synchrony (~> 1.0)
|
||||
faraday-excon (~> 1.1)
|
||||
faraday-httpclient (~> 1.0)
|
||||
faraday-multipart (~> 1.0)
|
||||
faraday-net_http (~> 1.0)
|
||||
faraday-net_http_persistent (~> 1.0)
|
||||
faraday-patron (~> 1.0)
|
||||
faraday-rack (~> 1.0)
|
||||
faraday-retry (~> 1.0)
|
||||
ruby2_keywords (>= 0.0.4)
|
||||
faraday-cookie_jar (0.0.7)
|
||||
faraday (>= 0.8.0)
|
||||
http-cookie (~> 1.0.0)
|
||||
faraday-em_http (1.0.0)
|
||||
faraday-em_synchrony (1.0.0)
|
||||
faraday-excon (1.1.0)
|
||||
faraday-httpclient (1.0.1)
|
||||
faraday-multipart (1.1.0)
|
||||
multipart-post (~> 2.0)
|
||||
faraday-net_http (1.0.2)
|
||||
faraday-net_http_persistent (1.2.0)
|
||||
faraday-patron (1.0.0)
|
||||
faraday-rack (1.0.0)
|
||||
faraday-retry (1.0.3)
|
||||
faraday_middleware (1.2.1)
|
||||
faraday (~> 1.0)
|
||||
fastimage (2.4.0)
|
||||
fastlane (2.226.0)
|
||||
CFPropertyList (>= 2.3, < 4.0.0)
|
||||
addressable (>= 2.8, < 3.0.0)
|
||||
artifactory (~> 3.0)
|
||||
aws-sdk-s3 (~> 1.0)
|
||||
babosa (>= 1.0.3, < 2.0.0)
|
||||
bundler (>= 1.12.0, < 3.0.0)
|
||||
colored (~> 1.2)
|
||||
commander (~> 4.6)
|
||||
dotenv (>= 2.1.1, < 3.0.0)
|
||||
emoji_regex (>= 0.1, < 4.0)
|
||||
excon (>= 0.71.0, < 1.0.0)
|
||||
faraday (~> 1.0)
|
||||
faraday-cookie_jar (~> 0.0.6)
|
||||
faraday_middleware (~> 1.0)
|
||||
fastimage (>= 2.1.0, < 3.0.0)
|
||||
fastlane-sirp (>= 1.0.0)
|
||||
gh_inspector (>= 1.1.2, < 2.0.0)
|
||||
google-apis-androidpublisher_v3 (~> 0.3)
|
||||
google-apis-playcustomapp_v1 (~> 0.1)
|
||||
google-cloud-env (>= 1.6.0, < 2.0.0)
|
||||
google-cloud-storage (~> 1.31)
|
||||
highline (~> 2.0)
|
||||
http-cookie (~> 1.0.5)
|
||||
json (< 3.0.0)
|
||||
jwt (>= 2.1.0, < 3)
|
||||
mini_magick (>= 4.9.4, < 5.0.0)
|
||||
multipart-post (>= 2.0.0, < 3.0.0)
|
||||
naturally (~> 2.2)
|
||||
optparse (>= 0.1.1, < 1.0.0)
|
||||
plist (>= 3.1.0, < 4.0.0)
|
||||
rubyzip (>= 2.0.0, < 3.0.0)
|
||||
security (= 0.1.5)
|
||||
simctl (~> 1.6.3)
|
||||
terminal-notifier (>= 2.0.0, < 3.0.0)
|
||||
terminal-table (~> 3)
|
||||
tty-screen (>= 0.6.3, < 1.0.0)
|
||||
tty-spinner (>= 0.8.0, < 1.0.0)
|
||||
word_wrap (~> 1.0.0)
|
||||
xcodeproj (>= 1.13.0, < 2.0.0)
|
||||
xcpretty (~> 0.4.0)
|
||||
xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
|
||||
fastlane-sirp (1.0.0)
|
||||
sysrandom (~> 1.0)
|
||||
ffi (1.17.1)
|
||||
ffi (1.17.1-aarch64-linux-gnu)
|
||||
ffi (1.17.1-aarch64-linux-musl)
|
||||
ffi (1.17.1-arm-linux-gnu)
|
||||
ffi (1.17.1-arm-linux-musl)
|
||||
ffi (1.17.1-arm64-darwin)
|
||||
ffi (1.17.1-x86-linux-gnu)
|
||||
ffi (1.17.1-x86-linux-musl)
|
||||
ffi (1.17.1-x86_64-darwin)
|
||||
ffi (1.17.1-x86_64-linux-gnu)
|
||||
ffi (1.17.1-x86_64-linux-musl)
|
||||
fourflusher (2.3.1)
|
||||
fuzzy_match (2.0.4)
|
||||
gh_inspector (1.1.3)
|
||||
google-apis-androidpublisher_v3 (0.54.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-apis-core (0.11.3)
|
||||
addressable (~> 2.5, >= 2.5.1)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
httpclient (>= 2.8.1, < 3.a)
|
||||
mini_mime (~> 1.0)
|
||||
representable (~> 3.0)
|
||||
retriable (>= 2.0, < 4.a)
|
||||
rexml
|
||||
google-apis-iamcredentials_v1 (0.17.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-apis-playcustomapp_v1 (0.13.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-apis-storage_v1 (0.31.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-cloud-core (1.7.1)
|
||||
google-cloud-env (>= 1.0, < 3.a)
|
||||
google-cloud-errors (~> 1.0)
|
||||
google-cloud-env (1.6.0)
|
||||
faraday (>= 0.17.3, < 3.0)
|
||||
google-cloud-errors (1.4.0)
|
||||
google-cloud-storage (1.47.0)
|
||||
addressable (~> 2.8)
|
||||
digest-crc (~> 0.4)
|
||||
google-apis-iamcredentials_v1 (~> 0.1)
|
||||
google-apis-storage_v1 (~> 0.31.0)
|
||||
google-cloud-core (~> 1.6)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
mini_mime (~> 1.0)
|
||||
googleauth (1.8.1)
|
||||
faraday (>= 0.17.3, < 3.a)
|
||||
jwt (>= 1.4, < 3.0)
|
||||
multi_json (~> 1.11)
|
||||
os (>= 0.9, < 2.0)
|
||||
signet (>= 0.16, < 2.a)
|
||||
highline (2.0.3)
|
||||
http-cookie (1.0.8)
|
||||
domain_name (~> 0.5)
|
||||
httpclient (2.8.3)
|
||||
i18n (1.14.7)
|
||||
concurrent-ruby (~> 1.0)
|
||||
jmespath (1.6.2)
|
||||
json (2.10.1)
|
||||
jwt (2.10.1)
|
||||
base64
|
||||
logger (1.6.6)
|
||||
mini_magick (4.13.2)
|
||||
mini_mime (1.1.5)
|
||||
minitest (5.25.4)
|
||||
molinillo (0.8.0)
|
||||
multi_json (1.15.0)
|
||||
multipart-post (2.4.1)
|
||||
mutex_m (0.3.0)
|
||||
nanaimo (0.4.0)
|
||||
nap (1.1.0)
|
||||
naturally (2.2.1)
|
||||
netrc (0.11.0)
|
||||
nkf (0.2.0)
|
||||
optparse (0.6.0)
|
||||
os (1.1.4)
|
||||
plist (3.7.2)
|
||||
public_suffix (4.0.7)
|
||||
rake (13.2.1)
|
||||
representable (3.2.0)
|
||||
declarative (< 0.1.0)
|
||||
trailblazer-option (>= 0.1.1, < 0.2.0)
|
||||
uber (< 0.2.0)
|
||||
retriable (3.1.2)
|
||||
rexml (3.4.1)
|
||||
rouge (3.28.0)
|
||||
ruby-macho (2.5.1)
|
||||
ruby2_keywords (0.0.5)
|
||||
rubyzip (2.4.1)
|
||||
securerandom (0.4.1)
|
||||
security (0.1.5)
|
||||
signet (0.19.0)
|
||||
addressable (~> 2.8)
|
||||
faraday (>= 0.17.5, < 3.a)
|
||||
jwt (>= 1.5, < 3.0)
|
||||
multi_json (~> 1.10)
|
||||
simctl (1.6.10)
|
||||
CFPropertyList
|
||||
naturally
|
||||
sysrandom (1.0.5)
|
||||
terminal-notifier (2.0.0)
|
||||
terminal-table (3.0.2)
|
||||
unicode-display_width (>= 1.1.1, < 3)
|
||||
trailblazer-option (0.1.2)
|
||||
tty-cursor (0.7.1)
|
||||
tty-screen (0.8.2)
|
||||
tty-spinner (0.9.3)
|
||||
tty-cursor (~> 0.7)
|
||||
typhoeus (1.4.1)
|
||||
ethon (>= 0.9.0)
|
||||
tzinfo (2.0.6)
|
||||
concurrent-ruby (~> 1.0)
|
||||
uber (0.1.0)
|
||||
unicode-display_width (2.6.0)
|
||||
word_wrap (1.0.0)
|
||||
xcodeproj (1.27.0)
|
||||
CFPropertyList (>= 2.3.3, < 4.0)
|
||||
atomos (~> 0.1.3)
|
||||
claide (>= 1.0.2, < 2.0)
|
||||
colored2 (~> 3.1)
|
||||
nanaimo (~> 0.4.0)
|
||||
rexml (>= 3.3.6, < 4.0)
|
||||
xcpretty (0.4.0)
|
||||
rouge (~> 3.28.0)
|
||||
xcpretty-travis-formatter (1.0.1)
|
||||
xcpretty (~> 0.2, >= 0.0.7)
|
||||
|
||||
PLATFORMS
|
||||
aarch64-linux-gnu
|
||||
aarch64-linux-musl
|
||||
arm-linux-gnu
|
||||
arm-linux-musl
|
||||
arm64-darwin
|
||||
ruby
|
||||
x86-linux-gnu
|
||||
x86-linux-musl
|
||||
x86_64-darwin
|
||||
x86_64-linux-gnu
|
||||
x86_64-linux-musl
|
||||
|
||||
DEPENDENCIES
|
||||
abbrev
|
||||
bigdecimal
|
||||
bundler
|
||||
cocoapods (~> 1.16)
|
||||
csv
|
||||
fastlane
|
||||
logger
|
||||
mutex_m
|
||||
|
||||
RUBY VERSION
|
||||
ruby 3.4.2p28
|
||||
|
||||
BUNDLED WITH
|
||||
2.6.3
|
||||
14
Makefile
14
Makefile
@@ -17,16 +17,16 @@ STYLES_BUNDLE = css/all.bundle.css
|
||||
STYLES_DESTINATION = css/all.css
|
||||
STYLES_MAIN = css/main.scss
|
||||
ifeq ($(OS),Windows_NT)
|
||||
WEBPACK = .\node_modules\.bin\webpack
|
||||
WEBPACK_DEV_SERVER = .\node_modules\.bin\webpack serve --mode development
|
||||
WEBPACK = .\node_modules\.bin\webpack --progress
|
||||
WEBPACK_DEV_SERVER = .\node_modules\.bin\webpack serve --mode development --progress
|
||||
else
|
||||
WEBPACK = ./node_modules/.bin/webpack
|
||||
WEBPACK_DEV_SERVER = ./node_modules/.bin/webpack serve --mode development
|
||||
WEBPACK = ./node_modules/.bin/webpack --progress
|
||||
WEBPACK_DEV_SERVER = ./node_modules/.bin/webpack serve --mode development --progress
|
||||
endif
|
||||
|
||||
all: compile deploy clean
|
||||
all: compile deploy
|
||||
|
||||
compile:
|
||||
compile: clean
|
||||
NODE_OPTIONS=--max-old-space-size=8192 \
|
||||
$(WEBPACK)
|
||||
|
||||
@@ -48,8 +48,6 @@ deploy-appbundle:
|
||||
$(BUILD_DIR)/external_api.min.js.map \
|
||||
$(BUILD_DIR)/alwaysontop.min.js \
|
||||
$(BUILD_DIR)/alwaysontop.min.js.map \
|
||||
$(BUILD_DIR)/analytics-ga.min.js \
|
||||
$(BUILD_DIR)/analytics-ga.min.js.map \
|
||||
$(BUILD_DIR)/face-landmarks-worker.min.js \
|
||||
$(BUILD_DIR)/face-landmarks-worker.min.js.map \
|
||||
$(BUILD_DIR)/noise-suppressor-worklet.min.js \
|
||||
|
||||
@@ -34,7 +34,7 @@ mobile apps:
|
||||
|
||||
| Android | Android (F-Droid) | iOS |
|
||||
|:-:|:-:|:-:|
|
||||
| [<img src="resources/img/google-play-badge.png" height="50">](https://play.google.com/store/apps/details?id=org.jitsi.meet) | [<img src="resources/img/f-droid-badge.png" height="50">](https://f-droid.org/en/packages/org.jitsi.meet/) | [<img src="resources/img/appstore-badge.png" height="50">](https://itunes.apple.com/us/app/jitsi-meet/id1165103905) |
|
||||
| [<img src="resources/img/google-play-badge.png" height="50">](https://play.google.com/store/apps/details?id=org.jitsi.meet) | [<img src="resources/img/f-droid-badge.png" height="50">](https://f-droid.org/packages/org.jitsi.meet/) | [<img src="resources/img/appstore-badge.png" height="50">](https://itunes.apple.com/us/app/jitsi-meet/id1165103905) |
|
||||
|
||||
If you are feeling adventurous and want to get an early scoop of the features as they are being
|
||||
developed you can also sign up for our open beta testing here:
|
||||
|
||||
@@ -4,6 +4,6 @@
|
||||
|
||||
We take security very seriously and develop all Jitsi projects to be secure and safe.
|
||||
|
||||
If you find (or simply suspect) a security issue in any of the Jitsi projects, please report it to us via [HackerOne](https://hackerone.com/8x8) or send us an email to security@jitsi.org.
|
||||
If you find (or simply suspect) a security issue in any of the Jitsi projects, please report it to us via [HackerOne](https://hackerone.com/8x8-bounty) or send us an email to security@jitsi.org.
|
||||
|
||||
**We encourage responsible disclosure for the sake of our users, so please reach out before posting in a public space.**
|
||||
|
||||
@@ -15,12 +15,6 @@ def vcode = (int) (((new Date().getTime() / 1000) - 1546297200) / 10)
|
||||
android {
|
||||
compileSdkVersion rootProject.ext.compileSdkVersion
|
||||
buildToolsVersion rootProject.ext.buildToolsVersion
|
||||
packagingOptions {
|
||||
jniLibs {
|
||||
excludes += ['lib/*/libhermes*.so']
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
defaultConfig {
|
||||
applicationId 'org.jitsi.meet'
|
||||
|
||||
@@ -30,9 +30,12 @@ import android.view.KeyEvent;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.oney.WebRTCModule.WebRTCModuleOptions;
|
||||
|
||||
import org.jitsi.meet.sdk.JitsiMeet;
|
||||
import org.jitsi.meet.sdk.JitsiMeetActivity;
|
||||
import org.jitsi.meet.sdk.JitsiMeetConferenceOptions;
|
||||
import org.webrtc.Logging;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.URL;
|
||||
@@ -79,6 +82,10 @@ public class MainActivity extends JitsiMeetActivity {
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
JitsiMeet.showSplashScreen(this);
|
||||
|
||||
WebRTCModuleOptions options = WebRTCModuleOptions.getInstance();
|
||||
options.loggingSeverity = Logging.Severity.LS_ERROR;
|
||||
|
||||
super.onCreate(null);
|
||||
}
|
||||
|
||||
@@ -211,11 +218,6 @@ public class MainActivity extends JitsiMeetActivity {
|
||||
super.onPictureInPictureModeChanged(isInPictureInPictureMode);
|
||||
|
||||
Log.d(TAG, "Is in picture-in-picture mode: " + isInPictureInPictureMode);
|
||||
|
||||
if (!isInPictureInPictureMode) {
|
||||
this.startActivity(new Intent(this, getClass())
|
||||
.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT));
|
||||
}
|
||||
}
|
||||
|
||||
// Helper methods
|
||||
|
||||
@@ -17,15 +17,13 @@ buildscript {
|
||||
}
|
||||
|
||||
ext {
|
||||
kotlinVersion = "1.7.0"
|
||||
buildToolsVersion = "33.0.2"
|
||||
kotlinVersion = "1.9.24"
|
||||
buildToolsVersion = "34.0.0"
|
||||
compileSdkVersion = 34
|
||||
minSdkVersion = 24
|
||||
minSdkVersion = 26
|
||||
targetSdkVersion = 34
|
||||
supportLibVersion = "28.0.0"
|
||||
|
||||
// We use NDK 23 which has both M1 support and is the side-by-side NDK version from AGP.
|
||||
ndkVersion = "23.1.7779620"
|
||||
ndkVersion = "26.1.10909125"
|
||||
|
||||
// The Maven artifact groupId of the third-party react-native modules which
|
||||
// Jitsi Meet SDK for Android depends on and which are not available in
|
||||
@@ -43,14 +41,12 @@ ext {
|
||||
|
||||
googleServicesEnabled = project.file('app/google-services.json').exists() && !libreBuild
|
||||
|
||||
//React Native Version
|
||||
rnVersion = "0.73.8"
|
||||
//React Native and Hermes Version
|
||||
rnVersion = "0.75.5"
|
||||
}
|
||||
|
||||
allprojects {
|
||||
repositories {
|
||||
// Android JSC is installed from npm.
|
||||
maven { url("$rootDir/../node_modules/jsc-android/dist") }
|
||||
mavenCentral()
|
||||
google()
|
||||
maven { url 'https://www.jitpack.io' }
|
||||
@@ -73,10 +69,29 @@ allprojects {
|
||||
}
|
||||
}
|
||||
|
||||
// Due to a dependency conflict between React Native and the Fresco library used by GiphySDK,
|
||||
// GIFs appear as static images instead of animating
|
||||
// https://github.com/Giphy/giphy-react-native-sdk/commit/7fe466ed6fddfaec95f9cbc959d33bd75ad8f900
|
||||
|
||||
configurations.configureEach {
|
||||
resolutionStrategy {
|
||||
forcedModules = [
|
||||
'com.facebook.fresco:fresco:3.2.0',
|
||||
'com.facebook.fresco:animated-gif:3.2.0',
|
||||
'com.facebook.fresco:animated-base:3.2.0',
|
||||
'com.facebook.fresco:animated-drawable:3.2.0',
|
||||
'com.facebook.fresco:animated-webp:3.2.0',
|
||||
'com.facebook.fresco:webpsupport:3.2.0',
|
||||
'com.facebook.fresco:imagepipeline-okhttp3:3.2.0',
|
||||
'com.facebook.fresco:middleware:3.2.0',
|
||||
'com.facebook.fresco:nativeimagetranscoder:3.2.0'
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
// Third-party react-native modules which Jitsi Meet SDK for Android depends
|
||||
// on and which are not available in third-party Maven repositories need to
|
||||
// be deployed in a Maven repository of ours.
|
||||
//
|
||||
|
||||
if (project.name.startsWith('react-native-')) {
|
||||
apply plugin: 'maven-publish'
|
||||
|
||||
@@ -27,4 +27,4 @@ android.enableJetifier=true
|
||||
android.bundle.enableUncompressedNativeLibs=false
|
||||
|
||||
appVersion=99.0.0
|
||||
sdkVersion=99.0.0
|
||||
sdkVersion=0.0.0
|
||||
|
||||
@@ -9,8 +9,6 @@ THE_MVN_REPO=${MVN_REPO:-${1:-$DEFAULT_MVN_REPO}}
|
||||
MVN_HTTP=0
|
||||
DEFAULT_SDK_VERSION=$(grep sdkVersion ${THIS_DIR}/../gradle.properties | cut -d"=" -f2)
|
||||
SDK_VERSION=${OVERRIDE_SDK_VERSION:-${DEFAULT_SDK_VERSION}}
|
||||
JSC_VERSION="r"$(jq -r '.dependencies."jsc-android"' ${THIS_DIR}/../../node_modules/react-native/package.json | cut -d . -f 1 | cut -c 2-)
|
||||
DO_GIT_TAG=${GIT_TAG:-0}
|
||||
|
||||
if [[ $THE_MVN_REPO == http* ]]; then
|
||||
MVN_HTTP=1
|
||||
@@ -24,34 +22,7 @@ export MVN_REPO=$THE_MVN_REPO
|
||||
echo "Releasing Jitsi Meet SDK ${SDK_VERSION}"
|
||||
echo "Using ${MVN_REPO} as the Maven repo"
|
||||
|
||||
if [[ $MVN_HTTP == 1 ]]; then
|
||||
# Push JSC
|
||||
echo "Pushing JSC ${JSC_VERSION} to the Maven repo"
|
||||
pushd ${THIS_DIR}/../../node_modules/jsc-android/dist/org/webkit/android-jsc/${JSC_VERSION}
|
||||
mvn \
|
||||
deploy:deploy-file \
|
||||
-Durl=${MVN_REPO} \
|
||||
-DrepositoryId=${MVN_REPO_ID} \
|
||||
-Dfile=android-jsc-${JSC_VERSION}.aar \
|
||||
-Dpackaging=aar \
|
||||
-DgeneratePom=false \
|
||||
-DpomFile=android-jsc-${JSC_VERSION}.pom || true
|
||||
popd
|
||||
else
|
||||
# Push JSC, if necessary
|
||||
if [[ ! -d ${MVN_REPO}/org/webkit/android-jsc/${JSC_VERSION} ]]; then
|
||||
echo "Pushing JSC ${JSC_VERSION} to the Maven repo"
|
||||
pushd ${THIS_DIR}/../../node_modules/jsc-android/dist/org/webkit/android-jsc/${JSC_VERSION}
|
||||
mvn \
|
||||
deploy:deploy-file \
|
||||
-Durl=${MVN_REPO} \
|
||||
-Dfile=android-jsc-${JSC_VERSION}.aar \
|
||||
-Dpackaging=aar \
|
||||
-DgeneratePom=false \
|
||||
-DpomFile=android-jsc-${JSC_VERSION}.pom
|
||||
popd
|
||||
fi
|
||||
|
||||
if [[ $MVN_HTTP == 0 ]]; then
|
||||
# Check if an SDK with that same version has already been released
|
||||
if [[ -d ${MVN_REPO}/org/jitsi/react/jitsi-meet-sdk/${SDK_VERSION} ]]; then
|
||||
echo "There is already a release with that version in the Maven repo!"
|
||||
@@ -67,15 +38,12 @@ pushd ${THIS_DIR}/../
|
||||
./gradlew publish
|
||||
popd
|
||||
|
||||
if [[ $DO_GIT_TAG == 1 ]]; then
|
||||
# The artifacts are now on the Maven repo, commit them
|
||||
# The artifacts are now on the Maven repo, commit them
|
||||
if [[ $MVN_HTTP == 0 ]]; then
|
||||
pushd ${MVN_REPO_PATH}
|
||||
git add -A .
|
||||
git commit -m "Jitsi Meet SDK + dependencies: ${SDK_VERSION}"
|
||||
popd
|
||||
|
||||
# Tag the release
|
||||
git tag android-sdk-${SDK_VERSION}
|
||||
fi
|
||||
|
||||
# Done!
|
||||
|
||||
@@ -2,4 +2,4 @@
|
||||
|
||||
THIS_DIR=$(cd -P "$(dirname "$(readlink "${BASH_SOURCE[0]}" || echo "${BASH_SOURCE[0]}")")" && pwd)
|
||||
|
||||
exec ${THIS_DIR}/../../node_modules/react-native/scripts/launchPackager.command --reset-cache
|
||||
exec ${THIS_DIR}/../../node_modules/react-native/scripts/packager.sh --reset-cache
|
||||
|
||||
@@ -8,6 +8,7 @@ android {
|
||||
defaultConfig {
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
buildConfigField "String", "SDK_VERSION", "\"$sdkVersion\""
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
@@ -41,6 +42,7 @@ dependencies {
|
||||
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
|
||||
|
||||
api "com.facebook.react:react-android:$rootProject.ext.rnVersion"
|
||||
api "com.facebook.react:hermes-android:$rootProject.ext.rnVersion"
|
||||
|
||||
//noinspection GradleDynamicVersion
|
||||
implementation 'org.webkit:android-jsc:+'
|
||||
@@ -56,7 +58,7 @@ dependencies {
|
||||
if (!rootProject.ext.libreBuild) {
|
||||
implementation project(':react-native-amplitude')
|
||||
implementation project(':react-native-giphy')
|
||||
implementation(project(":react-native-google-signin")) {
|
||||
implementation(project(':react-native-google-signin')) {
|
||||
exclude group: 'com.google.android.gms'
|
||||
exclude group: 'androidx'
|
||||
}
|
||||
@@ -87,9 +89,11 @@ dependencies {
|
||||
implementation project(':react-native-splash-screen')
|
||||
implementation project(':react-native-svg')
|
||||
implementation project(':react-native-video')
|
||||
implementation project(':react-native-webrtc')
|
||||
implementation project(':react-native-webview')
|
||||
|
||||
// Use `api` here so consumers can use WebRTCModuleOptions.
|
||||
api project(':react-native-webrtc')
|
||||
|
||||
testImplementation 'junit:junit:4.12'
|
||||
}
|
||||
|
||||
@@ -138,8 +142,7 @@ android.libraryVariants.all { def variant ->
|
||||
// Run the bundler
|
||||
commandLine(
|
||||
"node",
|
||||
"node_modules/react-native/local-cli/cli.js",
|
||||
"bundle",
|
||||
"node_modules/react-native/scripts/bundle.js",
|
||||
"--platform", "android",
|
||||
"--dev", "${devEnabled}",
|
||||
"--reset-cache",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright @ 2017-present Atlassian Pty Ltd
|
||||
* Copyright @ 2017-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.
|
||||
@@ -37,6 +37,7 @@ class AppInfoModule
|
||||
public static final String NAME = "AppInfo";
|
||||
public static final boolean GOOGLE_SERVICES_ENABLED = getGoogleServicesEnabled();
|
||||
public static final boolean LIBRE_BUILD = getLibreBuild();
|
||||
public static final String SDK_VERSION = getSdkVersion();
|
||||
|
||||
public AppInfoModule(ReactApplicationContext reactContext) {
|
||||
super(reactContext);
|
||||
@@ -79,6 +80,7 @@ class AppInfoModule
|
||||
constants.put(
|
||||
"version",
|
||||
packageInfo == null ? "" : packageInfo.versionName);
|
||||
constants.put("sdkVersion", SDK_VERSION);
|
||||
constants.put("LIBRE_BUILD", LIBRE_BUILD);
|
||||
constants.put("GOOGLE_SERVICES_ENABLED", GOOGLE_SERVICES_ENABLED);
|
||||
|
||||
@@ -116,6 +118,19 @@ class AppInfoModule
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the SDK version.
|
||||
*/
|
||||
private static String getSdkVersion() {
|
||||
Object sdkVersion = getBuildConfigValue("SDK_VERSION");
|
||||
|
||||
if (sdkVersion !=null) {
|
||||
return (String) sdkVersion;
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets build config value of a certain field.
|
||||
*
|
||||
|
||||
@@ -18,7 +18,6 @@ package org.jitsi.meet.sdk;
|
||||
|
||||
import android.content.Context;
|
||||
import android.media.AudioManager;
|
||||
import android.os.Build;
|
||||
import android.telecom.CallAudioState;
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
@@ -34,7 +33,6 @@ import org.jitsi.meet.sdk.log.JitsiMeetLogger;
|
||||
* {@link AudioModeModule.AudioDeviceHandlerInterface} module implementing device handling for
|
||||
* Android versions >= O when ConnectionService is enabled.
|
||||
*/
|
||||
@RequiresApi(Build.VERSION_CODES.O)
|
||||
class AudioDeviceHandlerConnectionService implements
|
||||
AudioModeModule.AudioDeviceHandlerInterface,
|
||||
RNConnectionService.CallAudioStateListener {
|
||||
|
||||
@@ -20,7 +20,6 @@ import android.media.AudioAttributes;
|
||||
import android.media.AudioDeviceInfo;
|
||||
import android.media.AudioFocusRequest;
|
||||
import android.media.AudioManager;
|
||||
import android.os.Build;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
@@ -227,22 +226,17 @@ class AudioDeviceHandlerGeneric implements
|
||||
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
|
||||
audioManager.setMicrophoneMute(false);
|
||||
|
||||
int gotFocus;
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
gotFocus = audioManager.requestAudioFocus(new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
|
||||
.setAudioAttributes(
|
||||
new AudioAttributes.Builder()
|
||||
.setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION)
|
||||
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
|
||||
.build()
|
||||
)
|
||||
.setAcceptsDelayedFocusGain(true)
|
||||
.setOnAudioFocusChangeListener(this)
|
||||
.build()
|
||||
);
|
||||
} else {
|
||||
gotFocus = audioManager.requestAudioFocus(this, AudioManager.STREAM_VOICE_CALL, AudioManager.AUDIOFOCUS_GAIN);
|
||||
}
|
||||
int gotFocus = audioManager.requestAudioFocus(new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
|
||||
.setAudioAttributes(
|
||||
new AudioAttributes.Builder()
|
||||
.setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION)
|
||||
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
|
||||
.build()
|
||||
)
|
||||
.setAcceptsDelayedFocusGain(true)
|
||||
.setOnAudioFocusChangeListener(this)
|
||||
.build()
|
||||
);
|
||||
|
||||
if (gotFocus == AudioManager.AUDIOFOCUS_REQUEST_FAILED) {
|
||||
JitsiMeetLogger.w(TAG + " Audio focus request failed");
|
||||
|
||||
@@ -20,7 +20,6 @@ import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.media.AudioManager;
|
||||
import android.os.Build;
|
||||
|
||||
import com.facebook.react.bridge.Arguments;
|
||||
import com.facebook.react.bridge.Promise;
|
||||
@@ -58,7 +57,6 @@ import java.util.concurrent.Executors;
|
||||
* Before a call has started and after it has ended the
|
||||
* {@code AudioModeModule.DEFAULT} mode should be used.
|
||||
*/
|
||||
@SuppressLint("AnnotateVersionCheck")
|
||||
@ReactModule(name = AudioModeModule.NAME)
|
||||
class AudioModeModule extends ReactContextBaseJavaModule {
|
||||
public static final String NAME = "AudioMode";
|
||||
@@ -84,11 +82,10 @@ class AudioModeModule extends ReactContextBaseJavaModule {
|
||||
/**
|
||||
* Whether or not the ConnectionService is used for selecting audio devices.
|
||||
*/
|
||||
private static final boolean supportsConnectionService = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O;
|
||||
private static boolean useConnectionService_ = supportsConnectionService;
|
||||
private static boolean useConnectionService_ = true;
|
||||
|
||||
static boolean useConnectionService() {
|
||||
return supportsConnectionService && useConnectionService_;
|
||||
return useConnectionService_;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -139,6 +136,11 @@ class AudioModeModule extends ReactContextBaseJavaModule {
|
||||
*/
|
||||
private String userSelectedDevice;
|
||||
|
||||
/**
|
||||
* Whether or not audio is disabled.
|
||||
*/
|
||||
private boolean audioDisabled;
|
||||
|
||||
/**
|
||||
* Initializes a new module instance. There shall be a single instance of
|
||||
* this module throughout the lifetime of the application.
|
||||
@@ -239,6 +241,12 @@ class AudioModeModule extends ReactContextBaseJavaModule {
|
||||
audioDeviceHandler.stop();
|
||||
}
|
||||
|
||||
audioDeviceHandler = null;
|
||||
|
||||
if (audioDisabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (useConnectionService()) {
|
||||
audioDeviceHandler = new AudioDeviceHandlerConnectionService(audioManager);
|
||||
} else {
|
||||
@@ -281,6 +289,27 @@ class AudioModeModule extends ReactContextBaseJavaModule {
|
||||
});
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
public void setDisabled(final boolean disabled, final Promise promise) {
|
||||
if (audioDisabled == disabled) {
|
||||
promise.resolve(null);
|
||||
return;
|
||||
}
|
||||
|
||||
JitsiMeetLogger.i(TAG + " audio disabled: " + disabled);
|
||||
|
||||
audioDisabled = disabled;
|
||||
setAudioDeviceHandler();
|
||||
|
||||
if (disabled) {
|
||||
mode = -1;
|
||||
availableDevices.clear();
|
||||
resetSelectedDevice();
|
||||
}
|
||||
|
||||
promise.resolve(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Public method to set the current audio mode.
|
||||
*
|
||||
@@ -290,7 +319,12 @@ class AudioModeModule extends ReactContextBaseJavaModule {
|
||||
*/
|
||||
@ReactMethod
|
||||
public void setMode(final int mode, final Promise promise) {
|
||||
if (mode != DEFAULT && mode != AUDIO_CALL && mode != VIDEO_CALL) {
|
||||
if (audioDisabled) {
|
||||
promise.resolve(null);
|
||||
return;
|
||||
}
|
||||
|
||||
if (mode < DEFAULT || mode > VIDEO_CALL) {
|
||||
promise.reject("setMode", "Invalid audio mode " + mode);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -78,7 +78,12 @@ public class BroadcastAction {
|
||||
SEND_CHAT_MESSAGE("org.jitsi.meet.SEND_CHAT_MESSAGE"),
|
||||
SET_VIDEO_MUTED("org.jitsi.meet.SET_VIDEO_MUTED"),
|
||||
SET_CLOSED_CAPTIONS_ENABLED("org.jitsi.meet.SET_CLOSED_CAPTIONS_ENABLED"),
|
||||
TOGGLE_CAMERA("org.jitsi.meet.TOGGLE_CAMERA");
|
||||
TOGGLE_CAMERA("org.jitsi.meet.TOGGLE_CAMERA"),
|
||||
SHOW_NOTIFICATION("org.jitsi.meet.SHOW_NOTIFICATION"),
|
||||
HIDE_NOTIFICATION("org.jitsi.meet.HIDE_NOTIFICATION"),
|
||||
START_RECORDING("org.jitsi.meet.START_RECORDING"),
|
||||
STOP_RECORDING("org.jitsi.meet.STOP_RECORDING"),
|
||||
OVERWRITE_CONFIG("org.jitsi.meet.OVERWRITE_CONFIG");
|
||||
|
||||
private final String action;
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ public class BroadcastEvent {
|
||||
VIDEO_MUTED_CHANGED("org.jitsi.meet.VIDEO_MUTED_CHANGED"),
|
||||
READY_TO_CLOSE("org.jitsi.meet.READY_TO_CLOSE"),
|
||||
TRANSCRIPTION_CHUNK_RECEIVED("org.jitsi.meet.TRANSCRIPTION_CHUNK_RECEIVED"),
|
||||
CUSTOM_OVERFLOW_MENU_BUTTON_PRESSED("org.jitsi.meet.CUSTOM_OVERFLOW_MENU_BUTTON_PRESSED");
|
||||
CUSTOM_BUTTON_PRESSED("org.jitsi.meet.CUSTOM_BUTTON_PRESSED");
|
||||
|
||||
private static final String CONFERENCE_BLURRED_NAME = "CONFERENCE_BLURRED";
|
||||
private static final String CONFERENCE_FOCUSED_NAME = "CONFERENCE_FOCUSED";
|
||||
@@ -109,7 +109,7 @@ public class BroadcastEvent {
|
||||
private static final String VIDEO_MUTED_CHANGED_NAME = "VIDEO_MUTED_CHANGED";
|
||||
private static final String READY_TO_CLOSE_NAME = "READY_TO_CLOSE";
|
||||
private static final String TRANSCRIPTION_CHUNK_RECEIVED_NAME = "TRANSCRIPTION_CHUNK_RECEIVED";
|
||||
private static final String CUSTOM_OVERFLOW_MENU_BUTTON_PRESSED_NAME = "CUSTOM_OVERFLOW_MENU_BUTTON_PRESSED";
|
||||
private static final String CUSTOM_BUTTON_PRESSED_NAME = "CUSTOM_BUTTON_PRESSED";
|
||||
|
||||
private final String action;
|
||||
|
||||
@@ -164,8 +164,8 @@ public class BroadcastEvent {
|
||||
return READY_TO_CLOSE;
|
||||
case TRANSCRIPTION_CHUNK_RECEIVED_NAME:
|
||||
return TRANSCRIPTION_CHUNK_RECEIVED;
|
||||
case CUSTOM_OVERFLOW_MENU_BUTTON_PRESSED_NAME:
|
||||
return CUSTOM_OVERFLOW_MENU_BUTTON_PRESSED;
|
||||
case CUSTOM_BUTTON_PRESSED_NAME:
|
||||
return CUSTOM_BUTTON_PRESSED;
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package org.jitsi.meet.sdk;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
|
||||
public class BroadcastIntentHelper {
|
||||
public static Intent buildSetAudioMutedIntent(boolean muted) {
|
||||
Intent intent = new Intent(BroadcastAction.Type.SET_AUDIO_MUTED.getAction());
|
||||
intent.putExtra("muted", muted);
|
||||
|
||||
return intent;
|
||||
}
|
||||
|
||||
@@ -17,18 +19,21 @@ public class BroadcastIntentHelper {
|
||||
Intent intent = new Intent(BroadcastAction.Type.SEND_ENDPOINT_TEXT_MESSAGE.getAction());
|
||||
intent.putExtra("to", to);
|
||||
intent.putExtra("message", message);
|
||||
|
||||
return intent;
|
||||
}
|
||||
|
||||
public static Intent buildToggleScreenShareIntent(boolean enabled) {
|
||||
Intent intent = new Intent(BroadcastAction.Type.TOGGLE_SCREEN_SHARE.getAction());
|
||||
intent.putExtra("enabled", enabled);
|
||||
|
||||
return intent;
|
||||
}
|
||||
|
||||
public static Intent buildOpenChatIntent(String participantId) {
|
||||
Intent intent = new Intent(BroadcastAction.Type.OPEN_CHAT.getAction());
|
||||
intent.putExtra("to", participantId);
|
||||
|
||||
return intent;
|
||||
}
|
||||
|
||||
@@ -40,28 +45,105 @@ public class BroadcastIntentHelper {
|
||||
Intent intent = new Intent(BroadcastAction.Type.SEND_CHAT_MESSAGE.getAction());
|
||||
intent.putExtra("to", participantId);
|
||||
intent.putExtra("message", message);
|
||||
|
||||
return intent;
|
||||
}
|
||||
|
||||
public static Intent buildSetVideoMutedIntent(boolean muted) {
|
||||
Intent intent = new Intent(BroadcastAction.Type.SET_VIDEO_MUTED.getAction());
|
||||
intent.putExtra("muted", muted);
|
||||
|
||||
return intent;
|
||||
}
|
||||
|
||||
public static Intent buildSetClosedCaptionsEnabledIntent(boolean enabled) {
|
||||
Intent intent = new Intent(BroadcastAction.Type.SET_CLOSED_CAPTIONS_ENABLED.getAction());
|
||||
intent.putExtra("enabled", enabled);
|
||||
|
||||
return intent;
|
||||
}
|
||||
|
||||
|
||||
public static Intent buildRetrieveParticipantsInfo(String requestId) {
|
||||
Intent intent = new Intent(BroadcastAction.Type.RETRIEVE_PARTICIPANTS_INFO.getAction());
|
||||
intent.putExtra("requestId", requestId);
|
||||
|
||||
return intent;
|
||||
}
|
||||
|
||||
public static Intent buildToggleCameraIntent() {
|
||||
return new Intent(BroadcastAction.Type.TOGGLE_CAMERA.getAction());
|
||||
}
|
||||
|
||||
public static Intent buildShowNotificationIntent(
|
||||
String appearance, String description, String timeout, String title, String uid) {
|
||||
Intent intent = new Intent(BroadcastAction.Type.SHOW_NOTIFICATION.getAction());
|
||||
intent.putExtra("appearance", appearance);
|
||||
intent.putExtra("description", description);
|
||||
intent.putExtra("timeout", timeout);
|
||||
intent.putExtra("title", title);
|
||||
intent.putExtra("uid", uid);
|
||||
|
||||
return intent;
|
||||
}
|
||||
|
||||
public static Intent buildHideNotificationIntent(String uid) {
|
||||
Intent intent = new Intent(BroadcastAction.Type.HIDE_NOTIFICATION.getAction());
|
||||
intent.putExtra("uid", uid);
|
||||
|
||||
return intent;
|
||||
}
|
||||
|
||||
public enum RecordingMode {
|
||||
FILE("file"),
|
||||
STREAM("stream");
|
||||
|
||||
private final String mode;
|
||||
|
||||
RecordingMode(String mode) {
|
||||
this.mode = mode;
|
||||
}
|
||||
|
||||
public String getMode() {
|
||||
return mode;
|
||||
}
|
||||
}
|
||||
|
||||
public static Intent buildStartRecordingIntent(
|
||||
RecordingMode mode,
|
||||
String dropboxToken,
|
||||
boolean shouldShare,
|
||||
String rtmpStreamKey,
|
||||
String rtmpBroadcastID,
|
||||
String youtubeStreamKey,
|
||||
String youtubeBroadcastID,
|
||||
Bundle extraMetadata,
|
||||
boolean transcription) {
|
||||
Intent intent = new Intent(BroadcastAction.Type.START_RECORDING.getAction());
|
||||
intent.putExtra("mode", mode.getMode());
|
||||
intent.putExtra("dropboxToken", dropboxToken);
|
||||
intent.putExtra("shouldShare", shouldShare);
|
||||
intent.putExtra("rtmpStreamKey", rtmpStreamKey);
|
||||
intent.putExtra("rtmpBroadcastID", rtmpBroadcastID);
|
||||
intent.putExtra("youtubeStreamKey", youtubeStreamKey);
|
||||
intent.putExtra("youtubeBroadcastID", youtubeBroadcastID);
|
||||
intent.putExtra("extraMetadata", extraMetadata);
|
||||
intent.putExtra("transcription", transcription);
|
||||
|
||||
return intent;
|
||||
}
|
||||
|
||||
public static Intent buildStopRecordingIntent(RecordingMode mode, boolean transcription) {
|
||||
Intent intent = new Intent(BroadcastAction.Type.STOP_RECORDING.getAction());
|
||||
intent.putExtra("mode", mode.getMode());
|
||||
intent.putExtra("transcription", transcription);
|
||||
|
||||
return intent;
|
||||
}
|
||||
|
||||
public static Intent buildOverwriteConfigIntent(String config) {
|
||||
Intent intent = new Intent(BroadcastAction.Type.OVERWRITE_CONFIG.getAction());
|
||||
intent.putExtra("config", config);
|
||||
|
||||
return intent;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,7 +37,6 @@ import java.util.Objects;
|
||||
*
|
||||
* @author Pawel Domas
|
||||
*/
|
||||
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||
public class ConnectionService extends android.telecom.ConnectionService {
|
||||
|
||||
/**
|
||||
|
||||
@@ -97,6 +97,11 @@ class ExternalAPIModule extends ReactContextBaseJavaModule {
|
||||
constants.put("SET_VIDEO_MUTED", BroadcastAction.Type.SET_VIDEO_MUTED.getAction());
|
||||
constants.put("SET_CLOSED_CAPTIONS_ENABLED", BroadcastAction.Type.SET_CLOSED_CAPTIONS_ENABLED.getAction());
|
||||
constants.put("TOGGLE_CAMERA", BroadcastAction.Type.TOGGLE_CAMERA.getAction());
|
||||
constants.put("SHOW_NOTIFICATION", BroadcastAction.Type.SHOW_NOTIFICATION.getAction());
|
||||
constants.put("HIDE_NOTIFICATION", BroadcastAction.Type.HIDE_NOTIFICATION.getAction());
|
||||
constants.put("START_RECORDING", BroadcastAction.Type.START_RECORDING.getAction());
|
||||
constants.put("STOP_RECORDING", BroadcastAction.Type.STOP_RECORDING.getAction());
|
||||
constants.put("OVERWRITE_CONFIG", BroadcastAction.Type.OVERWRITE_CONFIG.getAction());
|
||||
|
||||
return constants;
|
||||
}
|
||||
|
||||
@@ -54,6 +54,8 @@ public class JitsiMeetActivity extends AppCompatActivity
|
||||
private static final String ACTION_JITSI_MEET_CONFERENCE = "org.jitsi.meet.CONFERENCE";
|
||||
private static final String JITSI_MEET_CONFERENCE_OPTIONS = "JitsiMeetConferenceOptions";
|
||||
|
||||
private boolean isReadyToClose;
|
||||
|
||||
private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
@@ -124,6 +126,8 @@ public class JitsiMeetActivity extends AppCompatActivity
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
JitsiMeetLogger.i("onDestroy()");
|
||||
|
||||
// Here we are trying to handle the following corner case: an application using the SDK
|
||||
// is using this Activity for displaying meetings, but there is another "main" Activity
|
||||
// with other content. If this Activity is "swiped out" from the recent list we will get
|
||||
@@ -131,7 +135,10 @@ public class JitsiMeetActivity extends AppCompatActivity
|
||||
// current meeting, but when our view is detached from React the JS <-> Native bridge won't
|
||||
// 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();
|
||||
if (!isReadyToClose) {
|
||||
JitsiMeetLogger.i("onDestroy(): leaving...");
|
||||
leave();
|
||||
}
|
||||
|
||||
this.jitsiView = null;
|
||||
|
||||
@@ -149,8 +156,12 @@ public class JitsiMeetActivity extends AppCompatActivity
|
||||
|
||||
@Override
|
||||
public void finish() {
|
||||
leave();
|
||||
if (!isReadyToClose) {
|
||||
JitsiMeetLogger.i("finish(): leaving...");
|
||||
leave();
|
||||
}
|
||||
|
||||
JitsiMeetLogger.i("finish(): finishing...");
|
||||
super.finish();
|
||||
}
|
||||
|
||||
@@ -170,8 +181,8 @@ public class JitsiMeetActivity extends AppCompatActivity
|
||||
}
|
||||
|
||||
public void join(JitsiMeetConferenceOptions options) {
|
||||
if (this.jitsiView != null) {
|
||||
this.jitsiView .join(options);
|
||||
if (this.jitsiView != null) {
|
||||
this.jitsiView.join(options);
|
||||
} else {
|
||||
JitsiMeetLogger.w("Cannot join, view is null");
|
||||
}
|
||||
@@ -252,6 +263,7 @@ public class JitsiMeetActivity extends AppCompatActivity
|
||||
|
||||
protected void onReadyToClose() {
|
||||
JitsiMeetLogger.i("SDK is ready to close");
|
||||
isReadyToClose = true;
|
||||
finish();
|
||||
}
|
||||
|
||||
@@ -259,8 +271,8 @@ public class JitsiMeetActivity extends AppCompatActivity
|
||||
// JitsiMeetLogger.i("Transcription chunk received: " + extraData);
|
||||
// }
|
||||
|
||||
// protected void onCustomOverflowMenuButtonPressed(HashMap<String, Object> extraData) {
|
||||
// JitsiMeetLogger.i("Custom overflow menu button pressed: " + extraData);
|
||||
// protected void onCustomButtonPressed(HashMap<String, Object> extraData) {
|
||||
// JitsiMeetLogger.i("Custom button pressed: " + extraData);
|
||||
// }
|
||||
|
||||
// Activity lifecycle methods
|
||||
@@ -349,8 +361,8 @@ public class JitsiMeetActivity extends AppCompatActivity
|
||||
// case TRANSCRIPTION_CHUNK_RECEIVED:
|
||||
// onTranscriptionChunkReceived(event.getData());
|
||||
// break;
|
||||
// case CUSTOM_OVERFLOW_MENU_BUTTON_PRESSED:
|
||||
// onCustomOverflowMenuButtonPressed(event.getData());
|
||||
// case CUSTOM_BUTTON_PRESSED:
|
||||
// onCustomButtonPressed(event.getData());
|
||||
// break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ public class JitsiMeetActivityDelegate {
|
||||
/**
|
||||
* Tells whether or not the permissions request is currently in progress.
|
||||
*
|
||||
* @return {@code true} if the permssions are being requested or {@code false} otherwise.
|
||||
* @return {@code true} if the permissions are being requested or {@code false} otherwise.
|
||||
*/
|
||||
static boolean arePermissionsBeingRequested() {
|
||||
return permissionListener != null;
|
||||
|
||||
@@ -270,11 +270,6 @@ public class JitsiMeetConferenceOptions implements Parcelable {
|
||||
Bundle asProps() {
|
||||
Bundle props = new Bundle();
|
||||
|
||||
// Android always has the PiP flag set by default.
|
||||
if (!featureFlags.containsKey("pip.enabled")) {
|
||||
featureFlags.putBoolean("pip.enabled", true);
|
||||
}
|
||||
|
||||
props.putBundle("flags", featureFlags);
|
||||
|
||||
Bundle urlProps = new Bundle();
|
||||
|
||||
@@ -51,39 +51,39 @@ import java.util.Random;
|
||||
*
|
||||
* See: https://developer.android.com/guide/components/services
|
||||
*/
|
||||
public class JitsiMeetOngoingConferenceService extends Service
|
||||
implements OngoingConferenceTracker.OngoingConferenceListener {
|
||||
public class JitsiMeetOngoingConferenceService extends Service implements OngoingConferenceTracker.OngoingConferenceListener {
|
||||
private static final String TAG = JitsiMeetOngoingConferenceService.class.getSimpleName();
|
||||
private static final String ACTIVITY_DATA_KEY = "activityDataKey";
|
||||
private static final String EXTRA_DATA_KEY = "extraDataKey";
|
||||
private static final String EXTRA_DATA_BUNDLE_KEY = "extraDataBundleKey";
|
||||
private static final String IS_AUDIO_MUTED_KEY = "isAudioMuted";
|
||||
|
||||
private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver();
|
||||
|
||||
private static final int PERMISSIONS_REQUEST_CODE = (int) (Math.random() * Short.MAX_VALUE);
|
||||
|
||||
private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver();
|
||||
|
||||
private boolean isAudioMuted;
|
||||
private Class tapBackActivity;
|
||||
|
||||
static final int NOTIFICATION_ID = new Random().nextInt(99999) + 10000;
|
||||
|
||||
private static void doLaunch(Context context, HashMap<String, Object> extraData) {
|
||||
Activity activity = (Activity) context;
|
||||
|
||||
OngoingNotification.createNotificationChannel((Activity) context);
|
||||
OngoingNotification.createNotificationChannel(activity);
|
||||
|
||||
Intent intent = new Intent(context, JitsiMeetOngoingConferenceService.class);
|
||||
|
||||
Bundle extraDataBundle = new Bundle();
|
||||
extraDataBundle.putSerializable(EXTRA_DATA_KEY, extraData);
|
||||
|
||||
intent.putExtra(EXTRA_DATA_BUNDLE_KEY, extraDataBundle);
|
||||
intent.putExtra(ACTIVITY_DATA_KEY, activity.getClass().getCanonicalName());
|
||||
|
||||
ComponentName componentName;
|
||||
|
||||
try {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
componentName = context.startForegroundService(intent);
|
||||
} else {
|
||||
componentName = context.startService(intent);
|
||||
}
|
||||
componentName = context.startForegroundService(intent);
|
||||
} catch (RuntimeException e) {
|
||||
// Avoid crashing due to ForegroundServiceStartNotAllowedException (API level 31).
|
||||
// See: https://developer.android.com/guide/components/foreground-services#background-start-restrictions
|
||||
@@ -154,7 +154,7 @@ public class JitsiMeetOngoingConferenceService extends Service
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
|
||||
Notification notification = OngoingNotification.buildOngoingConferenceNotification(isAudioMuted, this);
|
||||
Notification notification = OngoingNotification.buildOngoingConferenceNotification(isAudioMuted, this, tapBackActivity);
|
||||
if (notification == null) {
|
||||
stopSelf();
|
||||
JitsiMeetLogger.w(TAG + " Couldn't start service, notification is null");
|
||||
@@ -190,13 +190,28 @@ public class JitsiMeetOngoingConferenceService extends Service
|
||||
|
||||
@Override
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
final String actionName = intent.getAction();
|
||||
final Action action = Action.fromName(actionName);
|
||||
|
||||
Boolean isAudioMuted = tryParseIsAudioMuted(intent);
|
||||
if (action != Action.HANGUP) {
|
||||
Boolean isAudioMuted = tryParseIsAudioMuted(intent);
|
||||
|
||||
if (isAudioMuted != null) {
|
||||
this.isAudioMuted = Boolean.parseBoolean(intent.getStringExtra("muted"));
|
||||
if (isAudioMuted != null) {
|
||||
this.isAudioMuted = Boolean.parseBoolean(intent.getStringExtra("muted"));
|
||||
}
|
||||
|
||||
Notification notification = OngoingNotification.buildOngoingConferenceNotification(isAudioMuted, this);
|
||||
if (tapBackActivity == null) {
|
||||
String targetActivityName = intent.getExtras().getString(ACTIVITY_DATA_KEY);
|
||||
Class<? extends Activity> targetActivity = null;
|
||||
try {
|
||||
targetActivity = Class.forName(targetActivityName).asSubclass(Activity.class);
|
||||
tapBackActivity = targetActivity;
|
||||
} catch (ClassNotFoundException e) {
|
||||
JitsiMeetLogger.w(TAG + " Could not find target Activity: " + targetActivityName);
|
||||
}
|
||||
}
|
||||
|
||||
Notification notification = OngoingNotification.buildOngoingConferenceNotification(this.isAudioMuted, this, tapBackActivity);
|
||||
if (notification == null) {
|
||||
stopSelf();
|
||||
JitsiMeetLogger.w(TAG + " Couldn't start service, notification is null");
|
||||
@@ -206,9 +221,6 @@ public class JitsiMeetOngoingConferenceService extends Service
|
||||
}
|
||||
}
|
||||
|
||||
final String actionName = intent.getAction();
|
||||
final Action action = Action.fromName(actionName);
|
||||
|
||||
// When starting the service, there is no action passed in the intent
|
||||
if (action != null) {
|
||||
switch (action) {
|
||||
@@ -281,8 +293,9 @@ public class JitsiMeetOngoingConferenceService extends Service
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
Class tapBackActivity = JitsiMeetOngoingConferenceService.this.tapBackActivity;
|
||||
isAudioMuted = Boolean.parseBoolean(intent.getStringExtra("muted"));
|
||||
Notification notification = OngoingNotification.buildOngoingConferenceNotification(isAudioMuted, context);
|
||||
Notification notification = OngoingNotification.buildOngoingConferenceNotification(isAudioMuted, context, tapBackActivity);
|
||||
if (notification == null) {
|
||||
stopSelf();
|
||||
JitsiMeetLogger.w(TAG + " Couldn't update service, notification is null");
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
package org.jitsi.meet.sdk;
|
||||
|
||||
/*
|
||||
* Copyright 2017 The WebRTC project authors. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by a BSD-style license
|
||||
* that can be found in the LICENSE file in the root of the source
|
||||
* tree. An additional intellectual property rights grant can be found
|
||||
* in the file PATENTS. All contributing project authors may
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.oney.WebRTCModule.webrtcutils.SoftwareVideoDecoderFactoryProxy;
|
||||
|
||||
import org.webrtc.EglBase;
|
||||
import org.webrtc.HardwareVideoDecoderFactory;
|
||||
import org.webrtc.PlatformSoftwareVideoDecoderFactory;
|
||||
import org.webrtc.VideoCodecInfo;
|
||||
import org.webrtc.VideoDecoder;
|
||||
import org.webrtc.VideoDecoderFactory;
|
||||
import org.webrtc.VideoDecoderFallback;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedHashSet;
|
||||
|
||||
/**
|
||||
* Custom decoder factory which uses HW decoders and falls back to SW.
|
||||
*/
|
||||
public class JitsiVideoDecoderFactory implements VideoDecoderFactory {
|
||||
private final VideoDecoderFactory hardwareVideoDecoderFactory;
|
||||
private final VideoDecoderFactory softwareVideoDecoderFactory = new SoftwareVideoDecoderFactoryProxy();
|
||||
private final @Nullable VideoDecoderFactory platformSoftwareVideoDecoderFactory;
|
||||
|
||||
/**
|
||||
* Create decoder factory using default hardware decoder factory.
|
||||
*/
|
||||
public JitsiVideoDecoderFactory(@Nullable EglBase.Context eglContext) {
|
||||
this.hardwareVideoDecoderFactory = new HardwareVideoDecoderFactory(eglContext);
|
||||
this.platformSoftwareVideoDecoderFactory = new PlatformSoftwareVideoDecoderFactory(eglContext);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create decoder factory using explicit hardware decoder factory.
|
||||
*/
|
||||
JitsiVideoDecoderFactory(VideoDecoderFactory hardwareVideoDecoderFactory) {
|
||||
this.hardwareVideoDecoderFactory = hardwareVideoDecoderFactory;
|
||||
this.platformSoftwareVideoDecoderFactory = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable VideoDecoder createDecoder(VideoCodecInfo codecType) {
|
||||
VideoDecoder softwareDecoder = softwareVideoDecoderFactory.createDecoder(codecType);
|
||||
final VideoDecoder hardwareDecoder = hardwareVideoDecoderFactory.createDecoder(codecType);
|
||||
if (softwareDecoder == null && platformSoftwareVideoDecoderFactory != null) {
|
||||
softwareDecoder = platformSoftwareVideoDecoderFactory.createDecoder(codecType);
|
||||
}
|
||||
if (hardwareDecoder != null && softwareDecoder != null) {
|
||||
// Both hardware and software supported, wrap it in a software fallback
|
||||
return new VideoDecoderFallback(
|
||||
/* fallback= */ softwareDecoder, /* primary= */ hardwareDecoder);
|
||||
}
|
||||
return hardwareDecoder != null ? hardwareDecoder : softwareDecoder;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VideoCodecInfo[] getSupportedCodecs() {
|
||||
LinkedHashSet<VideoCodecInfo> supportedCodecInfos = new LinkedHashSet<>();
|
||||
|
||||
supportedCodecInfos.addAll(Arrays.asList(softwareVideoDecoderFactory.getSupportedCodecs()));
|
||||
supportedCodecInfos.addAll(Arrays.asList(hardwareVideoDecoderFactory.getSupportedCodecs()));
|
||||
if (platformSoftwareVideoDecoderFactory != null) {
|
||||
supportedCodecInfos.addAll(
|
||||
Arrays.asList(platformSoftwareVideoDecoderFactory.getSupportedCodecs()));
|
||||
}
|
||||
|
||||
return supportedCodecInfos.toArray(new VideoCodecInfo[supportedCodecInfos.size()]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package org.jitsi.meet.sdk;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.oney.WebRTCModule.webrtcutils.H264AndSoftwareVideoEncoderFactory;
|
||||
|
||||
import org.webrtc.EglBase;
|
||||
|
||||
/**
|
||||
* Custom encoder factory which uses HW for H.264 and SW for everything else.
|
||||
*/
|
||||
public class JitsiVideoEncoderFactory extends H264AndSoftwareVideoEncoderFactory {
|
||||
public JitsiVideoEncoderFactory(@Nullable EglBase.Context eglContext) {
|
||||
super(eglContext);
|
||||
}
|
||||
}
|
||||
@@ -29,8 +29,6 @@ import android.content.Intent;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.core.app.NotificationCompat;
|
||||
|
||||
import android.os.Build;
|
||||
|
||||
|
||||
/**
|
||||
* Helper class for creating the ongoing notification which is used with
|
||||
@@ -45,10 +43,6 @@ class OngoingNotification {
|
||||
static final String ONGOING_CONFERENCE_CHANNEL_ID = "JitsiOngoingConferenceChannel";
|
||||
|
||||
static void createNotificationChannel(Activity context) {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (context == null) {
|
||||
JitsiMeetLogger.w(TAG + " Cannot create notification channel: no current context");
|
||||
return;
|
||||
@@ -73,14 +67,13 @@ class OngoingNotification {
|
||||
notificationManager.createNotificationChannel(channel);
|
||||
}
|
||||
|
||||
static Notification buildOngoingConferenceNotification(Boolean isMuted, Context context) {
|
||||
|
||||
static Notification buildOngoingConferenceNotification(Boolean isMuted, Context context, Class tapBackActivity) {
|
||||
if (context == null) {
|
||||
JitsiMeetLogger.w(TAG + " Cannot create notification: no current context");
|
||||
return null;
|
||||
}
|
||||
|
||||
Intent notificationIntent = new Intent(context, context.getClass());
|
||||
Intent notificationIntent = new Intent(context, tapBackActivity == null ? context.getClass() : tapBackActivity);
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_IMMUTABLE);
|
||||
|
||||
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, ONGOING_CONFERENCE_CHANNEL_ID);
|
||||
|
||||
@@ -20,7 +20,6 @@ import android.annotation.TargetApi;
|
||||
import android.app.Activity;
|
||||
import android.app.ActivityManager;
|
||||
import android.app.PictureInPictureParams;
|
||||
import android.os.Build;
|
||||
import android.util.Rational;
|
||||
|
||||
import com.facebook.react.bridge.Promise;
|
||||
@@ -53,7 +52,7 @@ class PictureInPictureModule extends ReactContextBaseJavaModule {
|
||||
// Android Go devices don't support PiP. There doesn't seem to be a better way to detect it than
|
||||
// to use ActivityManager.isLowRamDevice().
|
||||
// https://stackoverflow.com/questions/58340558/how-to-detect-android-go
|
||||
isSupported = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && !am.isLowRamDevice();
|
||||
isSupported = !am.isLowRamDevice();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -82,7 +81,6 @@ class PictureInPictureModule extends ReactContextBaseJavaModule {
|
||||
* including when the activity is not visible (paused or stopped), if the
|
||||
* screen is locked or if the user has an activity pinned.
|
||||
*/
|
||||
@TargetApi(Build.VERSION_CODES.O)
|
||||
public void enterPictureInPicture() {
|
||||
if (!isEnabled) {
|
||||
return;
|
||||
|
||||
@@ -3,7 +3,6 @@ package org.jitsi.meet.sdk;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.telecom.DisconnectCause;
|
||||
import android.telecom.PhoneAccount;
|
||||
@@ -32,7 +31,6 @@ import org.jitsi.meet.sdk.log.JitsiMeetLogger;
|
||||
*
|
||||
* @author Pawel Domas
|
||||
*/
|
||||
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||
@ReactModule(name = RNConnectionService.NAME)
|
||||
class RNConnectionService extends ReactContextBaseJavaModule {
|
||||
|
||||
@@ -53,7 +51,6 @@ class RNConnectionService extends ReactContextBaseJavaModule {
|
||||
* @param audioRoute the new audio route to be set. See
|
||||
* {@link android.telecom.CallAudioState} constants prefixed with "ROUTE_".
|
||||
*/
|
||||
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||
static void setAudioRoute(int audioRoute) {
|
||||
for (ConnectionService.ConnectionImpl c
|
||||
: ConnectionService.getConnections()) {
|
||||
|
||||
@@ -16,28 +16,26 @@
|
||||
|
||||
package org.jitsi.meet.sdk;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.facebook.hermes.reactexecutor.HermesExecutorFactory;
|
||||
import com.facebook.react.ReactInstanceManager;
|
||||
import com.facebook.react.ReactPackage;
|
||||
import com.facebook.react.bridge.NativeModule;
|
||||
import com.facebook.react.bridge.ReactApplicationContext;
|
||||
import com.facebook.react.bridge.ReactContext;
|
||||
import com.facebook.react.common.LifecycleState;
|
||||
import com.facebook.react.jscexecutor.JSCExecutorFactory;
|
||||
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
||||
import com.facebook.react.uimanager.ViewManager;
|
||||
import com.oney.WebRTCModule.EglUtils;
|
||||
import com.oney.WebRTCModule.WebRTCModuleOptions;
|
||||
import com.oney.WebRTCModule.webrtcutils.H264AndSoftwareVideoDecoderFactory;
|
||||
import com.oney.WebRTCModule.webrtcutils.H264AndSoftwareVideoEncoderFactory;
|
||||
|
||||
import org.devio.rn.splashscreen.SplashScreenModule;
|
||||
import org.jitsi.meet.sdk.log.JitsiMeetLogger;
|
||||
import org.webrtc.EglBase;
|
||||
import org.webrtc.Logging;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.util.ArrayList;
|
||||
@@ -126,41 +124,36 @@ class ReactInstanceManagerHolder {
|
||||
// AmplitudeReactNativePackage
|
||||
try {
|
||||
Class<?> amplitudePackageClass = Class.forName("com.amplitude.reactnative.AmplitudeReactNativePackage");
|
||||
Constructor constructor = amplitudePackageClass.getConstructor();
|
||||
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.
|
||||
Log.d(TAG, "Not loading AmplitudeReactNativePackage");
|
||||
JitsiMeetLogger.d(TAG, "Not loading AmplitudeReactNativePackage");
|
||||
}
|
||||
|
||||
// GiphyReactNativeSdkPackage
|
||||
try {
|
||||
Class<?> giphyPackageClass = Class.forName("com.giphyreactnativesdk.GiphyReactNativeSdkPackage");
|
||||
Constructor constructor = giphyPackageClass.getConstructor();
|
||||
Constructor<?> constructor = giphyPackageClass.getConstructor();
|
||||
packages.add((ReactPackage)constructor.newInstance());
|
||||
} catch (Exception e) {
|
||||
// Ignore any error, the module is not compiled when LIBRE_BUILD is enabled.
|
||||
Log.d(TAG, "Not loading GiphyReactNativeSdkPackage");
|
||||
JitsiMeetLogger.d(TAG, "Not loading GiphyReactNativeSdkPackage");
|
||||
}
|
||||
|
||||
// RNGoogleSignInPackage
|
||||
try {
|
||||
Class<?> googlePackageClass = Class.forName("com.reactnativegooglesignin.RNGoogleSigninPackage");
|
||||
Constructor constructor = googlePackageClass.getConstructor();
|
||||
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.
|
||||
Log.d(TAG, "Not loading RNGoogleSignInPackage");
|
||||
JitsiMeetLogger.d(TAG, "Not loading RNGoogleSignInPackage");
|
||||
}
|
||||
|
||||
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.
|
||||
*
|
||||
@@ -174,7 +167,7 @@ class ReactInstanceManagerHolder {
|
||||
= ReactInstanceManagerHolder.getReactInstanceManager();
|
||||
|
||||
if (reactInstanceManager != null) {
|
||||
ReactContext reactContext
|
||||
@SuppressLint("VisibleForTests") ReactContext reactContext
|
||||
= reactInstanceManager.getCurrentReactContext();
|
||||
|
||||
if (reactContext != null) {
|
||||
@@ -197,7 +190,7 @@ class ReactInstanceManagerHolder {
|
||||
*/
|
||||
static <T extends NativeModule> T getNativeModule(
|
||||
Class<T> nativeModuleClass) {
|
||||
ReactContext reactContext
|
||||
@SuppressLint("VisibleForTests") ReactContext reactContext
|
||||
= reactInstanceManager != null
|
||||
? reactInstanceManager.getCurrentReactContext() : null;
|
||||
|
||||
@@ -205,18 +198,6 @@ class ReactInstanceManagerHolder {
|
||||
? reactContext.getNativeModule(nativeModuleClass) : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the current {@link Activity} linked to React Native.
|
||||
*
|
||||
* @return An activity attached to React Native.
|
||||
*/
|
||||
static Activity getCurrentActivity() {
|
||||
ReactContext reactContext
|
||||
= reactInstanceManager != null
|
||||
? reactInstanceManager.getCurrentReactContext() : null;
|
||||
return reactContext != null ? reactContext.getCurrentActivity() : null;
|
||||
}
|
||||
|
||||
static ReactInstanceManager getReactInstanceManager() {
|
||||
return reactInstanceManager;
|
||||
}
|
||||
@@ -236,15 +217,18 @@ class ReactInstanceManagerHolder {
|
||||
|
||||
// Initialize the WebRTC module options.
|
||||
WebRTCModuleOptions options = WebRTCModuleOptions.getInstance();
|
||||
|
||||
EglBase.Context eglContext = EglUtils.getRootEglBaseContext();
|
||||
|
||||
options.videoDecoderFactory = new H264AndSoftwareVideoDecoderFactory(eglContext);
|
||||
options.videoEncoderFactory = new H264AndSoftwareVideoEncoderFactory(eglContext);
|
||||
options.enableMediaProjectionService = true;
|
||||
// options.loggingSeverity = Logging.Severity.LS_INFO;
|
||||
if (options.videoDecoderFactory == null || options.videoEncoderFactory == null) {
|
||||
EglBase.Context eglContext = EglUtils.getRootEglBaseContext();
|
||||
if (options.videoDecoderFactory == null) {
|
||||
options.videoDecoderFactory = new JitsiVideoDecoderFactory(eglContext);
|
||||
}
|
||||
if (options.videoEncoderFactory == null) {
|
||||
options.videoEncoderFactory = new JitsiVideoEncoderFactory(eglContext);
|
||||
}
|
||||
}
|
||||
|
||||
Log.d(TAG, "initializing RN with Activity");
|
||||
JitsiMeetLogger.d(TAG, "initializing RN");
|
||||
|
||||
reactInstanceManager
|
||||
= ReactInstanceManager.builder()
|
||||
@@ -252,7 +236,7 @@ class ReactInstanceManagerHolder {
|
||||
.setCurrentActivity(activity)
|
||||
.setBundleAssetName("index.android.bundle")
|
||||
.setJSMainModulePath("index.android")
|
||||
.setJavaScriptExecutorFactory(getReactNativeJSFactory())
|
||||
.setJavaScriptExecutorFactory(new HermesExecutorFactory())
|
||||
.addPackages(getReactNativePackages())
|
||||
.setUseDeveloperSupport(BuildConfig.DEBUG)
|
||||
.setInitialLifecycleState(LifecycleState.RESUMED)
|
||||
|
||||
2
app.js
2
app.js
@@ -1,4 +1,4 @@
|
||||
/* application specific logic */
|
||||
/* Jitsi Meet app main entrypoint. */
|
||||
|
||||
// Re-export jQuery
|
||||
// FIXME: Remove this requirement from torture tests.
|
||||
|
||||
@@ -5,5 +5,12 @@ module.exports = {
|
||||
plugins: [ 'react-native-paper/babel' ]
|
||||
}
|
||||
},
|
||||
plugins: [ 'optional-require' ]
|
||||
|
||||
// This happens because react native has conflict with @babel/plugin-transform-private-methods plugin
|
||||
// https://github.com/ethers-io/ethers.js/discussions/4309#discussioncomment-6694524
|
||||
plugins: [ 'optional-require',
|
||||
[ '@babel/plugin-transform-private-methods', {
|
||||
'loose': true
|
||||
} ]
|
||||
]
|
||||
};
|
||||
|
||||
181
conference.js
181
conference.js
@@ -27,6 +27,7 @@ import {
|
||||
conferenceJoinInProgress,
|
||||
conferenceJoined,
|
||||
conferenceLeft,
|
||||
conferencePropertiesChanged,
|
||||
conferenceSubjectChanged,
|
||||
conferenceTimestampChanged,
|
||||
conferenceUniqueIdSet,
|
||||
@@ -111,6 +112,7 @@ import {
|
||||
import {
|
||||
getLocalParticipant,
|
||||
getNormalizedDisplayName,
|
||||
getParticipantByIdOrUndefined,
|
||||
getVirtualScreenshareParticipantByOwnerId
|
||||
} from './react/features/base/participants/functions';
|
||||
import { updateSettings } from './react/features/base/settings/actions';
|
||||
@@ -135,11 +137,11 @@ import {
|
||||
isUserInteractionRequiredForUnmute
|
||||
} from './react/features/base/tracks/functions';
|
||||
import { downloadJSON } from './react/features/base/util/downloadJSON';
|
||||
import { getJitsiMeetGlobalNSConnectionTimes } from './react/features/base/util/helpers';
|
||||
import { openLeaveReasonDialog } from './react/features/conference/actions.web';
|
||||
import { showDesktopPicker } from './react/features/desktop-picker/actions';
|
||||
import { appendSuffix } from './react/features/display-name/functions';
|
||||
import { maybeOpenFeedbackDialog, submitFeedback } from './react/features/feedback/actions';
|
||||
import { initKeyboardShortcuts } from './react/features/keyboard-shortcuts/actions';
|
||||
import { maybeSetLobbyChatMessageListener } from './react/features/lobby/actions.any';
|
||||
import { setNoiseSuppressionEnabled } from './react/features/noise-suppression/actions';
|
||||
import {
|
||||
@@ -153,7 +155,6 @@ import {
|
||||
NOTIFICATION_TIMEOUT_TYPE
|
||||
} from './react/features/notifications/constants';
|
||||
import { isModerationNotificationDisplayed } from './react/features/notifications/functions';
|
||||
import { mediaPermissionPromptVisibilityChanged } from './react/features/overlay/actions';
|
||||
import { suspendDetected } from './react/features/power-monitor/actions';
|
||||
import { initPrejoin, isPrejoinPageVisible } from './react/features/prejoin/functions';
|
||||
import { disableReceiver, stopReceiver } from './react/features/remote-control/actions';
|
||||
@@ -163,6 +164,7 @@ import { toggleScreenshotCaptureSummary } from './react/features/screenshot-capt
|
||||
import { AudioMixerEffect } from './react/features/stream-effects/audio-mixer/AudioMixerEffect';
|
||||
import { createRnnoiseProcessor } from './react/features/stream-effects/rnnoise';
|
||||
import { handleToggleVideoMuted } from './react/features/toolbox/actions.any';
|
||||
import { transcriberJoined, transcriberLeft } from './react/features/transcribing/actions';
|
||||
import { muteLocal } from './react/features/video-menu/actions.any';
|
||||
|
||||
const logger = Logger.getLogger(__filename);
|
||||
@@ -170,7 +172,9 @@ let room;
|
||||
|
||||
/*
|
||||
* Logic to open a desktop picker put on the window global for
|
||||
* lib-jitsi-meet to detect and invoke
|
||||
* lib-jitsi-meet to detect and invoke.
|
||||
*
|
||||
* TODO: remove once the Electron SDK supporting gDM has been out for a while.
|
||||
*/
|
||||
window.JitsiMeetScreenObtainer = {
|
||||
openDesktopPicker(options, onSourceChoose) {
|
||||
@@ -285,7 +289,7 @@ class ConferenceConnector {
|
||||
},
|
||||
descriptionKey: 'dialog.reservationErrorMsg',
|
||||
titleKey: 'dialog.reservationError'
|
||||
}, NOTIFICATION_TIMEOUT_TYPE.LONG));
|
||||
}));
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -293,7 +297,7 @@ class ConferenceConnector {
|
||||
APP.store.dispatch(showErrorNotification({
|
||||
descriptionKey: 'dialog.gracefulShutdown',
|
||||
titleKey: 'dialog.serviceUnavailable'
|
||||
}, NOTIFICATION_TIMEOUT_TYPE.LONG));
|
||||
}));
|
||||
break;
|
||||
|
||||
// FIXME FOCUS_DISCONNECTED is a confusing event name.
|
||||
@@ -412,9 +416,10 @@ export default {
|
||||
* without any audio tracks.
|
||||
* @param {boolean} options.startWithVideoMuted - will start the conference
|
||||
* without any video tracks.
|
||||
* @param {boolean} recordTimeMetrics - If true time metrics will be recorded.
|
||||
* @returns {Promise<JitsiLocalTrack[]>, Object}
|
||||
*/
|
||||
createInitialLocalTracks(options = {}) {
|
||||
createInitialLocalTracks(options = {}, recordTimeMetrics = false) {
|
||||
const errors = {};
|
||||
|
||||
// Always get a handle on the audio input device so that we have statistics (such as "No audio input" or
|
||||
@@ -431,15 +436,6 @@ export default {
|
||||
requestedVideo = true;
|
||||
}
|
||||
|
||||
if (!config.disableInitialGUM) {
|
||||
JitsiMeetJS.mediaDevices.addEventListener(
|
||||
JitsiMediaDevicesEvents.PERMISSION_PROMPT_IS_SHOWN,
|
||||
browserName =>
|
||||
APP.store.dispatch(
|
||||
mediaPermissionPromptVisibilityChanged(true, browserName))
|
||||
);
|
||||
}
|
||||
|
||||
let tryCreateLocalTracks = Promise.resolve([]);
|
||||
|
||||
// On Electron there is no permission prompt for granting permissions. That's why we don't need to
|
||||
@@ -448,8 +444,7 @@ export default {
|
||||
const timeout = browser.isElectron() ? 15000 : 60000;
|
||||
const audioOptions = {
|
||||
devices: [ MEDIA_TYPE.AUDIO ],
|
||||
timeout,
|
||||
firePermissionPromptIsShownEvent: true
|
||||
timeout
|
||||
};
|
||||
|
||||
// Spot uses the _desktopSharingSourceDevice config option to use an external video input device label as
|
||||
@@ -484,24 +479,14 @@ export default {
|
||||
} else if (requestedAudio || requestedVideo) {
|
||||
tryCreateLocalTracks = APP.store.dispatch(createInitialAVTracks({
|
||||
devices: initialDevices,
|
||||
timeout,
|
||||
firePermissionPromptIsShownEvent: true
|
||||
})).then(({ tracks, errors: pErrors }) => {
|
||||
timeout
|
||||
}, recordTimeMetrics)).then(({ tracks, errors: pErrors }) => {
|
||||
Object.assign(errors, pErrors);
|
||||
|
||||
return tracks;
|
||||
});
|
||||
}
|
||||
|
||||
// Hide the permissions prompt/overlay as soon as the tracks are created. Don't wait for the connection to
|
||||
// be established, as in some cases like when auth is required, connection won't be established until the user
|
||||
// inputs their credentials, but the dialog would be overshadowed by the overlay.
|
||||
tryCreateLocalTracks.then(tracks => {
|
||||
APP.store.dispatch(mediaPermissionPromptVisibilityChanged(false));
|
||||
|
||||
return tracks;
|
||||
});
|
||||
|
||||
return {
|
||||
tryCreateLocalTracks,
|
||||
errors
|
||||
@@ -559,10 +544,10 @@ export default {
|
||||
* If prejoin page is enabled open an new connection in the background
|
||||
* and create local tracks.
|
||||
*
|
||||
* @param {{ roomName: string }} options
|
||||
* @param {{ roomName: string, shouldDispatchConnect }} options
|
||||
* @returns {Promise}
|
||||
*/
|
||||
async init({ roomName }) {
|
||||
async init({ roomName, shouldDispatchConnect }) {
|
||||
const state = APP.store.getState();
|
||||
const initialOptions = {
|
||||
startAudioOnly: config.startAudioOnly,
|
||||
@@ -570,8 +555,12 @@ export default {
|
||||
startWithAudioMuted: getStartWithAudioMuted(state) || isUserInteractionRequiredForUnmute(state),
|
||||
startWithVideoMuted: getStartWithVideoMuted(state) || isUserInteractionRequiredForUnmute(state)
|
||||
};
|
||||
const connectionTimes = getJitsiMeetGlobalNSConnectionTimes();
|
||||
const startTime = window.performance.now();
|
||||
|
||||
logger.debug(`Executed conference.init with roomName: ${roomName}`);
|
||||
connectionTimes['conference.init.start'] = startTime;
|
||||
|
||||
logger.debug(`Executed conference.init with roomName: ${roomName} (performance.now=${startTime})`);
|
||||
|
||||
this.roomName = roomName;
|
||||
|
||||
@@ -604,32 +593,65 @@ export default {
|
||||
return localTracks;
|
||||
};
|
||||
const { dispatch, getState } = APP.store;
|
||||
const { tryCreateLocalTracks, errors } = this.createInitialLocalTracks(initialOptions);
|
||||
const createLocalTracksStart = window.performance.now();
|
||||
|
||||
dispatch(setInitialGUMPromise(tryCreateLocalTracks.then(async tr => {
|
||||
connectionTimes['conference.init.createLocalTracks.start'] = createLocalTracksStart;
|
||||
|
||||
logger.debug(`(TIME) createInitialLocalTracks: ${createLocalTracksStart} `);
|
||||
|
||||
const { tryCreateLocalTracks, errors } = this.createInitialLocalTracks(initialOptions, true);
|
||||
|
||||
tryCreateLocalTracks.then(async tr => {
|
||||
const createLocalTracksEnd = window.performance.now();
|
||||
|
||||
connectionTimes['conference.init.createLocalTracks.end'] = createLocalTracksEnd;
|
||||
logger.debug(`(TIME) createInitialLocalTracks finished: ${createLocalTracksEnd} `);
|
||||
const tracks = handleInitialTracks(initialOptions, tr);
|
||||
|
||||
this._initDeviceList(true);
|
||||
|
||||
const { initialGUMPromise } = getState()['features/base/media'];
|
||||
|
||||
if (isPrejoinPageVisible(getState())) {
|
||||
dispatch(gumPending([ MEDIA_TYPE.AUDIO, MEDIA_TYPE.VIDEO ], IGUMPendingState.NONE));
|
||||
dispatch(setInitialGUMPromise());
|
||||
|
||||
// Note: Not sure if initPrejoin needs to be async. But let's wait for it just to be sure the
|
||||
// tracks are added.
|
||||
// Since the conference is not yet created in redux this function will execute synchronous
|
||||
// which will guarantee us that the local tracks are added to redux before we proceed.
|
||||
initPrejoin(tracks, errors, dispatch);
|
||||
|
||||
connectionTimes['conference.init.end'] = window.performance.now();
|
||||
|
||||
// resolve the initialGUMPromise in case connect have finished so that we can proceed to join.
|
||||
if (initialGUMPromise) {
|
||||
logger.debug('Resolving the initialGUM promise! (prejoinVisible=true)');
|
||||
initialGUMPromise.resolve({
|
||||
tracks,
|
||||
errors
|
||||
});
|
||||
}
|
||||
|
||||
logger.debug('Clear the initialGUM promise! (prejoinVisible=true)');
|
||||
|
||||
// For prejoin we don't need the initial GUM promise since the tracks are already added to the store
|
||||
// via initPrejoin
|
||||
dispatch(setInitialGUMPromise());
|
||||
} else {
|
||||
APP.store.dispatch(displayErrorsForCreateInitialLocalTracks(errors));
|
||||
setGUMPendingStateOnFailedTracks(tracks, APP.store.dispatch);
|
||||
|
||||
connectionTimes['conference.init.end'] = window.performance.now();
|
||||
if (initialGUMPromise) {
|
||||
logger.debug('Resolving the initialGUM promise!');
|
||||
initialGUMPromise.resolve({
|
||||
tracks,
|
||||
errors
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return {
|
||||
tracks,
|
||||
errors
|
||||
};
|
||||
})));
|
||||
|
||||
if (!isPrejoinPageVisible(getState())) {
|
||||
if (shouldDispatchConnect) {
|
||||
logger.info('Dispatching connect from init since prejoin is not visible.');
|
||||
dispatch(connect());
|
||||
}
|
||||
},
|
||||
@@ -992,7 +1014,7 @@ export default {
|
||||
},
|
||||
|
||||
/**
|
||||
* Will be filled with values only when config.debug is enabled.
|
||||
* Will be filled with values only when config.testing.testMode is true.
|
||||
* Its used by torture to check audio levels.
|
||||
*/
|
||||
audioLevelsMap: {},
|
||||
@@ -1379,28 +1401,19 @@ export default {
|
||||
/**
|
||||
* Creates desktop (screensharing) {@link JitsiLocalTrack}
|
||||
*
|
||||
* @param {Object} [options] - Screen sharing options that will be passed to
|
||||
* createLocalTracks.
|
||||
* @param {Object} [options.desktopSharing]
|
||||
* @param {Object} [options.desktopStream] - An existing desktop stream to
|
||||
* use instead of creating a new desktop stream.
|
||||
* @return {Promise.<JitsiLocalTrack>} - A Promise resolved with
|
||||
* {@link JitsiLocalTrack} for the screensharing or rejected with
|
||||
* {@link JitsiTrackError}.
|
||||
*
|
||||
* @private
|
||||
*/
|
||||
_createDesktopTrack(options = {}) {
|
||||
_createDesktopTrack() {
|
||||
const didHaveVideo = !this.isLocalVideoMuted();
|
||||
|
||||
const getDesktopStreamPromise = options.desktopStream
|
||||
? Promise.resolve([ options.desktopStream ])
|
||||
: createLocalTracksF({
|
||||
desktopSharingSourceDevice: options.desktopSharingSources
|
||||
? null : config._desktopSharingSourceDevice,
|
||||
desktopSharingSources: options.desktopSharingSources,
|
||||
devices: [ 'desktop' ]
|
||||
});
|
||||
const getDesktopStreamPromise = createLocalTracksF({
|
||||
desktopSharingSourceDevice: config._desktopSharingSourceDevice,
|
||||
devices: [ 'desktop' ]
|
||||
});
|
||||
|
||||
return getDesktopStreamPromise.then(desktopStreams => {
|
||||
// Stores the "untoggle" handler which remembers whether was
|
||||
@@ -1577,9 +1590,9 @@ export default {
|
||||
newLvl = 0;
|
||||
}
|
||||
|
||||
if (config.debug) {
|
||||
if (config.testing?.testMode) {
|
||||
this.audioLevelsMap[id] = newLvl;
|
||||
if (config.debugAudioLevels) {
|
||||
if (config.testing?.debugAudioLevels) {
|
||||
logger.log(`AudioLevel:${id}/${newLvl}`);
|
||||
}
|
||||
}
|
||||
@@ -1683,6 +1696,16 @@ export default {
|
||||
}
|
||||
);
|
||||
|
||||
room.on(
|
||||
JitsiConferenceEvents.TRANSCRIPTION_STATUS_CHANGED,
|
||||
(status, id, abruptly) => {
|
||||
if (status === JitsiMeetJS.constants.transcriptionStatus.ON) {
|
||||
APP.store.dispatch(transcriberJoined(id));
|
||||
} else if (status === JitsiMeetJS.constants.transcriptionStatus.OFF) {
|
||||
APP.store.dispatch(transcriberLeft(id, abruptly));
|
||||
}
|
||||
});
|
||||
|
||||
room.on(
|
||||
JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED,
|
||||
(participant, data) => {
|
||||
@@ -1709,6 +1732,10 @@ export default {
|
||||
JitsiConferenceEvents.LOCK_STATE_CHANGED,
|
||||
(...args) => APP.store.dispatch(lockStateChanged(room, ...args)));
|
||||
|
||||
room.on(
|
||||
JitsiConferenceEvents.PROPERTIES_CHANGED,
|
||||
properties => APP.store.dispatch(conferencePropertiesChanged(properties)));
|
||||
|
||||
room.on(JitsiConferenceEvents.KICKED, (participant, reason, isReplaced) => {
|
||||
if (isReplaced) {
|
||||
// this event triggers when the local participant is kicked, `participant`
|
||||
@@ -1775,12 +1802,17 @@ export default {
|
||||
room.addCommandListener(
|
||||
this.commands.defaults.AVATAR_URL,
|
||||
(data, from) => {
|
||||
APP.store.dispatch(
|
||||
participantUpdated({
|
||||
conference: room,
|
||||
id: from,
|
||||
avatarURL: data.value
|
||||
}));
|
||||
const participant = getParticipantByIdOrUndefined(APP.store, from);
|
||||
|
||||
// if already set from presence(jwt), skip the command processing
|
||||
if (!participant?.avatarURL) {
|
||||
APP.store.dispatch(
|
||||
participantUpdated({
|
||||
conference: room,
|
||||
id: from,
|
||||
avatarURL: data.value
|
||||
}));
|
||||
}
|
||||
});
|
||||
|
||||
room.on(
|
||||
@@ -1999,7 +2031,6 @@ export default {
|
||||
|
||||
APP.UI.initConference();
|
||||
|
||||
dispatch(initKeyboardShortcuts());
|
||||
dispatch(conferenceJoined(room));
|
||||
|
||||
const jwt = APP.store.getState()['features/base/jwt'];
|
||||
@@ -2034,8 +2065,9 @@ export default {
|
||||
const { dispatch } = APP.store;
|
||||
|
||||
return dispatch(getAvailableDevices())
|
||||
.then(devices => {
|
||||
APP.UI.onAvailableDevicesChanged(devices);
|
||||
.then(() => {
|
||||
this.updateAudioIconEnabled();
|
||||
this.updateVideoIconEnabled();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -2200,7 +2232,8 @@ export default {
|
||||
|
||||
return Promise.all(promises)
|
||||
.then(() => {
|
||||
APP.UI.onAvailableDevicesChanged(filteredDevices);
|
||||
this.updateAudioIconEnabled();
|
||||
this.updateVideoIconEnabled();
|
||||
});
|
||||
},
|
||||
|
||||
@@ -2245,8 +2278,10 @@ export default {
|
||||
* @param {boolean} [requestFeedback=false] if user feedback should be
|
||||
* @param {string} [hangupReason] the reason for leaving the meeting
|
||||
* requested
|
||||
* @param {boolean} [notifyOnConferenceTermination] whether to notify
|
||||
* the user on conference termination
|
||||
*/
|
||||
hangup(requestFeedback = false, hangupReason) {
|
||||
hangup(requestFeedback = false, hangupReason, notifyOnConferenceTermination) {
|
||||
APP.store.dispatch(disableReceiver());
|
||||
|
||||
this._stopProxyConnection();
|
||||
@@ -2265,7 +2300,7 @@ export default {
|
||||
|
||||
if (requestFeedback) {
|
||||
const feedbackDialogClosed = (feedbackResult = {}) => {
|
||||
if (!feedbackResult.wasDialogShown && hangupReason) {
|
||||
if (!feedbackResult.wasDialogShown && hangupReason && notifyOnConferenceTermination) {
|
||||
return APP.store.dispatch(
|
||||
openLeaveReasonDialog(hangupReason)).then(() => feedbackResult);
|
||||
}
|
||||
|
||||
256
config.js
256
config.js
@@ -84,9 +84,8 @@ var config = {
|
||||
// Allows the setting of a custom bandwidth value from the UI.
|
||||
// assumeBandwidth: true,
|
||||
|
||||
// Disables the End to End Encryption feature. Useful for debugging
|
||||
// issues related to insertable streams.
|
||||
// disableE2EE: false,
|
||||
// Enables use of getDisplayMedia in electron
|
||||
// electronUseGetDisplayMedia: false,
|
||||
|
||||
// Enables the use of the codec selection API supported by the browsers .
|
||||
// enableCodecSelectionAPI: false,
|
||||
@@ -107,6 +106,12 @@ var config = {
|
||||
|
||||
// Dump transcripts to a <transcript> element for debugging.
|
||||
// dumpTranscript: false,
|
||||
|
||||
// Log the audio levels.
|
||||
// debugAudioLevels: true,
|
||||
|
||||
// Will replace ice candidates IPs with invalid ones in order to fail ice.
|
||||
// failICE: true,
|
||||
},
|
||||
|
||||
// Disables moderator indicators.
|
||||
@@ -213,14 +218,45 @@ var config = {
|
||||
// installation. Specifically, these files are needed:
|
||||
// - https://meet.example.com/libs/krisp/krisp.mjs
|
||||
// - https://meet.example.com/libs/krisp/models/model_8.kw
|
||||
// - https://meet.example.com/libs/krisp/models/model_16.kw
|
||||
// - https://meet.example.com/libs/krisp/models/model_32.kw
|
||||
// NOTE: Krisp JS SDK v1.0.9 was tested.
|
||||
// - https://meet.example.com/libs/krisp/models/model_nc.kw
|
||||
// - https://meet.example.com/libs/krisp/models/model_bvc.kw
|
||||
// - https://meet.example.com/libs/krisp/assets/bvc-allowed.txt
|
||||
// In case when you have known BVC supported devices and you want to extend allowed devices list
|
||||
// - https://meet.example.com/libs/krisp/assets/bvc-allowed-ext.txt
|
||||
// In case when you have known BVC supported devices and you want to extend allowed devices list
|
||||
// - https://meet.example.com/libs/krisp/models/model_inbound_8.kw
|
||||
// - https://meet.example.com/libs/krisp/models/model_inbound_16.kw
|
||||
// In case when you want to use inbound noise suppression models
|
||||
// NOTE: Krisp JS SDK v2.0.0 was tested.
|
||||
// noiseSuppression: {
|
||||
// krisp: {
|
||||
// enabled: false,
|
||||
// logProcessStats: false,
|
||||
// debugLogs: false,
|
||||
// useBVC: false,
|
||||
// bufferOverflowMS: 1000,
|
||||
// inboundModels: {
|
||||
// modelInbound8: 'model_inbound_8.kef',
|
||||
// modelInbound16: 'model_inbound_16.kef',
|
||||
// },
|
||||
// preloadInboundModels: {
|
||||
// modelInbound8: 'model_inbound_8.kef',
|
||||
// modelInbound16: 'model_inbound_16.kef',
|
||||
// },
|
||||
// preloadModels: {
|
||||
// modelBVC: 'model_bvc.kef',
|
||||
// model8: 'model_8.kef',
|
||||
// modelNC: 'model_nc_mq.kef',
|
||||
// },
|
||||
// models: {
|
||||
// modelBVC: 'model_bvc.kef',
|
||||
// model8: 'model_8.kef',
|
||||
// modelNV: 'model_nc_mq.kef',
|
||||
// },
|
||||
// bvc: {
|
||||
// allowedDevices: 'bvc-allowed.txt',
|
||||
// allowedDevicesExt: 'bvc-allowed-ext.txt',
|
||||
// }
|
||||
// },
|
||||
// },
|
||||
|
||||
@@ -232,9 +268,26 @@ var config = {
|
||||
// Sets the preferred resolution (height) for local video. Defaults to 720.
|
||||
// resolution: 720,
|
||||
|
||||
// DEPRECATED. Please use raisedHands.disableRemoveRaisedHandOnFocus instead.
|
||||
// Specifies whether the raised hand will hide when someone becomes a dominant speaker or not
|
||||
// disableRemoveRaisedHandOnFocus: false,
|
||||
|
||||
// Specifies which raised hand related config should be set.
|
||||
// raisedHands: {
|
||||
// // Specifies whether the raised hand can be lowered by moderator.
|
||||
// disableLowerHandByModerator: false,
|
||||
|
||||
// // Specifies whether there is a notification before hiding the raised hand
|
||||
// // when someone becomes the dominant speaker.
|
||||
// disableLowerHandNotification: true,
|
||||
|
||||
// // Specifies whether there is a notification when you are the next speaker in line.
|
||||
// disableNextSpeakerNotification: false,
|
||||
|
||||
// // Specifies whether the raised hand will hide when someone becomes a dominant speaker or not.
|
||||
// disableRemoveRaisedHandOnFocus: false,
|
||||
// },
|
||||
|
||||
// speakerStats: {
|
||||
// // Specifies whether the speaker stats is enable or not.
|
||||
// disabled: false,
|
||||
@@ -318,9 +371,6 @@ var config = {
|
||||
|
||||
// Recording
|
||||
|
||||
// DEPRECATED. Use recordingService.enabled instead.
|
||||
// fileRecordingsEnabled: false,
|
||||
|
||||
// Enable the dropbox integration.
|
||||
// dropbox: {
|
||||
// appKey: '<APP_KEY>', // Specify your app key here.
|
||||
@@ -341,6 +391,11 @@ var config = {
|
||||
// // If true, shows a warning label in the prejoin screen to point out the possibility that
|
||||
// // the call you're joining might be recorded.
|
||||
// // showPrejoinWarning: true,
|
||||
// // If true, the notification for recording start will display a link to download the cloud recording.
|
||||
// // showRecordingLink: true,
|
||||
// // If true, mutes audio and video when a recording begins and displays a dialog
|
||||
// // explaining the effect of unmuting.
|
||||
// // requireConsent: true,
|
||||
// },
|
||||
|
||||
// recordingService: {
|
||||
@@ -413,7 +468,7 @@ var config = {
|
||||
|
||||
// // Translation languages.
|
||||
// // Available languages can be found in
|
||||
// // ./src/react/features/transcribing/translation-languages.json.
|
||||
// // ./lang/translation-languages.json.
|
||||
// translationLanguages: ['en', 'es', 'fr', 'ro'],
|
||||
|
||||
// // Important languages to show on the top of the language list.
|
||||
@@ -434,6 +489,10 @@ var config = {
|
||||
|
||||
// // Enables automatic turning on transcribing when recording is started
|
||||
// autoTranscribeOnRecord: false,
|
||||
|
||||
// // Enables automatic request of subtitles when transcriber is present in the meeting, uses the default
|
||||
// // language that is set
|
||||
// autoCaptionOnTranscribe: false,
|
||||
// },
|
||||
|
||||
// Misc
|
||||
@@ -459,12 +518,17 @@ var config = {
|
||||
// videoQuality: {
|
||||
//
|
||||
// // Provides a way to set the codec preference on desktop based endpoints.
|
||||
// codecPreferenceOrder: [ 'VP9', 'VP8', 'H264' ],
|
||||
// codecPreferenceOrder: [ 'VP9', 'VP8', 'H264', 'AV1' ],
|
||||
//
|
||||
// // Provides a way to set the codec for screenshare.
|
||||
// screenshareCodec: 'AV1',
|
||||
// mobileScreenshareCodec: 'VP8',
|
||||
//
|
||||
// // Enables the adaptive mode in the client that will make runtime adjustments to selected codecs and received
|
||||
// // videos for a better user experience. This mode will kick in only when CPU overuse is reported in the
|
||||
// // WebRTC statistics for the outbound video streams.
|
||||
// enableAdaptiveMode: false,
|
||||
//
|
||||
// // Codec specific settings for scalability modes and max bitrates.
|
||||
// av1: {
|
||||
// maxBitratesVideo: {
|
||||
@@ -515,30 +579,6 @@ var config = {
|
||||
// useKSVC: true
|
||||
// },
|
||||
//
|
||||
// DEPRECATED! Use `codec specific settings` instead.
|
||||
// // Provides a way to configure the maximum bitrates that will be enforced on the simulcast streams for
|
||||
// // video tracks. The keys in the object represent the type of the stream (LD, SD or HD) and the values
|
||||
// // are the max.bitrates to be set on that particular type of stream. The actual send may vary based on
|
||||
// // the available bandwidth calculated by the browser, but it will be capped by the values specified here.
|
||||
// // This is currently not implemented on app based clients on mobile.
|
||||
// maxBitratesVideo: {
|
||||
// H264: {
|
||||
// low: 200000,
|
||||
// standard: 500000,
|
||||
// high: 1500000,
|
||||
// },
|
||||
// VP8 : {
|
||||
// low: 200000,
|
||||
// standard: 500000,
|
||||
// high: 1500000,
|
||||
// },
|
||||
// VP9: {
|
||||
// low: 100000,
|
||||
// standard: 300000,
|
||||
// high: 1200000,
|
||||
// },
|
||||
// },
|
||||
//
|
||||
// // The options can be used to override default thresholds of video thumbnail heights corresponding to
|
||||
// // the video quality levels used in the application. At the time of this writing the allowed levels are:
|
||||
// // 'low' - for the low quality level (180p at the time of this writing)
|
||||
@@ -556,22 +596,6 @@ var config = {
|
||||
//
|
||||
// // Provides a way to set the codec preference on mobile devices, both on RN and mobile browser based endpoint
|
||||
// mobileCodecPreferenceOrder: [ 'VP8', 'VP9', 'H264' ],
|
||||
//
|
||||
// // DEPRECATED! Use `codecPreferenceOrder/mobileCodecPreferenceOrder` instead.
|
||||
// // Provides a way to prevent a video codec from being negotiated on the JVB connection. The codec specified
|
||||
// // here will be removed from the list of codecs present in the SDP answer generated by the client. If the
|
||||
// // same codec is specified for both the disabled and preferred option, the disable settings will prevail.
|
||||
// // Note that 'VP8' cannot be disabled since it's a mandatory codec, the setting will be ignored in this case.
|
||||
// disabledCodec: 'H264',
|
||||
//
|
||||
// // DEPRECATED! Use `codecPreferenceOrder/mobileCodecPreferenceOrder` instead.
|
||||
// // Provides a way to set a preferred video codec for the JVB connection. If 'H264' is specified here,
|
||||
// // simulcast will be automatically disabled since JVB doesn't support H264 simulcast yet. This will only
|
||||
// // rearrange the the preference order of the codecs in the SDP answer generated by the browser only if the
|
||||
// // preferred codec specified here is present. Please ensure that the JVB offers the specified codec for this
|
||||
// // to take effect.
|
||||
// preferredCodec: 'VP8',
|
||||
//
|
||||
// },
|
||||
|
||||
// Notification timeouts
|
||||
@@ -579,6 +603,7 @@ var config = {
|
||||
// short: 2500,
|
||||
// medium: 5000,
|
||||
// long: 10000,
|
||||
// extraLong: 60000,
|
||||
// },
|
||||
|
||||
// // Options for the recording limit notification.
|
||||
@@ -608,14 +633,6 @@ var config = {
|
||||
// Disables or enables REMB support in this client (default: enabled).
|
||||
// enableRemb: true,
|
||||
|
||||
// Enables ICE restart logic in LJM and displays the page reload overlay on
|
||||
// ICE failure. Current disabled by default because it's causing issues with
|
||||
// signaling when Octo is enabled. Also when we do an "ICE restart"(which is
|
||||
// not a real ICE restart), the client maintains the TCC sequence number
|
||||
// counter, but the bridge resets it. The bridge sends media packets with
|
||||
// TCC sequence numbers starting from 0.
|
||||
// enableIceRestart: false,
|
||||
|
||||
// Enables forced reload of the client when the call is migrated as a result of
|
||||
// the bridge going down.
|
||||
// enableForcedReload: true,
|
||||
@@ -738,6 +755,12 @@ var config = {
|
||||
// and microsoftApiApplicationClientID
|
||||
// enableCalendarIntegration: false,
|
||||
|
||||
// Whether to notify when the conference is terminated because it was destroyed.
|
||||
// notifyOnConferenceDestruction: true,
|
||||
|
||||
// The client id for the google APIs used for the calendar integration, youtube livestreaming, etc.
|
||||
// googleApiApplicationClientID: '<client_id>',
|
||||
|
||||
// Configs for prejoin page.
|
||||
// prejoinConfig: {
|
||||
// // When 'true', it shows an intermediate page before joining, where the user can configure their devices.
|
||||
@@ -749,6 +772,11 @@ var config = {
|
||||
// hideDisplayName: false,
|
||||
// // List of buttons to hide from the extra join options dropdown.
|
||||
// hideExtraJoinButtons: ['no-audio', 'by-phone'],
|
||||
// // Configuration for pre-call test
|
||||
// // By setting preCallTestEnabled, you enable the pre-call test in the prejoin page.
|
||||
// // ICE server credentials need to be provided over the preCallTestICEUrl
|
||||
// preCallTestEnabled: false,
|
||||
// preCallTestICEUrl: ''
|
||||
// },
|
||||
|
||||
// When 'true', the user cannot edit the display name.
|
||||
@@ -767,10 +795,6 @@ var config = {
|
||||
// set or the lobby is not enabled.
|
||||
// enableInsecureRoomNameWarning: false,
|
||||
|
||||
// Whether to automatically copy invitation URL after creating a room.
|
||||
// Document should be focused for this option to work
|
||||
// enableAutomaticUrlCopy: false,
|
||||
|
||||
// Array with avatar URL prefixes that need to use CORS.
|
||||
// corsAvatarURLs: [ 'https://www.gravatar.com/avatar/' ],
|
||||
|
||||
@@ -855,7 +879,7 @@ var config = {
|
||||
// Overrides the buttons displayed in the main toolbar. Depending on the screen size the number of displayed
|
||||
// buttons varies from 2 buttons to 8 buttons. Every array in the mainToolbarButtons array will replace the
|
||||
// corresponding default buttons configuration matched by the number of buttons specified in the array. Arrays with
|
||||
// more than 8 buttons or less then 2 buttons will be ignored. When there there isn't an override for a cerain
|
||||
// more than 8 buttons or less then 2 buttons will be ignored. When there there isn't an override for a certain
|
||||
// configuration (for example when 3 buttons are displayed) the default jitsi-meet configuration will be used.
|
||||
// The order of the buttons in the array is preserved.
|
||||
// mainToolbarButtons: [
|
||||
@@ -1068,24 +1092,12 @@ var config = {
|
||||
// { urls: 'stun:jitsi-meet.example.com:3478' },
|
||||
{ urls: 'stun:meet-jit-si-turnrelay.jitsi.net:443' },
|
||||
],
|
||||
|
||||
// DEPRECATED! Use `codecPreferenceOrder/mobileCodecPreferenceOrder` instead.
|
||||
// Provides a way to set the video codec preference on the p2p connection. Acceptable
|
||||
// codec values are 'VP8', 'VP9' and 'H264'.
|
||||
// preferredCodec: 'H264',
|
||||
|
||||
// DEPRECATED! Use `codecPreferenceOrder/mobileCodecPreferenceOrder` instead.
|
||||
// Provides a way to prevent a video codec from being negotiated on the p2p connection.
|
||||
// disabledCodec: '',
|
||||
},
|
||||
|
||||
analytics: {
|
||||
// True if the analytics should be disabled
|
||||
// disabled: false,
|
||||
|
||||
// The Google Analytics Tracking ID:
|
||||
// googleAnalyticsTrackingId: 'your-tracking-id-UA-123456-1',
|
||||
|
||||
// Matomo configuration:
|
||||
// matomoEndpoint: 'https://your-matomo-endpoint/',
|
||||
// matomoSiteID: '42',
|
||||
@@ -1123,7 +1135,6 @@ var config = {
|
||||
|
||||
// Array of script URLs to load as lib-jitsi-meet "analytics handlers".
|
||||
// scriptURLs: [
|
||||
// "libs/analytics-ga.min.js", // google-analytics
|
||||
// "https://example.com/my-custom-analytics.js",
|
||||
// ],
|
||||
|
||||
@@ -1209,6 +1220,7 @@ var config = {
|
||||
// warning: '',
|
||||
// },
|
||||
// externallyManagedKey: false,
|
||||
// disabled: false,
|
||||
// },
|
||||
|
||||
// Options related to end-to-end (participant to participant) ping.
|
||||
@@ -1426,6 +1438,13 @@ var config = {
|
||||
*/
|
||||
// dynamicBrandingUrl: '',
|
||||
|
||||
// A list of allowed URL domains for shared video.
|
||||
//
|
||||
// NOTE:
|
||||
// '*' is allowed value and it will allow any URL to be used for shared video. We do not recommend using '*',
|
||||
// use it at your own risk!
|
||||
// sharedVideoAllowedURLDomains: [ ],
|
||||
|
||||
// Options related to the participants pane.
|
||||
// participantsPane: {
|
||||
// // Enables feature
|
||||
@@ -1549,25 +1568,61 @@ var config = {
|
||||
// and will automatically redirect to the token service to get the token for the meeting.
|
||||
// tokenAuthUrlAutoRedirect: false
|
||||
|
||||
// You can put an array of values to target different entity types in the invite dialog.
|
||||
// Valid values are "phone", "room", "sip", "user", "videosipgw" and "email"
|
||||
// peopleSearchQueryTypes: ["user", "email"],
|
||||
// Directory endpoint which is called for invite dialog autocomplete
|
||||
// peopleSearchUrl: "https://myservice.com/api/people",
|
||||
// Endpoint which is called to send invitation requests
|
||||
// inviteServiceUrl: "https://myservice.com/api/invite",
|
||||
|
||||
// For external entities (e. g. email), the localStorage key holding the token value for directory authentication
|
||||
// peopleSearchTokenLocation: "mytoken",
|
||||
|
||||
|
||||
// Options related to visitors.
|
||||
// visitors: {
|
||||
// // Starts audio/video when the participant is promoted from visitor.
|
||||
// enableMediaOnPromote: {
|
||||
// audio: true,
|
||||
// video: true
|
||||
// },
|
||||
// },
|
||||
// The default type of desktop sharing sources that will be used in the electron app.
|
||||
// desktopSharingSources: ['screen', 'window'],
|
||||
|
||||
// Disables the echo cancelation for local audio tracks.
|
||||
// disableAEC: true,
|
||||
|
||||
// Disables the auto gain control for local audio tracks.
|
||||
// disableAGC: true,
|
||||
|
||||
// Disables the audio processing (echo cancelation, auto gain control and noise suppression) for local audio tracks.
|
||||
// disableAP: true,
|
||||
|
||||
// Disables the anoise suppression for local audio tracks.
|
||||
// disableNS: true,
|
||||
|
||||
// Replaces the display name with the JID of the participants.
|
||||
// displayJids: true,
|
||||
|
||||
// Enables disables talk while muted detection.
|
||||
// enableTalkWhileMuted: true,
|
||||
|
||||
// Sets the peer connection ICE transport policy to "relay".
|
||||
// forceTurnRelay: true,
|
||||
|
||||
// List of undocumented settings used in jitsi-meet
|
||||
/**
|
||||
_immediateReloadThreshold
|
||||
debug
|
||||
debugAudioLevels
|
||||
deploymentInfo
|
||||
dialOutAuthUrl
|
||||
dialOutCodesUrl
|
||||
dialOutRegionUrl
|
||||
disableRemoteControl
|
||||
displayJids
|
||||
firefox_fake_device
|
||||
googleApiApplicationClientID
|
||||
iAmRecorder
|
||||
iAmSipGateway
|
||||
microsoftApiApplicationClientID
|
||||
peopleSearchQueryTypes
|
||||
peopleSearchUrl
|
||||
requireDisplayName
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -1583,14 +1638,7 @@ var config = {
|
||||
_peerConnStatusRtcMuteTimeout
|
||||
avgRtpStatsN
|
||||
desktopSharingSources
|
||||
disableAEC
|
||||
disableAGC
|
||||
disableAP
|
||||
disableHPF
|
||||
disableLocalStats
|
||||
disableNS
|
||||
enableTalkWhileMuted
|
||||
forceTurnRelay
|
||||
hiddenDomain
|
||||
hiddenFromRecorderFeatureEnabled
|
||||
ignoreStartMuted
|
||||
@@ -1667,7 +1715,7 @@ var config = {
|
||||
// 'notify.participantsWantToJoin', // shown when lobby is enabled and participants request to join meeting
|
||||
// 'notify.passwordRemovedRemotely', // shown when a password has been removed remotely
|
||||
// 'notify.passwordSetRemotely', // shown when a password has been set remotely
|
||||
// 'notify.raisedHand', // shown when a partcipant used raise hand,
|
||||
// 'notify.raisedHand', // shown when a participant used raise hand,
|
||||
// 'notify.screenShareNoAudio', // shown when the audio could not be shared for the selected screen
|
||||
// 'notify.screenSharingAudioOnlyTitle', // shown when the best performance has been affected by screen sharing
|
||||
// 'notify.selfViewTitle', // show "You can always un-hide the self-view from settings"
|
||||
@@ -1688,7 +1736,7 @@ var config = {
|
||||
// 'toolbar.noAudioSignalTitle', // shown when a broken mic is detected
|
||||
// 'toolbar.noisyAudioInputTitle', // shown when noise is detected for the current microphone
|
||||
// 'toolbar.talkWhileMutedPopup', // shown when user tries to speak while muted
|
||||
// 'transcribing.failedToStart', // shown when transcribing fails to start
|
||||
// 'transcribing.failed', // shown when transcribing fails
|
||||
// ],
|
||||
|
||||
// List of notifications to be disabled. Works in tandem with the above setting.
|
||||
@@ -1698,7 +1746,7 @@ var config = {
|
||||
// disableFilmstripAutohiding: false,
|
||||
|
||||
// filmstrip: {
|
||||
// // Disable the vertical/horizonal filmstrip.
|
||||
// // Disable the vertical/horizontal filmstrip.
|
||||
// disabled: false,
|
||||
// // Disables user resizable filmstrip. Also, allows configuration of the filmstrip
|
||||
// // (width, tiles aspect ratios) through the interfaceConfig options.
|
||||
@@ -1747,8 +1795,6 @@ var config = {
|
||||
// tileTime: 5000,
|
||||
// // Limit results by rating: g, pg, pg-13, r. Default value: g.
|
||||
// rating: 'pg',
|
||||
// // The proxy server url for giphy requests in the web app.
|
||||
// proxyUrl: 'https://giphy-proxy.example.com',
|
||||
// },
|
||||
|
||||
// Logging
|
||||
@@ -1759,9 +1805,10 @@ var config = {
|
||||
// //disableLogCollector: true,
|
||||
// // Individual loggers are customizable.
|
||||
// loggers: {
|
||||
// // The following are too verbose in their logging with the default level.
|
||||
// 'modules/RTC/TraceablePeerConnection.js': 'info',
|
||||
// 'modules/xmpp/strophe.util.js': 'log',
|
||||
// // The following are too verbose in their logging with the default level.
|
||||
// 'modules/RTC/TraceablePeerConnection.js': 'info',
|
||||
// 'modules/xmpp/strophe.util.js': 'log',
|
||||
// },
|
||||
// },
|
||||
|
||||
// Application logo url
|
||||
@@ -1817,13 +1864,10 @@ var config = {
|
||||
|
||||
// Hide login button on auth dialog, you may want to enable this if you are using JWT tokens to authenticate users
|
||||
// hideLoginButton: true,
|
||||
};
|
||||
|
||||
// Temporary backwards compatibility with old mobile clients.
|
||||
config.flags = config.flags || {};
|
||||
config.flags.sourceNameSignaling = true;
|
||||
config.flags.sendMultipleVideoStreams = true;
|
||||
config.flags.receiveMultipleVideoStreams = true;
|
||||
// If true remove the tint foreground on focused user camera in filmstrip
|
||||
// disableCameraTintForeground: false,
|
||||
};
|
||||
|
||||
// Set the default values for JaaS customers
|
||||
if (enableJaaS) {
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
@use './variables';
|
||||
|
||||
#chat-conversation-container {
|
||||
// extract message input height
|
||||
box-sizing: border-box;
|
||||
height: calc(100% - 64px);
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
@@ -9,7 +12,7 @@
|
||||
box-sizing: border-box;
|
||||
flex: 1;
|
||||
font-size: 10pt;
|
||||
height: 100%;
|
||||
height: calc(100% - 10px);
|
||||
line-height: 20px;
|
||||
overflow: auto;
|
||||
padding: 16px;
|
||||
@@ -19,6 +22,13 @@
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
&.focus-visible {
|
||||
outline: 0;
|
||||
margin: 4px;
|
||||
border-radius: 0 0 variables.$borderRadius variables.$borderRadius;
|
||||
box-shadow: 0px 0px 0px 2px #4687ed; // focus01/primary07
|
||||
}
|
||||
|
||||
& > :first-child {
|
||||
margin-top: auto;
|
||||
}
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
position: relative;
|
||||
overflow: auto;
|
||||
width: 100%;
|
||||
overflow-y: auto;
|
||||
flex-grow: 1;
|
||||
|
||||
.meetings-list-empty {
|
||||
text-align: center;
|
||||
@@ -19,11 +19,11 @@
|
||||
flex-direction: column;
|
||||
|
||||
.description {
|
||||
color: #2f3237;
|
||||
font-size: 14px;
|
||||
line-height: 18px;
|
||||
margin-bottom: 16px;
|
||||
max-width: 436px;
|
||||
color: #2f3237;
|
||||
font-size: 14px;
|
||||
line-height: 18px;
|
||||
margin-bottom: 16px;
|
||||
max-width: 436px;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -127,7 +127,8 @@
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
&.with-click-handler:hover {
|
||||
&.with-click-handler:hover,
|
||||
&.with-click-handler:focus {
|
||||
background-color: #c7ddff;
|
||||
}
|
||||
|
||||
@@ -155,14 +156,30 @@
|
||||
margin-right: 16px;
|
||||
position: absolute;
|
||||
|
||||
&> svg {
|
||||
&>svg {
|
||||
fill: #0074e0;
|
||||
}
|
||||
}
|
||||
|
||||
.item:hover, .item:focus, .item:focus-within {
|
||||
.item:hover,
|
||||
.item:focus,
|
||||
.item:focus-within {
|
||||
.delete-meeting {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.delete-meeting:hover {
|
||||
&>svg {
|
||||
fill: #4687ED;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1024px) { /* Targets iPads and smaller devices */
|
||||
.item {
|
||||
.delete-meeting {
|
||||
display: block !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,14 @@
|
||||
@use 'sass:math';
|
||||
|
||||
.reactions-menu {
|
||||
width: 280px;
|
||||
width: 330px;
|
||||
background: #242528;
|
||||
box-shadow: 0px 3px 16px rgba(0, 0, 0, 0.6), 0px 0px 4px 1px rgba(0, 0, 0, 0.25);
|
||||
border-radius: 6px;
|
||||
padding: 16px;
|
||||
|
||||
&.with-gif {
|
||||
width: 328px;
|
||||
width: 380px;
|
||||
|
||||
.reactions-row .toolbox-button:last-of-type {
|
||||
top: 3px;
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
.transcription-subtitles {
|
||||
bottom: $newToolbarSize + 40px;
|
||||
font-size: 16px;
|
||||
font-weight: 1000;
|
||||
left: 50%;
|
||||
max-width: 50vw;
|
||||
opacity: 0.80;
|
||||
overflow-wrap: break-word;
|
||||
pointer-events: none;
|
||||
position: absolute;
|
||||
text-shadow: 0px 0px 1px rgba(0,0,0,0.3),
|
||||
0px 1px 1px rgba(0,0,0,0.3),
|
||||
1px 0px 1px rgba(0,0,0,0.3),
|
||||
0px 0px 1px rgba(0,0,0,0.3);
|
||||
transform: translateX(-50%);
|
||||
z-index: 7;
|
||||
|
||||
&.lifted {
|
||||
// Lift subtitle above toolbar+dominant speaker box.
|
||||
bottom: $newToolbarSize + 36px + 40px;
|
||||
}
|
||||
|
||||
span {
|
||||
background: black;
|
||||
}
|
||||
}
|
||||
@@ -75,9 +75,12 @@ $welcomePageHeaderBackground: linear-gradient(0deg, rgba(0, 0, 0, 0.2), rgba(0,
|
||||
$welcomePageHeaderBackgroundPosition: center;
|
||||
$welcomePageHeaderBackgroundRepeat: none;
|
||||
$welcomePageHeaderBackgroundSize: cover;
|
||||
$welcomePageHeaderPaddingBottom: 15px;
|
||||
$welcomePageHeaderPadding: 1rem;
|
||||
$welcomePageHeaderTitleMaxWidth: initial;
|
||||
$welcomePageHeaderTextAlign: center;
|
||||
$welcomePageButtonBg: #0074E0;
|
||||
$welcomePageButtonHoverBg: #4687ED;
|
||||
$welcomePageButtonFocusOutline: #00225A;
|
||||
|
||||
$welcomePageHeaderContainerMarginTop: 104px;
|
||||
$welcomePageHeaderContainerDisplay: flex;
|
||||
|
||||
@@ -18,7 +18,7 @@ body.welcome-page {
|
||||
background-position: $welcomePageHeaderBackgroundPosition;
|
||||
background-repeat: $welcomePageHeaderBackgroundRepeat;
|
||||
background-size: $welcomePageHeaderBackgroundSize;
|
||||
padding-bottom: $welcomePageHeaderPaddingBottom;
|
||||
padding: $welcomePageHeaderPadding;
|
||||
background-color: #131519;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
@@ -219,14 +219,18 @@ body.welcome-page {
|
||||
.welcome-page-button {
|
||||
border: 0;
|
||||
font-size: 14px;
|
||||
background: #0074E0;
|
||||
background: $welcomePageButtonBg;
|
||||
border-radius: 3px;
|
||||
color: #FFFFFF;
|
||||
cursor: pointer;
|
||||
padding: 16px 20px;
|
||||
|
||||
transition: all 0.2s;
|
||||
&:focus-within {
|
||||
outline: auto 2px #022e61;
|
||||
outline: auto 2px $welcomePageButtonFocusOutline;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background-color: $welcomePageButtonHoverBg;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -264,8 +268,7 @@ body.welcome-page {
|
||||
|
||||
&.without-content {
|
||||
.welcome-card {
|
||||
min-width: 500px;
|
||||
max-width: 580px;
|
||||
max-width: 100dvw;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -18,8 +18,7 @@
|
||||
*/
|
||||
#dominantSpeaker,
|
||||
#largeVideoElementsContainer,
|
||||
#sharedVideo,
|
||||
.stage-participant-label {
|
||||
#sharedVideo {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
@@ -61,7 +61,6 @@ $flagsImagePath: "../images/";
|
||||
@import 'filmstrip/vertical_filmstrip_overrides';
|
||||
@import 'unsupported-browser/main';
|
||||
@import 'deep-linking/main';
|
||||
@import 'transcription-subtitles';
|
||||
@import '_meetings_list.scss';
|
||||
@import 'navigate_section_list';
|
||||
@import 'third-party-branding/google';
|
||||
|
||||
3
debian/control
vendored
3
debian/control
vendored
@@ -20,7 +20,8 @@ Description: WebRTC JavaScript video conferences
|
||||
|
||||
Package: jitsi-meet-web-config
|
||||
Architecture: all
|
||||
Depends: openssl, nginx | nginx-full | nginx-extras | openresty | apache2, curl
|
||||
Pre-Depends: nginx | nginx-full | nginx-extras | openresty | apache2
|
||||
Depends: openssl, curl
|
||||
Description: Configuration for web serving of Jitsi Meet
|
||||
Jitsi Meet is a WebRTC JavaScript application that uses Jitsi
|
||||
Videobridge to provide high quality, scalable video conferences.
|
||||
|
||||
3
debian/jitsi-meet-prosody.postinst
vendored
3
debian/jitsi-meet-prosody.postinst
vendored
@@ -252,9 +252,10 @@ case "$1" in
|
||||
if [ "$PROSODY_CONFIG_PRESENT" = "false" ]; then
|
||||
invoke-rc.d prosody restart || true
|
||||
|
||||
# In case we had updated the certificates and restarted prosody, let's restart and the bridge if possible
|
||||
# In case we had updated the certificates and restarted prosody, let's restart and the bridge and jicofo if possible
|
||||
if [ -d /run/systemd/system ] && [ "$CERT_ADDED_TO_TRUST" = "true" ]; then
|
||||
systemctl restart jitsi-videobridge2.service >/dev/null || true
|
||||
systemctl restart jicofo.service >/dev/null || true
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
|
||||
16
debian/jitsi-meet-web-config.postinst
vendored
16
debian/jitsi-meet-web-config.postinst
vendored
@@ -175,22 +175,6 @@ case "$1" in
|
||||
fi
|
||||
fi
|
||||
|
||||
# Fixes multi-stream flags to workaround problem with mobile joining a multi-stream call with multi-stream disabled
|
||||
FIX_MSG="// Temporary backwards compatibility with old mobile clients."
|
||||
if ! grep -q "^${FIX_MSG}" $JITSI_MEET_CONFIG; then
|
||||
echo $FIX_MSG >> $JITSI_MEET_CONFIG
|
||||
echo "config.flags = config.flags || {};" >> $JITSI_MEET_CONFIG
|
||||
fi
|
||||
if ! grep -q "^config.flags.sourceNameSignaling*" $JITSI_MEET_CONFIG; then
|
||||
echo "config.flags.sourceNameSignaling = true;" >> $JITSI_MEET_CONFIG
|
||||
fi
|
||||
if ! grep -q "^config.flags.sendMultipleVideoStreams*" $JITSI_MEET_CONFIG; then
|
||||
echo "config.flags.sendMultipleVideoStreams = true;" >> $JITSI_MEET_CONFIG
|
||||
fi
|
||||
if ! grep -q "^config.flags.receiveMultipleVideoStreams*" $JITSI_MEET_CONFIG; then
|
||||
echo "config.flags.receiveMultipleVideoStreams = true;" >> $JITSI_MEET_CONFIG
|
||||
fi
|
||||
|
||||
if [[ "$FORCE_OPENRESTY" = "true" ]]; then
|
||||
NGX_COMMON_CONF_PATH="/usr/local/openresty/nginx/conf/$JVB_HOSTNAME.conf"
|
||||
NGX_SVC_NAME=openresty
|
||||
|
||||
@@ -119,8 +119,10 @@ Component "internal.auth.jitmeet.example.com" "muc"
|
||||
VirtualHost "auth.jitmeet.example.com"
|
||||
modules_enabled = {
|
||||
"limits_exception";
|
||||
"smacks";
|
||||
}
|
||||
authentication = "internal_hashed"
|
||||
smacks_hibernation_time = 15;
|
||||
|
||||
-- Proxy to jicofo's user JID, so that it doesn't have to register as a component.
|
||||
Component "focus.jitmeet.example.com" "client_proxy"
|
||||
|
||||
@@ -154,6 +154,8 @@ server {
|
||||
proxy_pass http://127.0.0.1:8888/conference-request/v1$1;
|
||||
add_header "Cache-Control" "no-cache, no-store";
|
||||
add_header 'Access-Control-Allow-Origin' '*';
|
||||
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
|
||||
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Content-Type';
|
||||
}
|
||||
location ~ ^/([^/?&:'"]+)/conference-request/v1(\/.*)?$ {
|
||||
rewrite ^/([^/?&:'"]+)/conference-request/v1(\/.*)?$ /conference-request/v1$2;
|
||||
|
||||
1
globals.d.ts
vendored
1
globals.d.ts
vendored
@@ -18,7 +18,6 @@ declare global {
|
||||
JITSI_MEET_LITE_SDK?: boolean;
|
||||
interfaceConfig?: any;
|
||||
JitsiMeetJS?: any;
|
||||
JitsiMeetElectron?: any;
|
||||
PressureObserver?: any;
|
||||
PressureRecord?: any;
|
||||
ReactNativeWebView?: any;
|
||||
|
||||
1
globals.native.d.ts
vendored
1
globals.native.d.ts
vendored
@@ -40,6 +40,7 @@ interface IWindow {
|
||||
|
||||
interface INavigator {
|
||||
product: string;
|
||||
userAgent: string;
|
||||
}
|
||||
|
||||
declare global {
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 2.7 KiB |
@@ -69,6 +69,11 @@
|
||||
|
||||
window.indexLoadedTime = window.performance.now();
|
||||
console.log("(TIME) index.html loaded:\t", indexLoadedTime);
|
||||
window.addEventListener('load', function() {
|
||||
window.loadedEventTime = window.performance.now();
|
||||
console.log("(TIME) window loaded event:\t", loadedEventTime);
|
||||
});
|
||||
|
||||
// XXX the code below listeners for errors and displays an error message
|
||||
// in the document body when any of the required files fails to load.
|
||||
// The intention is to prevent from displaying broken page.
|
||||
|
||||
@@ -41,14 +41,6 @@ var interfaceConfig = {
|
||||
*/
|
||||
DISABLE_PRESENCE_STATUS: false,
|
||||
|
||||
/**
|
||||
* Whether the ringing sound in the call/ring overlay is disabled. If
|
||||
* {@code undefined}, defaults to {@code false}.
|
||||
*
|
||||
* @type {boolean}
|
||||
*/
|
||||
DISABLE_RINGING: false,
|
||||
|
||||
/**
|
||||
* Whether the speech to text transcription subtitles panel is disabled.
|
||||
* If {@code undefined}, defaults to {@code false}.
|
||||
@@ -70,9 +62,6 @@ var interfaceConfig = {
|
||||
|
||||
ENABLE_DIAL_OUT: true,
|
||||
|
||||
// DEPRECATED. Animation no longer supported.
|
||||
// ENABLE_FEEDBACK_ANIMATION: false,
|
||||
|
||||
FILM_STRIP_MAX_HEIGHT: 120,
|
||||
|
||||
GENERATE_ROOMNAMES_ON_WELCOME_PAGE: true,
|
||||
@@ -227,7 +216,7 @@ var interfaceConfig = {
|
||||
/**
|
||||
* Specify custom URL for downloading f droid app.
|
||||
*/
|
||||
// MOBILE_DOWNLOAD_LINK_F_DROID: 'https://f-droid.org/en/packages/org.jitsi.meet/',
|
||||
// MOBILE_DOWNLOAD_LINK_F_DROID: 'https://f-droid.org/packages/org.jitsi.meet/',
|
||||
|
||||
// Connection indicators (
|
||||
// CONNECTION_INDICATOR_AUTO_HIDE_ENABLED,
|
||||
|
||||
@@ -1,2 +1,6 @@
|
||||
THIS_DIR=$(cd -P "$(dirname "$(readlink "${BASH_SOURCE[0]}" || echo "${BASH_SOURCE[0]}")")" && pwd)
|
||||
|
||||
. ${THIS_DIR}/../node_modules/react-native/scripts/find-node-for-xcode.sh
|
||||
|
||||
export NODE_BINARY=$(command -v node)
|
||||
export ENTRY_FILE="${PROJECT_DIR}/../../index.ios.js"
|
||||
|
||||
@@ -5,7 +5,7 @@ require Pod::Executable.execute_command('node', ['-p',
|
||||
{paths: [process.argv[1]]},
|
||||
)', __dir__]).strip
|
||||
|
||||
platform :ios, '13.4'
|
||||
platform :ios, '15.1'
|
||||
workspace 'jitsi-meet'
|
||||
|
||||
install! 'cocoapods', :deterministic_uuids => false
|
||||
@@ -32,7 +32,7 @@ target 'JitsiMeetSDK' do
|
||||
flags = get_default_flags()
|
||||
use_react_native!(
|
||||
:path => config[:reactNativePath],
|
||||
:hermes_enabled => false,
|
||||
:hermes_enabled => true,
|
||||
:fabric_enabled => false,
|
||||
# An absolute path to your application root.
|
||||
:app_path => "#{Pod::Config.instance.installation_root}/.."
|
||||
@@ -65,7 +65,7 @@ target 'JitsiMeetSDKLite' do
|
||||
config = use_native_modules!
|
||||
use_react_native!(
|
||||
:path => config[:reactNativePath],
|
||||
:hermes_enabled => false,
|
||||
:hermes_enabled => true,
|
||||
:fabric_enabled => false,
|
||||
# An absolute path to your application root.
|
||||
:app_path => "#{Pod::Config.instance.installation_root}/.."
|
||||
@@ -90,9 +90,10 @@ post_install do |installer|
|
||||
config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
|
||||
end
|
||||
end
|
||||
|
||||
target.build_configurations.each do |config|
|
||||
config.build_settings['SUPPORTS_MACCATALYST'] = 'NO'
|
||||
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.4'
|
||||
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.1'
|
||||
config.build_settings['OTHER_SWIFT_FLAGS'] = '$(inherited) -no-verify-emitted-module-interface'
|
||||
end
|
||||
end
|
||||
|
||||
2045
ios/Podfile.lock
2045
ios/Podfile.lock
File diff suppressed because it is too large
Load Diff
@@ -17,6 +17,8 @@
|
||||
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
|
||||
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||
<array>
|
||||
<string>1C8F.1</string>
|
||||
<string>C56D.1</string>
|
||||
<string>CA92.1</string>
|
||||
</array>
|
||||
</dict>
|
||||
@@ -3,7 +3,7 @@
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 54;
|
||||
objectVersion = 60;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
@@ -24,6 +24,9 @@
|
||||
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
|
||||
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
|
||||
2681BB562C7A0B42CFBA6719 /* libPods-JitsiMeet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D6152FF9E9F7B0E86F70A21D /* libPods-JitsiMeet.a */; };
|
||||
361974E2A13624D7735D619D /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 5C1BE20ECD5DEEB48FED90B5 /* PrivacyInfo.xcprivacy */; };
|
||||
4341A9062CF0D63200940D93 /* hermes.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4341A9052CF0D63200940D93 /* hermes.xcframework */; };
|
||||
4341A9072CF0D63200940D93 /* hermes.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 4341A9052CF0D63200940D93 /* hermes.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||
4E90F9402632D1AB001102D4 /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E90F93F2632D1AB001102D4 /* Atomic.swift */; };
|
||||
4EB06024260E026600F524C5 /* ReplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4EC49B8625BED71300E76218 /* ReplayKit.framework */; };
|
||||
4EB06027260E026600F524C5 /* SampleHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB06026260E026600F524C5 /* SampleHandler.swift */; };
|
||||
@@ -74,6 +77,7 @@
|
||||
dstSubfolderSpec = 10;
|
||||
files = (
|
||||
DEA9F28A258A6EA800D4CD74 /* JitsiMeetSDK.framework in Embed Frameworks */,
|
||||
4341A9072CF0D63200940D93 /* hermes.xcframework in Embed Frameworks */,
|
||||
FD572B9927EDF32300A800FB /* GiphyUISDK.xcframework in Embed Frameworks */,
|
||||
DED016F228ECBC9D009D5E8D /* WebRTC.xcframework in Embed Frameworks */,
|
||||
);
|
||||
@@ -142,6 +146,7 @@
|
||||
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
||||
3E0F4ED943C0B12BE77F6B45 /* Pods-JitsiMeet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet.release.xcconfig"; path = "Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet.release.xcconfig"; sourceTree = "<group>"; };
|
||||
4341A9052CF0D63200940D93 /* hermes.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = hermes.xcframework; path = "../Pods/hermes-engine/destroot/Library/Frameworks/universal/hermes.xcframework"; sourceTree = "<group>"; };
|
||||
4E90F93F2632D1AB001102D4 /* Atomic.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Atomic.swift; sourceTree = "<group>"; };
|
||||
4EB06023260E026600F524C5 /* JitsiMeetBroadcastExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = JitsiMeetBroadcastExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
4EB06026260E026600F524C5 /* SampleHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleHandler.swift; sourceTree = "<group>"; };
|
||||
@@ -151,7 +156,7 @@
|
||||
4EB0603A260E09D000F524C5 /* DarwinNotificationCenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DarwinNotificationCenter.swift; sourceTree = "<group>"; };
|
||||
4EB0603B260E09D000F524C5 /* SampleUploader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SampleUploader.swift; sourceTree = "<group>"; };
|
||||
4EC49B8625BED71300E76218 /* ReplayKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReplayKit.framework; path = System/Library/Frameworks/ReplayKit.framework; sourceTree = SDKROOT; };
|
||||
6132EF172BDFF13200BBE14D /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = PrivacyInfo.xcprivacy; path = ../PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
|
||||
5C1BE20ECD5DEEB48FED90B5 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
|
||||
756FCE06C08D9B947653C98A /* Pods-JitsiMeet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet.debug.xcconfig"; path = "Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
B3B083EB1D4955FF0069CEE7 /* app.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = app.entitlements; sourceTree = "<group>"; };
|
||||
D6152FF9E9F7B0E86F70A21D /* libPods-JitsiMeet.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-JitsiMeet.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
@@ -163,7 +168,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>"; };
|
||||
FD572B9727EDF32300A800FB /* GiphyUISDK.xcframework */ = {isa = PBXFileReference; expectedSignature = "AppleDeveloperProgram:925PGC4MV7:Giphy, Inc."; lastKnownFileType = wrapper.xcframework; name = GiphyUISDK.xcframework; path = ../Pods/Giphy/GiphySDK/GiphyUISDK.xcframework; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@@ -182,6 +187,7 @@
|
||||
DEA9F289258A6EA800D4CD74 /* JitsiMeetSDK.framework in Frameworks */,
|
||||
FD572B9827EDF32300A800FB /* GiphyUISDK.xcframework in Frameworks */,
|
||||
2681BB562C7A0B42CFBA6719 /* libPods-JitsiMeet.a in Frameworks */,
|
||||
4341A9062CF0D63200940D93 /* hermes.xcframework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -206,6 +212,7 @@
|
||||
0B26BE711EC5BC4D00EEFB41 /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4341A9052CF0D63200940D93 /* hermes.xcframework */,
|
||||
DED016F028ECBC9D009D5E8D /* WebRTC.xcframework */,
|
||||
FD572B9727EDF32300A800FB /* GiphyUISDK.xcframework */,
|
||||
DEA9F288258A6EA800D4CD74 /* JitsiMeetSDK.framework */,
|
||||
@@ -294,7 +301,7 @@
|
||||
0BEA5C351F7B8F73000D0AB4 /* WatchKit extension */,
|
||||
4EB06025260E026600F524C5 /* JitsiMeetBroadcast Extension */,
|
||||
CDD71F5E1157E9F283DF92A8 /* Pods */,
|
||||
6132EF172BDFF13200BBE14D /* PrivacyInfo.xcprivacy */,
|
||||
5C1BE20ECD5DEEB48FED90B5 /* PrivacyInfo.xcprivacy */,
|
||||
);
|
||||
indentWidth = 2;
|
||||
sourceTree = "<group>";
|
||||
@@ -486,6 +493,7 @@
|
||||
0B412F211EDEE95300B1A0A6 /* Main.storyboard in Resources */,
|
||||
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
|
||||
13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */,
|
||||
361974E2A13624D7735D619D /* PrivacyInfo.xcprivacy in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -506,7 +514,7 @@
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
"$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH",
|
||||
$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH,
|
||||
);
|
||||
name = "Adjust ATS";
|
||||
outputPaths = (
|
||||
@@ -539,7 +547,7 @@
|
||||
inputFileListPaths = (
|
||||
);
|
||||
inputPaths = (
|
||||
"$PROJECT_DIR/app.entitlements",
|
||||
$PROJECT_DIR/app.entitlements,
|
||||
);
|
||||
name = "Update App Entitlements";
|
||||
outputFileListPaths = (
|
||||
@@ -581,7 +589,7 @@
|
||||
inputFileListPaths = (
|
||||
);
|
||||
inputPaths = (
|
||||
"$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH",
|
||||
$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH,
|
||||
);
|
||||
name = "Setup Google reverse URL handler";
|
||||
outputFileListPaths = (
|
||||
@@ -601,7 +609,7 @@
|
||||
inputFileListPaths = (
|
||||
);
|
||||
inputPaths = (
|
||||
"$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH",
|
||||
$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH,
|
||||
);
|
||||
name = "Setup Dropbox";
|
||||
outputFileListPaths = (
|
||||
@@ -858,7 +866,6 @@
|
||||
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";
|
||||
@@ -880,6 +887,11 @@
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.meet;
|
||||
PRODUCT_NAME = "jitsi-meet";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
@@ -888,7 +900,6 @@
|
||||
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";
|
||||
@@ -909,6 +920,11 @@
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.meet;
|
||||
PRODUCT_NAME = "jitsi-meet";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
@@ -940,6 +956,10 @@
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.meet.broadcast.extension;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
@@ -975,6 +995,10 @@
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.meet.broadcast.extension;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
@@ -985,6 +1009,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CC = "";
|
||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
@@ -1011,6 +1036,7 @@
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CXX = "";
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
|
||||
@@ -1034,7 +1060,9 @@
|
||||
"$(inherited)",
|
||||
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
|
||||
);
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.1;
|
||||
LD = "";
|
||||
LDPLUSPLUS = "";
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
OTHER_CFLAGS = "$(inherited)";
|
||||
@@ -1042,8 +1070,9 @@
|
||||
OTHER_LDFLAGS = "$(inherited)";
|
||||
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG";
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
USE_HERMES = false;
|
||||
USE_HERMES = true;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
@@ -1051,6 +1080,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CC = "";
|
||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
@@ -1077,6 +1107,7 @@
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = YES;
|
||||
CXX = "";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
|
||||
@@ -1096,7 +1127,9 @@
|
||||
"$(inherited)",
|
||||
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
|
||||
);
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.1;
|
||||
LD = "";
|
||||
LDPLUSPLUS = "";
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
OTHER_CFLAGS = "$(inherited)";
|
||||
OTHER_CPLUSPLUSFLAGS = "$(inherited)";
|
||||
@@ -1105,7 +1138,7 @@
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
USE_HERMES = false;
|
||||
USE_HERMES = true;
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Release;
|
||||
|
||||
@@ -29,11 +29,19 @@
|
||||
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
|
||||
JitsiMeet *jitsiMeet = [JitsiMeet sharedInstance];
|
||||
|
||||
#if 0
|
||||
jitsiMeet.webRtcLoggingSeverity = WebRTCLoggingSeverityVerbose;
|
||||
#endif
|
||||
|
||||
jitsiMeet.conferenceActivityType = JitsiMeetConferenceActivityType;
|
||||
jitsiMeet.customUrlScheme = @"org.jitsi.meet";
|
||||
jitsiMeet.universalLinkDomains = @[@"meet.jit.si", @"alpha.jitsi.net", @"beta.meet.jit.si"];
|
||||
|
||||
jitsiMeet.defaultConferenceOptions = [JitsiMeetConferenceOptions fromBuilder:^(JitsiMeetConferenceOptionsBuilder *builder) {
|
||||
|
||||
// For testing configOverrides a room needs to be set
|
||||
// builder.room = @"https://meet.jit.si/test0988test";
|
||||
|
||||
[builder setFeatureFlag:@"welcomepage.enabled" withBoolean:YES];
|
||||
[builder setFeatureFlag:@"ios.screensharing.enabled" withBoolean:YES];
|
||||
[builder setFeatureFlag:@"ios.recording.enabled" withBoolean:YES];
|
||||
|
||||
@@ -88,8 +88,8 @@
|
||||
[self _onJitsiMeetViewDelegateEvent:@"CONFERENCE_WILL_JOIN" withData:data];
|
||||
}
|
||||
|
||||
// - (void)customOverflowMenuButtonPressed:(NSDictionary *)data {
|
||||
// [self _onJitsiMeetViewDelegateEvent:@"CUSTOM_OVERFLOW_MENU_BUTTON_PRESSED" withData:data];
|
||||
// - (void)customButtonPressed:(NSDictionary *)data {
|
||||
// [self _onJitsiMeetViewDelegateEvent:@"CUSTOM_BUTTON_PRESSED" withData:data];
|
||||
// }
|
||||
|
||||
#if 0
|
||||
|
||||
@@ -69,7 +69,7 @@ platform :ios do
|
||||
end
|
||||
)
|
||||
|
||||
# Inrement the build number by 1
|
||||
# Increment the build number by 1
|
||||
increment_build_number(
|
||||
build_number: Time.now.to_i,
|
||||
xcodeproj: "app/app.xcodeproj"
|
||||
|
||||
@@ -1,14 +1,12 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e -u
|
||||
set -e -u -x
|
||||
|
||||
THIS_DIR=$(cd -P "$(dirname "$(readlink "${BASH_SOURCE[0]}" || echo "${BASH_SOURCE[0]}")")" && pwd)
|
||||
PROJECT_REPO=$(realpath ${THIS_DIR}/../..)
|
||||
RELEASE_REPO=$(realpath ${THIS_DIR}/../../../jitsi-meet-ios-sdk-releases)
|
||||
DEFAULT_SDK_VERSION=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" ${THIS_DIR}/../sdk/src/Lite-Info.plist)
|
||||
SDK_VERSION=${OVERRIDE_SDK_VERSION:-${DEFAULT_SDK_VERSION}}
|
||||
DO_GIT_TAG=${GIT_TAG:-0}
|
||||
|
||||
|
||||
echo "Releasing Jitsi Meet SDK Lite ${SDK_VERSION}"
|
||||
|
||||
@@ -50,22 +48,18 @@ xcodebuild -create-xcframework \
|
||||
-framework ios/sdk/out/ios-device.xcarchive/Products/Library/Frameworks/JitsiMeetSDK.framework \
|
||||
-framework ios/sdk/out/ios-simulator.xcarchive/Products/Library/Frameworks/JitsiMeetSDK.framework \
|
||||
-output ios/sdk/out/JitsiMeetSDK.xcframework
|
||||
if [[ $DO_GIT_TAG == 1 ]]; then
|
||||
git tag ios-sdk-lite-${SDK_VERSION}
|
||||
fi
|
||||
popd
|
||||
|
||||
pushd ${RELEASE_REPO}
|
||||
|
||||
# Put the new files in the repo
|
||||
cp -a ${PROJECT_REPO}/ios/sdk/out/JitsiMeetSDK.xcframework lite/Frameworks/
|
||||
cp -a ${PROJECT_REPO}/ios/Pods/hermes-engine/destroot/Library/Frameworks/universal/hermes.xcframework lite/Frameworks/
|
||||
|
||||
# Add all files to git
|
||||
if [[ $DO_GIT_TAG == 1 ]]; then
|
||||
git add -A .
|
||||
git commit -m "${SDK_VERSION} lite"
|
||||
git tag "${SDK_VERSION}-lite"
|
||||
fi
|
||||
git add -A .
|
||||
git commit --allow-empty -m "${SDK_VERSION} lite"
|
||||
git tag "${SDK_VERSION}-lite"
|
||||
|
||||
popd
|
||||
|
||||
|
||||
@@ -1,14 +1,12 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e -u
|
||||
set -e -u -x
|
||||
|
||||
THIS_DIR=$(cd -P "$(dirname "$(readlink "${BASH_SOURCE[0]}" || echo "${BASH_SOURCE[0]}")")" && pwd)
|
||||
PROJECT_REPO=$(realpath ${THIS_DIR}/../..)
|
||||
RELEASE_REPO=$(realpath ${THIS_DIR}/../../../jitsi-meet-ios-sdk-releases)
|
||||
DEFAULT_SDK_VERSION=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" ${THIS_DIR}/../sdk/src/Info.plist)
|
||||
SDK_VERSION=${OVERRIDE_SDK_VERSION:-${DEFAULT_SDK_VERSION}}
|
||||
DO_GIT_TAG=${GIT_TAG:-0}
|
||||
|
||||
|
||||
echo "Releasing Jitsi Meet SDK ${SDK_VERSION}"
|
||||
|
||||
@@ -50,22 +48,18 @@ xcodebuild -create-xcframework \
|
||||
-framework ios/sdk/out/ios-device.xcarchive/Products/Library/Frameworks/JitsiMeetSDK.framework \
|
||||
-framework ios/sdk/out/ios-simulator.xcarchive/Products/Library/Frameworks/JitsiMeetSDK.framework \
|
||||
-output ios/sdk/out/JitsiMeetSDK.xcframework
|
||||
if [[ $DO_GIT_TAG == 1 ]]; then
|
||||
git tag ios-sdk-${SDK_VERSION}
|
||||
fi
|
||||
popd
|
||||
|
||||
pushd ${RELEASE_REPO}
|
||||
|
||||
# Put the new files in the repo
|
||||
cp -a ${PROJECT_REPO}/ios/sdk/out/JitsiMeetSDK.xcframework Frameworks/
|
||||
cp -a ${PROJECT_REPO}/ios/Pods/hermes-engine/destroot/Library/Frameworks/universal/hermes.xcframework Frameworks/
|
||||
|
||||
# Add all files to git
|
||||
if [[ $DO_GIT_TAG == 1 ]]; then
|
||||
git add -A .
|
||||
git commit -m "${SDK_VERSION}"
|
||||
git tag ${SDK_VERSION}
|
||||
fi
|
||||
git add -A .
|
||||
git commit --allow-empty -m "${SDK_VERSION}"
|
||||
git tag "${SDK_VERSION}"
|
||||
|
||||
popd
|
||||
|
||||
|
||||
@@ -2,4 +2,4 @@
|
||||
|
||||
THIS_DIR=$(cd -P "$(dirname "$(readlink "${BASH_SOURCE[0]}" || echo "${BASH_SOURCE[0]}")")" && pwd)
|
||||
|
||||
exec ${THIS_DIR}/../../node_modules/react-native/scripts/launchPackager.command --reset-cache
|
||||
exec ${THIS_DIR}/../../node_modules/react-native/scripts/packager.sh --reset-cache
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 46;
|
||||
objectVersion = 54;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
@@ -145,7 +145,6 @@
|
||||
4ED4FFF12721B9B90074E620 /* JitsiAudioSession.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JitsiAudioSession.h; sourceTree = "<group>"; };
|
||||
4ED4FFF22721B9B90074E620 /* JitsiAudioSession.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = JitsiAudioSession.m; sourceTree = "<group>"; };
|
||||
4ED4FFF52721BAE10074E620 /* JitsiAudioSession+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "JitsiAudioSession+Private.h"; sourceTree = "<group>"; };
|
||||
6132EF172BDFF13200BBE14D /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = PrivacyInfo.xcprivacy; path = ../PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
|
||||
86389F55993FAAF6AEB3FA3E /* Pods-JitsiMeetSDKLite.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeetSDKLite.release.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeetSDKLite/Pods-JitsiMeetSDKLite.release.xcconfig"; sourceTree = "<group>"; };
|
||||
891FE43DAD30BC8976683100 /* Pods-JitsiMeetSDK.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeetSDK.release.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeetSDK/Pods-JitsiMeetSDK.release.xcconfig"; sourceTree = "<group>"; };
|
||||
8F48C340DE0D91D1012976C5 /* Pods-JitsiMeetSDKLite.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeetSDKLite.debug.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeetSDKLite/Pods-JitsiMeetSDKLite.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
@@ -231,7 +230,6 @@
|
||||
0BD906E61EC0C00300C8C18E /* Products */,
|
||||
0BCA49681EC4BBE500B793EE /* Resources */,
|
||||
0BD906E71EC0C00300C8C18E /* src */,
|
||||
6132EF172BDFF13200BBE14D /* PrivacyInfo.xcprivacy */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
@@ -727,6 +725,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CC = "";
|
||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
@@ -757,6 +756,7 @@
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
CXX = "";
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
@@ -776,7 +776,9 @@
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.1;
|
||||
LD = "";
|
||||
LDPLUSPLUS = "";
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
OTHER_CFLAGS = "$(inherited)";
|
||||
@@ -784,8 +786,9 @@
|
||||
OTHER_LDFLAGS = "$(inherited)";
|
||||
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG";
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
USE_HERMES = false;
|
||||
USE_HERMES = true;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
@@ -795,6 +798,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CC = "";
|
||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
@@ -825,6 +829,7 @@
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
CXX = "";
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
@@ -841,7 +846,9 @@
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.1;
|
||||
LD = "";
|
||||
LDPLUSPLUS = "";
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
OTHER_CFLAGS = "$(inherited)";
|
||||
OTHER_CPLUSPLUSFLAGS = "$(inherited)";
|
||||
@@ -850,7 +857,7 @@
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
USE_HERMES = false;
|
||||
USE_HERMES = true;
|
||||
VALIDATE_PRODUCT = YES;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
@@ -862,7 +869,6 @@
|
||||
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*]" = "";
|
||||
@@ -873,16 +879,24 @@
|
||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
|
||||
INFOPLIST_FILE = src/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
"@loader_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.JitsiMeetSDK.ios;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SKIP_INSTALL = YES;
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_INSTALL_OBJC_HEADER = NO;
|
||||
SWIFT_OBJC_INTERFACE_HEADER_NAME = "";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
@@ -891,7 +905,6 @@
|
||||
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*]" = "";
|
||||
@@ -902,15 +915,23 @@
|
||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
|
||||
INFOPLIST_FILE = src/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
"@loader_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.JitsiMeetSDK.ios;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SKIP_INSTALL = YES;
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_INSTALL_OBJC_HEADER = NO;
|
||||
SWIFT_OBJC_INTERFACE_HEADER_NAME = "";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
@@ -919,7 +940,6 @@
|
||||
baseConfigurationReference = 8F48C340DE0D91D1012976C5 /* Pods-JitsiMeetSDKLite.debug.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
|
||||
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_IDENTITY = "";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
|
||||
@@ -935,16 +955,24 @@
|
||||
"JITSI_MEET_SDK_LITE=1",
|
||||
);
|
||||
INFOPLIST_FILE = "src/Lite-Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
"@loader_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.JitsiMeetSDK.ios;
|
||||
PRODUCT_NAME = JitsiMeetSDK;
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SKIP_INSTALL = YES;
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_INSTALL_OBJC_HEADER = NO;
|
||||
SWIFT_OBJC_INTERFACE_HEADER_NAME = "";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
@@ -953,7 +981,6 @@
|
||||
baseConfigurationReference = 86389F55993FAAF6AEB3FA3E /* Pods-JitsiMeetSDKLite.release.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
|
||||
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_IDENTITY = "";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
|
||||
@@ -969,15 +996,23 @@
|
||||
JITSI_MEET_SDK_LITE,
|
||||
);
|
||||
INFOPLIST_FILE = "src/Lite-Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
"@loader_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.JitsiMeetSDK.ios;
|
||||
PRODUCT_NAME = JitsiMeetSDK;
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SKIP_INSTALL = YES;
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_INSTALL_OBJC_HEADER = NO;
|
||||
SWIFT_OBJC_INTERFACE_HEADER_NAME = "";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#import <WebRTC/WebRTC.h>
|
||||
|
||||
#import "JitsiAudioSession+Private.h"
|
||||
#import "callkit/JMCallKitProxy.h"
|
||||
|
||||
|
||||
// Audio mode
|
||||
@@ -54,6 +55,7 @@ static NSString * const kDeviceTypeUnknown = @"UNKNOWN";
|
||||
RTCAudioSessionConfiguration *audioCallConfig;
|
||||
RTCAudioSessionConfiguration *videoCallConfig;
|
||||
RTCAudioSessionConfiguration *earpieceConfig;
|
||||
BOOL audioDisabled;
|
||||
BOOL forceSpeaker;
|
||||
BOOL forceEarpiece;
|
||||
BOOL isSpeakerOn;
|
||||
@@ -146,9 +148,36 @@ RCT_EXPORT_MODULE();
|
||||
|
||||
#pragma mark - Exported methods
|
||||
|
||||
RCT_EXPORT_METHOD(setDisabled:(BOOL)disabled
|
||||
resolve:(RCTPromiseResolveBlock)resolve
|
||||
reject:(RCTPromiseRejectBlock)reject) {
|
||||
if (audioDisabled == disabled) {
|
||||
resolve(nil);
|
||||
return;
|
||||
}
|
||||
|
||||
RCTLogInfo(@"[AudioMode] audio disabled: %d", disabled);
|
||||
|
||||
audioDisabled = disabled;
|
||||
JMCallKitProxy.enabled = !disabled;
|
||||
|
||||
RTCAudioSession *session = JitsiAudioSession.rtcAudioSession;
|
||||
if (disabled) {
|
||||
[session removeDelegate:self];
|
||||
} else {
|
||||
[session addDelegate:self];
|
||||
}
|
||||
session.useManualAudio = disabled;
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(setMode:(int)mode
|
||||
resolve:(RCTPromiseResolveBlock)resolve
|
||||
reject:(RCTPromiseRejectBlock)reject) {
|
||||
if (audioDisabled) {
|
||||
resolve(nil);
|
||||
return;
|
||||
}
|
||||
|
||||
RTCAudioSessionConfiguration *config = [self configForMode:mode];
|
||||
NSError *error;
|
||||
|
||||
@@ -177,6 +206,11 @@ RCT_EXPORT_METHOD(setMode:(int)mode
|
||||
RCT_EXPORT_METHOD(setAudioDevice:(NSString *)device
|
||||
resolve:(RCTPromiseResolveBlock)resolve
|
||||
reject:(RCTPromiseRejectBlock)reject) {
|
||||
if (audioDisabled) {
|
||||
resolve(nil);
|
||||
return;
|
||||
}
|
||||
|
||||
RCTLogInfo(@"[AudioMode] Selected device: %@", device);
|
||||
|
||||
RTCAudioSession *session = JitsiAudioSession.rtcAudioSession;
|
||||
@@ -239,6 +273,10 @@ RCT_EXPORT_METHOD(setAudioDevice:(NSString *)device
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(updateDeviceList) {
|
||||
if (audioDisabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
[self notifyDevicesChanged];
|
||||
}
|
||||
|
||||
|
||||
@@ -27,9 +27,14 @@ static NSString * const sendEventNotificationName = @"org.jitsi.meet.SendEvent";
|
||||
- (void)retrieveParticipantsInfo:(void (^)(NSArray*))completion;
|
||||
- (void)openChat:(NSString*)to;
|
||||
- (void)closeChat;
|
||||
- (void)sendChatMessage:(NSString*)message :(NSString*)to ;
|
||||
- (void)sendChatMessage:(NSString*)message :(NSString*)to;
|
||||
- (void)sendSetVideoMuted:(BOOL)muted;
|
||||
- (void)sendSetClosedCaptionsEnabled:(BOOL)enabled;
|
||||
- (void)toggleCamera;
|
||||
- (void)showNotification:(NSString*)appearance :(NSString*)description :(NSString*)timeout :(NSString*)title :(NSString*)uid;
|
||||
- (void)hideNotification:(NSString*)uid;
|
||||
- (void)startRecording:(NSString*)mode :(NSString*)dropboxToken :(BOOL)shouldShare :(NSString*)rtmpStreamKey :(NSString*)rtmpBroadcastID :(NSString*)youtubeStreamKey :(NSString*)youtubeBroadcastID :(NSDictionary*)extraMetadata :(BOOL)transcription;
|
||||
- (void)stopRecording:(NSString*)mode :(BOOL)transcription;
|
||||
- (void)overwriteConfig:(NSDictionary*)config;
|
||||
|
||||
@end
|
||||
|
||||
@@ -28,13 +28,17 @@ static NSString * const sendChatMessageAction = @"org.jitsi.meet.SEND_CHAT_MESSA
|
||||
static NSString * const setVideoMutedAction = @"org.jitsi.meet.SET_VIDEO_MUTED";
|
||||
static NSString * const setClosedCaptionsEnabledAction = @"org.jitsi.meet.SET_CLOSED_CAPTIONS_ENABLED";
|
||||
static NSString * const toggleCameraAction = @"org.jitsi.meet.TOGGLE_CAMERA";
|
||||
|
||||
static NSString * const showNotificationAction = @"org.jitsi.meet.SHOW_NOTIFICATION";
|
||||
static NSString * const hideNotificationAction = @"org.jitsi.meet.HIDE_NOTIFICATION";
|
||||
static NSString * const startRecordingAction = @"org.jitsi.meet.START_RECORDING";
|
||||
static NSString * const stopRecordingAction = @"org.jitsi.meet.STOP_RECORDING";
|
||||
static NSString * const overwriteConfigAction = @"org.jitsi.meet.OVERWRITE_CONFIG";
|
||||
@implementation ExternalAPI
|
||||
|
||||
static NSMapTable<NSString*, void (^)(NSArray* participantsInfo)> *participantInfoCompletionHandlers;
|
||||
|
||||
__attribute__((constructor))
|
||||
static void initializeViewsMap() {
|
||||
static void initializeViewsMap(void) {
|
||||
participantInfoCompletionHandlers = [NSMapTable strongToStrongObjectsMapTable];
|
||||
}
|
||||
|
||||
@@ -52,7 +56,12 @@ RCT_EXPORT_MODULE();
|
||||
@"SEND_CHAT_MESSAGE": sendChatMessageAction,
|
||||
@"SET_VIDEO_MUTED" : setVideoMutedAction,
|
||||
@"SET_CLOSED_CAPTIONS_ENABLED": setClosedCaptionsEnabledAction,
|
||||
@"TOGGLE_CAMERA": toggleCameraAction
|
||||
@"TOGGLE_CAMERA": toggleCameraAction,
|
||||
@"SHOW_NOTIFICATION": showNotificationAction,
|
||||
@"HIDE_NOTIFICATION": hideNotificationAction,
|
||||
@"START_RECORDING": startRecordingAction,
|
||||
@"STOP_RECORDING": stopRecordingAction,
|
||||
@"OVERWRITE_CONFIG": overwriteConfigAction
|
||||
};
|
||||
};
|
||||
|
||||
@@ -78,7 +87,12 @@ RCT_EXPORT_MODULE();
|
||||
sendChatMessageAction,
|
||||
setVideoMutedAction,
|
||||
setClosedCaptionsEnabledAction,
|
||||
toggleCameraAction
|
||||
toggleCameraAction,
|
||||
showNotificationAction,
|
||||
hideNotificationAction,
|
||||
startRecordingAction,
|
||||
stopRecordingAction,
|
||||
overwriteConfigAction
|
||||
];
|
||||
}
|
||||
|
||||
@@ -180,4 +194,50 @@ RCT_EXPORT_METHOD(sendEvent:(NSString *)name
|
||||
[self sendEventWithName:toggleCameraAction body:nil];
|
||||
}
|
||||
|
||||
- (void)showNotification:(NSString*)appearance :(NSString*)description :(NSString*)timeout :(NSString*)title :(NSString*)uid {
|
||||
NSMutableDictionary *data = [[NSMutableDictionary alloc] init];
|
||||
data[@"appearance"] = appearance;
|
||||
data[@"description"] = description;
|
||||
data[@"timeout"] = timeout;
|
||||
data[@"title"] = title;
|
||||
data[@"uid"] = uid;
|
||||
|
||||
[self sendEventWithName:showNotificationAction body:data];
|
||||
}
|
||||
|
||||
- (void)hideNotification:(NSString*)uid {
|
||||
NSMutableDictionary *data = [[NSMutableDictionary alloc] init];
|
||||
data[@"uid"] = uid;
|
||||
|
||||
[self sendEventWithName:hideNotificationAction body:data];
|
||||
}
|
||||
|
||||
- (void)startRecording:(NSString*)mode :(NSString*)dropboxToken :(BOOL)shouldShare :(NSString*)rtmpStreamKey :(NSString*)rtmpBroadcastID :(NSString*)youtubeStreamKey :(NSString*)youtubeBroadcastID :(NSDictionary*)extraMetadata :(BOOL)transcription {
|
||||
NSDictionary *data = @{
|
||||
@"mode": mode,
|
||||
@"dropboxToken": dropboxToken,
|
||||
@"shouldShare": @(shouldShare),
|
||||
@"rtmpStreamKey": rtmpStreamKey,
|
||||
@"rtmpBroadcastID": rtmpBroadcastID,
|
||||
@"youtubeStreamKey": youtubeStreamKey,
|
||||
@"youtubeBroadcastID": youtubeBroadcastID,
|
||||
@"extraMetadata": extraMetadata,
|
||||
@"transcription": @(transcription)
|
||||
};
|
||||
|
||||
[self sendEventWithName:startRecordingAction body:data];
|
||||
}
|
||||
|
||||
- (void)stopRecording:(NSString*)mode :(BOOL)transcription {
|
||||
NSDictionary *data = @{
|
||||
@"mode": mode,
|
||||
@"transcription": @(transcription)
|
||||
};
|
||||
|
||||
[self sendEventWithName:stopRecordingAction body:data];
|
||||
}
|
||||
|
||||
- (void)overwriteConfig:(NSDictionary*)config {
|
||||
[self sendEventWithName:overwriteConfigAction body:config];
|
||||
}
|
||||
@end
|
||||
|
||||
@@ -24,11 +24,15 @@
|
||||
}
|
||||
|
||||
+ (void)activateWithAudioSession:(AVAudioSession *)session {
|
||||
[self.rtcAudioSession audioSessionDidActivate:session];
|
||||
if (!self.rtcAudioSession.useManualAudio) {
|
||||
[self.rtcAudioSession audioSessionDidActivate:session];
|
||||
}
|
||||
}
|
||||
|
||||
+ (void)deactivateWithAudioSession:(AVAudioSession *)session {
|
||||
[self.rtcAudioSession audioSessionDidDeactivate:session];
|
||||
if (!self.rtcAudioSession.useManualAudio) {
|
||||
[self.rtcAudioSession audioSessionDidDeactivate:session];
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -19,6 +19,15 @@
|
||||
|
||||
#import <JitsiMeetSDK/JitsiMeetConferenceOptions.h>
|
||||
|
||||
// Matches RTCLoggingSeverity from RTCLogging.h
|
||||
typedef NS_ENUM(NSInteger, WebRTCLoggingSeverity) {
|
||||
WebRTCLoggingSeverityVerbose,
|
||||
WebRTCLoggingSeverityInfo,
|
||||
WebRTCLoggingSeverityWarning,
|
||||
WebRTCLoggingSeverityError,
|
||||
WebRTCLoggingSeverityNone,
|
||||
};
|
||||
|
||||
@interface JitsiMeet : NSObject
|
||||
|
||||
/**
|
||||
@@ -26,20 +35,35 @@
|
||||
* SiriKit or Handoff, for example.
|
||||
*/
|
||||
@property (copy, nonatomic, nullable) NSString *conferenceActivityType;
|
||||
|
||||
/**
|
||||
* Custom URL scheme used for deep-linking.
|
||||
*/
|
||||
@property (copy, nonatomic, nullable) NSString *customUrlScheme;
|
||||
|
||||
/**
|
||||
* List of domains used for universal linking.
|
||||
*/
|
||||
@property (copy, nonatomic, nullable) NSArray<NSString *> *universalLinkDomains;
|
||||
|
||||
/**
|
||||
* Default conference options used for all conferences. These options will be merged
|
||||
* with those passed to JitsiMeetView.join when joining a conference.
|
||||
*/
|
||||
@property (nonatomic, nullable) JitsiMeetConferenceOptions *defaultConferenceOptions;
|
||||
|
||||
/**
|
||||
* Custom RTCAudioDevice implementation.
|
||||
* https://github.com/jitsi/webrtc/blob/M124/sdk/objc/components/audio/RTCAudioDevice.h
|
||||
* https://github.com/mstyura/RTCAudioDevice
|
||||
*/
|
||||
@property (nonatomic, strong, nullable) id rtcAudioDevice;
|
||||
|
||||
/**
|
||||
* Specify WebRTC logging severity.
|
||||
*/
|
||||
@property (nonatomic, assign) WebRTCLoggingSeverity webRtcLoggingSeverity;
|
||||
|
||||
#pragma mark - This class is a singleton
|
||||
|
||||
+ (instancetype _Nonnull)sharedInstance;
|
||||
|
||||
@@ -54,14 +54,9 @@
|
||||
|
||||
- (instancetype)init {
|
||||
if (self = [super init]) {
|
||||
#if 0
|
||||
// Initialize WebRTC options.
|
||||
WebRTCModuleOptions *options = [WebRTCModuleOptions sharedInstance];
|
||||
options.loggingSeverity = RTCLoggingSeverityInfo;
|
||||
#endif
|
||||
|
||||
// Initialize the one and only bridge for interfacing with React Native.
|
||||
_bridgeWrapper = [[RCTBridgeWrapper alloc] init];
|
||||
self.rtcAudioDevice = nil;
|
||||
self.webRtcLoggingSeverity = WebRTCLoggingSeverityNone;
|
||||
|
||||
// Initialize the listener for handling start/stop screensharing notifications.
|
||||
_screenshareEventEmiter = [[ScheenshareEventEmiter alloc] init];
|
||||
@@ -142,6 +137,12 @@
|
||||
return;
|
||||
};
|
||||
|
||||
// Initialize WebRTC options.
|
||||
WebRTCModuleOptions *options = [WebRTCModuleOptions sharedInstance];
|
||||
options.audioDevice = _rtcAudioDevice;
|
||||
options.loggingSeverity = (RTCLoggingSeverity)_webRtcLoggingSeverity;
|
||||
|
||||
// Initialize the one and only bridge for interfacing with React Native.
|
||||
_bridgeWrapper = [[RCTBridgeWrapper alloc] init];
|
||||
}
|
||||
|
||||
@@ -231,6 +232,9 @@
|
||||
}
|
||||
|
||||
- (void)setDefaultConferenceOptions:(JitsiMeetConferenceOptions *)defaultConferenceOptions {
|
||||
|
||||
// For testing configOverrides a room needs to be set,
|
||||
// thus the following check needs to be commented out
|
||||
if (defaultConferenceOptions != nil && defaultConferenceOptions.room != nil) {
|
||||
@throw [NSException exceptionWithName:@"RuntimeError"
|
||||
reason:@"'room' must be null in the default conference options"
|
||||
@@ -246,6 +250,8 @@
|
||||
}
|
||||
|
||||
- (RCTBridge *)getReactBridge {
|
||||
// Initialize bridge lazily.
|
||||
[self instantiateReactNativeBridge];
|
||||
return _bridgeWrapper.bridge;
|
||||
}
|
||||
|
||||
|
||||
@@ -21,6 +21,11 @@
|
||||
#import "JitsiMeetConferenceOptions.h"
|
||||
#import "JitsiMeetViewDelegate.h"
|
||||
|
||||
typedef NS_ENUM(NSInteger, RecordingMode) {
|
||||
RecordingModeFile,
|
||||
RecordingModeStream
|
||||
};
|
||||
|
||||
@interface JitsiMeetView : UIView
|
||||
|
||||
@property (nonatomic, nullable, weak) id<JitsiMeetViewDelegate> delegate;
|
||||
@@ -47,5 +52,9 @@
|
||||
- (void)setVideoMuted:(BOOL)muted;
|
||||
- (void)setClosedCaptionsEnabled:(BOOL)enabled;
|
||||
- (void)toggleCamera;
|
||||
|
||||
- (void)showNotification:(NSString * _Nonnull)appearance :(NSString * _Nullable)description :(NSString * _Nullable)timeout :(NSString * _Nullable)title :(NSString * _Nullable)uid;
|
||||
- (void)hideNotification:(NSString * _Nullable)uid;
|
||||
- (void)startRecording:(RecordingMode)mode :(NSString * _Nullable)dropboxToken :(BOOL)shouldShare :(NSString * _Nullable)rtmpStreamKey :(NSString * _Nullable)rtmpBroadcastID :(NSString * _Nullable)youtubeStreamKey :(NSString * _Nullable)youtubeBroadcastID :(NSString * _Nullable)extraMetadata :(BOOL)transcription;
|
||||
- (void)stopRecording:(RecordingMode)mode :(BOOL)transcription;
|
||||
- (void)overwriteConfig:(NSDictionary * _Nonnull)config;
|
||||
@end
|
||||
|
||||
@@ -30,6 +30,11 @@
|
||||
*/
|
||||
static NSString *const PiPEnabledFeatureFlag = @"pip.enabled";
|
||||
|
||||
/**
|
||||
* Forward declarations.
|
||||
*/
|
||||
static NSString *recordingModeToString(RecordingMode mode);
|
||||
|
||||
|
||||
@implementation JitsiMeetView {
|
||||
/**
|
||||
@@ -143,6 +148,31 @@ static NSString *const PiPEnabledFeatureFlag = @"pip.enabled";
|
||||
[externalAPI toggleCamera];
|
||||
}
|
||||
|
||||
- (void)showNotification:(NSString *)appearance :(NSString *)description :(NSString *)timeout :(NSString *)title :(NSString *)uid {
|
||||
ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
|
||||
[externalAPI showNotification:appearance :description :timeout :title :uid];
|
||||
}
|
||||
|
||||
-(void)hideNotification:(NSString *)uid {
|
||||
ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
|
||||
[externalAPI hideNotification:uid];
|
||||
}
|
||||
|
||||
- (void)startRecording:(RecordingMode)mode :(NSString *)dropboxToken :(BOOL)shouldShare :(NSString *)rtmpStreamKey :(NSString *)rtmpBroadcastID :(NSString *)youtubeStreamKey :(NSString *)youtubeBroadcastID :(NSDictionary *)extraMetadata :(BOOL)transcription {
|
||||
ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
|
||||
[externalAPI startRecording:recordingModeToString(mode) :dropboxToken :shouldShare :rtmpStreamKey :rtmpBroadcastID :youtubeStreamKey :youtubeBroadcastID :extraMetadata :transcription];
|
||||
}
|
||||
|
||||
- (void)stopRecording:(RecordingMode)mode :(BOOL)transcription {
|
||||
ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
|
||||
[externalAPI stopRecording:recordingModeToString(mode) :transcription];
|
||||
}
|
||||
|
||||
- (void)overwriteConfig:(NSDictionary *)config {
|
||||
ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
|
||||
[externalAPI overwriteConfig:config];
|
||||
}
|
||||
|
||||
#pragma mark Private methods
|
||||
|
||||
- (void)registerObservers {
|
||||
@@ -237,3 +267,14 @@ static NSString *const PiPEnabledFeatureFlag = @"pip.enabled";
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
static NSString *recordingModeToString(RecordingMode mode) {
|
||||
switch (mode) {
|
||||
case RecordingModeFile:
|
||||
return @"file";
|
||||
case RecordingModeStream:
|
||||
return @"stream";
|
||||
default:
|
||||
return nil;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -128,6 +128,6 @@
|
||||
*
|
||||
* The `data` dictionary contains a `id`, `text` key.
|
||||
*/
|
||||
- (void)customOverflowMenuButtonPressed:(NSDictionary *)data;
|
||||
- (void)customButtonPressed:(NSDictionary *)data;
|
||||
|
||||
@end
|
||||
|
||||
@@ -37,7 +37,9 @@
|
||||
"ml": "മലയാളം",
|
||||
"mn": "Монгол",
|
||||
"mr": "मराठी",
|
||||
"nb": "Norsk bokmål",
|
||||
"nl": "Nederlands",
|
||||
"no": "Norsk",
|
||||
"oc": "Occitan",
|
||||
"pl": "Polski",
|
||||
"pt": "Português",
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
"DISCONNECTED": "Ontkoppeld",
|
||||
"DISCONNECTING": "Ontkoppel tans",
|
||||
"ERROR": "Fout",
|
||||
"RECONNECTING": "’n Netwerkprobleem het voorgekom. Herkoppel tans..."
|
||||
"RECONNECTING": "’n Netwerkprobleem het voorgekom. Herkoppel tans…"
|
||||
},
|
||||
"connectionindicator": {
|
||||
"address": "Adres:",
|
||||
@@ -426,7 +426,7 @@
|
||||
"somebody": "Iemand",
|
||||
"startSilentDescription": "",
|
||||
"startSilentTitle": "",
|
||||
"suboptimalExperienceDescription": "Gits... ons is bevrees u ervaring met {{appName}} gaan nie so goed wees hier nie. Ons soek maniere om dit die hoof te bied, maar probeer intussen een van die <a href='{{recommendedBrowserPageLink}}' target='_blank'>volledig ondersteunde blaaiers</a>.",
|
||||
"suboptimalExperienceDescription": "Gits… ons is bevrees u ervaring met {{appName}} gaan nie so goed wees hier nie. Ons soek maniere om dit die hoof te bied, maar probeer intussen een van die <a href='{{recommendedBrowserPageLink}}' target='_blank'>volledig ondersteunde blaaiers</a>.",
|
||||
"suboptimalExperienceTitle": "Blaaierwaarskuwing",
|
||||
"unmute": ""
|
||||
},
|
||||
@@ -443,7 +443,7 @@
|
||||
"calling": "Bel tans…",
|
||||
"connected": "Gekoppel",
|
||||
"connecting": "Koppel tans…",
|
||||
"connecting2": "Koppel tans*...",
|
||||
"connecting2": "Koppel tans*…",
|
||||
"disconnected": "Ontkoppeld",
|
||||
"expired": "Verval",
|
||||
"ignored": "Geïgnoreer",
|
||||
@@ -641,16 +641,7 @@
|
||||
"tr": ""
|
||||
},
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "Kies <b><i>Allow</i></b> wanneer die blaaier vir toestemming vra.",
|
||||
"chromeGrantPermissions": "Kies <b><i>Allow</i></b> wanneer die blaaier vir toestemming vra.",
|
||||
"edgeGrantPermissions": "Kies <b><i>Yes</i></b> wanneer die blaaier vir toestemming vra.",
|
||||
"electronGrantPermissions": "Gee asb. toestemming vir die gebruik van u kamera en mikrofoon",
|
||||
"firefoxGrantPermissions": "Kies <b><i>Deel gekose toestel</i></b> wanneer die blaaier vir toestemming vra.",
|
||||
"iexplorerGrantPermissions": "Kies <b><i>OK</i></b> wanneer die blaaier vir toestemming vra.",
|
||||
"nwjsGrantPermissions": "Gee asb. toestemming vir die gebruik van u kamera en mikrofoon",
|
||||
"operaGrantPermissions": "Kies <b><i>Allow</i></b> wanneer die blaaier vir toestemming vra.",
|
||||
"react-nativeGrantPermissions": "Kies <b><i>Allow</i></b> wanneer die blaaier vir toestemming vra.",
|
||||
"safariGrantPermissions": "Kies <b><i>OK</i></b> wanneer die blaaier vir toestemming vra."
|
||||
"grantPermissions": "Gee asb. toestemming vir die gebruik van u kamera en mikrofoon."
|
||||
},
|
||||
"videoSIPGW": {
|
||||
"busy": "Ons probeer tans hulpbronne vry te stel. Probeer gerus weer oor ’n paar minute.",
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
"installExtensionText": "نزِّل الإضافة للدمج مع رزنامة غوغل ورزنامة أوفيس 365"
|
||||
},
|
||||
"connectingOverlay": {
|
||||
"joiningRoom": "قيد وصلك بالإجتماع..."
|
||||
"joiningRoom": "قيد وصلك بالإجتماع…"
|
||||
},
|
||||
"connection": {
|
||||
"ATTACHED": "رُبِط",
|
||||
@@ -134,7 +134,7 @@
|
||||
"DISCONNECTED": "فُصِل",
|
||||
"DISCONNECTING": "قيد الفصل",
|
||||
"ERROR": "خطأ",
|
||||
"FETCH_SESSION_ID": "قيد الحصول على مُعرِّف الجلسة...",
|
||||
"FETCH_SESSION_ID": "قيد الحصول على مُعرِّف الجلسة…",
|
||||
"GET_SESSION_ID_ERROR": "خطأ في الحصول على مُعرِّف الجلسة: {{code}}",
|
||||
"GOT_SESSION_ID": "جرى الحصول على مُعرِّف الجلسة",
|
||||
"LOW_BANDWIDTH": "أوقف فيديو {{displayName}} لتوفير كمية البيانات المتبادلة"
|
||||
@@ -189,7 +189,7 @@
|
||||
"ifHaveApp": "إن كان لديك التطبيق:",
|
||||
"joinInApp": "انضم للمُلتقى عبر تطبيق الجوال",
|
||||
"launchWebButton": "افتح تطبيق الويب",
|
||||
"title": "قيد عقد مُلتقىك في {{app}}...",
|
||||
"title": "قيد عقد مُلتقىك في {{app}}…",
|
||||
"tryAgainButton": "جرب مرة أخرى في تطبيق الحاسوب",
|
||||
"unsupportedBrowser": "يبدو أنك تستخدم متصفحًا لا ندعمه."
|
||||
},
|
||||
@@ -222,7 +222,7 @@
|
||||
"Share": "شارك",
|
||||
"Submit": "أرسل",
|
||||
"WaitForHostMsg": "لم يبدأ المؤتمر بعد. إن كنت المضيف والراعي، فنرجو تأكيد ذلك عبر الاستيثاق أو انتظر وصول المضيف رجاءً. ",
|
||||
"WaitingForHostTitle": "في انتظار المضيف ...",
|
||||
"WaitingForHostTitle": "في انتظار المضيف…",
|
||||
"Yes": "نعم",
|
||||
"accessibilityLabel": {
|
||||
"liveStreaming": "بث حي مباشر"
|
||||
@@ -244,9 +244,9 @@
|
||||
"cameraUnknownError": "يصعب استعمال الكاميرا لأسباب مجهولة.",
|
||||
"cameraUnsupportedResolutionError": "لا تدعم كاميرتك دقة الفيديو المطلوبة.",
|
||||
"close": "أغلق",
|
||||
"conferenceDisconnectMsg": "قد تضطر للتحقق من اتصال الشبكة لديك. سيعاد الاتصال خلال {{seconds}} ثانية...",
|
||||
"conferenceDisconnectMsg": "قد تضطر للتحقق من اتصال الشبكة لديك. سيعاد الاتصال خلال {{seconds}} ثانية…",
|
||||
"conferenceDisconnectTitle": "فُصِل الاتصال لديك.",
|
||||
"conferenceReloadMsg": "نحاول إصلاح الأمر. سيعاد الاتصال خلال {{seconds}} ثانية...",
|
||||
"conferenceReloadMsg": "نحاول إصلاح الأمر. سيعاد الاتصال خلال {{seconds}} ثانية…",
|
||||
"conferenceReloadTitle": "لم تسر الأمور على ما يرام، نأسف لذلك!",
|
||||
"confirm": "أكِّد",
|
||||
"confirmNo": "لا",
|
||||
@@ -531,7 +531,7 @@
|
||||
"errorLiveStreamNotEnabled": "البث الحي غير مفعَّل على على {{email}}. فعَّل البث الحي رجاءً، أو سجِّل الدخل إلى حسابٍ مُفعَّل فيه البث الحي",
|
||||
"expandedOff": "أُوقِف البث الحي",
|
||||
"expandedOn": "يجري بث المُلتقى على يوتيوب",
|
||||
"expandedPending": "تبدأ عملية البث الحي...",
|
||||
"expandedPending": "تبدأ عملية البث الحي…",
|
||||
"failedToStart": "فشلت عملية بدء البث الحي",
|
||||
"getStreamKeyManually": "لم نتمكن من الوصول إلى أي بث حي. جرب جلب مفتاح بث حي خاص بك من يوتيوب.",
|
||||
"googlePrivacyPolicy": "سياسية خصوصية غوغل",
|
||||
@@ -574,10 +574,10 @@
|
||||
"joinRejectedMessage": "رفض رئيس الجلسة منحك الإذن بالدخول إلى المُلتقى",
|
||||
"joinRejectedTitle": "تم رفض طلب الانضمام.",
|
||||
"joinTitle": "انضم للمُلتقى",
|
||||
"joinWithPasswordMessage": "الرجاء الانتظار أثناء محاولة الدخول دون كلمة مرور...",
|
||||
"joinWithPasswordMessage": "الرجاء الانتظار أثناء محاولة الدخول دون كلمة مرور…",
|
||||
"joiningMessage": "ستتمكن من الانضمام للمُلتقى بعد الموافقة على طلبك",
|
||||
"joiningTitle": "يجري طلب إذنٍ للدخول...",
|
||||
"joiningWithPasswordTitle": "الدخول مع كلمة مرور...",
|
||||
"joiningTitle": "يجري طلب إذنٍ للدخول…",
|
||||
"joiningWithPasswordTitle": "الدخول مع كلمة مرور…",
|
||||
"knockButton": "اطلب إذن الدخول",
|
||||
"knockTitle": "يريد أحدٌ الدخول إلى المُلتقى",
|
||||
"knockingParticipantList": "تنبيه قائمة المشاركين",
|
||||
@@ -658,7 +658,7 @@
|
||||
"linkToSalesforceDescription": "يمكنك ربط ملخص الاجتماع بكائن Salesforce.",
|
||||
"linkToSalesforceError": "فشل ربط المُلتقى بـ Salesforce",
|
||||
"linkToSalesforceKey": "ربط هذا المُلتقى",
|
||||
"linkToSalesforceProgress": "جارٍ ربط الاجتماع بـ Salesforce ...",
|
||||
"linkToSalesforceProgress": "جارٍ ربط الاجتماع بـ Salesforce…",
|
||||
"linkToSalesforceSuccess": "تم ربط الاجتماع بـ Salesforce",
|
||||
"localRecordingStarted": "بدأ {{name}} تسجيلًا محليًا.",
|
||||
"localRecordingStopped": "أوقف {{name}} التسجيل المحلي.",
|
||||
@@ -789,7 +789,7 @@
|
||||
"callMe": "اتصل بي",
|
||||
"callMeAtNumber": "اتصل بي على هذا الرقم:",
|
||||
"calling": "قيد الاتصال",
|
||||
"configuringDevices": "يجري ضبط الأجهزة...",
|
||||
"configuringDevices": "يجري ضبط الأجهزة…",
|
||||
"connectedWithAudioQ": "هل متصل بجهاز صوت؟",
|
||||
"connection": {
|
||||
"good": "اتصال الإنترنت لديك جيد!",
|
||||
@@ -843,17 +843,17 @@
|
||||
},
|
||||
"presenceStatus": {
|
||||
"busy": "مشغول",
|
||||
"calling": "يتحدث...",
|
||||
"calling": "يتحدث…",
|
||||
"connected": "متصل",
|
||||
"connecting": "يتصل...",
|
||||
"connecting2": "يتصل...",
|
||||
"connecting": "يتصل…",
|
||||
"connecting2": "يتصل…",
|
||||
"disconnected": "غير الاتصال",
|
||||
"expired": "منتهي الصلاحية",
|
||||
"ignored": "مهمل",
|
||||
"initializingCall": "تهيئة مكالمة...",
|
||||
"initializingCall": "تهيئة مكالمة…",
|
||||
"invited": "مدعو",
|
||||
"rejected": "مرفوض",
|
||||
"ringing": "يرن..."
|
||||
"ringing": "يرن…"
|
||||
},
|
||||
"privacyView": {
|
||||
"title": "خصوصية"
|
||||
@@ -890,7 +890,7 @@
|
||||
"errorFetchingLink": "خطأ في جلب رابط التسجيل.",
|
||||
"expandedOff": "أوقٍف التسجيل",
|
||||
"expandedOn": "يُسجَّل المُلتقى الآن",
|
||||
"expandedPending": "بدء التسجيل...",
|
||||
"expandedPending": "بدء التسجيل…",
|
||||
"failedToStart": "فشل بدء التسجيل",
|
||||
"fileSharingdescription": "شارك التسجيل مع المشاركين للمُلتقى",
|
||||
"highlight": "تسليط الضوء",
|
||||
@@ -917,7 +917,7 @@
|
||||
"on": "تسجيل",
|
||||
"onBy": "بدأ {{name}} التسجيل",
|
||||
"onlyRecordSelf": "تسجيل فقط دفق الصوت والفيديو الخاصة بي",
|
||||
"pending": "التحضير لتسجيل المُلتقى...",
|
||||
"pending": "التحضير لتسجيل المُلتقى…",
|
||||
"rec": "تسجيل",
|
||||
"saveLocalRecording": "حفظ ملف التسجيل محليا",
|
||||
"serviceDescription": "ستحفظ خدمة التسجيل الفيديو المستجل",
|
||||
@@ -1215,7 +1215,7 @@
|
||||
"failedToStart": "فشلت عملية بدء الإذاعة",
|
||||
"labelToolTip": "يجري إذاعة المُلتقى",
|
||||
"off": "أوقفت الإذاعة",
|
||||
"pending": "التحضير لإذاعة المُلتقى...",
|
||||
"pending": "التحضير لإذاعة المُلتقى…",
|
||||
"start": "بدء إظهار الترجمة",
|
||||
"stop": "إيقاف عرض الترجمة",
|
||||
"subtitles": "ترجمات",
|
||||
@@ -1223,16 +1223,7 @@
|
||||
"tr": "يذاع"
|
||||
},
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "اختر <b><i>السماح</i></b> عندما يطلب المتصفح الأذونات.",
|
||||
"chromeGrantPermissions": "اختر <b><i>السماح</i></b> عندما يطلب المتصفح الأذونات.",
|
||||
"edgeGrantPermissions": "اختر <b><i>نعم</i></b> عندما يطلب المتصفح الأذونات.",
|
||||
"electronGrantPermissions": "امنح إذنًا باستعمال الكاميرا والمايكروفون.",
|
||||
"firefoxGrantPermissions": "اختر <b><i>مشاركة الجهاز المحدَّد</i></b> عندما يطل بالمتصفح الأذونات.",
|
||||
"iexplorerGrantPermissions": "اختر <b><i>تمام</i></b> عندما يطلب المتصفح الأذونات.",
|
||||
"nwjsGrantPermissions": "امنح إذنًا باستعمال الكاميرا والمايكروفون.",
|
||||
"operaGrantPermissions": "اختر <b><i>السماح</i></b> عندما يطلب المتصفح الأذونات.",
|
||||
"react-nativeGrantPermissions": "اختر <b><i>السماح</i></b> عندما يطلب المتصفح الأذونات.",
|
||||
"safariGrantPermissions": "اختر <b><i>تمام</i></b> عندما يطلب المتصفح الأذونات."
|
||||
"grantPermissions": "امنح إذنًا باستعمال الكاميرا والمايكروفون."
|
||||
},
|
||||
"videoSIPGW": {
|
||||
"busy": "نعمل على تحرير الموارد. حاول مرة أخرى لاحقًا بعد بضعة دقائق.",
|
||||
@@ -1302,7 +1293,7 @@
|
||||
"image6": "غابة",
|
||||
"image7": "شروق الشمس",
|
||||
"none": "بدون",
|
||||
"pleaseWait": "يرجى الانتظار...",
|
||||
"pleaseWait": "يرجى الانتظار…",
|
||||
"removeBackground": "إزالة خلفية",
|
||||
"slightBlur": "طمس طفيف",
|
||||
"title": "خلفيات افتراضية",
|
||||
|
||||
@@ -489,7 +489,7 @@
|
||||
"calling": "Выклікаю…",
|
||||
"connected": "Падключана",
|
||||
"connecting": "Падлучэнне…",
|
||||
"connecting2": "Падлучэнне * ...",
|
||||
"connecting2": "Падлучэнне *…",
|
||||
"disconnected": "Адключана",
|
||||
"expired": "Скончыўся",
|
||||
"ignored": "праігнаравалі",
|
||||
@@ -714,16 +714,7 @@
|
||||
"tr": "TR"
|
||||
},
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "Калі ласка, пазначце <b> <i> Дазволіць </i> </b>, калі браўзэр спытае пра дазволы.",
|
||||
"chromeGrantPermissions": "Калі ласка, пазначце <b> <i> Дазволіць </i> </b>, калі браўзэр спытае пра дазволы.",
|
||||
"edgeGrantPermissions": "Калі ласка, пазначце <b> <i> Ды </i> </b>, калі браўзэр спытае пра дазволы.",
|
||||
"electronGrantPermissions": "Калі ласка, дайце дазвол на доступ да камеры і мікрафону",
|
||||
"firefoxGrantPermissions": "Калі ласка, пазначце <b> <i> Падзяліцца абраным прыладай </i> </b>, калі браўзэр спытае пра дазволы.",
|
||||
"iexplorerGrantPermissions": "Калі ласка, пазначце <b> <i> OK </i> </b>, калі браўзэр спытае пра дазволы.",
|
||||
"nwjsGrantPermissions": "Калі ласка, дайце дазвол на доступ да камеры і мікрафону",
|
||||
"operaGrantPermissions": "Калі ласка, пазначце <b> <i> Дазволіць </i> </b>, калі браўзэр спытае пра дазволы.",
|
||||
"react-nativeGrantPermissions": "Калі ласка, пазначце <b> <i> Дазволіць </i> </b>, калі браўзэр спытае пра дазволы.",
|
||||
"safariGrantPermissions": "Калі ласка, пазначце <b> <i> OK </i> </b>, калі браўзэр спытае пра дазволы."
|
||||
"grantPermissions": "Калі ласка, дайце дазвол на доступ да камеры і мікрафону."
|
||||
},
|
||||
"videoSIPGW": {
|
||||
"busy": "Мы працуем над вызваленнем рэсурсаў. Калі ласка, паспрабуйце праз некалькі хвілін.",
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
"installExtensionText": "Инсталирайте разширенията за Google Calendar и Office 365"
|
||||
},
|
||||
"connectingOverlay": {
|
||||
"joiningRoom": "Свързване с вашата среща..."
|
||||
"joiningRoom": "Свързване с вашата среща…"
|
||||
},
|
||||
"connection": {
|
||||
"ATTACHED": "Прикрепен",
|
||||
@@ -92,11 +92,11 @@
|
||||
"DISCONNECTED": "Изключен",
|
||||
"DISCONNECTING": "Прекъсване на връзката",
|
||||
"ERROR": "Грешка",
|
||||
"FETCH_SESSION_ID": "Отваряне на сесия...",
|
||||
"FETCH_SESSION_ID": "Отваряне на сесия…",
|
||||
"GET_SESSION_ID_ERROR": "Грешка при отваряне на сесията: {{code}}",
|
||||
"GOT_SESSION_ID": "Отваряне на сесията... Готово",
|
||||
"GOT_SESSION_ID": "Отваряне на сесията… Готово",
|
||||
"LOW_BANDWIDTH": "Видеото на {{displayName}} беше изключено, поради слаба Интернет връзка",
|
||||
"RECONNECTING": "Появи се проблем с мрежата. Връзваме се наново..."
|
||||
"RECONNECTING": "Появи се проблем с мрежата. Връзваме се наново…"
|
||||
},
|
||||
"connectionindicator": {
|
||||
"address": "Адрес:",
|
||||
@@ -140,7 +140,7 @@
|
||||
"downloadApp": "Свалете приложението",
|
||||
"launchWebButton": "Заредете уеб страницата",
|
||||
"openApp": "Продължете към приложението",
|
||||
"title": "Зареждане на срещата в {{app}}...",
|
||||
"title": "Зареждане на срещата в {{app}}…",
|
||||
"tryAgainButton": "Пробвайте отново"
|
||||
},
|
||||
"defaultLink": "напр. {{url}}",
|
||||
@@ -169,7 +169,7 @@
|
||||
"Share": "Споделяне",
|
||||
"Submit": "Изпращане",
|
||||
"WaitForHostMsg": "Конференцията все още не е започнала. Ако сте домакинът, тогава се идентифицирайте. В противен случай изчакайте докато домакинът пристигне.",
|
||||
"WaitingForHost": "Чакаме домакина...",
|
||||
"WaitingForHost": "Чакаме домакина…",
|
||||
"Yes": "Да",
|
||||
"accessibilityLabel": {
|
||||
"liveStreaming": "Излъчване на живо"
|
||||
@@ -398,7 +398,7 @@
|
||||
"errorLiveStreamNotEnabled": "Предаването на живо не е пуснато за {{email}}. Моля, активирайте го или сменете акаунта.",
|
||||
"expandedOff": "Предаването на живо бе спряно",
|
||||
"expandedOn": "Срещата се излъчва на живо в YouTube.",
|
||||
"expandedPending": "Излъчването на живо се стартира...",
|
||||
"expandedPending": "Излъчването на живо се стартира…",
|
||||
"failedToStart": "Излъчването на живо не успя да започне",
|
||||
"getStreamKeyManually": "Не успяхме да открием никакво предаване на живо. Опитайте да вземете ключа за такова от YouTube.",
|
||||
"googlePrivacyPolicy": "Политика за поверителност на Google",
|
||||
@@ -433,10 +433,10 @@
|
||||
"invalidPassword": "Невалидна парола",
|
||||
"joinRejectedMessage": "Вашето желание за включване беше отхвърлено от модератор.",
|
||||
"joinTitle": "Включи се в срещата",
|
||||
"joinWithPasswordMessage": "Опит за включване с парола, моля изчакайте...",
|
||||
"joinWithPasswordMessage": "Опит за включване с парола, моля изчакайте…",
|
||||
"joiningMessage": "Ще влезете в срещата, когато някой ви приеме",
|
||||
"joiningTitle": "Изчаква одобрение...",
|
||||
"joiningWithPasswordTitle": "Включване с парола...",
|
||||
"joiningTitle": "Изчаква одобрение…",
|
||||
"joiningWithPasswordTitle": "Включване с парола…",
|
||||
"knockButton": "Поискай достъп",
|
||||
"knockTitle": "Някой желае да се включи в срещата",
|
||||
"knockingParticipantList": "Списък с чакащи участници",
|
||||
@@ -535,17 +535,17 @@
|
||||
"poweredby": "с подкрепата на",
|
||||
"presenceStatus": {
|
||||
"busy": "Зает",
|
||||
"calling": "Обаждане...",
|
||||
"calling": "Обаждане…",
|
||||
"connected": "Свързан",
|
||||
"connecting": "Свързване...",
|
||||
"connecting2": "Свързване*...",
|
||||
"connecting": "Свързване…",
|
||||
"connecting2": "Свързване*…",
|
||||
"disconnected": "Изключен",
|
||||
"expired": "Изтекъл",
|
||||
"ignored": "Пренебрегнат",
|
||||
"initializingCall": "Започване на обаждането...",
|
||||
"initializingCall": "Започване на обаждането…",
|
||||
"invited": "Поканен",
|
||||
"rejected": "Отхвърлен",
|
||||
"ringing": "Звъни..."
|
||||
"ringing": "Звъни…"
|
||||
},
|
||||
"profile": {
|
||||
"setDisplayNameLabel": "Задайте екранното си име",
|
||||
@@ -563,7 +563,7 @@
|
||||
"error": "Грешка при опит за запис. Моля, опитайте отново.",
|
||||
"expandedOff": "Записът спря",
|
||||
"expandedOn": "Срещата се записва в момента.",
|
||||
"expandedPending": "Записът започва...",
|
||||
"expandedPending": "Записът започва…",
|
||||
"failedToStart": "Неуспешен опит за записване",
|
||||
"fileSharingdescription": "Споделете записа с участниците в срещата",
|
||||
"live": "На Живо",
|
||||
@@ -572,7 +572,7 @@
|
||||
"offBy": "{{name}} спря записа",
|
||||
"on": "Запис",
|
||||
"onBy": "{{name}} пусна запис",
|
||||
"pending": "Стартира запис на срещата...",
|
||||
"pending": "Стартира запис на срещата…",
|
||||
"rec": "ЗАПИС",
|
||||
"serviceDescription": "Записът Ви ще се запише от специална записваща услуга",
|
||||
"serviceName": "Записваща услуга",
|
||||
@@ -764,22 +764,13 @@
|
||||
"failedToStart": "Транскрибирането не успя при пускане",
|
||||
"labelToolTip": "Тази среща се транскрибира",
|
||||
"off": "Транскрибирането спря",
|
||||
"pending": "Стартира се транскрибиране на срещата...",
|
||||
"pending": "Стартира се транскрибиране на срещата…",
|
||||
"start": "Започва показване на субтитри",
|
||||
"stop": "Спира показване на субтитри",
|
||||
"tr": "СУБ"
|
||||
},
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "Изберете <b><i>Разрешаване</i></b>, когато браузърът Ви помоли за разрешение.",
|
||||
"chromeGrantPermissions": "Изберете <b><i>Разрешаване</i></b>, когато браузърът Ви помоли за разрешение.",
|
||||
"edgeGrantPermissions": "Изберете <b><i>Да</i></b>, когато браузърът Ви помоли за разрешение.",
|
||||
"electronGrantPermissions": "Моля, разрешете използването на камерата и микрофона",
|
||||
"firefoxGrantPermissions": "Изберете <b><i>Споделяне на избраното устройство</i></b>, когато браузърът Ви помоли за разрешение.",
|
||||
"iexplorerGrantPermissions": "Изберете <b><i>Добре</i></b>, когато браузърът Ви помоли за разрешение.",
|
||||
"nwjsGrantPermissions": "Моля, разрешете използването на камерата и микрофона",
|
||||
"operaGrantPermissions": "Изберете <b><i>Разрешаване</i></b>, когато браузърът Ви помоли за разрешение.",
|
||||
"react-nativeGrantPermissions": "Изберете <b><i>Разрешаване</i></b>, когато браузърът Ви помоли за разрешение.",
|
||||
"safariGrantPermissions": "Изберете <b><i>Добре</i></b>, когато браузърът Ви помоли за разрешение."
|
||||
"grantPermissions": "Моля, разрешете използването на камерата и микрофона."
|
||||
},
|
||||
"videoSIPGW": {
|
||||
"busy": "Работим по освобождаване на ресурси. Моля, опитайте след няколко минути.",
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
"noResults": "No s'ha trobat cap resultat coincident",
|
||||
"outlookEmail": "Correu d'Outlook",
|
||||
"phoneNumbers": "números de telèfon",
|
||||
"searching": "S'està cercant...",
|
||||
"searching": "S'està cercant…",
|
||||
"shareInvite": "Comparteix la invitació a la reunió",
|
||||
"shareLink": "Compartiu l'enllaç de la reunió per a convidar altres persones",
|
||||
"shareStream": "Comparteix l'enllaç de la transmissió en directe",
|
||||
@@ -122,7 +122,7 @@
|
||||
"installExtensionText": "Instal·la l'extensió per a la integració amb Google Calendar i Office 365"
|
||||
},
|
||||
"connectingOverlay": {
|
||||
"joiningRoom": "S'està connectat a la reunió..."
|
||||
"joiningRoom": "S'està connectat a la reunió…"
|
||||
},
|
||||
"connection": {
|
||||
"ATTACHED": "Adjunt",
|
||||
@@ -134,9 +134,9 @@
|
||||
"DISCONNECTED": "Desconnectat",
|
||||
"DISCONNECTING": "S'està desconnectant",
|
||||
"ERROR": "Error",
|
||||
"FETCH_SESSION_ID": "S'està obtenint un identificador de sessió...",
|
||||
"FETCH_SESSION_ID": "S'està obtenint un identificador de sessió…",
|
||||
"GET_SESSION_ID_ERROR": "S'ha produït un error en obtenir l'identificador de la sessió: {{code}}",
|
||||
"GOT_SESSION_ID": "Obtenció d'identificador de sessió.... Fet",
|
||||
"GOT_SESSION_ID": "Obtenció d'identificador de sessió…. Fet",
|
||||
"LOW_BANDWIDTH": "S'ha apagat el vídeo de {{displayName}} per a estalviar amplada de banda"
|
||||
},
|
||||
"connectionindicator": {
|
||||
@@ -189,7 +189,7 @@
|
||||
"ifHaveApp": "Si ja teniu l'aplicació:",
|
||||
"joinInApp": "Uniu-vos a aquesta reunió amb l'aplicació",
|
||||
"launchWebButton": "Inicia al web",
|
||||
"title": "S'està iniciant la reunió en {{app}}....",
|
||||
"title": "S'està iniciant la reunió en {{app}}….",
|
||||
"tryAgainButton": "Torna-ho a intentar en l'escriptori",
|
||||
"unsupportedBrowser": "Sembla que useu un navegador que no suportem."
|
||||
},
|
||||
@@ -222,7 +222,7 @@
|
||||
"Share": "Comparteix",
|
||||
"Submit": "Tramet",
|
||||
"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ó...",
|
||||
"WaitingForHostTitle": "S'està esperant l'amfitrió…",
|
||||
"Yes": "Sí",
|
||||
"accessibilityLabel": {
|
||||
"liveStreaming": "Transmissió en directe"
|
||||
@@ -244,9 +244,9 @@
|
||||
"cameraUnknownError": "Per algun motiu desconegut, no es pot usar la càmera.",
|
||||
"cameraUnsupportedResolutionError": "La vostra càmera no permet la resolució de vídeo requerida.",
|
||||
"close": "Tanca",
|
||||
"conferenceDisconnectMsg": "Potser voleu comprovar la connexió a la xarxa. Es tornarà a connectar en {{seconds}} segons...",
|
||||
"conferenceDisconnectMsg": "Potser voleu comprovar la connexió a la xarxa. Es tornarà a connectar en {{seconds}} segons…",
|
||||
"conferenceDisconnectTitle": "Esteu desconnectat.",
|
||||
"conferenceReloadMsg": "Intentem de corregir-ho. Tornem a connectar en {{seconds}} segons...",
|
||||
"conferenceReloadMsg": "Intentem de corregir-ho. Tornem a connectar en {{seconds}} segons…",
|
||||
"conferenceReloadTitle": "Malauradament, alguna cosa no ha anat bé.",
|
||||
"confirm": "Confirmo",
|
||||
"confirmNo": "No",
|
||||
@@ -535,7 +535,7 @@
|
||||
"errorLiveStreamNotEnabled": "La transmissió en directe no està activada a ̣{{email}}. Activeu-la o inicieu sessió en un compte que tingui la transmissió en directe activada.",
|
||||
"expandedOff": "S'ha aturat la transmissió en directe",
|
||||
"expandedOn": "Ara mateix, la reunió s'està transmetent a Youtube.",
|
||||
"expandedPending": "S'ha iniciat la transmissió en directe...",
|
||||
"expandedPending": "S'ha iniciat la transmissió en directe…",
|
||||
"failedToStart": "No s'ha pogut iniciar la transmissió en directe",
|
||||
"getStreamKeyManually": "No hem pogut obtenir cap transmissió en directe. Intenteu d'aconseguir la clau de transmissió en directe del YouTube.",
|
||||
"googlePrivacyPolicy": "Polítiques de privadesa de Google",
|
||||
@@ -547,7 +547,7 @@
|
||||
"offBy": "{{name}} ha aturat la transmissió en directe",
|
||||
"on": "Ha començat la transmissió en directe",
|
||||
"onBy": "{{name}} ha iniciat la transmissió en directe",
|
||||
"pending": "S'està iniciant la transmissió en directe...",
|
||||
"pending": "S'està iniciant la transmissió en directe…",
|
||||
"serviceName": "Servei de transmissió en directe",
|
||||
"sessionAlreadyActive": "Aquesta sessió ja s'està enregistrant o s'està emetent en directe.",
|
||||
"signIn": "Inicia sessió amb Google",
|
||||
@@ -578,10 +578,10 @@
|
||||
"joinRejectedMessage": "La vostra sol·licitud ha estat rebutjada per un moderador.",
|
||||
"joinRejectedTitle": "S'ha rebutjat la petició d'unir-s'hi.",
|
||||
"joinTitle": "Entra a la reunió",
|
||||
"joinWithPasswordMessage": "S'està intentant unir-s'hi amb contrasenya, espereu...",
|
||||
"joinWithPasswordMessage": "S'està intentant unir-s'hi amb contrasenya, espereu…",
|
||||
"joiningMessage": "Us unireu a la reunió de seguida que algú accepti la sol·licitud",
|
||||
"joiningTitle": "S'ha demanat per a entrar a la reunió...",
|
||||
"joiningWithPasswordTitle": "Afegeix-m'hi amb contrasenya...",
|
||||
"joiningTitle": "S'ha demanat per a entrar a la reunió…",
|
||||
"joiningWithPasswordTitle": "Afegeix-m'hi amb contrasenya…",
|
||||
"knockButton": "Demana d'unir-se",
|
||||
"knockTitle": "Algú vol unir-se a la reunió",
|
||||
"knockingParticipantList": "Llista de participants que piquen per a entrar",
|
||||
@@ -665,7 +665,7 @@
|
||||
"linkToSalesforceDescription": "Podeu enllaçar el resum de la reunió a un objecte Salesforce.",
|
||||
"linkToSalesforceError": "No s'ha pogut enllaçar la reunió a Salesforce",
|
||||
"linkToSalesforceKey": "Enllaça aquesta reunió",
|
||||
"linkToSalesforceProgress": "S'està enllaçant la reunió a Salesforce...",
|
||||
"linkToSalesforceProgress": "S'està enllaçant la reunió a Salesforce…",
|
||||
"linkToSalesforceSuccess": "La reunió s'ha enllaçat a Salesforce",
|
||||
"localRecordingStarted": "{{name}} ha iniciat un enregistrament local.",
|
||||
"localRecordingStopped": "{{name}} ha aturat has stopped a local recording.",
|
||||
@@ -796,7 +796,7 @@
|
||||
"callMe": "Truca'm",
|
||||
"callMeAtNumber": "Truca'm a aquest número:",
|
||||
"calling": "S'està trucant",
|
||||
"configuringDevices": "S'estan configurant els aparells...",
|
||||
"configuringDevices": "S'estan configurant els aparells…",
|
||||
"connectedWithAudioQ": "Heu connectat amb àudio?",
|
||||
"connection": {
|
||||
"good": "La vostra connexió a internet sembla bona!",
|
||||
@@ -850,17 +850,17 @@
|
||||
},
|
||||
"presenceStatus": {
|
||||
"busy": "Ocupat",
|
||||
"calling": "S'està trucant...",
|
||||
"calling": "S'està trucant…",
|
||||
"connected": "Connectat",
|
||||
"connecting": "Està connectant...",
|
||||
"connecting2": "Està connectant*...",
|
||||
"connecting": "Està connectant…",
|
||||
"connecting2": "Està connectant*…",
|
||||
"disconnected": "Desconnectat",
|
||||
"expired": "Ha expirat",
|
||||
"ignored": "Ignorat",
|
||||
"initializingCall": "S'està inicialitzant la trucada...",
|
||||
"initializingCall": "S'està inicialitzant la trucada…",
|
||||
"invited": "Convidat",
|
||||
"rejected": "Rebutjat",
|
||||
"ringing": "Està sonat..."
|
||||
"ringing": "Està sonat…"
|
||||
},
|
||||
"privacyView": {
|
||||
"title": "Privadesa"
|
||||
@@ -897,7 +897,7 @@
|
||||
"errorFetchingLink": "S'ha produït un error en obtenir l'enllaç de l'enregistrament.",
|
||||
"expandedOff": "S'ha aturat l'enregistrament",
|
||||
"expandedOn": "S'està enregistrant la reunió.",
|
||||
"expandedPending": "S'ha iniciat l'enregistrament...",
|
||||
"expandedPending": "S'ha iniciat l'enregistrament…",
|
||||
"failedToStart": "No s'ha pogut iniciar l'enregistrament",
|
||||
"fileSharingdescription": "Compartiu l'enllaç de l'enregistrament de la reunió amb els participants",
|
||||
"highlight": "Destaca",
|
||||
@@ -924,7 +924,7 @@
|
||||
"on": "L'enregistrament ha començat",
|
||||
"onBy": "{{name}} ha iniciat l'enregistrament",
|
||||
"onlyRecordSelf": "Enregistra només el meu àudio i vídeo",
|
||||
"pending": "S'està preparant per a enregistrar la reunió...",
|
||||
"pending": "S'està preparant per a enregistrar la reunió…",
|
||||
"rec": "ENREG",
|
||||
"saveLocalRecording": "Desa el fitxer de l'enregistrament en local (beta)",
|
||||
"serviceDescription": "El servei d'enregistrament desarà el vostre enregistrament",
|
||||
@@ -1227,7 +1227,7 @@
|
||||
"failedToStart": "No s'ha pogut iniciar la transcripció",
|
||||
"labelToolTip": "La reunió s'està transcrivint",
|
||||
"off": "La transcripció s'ha aturat",
|
||||
"pending": "S'està preparant per a enregistrar la reunió...",
|
||||
"pending": "S'està preparant per a enregistrar la reunió…",
|
||||
"sourceLanguageDesc": "La llengua actual de la reunió és <b>{{sourceLanguage}}</b>. <br/> Podeu canviar-la",
|
||||
"sourceLanguageHere": "aquí",
|
||||
"start": "Activa els subtítols",
|
||||
@@ -1237,16 +1237,7 @@
|
||||
"tr": "TR"
|
||||
},
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "Seleccioneu <b><i>Permet</i></b> si el navegador us sol·licita permisos.",
|
||||
"chromeGrantPermissions": "Seleccioneu <b><i>Permet</i></b> si el navegador us sol·licita permisos.",
|
||||
"edgeGrantPermissions": "Seleccioneu <b><i>Sí</i></b> si el navegador us sol·licita permisos.",
|
||||
"electronGrantPermissions": "S'està intentant accedir a la vostra càmera i micròfon",
|
||||
"firefoxGrantPermissions": "Seleccioneu <b><i>Comparteix l'aparell seleccionat</i></b> si el navegador us sol·licita permisos.",
|
||||
"iexplorerGrantPermissions": "Seleccioneu <b><i>D'acord</i></b> si el navegador us sol·licita permisos.",
|
||||
"nwjsGrantPermissions": "Concediu permisos per a usar la càmera i el micròfon",
|
||||
"operaGrantPermissions": "Seleccioneu <b><i>Permet</i></b> si el navegador us sol·licita permisos.",
|
||||
"react-nativeGrantPermissions": "Seleccioneu <b><i>Permet</i></b> si el navegador us sol·licita permisos.",
|
||||
"safariGrantPermissions": "Seleccioneu <b><i>D'acord</i></b> si el navegador us sol·licita permisos."
|
||||
"grantPermissions": "Concediu permisos per a usar la càmera i el micròfon."
|
||||
},
|
||||
"videoSIPGW": {
|
||||
"busy": "Treballem per a alliberar recursos. Torneu-ho a intentar en uns minuts.",
|
||||
@@ -1316,7 +1307,7 @@
|
||||
"image6": "Bosc",
|
||||
"image7": "Sortida de sol",
|
||||
"none": "Cap",
|
||||
"pleaseWait": "Espereu...",
|
||||
"pleaseWait": "Espereu…",
|
||||
"removeBackground": "Elimina el fons",
|
||||
"slightBlur": "Desenfocament lleu",
|
||||
"title": "Fons virtuals",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -83,7 +83,7 @@
|
||||
"GET_SESSION_ID_ERROR": "Hent session-id fejl: {{code}}",
|
||||
"GOT_SESSION_ID": "Henter session-ID… Udført",
|
||||
"LOW_BANDWIDTH": "Video for {{displayName}} er slået fra for at spare båndbredde",
|
||||
"RECONNECTING": "Et netværksproblem opstod. Forbinder igen..."
|
||||
"RECONNECTING": "Et netværksproblem opstod. Forbinder igen…"
|
||||
},
|
||||
"connectionindicator": {
|
||||
"address": "Adresse:",
|
||||
@@ -458,7 +458,7 @@
|
||||
"somebody": "Nogen",
|
||||
"startSilentDescription": "",
|
||||
"startSilentTitle": "",
|
||||
"suboptimalExperienceDescription": "Hmmm... vi er bange for at din oplevelse med {{appName}} ikke vil være optimal. Vi arbejder på at forbedre dette, men indtil da forsøg venligst at bruge en af følgende <a href='{{recommendedBrowserPageLink}}' target='_blank'>fuldt understøttede internet browsere</a>.",
|
||||
"suboptimalExperienceDescription": "Hmmm… vi er bange for at din oplevelse med {{appName}} ikke vil være optimal. Vi arbejder på at forbedre dette, men indtil da forsøg venligst at bruge en af følgende <a href='{{recommendedBrowserPageLink}}' target='_blank'>fuldt understøttede internet browsere</a>.",
|
||||
"suboptimalExperienceTitle": "Browser-advarsel",
|
||||
"unmute": ""
|
||||
},
|
||||
@@ -475,7 +475,7 @@
|
||||
"calling": "Ringer op…",
|
||||
"connected": "Forbundet",
|
||||
"connecting": "Forbinder…",
|
||||
"connecting2": "Forbinder*...",
|
||||
"connecting2": "Forbinder*…",
|
||||
"disconnected": "Forbindelse afbrudt",
|
||||
"expired": "Udløbet",
|
||||
"ignored": "Ignoreret",
|
||||
@@ -697,16 +697,7 @@
|
||||
"tr": "TR"
|
||||
},
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "Vælg <b><i> Tillad</i> </b>, når din browser beder om tilladelser",
|
||||
"chromeGrantPermissions": "Vælg <b><i> Tillad</i> </b>, når din browser beder om tilladelser",
|
||||
"edgeGrantPermissions": "Vælg <b><i>Ja</i> </b>, når din browser beder om tilladelser",
|
||||
"electronGrantPermissions": "Giv tilladelse til at dit kamera og din mikrofon benyttes",
|
||||
"firefoxGrantPermissions": "Vælg <b> <i> Del valgt enhed </i> </b>, når din browser beder om tilladelser",
|
||||
"iexplorerGrantPermissions": "Vælg <b><i>OK</i> </b>, når din browser beder om tilladelser",
|
||||
"nwjsGrantPermissions": "Giv tilladelse til at dit kamera og din mikrofon benyttes",
|
||||
"operaGrantPermissions": "Vælg <b><i> Tillad</i> </b>, når din browser beder om tilladelser",
|
||||
"react-nativeGrantPermissions": "Vælg <b><i> Tillad</i> </b>, når din browser beder om tilladelser",
|
||||
"safariGrantPermissions": "Vælg <b><i>OK</i> </b>, når din browser beder om tilladelser"
|
||||
"grantPermissions": "Giv tilladelse til at dit kamera og din mikrofon benyttes."
|
||||
},
|
||||
"videoSIPGW": {
|
||||
"busy": "Vi arbejder på at frigøre ressourcer. Prøv igen om et par minutter",
|
||||
|
||||
@@ -16,13 +16,13 @@
|
||||
"failedToAdd": "Fehler beim Hinzufügen von Personen",
|
||||
"googleEmail": "Google-E-Mail",
|
||||
"inviteMoreHeader": "Sie sind alleine in der Sitzung",
|
||||
"inviteMoreMailSubject": "An {{appName}} Meeting teilnehmen",
|
||||
"inviteMoreMailSubject": "An {{appName}} Konferenz teilnehmen",
|
||||
"inviteMorePrompt": "Mehr Leute einladen",
|
||||
"linkCopied": "Link in die Zwischenablage kopiert",
|
||||
"noResults": "Keine passenden Ergebnisse",
|
||||
"outlookEmail": "Outlook-E-Mail",
|
||||
"phoneNumbers": "Telefonnummern",
|
||||
"searching": "Suche...",
|
||||
"searching": "Suche…",
|
||||
"shareInvite": "Einladung zur Versammlung teilen",
|
||||
"shareLink": "Teilen Sie den Konferenzlink, um andere einzuladen",
|
||||
"shareStream": "Den Livestreaminglink freigeben",
|
||||
@@ -70,14 +70,14 @@
|
||||
"breakoutList": "Breakout-Liste",
|
||||
"buttonLabel": "Breakout-Räume",
|
||||
"defaultName": "Breakout-Raum #{{index}}",
|
||||
"hideParticipantList": "Teilnehmerliste ausblenden",
|
||||
"hideParticipantList": "Personenliste ausblenden",
|
||||
"mainRoom": "Hauptraum",
|
||||
"notifications": {
|
||||
"joined": "Breakout-Raum \"{{name}}\" betreten",
|
||||
"joinedMainRoom": "Hauptraum betreten",
|
||||
"joinedTitle": "Breakout-Räume"
|
||||
},
|
||||
"showParticipantList": "Teilnehmerliste anzeigen",
|
||||
"showParticipantList": "Personenliste anzeigen",
|
||||
"title": "Breakout-Räume"
|
||||
},
|
||||
"calendarSync": {
|
||||
@@ -89,10 +89,10 @@
|
||||
"notSignedIn": "Ein Fehler ist während der Authentifizierung zur Anzeige von Kalenderterminen aufgetreten. Prüfen Sie Ihre Kalendereinstellungen oder versuchen Sie, sich erneut anzumelden."
|
||||
},
|
||||
"join": "Teilnehmen",
|
||||
"joinTooltip": "Am Meeting teilnehmen",
|
||||
"joinTooltip": "An Konferenz teilnehmen",
|
||||
"nextMeeting": "Nächste Konferenz",
|
||||
"noEvents": "Es gibt keine bevorstehenden Termine.",
|
||||
"ongoingMeeting": "Laufendes Meeting",
|
||||
"ongoingMeeting": "Laufende Konferenz",
|
||||
"permissionButton": "Einstellungen öffnen",
|
||||
"permissionMessage": "Die App benötigt Zugriff auf den Kalender, um Termine und Konferenzen anzuzeigen.",
|
||||
"refresh": "Kalender aktualisieren",
|
||||
@@ -145,7 +145,7 @@
|
||||
"installExtensionText": "Installieren Sie die Erweiterung für die Integration von Google Calendar und Office 365"
|
||||
},
|
||||
"connectingOverlay": {
|
||||
"joiningRoom": "Eine Verbindung zu Ihrem Meeting wird hergestellt…"
|
||||
"joiningRoom": "Eine Verbindung zu Ihrer Konferenz wird hergestellt…"
|
||||
},
|
||||
"connection": {
|
||||
"ATTACHED": "Angehängt",
|
||||
@@ -215,7 +215,7 @@
|
||||
"downloadMobileApp": "Aus dem App Store herunterladen",
|
||||
"ifDoNotHaveApp": "Wenn Sie die App noch nicht haben:",
|
||||
"ifHaveApp": "Wenn Sie die App bereits haben:",
|
||||
"joinInApp": "Mit der App am Meeting teilnehmen",
|
||||
"joinInApp": "Mit der App an der Konferenz teilnehmen",
|
||||
"joinInAppNew": "Mit der App",
|
||||
"joinInBrowser": "Im Browser",
|
||||
"launchMeetingLabel": "Wie möchten Sie an der Konferenz teilnehmen?",
|
||||
@@ -225,7 +225,7 @@
|
||||
"or": "oder",
|
||||
"termsAndConditions": "Indem Sie fortfahren, stimmen Sie unseren <a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>Nutzungsbedingungen</a> zu.",
|
||||
"title": "Die Konferenz wird in {{app}} geöffnet …",
|
||||
"titleNew": "Konferenz starten ...",
|
||||
"titleNew": "Konferenz starten…",
|
||||
"tryAgainButton": "Erneut versuchen",
|
||||
"unsupportedBrowser": "Sie verwenden einen Browser, der noch nicht unterstützt wird."
|
||||
},
|
||||
@@ -258,7 +258,7 @@
|
||||
"dialog": {
|
||||
"Back": "Zurück",
|
||||
"Cancel": "Abbrechen",
|
||||
"IamHost": "Ich leite das Meeting",
|
||||
"IamHost": "Ich leite die Konferenz",
|
||||
"Ok": "OK",
|
||||
"Remove": "Entfernen",
|
||||
"Share": "Teilen",
|
||||
@@ -317,7 +317,7 @@
|
||||
"e2eeLabel": "Ende-zu-Ende-Verschlüsselung aktivieren",
|
||||
"e2eeWarning": "WARNUNG: Nicht alle Personen dieser Konferenz scheinen Ende-zu-Ende-Verschlüsselung zu unterstützen. Wenn Sie diese aktivieren, können die entsprechenden Personen nichts mehr sehen oder hören.",
|
||||
"e2eeWillDisableDueToMaxModeDescription": "WARNUNG: Ende-zu-Ende-Verschlüsselung wird automatisch deaktiviert, wenn weitere Anwesende an der Konferenz teilnehmen.",
|
||||
"embedMeeting": "Besprechung einbetten",
|
||||
"embedMeeting": "Konferenz einbetten",
|
||||
"enterDisplayName": "Bitte geben Sie hier Ihren Namen ein",
|
||||
"error": "Fehler",
|
||||
"errorRoomCreationRestriction": "Sie haben versucht, zu schnell beizutreten, bitte versuchen Sie es gleich noch einmal.",
|
||||
@@ -334,7 +334,8 @@
|
||||
"kickParticipantButton": "Entfernen",
|
||||
"kickParticipantDialog": "Wollen Sie diese Person wirklich entfernen?",
|
||||
"kickParticipantTitle": "Person entfernen?",
|
||||
"kickTitle": "Autsch! {{participantDisplayName}} hat Sie aus dem Meeting geworfen",
|
||||
"kickSystemTitle": "Autsch! Sie wurden aus der Konferenz geworfen",
|
||||
"kickTitle": "Autsch! {{participantDisplayName}} hat Sie aus der Konferenz geworfen",
|
||||
"linkMeeting": "Konferenz verlinken",
|
||||
"linkMeetingTitle": "Konferenz mit Salesforce verlinken",
|
||||
"liveStreaming": "Livestreaming",
|
||||
@@ -362,18 +363,18 @@
|
||||
"muteEveryoneDialogModerationOn": "Die Anwesenden können eine Anfrage zum Sprechen jederzeit senden.",
|
||||
"muteEveryoneElseDialog": "Einmal stummgeschaltet, können Sie deren Stummschaltung nicht mehr beenden, aber sie können ihre Stummschaltung jederzeit selbst beenden.",
|
||||
"muteEveryoneElseTitle": "Alle außer {{whom}} stummschalten?",
|
||||
"muteEveryoneElsesVideoDialog": "Sobald die Kamera deaktiviert ist, können Sie sie nicht wieder aktivieren, die Teilnehmer können dies aber jederzeit wieder ändern.",
|
||||
"muteEveryoneElsesVideoDialog": "Sobald die Kamera für alle anderen Personen deaktiviert ist, können Sie diese nicht wieder für alle einschalten, die anderen Personen können ihre Kamera aber jederzeit wieder einschalten.",
|
||||
"muteEveryoneElsesVideoTitle": "Die Kamera von allen außer {{whom}} ausschalten?",
|
||||
"muteEveryoneSelf": "sich selbst",
|
||||
"muteEveryoneStartMuted": "Alle beginnen von jetzt an stummgeschaltet",
|
||||
"muteEveryoneTitle": "Alle stummschalten?",
|
||||
"muteEveryonesVideoDialog": "Sind Sie sicher, dass Sie die Kamera von allen Teilnehmern deaktivieren möchten? Sie können sie nicht wieder aktivieren, die Teilnehmer können dies aber jederzeit wieder ändern.",
|
||||
"muteEveryonesVideoDialog": "Sind Sie sicher, dass Sie die Kamera von allen Personen deaktivieren möchten? Sie können dies nicht wieder rückgängig machen, jede Personen kann ihre Kamera aber jederzeit wieder einschalten.",
|
||||
"muteEveryonesVideoDialogModerationOn": "Die Anwesenden können jederzeit eine Anfrage senden, um ihre Kamera einzuschalten.",
|
||||
"muteEveryonesVideoDialogOk": "deaktivieren",
|
||||
"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",
|
||||
"muteParticipantsVideoBody": "Sie können die Kamera nicht wieder aktivieren, die Teilnehmer können dies aber jederzeit wieder ändern.",
|
||||
"muteParticipantsVideoBody": "Sie können die Kamera nicht wieder einschalten, die Person kann ihre Kamera aber jederzeit wieder einschalten.",
|
||||
"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.",
|
||||
@@ -381,7 +382,7 @@
|
||||
"muteParticipantsVideoTitle": "Die Kamera von dieser Person ausschalten?",
|
||||
"noDropboxToken": "Kein gültiges Dropbox-Token",
|
||||
"password": "Passwort",
|
||||
"passwordLabel": "Dieses Meeting wurde gesichert. Bitte geben Sie das $t(lockRoomPasswordUppercase) ein, um dem Meeting beizutreten.",
|
||||
"passwordLabel": "Diese Konferenz wurde gesichert. Bitte geben Sie das $t(lockRoomPasswordUppercase) ein, um der Konferenz beizutreten.",
|
||||
"passwordNotSupported": "Das Festlegen eines Konferenzpassworts wird nicht unterstützt.",
|
||||
"passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) nicht unterstützt",
|
||||
"passwordRequired": "$t(lockRoomPasswordUppercase) erforderlich",
|
||||
@@ -439,7 +440,10 @@
|
||||
"shareScreenWarningD2": "müssen Sie Ihre Audiofreigabe stoppen und dann die Bildschirmfreigabe mit der Option \"Audio freigeben\" starten.",
|
||||
"shareScreenWarningH1": "Wenn Sie Ihren Bildschirm freigeben wollen:",
|
||||
"shareScreenWarningTitle": "Sie müssen die Audiofreigabe beenden, bevor Sie den Bildschirm freigeben können",
|
||||
"shareVideoConfirmPlay": "Sie öffnen dazu eine externe Seite. Möchten Sie fortfahren?",
|
||||
"shareVideoConfirmPlayTitle": "{{name}} hat mit Ihnen ein Video geteilt.",
|
||||
"shareVideoLinkError": "Bitte einen gültigen Link angeben.",
|
||||
"shareVideoLinkStopped": "Das Video von {{name}} wurde gestoppt.",
|
||||
"shareVideoTitle": "Video teilen",
|
||||
"shareYourScreen": "Bildschirmfreigabe ein-/ausschalten",
|
||||
"shareYourScreenDisabled": "Bildschirmfreigabe deaktiviert.",
|
||||
@@ -552,13 +556,13 @@
|
||||
"invitePhone": "Wenn Sie stattdessen per Telefon beitreten möchten, wählen sie: {{number}},,{{conferenceID}}#\n",
|
||||
"invitePhoneAlternatives": "Suchen Sie nach einer anderen Einwahlnummer ?\nEinwahlnummern der Konferenz anzeigen: {{url}}\n\n\nWenn Sie sich auch über ein Raumtelefon einwählen, nehmen Sie teil, ohne sich mit dem Ton zu verbinden: {{silentUrl}}",
|
||||
"inviteSipEndpoint": "Um mit SIP teilzunehmen, folgende Adresse nutzen: {{sipUri}}",
|
||||
"inviteTextiOSInviteUrl": "Am Meeting teilnehmen: {{inviteUrl}}.",
|
||||
"inviteTextiOSInviteUrl": "An Konferenz teilnehmen: {{inviteUrl}}.",
|
||||
"inviteTextiOSJoinSilent": "Wenn Sie über ein Konferenztelefon teilnehmen, können Sie diesen Link nutzen um ohne Ton an der Konferenz teilzunehmen: {{silentUrl}}.",
|
||||
"inviteTextiOSPersonal": "{{name}} lädt Sie zu einem Meeting ein.",
|
||||
"inviteTextiOSPersonal": "{{name}} lädt Sie zu einer Konferenz ein.",
|
||||
"inviteTextiOSPhone": "Nutzen Sie folgende Nummer um via Telefon teilzunehmen: {{number}},,{{conferenceID}}#. Wenn Sie nach einer anderen Einwahlnummer suchen, finden Sie die vollständige Liste hier: {{didUrl}}.",
|
||||
"inviteURLFirstPartGeneral": "Sie wurden zur Teilnahme an einem Meeting eingeladen.",
|
||||
"inviteURLFirstPartPersonal": "{{name}} lädt Sie zu einem Meeting ein.\n",
|
||||
"inviteURLSecondPart": "\nAm Meeting teilnehmen:\n{{url}}\n",
|
||||
"inviteURLFirstPartGeneral": "Sie wurden zur Teilnahme an einer Konferenz eingeladen.",
|
||||
"inviteURLFirstPartPersonal": "{{name}} lädt Sie zu einer Konferenz ein.\n",
|
||||
"inviteURLSecondPart": "\nAn Konferenz teilnehmen:\n{{url}}\n",
|
||||
"label": "Einwahlinformationen",
|
||||
"liveStreamURL": "Livestream:",
|
||||
"moreNumbers": "Weitere Telefonnummern",
|
||||
@@ -572,7 +576,7 @@
|
||||
"sip": "SIP-Adresse",
|
||||
"sipAudioOnly": "SIP-Adresse (nur Ton)",
|
||||
"title": "Teilen",
|
||||
"tooltip": "Freigabe-Link und Einwahlinformationen für dieses Meeting",
|
||||
"tooltip": "Freigabe-Link und Einwahlinformationen für diese Konferenz",
|
||||
"upgradeOptions": "Bitte prüfen Sie Ihre Upgrade-Optionen auf",
|
||||
"whiteboardError": "Whiteboard konnte nicht geladen werden. Bitte versuchen Sie es später erneut."
|
||||
},
|
||||
@@ -624,7 +628,7 @@
|
||||
"errorAPI": "Beim Abrufen der YouTube-Livestreams ist ein Fehler aufgetreten. Bitte versuchen Sie, sich erneut anzumelden.",
|
||||
"errorLiveStreamNotEnabled": "Livestreaming ist für {{email}} nicht aktiviert. Aktivieren Sie das Livestreaming oder melden Sie sich bei einem Konto mit aktiviertem Livestreaming an.",
|
||||
"expandedOff": "Livestream wurde angehalten",
|
||||
"expandedOn": "Das Meeting wird momentan an YouTube gestreamt.",
|
||||
"expandedOn": "Die Konferenz wird momentan an YouTube gestreamt.",
|
||||
"expandedPending": "Livestream wird gestartet …",
|
||||
"failedToStart": "Livestream konnte nicht gestartet werden",
|
||||
"getStreamKeyManually": "Wir waren nicht in der Lage, Livestreams abzurufen. Versuchen Sie, Ihren Livestream-Schlüssel von YouTube zu erhalten.",
|
||||
@@ -638,6 +642,7 @@
|
||||
"on": "Livestream",
|
||||
"onBy": "{{name}} startete den Livestream",
|
||||
"pending": "Livestream wird gestartet …",
|
||||
"policyError": "Sie haben den Livestream zu schnell gestartet. Bitte versuchen Sie es später noch einmal!",
|
||||
"serviceName": "Livestreaming-Dienst",
|
||||
"sessionAlreadyActive": "Diese Konferenz wird bereits als Livestream übertragen.",
|
||||
"signIn": "Mit Google anmelden",
|
||||
@@ -728,14 +733,17 @@
|
||||
"me": "ich",
|
||||
"notify": {
|
||||
"OldElectronAPPTitle": "Sicherheitslücke!",
|
||||
"allowAction": "Erlauben",
|
||||
"allowAudio": "Mikrofon einschalten",
|
||||
"allowBoth": "Beides",
|
||||
"allowVideo": "Kamera einschalten",
|
||||
"allowedUnmute": "Sie können die Stummschaltung aufheben, Ihre Kamera einschalten oder Ihren Bildschirm teilen.",
|
||||
"audioUnmuteBlockedDescription": "Díe Stummschaltung kann aus Überlastungsschutzgründen temporär nicht aufgehoben werden.",
|
||||
"audioUnmuteBlockedTitle": "Stummschaltung kann nicht aufgehoben werden!",
|
||||
"chatMessages": "Chatnachrichten",
|
||||
"connectedOneMember": "{{name}} nimmt am Meeting teil",
|
||||
"connectedThreePlusMembers": "{{name}} und {{count}} andere Personen nehmen am Meeting teil",
|
||||
"connectedTwoMembers": "{{first}} und {{second}} nehmen am Meeting teil",
|
||||
"connectedOneMember": "{{name}} nimmt an der Konferenz teil",
|
||||
"connectedThreePlusMembers": "{{name}} und {{count}} andere Personen nehmen an der Konferenz teil",
|
||||
"connectedTwoMembers": "{{first}} und {{second}} nehmen an der Konferenz teil",
|
||||
"connectionFailed": "Verbindung fehlgeschlagen. Bitte versuchen Sie es später noch einmal!",
|
||||
"dataChannelClosed": "Schlechte Videoqualität",
|
||||
"dataChannelClosedDescription": "Die Steuerungsverbindung (Bridge Channel) wurde unterbrochen, daher ist die Videoqulität auf die schlechteste Stufe limitiert.",
|
||||
"dataChannelClosedDescriptionWithAudio": "Die Steuerungsverbindung (Bridge Channel) wurde unterbrochen, daher können Video- und Tonprobleme auftreten.",
|
||||
@@ -750,6 +758,9 @@
|
||||
"gifsMenu": "GIPHY",
|
||||
"groupTitle": "Benachrichtigungen",
|
||||
"hostAskedUnmute": "Die Moderation bittet Sie, das Mikrofon zu aktivieren",
|
||||
"invalidTenant": "Ungültiger Mandant",
|
||||
"invalidTenantHyphenDescription": "Der gewählte Mandantenname ist ungültig (beginnt oder endet mit '-').",
|
||||
"invalidTenantLengthDescription": "Der gewählte Mandantenname ist zu lang.",
|
||||
"invitedOneMember": "{{name}} wurde eingeladen",
|
||||
"invitedThreePlusMembers": "{{name}} und {{count}} andere wurden eingeladen",
|
||||
"invitedTwoMembers": "{{first}} und {{second}} wurden eingeladen",
|
||||
@@ -762,7 +773,7 @@
|
||||
"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...",
|
||||
"linkToSalesforceProgress": "Konferenz wird mit Salesforce verlinkt…",
|
||||
"linkToSalesforceSuccess": "Die Konferenz wurde mit Salesforce verlinkt",
|
||||
"localRecordingStarted": "{{name}} hat eine lokale Aufzeichnung gestartet.",
|
||||
"localRecordingStopped": "{{name}} hat eine lokale Aufzeichnung gestoppt.",
|
||||
@@ -780,12 +791,13 @@
|
||||
"moderationToggleDescription": "von {{participantDisplayName}}",
|
||||
"moderator": "Moderationsrechte vergeben!",
|
||||
"muted": "Der Konferenz wurde stumm beigetreten.",
|
||||
"mutedRemotelyDescription": "Sie können jederzeit die Stummschaltung aufheben, wenn Sie bereit sind zu sprechen. Wenn Sie fertig sind, können Sie sich wieder stummschalten, um Geräusche vom Meeting fernzuhalten.",
|
||||
"mutedRemotelyDescription": "Sie können jederzeit die Stummschaltung aufheben, wenn Sie bereit sind zu sprechen. Wenn Sie fertig sind, können Sie sich wieder stummschalten, um Geräusche von der Konferenz fernzuhalten.",
|
||||
"mutedRemotelyTitle": "Sie wurden von {{participantDisplayName}} stummgeschaltet!",
|
||||
"mutedTitle": "Stummschaltung aktiv!",
|
||||
"newDeviceAction": "Verwenden",
|
||||
"newDeviceAudioTitle": "Neues Audiogerät erkannt",
|
||||
"newDeviceCameraTitle": "Neue Kamera erkannt",
|
||||
"nextToSpeak": "Sie sind als Nächstes an der Reihe zu sprechen",
|
||||
"noiseSuppressionDesktopAudioDescription": "Die Rauschunterdrückung kann nicht genutzt werden, wenn der Computersound geteilt wird, bitte zuerst deaktivieren und dann nochmals versuchen.",
|
||||
"noiseSuppressionFailedTitle": "Rauschunterdrückung konnte nicht gestartet werden",
|
||||
"noiseSuppressionStereoDescription": "Rauschunterdrückung unterstützt aktuell keinen Stereoton.",
|
||||
@@ -807,7 +819,7 @@
|
||||
"screenSharingAudioOnlyTitle": "Modus \"Beste Leistung\"",
|
||||
"selfViewTitle": "Sie können die eigene Ansicht immer in den Einstellungen reaktivieren",
|
||||
"somebody": "Jemand",
|
||||
"startSilentDescription": "Treten Sie dem Meeting noch einmal bei, um Ihr Audio zu aktivieren",
|
||||
"startSilentDescription": "Treten Sie der Konferenz noch einmal bei, um Ihr Audio zu aktivieren",
|
||||
"startSilentTitle": "Sie sind ohne Audioausgabe beigetreten!",
|
||||
"suboptimalBrowserWarning": "Tut uns leid, aber die Konferenz wird mit {{appName}} kein großartiges Erlebnis. Wir versuchen immer die Situation zu verbessern, bis dahin empfehlen wir aber die Verwendung einer der <a href=\"{{recommendedBrowserPageLink}}\" target=\"_blank\">vollständig unterstützen Browser</a>.",
|
||||
"suboptimalExperienceTitle": "Browserwarnung",
|
||||
@@ -815,13 +827,17 @@
|
||||
"suggestRecordingDescription": "Möchten Sie eine Aufzeichnung starten?",
|
||||
"suggestRecordingTitle": "Konferenz aufzeichnen",
|
||||
"unmute": "Stummschaltung aufheben",
|
||||
"unmuteVideo": "Kamera einschalten",
|
||||
"videoMutedRemotelyDescription": "Sie können sie jederzeit wieder einschalten.",
|
||||
"videoMutedRemotelyTitle": "Ihre Kamera wurde von {{participantDisplayName}} ausgeschaltet!",
|
||||
"videoUnmuteBlockedDescription": "Die Kamera und Bildschirmfreigabe kann aus Überlastungsschutzgründen temporär nicht eingeschaltet werden.",
|
||||
"videoUnmuteBlockedTitle": "Kamera und Bildschirmfreigabe kann nicht aktiviert werden!",
|
||||
"viewLobby": "Lobby ansehen",
|
||||
"viewParticipants": "Personen anzeigen",
|
||||
"viewVisitors": "Gäste anzeigen",
|
||||
"waitingParticipants": "{{waitingParticipants}} Personen",
|
||||
"waitingVisitors": "In der Lobby wartende Gäste: {{waitingVisitors}}",
|
||||
"waitingVisitorsTitle": "Die Konferenz wurde noch nicht gestartet!",
|
||||
"whiteboardLimitDescription": "Bitte speichern Sie Ihre Inhalte, da das Nutzungslimit bald erreicht wird und dann Ihr Whiteboard geschlossen wird.",
|
||||
"whiteboardLimitTitle": "Whiteboard-Nutzung"
|
||||
},
|
||||
@@ -835,7 +851,10 @@
|
||||
"audioModeration": "Für sich selbst die Stummschaltung aufzuheben",
|
||||
"blockEveryoneMicCamera": "Kamera und Mikrofon von allen sperren",
|
||||
"breakoutRooms": "Breakout-Räume",
|
||||
"goLive": "Live gehen",
|
||||
"invite": "Person einladen",
|
||||
"lowerAllHands": "Alle Hände senken",
|
||||
"lowerHand": "Hand senken",
|
||||
"moreModerationActions": "Weitere Moderationsoptionen",
|
||||
"moreModerationControls": "Weitere Moderationsoptionen",
|
||||
"moreParticipantOptions": "Mehr Optionen für Anwesende",
|
||||
@@ -852,6 +871,7 @@
|
||||
"headings": {
|
||||
"lobby": "Lobby ({{count}})",
|
||||
"participantsList": "Anwesende ({{count}})",
|
||||
"visitorInQueue": " (Wartende Gäste {{count}})",
|
||||
"visitorRequests": " (Anfragen {{count}})",
|
||||
"visitors": "Gäste ({{count}})",
|
||||
"waitingLobby": "In der Lobby ({{count}})"
|
||||
@@ -865,10 +885,13 @@
|
||||
"pinnedParticipant": "Die Person ist angeheftet",
|
||||
"polls": {
|
||||
"answer": {
|
||||
"edit": "Bearbeiten",
|
||||
"send": "Senden",
|
||||
"skip": "Überspringen",
|
||||
"submit": "Speichern"
|
||||
},
|
||||
"by": "Von {{ name }}",
|
||||
"closeButton": "Umfrage schließen",
|
||||
"create": {
|
||||
"addOption": "Antwort hinzufügen",
|
||||
"answerPlaceholder": "Antwort {{index}}",
|
||||
@@ -878,7 +901,8 @@
|
||||
"pollQuestion": "Frage",
|
||||
"questionPlaceholder": "Eine Frage stellen",
|
||||
"removeOption": "Antwort entfernen",
|
||||
"send": "Erstellen"
|
||||
"save": "Erstellen",
|
||||
"send": "Senden"
|
||||
},
|
||||
"errors": {
|
||||
"notUniqueOption": "Optionen müssen einzigartig sein"
|
||||
@@ -907,9 +931,11 @@
|
||||
"configuringDevices": "Geräte werden eingerichtet …",
|
||||
"connectedWithAudioQ": "Sie sind mit Audio verbunden?",
|
||||
"connection": {
|
||||
"failed": "Verbindungstest fehlgeschlagen!",
|
||||
"good": "Ihre Internetverbindung sieht gut aus!",
|
||||
"nonOptimal": "Ihre Internetverbindung ist nicht optimal.",
|
||||
"poor": "Sie haben eine schlechte Internetverbindung."
|
||||
"poor": "Sie haben eine schlechte Internetverbindung.",
|
||||
"running": "Verbindung wird getestet…"
|
||||
},
|
||||
"connectionDetails": {
|
||||
"audioClipping": "Ihr Ton wird wahrscheinlich abgehackt sein.",
|
||||
@@ -918,6 +944,7 @@
|
||||
"goodQuality": "Großartig! Ihre Bild- und Tonqualität sollte super sein.",
|
||||
"noMediaConnectivity": "Es konnte für diesen Test keine Medienverbindung hergestellt werden. Das wird gewöhnlich durch eine Firewall oder ein NAT ausgelöst.",
|
||||
"noVideo": "Ihr Bild wird wahrscheinlich eine schlechte Qualität haben.",
|
||||
"testFailed": "Der Verbindungstest ist fehlgeschlagen, dies beeinträchtigt evtl. Ihre Qualität.",
|
||||
"undetectable": "Wenn Sie mit Ihrem Browser weiterhin Probleme in Konferenzen haben, sollten Sie die Verbindung und Funktion Ihrer Lautsprecher, Ihres Mikrofons und Ihrer Kamera überprüfen. Stellen Sie außerdem sicher, dass Ihr Browser die erforderlichen Rechte hat, auf das Mikrofon und die Kamera zuzugreifen, und dass Sie die neuste Browserversion installiert haben. Sollten Sie immer noch Probleme haben, kontaktieren Sie bitte den Support der Webanwendung.",
|
||||
"veryPoorConnection": "Ihre Konferenzqualität wird wahrscheinlich sehr schlecht sein.",
|
||||
"videoFreezing": "Ihr Bild wird wahrscheinlich einfrieren, schwarz werden und eine geringe Auflösung haben.",
|
||||
@@ -1004,7 +1031,7 @@
|
||||
"error": "Die Aufzeichnung ist fehlgeschlagen. Bitte versuchen Sie es erneut.",
|
||||
"errorFetchingLink": "Der Link zur Aufzeichnung konnte nicht geladen werden.",
|
||||
"expandedOff": "Aufzeichnung wurde gestoppt",
|
||||
"expandedOn": "Das Meeting wird momentan aufgezeichnet.",
|
||||
"expandedOn": "Die Konferenz wird momentan aufgezeichnet.",
|
||||
"expandedPending": "Aufzeichnung wird gestartet…",
|
||||
"failedToStart": "Die Aufnahme konnte nicht gestartet werden",
|
||||
"fileSharingdescription": "Aufzeichnung mit den Personen der Konferenz teilen",
|
||||
@@ -1012,7 +1039,7 @@
|
||||
"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.",
|
||||
"highlightMomentSucessDescription": "Ihr festgehaltener Moment wird zur Zusammenfassung der Konferenz 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>.",
|
||||
@@ -1032,7 +1059,8 @@
|
||||
"on": "Aufnahme",
|
||||
"onBy": "{{name}} startete die Aufnahme",
|
||||
"onlyRecordSelf": "Nur eigenes Kamerabild und Ton aufzeichnen",
|
||||
"pending": "Aufzeichnung des Meetings wird vorbereitet…",
|
||||
"pending": "Aufzeichnung der Konferenz wird vorbereitet…",
|
||||
"policyError": "Sie haben die Aufzeichnung zu schnell gestartet. Bitte versuchen Sie es später noch einmal.",
|
||||
"recordAudioAndVideo": "Kamera und Ton aufzeichnen",
|
||||
"recordTranscription": "Transkription aufzeichnen",
|
||||
"saveLocalRecording": "Aufzeichnung lokal abspeichern",
|
||||
@@ -1055,10 +1083,10 @@
|
||||
"pullToRefresh": "Ziehen, um zu aktualisieren"
|
||||
},
|
||||
"security": {
|
||||
"about": "Sie können Ihre Konferenz mit einem Passwort sichern. Teilnehmer müssen dieses eingeben, bevor sie an der Sitzung teilnehmen dürfen.",
|
||||
"about": "Sie können Ihre Konferenz mit einem Passwort sichern. Personen müssen dieses eingeben, bevor sie an der Sitzung teilnehmen dürfen.",
|
||||
"aboutReadOnly": "Mit Moderationsrechten kann die Konferenz mit einem Passwort gesichert werden. Personen müssen dieses eingeben, bevor sie an der Sitzung teilnehmen dürfen.",
|
||||
"insecureRoomNameWarningNative": "Der Raumname ist unsicher. Unerwünschte Teilnehmer könnten Ihrer Konferenz beitreten. {{recommendAction}} Lernen Sie mehr über die Absicherung Ihrer Konferenz ",
|
||||
"insecureRoomNameWarningWeb": "Der Raumname ist unsicher. Unerwünschte Teilnehmer könnten Ihrer Konferenz beitreten {{recommendAction}} Lernen Sie <a href=\"{{securityUrl}}\" rel=\"security\" target=\"_blank\">hier</a> mehr über die Absicherung Ihrer Konferenz.",
|
||||
"insecureRoomNameWarningNative": "Der Raumname ist unsicher. Unerwünschte Personen könnten Ihrer Konferenz beitreten. {{recommendAction}} Lernen Sie mehr über die Absicherung Ihrer Konferenz ",
|
||||
"insecureRoomNameWarningWeb": "Der Raumname ist unsicher. Unerwünschte Personen könnten Ihrer Konferenz beitreten {{recommendAction}} Lernen Sie <a href=\"{{securityUrl}}\" rel=\"security\" target=\"_blank\">hier</a> mehr über die Absicherung Ihrer Konferenz.",
|
||||
"title": "Sicherheitsoptionen",
|
||||
"unsafeRoomActions": {
|
||||
"meeting": "Erwägen Sie die Absicherung Ihrer Konferenz über den Sicherheits-Button.",
|
||||
@@ -1081,6 +1109,7 @@
|
||||
"desktopShareWarning": "Sie müssen die Bildschirmfreigabe neustarten, damit die Einstellung übernommen wird.",
|
||||
"devices": "Geräte",
|
||||
"followMe": "Follow-me für alle Personen",
|
||||
"followMeRecorder": "Aufnahme folgt mir",
|
||||
"framesPerSecond": "FPS",
|
||||
"incomingMessage": "Eingehende Nachricht",
|
||||
"language": "Sprache",
|
||||
@@ -1146,8 +1175,8 @@
|
||||
"version": "Version"
|
||||
},
|
||||
"share": {
|
||||
"dialInfoText": "\n\n=====\n\nWollen Sie sich nur auf Ihrem Telefon einwählen?\n\n{{defaultDialInNumber}}Klicken Sie auf diesen Link, um die eingewählten Telefonnummern für dieses Meeting zu sehen\n{{dialInfoPageUrl}}",
|
||||
"mainText": "Klicken Sie auf den folgenden Link, um dem Meeting beizutreten:\n{{roomUrl}}"
|
||||
"dialInfoText": "\n\n=====\n\nWollen Sie sich nur auf Ihrem Telefon einwählen?\n\n{{defaultDialInNumber}}Klicken Sie auf diesen Link, um die eingewählten Telefonnummern für diese Konferenz zu sehen\n{{dialInfoPageUrl}}",
|
||||
"mainText": "Klicken Sie auf den folgenden Link, um der Konferenz beizutreten:\n{{roomUrl}}"
|
||||
},
|
||||
"speaker": "Sprecher/-in",
|
||||
"speakerStats": {
|
||||
@@ -1157,6 +1186,7 @@
|
||||
"fearful": "Ängstlich",
|
||||
"happy": "Fröhlich",
|
||||
"hours": "{{count}} Std. ",
|
||||
"labelTooltip": "Anzahl der Personen: {{count}}",
|
||||
"minutes": "{{count}} Min. ",
|
||||
"name": "Name",
|
||||
"neutral": "Neutral",
|
||||
@@ -1227,6 +1257,7 @@
|
||||
"lobbyButton": "Lobbymodus ein-/ausschalten",
|
||||
"localRecording": "Lokale Aufzeichnungssteuerelemente ein-/ausschalten",
|
||||
"lockRoom": "Konferenzpasswort ein-/ausschalten",
|
||||
"love": "Herz",
|
||||
"lowerHand": "Hand senken",
|
||||
"moreActions": "Menü „Weitere Einstellungen“ ein-/ausschalten",
|
||||
"moreActionsMenu": "Menü „Weitere Einstellungen“",
|
||||
@@ -1244,6 +1275,7 @@
|
||||
"privateMessage": "Private Nachricht senden",
|
||||
"profile": "Profil bearbeiten",
|
||||
"raiseHand": "Hand heben",
|
||||
"react": "Chat-Interaktionen",
|
||||
"reactions": "Interaktionen",
|
||||
"reactionsMenu": "Interaktionsmenü öffnen / schließen",
|
||||
"recording": "Aufzeichnung ein-/ausschalten",
|
||||
@@ -1315,6 +1347,7 @@
|
||||
"lobbyButtonEnable": "Lobbymodus aktivieren",
|
||||
"login": "Anmelden",
|
||||
"logout": "Abmelden",
|
||||
"love": "Herz",
|
||||
"lowerYourHand": "Hand senken",
|
||||
"moreActions": "Weitere Einstellungen",
|
||||
"moreOptions": "Weitere Optionen",
|
||||
@@ -1340,6 +1373,7 @@
|
||||
"raiseYourHand": "Melden",
|
||||
"reactionBoo": "Buhen senden",
|
||||
"reactionClap": "Klatschen senden",
|
||||
"reactionHeart": "Herz senden",
|
||||
"reactionLaugh": "Lachen senden",
|
||||
"reactionLike": "Daumen hoch senden",
|
||||
"reactionSilence": "Stille senden",
|
||||
@@ -1365,7 +1399,7 @@
|
||||
"tileViewToggle": "Kachelansicht ein-/ausschalten",
|
||||
"toggleCamera": "Kamera wechseln",
|
||||
"unmute": "Stummschaltung aufheben",
|
||||
"videoSettings": "Kameraeinstellungen",
|
||||
"videoSettings": "Kamera-Einstellungen",
|
||||
"videomute": "Kamera stoppen",
|
||||
"videomuteGUMPending": "Verbinde Ihre Kamera",
|
||||
"videounmute": "Kamera einschalten"
|
||||
@@ -1373,8 +1407,8 @@
|
||||
"transcribing": {
|
||||
"ccButtonTooltip": "Untertitel ein-/ausschalten",
|
||||
"expandedLabel": "Transkribieren ist derzeit eingeschaltet",
|
||||
"failedToStart": "Transkribieren konnte nicht gestartet werden",
|
||||
"labelToolTip": "Das Meeting wird transkribiert",
|
||||
"failed": "Transkribieren fehlgeschlagen",
|
||||
"labelToolTip": "Die Konferenz wird transkribiert",
|
||||
"sourceLanguageDesc": "Aktuell ist die Sprache der Konferenz auf <b>{{sourceLanguage}}</b> eingestellt. <br/> Sie könne dies hier ",
|
||||
"sourceLanguageHere": "ändern",
|
||||
"start": "Anzeige der Untertitel starten",
|
||||
@@ -1385,16 +1419,7 @@
|
||||
},
|
||||
"unpinParticipant": "{{participantName}} - Nicht mehr anheften",
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "Wählen Sie <b><i>Zulassen</i></b>, wenn der Browser um Berechtigungen bittet.",
|
||||
"chromeGrantPermissions": "Wählen Sie <b><i>Zulassen</i></b>, wenn der Browser um Berechtigungen bittet.",
|
||||
"edgeGrantPermissions": "Wählen Sie <b><i>Ja</i></b>, wenn der Browser um Berechtigungen bittet.",
|
||||
"electronGrantPermissions": "Bitte Berechtigungen zur Verwendung der Kamera und des Mikrofons erteilen",
|
||||
"firefoxGrantPermissions": "Wählen Sie <b><i>Erlauben</i></b>, wenn der Browser um Berechtigungen bittet.",
|
||||
"iexplorerGrantPermissions": "Wählen Sie <b><i>OK</i></b>, wenn der Browser um Berechtigungen bittet.",
|
||||
"nwjsGrantPermissions": "Bitte Berechtigungen zur Verwendung der Kamera und des Mikrofons erteilen",
|
||||
"operaGrantPermissions": "Wählen Sie <b><i>Zulassen</i></b>, wenn der Browser um Berechtigungen bittet.",
|
||||
"react-nativeGrantPermissions": "Wählen Sie <b><i>Erlauben</i></b>, wenn der Browser um Berechtigungen bittet.",
|
||||
"safariGrantPermissions": "Wählen Sie <b><i>OK</i></b>, wenn der Browser um Berechtigungen bittet."
|
||||
"grantPermissions": "Bitte Berechtigungen zur Verwendung der Kamera und des Mikrofons erteilen."
|
||||
},
|
||||
"videoSIPGW": {
|
||||
"busy": "Es stehen keine freien Ressourcen zur Verfügung. Bitte versuchen Sie es später noch einmal.",
|
||||
@@ -1473,7 +1498,7 @@
|
||||
"image6": "Wald",
|
||||
"image7": "Sonnenaufgang",
|
||||
"none": "keiner",
|
||||
"pleaseWait": "Bitte warten...",
|
||||
"pleaseWait": "Bitte warten…",
|
||||
"removeBackground": "Hintergrund entfernen",
|
||||
"slightBlur": "Hintergrund leicht unscharf",
|
||||
"title": "Hintergründe",
|
||||
@@ -1483,16 +1508,22 @@
|
||||
},
|
||||
"visitors": {
|
||||
"chatIndicator": "(Gast)",
|
||||
"joinMeeting": {
|
||||
"description": "Sie beobachten derzeit diese Konferenz.",
|
||||
"raiseHand": "Hand heben",
|
||||
"title": "Konferenz wird beigetreten",
|
||||
"wishToSpeak": "Wenn Sie sprechen möchten, heben Sie bitte unten Ihre Hand und warten Sie auf die Zustimmung der Moderation"
|
||||
},
|
||||
"labelTooltip": "Anzahl Gäste: {{count}}",
|
||||
"notification": {
|
||||
"demoteDescription": "Hierhin verschoben von {{actor}}, bitte melden Sie sich um teilzunehmen",
|
||||
"description": "Bitte melden Sie sich um teilzunehmen",
|
||||
"noMainParticipantsDescription": "Eine Person muss die Konferenz starten. Bitte versuchen Sie es gleich noch einmal.",
|
||||
"noMainParticipantsTitle": "Diese Konferenz wurde noch nicht gestartet.",
|
||||
"noVisitorLobby": "Sie können nicht teilnehmen, solange die Lobby für diese Konferenz aktiviert ist.",
|
||||
"notAllowedPromotion": "Eine Person muss Ihre Anfrage erst erlauben.",
|
||||
"title": "Sie sind Gast in der Konferenz"
|
||||
}
|
||||
},
|
||||
"waitingMessage": "Sie werden der Konferenz beitreten, sobald sie gestartet ist!"
|
||||
},
|
||||
"volumeSlider": "Lautstärkeregler",
|
||||
"welcomepage": {
|
||||
@@ -1508,15 +1539,15 @@
|
||||
},
|
||||
"calendar": "Kalender",
|
||||
"connectCalendarButton": "Kalender verbinden",
|
||||
"connectCalendarText": "Verbinden Sie Ihren Kalender, um all Ihre Meetings in {{app}} anzuzeigen. Fügen Sie zudem {{provider}}-Meetings in Ihren Kalender ein und starten Sie sie mit nur einem Klick.",
|
||||
"enterRoomTitle": "Neues Meeting starten",
|
||||
"connectCalendarText": "Verbinden Sie Ihren Kalender, um all Ihre Konferenzen in {{app}} anzuzeigen. Fügen Sie zudem {{provider}}-Konferenzen in Ihren Kalender ein und starten Sie sie mit nur einem Klick.",
|
||||
"enterRoomTitle": "Neue Konferenz starten",
|
||||
"getHelp": "Hilfe",
|
||||
"go": "Los",
|
||||
"goSmall": "Los",
|
||||
"headerSubtitle": "Sichere und hochqualitative Meetings",
|
||||
"headerSubtitle": "Sichere und hochqualitative Konferenzen",
|
||||
"headerTitle": "Jitsi Meet",
|
||||
"info": "Einwahlinformationen",
|
||||
"jitsiOnMobile": "Jitsi unterwegs – einfach unsere Apps herunterladen und Meetings von überall starten",
|
||||
"jitsiOnMobile": "Jitsi unterwegs – einfach unsere Apps herunterladen und Konferenzen von überall starten",
|
||||
"join": "ERSTELLEN / BEITRETEN",
|
||||
"logo": {
|
||||
"calendar": "Kalender Logo",
|
||||
@@ -1542,7 +1573,7 @@
|
||||
"roomnameHint": "Name oder URL der Konferenz, der Sie beitreten möchten. Sie können einen Namen erfinden, er muss nur den anderen Personen übermittelt werden, damit diese der gleichen Konferenz beitreten.",
|
||||
"sendFeedback": "Feedback senden",
|
||||
"settings": "Einstellungen",
|
||||
"startMeeting": "Meeting starten",
|
||||
"startMeeting": "Konferenz starten",
|
||||
"terms": "AGB",
|
||||
"title": "Sichere, voll funktionale und komplett kostenlose Videokonferenzen",
|
||||
"upcomingMeetings": "Ihre zukünftigen Konferenzen"
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
"noResults": "Žedne se góźece rezulaty pytanja njedajo",
|
||||
"outlookEmail": "Outlook-e-mail",
|
||||
"phoneNumbers": "telefonowe numery",
|
||||
"searching": "Pytanje trajo...",
|
||||
"searching": "Pytanje trajo…",
|
||||
"shareInvite": "pśepšosenje na zgromaźinu spśistupniś",
|
||||
"shareLink": "Spśistupniśo link za konferencu, aby drugich pśepšosyli.",
|
||||
"shareStream": "link za livestream spśistupniś",
|
||||
@@ -666,7 +666,7 @@
|
||||
"linkToSalesforceDescription": "Wy móžośo wopowěsć wót konference pśez link z objektom pla Saleforce zwězaś.",
|
||||
"linkToSalesforceError": "Konferenz njejo mógła se ze Saleforce zwězaś.",
|
||||
"linkToSalesforceKey": "konferencu zalinkowaś",
|
||||
"linkToSalesforceProgress": "Zwězanje konference ze Salesforce se twari...",
|
||||
"linkToSalesforceProgress": "Zwězanje konference ze Salesforce se twari…",
|
||||
"linkToSalesforceSuccess": "Konferenca jo se ze Salesforce zwězała.",
|
||||
"localRecordingStarted": "{{name}} jo lokalne nagrawanje zachopił/-a.",
|
||||
"localRecordingStopped": "{{name}} jo lokalne nagrawanje dokóńcował/-a.",
|
||||
@@ -1238,16 +1238,7 @@
|
||||
"tr": "TR"
|
||||
},
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "Wuzwólśo opciju <b><i>pśiwdaś</i></b>, gaž browser wó pšawa pšosy.",
|
||||
"chromeGrantPermissions": "Wuzwólśo opciju <b><i>pśiwdaś</i></b>, gaž browser wó pšawa pšosy.",
|
||||
"edgeGrantPermissions": "Wuzwólśo opciju <b><i>jo</i></b>, gaž browser wó pšawa pšosy.",
|
||||
"electronGrantPermissions": "pšawa k wužywanju Wašeje kamery a mikrofona wuźěliś",
|
||||
"firefoxGrantPermissions": "Wuzwólśo opciju <b><i>dowóliś</i></b>, gaž browser wó pšawa pšosy.",
|
||||
"iexplorerGrantPermissions": "Wuzwólśo opciju <b><i>OK</i></b>, gaž browser wó pšawa pšosy.",
|
||||
"nwjsGrantPermissions": "pšawa k wužywanju Wašeje kamery a mikrofona wuźěliś",
|
||||
"operaGrantPermissions": "Wuzwólśo opciju <b><i>pśiwdaś</i></b>, gaž browser wó pšawa pšosy.",
|
||||
"react-nativeGrantPermissions": "Wuzwólśo opciju <b><i>dowóliś</i></b>, gaž browser wó pšawa pšosy.",
|
||||
"safariGrantPermissions": "Wuzwólśo opciju <b><i>OK</i></b>, gaž browser wó pšawa pšosy."
|
||||
"grantPermissions": "pšawa k wužywanju Wašeje kamery a mikrofona wuźěliś."
|
||||
},
|
||||
"videoSIPGW": {
|
||||
"busy": "Źěłamy na tom, aby resurse se k dispoziciji stajili. Wopytajśo za pór minutow hyšći raz.",
|
||||
@@ -1319,7 +1310,7 @@
|
||||
"image6": "góla",
|
||||
"image7": "górjejhyśe słyńcka",
|
||||
"none": "žeden motiw",
|
||||
"pleaseWait": "Cakajśo...",
|
||||
"pleaseWait": "Cakajśo…",
|
||||
"removeBackground": "slězynu wótpóraś",
|
||||
"slightBlur": "slězyna pitśku njewótša",
|
||||
"title": "slězyny",
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
"noResults": "Δε βρέθηκαν αποτελέσματα αναζήτησης",
|
||||
"outlookEmail": "Outlook Email",
|
||||
"phoneNumbers": "τηλεφωνικοί αριθμοί",
|
||||
"searching": "Αναζήτηση...",
|
||||
"searching": "Αναζήτηση…",
|
||||
"shareInvite": "Μοίρασε την πρόσκληση στη συνάντηση",
|
||||
"shareLink": "Μοίρασε αυτό το σύνδεσμο της συνάντησης για να προσκαλέσεις και άλλα άτομα",
|
||||
"shareStream": "Διαμοιρασμός του συνδέσμου ζωντανής μετάδοσης",
|
||||
@@ -122,7 +122,7 @@
|
||||
"installExtensionText": "Εγκατάσταση της επέκτασης για ενσωμάτωση του Google Calendar και του Office 365"
|
||||
},
|
||||
"connectingOverlay": {
|
||||
"joiningRoom": "Σύνδεση στη σύσκεψη σας..."
|
||||
"joiningRoom": "Σύνδεση στη σύσκεψη σας…"
|
||||
},
|
||||
"connection": {
|
||||
"ATTACHED": "Συνημμένο",
|
||||
@@ -134,9 +134,9 @@
|
||||
"DISCONNECTED": "Αποσυνδέθηκε",
|
||||
"DISCONNECTING": "Γίνεται αποσύνδεση",
|
||||
"ERROR": "Σφάλμα",
|
||||
"FETCH_SESSION_ID": "Απόκτηση session-id...",
|
||||
"FETCH_SESSION_ID": "Απόκτηση session-id…",
|
||||
"GET_SESSION_ID_ERROR": "Λήψη σφάλματος session-id: {{code}}",
|
||||
"GOT_SESSION_ID": "Απόκτηση session-id... Έγινε",
|
||||
"GOT_SESSION_ID": "Απόκτηση session-id… Έγινε",
|
||||
"LOW_BANDWIDTH": "Η εικόνα για {{displayName}} απενεργοποιήθηκε για εξοικονόμηση ταχύτητας"
|
||||
},
|
||||
"connectionindicator": {
|
||||
@@ -157,7 +157,7 @@
|
||||
"maxEnabledResolution": "αποστολή μέγιστης",
|
||||
"more": "Περισσότερα",
|
||||
"packetloss": "Απώλειες πακέτων:",
|
||||
"participant_id": "Id συμμετέχων:",
|
||||
"participant_id": "Id συμμετέχοντα:",
|
||||
"quality": {
|
||||
"good": "Καλή",
|
||||
"inactive": "Ανενεργό",
|
||||
@@ -182,7 +182,7 @@
|
||||
"yesterday": "Χθες"
|
||||
},
|
||||
"deepLinking": {
|
||||
"appNotInstalled": "Χρειάζεστε την εφαρμογή {{app}} για το κινητό σας για συμμετοχή σε αυτή τη σύσκεψη στο τηλέφωνό σας.",
|
||||
"appNotInstalled": "Χρειάζεστε την εφαρμογή {{app}} για το κινητό σας για συμμετοχή σε αυτή τη σύσκεψη μέσα από το τηλέφωνό σας.",
|
||||
"description": "Δεν έγινε τίποτα; Έγινε προσπάθεια να ξεκινήσει η σύσκεψη με την εφαρμογή desktop {{app}}. Προσπαθήστε ξανά ή μπείτε από το web το {{app}}.",
|
||||
"descriptionNew": "Δεν έγινε τίποτα; Έγινε προσπάθεια να ξεκινήσει η σύσκεψη με την εφαρμογή desktop {{app}}. <br /><br /> Προσπαθήστε ξανά ή μπείτε από το web.",
|
||||
"descriptionWithoutWeb": "Δεν έγινε τίποτα; Έγινε προσπάθεια να ξεκινήσει η σύσκεψη στην εφαρμογή desktop {{app}}.",
|
||||
@@ -197,8 +197,8 @@
|
||||
"launchWebButton": "Εκκίνηση στο web",
|
||||
"noMobileApp": "Δεν έχετε την εφαρμογή;",
|
||||
"termsAndConditions": "Με το να συνεχίσετε συμφωνείτε με τους <a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>όρους και συνθήκες.</a>",
|
||||
"title": "Έναρξη της σύσκεψης σας στο {{app}}...",
|
||||
"titleNew": "Δημιουργία της σύσκεψης σας...",
|
||||
"title": "Έναρξη της σύσκεψης σας στο {{app}}…",
|
||||
"titleNew": "Δημιουργία της σύσκεψης σας…",
|
||||
"tryAgainButton": "Προσπαθήστε ξανά στο desktop",
|
||||
"unsupportedBrowser": "Φαίνεται ότι χρησιμοποιείτε ένα browser που δεν υποστηρίζουμε."
|
||||
},
|
||||
@@ -236,8 +236,8 @@
|
||||
"Remove": "Αφαίρεση",
|
||||
"Share": "Μοιραστείτε",
|
||||
"Submit": "Υποβολή",
|
||||
"WaitForHostMsg": "Η σύσκεψη δεν έχει αρχίσει ακόμη. Αν είστε διοργανωτής, τότε παρακαλούμε να ταυτοποιήσετε τον εαυτό σας. Διαφορετικά, παρακαλώ αναμένατε να συνδεθεί κάποιος διοργανωτής.",
|
||||
"WaitingForHostTitle": "Αναμονή για διοργανωτή ...",
|
||||
"WaitForHostMsg": "Η σύσκεψη δεν έχει αρχίσει ακόμη. Αν είστε διοργανωτής, τότε παρακαλούμε να ταυτοποιήσετε τον εαυτό σας. Διαφορετικά, παρακαλώ αναμείνετε να συνδεθεί κάποιος διοργανωτής.",
|
||||
"WaitingForHostTitle": "Αναμονή για διοργανωτή…",
|
||||
"Yes": "Ναι",
|
||||
"accessibilityLabel": {
|
||||
"close": "Κλείσιμο",
|
||||
@@ -261,9 +261,9 @@
|
||||
"cameraUnknownError": "Αδυναμία χρήσης της κάμερας για κάποιο άγνωστο λόγο.",
|
||||
"cameraUnsupportedResolutionError": "Η κάμερα σας δεν υποστηρίζει την απαιτούμενη ανάλυση εικόνας.",
|
||||
"close": "Κλείσιμο",
|
||||
"conferenceDisconnectMsg": "Παρακαλώ ελέγξτε τη δικτυακή σύνδεση σας. Επανασύνδεση σε {{seconds}} δευτερόλεπτα...",
|
||||
"conferenceDisconnectMsg": "Παρακαλώ ελέγξτε τη δικτυακή σύνδεση σας. Επανασύνδεση σε {{seconds}} δευτερόλεπτα…",
|
||||
"conferenceDisconnectTitle": "Έχετε αποσυνδεθεί.",
|
||||
"conferenceReloadMsg": "Προσπαθούμε να το διορθώσουμε. Επανασύνδεση σε {{seconds}} δευτερόλεπτα...",
|
||||
"conferenceReloadMsg": "Προσπαθούμε να το διορθώσουμε. Επανασύνδεση σε {{seconds}} δευτερόλεπτα…",
|
||||
"conferenceReloadTitle": "Δυστυχώς, κάτι πήγε στραβά.",
|
||||
"confirm": "Επιβεβαίωση",
|
||||
"confirmNo": "Όχι",
|
||||
@@ -296,8 +296,8 @@
|
||||
"internalErrorTitle": "Εσωτερικό σφάλμα",
|
||||
"kickMessage": "Μπορείτε να επικοινωνήσετε με το {{participantDisplayName}} για περισσότερες λεπτομέρειες.",
|
||||
"kickParticipantButton": "Αποβολή",
|
||||
"kickParticipantDialog": "Σίγουρα θέλετε να αποβάλλεται αυτόν το συμμετέχων;",
|
||||
"kickParticipantTitle": "Αποβολή αυτού του συμμετέχων;",
|
||||
"kickParticipantDialog": "Σίγουρα θέλετε να αποβάλλετε αυτόν το συμμετέχοντα;",
|
||||
"kickParticipantTitle": "Αποβολή αυτού του συμμετέχοντα;",
|
||||
"kickTitle": "Ωχ! Ο/Η {{participantDisplayName}} σας απέβαλε από τη σύσκεψη",
|
||||
"linkMeeting": "Σύνδεση σύσκεψης",
|
||||
"linkMeetingTitle": "Σύνδεση σύσκεψης στο Salesforce",
|
||||
@@ -318,7 +318,7 @@
|
||||
"micNotSendingDataTitle": "Το μικρόφωνο είναι σε σίγηση στις ρυθμίσεις του συστήματός σας",
|
||||
"micPermissionDeniedError": "Δεν έχετε δώσει την άδεια για χρήση του μικροφώνου. Μπορείτε ακόμα να συμμετάσχετε στη σύσκεψη, αλλά οι άλλοι δεν θα μπορούν να σας ακούσουν. Χρησιμοποιήστε το κουμπί της κάμερας στη γραμμή διεύθυνσης για να το διορθώσετε.",
|
||||
"micTimeoutError": "Αδυναμία εκκίνησης της πηγής ήχου. Λήξη του χρονικού ορίου!",
|
||||
"micUnknownError": "Αδυναμία χρήσης του μικρόφωνου για ένα άγνωστο λόγο.",
|
||||
"micUnknownError": "Αδυναμία χρήσης του μικροφώνου για ένα άγνωστο λόγο.",
|
||||
"moderationAudioLabel": "Επιτρέψτε στους συμμετέχοντες να καταργούν τη σίγηση τους",
|
||||
"moderationVideoLabel": "Επιτρέψτε στους συμμετέχοντες να ξεκινούν το βίντεο τους",
|
||||
"muteEveryoneDialog": "Οι συμμετέχοντες μπορούν να καταργούν την σίγηση τους.",
|
||||
@@ -339,12 +339,12 @@
|
||||
"muteParticipantsVideoBody": "Δε θα μπορείτε εσείς να ενεργοποιήσετε ξανά τη κάμερα, αλλά αυτοί θα μπορούν οποιαδήποτε στιγμή.",
|
||||
"muteParticipantsVideoBodyModerationOn": "Δε θα μπορείτε εσείς να ενεργοποιήσετε ξανά τη κάμερα, αλλά ούτε και αυτοί.",
|
||||
"muteParticipantsVideoButton": "Διακοπή του βίντεο",
|
||||
"muteParticipantsVideoDialog": "Θέλετε σίγουρα να κλείσετε τη κάμερα του συμμετέχων; Δε θα μπορείτε να την ενεργοποιήσετε ξανά, μόνο αυτοί θα μπορούν να την ανοίξουν.",
|
||||
"muteParticipantsVideoDialogModerationOn": "Θέλετε σίγουρα να κλείσετε τη κάμερα του συμμετέχων; Δε θα μπορείτε να την ενεργοποιήσετε ξανά, ούτε αυτοί θα μπορούν.",
|
||||
"muteParticipantsVideoTitle": "Απενεργοποίηση της κάμερας αυτού του συμμετέχων;",
|
||||
"muteParticipantsVideoDialog": "Θέλετε σίγουρα να κλείσετε τη κάμερα του συμμετέχοντα; Δε θα μπορείτε να την ενεργοποιήσετε ξανά, μόνο αυτοί θα μπορούν να την ανοίξουν.",
|
||||
"muteParticipantsVideoDialogModerationOn": "Θέλετε σίγουρα να κλείσετε τη κάμερα του συμμετέχοντα; Δε θα μπορείτε να την ενεργοποιήσετε ξανά, ούτε αυτοί θα μπορούν.",
|
||||
"muteParticipantsVideoTitle": "Απενεργοποίηση της κάμερας αυτού του συμμετέχοντα;",
|
||||
"noDropboxToken": "Μη έγκυρο διακριτικό Dropbox",
|
||||
"password": "Κωδικός πρόσβασης",
|
||||
"passwordLabel": "Η συνάντηση έχει κλειδωθεί από έναν συμμετέχων. Παρακαλώ εισάγετε το $t(lockRoomPassword) για να συμμετέχετε.",
|
||||
"passwordLabel": "Η συνάντηση έχει κλειδωθεί από κάποιον συμμετέχοντα. Παρακαλώ εισάγετε το $t(lockRoomPassword) για να συμμετέχετε.",
|
||||
"passwordNotSupported": "Ο ορισμός ενός $t(lockRoomPassword) στη συνάντηση δεν υποστηρίζεται.",
|
||||
"passwordNotSupportedTitle": "Δεν υποστηρίζεται $t(lockRoomPasswordUppercase)",
|
||||
"passwordRequired": "Απαιτείται $t(lockRoomPasswordUppercase)",
|
||||
@@ -427,7 +427,7 @@
|
||||
"userPassword": "Κωδικός πρόσβασης χρήστη",
|
||||
"verifyParticipantConfirm": "Ταιριάζουν",
|
||||
"verifyParticipantDismiss": "Δεν ταιριάζουν",
|
||||
"verifyParticipantQuestion": "ΠΕΙΡΑΜΑΤΙΚΟ: Ρωτήστε το συμμετέχων {{participantName}} αν βλέπουν το ίδιο περιεχόμενο, με την ίδια σειρά.",
|
||||
"verifyParticipantQuestion": "ΠΕΙΡΑΜΑΤΙΚΟ: Ρωτήστε τον συμμετέχοντα {{participantName}} αν βλέπουν το ίδιο περιεχόμενο, με την ίδια σειρά.",
|
||||
"verifyParticipantTitle": "Πιστοποίηση χρήστη",
|
||||
"videoLink": "Σύνδεσμο βίντεο",
|
||||
"viewUpgradeOptions": "Εμφάνιση επιλογών αναβάθμισης",
|
||||
@@ -514,7 +514,7 @@
|
||||
"inviteDialog": {
|
||||
"alertText": "Αποτυχία πρόσκλησης μερικών συμμετεχόντων.",
|
||||
"header": "Πρόσκληση",
|
||||
"searchCallOnlyPlaceholder": "Εισάγετε το τηλεφωνικό αριθμό",
|
||||
"searchCallOnlyPlaceholder": "Εισάγετε τον τηλεφωνικό αριθμό",
|
||||
"searchPeopleOnlyPlaceholder": "Αναζήτηση συμμετεχόντων",
|
||||
"searchPlaceholder": "Συμμετέχων ή αριθμός τηλεφώνου",
|
||||
"send": "Αποστολή"
|
||||
@@ -523,7 +523,7 @@
|
||||
"keyboardShortcuts": {
|
||||
"focusLocal": "Εστίαση στο βίντεο σας",
|
||||
"focusRemote": "Εστίαση στο βίντεο ενός άλλου",
|
||||
"fullScreen": "Εναλλαγή πλήρης οθόνης",
|
||||
"fullScreen": "Εναλλαγή πλήρους οθόνης",
|
||||
"giphyMenu": "Εναλλαγή μενού GIPHY",
|
||||
"keyboardShortcuts": "Συντομεύσεις πληκτρολογίου",
|
||||
"localRecording": "Εμφάνιση ή απόκρυψη χειριστηρίων καταγραφής",
|
||||
@@ -554,7 +554,7 @@
|
||||
"errorLiveStreamNotEnabled": "Η ζωντανή ροή δεν είναι ενεργοποιημένη για το {{email}}. Ενεργοποιήστε τη ζωντανή ροή ή συνδεθείτε σε ένα λογαριασμό με ενεργοποιημένη τη ζωντανή ροή.",
|
||||
"expandedOff": "Η ζωντανή ροή σταμάτησε",
|
||||
"expandedOn": "Η σύσκεψη μεταδίδεται τώρα στο YouTube.",
|
||||
"expandedPending": "Η ζωντανή ροή πρόκειται να ξεκινήσει...",
|
||||
"expandedPending": "Η ζωντανή ροή πρόκειται να ξεκινήσει…",
|
||||
"failedToStart": "Η ζωντανή ροή απέτυχε να ξεκινήσει",
|
||||
"getStreamKeyManually": "Αδυναμία λήψης κάποιας ζωντανής ροής. Προσπαθήστε να πάρετε το κλειδί ζωντανής ροής από το YouTube.",
|
||||
"googlePrivacyPolicy": "Πολιτική Απορρήτου της Google",
|
||||
@@ -566,7 +566,7 @@
|
||||
"offBy": "{{name}} σταμάτησε τη ζωντανή ροή",
|
||||
"on": "Η Ζωντανή Ροή ξεκίνησε",
|
||||
"onBy": "{{name}} ξεκίνησε τη ζωντανή ροή",
|
||||
"pending": "Η Ζωντανή Ροή Ξεκινάει...",
|
||||
"pending": "Η Ζωντανή Ροή Ξεκινάει…",
|
||||
"serviceName": "Υπηρεσία Ζωντανής Ροής",
|
||||
"sessionAlreadyActive": "Η συνεδρία ήδη γράφεται ή είναι σε ζωντανή ροή.",
|
||||
"signIn": "Συνδεθείτε μέσω του Google",
|
||||
@@ -596,10 +596,10 @@
|
||||
"joinRejectedMessage": "Το αίτημα εισόδου σας απορρίφθηκε από έναν συντονιστή.",
|
||||
"joinRejectedTitle": "Το αίτημα σύνδεσης απορρίφθηκε.",
|
||||
"joinTitle": "Συμμετοχή στη Σύσκεψη",
|
||||
"joinWithPasswordMessage": "Γίνεται είσοδος με κωδικό, παρακαλώ περιμένετε...",
|
||||
"joinWithPasswordMessage": "Γίνεται είσοδος με κωδικό, παρακαλώ περιμένετε…",
|
||||
"joiningMessage": "Θα προστεθείτε στη σύσκεψη μόλις κάποιος αποδεχτεί το αίτημά σας",
|
||||
"joiningTitle": "Αίτηση εισόδου στη σύσκεψη...",
|
||||
"joiningWithPasswordTitle": "Είσοδος με κωδικό πρόσβασης...",
|
||||
"joiningTitle": "Αίτηση εισόδου στη σύσκεψη…",
|
||||
"joiningWithPasswordTitle": "Είσοδος με κωδικό πρόσβασης…",
|
||||
"knockButton": "Αίτηση Συμμετοχής",
|
||||
"knockTitle": "Κάποιος θέλει να συμμετέχει στη σύσκεψη",
|
||||
"knockingParticipantList": "Ειδοποίηση λίστας συμμετεχόντων",
|
||||
@@ -714,8 +714,8 @@
|
||||
"oldElectronClientDescription3": " τώρα!",
|
||||
"participantWantsToJoin": "Θέλει να συμμετέχει στη σύσκεψη",
|
||||
"participantsWantToJoin": "Θέλουν να συμμετέχουν στη σύσκεψη",
|
||||
"passwordRemovedRemotely": "Το $t(lockRoomPasswordUppercase) αφαιρέθηκε από έναν άλλον συμμετέχων",
|
||||
"passwordSetRemotely": "Το $t(lockRoomPasswordUppercase) ορίστηκε από άλλον συμμετέχων",
|
||||
"passwordRemovedRemotely": "Το $t(lockRoomPasswordUppercase) αφαιρέθηκε από έναν άλλον συμμετέχοντα",
|
||||
"passwordSetRemotely": "Το $t(lockRoomPasswordUppercase) ορίστηκε από άλλον συμμετέχοντα",
|
||||
"raiseHandAction": "Σήκωσε χέρι",
|
||||
"raisedHand": "Θέλει να μιλήσει.",
|
||||
"raisedHands": "ο/η {{participantName}} και {{raisedHands}} άλλοι",
|
||||
@@ -772,7 +772,7 @@
|
||||
"title": "Συμμετέχοντες"
|
||||
},
|
||||
"passwordDigitsOnly": "Έως {{number}} ψηφία",
|
||||
"passwordSetRemotely": "Ορίστηκε από ένα άλλον συμμετέχων",
|
||||
"passwordSetRemotely": "Ορίστηκε από ένα άλλον συμμετέχοντα",
|
||||
"pinParticipant": "{{participantName}} - Διατήρηση",
|
||||
"pinnedParticipant": "Ο συμμετέχων έχει διατηρηθεί",
|
||||
"polls": {
|
||||
@@ -816,7 +816,7 @@
|
||||
"callMe": "Καλέστε με",
|
||||
"callMeAtNumber": "Καλέστε με σε αυτό το νούμερο:",
|
||||
"calling": "Γίνεται κλήση",
|
||||
"configuringDevices": "Ρύθμιση συσκευών...",
|
||||
"configuringDevices": "Ρύθμιση συσκευών…",
|
||||
"connectedWithAudioQ": "Είστε συνδεδεμένοι με ήχο;",
|
||||
"connection": {
|
||||
"good": "Η σύνδεση σας στο Διαδίκτυο φαίνεται καλή!",
|
||||
@@ -870,17 +870,17 @@
|
||||
},
|
||||
"presenceStatus": {
|
||||
"busy": "Κατειλημμένο",
|
||||
"calling": "Καλεί...",
|
||||
"calling": "Καλεί…",
|
||||
"connected": "Συνδέθηκε",
|
||||
"connecting": "Γίνεται σύνδεση...",
|
||||
"connecting2": "Γίνεται σύνδεση*...",
|
||||
"connecting": "Γίνεται σύνδεση…",
|
||||
"connecting2": "Γίνεται σύνδεση*…",
|
||||
"disconnected": "Αποσυνδέθηκε",
|
||||
"expired": "Έληξε",
|
||||
"ignored": "Αγνοήθηκε",
|
||||
"initializingCall": "Αρχικοποίηση Κλήσης...",
|
||||
"initializingCall": "Αρχικοποίηση Κλήσης…",
|
||||
"invited": "Προσκλήθηκε",
|
||||
"rejected": "Απορρίφθηκε",
|
||||
"ringing": "Καλεί..."
|
||||
"ringing": "Καλεί…"
|
||||
},
|
||||
"profile": {
|
||||
"avatar": "avatar",
|
||||
@@ -911,7 +911,7 @@
|
||||
"errorFetchingLink": "Σφάλμα στη λήψη του συνδέσμου καταγραφής.",
|
||||
"expandedOff": "Η καταγραφή έχει διακοπεί",
|
||||
"expandedOn": "Αυτή τη στιγμή η σύσκεψη καταγράφεται.",
|
||||
"expandedPending": "Η καταγραφή ξεκινά...",
|
||||
"expandedPending": "Η καταγραφή ξεκινά…",
|
||||
"failedToStart": "Η καταγραφή απέτυχε να ξεκινήσει",
|
||||
"fileSharingdescription": "Μοιραστείτε την καταγραφή με τους συμμετέχοντες της σύσκεψης",
|
||||
"highlight": "Επισήμανση",
|
||||
@@ -939,7 +939,7 @@
|
||||
"on": "Η καταγραφή ξεκίνησε",
|
||||
"onBy": "Ο/Η {{name}} ξεκίνησε την καταγραφή",
|
||||
"onlyRecordSelf": "Καταγραφή μόνο των δικών μου ροών ήχου και βίντεο",
|
||||
"pending": "Προετοιμασία για την καταγραφή της σύσκεψης...",
|
||||
"pending": "Προετοιμασία για την καταγραφή της σύσκεψης…",
|
||||
"rec": "ΕΓΓΡΑΦΗ",
|
||||
"saveLocalRecording": "Αποθήκευση καταγραφής τοπικά (Beta)",
|
||||
"serviceDescription": "Η καταγραφή σας θα αποθηκευτεί από την υπηρεσία καταγραφής",
|
||||
@@ -1101,7 +1101,7 @@
|
||||
"download": "Κατεβάστε τις εφαρμογές μας",
|
||||
"embedMeeting": "Ενσωμάτωση σύσκεψης",
|
||||
"endConference": "Λήξη της σύσκεψης για όλους",
|
||||
"enterFullScreen": "Εμφάνιση πλήρης οθόνης",
|
||||
"enterFullScreen": "Εμφάνιση πλήρους οθόνης",
|
||||
"enterTileView": "Είσοδος σε προβολή εικονιδίων",
|
||||
"exitFullScreen": "Έξοδος από πλήρη οθόνη",
|
||||
"exitTileView": "Έξοδος από προβολή εικονιδίων",
|
||||
@@ -1115,7 +1115,7 @@
|
||||
"help": "Βοήθεια",
|
||||
"hideWhiteboard": "Απόκρυψη μαυροπίνακα",
|
||||
"invite": "Προσκαλέστε άτομα",
|
||||
"kick": "Αποβολή συμμετέχων",
|
||||
"kick": "Αποβολή συμμετέχοντα",
|
||||
"laugh": "Γέλιο",
|
||||
"leaveConference": "Αποχώρηση από την σύσκεψη",
|
||||
"like": "Εγκρίνω",
|
||||
@@ -1141,8 +1141,8 @@
|
||||
"raiseHand": "Σηκώστε το χέρι σας",
|
||||
"reactionsMenu": "Μενού αντιδράσεων",
|
||||
"recording": "Εναλλαγή καταγραφής",
|
||||
"remoteMute": "Σίγηση συμμετέχων",
|
||||
"remoteVideoMute": "Απενεργοποίηση της κάμερας του συμμετέχων",
|
||||
"remoteMute": "Σίγηση συμμετέχοντα",
|
||||
"remoteVideoMute": "Απενεργοποίηση της κάμερας του συμμετέχοντα",
|
||||
"security": "Επιλογές ασφαλείας",
|
||||
"selectBackground": "Επιλογή Φόντου",
|
||||
"selfView": "Εναλλαγή αυτοπροβολής",
|
||||
@@ -1188,7 +1188,7 @@
|
||||
"embedMeeting": "Ενσωμάτωση σύσκεψης",
|
||||
"enableNoiseSuppression": "Ενεργοποίηση εξάλειψης θορύβου",
|
||||
"endConference": "Λήξη της σύσκεψης για όλους",
|
||||
"enterFullScreen": "Εμφάνιση πλήρης οθόνης",
|
||||
"enterFullScreen": "Εμφάνιση πλήρους οθόνης",
|
||||
"enterTileView": "Προβολή εικονιδίων",
|
||||
"exitFullScreen": "Έξοδος από πλήρη οθόνη",
|
||||
"exitTileView": "Έξοδος από προβολή εικονιδίων",
|
||||
@@ -1267,7 +1267,7 @@
|
||||
"failedToStart": "Η μεταγραφή απέτυχε να ξεκινήσει",
|
||||
"labelToolTip": "Η συνάντηση μεταγράφεται",
|
||||
"off": "Η μεταγραφή σταμάτησε",
|
||||
"pending": "Προετοιμασία για μεταγραφή της συνάντησης...",
|
||||
"pending": "Προετοιμασία για μεταγραφή της συνάντησης…",
|
||||
"sourceLanguageDesc": "Η γλώσσα της σύσκεψης αυτή τη στιγμή έχει οριστεί σε <b>{{sourceLanguage}}</b>.<br/>Μπορείτε να την αλλάξετε από ",
|
||||
"sourceLanguageHere": "εδώ",
|
||||
"start": "Εμφάνιση υποτίτλων",
|
||||
@@ -1278,16 +1278,7 @@
|
||||
},
|
||||
"unpinParticipant": "{{participantName}} - Μη Διατήρηση",
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "Επιλέξτε <b><i>Αποδοχή</i></b> όταν ο browser ζητήσει για άδεια χρήσης.",
|
||||
"chromeGrantPermissions": "Επιλέξτε <b><i>Αποδοχή</i></b> όταν ο browser ζητήσει για άδεια χρήσης.",
|
||||
"edgeGrantPermissions": "Επιλέξτε <b><i>Ναι</i></b> όταν ο browser ζητήσει για άδεια χρήσης.",
|
||||
"electronGrantPermissions": "Δοκιμή πρόσβασης της κάμερας και του μικροφώνου",
|
||||
"firefoxGrantPermissions": "Επιλέξτε <b><i>Μοιραστείτε την Επιλεγμένη Συσκευή</i></b> όταν ο browser ζητήσει για άδεια.",
|
||||
"iexplorerGrantPermissions": "Επιλέξτε <b><i>OK</i></b> όταν ο browser σας ζητήσει άδεια χρήσης.",
|
||||
"nwjsGrantPermissions": "Παρακαλούμε παραχωρήστε την άδεια για χρήση της κάμερα και του μικροφώνου",
|
||||
"operaGrantPermissions": "Επιλέξτε <b><i>Αποδοχή</i></b> όταν ο browser σας ζητήσει για άδεια χρήσης.",
|
||||
"react-nativeGrantPermissions": "Επιλέξτε <b><i>Αποδοχή</i></b> όταν ο browser σας ζητήσει για άδεια χρήσης.",
|
||||
"safariGrantPermissions": "Επιλέξτε <b><i>OK</i></b> όταν ο browser σας ζητήσει άδεια χρήσης."
|
||||
"grantPermissions": "Παρακαλούμε παραχωρήστε την άδεια για χρήση της κάμερα και του μικροφώνου."
|
||||
},
|
||||
"videoSIPGW": {
|
||||
"busy": "Γίνεται προσπάθεια για την απελευθέρωση πόρων. Παρακαλώ δοκιμάστε ξανά σε λίγα λεπτά.",
|
||||
@@ -1337,11 +1328,11 @@
|
||||
"muted": "Σίγηση",
|
||||
"pinToStage": "Διατήρηση στη σκηνή",
|
||||
"remoteControl": "Εκκίνηση / Διακοπή ελέγχου από μακριά",
|
||||
"screenSharing": "Ο συμμετέχων μοιράζει την οθόνη τους",
|
||||
"screenSharing": "Ο συμμετέχων διαμοιράζεται την οθόνη του",
|
||||
"show": "Εμφάνιση στη σκηνή",
|
||||
"showSelfView": "Εμφάνιση αυτοπροβολής",
|
||||
"unpinFromStage": "Μη διατήρηση",
|
||||
"verify": "Επιβεβαίωση συμμετέχων",
|
||||
"verify": "Επιβεβαίωση συμμετέχοντα",
|
||||
"videoMuted": "Η κάμερα απενεργοποιήθηκε",
|
||||
"videomute": "Ο συμμετέχων σταμάτησε τη κάμερα"
|
||||
},
|
||||
@@ -1361,7 +1352,7 @@
|
||||
"image6": "Δάσος ",
|
||||
"image7": "Ανατολή",
|
||||
"none": "Κανένα",
|
||||
"pleaseWait": "Παρακαλώ αναμένατε...",
|
||||
"pleaseWait": "Παρακαλώ αναμένατε…",
|
||||
"removeBackground": "Αφαίρεση φόντου",
|
||||
"slightBlur": "Μισό Θόλωμα",
|
||||
"title": "Εικονικά φόντα",
|
||||
|
||||
@@ -222,7 +222,7 @@
|
||||
"noMobileApp": "Ĉu vi ne jam havas la aplikaĵon?",
|
||||
"termsAndConditions": "Daŭrigante, vi konsentas kun niaj <a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>kondiĉoj.</a>",
|
||||
"title": "Enirante vian kunvenon per {{app}}…",
|
||||
"titleNew": "Enirante vian kunvenon...",
|
||||
"titleNew": "Enirante vian kunvenon…",
|
||||
"tryAgainButton": "Provu denove per la komputila aplikaĵo",
|
||||
"unsupportedBrowser": "Ŝajnas ke vi uzas nesubtenitan retumilon"
|
||||
},
|
||||
@@ -1373,16 +1373,7 @@
|
||||
},
|
||||
"unpinParticipant": "{{participantName}} - Malpingli",
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "Elektu <b><i>Permesi</i></b> kiam via foliumilo petos permesojn.",
|
||||
"chromeGrantPermissions": "Elektu <b><i>Permesi</i></b> kiam via foliumilo petos permesojn.",
|
||||
"edgeGrantPermissions": "Elektu <b><i>Jes</i></b> kiam via foliumilo petos permesojn.",
|
||||
"electronGrantPermissions": "Bonvolu doni la permeson uzi viajn kameraon kaj mikrofonon",
|
||||
"firefoxGrantPermissions": "Elektu <b><i>Havigi elektitan aparaton</i></b> kiam via foliumilo petos permesojn.",
|
||||
"iexplorerGrantPermissions": "Elektu <b><i>Bone</i></b> kiam via foliumilo petos permesojn.",
|
||||
"nwjsGrantPermissions": "Bonvolu doni la permeson uzi viajn kameraon kaj mikrofonon",
|
||||
"operaGrantPermissions": "Elektu <b><i>Permesi</i></b> kiam via foliumilo petos permesojn.",
|
||||
"react-nativeGrantPermissions": "Elektu <b><i>Permesi</i></b> kiam via foliumilo petos permesojn.",
|
||||
"safariGrantPermissions": "Elektu <b><i>Bone</i></b> kiam via foliumilo petos permesojn."
|
||||
"grantPermissions": "Bonvolu doni la permeson uzi viajn kameraon kaj mikrofonon."
|
||||
},
|
||||
"videoSIPGW": {
|
||||
"busy": "Ni klopodas liberigi rimedojn. Bonvolu reprovi post kelkaj minutoj.",
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
"noResults": "No se encontraron coincidencias",
|
||||
"outlookEmail": "Correo de Outlook",
|
||||
"phoneNumbers": "números de teléfono",
|
||||
"searching": "Buscando...",
|
||||
"searching": "Buscando…",
|
||||
"shareInvite": "Compartir la invitación a la reunión",
|
||||
"shareLink": "Compartir el enlace de la reunion",
|
||||
"shareStream": "Compartir el enlace de la transmisión en vivo",
|
||||
@@ -251,7 +251,7 @@
|
||||
"Share": "Compartir",
|
||||
"Submit": "Enviar",
|
||||
"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...",
|
||||
"WaitingForHostTitle": "Esperando al anfitrión…",
|
||||
"Yes": "Sí",
|
||||
"accessibilityLabel": {
|
||||
"close": "Cerrar diálogo",
|
||||
@@ -614,10 +614,10 @@
|
||||
"joinRejectedMessage": "Tu solicitud para entrar ha sido rechazada por un moderador.",
|
||||
"joinRejectedTitle": "Solicitud para entrar rechazada.",
|
||||
"joinTitle": "Entrar a la reunión",
|
||||
"joinWithPasswordMessage": "Tratando de entrar con contraseña, por favor espera...",
|
||||
"joinWithPasswordMessage": "Tratando de entrar con contraseña, por favor espera…",
|
||||
"joiningMessage": "Podrás entrar tan pronto te acepten tu solicitud.",
|
||||
"joiningTitle": "Pidiendo entrar a la reunión...",
|
||||
"joiningWithPasswordTitle": "Uniéndose con la contraseña...",
|
||||
"joiningTitle": "Pidiendo entrar a la reunión…",
|
||||
"joiningWithPasswordTitle": "Uniéndose con la contraseña…",
|
||||
"knockButton": "Pedir entrar",
|
||||
"knockTitle": "Alguien quiere entrar a la reunión",
|
||||
"knockingParticipantList": "Participantes que quieren entrar",
|
||||
@@ -704,7 +704,7 @@
|
||||
"linkToSalesforceDescription": "Puedes vincular el resumen de la reunión a un objeto Salesforce",
|
||||
"linkToSalesforceError": "Error al vincular la reunión a Salesforce",
|
||||
"linkToSalesforceKey": "",
|
||||
"linkToSalesforceProgress": "Vinculando reunión a Salesorce...",
|
||||
"linkToSalesforceProgress": "Vinculando reunión a Salesorce…",
|
||||
"linkToSalesforceSuccess": "La reunión fue vinculada a Salesforce",
|
||||
"localRecordingStarted": "{{name}} ha iniciado una grabación local.",
|
||||
"localRecordingStopped": "{{name}} ha detenido una grabación local.",
|
||||
@@ -839,7 +839,7 @@
|
||||
"callMe": "Llámame",
|
||||
"callMeAtNumber": "Llamame a este número:",
|
||||
"calling": "Llamando",
|
||||
"configuringDevices": "Configurando dispositivos...",
|
||||
"configuringDevices": "Configurando dispositivos…",
|
||||
"connectedWithAudioQ": "¿Estás está conectado con audio?",
|
||||
"connection": {
|
||||
"good": "¡Su conexión a internet es buena!",
|
||||
@@ -1318,16 +1318,7 @@
|
||||
},
|
||||
"unpinParticipant": "",
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "Selecciona <b><i>Permitir</i></b> cuando el navegador solicite permisos.",
|
||||
"chromeGrantPermissions": "Selecciona <b><i>Permitir</i></b> cuando el navegador solicite permisos.",
|
||||
"edgeGrantPermissions": "Selecciona <b><i>Sí</i></b> cuando el navegador solicite permisos.",
|
||||
"electronGrantPermissions": "Otorga permisos para usar la cámara y el micrófono",
|
||||
"firefoxGrantPermissions": "Selecciona <b><i>Compartir dispositivo seleccionado</i></b> cuando el navegador solicite permisos.",
|
||||
"iexplorerGrantPermissions": "Selecciona <b><i>Aceptar</i></b> cuando el navegador solicite permisos.",
|
||||
"nwjsGrantPermissions": "Otorga permisos para usar la cámara y el micrófono",
|
||||
"operaGrantPermissions": "Selecciona <b><i>Permitir</i></b> cuando el navegador solicite permisos.",
|
||||
"react-nativeGrantPermissions": "Selecciona <b><i>Permitir</i></b> cuando el navegador solicite permisos.",
|
||||
"safariGrantPermissions": "Selecciona <b><i>Aceptar</i></b> cuando el navegador solicite permisos."
|
||||
"grantPermissions": "Otorga permisos para usar la cámara y el micrófono."
|
||||
},
|
||||
"videoSIPGW": {
|
||||
"busy": "Estamos trabajando para liberar recursos. Vuelve a intentarlo en unos minutos.",
|
||||
@@ -1401,7 +1392,7 @@
|
||||
"image6": "Bosque",
|
||||
"image7": "Amanecer",
|
||||
"none": "Ninguno",
|
||||
"pleaseWait": "Por favor, espera...",
|
||||
"pleaseWait": "Por favor, espera…",
|
||||
"removeBackground": "Eliminar el fondo",
|
||||
"slightBlur": "Desenfoque Ligero",
|
||||
"title": "Fondos virtuales",
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
"searchNumbers": "Agregar números telefónicos",
|
||||
"searchPeople": "Buscar personas",
|
||||
"searchPeopleAndNumbers": "Buscar personas o añadir sus números de teléfono",
|
||||
"searching": "Buscando...",
|
||||
"searching": "Buscando…",
|
||||
"shareInvite": "Compartir la invitación a la reunión",
|
||||
"shareLink": "Compartir el link de la reunion",
|
||||
"shareStream": "Compartir el link de la transmición en vivo",
|
||||
@@ -112,7 +112,7 @@
|
||||
"GET_SESSION_ID_ERROR": "Obtener session-id error: {{code}}",
|
||||
"GOT_SESSION_ID": "Obteniendo session-ID… Listo",
|
||||
"LOW_BANDWIDTH": "El video para {{displayName}} ha sido desactivado para ahorrar ancho de banda",
|
||||
"RECONNECTING": "Ocurrió un problema en la red. Reconectando..."
|
||||
"RECONNECTING": "Ocurrió un problema en la red. Reconectando…"
|
||||
},
|
||||
"connectionindicator": {
|
||||
"address": "Dirección:",
|
||||
@@ -195,7 +195,7 @@
|
||||
"Submit": "Enviar",
|
||||
"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...",
|
||||
"WaitingForHostTitle": "Esperando al anfitrión…",
|
||||
"Yes": "Sí",
|
||||
"accessibilityLabel": {
|
||||
"liveStreaming": "Transmisión en vivo"
|
||||
@@ -536,10 +536,10 @@
|
||||
"invalidPassword": "Contraseña inválida",
|
||||
"joinRejectedMessage": "Tu solicitud para entrar ha sido rechazada por un moderador.",
|
||||
"joinTitle": "Entrar a la reunión",
|
||||
"joinWithPasswordMessage": "Tratando de entrar con contraseña, por favor espera...",
|
||||
"joinWithPasswordMessage": "Tratando de entrar con contraseña, por favor espera…",
|
||||
"joiningMessage": "Podrás entrar tan pronto te acepten tu solicitud.",
|
||||
"joiningTitle": "Pidiendo entrar a la reunión...",
|
||||
"joiningWithPasswordTitle": "Uniéndose con la contraseña...",
|
||||
"joiningTitle": "Pidiendo entrar a la reunión…",
|
||||
"joiningWithPasswordTitle": "Uniéndose con la contraseña…",
|
||||
"knockButton": "Pedir entrar",
|
||||
"knockTitle": "Alguien quiere entrar a la reunión",
|
||||
"knockingParticipantList": "Participantes que quieren entrar",
|
||||
@@ -715,7 +715,7 @@
|
||||
"callMe": "Llámame",
|
||||
"callMeAtNumber": "Llamame a este número:",
|
||||
"calling": "Llamando",
|
||||
"configuringDevices": "Configurando dispositivos...",
|
||||
"configuringDevices": "Configurando dispositivos…",
|
||||
"connectedWithAudioQ": "¿Estás está conectado con audio?",
|
||||
"connection": {
|
||||
"good": "¡Su conexión a internet es buena!",
|
||||
@@ -1075,16 +1075,7 @@
|
||||
"tr": "TR"
|
||||
},
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "Selecciona <b><i>Permitir</i></b> cuando el navegador solicite permisos.",
|
||||
"chromeGrantPermissions": "Selecciona <b><i>Permitir</i></b> cuando el navegador solicite permisos.",
|
||||
"edgeGrantPermissions": "Selecciona <b><i>Sí</i></b> cuando el navegador solicite permisos.",
|
||||
"electronGrantPermissions": "Otorga permisos para usar la cámara y el micrófono",
|
||||
"firefoxGrantPermissions": "Selecciona <b><i>Compartir dispositivo seleccionado</i></b> cuando el navegador solicite permisos.",
|
||||
"iexplorerGrantPermissions": "Selecciona <b><i>Aceptar</i></b> cuando el navegador solicite permisos.",
|
||||
"nwjsGrantPermissions": "Otorga permisos para usar la cámara y el micrófono",
|
||||
"operaGrantPermissions": "Selecciona <b><i>Permitir</i></b> cuando el navegador solicite permisos.",
|
||||
"react-nativeGrantPermissions": "Selecciona <b><i>Permitir</i></b> cuando el navegador solicite permisos.",
|
||||
"safariGrantPermissions": "Selecciona <b><i>Aceptar</i></b> cuando el navegador solicite permisos."
|
||||
"grantPermissions": "Otorga permisos para usar la cámara y el micrófono."
|
||||
},
|
||||
"videoSIPGW": {
|
||||
"busy": "Estamos trabajando para liberar recursos. Vuelve a intentarlo en unos minutos.",
|
||||
@@ -1147,7 +1138,7 @@
|
||||
"image6": "Bosque",
|
||||
"image7": "Amanecer",
|
||||
"none": "Ninguno",
|
||||
"pleaseWait": "Por favor, espera...",
|
||||
"pleaseWait": "Por favor, espera…",
|
||||
"removeBackground": "Eliminar el fondo",
|
||||
"slightBlur": "Desenfoque Ligero",
|
||||
"title": "Fondos virtuales",
|
||||
|
||||
@@ -478,7 +478,7 @@
|
||||
"calling": "Helistamine…",
|
||||
"connected": "Ühendatud",
|
||||
"connecting": "Ühendamine…",
|
||||
"connecting2": "Ühendamine*...",
|
||||
"connecting2": "Ühendamine*…",
|
||||
"disconnected": "Lahti ühendatud",
|
||||
"expired": "Aegunud",
|
||||
"ignored": "Eiratud",
|
||||
@@ -700,16 +700,7 @@
|
||||
"tr": "TR"
|
||||
},
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "Vali <b><i>Luba</i></b>, kui veebilehitseja küsib nõusolekut.",
|
||||
"chromeGrantPermissions": "Vali <b><i>Luba</i></b>, kui veebilehitseja küsib nõusolekut.",
|
||||
"edgeGrantPermissions": "Vali <b><i>Jah</i></b>, kui veebilehitseja küsib nõusolekut.",
|
||||
"electronGrantPermissions": "Luba kasutada kaamerat ja mikrofoni",
|
||||
"firefoxGrantPermissions": "Vali <b><i>Jaga valitud vahendit</i></b>, kui veebilehitseja küsib nõusolekut.",
|
||||
"iexplorerGrantPermissions": "Vali <b><i>OK</i></b>, kui veebilehitseja küsib nõusolekut.",
|
||||
"nwjsGrantPermissions": "Luba kasutada kaamerat ja mikrofoni",
|
||||
"operaGrantPermissions": "Vali <b><i>Luba</i></b>, kui veebilehitseja küsib nõusolekut.",
|
||||
"react-nativeGrantPermissions": "Vali <b><i>Luba</i></b>, kui veebilehitseja küsib nõusolekut.",
|
||||
"safariGrantPermissions": "Vali <b><i>OK</i></b>, kui veebilehitseja küsib nõusolekut."
|
||||
"grantPermissions": "Luba kasutada kaamerat ja mikrofoni."
|
||||
},
|
||||
"videoSIPGW": {
|
||||
"busy": "Vabastatakse ressurssi… Proovi mõne minuti pärast uuesti.",
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"noResults": "Ez dago bat datorren bilaketa-emaitzarik",
|
||||
"outlookEmail": "Outlook Email",
|
||||
"phoneNumbers": "telefono zenbakiak",
|
||||
"searching": "Bilatzen...",
|
||||
"searching": "Bilatzen…",
|
||||
"shareInvite": "Partekatu bilerarako gonbidapena",
|
||||
"shareLink": "Partekatu bileraren esteka beste partaide batzuk gonbidatzeko",
|
||||
"shareStream": "Partekatu zuzenekoaren esteka",
|
||||
@@ -182,7 +182,7 @@
|
||||
"Share": "Partekatu",
|
||||
"Submit": "Bidali",
|
||||
"WaitForHostMsg": "Konferentzia oraindik ez da hasi. Ostalaria bazara, autentifikatu. Bestela, itxaron ostalaria iritsi arte.",
|
||||
"WaitingForHostTitle": "Antolatzailearen zain...",
|
||||
"WaitingForHostTitle": "Antolatzailearen zain…",
|
||||
"Yes": "Bai",
|
||||
"accessibilityLabel": {
|
||||
"liveStreaming": "Zuzeneko Erreprodukzioa"
|
||||
@@ -477,10 +477,10 @@
|
||||
"invalidPassword": "Pasahitza ez da zuzena",
|
||||
"joinRejectedMessage": "Sartzeko eskaera ukatu egin du moderatzaile batek",
|
||||
"joinTitle": "Sartu bileran",
|
||||
"joinWithPasswordMessage": "Pasahitz gabe sartzen saiatzen, itxaron mesedez...",
|
||||
"joinWithPasswordMessage": "Pasahitz gabe sartzen saiatzen, itxaron mesedez…",
|
||||
"joiningMessage": "Norbaitek zure eskaera sartu bezain laster sartuko zara bileran",
|
||||
"joiningTitle": "Sartzeko eskatzen...",
|
||||
"joiningWithPasswordTitle": "Pasahitzarekin sartzen...",
|
||||
"joiningTitle": "Sartzeko eskatzen…",
|
||||
"joiningWithPasswordTitle": "Pasahitzarekin sartzen…",
|
||||
"knockButton": "Eskatu sartzea",
|
||||
"knockTitle": "Norbaitek bileran sartu nahi du",
|
||||
"knockingParticipantList": "Zain dauden parte-hartzaileak",
|
||||
@@ -602,7 +602,7 @@
|
||||
"callMe": "Deitu nazazu",
|
||||
"callMeAtNumber": "Deitu nazazu zenbaki honetara:",
|
||||
"calling": "Deitzen",
|
||||
"configuringDevices": "Gailuak konfiguratzen...",
|
||||
"configuringDevices": "Gailuak konfiguratzen…",
|
||||
"connectedWithAudioQ": "Audioarekin konektatuta zaude?",
|
||||
"connection": {
|
||||
"good": "Zure internet konexioa ondo dabil!",
|
||||
@@ -913,22 +913,13 @@
|
||||
"failedToStart": "Ezin da transkripzioa hasi",
|
||||
"labelToolTip": "Bilera transkribatzen ari da",
|
||||
"off": "Transkripzioa gelditu da",
|
||||
"pending": "Bileraren transkripzioa prestatzen ...",
|
||||
"pending": "Bileraren transkripzioa prestatzen…",
|
||||
"start": "Erakutsi azpitituluak",
|
||||
"stop": "Utzi azpitituluak erakusten",
|
||||
"tr": "TR"
|
||||
},
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "Hautatu <b><i>Baimendu</i></b> zure nabigatzaileak baimenak eskatzen dituenean.",
|
||||
"chromeGrantPermissions": "Hautatu <b><i>Baimendu</i></b> zure nabigatzaileak baimenak eskatzen dituenean.",
|
||||
"edgeGrantPermissions": "Hautatu <b><i>Bai</i></b> zure nabigatzaileak baimenak eskatzen dituenean.",
|
||||
"electronGrantPermissions": "Mesedez eman zure kamera eta mikrofonoa erabiltzeko baimenak",
|
||||
"firefoxGrantPermissions": "Hautatu <b><i>Partekatutako hautatutako gailua</i></b> zure nabigatzaileak baimenak eskatzen dituenean.",
|
||||
"iexplorerGrantPermissions": "Hautatu <b><i>Ados</i></b> zure nabigatzaileak baimenak eskatzen dituenean.",
|
||||
"nwjsGrantPermissions": "Mesedez, eman zure kamera eta mikrofonoa erabiltzeko baimenak",
|
||||
"operaGrantPermissions": "Hautatu <b><i>Baimendu</i></b> zure nabigatzaileak baimenak eskatzen dituenean.",
|
||||
"react-nativeGrantPermissions": "Hautatu <b><i>Baimendu</i></b> zure nabigatzaileak baimenak eskatzen dituenean.",
|
||||
"safariGrantPermissions": "Hautatu <b><i>Ados</i></b> zure nabigatzaileak baimenak eskatzen dituenean."
|
||||
"grantPermissions": "Mesedez, eman zure kamera eta mikrofonoa erabiltzeko baimenak."
|
||||
},
|
||||
"videoSIPGW": {
|
||||
"busy": "Baliabideak askatzeko lanetan gabiltza. Mesedez, saiatu berriro minutu batzuk barru.",
|
||||
@@ -988,7 +979,7 @@
|
||||
"image6": "Basoa",
|
||||
"image7": "Egunsentia",
|
||||
"none": "Bat ere ez",
|
||||
"pleaseWait": "Itxaron mesedez...",
|
||||
"pleaseWait": "Itxaron mesedez…",
|
||||
"removeBackground": "Kendu atzeko planoa",
|
||||
"slightBlur": "Lausotze arina",
|
||||
"title": "Atzeko plano birtualak",
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
"noResults": "هیچ نتیجهای مطابق با جستجو یافت نشد",
|
||||
"outlookEmail": "رایانامهٔ اوتلوک",
|
||||
"phoneNumbers": "شماره تلفنها",
|
||||
"searching": "درحال جستجو...",
|
||||
"searching": "درحال جستجو…",
|
||||
"shareInvite": "همرسانی دعوتنامهٔ جلسه",
|
||||
"shareLink": "همرسانی پیوند جلسه برای دعوت دیگران",
|
||||
"shareStream": "همرسانی پیوند پخش زنده",
|
||||
@@ -137,7 +137,7 @@
|
||||
"installExtensionText": "برای اتصال به تقویم گوگل و برنامه آفیس 365 افزونه را نصب کنید"
|
||||
},
|
||||
"connectingOverlay": {
|
||||
"joiningRoom": "درحال اتصال شما به جلسه..."
|
||||
"joiningRoom": "درحال اتصال شما به جلسه…"
|
||||
},
|
||||
"connection": {
|
||||
"ATTACHED": "پیوستشده",
|
||||
@@ -149,9 +149,9 @@
|
||||
"DISCONNECTED": "قطع شد",
|
||||
"DISCONNECTING": "درحال قطع اتصال",
|
||||
"ERROR": "خطا",
|
||||
"FETCH_SESSION_ID": "دریافت شناسهٔ جلسه...",
|
||||
"FETCH_SESSION_ID": "دریافت شناسهٔ جلسه…",
|
||||
"GET_SESSION_ID_ERROR": "خطا در دریافت شناسهٔ جلسه: {{code}}",
|
||||
"GOT_SESSION_ID": "دریافت شناسهٔ جلسه... انجام شد",
|
||||
"GOT_SESSION_ID": "دریافت شناسهٔ جلسه… انجام شد",
|
||||
"LOW_BANDWIDTH": "برای صرفهجویی در پهنای باند، ویدیو برای {{displayName}} غیرفعال شد"
|
||||
},
|
||||
"connectionindicator": {
|
||||
@@ -214,8 +214,8 @@
|
||||
"launchWebButton": "استفاده از نسخهٔ وب",
|
||||
"noMobileApp": "برنامه را نصب نکردهاید؟",
|
||||
"termsAndConditions": "با ادامهدادن، با <a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>شرایط و ضوابط</a> ما موافقت میکنید.",
|
||||
"title": "درحال اجرای جلسهٔ شما در {{app}}...",
|
||||
"titleNew": "درحال اجرای جلسهٔ شما...",
|
||||
"title": "درحال اجرای جلسهٔ شما در {{app}}…",
|
||||
"titleNew": "درحال اجرای جلسهٔ شما…",
|
||||
"tryAgainButton": "با نسخهٔ میزکار دوباره تلاش کنید",
|
||||
"unsupportedBrowser": "به نظر میرسد در حال استفاده از یک مرورگر پشتیبانینشده هستید."
|
||||
},
|
||||
@@ -254,7 +254,7 @@
|
||||
"Share": "همرسانی",
|
||||
"Submit": "ارسال",
|
||||
"WaitForHostMsg": "کنفرانس هنوز شروع نشده است، اگر میزبان هستید وارد شوید، در غیراین صورت تا رسیدن میزبان و شروع جلسه منتظر بمانید.",
|
||||
"WaitingForHostTitle": "در انتظار میزبان ...",
|
||||
"WaitingForHostTitle": "در انتظار میزبان…",
|
||||
"Yes": "بله",
|
||||
"accessibilityLabel": {
|
||||
"Cancel": "لغو (ترککردن پنجرهٔ گفتگو)",
|
||||
@@ -280,9 +280,9 @@
|
||||
"cameraUnknownError": "به دلایلی نامشخص نمیتوان از دوربین استفاده کرد.",
|
||||
"cameraUnsupportedResolutionError": "دوربین شما از وضوح تصویر مورد نیاز پشتیبانی نمیکند.",
|
||||
"close": "بستن",
|
||||
"conferenceDisconnectMsg": "شاید بخواهید اتصال شبکه خود را بررسی کنید. تلاش برای اتصال دوباره در {{seconds}} ثانیه دیگر...",
|
||||
"conferenceDisconnectMsg": "شاید بخواهید اتصال شبکه خود را بررسی کنید. تلاش برای اتصال دوباره در {{seconds}} ثانیه دیگر…",
|
||||
"conferenceDisconnectTitle": "اتصال شما قطع شدهاست.",
|
||||
"conferenceReloadMsg": "ما در حال تلاش برای حل این مشکل هستیم. تلاش برای اتصال دوباره در {{seconds}} ثانیه دیگر...",
|
||||
"conferenceReloadMsg": "ما در حال تلاش برای حل این مشکل هستیم. تلاش برای اتصال دوباره در {{seconds}} ثانیه دیگر…",
|
||||
"conferenceReloadTitle": "متأسفانه مشکلی پیش آمد.",
|
||||
"confirm": "تأیید",
|
||||
"confirmNo": "خیر",
|
||||
@@ -580,7 +580,7 @@
|
||||
"errorLiveStreamNotEnabled": "پخش زنده برای {{email}} فعال نیست. لطفاً پخش زنده را فعال کنید یا وارد یک حساب کاربری با پخش زندهٔ فعال شوید.",
|
||||
"expandedOff": "پخش زنده متوقف شده است",
|
||||
"expandedOn": "این جلسه درحال حاضر در یوتیوب درحال پخش است.",
|
||||
"expandedPending": "پخش زنده در حال شروع است...",
|
||||
"expandedPending": "پخش زنده در حال شروع است…",
|
||||
"failedToStart": "شروع پخش زنده ناموفق بود",
|
||||
"getStreamKeyManually": "ما نتوانستیم هیچ پخش زندهای را دریافت کنیم. کلید پخش زنده خود را بهصورت دستی از یوتیوب دریافت کنید.",
|
||||
"googlePrivacyPolicy": "سیاست محرمانگی گوگل",
|
||||
@@ -592,7 +592,7 @@
|
||||
"offBy": "{{name}} پخش زنده را متوقف کرد",
|
||||
"on": "پخش زنده شروع شد",
|
||||
"onBy": "{{name}} پخش زنده را شروع کرد",
|
||||
"pending": "درحال شروع پخش زنده...",
|
||||
"pending": "درحال شروع پخش زنده…",
|
||||
"serviceName": "خدمت پخش زنده",
|
||||
"sessionAlreadyActive": "این جلسه از قبل درحال ضبط یا پخش زنده است.",
|
||||
"signIn": "ورود با حساب گوگل",
|
||||
@@ -622,10 +622,10 @@
|
||||
"joinRejectedMessage": "درخواست پیوستن شما توسط مدیر جلسه رد شد.",
|
||||
"joinRejectedTitle": "درخواست شما رد شد.",
|
||||
"joinTitle": "پیوستن به جلسه",
|
||||
"joinWithPasswordMessage": "تلاش برای پیوستن به جلسه با گذرواژه؛ شکیبا باشید...",
|
||||
"joinWithPasswordMessage": "تلاش برای پیوستن به جلسه با گذرواژه؛ شکیبا باشید…",
|
||||
"joiningMessage": "به محض پذیرش درخواست شما، به جلسه خواهید پیوست",
|
||||
"joiningTitle": "درخواست برای پیوستن به جلسه...",
|
||||
"joiningWithPasswordTitle": "درحال پیوستن با گذرواژه...",
|
||||
"joiningTitle": "درخواست برای پیوستن به جلسه…",
|
||||
"joiningWithPasswordTitle": "درحال پیوستن با گذرواژه…",
|
||||
"knockButton": "درخواست برای پیوستن",
|
||||
"knockTitle": "یک نفر میخواهد به جلسه بپیوندد",
|
||||
"knockingParticipantList": "فهرست شرکتکنندگان درانتظار",
|
||||
@@ -712,7 +712,7 @@
|
||||
"linkToSalesforceDescription": "شما میتوانید خلاصهٔ جلسه را به یک شیء Salesforce پیوند دهید.",
|
||||
"linkToSalesforceError": "خطا در پیوند جلسه به Salesforce",
|
||||
"linkToSalesforceKey": "پیونددادن این جلسه",
|
||||
"linkToSalesforceProgress": "درحال پیونددادن این جلسه به Salesforce...",
|
||||
"linkToSalesforceProgress": "درحال پیونددادن این جلسه به Salesforce…",
|
||||
"linkToSalesforceSuccess": "این جلسه به Salesforce پیوند داده شد",
|
||||
"localRecordingStarted": "{{name}} یک ضبط محلی را شروع کرده است.",
|
||||
"localRecordingStopped": "{{name}} یک ضبط محلی را متوقف کرده است.",
|
||||
@@ -847,7 +847,7 @@
|
||||
"callMe": "با من تماس بگیرید",
|
||||
"callMeAtNumber": "با این شماره با من تماس بگیرید:",
|
||||
"calling": "درحال تماس",
|
||||
"configuringDevices": "پیکربندی دستگاهها...",
|
||||
"configuringDevices": "پیکربندی دستگاهها…",
|
||||
"connectedWithAudioQ": "از طریق صدا متصل هستید؟",
|
||||
"connection": {
|
||||
"good": "اتصال اینترنت شما خوب بهنظر میرسد!",
|
||||
@@ -903,17 +903,17 @@
|
||||
},
|
||||
"presenceStatus": {
|
||||
"busy": "مشغول",
|
||||
"calling": "درحال تماسگرفتن...",
|
||||
"calling": "درحال تماسگرفتن…",
|
||||
"connected": "متصلشده",
|
||||
"connecting": "درحال اتصال...",
|
||||
"connecting2": "درحال اتصال*...",
|
||||
"connecting": "درحال اتصال…",
|
||||
"connecting2": "درحال اتصال*…",
|
||||
"disconnected": "قطعشده",
|
||||
"expired": "منقضیشده",
|
||||
"ignored": "نادیدهگرفته",
|
||||
"initializingCall": "درحال آغاز تماس...",
|
||||
"initializingCall": "درحال آغاز تماس…",
|
||||
"invited": "دعوتشده",
|
||||
"rejected": "ردشده",
|
||||
"ringing": "درحال زنگزدن..."
|
||||
"ringing": "درحال زنگزدن…"
|
||||
},
|
||||
"profile": {
|
||||
"avatar": "چِهرَک",
|
||||
@@ -947,7 +947,7 @@
|
||||
"errorFetchingLink": "خطا در واکِشی پیوند ضبط.",
|
||||
"expandedOff": "ضبط متوقف شده است",
|
||||
"expandedOn": "این جلسه هماکنون درحال ضبطشدن است.",
|
||||
"expandedPending": "ضبط درحال شروع است...",
|
||||
"expandedPending": "ضبط درحال شروع است…",
|
||||
"failedToStart": "شروع ضبط ناموفق بود",
|
||||
"fileSharingdescription": "همرسانی پیوند ضبط با شرکتکنندگان جلسه",
|
||||
"highlight": "علامتگذاری",
|
||||
@@ -975,7 +975,7 @@
|
||||
"on": "ضبط جلسه شروع شد",
|
||||
"onBy": "{{name}} ضبط جلسه را شروع کرد",
|
||||
"onlyRecordSelf": "فقط جریانهای صدا و تصویر من را ضبط کن",
|
||||
"pending": "درحال آمادهشدن برای ضبط جلسه...",
|
||||
"pending": "درحال آمادهشدن برای ضبط جلسه…",
|
||||
"rec": "ضبط",
|
||||
"saveLocalRecording": "ذخیرهٔ پروندهٔ ضبط به صورت محلی (آزمایشی)",
|
||||
"serviceDescription": "ضبط شما توسط خدمتِ ضبط ذخیره خواهد شد",
|
||||
@@ -1315,7 +1315,7 @@
|
||||
"failedToStart": "شروع ترانویسی ناموفق بود",
|
||||
"labelToolTip": "جلسه درحال ترانویسی است",
|
||||
"off": "توقف ترانویسی",
|
||||
"pending": "درحال آمادهشدن برای ترانویسی جلسه...",
|
||||
"pending": "درحال آمادهشدن برای ترانویسی جلسه…",
|
||||
"sourceLanguageDesc": "هماکنون زمان جلسه روی <b>{{sourceLanguage}}</b> تنظیم شده است.<br/> میتوانید آن را از اینجا تغییر دهید ",
|
||||
"sourceLanguageHere": "اینجا",
|
||||
"start": "شروع نمایش زیرنویسها",
|
||||
@@ -1326,16 +1326,7 @@
|
||||
},
|
||||
"unpinParticipant": "{{participantName}} - برداشتن سنجاق",
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "هنگامی که مرورگرتان اجازهٔ دسترسی میخواهد، <b><i>اجازهدادن</i></b> را انتخاب کنید.",
|
||||
"chromeGrantPermissions": "هنگامی که مرورگرتان اجازهٔ دسترسی میخواهد، <b><i>اجازهدادن</i></b> را انتخاب کنید.",
|
||||
"edgeGrantPermissions": "هنگامی که مرورگرتان اجازهٔ دسترسی میخواهد، <b><i>بله</i></b> را انتخاب کنید.",
|
||||
"electronGrantPermissions": "درحال تلاش برای دسترسی به دوربین و میکروفون شما",
|
||||
"firefoxGrantPermissions": "هنگامی که مرورگرتان اجازهٔ دسترسی میخواهد، <b><i>همرسانی دستگاه انتخابشده</i></b> را انتخاب کنید.",
|
||||
"iexplorerGrantPermissions": "هنگامی که مرورگرتان اجازهٔ دسترسی میخواهد، <b><i>تأیید</i></b> را انتخاب کنید.",
|
||||
"nwjsGrantPermissions": "لطفاً اجازهٔ استفاده از دوربین و میکروفون خود را بدهید",
|
||||
"operaGrantPermissions": "هنگامی که مرورگرتان اجازهٔ دسترسی میخواهد، <b><i>اجازهدادن</i></b> را انتخاب کنید.",
|
||||
"react-nativeGrantPermissions": "هنگامی که مرورگرتان اجازهٔ دسترسی میخواهد، <b><i>اجازهدادن</i></b> را انتخاب کنید.",
|
||||
"safariGrantPermissions": "هنگامی که مرورگرتان اجازهٔ دسترسی میخواهد، <b><i>تأیید</i></b> را انتخاب کنید."
|
||||
"grantPermissions": "لطفاً اجازهٔ استفاده از دوربین و میکروفون خود را بدهید."
|
||||
},
|
||||
"videoSIPGW": {
|
||||
"busy": "ما درحال آزادسازی منابع هستیم؛ لطفاً دقایقی دیگر دوباره تلاش کنید.",
|
||||
@@ -1413,7 +1404,7 @@
|
||||
"image6": "جنگل ",
|
||||
"image7": "طلوع خورشید",
|
||||
"none": "هیچیک",
|
||||
"pleaseWait": "لطفاً شکیبا باشید...",
|
||||
"pleaseWait": "لطفاً شکیبا باشید…",
|
||||
"removeBackground": "حذف پسزمینه",
|
||||
"slightBlur": "نیمهتار",
|
||||
"title": "پسزمینههای مجازی",
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
"DISCONNECTED": "Ei yhteyttä",
|
||||
"DISCONNECTING": "Yhteyttä katkaistaan",
|
||||
"ERROR": "Virhe",
|
||||
"RECONNECTING": "Tapahtui verkkovirhe. Yhdistetään uudelleen..."
|
||||
"RECONNECTING": "Tapahtui verkkovirhe. Yhdistetään uudelleen…"
|
||||
},
|
||||
"connectionindicator": {
|
||||
"address": "Osoite:",
|
||||
@@ -449,7 +449,7 @@
|
||||
"calling": "Soitetaan…",
|
||||
"connected": "Yhdistetty",
|
||||
"connecting": "Yhdistetään…",
|
||||
"connecting2": "Yhdistetään*...",
|
||||
"connecting2": "Yhdistetään*…",
|
||||
"disconnected": "Ei yhteyttä",
|
||||
"expired": "Vanhentunut",
|
||||
"ignored": "Sivuutettu",
|
||||
@@ -649,16 +649,7 @@
|
||||
"tr": "TR"
|
||||
},
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "Valitse <b><i>Salli</i></b>, kun selain pyytää käyttöoikeuksia.",
|
||||
"chromeGrantPermissions": "Valitse <b><i>Salli</i></b>, kun selain pyytää käyttöoikeuksia.",
|
||||
"edgeGrantPermissions": "Valitse <b><i>Kyllä</i></b>, kun selain pyytää käyttöoikeuksia.",
|
||||
"electronGrantPermissions": "Myönnä käyttöoikeudet laitteesi kameran ja mikrofonin käyttöön.",
|
||||
"firefoxGrantPermissions": "Valitse <b><i>Jaa havaittu laite</i></b>, kun selain pyytää käyttöoikeuksia.",
|
||||
"iexplorerGrantPermissions": "Valitse <b><i>OK</i></b>, kun selain pyytää käyttöoikeuksia.",
|
||||
"nwjsGrantPermissions": "Myönnä käyttöoikeudet laitteesi kameran ja mikrofonin käyttöön.",
|
||||
"operaGrantPermissions": "Valitse <b><i>Salli</i></b>, kun selain pyytää käyttöoikeuksia.",
|
||||
"react-nativeGrantPermissions": "Valitse <b><i>Salli</i></b>, kun selain pyytää käyttöoikeuksia.",
|
||||
"safariGrantPermissions": "Valitse <b><i>OK</i></b>, kun selain pyytää käyttöoikeuksia."
|
||||
"grantPermissions": "Myönnä käyttöoikeudet laitteesi kameran ja mikrofonin käyttöön."
|
||||
},
|
||||
"videoSIPGW": {
|
||||
"busy": "Yritämme vapauttaa resursseja. Yritä uudelleen muutaman minuutin kuluttua.",
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
"noResults": "Aucun résultat de recherche correspondant",
|
||||
"outlookEmail": "Outlook",
|
||||
"phoneNumbers": "Numéros de téléphone",
|
||||
"searching": "Recherche...",
|
||||
"searching": "Recherche…",
|
||||
"shareInvite": "Partager l'invitation à la réunion",
|
||||
"shareLink": "Partager le lien de la réunion pour inviter d'autres personnes",
|
||||
"shareStream": "Partager le lien de diffusion en direct",
|
||||
@@ -145,7 +145,7 @@
|
||||
"installExtensionText": "Installer l'extension pour l'intégration de Google Calendar et Office 365"
|
||||
},
|
||||
"connectingOverlay": {
|
||||
"joiningRoom": "Connexion à la réunion ..."
|
||||
"joiningRoom": "Connexion à la réunion…"
|
||||
},
|
||||
"connection": {
|
||||
"ATTACHED": "Attachée",
|
||||
@@ -157,9 +157,9 @@
|
||||
"DISCONNECTED": "Déconnecté",
|
||||
"DISCONNECTING": "Déconnexion en cours",
|
||||
"ERROR": "Erreur",
|
||||
"FETCH_SESSION_ID": "Obtention d'un identifiant de session ...",
|
||||
"FETCH_SESSION_ID": "Obtention d'un identifiant de session…",
|
||||
"GET_SESSION_ID_ERROR": "Obtenir une erreur d'identifiant de session : {{code}}",
|
||||
"GOT_SESSION_ID": "Obtention d'un identifiant de session ... Terminée",
|
||||
"GOT_SESSION_ID": "Obtention d'un identifiant de session… Terminée",
|
||||
"LOW_BANDWIDTH": "La vidéo de {{displayName}} a été coupée pour économiser de la bande passante"
|
||||
},
|
||||
"connectionindicator": {
|
||||
@@ -224,8 +224,8 @@
|
||||
"noMobileApp": "Vous n’avez pas l’application ?",
|
||||
"or": "OU",
|
||||
"termsAndConditions": "En continuant, vous acceptez nos <a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>conditions générales d’utilisation.</a>",
|
||||
"title": "Lancement de votre réunion dans {{app}} en cours ...",
|
||||
"titleNew": "Lancement de votre réunion ...",
|
||||
"title": "Lancement de votre réunion dans {{app}} en cours…",
|
||||
"titleNew": "Lancement de votre réunion…",
|
||||
"tryAgainButton": "Réessayez sur le bureau",
|
||||
"unsupportedBrowser": "Il semble que vous utilisez un navigateur non supporté."
|
||||
},
|
||||
@@ -266,7 +266,7 @@
|
||||
"WaitForHostMsg": "La conférence n'a pas encore commencé. Si vous en êtes l'hôte, veuillez vous authentifier. Sinon, veuillez attendre son arrivée.",
|
||||
"WaitForHostNoAuthMsg": "La conférence n'a pas encore commencé car aucun modérateur n'est encore arrivé. Veuillez patienter.",
|
||||
"WaitingForHostButton": "Attendre l'hôte",
|
||||
"WaitingForHostTitle": "En attente de l'hôte ...",
|
||||
"WaitingForHostTitle": "En attente de l'hôte…",
|
||||
"Yes": "Oui",
|
||||
"accessibilityLabel": {
|
||||
"Cancel": "Annuler (quiter la popup)",
|
||||
@@ -294,9 +294,9 @@
|
||||
"cameraUnknownError": "Vous ne pouvez pas utiliser la caméra pour une raison inconnue.",
|
||||
"cameraUnsupportedResolutionError": "Votre appareil ne prend pas en charge la résolution vidéo requise.",
|
||||
"close": "Fermer",
|
||||
"conferenceDisconnectMsg": "Veuillez vérifier votre connexion réseau. Reconnexion dans {{seconds}} sec ...",
|
||||
"conferenceDisconnectMsg": "Veuillez vérifier votre connexion réseau. Reconnexion dans {{seconds}} sec…",
|
||||
"conferenceDisconnectTitle": "Vous avez été déconnecté.",
|
||||
"conferenceReloadMsg": "On essaie d'arranger ça. Reconnexion dans {{seconds}} secondes ...",
|
||||
"conferenceReloadMsg": "On essaie d'arranger ça. Reconnexion dans {{seconds}} secondes…",
|
||||
"conferenceReloadTitle": "Malheureusement, un problème est survenu",
|
||||
"confirm": "Confirmer",
|
||||
"confirmNo": "Non",
|
||||
@@ -334,6 +334,7 @@
|
||||
"kickParticipantButton": "Expulser",
|
||||
"kickParticipantDialog": "Êtes-vous sûr(e) de vouloir expulser ce participant ?",
|
||||
"kickParticipantTitle": "Expulser ce participant ?",
|
||||
"kickSystemTitle": "Oups ! Vous avez été expulsé de la réunion",
|
||||
"kickTitle": "Oups ! vous avez été expulsé(e) par {{participantDisplayName}}",
|
||||
"linkMeeting": "Relier la conférence",
|
||||
"linkMeetingTitle": "Relier la conférence à Salesforce",
|
||||
@@ -439,7 +440,10 @@
|
||||
"shareScreenWarningD2": "vous devez arrêter le partage d'audio, démarrer le partage d'écran et cocher l'option \"Partager l'audio\".",
|
||||
"shareScreenWarningH1": "Si vous voulez partager uniquement votre écran:",
|
||||
"shareScreenWarningTitle": "Vous devez cesser de partager votre audio avant de partager votre écran",
|
||||
"shareVideoConfirmPlay": "Vous êtes sur le point d'ouvrir un site web externe. Voulez-vous continuer ?",
|
||||
"shareVideoConfirmPlayTitle": "{{name}} a partagé une vidéo avec vous.",
|
||||
"shareVideoLinkError": "Veuillez renseigner un lien de diffusion vidéo fonctionnel.",
|
||||
"shareVideoLinkStopped": "La vidéo de {{name}} a été arrêtée.",
|
||||
"shareVideoTitle": "Partager une vidéo",
|
||||
"shareYourScreen": "Partager votre écran",
|
||||
"shareYourScreenDisabled": "Le partage d'écran est désactivé.",
|
||||
@@ -625,7 +629,7 @@
|
||||
"errorLiveStreamNotEnabled": "La diffusion en direct n'est pas activée pour {{email}}. Merci de l'activer ou de vous connecter avec un compte où elle est déjà activée.",
|
||||
"expandedOff": "La diffusion en direct a été arrêtée",
|
||||
"expandedOn": "La conférence est en cours de diffusion sur YouTube.",
|
||||
"expandedPending": "La diffusion en direct a commencé ...",
|
||||
"expandedPending": "La diffusion en direct a commencé…",
|
||||
"failedToStart": "La diffusion n'a pas réussi à démarrer",
|
||||
"getStreamKeyManually": "Nous n'avons pas réussi à récupérer un flux de direct. Essayez d'obtenir votre clé de diffusion en direct sur YouTube.",
|
||||
"googlePrivacyPolicy": "Politique de confidentialité de Google",
|
||||
@@ -637,7 +641,8 @@
|
||||
"offBy": "{{name}} a arrêté la diffusion en direct",
|
||||
"on": "En direct",
|
||||
"onBy": "{{name}} a démarré la diffusion en direct",
|
||||
"pending": "Lancement du direct ...",
|
||||
"pending": "Lancement du direct…",
|
||||
"policyError": "Vous avez essayé de démarrer une diffusion en direct trop rapidement. Veuillez réessayer plus tard !",
|
||||
"serviceName": "Service de diffusion en direct",
|
||||
"sessionAlreadyActive": "Cette session est déjà en cours d'enregistrement ou de diffusion.",
|
||||
"signIn": "Se connecter avec Google",
|
||||
@@ -667,10 +672,10 @@
|
||||
"joinRejectedMessage": "Votre requête pour rejoindre une réunion a été refusée par un modérateur.",
|
||||
"joinRejectedTitle": "Demande d'accès rejetée.",
|
||||
"joinTitle": "Rejoindre une réunion",
|
||||
"joinWithPasswordMessage": "Tentative de rejoindre avec mot de passe, patientez s'il vous plait ...",
|
||||
"joinWithPasswordMessage": "Tentative de rejoindre avec mot de passe, patientez s'il vous plait…",
|
||||
"joiningMessage": "Vous allez rejoindre une réunion dès que quelqu'un aura accepté votre demande",
|
||||
"joiningTitle": "Demander à rejoindre une réunion ...",
|
||||
"joiningWithPasswordTitle": "Rejoindre avec mot de passe ...",
|
||||
"joiningTitle": "Demander à rejoindre une réunion…",
|
||||
"joiningWithPasswordTitle": "Rejoindre avec mot de passe…",
|
||||
"knockButton": "Demander à rejoindre",
|
||||
"knockTitle": "Quelqu'un souhaite rejoindre la réunion",
|
||||
"knockingParticipantList": "Liste des participants en attente",
|
||||
@@ -736,6 +741,7 @@
|
||||
"connectedOneMember": "{{name}} a rejoint la réunion",
|
||||
"connectedThreePlusMembers": "{{name}} et {{count}} autres personnes ont rejoint la réunion",
|
||||
"connectedTwoMembers": "{{first}} et {{second}} ont rejoint la réunion",
|
||||
"connectionFailed": "Connexion échouée. Veuillez réessayer plus tard !",
|
||||
"dataChannelClosed": "Qualité vidéo dégradée",
|
||||
"dataChannelClosedDescription": "Le canal de communication avec le Bridge a été interrompu, la qualité vidéo se trouve limitée à sa valeur la plus faible.",
|
||||
"dataChannelClosedDescriptionWithAudio": "Le canal de pont est fermé, ce qui peut entraîner des perturbations de l'audio et de la vidéo.",
|
||||
@@ -750,6 +756,9 @@
|
||||
"gifsMenu": "GIPHY",
|
||||
"groupTitle": "Notifications",
|
||||
"hostAskedUnmute": "Le modérateur souhaite vous donner la parole",
|
||||
"invalidTenant": "Tenant invalide",
|
||||
"invalidTenantHyphenDescription": "Le tenant que vous utilisez est invalide (commence ou se termine par '-').",
|
||||
"invalidTenantLengthDescription": "Le tenant que vous utilisez est trop long.",
|
||||
"invitedOneMember": "{{name}} a été invité(e)",
|
||||
"invitedThreePlusMembers": "{{name}} et {{count}} autres ont été invités",
|
||||
"invitedTwoMembers": "{{first}} et {{second}} ont été invités",
|
||||
@@ -762,7 +771,7 @@
|
||||
"linkToSalesforceDescription": "Vous pouvez lier le résumé de la conférence à un objet Salesforce.",
|
||||
"linkToSalesforceError": "Impossible de relier la conférence à Salesforce",
|
||||
"linkToSalesforceKey": "Relier cette conférence",
|
||||
"linkToSalesforceProgress": "Liaison de la conférence à Salesforce...",
|
||||
"linkToSalesforceProgress": "Liaison de la conférence à Salesforce…",
|
||||
"linkToSalesforceSuccess": "La conférence a été reliée à Salesforce",
|
||||
"localRecordingStarted": "{{name}} a commencé un enregistrement local.",
|
||||
"localRecordingStopped": "{{name}} a arrêté un enregistrement local.",
|
||||
@@ -786,6 +795,7 @@
|
||||
"newDeviceAction": "Utiliser",
|
||||
"newDeviceAudioTitle": "Nouveau périphérique audio détecté",
|
||||
"newDeviceCameraTitle": "Nouvelle caméra détectée",
|
||||
"nextToSpeak": "Vous êtes le prochain à prendre la parole",
|
||||
"noiseSuppressionDesktopAudioDescription": "La suppression de bruit ne peut pas être activée en même temps que la partage audio du système, veuillez le désactiver et réessayer.",
|
||||
"noiseSuppressionFailedTitle": "Échec du démarrage de la suppression de bruit",
|
||||
"noiseSuppressionStereoDescription": "La suppression de bruit d’une source stéréo n’est pas encore supportée.",
|
||||
@@ -820,6 +830,7 @@
|
||||
"videoUnmuteBlockedDescription": "Le rétablissement de la vidéo a été bloqué temporairement en raison de limites système.",
|
||||
"videoUnmuteBlockedTitle": "Rétablissement de la caméra bloqué !",
|
||||
"viewLobby": "Voir la salle d'attente",
|
||||
"viewParticipants": "Voir les participants",
|
||||
"viewVisitors": "Voir les visiteurs",
|
||||
"waitingParticipants": "{{waitingParticipants}} personnes",
|
||||
"waitingVisitors": "Visiteurs en attente dans la file : {{waitingVisitors}}",
|
||||
@@ -839,6 +850,8 @@
|
||||
"breakoutRooms": "Salles annexes",
|
||||
"goLive": "Passer en direct",
|
||||
"invite": "Inviter quelqu'un",
|
||||
"lowerAllHands": "Abaisser toutes les mains",
|
||||
"lowerHand": "Abaisser la main",
|
||||
"moreModerationActions": "Options de modération supplémentaires",
|
||||
"moreModerationControls": "Options de modération supplémentaires",
|
||||
"moreParticipantOptions": "Options supplémentaires pour les participants",
|
||||
@@ -875,6 +888,7 @@
|
||||
"submit": "Envoyer"
|
||||
},
|
||||
"by": "Par {{ name }}",
|
||||
"closeButton": "Fermer le sondage",
|
||||
"create": {
|
||||
"addOption": "Ajouter une option",
|
||||
"answerPlaceholder": "Option {{index}}",
|
||||
@@ -911,12 +925,14 @@
|
||||
"callMe": "Appelez-moi",
|
||||
"callMeAtNumber": "Appelez-moi à ce numéro :",
|
||||
"calling": "Appel",
|
||||
"configuringDevices": "Configuration des appareils ...",
|
||||
"configuringDevices": "Configuration des appareils…",
|
||||
"connectedWithAudioQ": "Êtes-vous connecté avec le microphone ?",
|
||||
"connection": {
|
||||
"failed": "Le test de connexion a échoué !",
|
||||
"good": "Votre connexion Internet est bonne !",
|
||||
"nonOptimal": "Votre connexion n'est pas optimale",
|
||||
"poor": "Vous avez une mauvaise connexion"
|
||||
"poor": "Vous avez une mauvaise connexion",
|
||||
"running": "Exécution du test de connexion…"
|
||||
},
|
||||
"connectionDetails": {
|
||||
"audioClipping": "Attendez vous à ce que votre son soit coupé.",
|
||||
@@ -925,6 +941,7 @@
|
||||
"goodQuality": "Impressionnant ! La qualité de vos médias sera excellente",
|
||||
"noMediaConnectivity": "Nous n'avons pas pu trouver un moyen d'établir une connectivité multimédia pour ce test. Cela est généralement causé par un pare-feu ou un NAT.",
|
||||
"noVideo": "Attendez vous à ce que votre qualité vidéo soit très mauvaise.",
|
||||
"testFailed": "Le test de connexion a rencontré des problèmes inattendus, mais cela pourrait ne pas affecter votre expérience.",
|
||||
"undetectable": "Si vous ne parvenez toujours pas à passer des appels dans le navigateur, nous vous recommandons de vous assurer que vos haut-parleurs, microphone et caméra sont correctement configurés, que vous avez accordé à votre navigateur les droits d'utiliser votre microphone et votre caméra et que la version de votre navigateur est à jour. Si vous rencontrez toujours des difficultés pour appeler, vous devez contacter le développeur de l'application Web.",
|
||||
"veryPoorConnection": "Attendez vous à ce que la qualité de votre appel soit très mauvaise",
|
||||
"videoFreezing": "Attendez vous à ce que votre vidéo saute, soit noire, et pixelisée.",
|
||||
@@ -968,17 +985,17 @@
|
||||
},
|
||||
"presenceStatus": {
|
||||
"busy": "Occupé",
|
||||
"calling": "Appel ...",
|
||||
"calling": "Appel…",
|
||||
"connected": "Connecté",
|
||||
"connecting": "Connexion en cours ...",
|
||||
"connecting2": "Connexion en cours* ...",
|
||||
"connecting": "Connexion en cours…",
|
||||
"connecting2": "Connexion en cours*…",
|
||||
"disconnected": "Déconnecté",
|
||||
"expired": "Expiré",
|
||||
"ignored": "Ignoré",
|
||||
"initializingCall": "Lancement de l'appel ...",
|
||||
"initializingCall": "Lancement de l'appel…",
|
||||
"invited": "Invité(e)",
|
||||
"rejected": "Rejeté",
|
||||
"ringing": "Appel en cours ..."
|
||||
"ringing": "Appel en cours…"
|
||||
},
|
||||
"profile": {
|
||||
"avatar": "avatar",
|
||||
@@ -1012,7 +1029,7 @@
|
||||
"errorFetchingLink": "Erreur de récupération du lien d'enregistrement.",
|
||||
"expandedOff": "L'enregistrement a été arrêté",
|
||||
"expandedOn": "Cette conférence est actuellement en cours d'enregistrement.",
|
||||
"expandedPending": "Démarrage de l'enregistrement ...",
|
||||
"expandedPending": "Démarrage de l'enregistrement…",
|
||||
"failedToStart": "L'enregistrement n'a pas réussi à démarrer",
|
||||
"fileSharingdescription": "Partager l'enregistrement avec les participants de la réunion",
|
||||
"highlight": "Souligner",
|
||||
@@ -1039,7 +1056,8 @@
|
||||
"on": "Enregistrement",
|
||||
"onBy": "{{name}} a démarré l'enregistrement",
|
||||
"onlyRecordSelf": "Enregistrer seulement mon audio et ma vidéo.",
|
||||
"pending": "Préparation de l'enregistrement de la réunion ...",
|
||||
"pending": "Préparation de l'enregistrement de la réunion…",
|
||||
"policyError": "Vous avez essayé de démarrer un enregistrement trop rapidement. Veuillez réessayer plus tard !",
|
||||
"recordAudioAndVideo": "Enregistrer l'audio et la vidéo",
|
||||
"recordTranscription": "Enregistrer la transcription",
|
||||
"saveLocalRecording": "Sauvegarder l’enregistrement local (Beta)",
|
||||
@@ -1088,6 +1106,7 @@
|
||||
"desktopShareWarning": "Vous devez repartager l'écran pour que ces paramètres soient utilisés.",
|
||||
"devices": "Périphériques",
|
||||
"followMe": "Tout le monde me suit",
|
||||
"followMeRecorder": "L'enregistreur me suit",
|
||||
"framesPerSecond": "images par seconde",
|
||||
"incomingMessage": "un message arrive",
|
||||
"language": "Langue",
|
||||
@@ -1234,6 +1253,7 @@
|
||||
"lobbyButton": "Activer / Désactiver le mode salle d'attente",
|
||||
"localRecording": "Activer / Désactiver les contrôles d'enregistrement local",
|
||||
"lockRoom": "Activer / Désactiver le mot de passe de la réunion",
|
||||
"love": "Cœur",
|
||||
"lowerHand": "Baisser la main",
|
||||
"moreActions": "Activer / Désactiver le menu d'actions supplémentaires",
|
||||
"moreActionsMenu": "Menu d'actions supplémentaires",
|
||||
@@ -1251,6 +1271,7 @@
|
||||
"privateMessage": "Envoyer un message privé",
|
||||
"profile": "Éditer votre profil",
|
||||
"raiseHand": "Lever la main",
|
||||
"react": "Réactions aux messages",
|
||||
"reactions": "Réactions",
|
||||
"reactionsMenu": "Ouvrir / fermer le menu réactions",
|
||||
"recording": "Activer / Désactiver l'enregistrement",
|
||||
@@ -1322,6 +1343,7 @@
|
||||
"lobbyButtonEnable": "Activer le mode salle d'attente / contrôle des participant(e)s",
|
||||
"login": "Connexion",
|
||||
"logout": "Déconnexion",
|
||||
"love": "Cœur",
|
||||
"lowerYourHand": "Baisser la main",
|
||||
"moreActions": "Plus d'actions",
|
||||
"moreOptions": "Plus d'options",
|
||||
@@ -1347,6 +1369,7 @@
|
||||
"raiseYourHand": "Lever la main",
|
||||
"reactionBoo": "Envoyer réaction huer",
|
||||
"reactionClap": "Envoyer réaction applaudir",
|
||||
"reactionHeart": "Envoyer une réaction en forme de cœur",
|
||||
"reactionLaugh": "Envoyer réaction rire",
|
||||
"reactionLike": "Envoyer réaction approuver",
|
||||
"reactionSilence": "Envoyer réaction silence",
|
||||
@@ -1380,7 +1403,7 @@
|
||||
"transcribing": {
|
||||
"ccButtonTooltip": "Activer / Désactiver les sous-titres",
|
||||
"expandedLabel": "La transcription est actuellement activée",
|
||||
"failedToStart": "Échec de démarrage de la transcription",
|
||||
"failed": "La transcription a échoué",
|
||||
"labelToolTip": "La transcription de la réunion est en cours",
|
||||
"sourceLanguageDesc": "Actuellement, la langue de la réunion est sélectionnée à <b>{{sourceLanguage}}</b>. <br/> Vous pouvez la changer à partir de ",
|
||||
"sourceLanguageHere": "ici",
|
||||
@@ -1392,16 +1415,7 @@
|
||||
},
|
||||
"unpinParticipant": "Désépingler - {{participantName}}",
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "Sélectionnez <b><i>Autoriser</i></b> lorsque votre navigateur demande votre autorisation.",
|
||||
"chromeGrantPermissions": "Sélectionnez <b><i>Autoriser</i></b> lorsque votre navigateur demande votre autorisation.",
|
||||
"edgeGrantPermissions": "Sélectionnez <b><i>Oui</i></b> quand le navigateur demande votre autorisation.",
|
||||
"electronGrantPermissions": "Veuillez autoriser le partage de votre camera et microphone.",
|
||||
"firefoxGrantPermissions": "Sélectionnez <b><i>Partager le périphérique sélectionné</i></b> lorsque votre navigateur demande votre autorisation.",
|
||||
"iexplorerGrantPermissions": "Sélectionnez <b><i>OK</i></b> quand le navigateur demande votre autorisation.",
|
||||
"nwjsGrantPermissions": "Veuillez autoriser le partage de votre camera et microphone.",
|
||||
"operaGrantPermissions": "Sélectionnez <b><i>Autoriser</i></b> lorsque votre navigateur demande votre autorisation.",
|
||||
"react-nativeGrantPermissions": "Sélectionnez <b><i>Autoriser</i></b> lorsque votre navigateur demande votre autorisation.",
|
||||
"safariGrantPermissions": "Sélectionnez <b><i>OK</i></b> quand le navigateur demande votre autorisation."
|
||||
"grantPermissions": "Veuillez autoriser le partage de votre camera et microphone."
|
||||
},
|
||||
"videoSIPGW": {
|
||||
"busy": "Nous tentons de libérer les ressources requises. Veuillez réessayez dans quelques minutes.",
|
||||
@@ -1480,7 +1494,7 @@
|
||||
"image6": "Forêt ",
|
||||
"image7": "Lever de soleil",
|
||||
"none": "Rien",
|
||||
"pleaseWait": "Veuillez patienter...",
|
||||
"pleaseWait": "Veuillez patienter…",
|
||||
"removeBackground": "Supprimer l'arrière-plan",
|
||||
"slightBlur": "Léger flou",
|
||||
"title": "Arrière-plan virtuel",
|
||||
@@ -1490,10 +1504,15 @@
|
||||
},
|
||||
"visitors": {
|
||||
"chatIndicator": "(visiteur)",
|
||||
"labelTooltip": "Nombre de Visiteurs",
|
||||
"joinMeeting": {
|
||||
"description": "Vous êtes actuellement un observateur dans cette conférence.",
|
||||
"raiseHand": "Levez la main",
|
||||
"title": "Rejoindre la réunion",
|
||||
"wishToSpeak": "Si vous souhaitez prendre la parole, veuillez lever la main ci-dessous et attendre l'approbation du modérateur."
|
||||
},
|
||||
"labelTooltip": "Nombre de Visiteurs: {{count}}",
|
||||
"notification": {
|
||||
"demoteDescription": "Envoyé ici par {{actor}}, levez la main pour participer",
|
||||
"description": "Pour participer lever la main.",
|
||||
"noMainParticipantsDescription": "Un participant doit démarrer la réunion. Veuillez réessayer dans un moment.",
|
||||
"noMainParticipantsTitle": "Cette réunion n'a pas encore commencé.",
|
||||
"noVisitorLobby": "Vous ne pouvez pas rejoindre tant qu'une salle d'attente est activée pour la réunion.",
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
"searchNumbers": "Ajouter des numéros de téléphone",
|
||||
"searchPeople": "Rechercher des personnes",
|
||||
"searchPeopleAndNumbers": "Rechercher des personnes ou ajouter des numéros de téléphone",
|
||||
"searching": "Recherche...",
|
||||
"searching": "Recherche…",
|
||||
"shareInvite": "Partager l'invitation à la réunion",
|
||||
"shareLink": "Partager le lien de la réunion pour inviter d'autres personnes",
|
||||
"shareStream": "Partager le lien de diffusion en direct",
|
||||
@@ -158,11 +158,11 @@
|
||||
"DISCONNECTED": "Déconnecté",
|
||||
"DISCONNECTING": "Déconnexion en cours",
|
||||
"ERROR": "Erreur",
|
||||
"FETCH_SESSION_ID": "Obtention d'un identifiant de session ...",
|
||||
"FETCH_SESSION_ID": "Obtention d'un identifiant de session…",
|
||||
"GET_SESSION_ID_ERROR": "Obtenir une erreur d'identifiant de session: {{code}}",
|
||||
"GOT_SESSION_ID": "Obtention d'un identifiant de session ... Terminée",
|
||||
"GOT_SESSION_ID": "Obtention d'un identifiant de session… Terminée",
|
||||
"LOW_BANDWIDTH": "La vidéo de {{displayName}} a été coupée pour économiser de la bande passante",
|
||||
"RECONNECTING": "Un problème de réseau est survenu. Reconnexion en cours..."
|
||||
"RECONNECTING": "Un problème de réseau est survenu. Reconnexion en cours…"
|
||||
},
|
||||
"connectionindicator": {
|
||||
"address": "Adresse :",
|
||||
@@ -225,7 +225,7 @@
|
||||
"openApp": "Continuer vers l'application",
|
||||
"termsAndConditions": "En continuant, vous acceptez nos <a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>conditions générales d’utilisation.</a>",
|
||||
"title": "Démarrage de votre réunion dans {{app}} en cours…",
|
||||
"titleNew": "Démarrage de votre réunion ...",
|
||||
"titleNew": "Démarrage de votre réunion…",
|
||||
"tryAgainButton": "Veuillez réessayer sur votre ordinateur",
|
||||
"unsupportedBrowser": "Il semble que vous utilisez un navigateur non supporté."
|
||||
},
|
||||
@@ -266,7 +266,7 @@
|
||||
"WaitForHostMsg": "La conférence n'a pas encore démarré. Si vous êtes l'hôte, veuillez vous authentifier. Sinon, veuillez attendre que l'hôte arrive.",
|
||||
"WaitingForHost": "En attente de l'hôte…",
|
||||
"WaitingForHostButton": "Attendre l'hôte",
|
||||
"WaitingForHostTitle": "En attente de l'hôte ...",
|
||||
"WaitingForHostTitle": "En attente de l'hôte…",
|
||||
"Yes": "Oui",
|
||||
"accessibilityLabel": {
|
||||
"Cancel": "Annuler (quiter la fenêtre)",
|
||||
@@ -676,10 +676,10 @@
|
||||
"joinRejectedMessage": "Votre requête pour rejoindre une réunion a été refusée par un modérateur.",
|
||||
"joinRejectedTitle": "Demande d'accès rejetée.",
|
||||
"joinTitle": "Rejoindre une réunion",
|
||||
"joinWithPasswordMessage": "Tentative de rejoindre avec mot de passe, patientez s'il vous plait ...",
|
||||
"joinWithPasswordMessage": "Tentative de rejoindre avec mot de passe, patientez s'il vous plait…",
|
||||
"joiningMessage": "Vous allez rejoindre une réunion dès que quelqu'un aura accepté votre demande",
|
||||
"joiningTitle": "Demander à rejoindre une réunion ...",
|
||||
"joiningWithPasswordTitle": "Rejoindre avec mot de passe ...",
|
||||
"joiningTitle": "Demander à rejoindre une réunion…",
|
||||
"joiningWithPasswordTitle": "Rejoindre avec mot de passe…",
|
||||
"knockButton": "Demander à rejoindre",
|
||||
"knockTitle": "Quelqu'un souhaite rejoindre la réunion",
|
||||
"knockingParticipantList": "Liste des participants en attente",
|
||||
@@ -770,7 +770,7 @@
|
||||
"linkToSalesforceDescription": "Vous pouvez lier le résumé de la conférence à un objet Salesforce.",
|
||||
"linkToSalesforceError": "Impossible de relier la conférence à Salesforce",
|
||||
"linkToSalesforceKey": "Relier cette conférence",
|
||||
"linkToSalesforceProgress": "Liaison de la conférence à Salesforce...",
|
||||
"linkToSalesforceProgress": "Liaison de la conférence à Salesforce…",
|
||||
"linkToSalesforceSuccess": "La conférence a été reliée à Salesforce",
|
||||
"localRecordingStarted": "{{name}} a commencé un enregistrement local.",
|
||||
"localRecordingStopped": "{{name}} a arrêté un enregistrement local.",
|
||||
@@ -907,7 +907,7 @@
|
||||
"callMe": "Appelez-moi",
|
||||
"callMeAtNumber": "Appelez-moi à ce numéro :",
|
||||
"calling": "Appel",
|
||||
"configuringDevices": "Configuration des appareils ...",
|
||||
"configuringDevices": "Configuration des appareils…",
|
||||
"connectedWithAudioQ": "Êtes-vous connecté avec le microphone ?",
|
||||
"connection": {
|
||||
"good": "Votre connexion Internet est bonne !",
|
||||
@@ -966,7 +966,7 @@
|
||||
"calling": "Appel en cours…",
|
||||
"connected": "Connecté",
|
||||
"connecting": "Connexion en cours…",
|
||||
"connecting2": "Connexion en cours*...",
|
||||
"connecting2": "Connexion en cours*…",
|
||||
"disconnected": "Déconnecté",
|
||||
"expired": "Expiré",
|
||||
"ignored": "Ignoré",
|
||||
@@ -1381,16 +1381,7 @@
|
||||
},
|
||||
"unpinParticipant": "Désépingler - {{participantName}}",
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "Sélectionner <b><i>Autoriser</i></b> lorsque votre navigateur vous demande l'autorisation.",
|
||||
"chromeGrantPermissions": "Sélectionner <b><i>Autoriser</i></b> lorsque votre navigateur vous demande l'autorisation.",
|
||||
"edgeGrantPermissions": "Sélectionner <b><i>Oui</i></b> lorsque votre navigateur demande l'autorisation.",
|
||||
"electronGrantPermissions": "Veuillez accorder l'autorisation d'utiliser votre caméra et votre micro",
|
||||
"firefoxGrantPermissions": "Sélectionner <b><i>Partager le dispositif sélectionné</i></b> lorsque votre navigateur demande l'autorisation.",
|
||||
"iexplorerGrantPermissions": "Sélectionner <b><i>OK</i></b> lorsque votre navigateur demande l'autorisation.",
|
||||
"nwjsGrantPermissions": "Veuillez accorder l'autorisation d'utiliser votre caméra et votre micro",
|
||||
"operaGrantPermissions": "Sélectionner <b><i>Autoriser</i></b> lorsque votre navigateur vous demande l'autorisation.",
|
||||
"react-nativeGrantPermissions": "Sélectionner <b><i>Autoriser</i></b> lorsque votre navigateur vous demande l'autorisation.",
|
||||
"safariGrantPermissions": "Sélectionner <b><i>OK</i></b> lorsque votre navigateur demande l'autorisation."
|
||||
"grantPermissions": "Veuillez accorder l'autorisation d'utiliser votre caméra et votre micro."
|
||||
},
|
||||
"videoSIPGW": {
|
||||
"busy": "Libération des ressources en cours. Veuillez réessayer dans quelques minutes.",
|
||||
@@ -1470,7 +1461,7 @@
|
||||
"image6": "Forêt ",
|
||||
"image7": "Lever de soleil",
|
||||
"none": "Rien",
|
||||
"pleaseWait": "Veuillez patienter...",
|
||||
"pleaseWait": "Veuillez patienter…",
|
||||
"removeBackground": "Supprimer l'arrière-plan",
|
||||
"slightBlur": "Léger flou",
|
||||
"title": "Arrière-plan virtuel",
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
"DISCONNECTED": "Desconectado",
|
||||
"DISCONNECTING": "Desconectando",
|
||||
"ERROR": "Erro",
|
||||
"RECONNECTING": "Produciuse un problema na rede. Reconectando..."
|
||||
"RECONNECTING": "Produciuse un problema na rede. Reconectando…"
|
||||
},
|
||||
"connectionindicator": {
|
||||
"address": "Enderezo:",
|
||||
@@ -465,7 +465,7 @@
|
||||
"calling": "Chamando…",
|
||||
"connected": "Conectado",
|
||||
"connecting": "Conectando…",
|
||||
"connecting2": "Conectando*...",
|
||||
"connecting2": "Conectando*…",
|
||||
"disconnected": "Desconectado",
|
||||
"expired": "Expirou",
|
||||
"ignored": "Ignorado",
|
||||
@@ -681,16 +681,7 @@
|
||||
"tr": "TR"
|
||||
},
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "Seleccionar <b><i>Permitir</i></b> cando o seu navegador pida permisos.",
|
||||
"chromeGrantPermissions": "Seleccionar <b><i>Permitir</i></b> cando o seu navegador pida permisos.",
|
||||
"edgeGrantPermissions": "Seleccionar <b><i>Si</i></b> cando o seu navegador pida permisos.",
|
||||
"electronGrantPermissions": "Conceda permisos para utilizar a súa cámara e micrófono",
|
||||
"firefoxGrantPermissions": "Seleccionar <b><i>Compartir o dispositivo seleccionado</i></b> cando o navegador pida permisos.",
|
||||
"iexplorerGrantPermissions": "Seleccionar <b><i>Aceptar</i></b> cando o seu navegador lle pida permisos. ",
|
||||
"nwjsGrantPermissions": "Conceda permisos para utilizar a súa cámara e micrófono",
|
||||
"operaGrantPermissions": "Seleccionar <b><i>Permitir</i></b> cando o seu navegador pida permisos.",
|
||||
"react-nativeGrantPermissions": "Seleccionar <b><i>Permitir</i></b> cando o seu navegador pida permisos.",
|
||||
"safariGrantPermissions": "Seleccionar <b><i>Aceptar</i></b> cando o seu navegador lle pida permisos. "
|
||||
"grantPermissions": "Conceda permisos para utilizar a súa cámara e micrófono."
|
||||
},
|
||||
"videoSIPGW": {
|
||||
"busy": "Estamos liberando recursos. Ténteo de novo nuns minutos.",
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
"installExtensionText": "התקן את התוסף לשילוב Google Calendar ו-Office 365"
|
||||
},
|
||||
"connectingOverlay": {
|
||||
"joiningRoom": "מחבר אותך למפגש שלך..."
|
||||
"joiningRoom": "מחבר אותך למפגש שלך…"
|
||||
},
|
||||
"connection": {
|
||||
"ATTACHED": "צרופה",
|
||||
@@ -80,9 +80,9 @@
|
||||
"DISCONNECTED": "לא מחובר",
|
||||
"DISCONNECTING": "מתנתק",
|
||||
"ERROR": "שגיאה",
|
||||
"FETCH_SESSION_ID": "השגת מזהה הפעלה...",
|
||||
"FETCH_SESSION_ID": "השגת מזהה הפעלה…",
|
||||
"GET_SESSION_ID_ERROR": "התקבלה שגיאה מזהה הפעלה: {{code}}",
|
||||
"GOT_SESSION_ID": "השגת מזהה הפעלה... בוצע",
|
||||
"GOT_SESSION_ID": "השגת מזהה הפעלה… בוצע",
|
||||
"LOW_BANDWIDTH": "הווידאו עבור {{displayName}} כבה כדי לשמור על רוחב הפס"
|
||||
},
|
||||
"connectionindicator": {
|
||||
@@ -127,7 +127,7 @@
|
||||
"downloadApp": "הורד את היישום",
|
||||
"launchWebButton": "הפעל ברשת",
|
||||
"openApp": "מתחבר ליישום",
|
||||
"title": "מפעיל את הפגישה שלך ב{{app}}...",
|
||||
"title": "מפעיל את הפגישה שלך ב{{app}}…",
|
||||
"tryAgainButton": "נסה שוב במחשב"
|
||||
},
|
||||
"defaultLink": "למשל {{url}}",
|
||||
@@ -156,7 +156,7 @@
|
||||
"Share": "שתף",
|
||||
"Submit": "שלח",
|
||||
"WaitForHostMsg": "הועידה טרם החלה. אם אתה המארח אז בצע אימות. אחרת, אנא המתן שהמארח יגיע.",
|
||||
"WaitingForHost": "ממתין למארח ...",
|
||||
"WaitingForHost": "ממתין למארח…",
|
||||
"Yes": "כן",
|
||||
"accessibilityLabel": {
|
||||
"liveStreaming": "שידור חי"
|
||||
@@ -173,9 +173,9 @@
|
||||
"cameraUnknownError": "לא ניתן להשתמש במצלמה מסיבה לא ידועה.",
|
||||
"cameraUnsupportedResolutionError": "המצלמה שלך אינה תומכת ברזולוציית וידאו הנדרשת.",
|
||||
"close": "סגור",
|
||||
"conferenceDisconnectMsg": "יתכן שתרצה לבדוק את חיבור הרשת שלך, מתחבר מחדש בעוד {{seconds}} שניות...",
|
||||
"conferenceDisconnectMsg": "יתכן שתרצה לבדוק את חיבור הרשת שלך, מתחבר מחדש בעוד {{seconds}} שניות…",
|
||||
"conferenceDisconnectTitle": "נותקת.",
|
||||
"conferenceReloadMsg": "אנו מנסים לתקן זאת, מתחבר מחדש בעוד {{seconds}} שניות...",
|
||||
"conferenceReloadMsg": "אנו מנסים לתקן זאת, מתחבר מחדש בעוד {{seconds}} שניות…",
|
||||
"conferenceReloadTitle": "לצערנו משהו השתבש.",
|
||||
"confirm": "אשר",
|
||||
"confirmNo": "לא",
|
||||
@@ -383,7 +383,7 @@
|
||||
"errorLiveStreamNotEnabled": "הזרמה בשידור חי אינו מופעל ב-{{email}}. אנא אפשר הזרמה בשידור חי או היכנס לחשבון עם שידור חי מופעל",
|
||||
"expandedOff": "השידור החי פסק",
|
||||
"expandedOn": "המפגש הזה מוזרם כעת ליוטיוב.",
|
||||
"expandedPending": "השידור החי עומד להתחיל...",
|
||||
"expandedPending": "השידור החי עומד להתחיל…",
|
||||
"failedToStart": "ההפעלה של השידור החי כשלה",
|
||||
"getStreamKeyManually": "לא הצלחנו להשיג הזרמה של שידור חי, נסה להשיג את מפתח שידור החי מיוטיוב.",
|
||||
"googlePrivacyPolicy": "מדיניות הפרטיות של גוגל",
|
||||
@@ -392,7 +392,7 @@
|
||||
"offBy": "{{name}} הפסיק את השידור החי",
|
||||
"on": "שידור חי",
|
||||
"onBy": "{{name}} הפעיל את השידור החי",
|
||||
"pending": "מתחיל שידור חי...",
|
||||
"pending": "מתחיל שידור חי…",
|
||||
"serviceName": "שירותי שידור חי",
|
||||
"signIn": "התחבר באמצעות גוגל",
|
||||
"signInCTA": "התחבר או הזן מפתח שידור חי מיוטיוב.",
|
||||
@@ -471,7 +471,7 @@
|
||||
"somebody": "מישהו",
|
||||
"startSilentDescription": "הצטרף שוב לפגישה כדי לאפשר שמע",
|
||||
"startSilentTitle": "הצטרפת ללא פלט שמע!",
|
||||
"suboptimalExperienceDescription": "אופ... אנו חוששים שהחוויה שלך עם {{appName}} לא תהיה נהדרת כאן. אנו מחפשים דרכים לשפר זאת, אך עד אז, נסה להשתמש באחד מה<a href='{{recommendedBrowserPageLink}}' target='_blank'>דפדפנים הנתמכים לחלוטין</a>.",
|
||||
"suboptimalExperienceDescription": "אופ… אנו חוששים שהחוויה שלך עם {{appName}} לא תהיה נהדרת כאן. אנו מחפשים דרכים לשפר זאת, אך עד אז, נסה להשתמש באחד מה<a href='{{recommendedBrowserPageLink}}' target='_blank'>דפדפנים הנתמכים לחלוטין</a>.",
|
||||
"suboptimalExperienceTitle": "אזהרת דפדפן",
|
||||
"unmute": "בטל השתקה"
|
||||
},
|
||||
@@ -485,17 +485,17 @@
|
||||
"poweredby": "מופעל על ידי",
|
||||
"presenceStatus": {
|
||||
"busy": "עסוק",
|
||||
"calling": "מחייג...",
|
||||
"calling": "מחייג…",
|
||||
"connected": "מחובר",
|
||||
"connecting": "מתחבר...",
|
||||
"connecting2": "מתחבר*...",
|
||||
"connecting": "מתחבר…",
|
||||
"connecting2": "מתחבר*…",
|
||||
"disconnected": "מנותק",
|
||||
"expired": "פג תוקף",
|
||||
"ignored": "התעלמו",
|
||||
"initializingCall": "מאתחל שיחה...",
|
||||
"initializingCall": "מאתחל שיחה…",
|
||||
"invited": "הוזמנו",
|
||||
"rejected": "דחו",
|
||||
"ringing": "מצלצל..."
|
||||
"ringing": "מצלצל…"
|
||||
},
|
||||
"profile": {
|
||||
"setDisplayNameLabel": "הגדר שם תצוגה",
|
||||
@@ -513,7 +513,7 @@
|
||||
"error": "ההקלטה כשלה. אנא נסה שוב.",
|
||||
"expandedOff": "ההקלטה הופסקה",
|
||||
"expandedOn": "הפגישה מתועדת כעת.",
|
||||
"expandedPending": "ההקלטה עומדת להתחיל...",
|
||||
"expandedPending": "ההקלטה עומדת להתחיל…",
|
||||
"failedToStart": "התחלת הקלטה כשלה",
|
||||
"fileSharingdescription": "שתף את ההקלטה עם משתתפי הפגישה",
|
||||
"live": "חי",
|
||||
@@ -522,7 +522,7 @@
|
||||
"offBy": "{{name}} עצר את ההקלטה",
|
||||
"on": "מקליט",
|
||||
"onBy": "{{name}} הפעיל את ההקלטה",
|
||||
"pending": "מתכונן להקליט את הפגישה...",
|
||||
"pending": "מתכונן להקליט את הפגישה…",
|
||||
"rec": "מקליט",
|
||||
"serviceDescription": "ההקלטה שלך תישמר על ידי שירותי ההקלטה",
|
||||
"serviceName": "שירותי הקלטה",
|
||||
@@ -707,22 +707,13 @@
|
||||
"failedToStart": "הפעלת תמלול כשלה",
|
||||
"labelToolTip": "הפגישה מתומללת",
|
||||
"off": "התמלול פסק",
|
||||
"pending": "מתכונן לתמלול הפגישה...",
|
||||
"pending": "מתכונן לתמלול הפגישה…",
|
||||
"start": "התחל הצגת כתוביות",
|
||||
"stop": "עצור הצגת כתוביות",
|
||||
"tr": "TR"
|
||||
},
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "בחר <b><i>אשר</i></b> כאשר הדפדפן שלך מבקש הרשאות.",
|
||||
"chromeGrantPermissions": "בחר <b><i>אשר</i></b> כאשר הדפדפן שלך מבקש הרשאות.",
|
||||
"edgeGrantPermissions": "בחר <b><i>כן</i></b> כאשר הדפדפן שלך מבקש הרשאות.",
|
||||
"electronGrantPermissions": "אנא הענק הרשאות להשתמש במצלמה ובמיקרופון שלך",
|
||||
"firefoxGrantPermissions": "בחר <b><i>שתף התקן נבחר</i></b> כאשר הדפדפן שלך מבקש הרשאות.",
|
||||
"iexplorerGrantPermissions": "בחר <b><i>אישור</i></b> כאשר הדפדפן שלך מבקש הרשאות.",
|
||||
"nwjsGrantPermissions": "אנא הענק הרשאות להשתמש במצלמה ובמיקרופון שלך",
|
||||
"operaGrantPermissions": "בחר <b><i>אשר</i></b> כאשר הדפדפן שלך מבקש הרשאות.",
|
||||
"react-nativeGrantPermissions": "בחר <b><i>אשר</i></b> כאשר הדפדפן שלך מבקש הרשאות.",
|
||||
"safariGrantPermissions": "בחר <b><i>אישור</i></b> כאשר הדפדפן שלך מבקש הרשאות."
|
||||
"grantPermissions": "אנא הענק הרשאות להשתמש במצלמה ובמיקרופון שלך."
|
||||
},
|
||||
"videoSIPGW": {
|
||||
"busy": "אנו עובדים על שחרור משאבים. אנא נסה שוב בעוד מספר דקות.",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user