Compare commits
175 Commits
ios_locksc
...
6955
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ab262ec8b1 | ||
|
|
cced41665d | ||
|
|
f95e167779 | ||
|
|
bf1b7cc856 | ||
|
|
091e3f69dc | ||
|
|
42868c9ec2 | ||
|
|
0d5dae7ab9 | ||
|
|
992bf47850 | ||
|
|
4f34a576d0 | ||
|
|
921f3ee8cd | ||
|
|
42838e756c | ||
|
|
e6eba3536a | ||
|
|
74bdb7bc3f | ||
|
|
192187db32 | ||
|
|
5dce74e21d | ||
|
|
fd7b6f457e | ||
|
|
2bf3089dbf | ||
|
|
d396727e39 | ||
|
|
3e58cd8af3 | ||
|
|
cf7e692186 | ||
|
|
5e90e72562 | ||
|
|
cbae997eda | ||
|
|
6bd9a6bd15 | ||
|
|
e8bd75b2d1 | ||
|
|
46f1cb7b4b | ||
|
|
60dd26c13b | ||
|
|
8e1d96cc48 | ||
|
|
e3166e6faa | ||
|
|
6de306e46e | ||
|
|
8e91851a2f | ||
|
|
0251201e93 | ||
|
|
9775ad25ca | ||
|
|
da5e19fa98 | ||
|
|
a5ddcab084 | ||
|
|
2c59b44df5 | ||
|
|
507d883503 | ||
|
|
a7b25d6d7b | ||
|
|
43b91b16da | ||
|
|
726fd3f8a1 | ||
|
|
817a05cf7b | ||
|
|
6048279eb2 | ||
|
|
43b3db11e0 | ||
|
|
77e75815dc | ||
|
|
e1485fc253 | ||
|
|
d6d71ab412 | ||
|
|
59c47a0575 | ||
|
|
8793d67f0b | ||
|
|
d6888fa2d8 | ||
|
|
222021f3bc | ||
|
|
14c24a8851 | ||
|
|
246a2d6bbf | ||
|
|
838b26f770 | ||
|
|
bc88ebe443 | ||
|
|
7f54fa4ed8 | ||
|
|
361428d245 | ||
|
|
7ad57e6baf | ||
|
|
a59ab3b0d9 | ||
|
|
c50111a57d | ||
|
|
9422f48536 | ||
|
|
122e80dcf1 | ||
|
|
2dbb3c10e2 | ||
|
|
265d8c4b29 | ||
|
|
e8e05c21ab | ||
|
|
b0591ed968 | ||
|
|
84fe52491f | ||
|
|
450da1a6df | ||
|
|
720d4555ab | ||
|
|
c764397994 | ||
|
|
0ad7b3db55 | ||
|
|
7e30053d51 | ||
|
|
0ad52a06ce | ||
|
|
82fd465819 | ||
|
|
561d0c9a10 | ||
|
|
3b8ad78a62 | ||
|
|
77e02a0994 | ||
|
|
965e7dc41d | ||
|
|
ad0ad31df9 | ||
|
|
2bb2a68e01 | ||
|
|
c441e8abca | ||
|
|
27754c8874 | ||
|
|
580f56010a | ||
|
|
4bad63e484 | ||
|
|
9cc41469d2 | ||
|
|
5077a33fcb | ||
|
|
e7078786e6 | ||
|
|
291370a263 | ||
|
|
32dbdf2e5c | ||
|
|
17b5009e63 | ||
|
|
d91f49ec88 | ||
|
|
7187530430 | ||
|
|
d3d442e4d2 | ||
|
|
294d2c9f6e | ||
|
|
12c002e015 | ||
|
|
9720b4858c | ||
|
|
9fae488070 | ||
|
|
0e47f72b5f | ||
|
|
298c4bd1e3 | ||
|
|
955367a157 | ||
|
|
c30d1e7479 | ||
|
|
cbbe58a1ec | ||
|
|
aef5328aeb | ||
|
|
f5ac1b6271 | ||
|
|
ca9f0a6788 | ||
|
|
e7c5ae5936 | ||
|
|
c43a319576 | ||
|
|
585c9aa0d2 | ||
|
|
768f10d966 | ||
|
|
704740969b | ||
|
|
d444a45f00 | ||
|
|
9fbbe05d6c | ||
|
|
3445c513ba | ||
|
|
6a4276b4c8 | ||
|
|
338b02a6b6 | ||
|
|
ef2631e95a | ||
|
|
226ef9f33d | ||
|
|
91ec5307ab | ||
|
|
fe0b7d3acc | ||
|
|
9533650594 | ||
|
|
d7bedb2e07 | ||
|
|
33e4da32e2 | ||
|
|
9a8a8ef7ad | ||
|
|
703ed731c8 | ||
|
|
83dfb67f23 | ||
|
|
51bdf67cf2 | ||
|
|
3adbda791c | ||
|
|
924bb0e7ff | ||
|
|
4c9bfe3d4d | ||
|
|
1139311809 | ||
|
|
2ad2e6ff0e | ||
|
|
46cc2e37ae | ||
|
|
0ebac2ac6d | ||
|
|
90e33ee799 | ||
|
|
be982ae996 | ||
|
|
56114fe863 | ||
|
|
a2e8a7f28f | ||
|
|
af072c3070 | ||
|
|
f42772ec5b | ||
|
|
2556a7ab77 | ||
|
|
3cbf160f2b | ||
|
|
744960bb1a | ||
|
|
76471a0ea9 | ||
|
|
0ba033e07d | ||
|
|
cb3fb3ada9 | ||
|
|
48a6472b3b | ||
|
|
691e92b7ec | ||
|
|
6e36340a83 | ||
|
|
ae424c95de | ||
|
|
95b2979eb3 | ||
|
|
a0c130568b | ||
|
|
643cc2db81 | ||
|
|
6bce0bc917 | ||
|
|
93566e313e | ||
|
|
a7c653bc30 | ||
|
|
4b969cf4ab | ||
|
|
3081b41d0d | ||
|
|
30e5d213cb | ||
|
|
752da71387 | ||
|
|
645609974a | ||
|
|
4f2f6df2bb | ||
|
|
e93c480e7c | ||
|
|
a795e0797a | ||
|
|
94ec2c720d | ||
|
|
b11e14ea34 | ||
|
|
f5f55c4f23 | ||
|
|
243a330318 | ||
|
|
98bc87ea18 | ||
|
|
f7926c9cfb | ||
|
|
533501deb6 | ||
|
|
f38c9f5450 | ||
|
|
55b80c948f | ||
|
|
971fe0481f | ||
|
|
1259e54d46 | ||
|
|
0cb95f1dd6 | ||
|
|
5cde9a138b | ||
|
|
867c488e10 |
15
.devcontainer/devcontainer.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"name": "Jitsi Meet Dev Container",
|
||||
"image": "mcr.microsoft.com/devcontainers/universal:2",
|
||||
"features": {
|
||||
"ghcr.io/devcontainers/features/node:1": {
|
||||
"version": "16"
|
||||
}
|
||||
},
|
||||
"hostRequirements": {
|
||||
"cpus": 4,
|
||||
"memory": "8gb",
|
||||
"storage": "32gb"
|
||||
},
|
||||
"postCreateCommand": "bash -i -c 'nvm use && npm install && cp tsconfig.web.json tsconfig.json'"
|
||||
}
|
||||
25
.github/workflows/ci-lua.yml
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
name: Lua CI
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
luacheck:
|
||||
name: Luacheck
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Install luarocks
|
||||
run: sudo apt-get --install-recommends -y install luarocks
|
||||
|
||||
- name: Install luacheck
|
||||
run: sudo luarocks install luacheck
|
||||
|
||||
- name: Check lua codes
|
||||
run: |
|
||||
set -o pipefail && luacheck . | awk -F: '
|
||||
{
|
||||
print $0
|
||||
printf "::warning file=%s,line=%s,col=%s::%s\n", $1, $2, $3, $4
|
||||
}
|
||||
'
|
||||
7
.github/workflows/ci.yml
vendored
@@ -7,7 +7,7 @@ jobs:
|
||||
name: Lint
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16
|
||||
@@ -20,12 +20,11 @@ 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
|
||||
- run: for file in lang/*.json; do npx --yes jsonlint -q $file || exit 1; done
|
||||
linux-build:
|
||||
name: Build Frontend (Linux)
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16
|
||||
@@ -36,7 +35,7 @@ jobs:
|
||||
name: Build Frontend (macOS)
|
||||
runs-on: macOS-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16
|
||||
|
||||
8
.luacheckrc
Normal file
@@ -0,0 +1,8 @@
|
||||
global = false
|
||||
unused = false
|
||||
redefined = false
|
||||
ignore = { "581" }
|
||||
max_line_length = false
|
||||
color = false
|
||||
formatter = "plain"
|
||||
quiet = 1
|
||||
@@ -141,7 +141,7 @@ react/features/sample/
|
||||
```
|
||||
|
||||
The middleware must be imported in `react/features/app/` specifically
|
||||
in `middlewares.any`, `middlewares.native.js` or `middlewares.web.js` where appropriate.
|
||||
in `middlewares.any.ts`, `middlewares.native.ts` or `middlewares.web.ts` where appropriate.
|
||||
Likewise for the reducer.
|
||||
|
||||
An `index.js` file must not be provided for exporting actions, action types and
|
||||
|
||||
@@ -76,7 +76,7 @@ android {
|
||||
|
||||
dependencies {
|
||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||
implementation 'androidx.appcompat:appcompat:1.4.1'
|
||||
implementation 'androidx.appcompat:appcompat:1.5.1'
|
||||
|
||||
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.7'
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 659 B |
|
Before Width: | Height: | Size: 379 B |
|
Before Width: | Height: | Size: 960 B |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 2.4 KiB |
70
android/app/src/main/res/drawable/ic_launcher_monochrome.xml
Normal file
@@ -0,0 +1,70 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="262.91376dp"
|
||||
android:height="262.91376dp"
|
||||
android:viewportWidth="262.91376"
|
||||
android:viewportHeight="262.91376">
|
||||
<group android:scaleX="0.75" android:scaleY="0.75" android:translateX="35" android:translateY="35">
|
||||
<clip-path
|
||||
android:pathData="m0,0 l262.914,-0L262.914,262.914 0,262.914 0,0Z"/>
|
||||
<path
|
||||
android:pathData="m142.646,105.099c0.117,0.026 0.255,0.036 0.406,0.036 3.186,-0 10.297,-4.615 11.617,-6.721l0.1,-0.17 0.153,-0.135c0.451,-0.441 1.746,-2.773 2.374,-4.17 -6.751,-2.023 -7.49,-5.677 -8.153,-8.919 -0.069,-0.376 -0.138,-0.717 -0.204,-1.019 -0.074,-0.397 -0.153,-0.8 -0.226,-1.112C138.668,86.221 135.593,88.094 133.921,89.483 133.056,90.201 132.542,92.251 135.042,97.926 136.323,100.816 140.727,104.733 142.646,105.099"
|
||||
android:fillColor="#ffffff"
|
||||
android:strokeColor="#00000000"
|
||||
android:fillType="nonZero"/>
|
||||
<path
|
||||
android:pathData="m115.413,146.042c5.934,-0 18.464,-3.543 26.748,-5.887 1.21,-0.336 2.33,-0.66 3.351,-0.944 0.166,-0.046 0.321,-0.091 0.472,-0.124 -0.463,-0.461 -1.239,-1.159 -2.497,-2.216 -5.521,-3.741 -10.736,-5.484 -16.403,-5.484 -1.237,-0 -2.522,0.071 -3.923,0.231 -4.801,0.55 -8.8,1.69 -10.722,2.237 -0.967,0.284 -1.263,0.366 -1.567,0.366 -0.58,-0 -1.079,-0.341 -1.273,-0.878 -0.194,-0.534 -0.027,-1.121 0.425,-1.507l0.024,-0.011c3.316,-2.784 9.489,-7.951 21.198,-10.256 2.027,-0.401 4.202,-0.605 6.454,-0.605 5.242,-0 10.67,1.086 16.125,3.219 7.436,2.899 12.521,6.625 16.602,9.62 2.199,1.609 4.105,3.007 5.755,3.771 0.421,0.2 0.637,0.255 0.746,0.265 0.074,-0.095 0.23,-0.365 0.474,-1.069 0.066,-0.185 0.529,-2.161 -2.806,-13.374 -1.931,-6.51 -4.264,-13.156 -5.479,-16.104 -2.356,-5.711 -1.778,-9.76 -1.051,-12.125 -1.999,0.735 -4.033,1.87 -6.174,3.446L161.758,98.711C160.694,99.506 159.599,100.404 158.426,101.454 151.517,107.64 146.344,110.864 143.035,111.04l-0.093,0.004 -0.093,-0.009c-2.912,-0.245 -7.324,-4.489 -9.133,-6.634 -0.373,-0.251 -0.8,-0.366 -1.366,-0.366 -0.564,-0 -1.202,0.116 -1.82,0.235C130.086,104.354 129.623,104.441 129.167,104.489 127.708,104.632 125.668,105.106 123.694,105.561 122.746,105.777 121.762,106.005 120.864,106.189 120.851,106.19 120.463,106.272 119.774,106.454 114.903,107.891 111.228,109.55 109.432,111.111 109.414,111.127 109.352,111.174 109.266,111.242 108.048,112.105 105.124,114.567 104.248,118.762L104.237,118.795C102.398,126.516 105.187,136.087 108.892,141.554 110.636,144.125 112.513,145.727 114.048,145.959 114.437,146.015 114.891,146.042 115.413,146.042"
|
||||
android:fillColor="#ffffff"
|
||||
android:strokeColor="#00000000"
|
||||
android:fillType="nonZero"/>
|
||||
<path
|
||||
android:pathData="m90.093,173.175c-1.252,-1.472 -1.783,-3.324 -1.574,-5.521 0.884,-10.642 -0.329,-13.215 -0.891,-13.829 -0.131,-0.144 -0.207,-0.144 -0.265,-0.144 -0.022,-0 -0.041,0.003 -0.064,0.003 -1.044,0.248 -8.066,5.002 -9.615,19.171 -0.749,6.845 0.561,15.63 1.679,20.974 0.897,-3.155 2.314,-6.624 5.057,-10.204 2.556,-3.326 5.345,-5.955 8.801,-8.253C92.143,174.93 90.991,174.235 90.093,173.175"
|
||||
android:fillColor="#ffffff"
|
||||
android:strokeColor="#00000000"
|
||||
android:fillType="nonZero"/>
|
||||
<path
|
||||
android:pathData="m94.906,156.389c-0.03,2.229 -0.326,4.36 -0.61,6.445 -0.151,1.119 -0.314,2.286 -0.434,3.46 -0.161,2.341 0.346,3.166 0.571,3.406 0.127,0.136 0.326,0.287 0.76,0.287 0.339,-0 0.741,-0.091 1.161,-0.268 4.202,-1.756 8.195,-4.815 10.115,-6.515C103.522,161.892 98.995,159.058 94.906,156.389"
|
||||
android:fillColor="#ffffff"
|
||||
android:strokeColor="#00000000"
|
||||
android:fillType="nonZero"/>
|
||||
<path
|
||||
android:pathData="m154.002,81.595c-0.031,0.074 -0.065,0.148 -0.101,0.216 -0.821,2.403 0.306,5.664 2.419,6.898 0.561,0.327 1.106,0.526 1.624,0.596 0.072,0.006 0.148,0.009 0.219,0.009 1.645,-0 2.971,-1.199 3.961,-3.561C162.752,83.959 162.836,81.827 162.37,79.904 162.003,78.409 161.057,76.627 160.453,75.738 159.332,76.509 157.111,78.207 155.585,79.553 154.518,80.582 154.136,81.229 154.002,81.595"
|
||||
android:fillColor="#ffffff"
|
||||
android:strokeColor="#00000000"
|
||||
android:fillType="nonZero"/>
|
||||
<path
|
||||
android:pathData="M148.97,77.699C153.957,73.194 156.988,65.754 158.253,61.334 153.915,65.513 148.633,67.758 145.25,69.198 144.084,69.695 143.08,70.124 142.477,70.476 142.224,70.623 141.965,70.77 141.708,70.919 139.654,72.109 136.55,73.905 136.1,75.011l-0.012,0.036 -0.012,0.034c-1.406,2.956 -2.199,7.401 -2.457,9.95 3.266,-1.99 6.625,-3.322 9.416,-4.42C145.628,79.585 147.863,78.703 148.97,77.699"
|
||||
android:fillColor="#ffffff"
|
||||
android:strokeColor="#00000000"
|
||||
android:fillType="nonZero"/>
|
||||
<path
|
||||
android:pathData="m164.464,51.921c-0.84,5.539 -2.205,10.799 -4.751,16.347 2.781,-3.144 4.396,-6.568 4.941,-10.401C164.886,56.275 165.097,54.756 164.464,51.921"
|
||||
android:fillColor="#ffffff"
|
||||
android:strokeColor="#00000000"
|
||||
android:fillType="nonZero"/>
|
||||
<path
|
||||
android:pathData="M148.749,142.639C148.718,142.598 148.684,142.56 148.658,142.519 148.523,142.539 148.307,142.584 147.972,142.683l-0.14,0.04c-1.726,0.644 -4.899,1.708 -8.556,2.946 -4.396,1.479 -9.365,3.154 -13.526,4.649 -5.297,1.975 -7.021,2.755 -7.557,3.024 -0.098,0.266 -0.203,0.599 -0.327,0.965 -1.254,3.816 -4.125,12.541 -18.276,18.653 2.928,2.956 9.289,8.27 21.809,8.27 1.082,-0 2.21,-0.036 3.341,-0.12 9.451,-0.666 18.342,-4.855 25.026,-11.78 6.087,-6.291 9.538,-14.136 9.585,-21.7C157.876,147.509 155.367,147.135 153.043,146.033 153.014,146.02 150.361,144.745 148.749,142.639"
|
||||
android:fillColor="#ffffff"
|
||||
android:strokeColor="#00000000"
|
||||
android:fillType="nonZero"/>
|
||||
<path
|
||||
android:pathData="m189.478,117.853c-0.523,9.749 -2.122,18.424 -4.744,25.8 -2.128,5.988 -4.94,11.134 -8.356,15.316 -5.676,6.931 -11.555,9.256 -12.804,9.304 -0.866,-0 -1.313,-0.309 -3.046,-1.528 -0.17,-0.114 -0.37,-0.252 -0.581,-0.4 -3.313,5.953 -8.505,11.097 -15.065,14.959 -7.079,4.144 -15.297,6.423 -23.157,6.423 -9.078,-0 -17.13,-2.924 -23.341,-8.456 -7.467,4.799 -12.31,9.074 -16.267,27.005l-1.363,6.17 -2.971,-5.564c-0.424,-0.786 -1.929,-3.731 -3.332,-8.887 -1.934,-7.104 -2.86,-15.181 -2.758,-24.01 0.117,-10.049 3.154,-16.526 5.68,-20.186 2.98,-4.314 6.837,-6.994 10.076,-6.994 0.216,-0 0.428,0.006 0.616,0.035 5.159,0.575 8.435,2.75 14.396,6.686l1.899,1.252c2.059,1.344 4.481,2.7 5.259,2.989 0.54,-0.284 1.749,-2.3 2.155,-5.271l0.069,-0.451c0.005,-0.045 0.009,-0.091 0.014,-0.131 -0.036,-0.02 -0.065,-0.029 -0.094,-0.041 -4.008,-1.375 -9.539,-7.7 -12.364,-17.134 -2.684,-9.382 -2.129,-17.185 1.644,-23.193 6.12,-9.736 19.198,-11.974 23.466,-12.702 1.331,-0.266 2.716,-0.511 4.041,-0.717 0.255,-0.061 0.469,-0.121 0.642,-0.168 -0.031,-0.126 -0.071,-0.265 -0.114,-0.43 -0.108,-0.417 -0.23,-0.891 -0.354,-1.447 -1.345,-6.035 -0.664,-11.069 0.181,-15.193 0.928,-4.546 1.489,-7.287 3.747,-9.936 3.029,-4.165 8.319,-5.936 11.479,-6.991 0.746,-0.249 1.511,-0.509 1.894,-0.689 8.988,-4.31 11.82,-8.739 12.615,-11.694 0.656,-2.451 1.699,-8.884 1.251,-13.335 -0.085,-0.805 0.129,-1.521 0.621,-2.065 0.45,-0.505 1.101,-0.794 1.778,-0.794 1.515,-0 2.82,-0 7.511,14.598 2.481,7.698 0.645,14.903 -5.45,21.424l-0.226,0.231c0.024,0.044 0.049,0.09 0.08,0.144 2.57,4.236 3.963,9.54 3.553,13.51 -0.099,0.906 -0.265,1.775 -0.419,2.549 -0.003,0.01 -0.003,0.016 -0.004,0.029 0.516,-0.032 1.119,-0.055 1.775,-0.055 3.052,-0 7.435,0.474 10.989,2.735 2.135,1.352 4.845,3.439 6.835,7.615C189.223,102.942 190.076,109.575 189.478,117.853m4.77,-23.191c-2.916,-6.1 -6.989,-9.177 -9.793,-10.96 -2.355,-1.494 -5.064,-2.584 -8.077,-3.24l-0.676,-0.146 -0.111,-0.689c-0.339,-2.119 -0.918,-4.275 -1.715,-6.406l-0.185,-0.49 0.292,-0.434c5.095,-7.594 6.323,-16.17 3.54,-24.802 -2.191,-6.824 -3.895,-11.211 -5.341,-13.799 -2.954,-5.305 -7.006,-6.417 -9.891,-6.417 -2.964,-0 -5.8,1.261 -7.789,3.457 -2.043,2.254 -2.993,5.207 -2.678,8.31 0.316,3.134 -0.494,8.516 -1.014,10.439 -0.04,0.117 -0.975,2.929 -8.201,6.428 -0.162,0.056 -0.512,0.179 -1.053,0.359 -3.729,1.246 -10.666,3.571 -15.258,9.64 -3.465,4.205 -4.332,8.441 -5.338,13.346 -0.586,2.865 -1.236,6.744 -1.079,11.344l0.026,0.841 -0.824,0.188c-11.646,2.585 -20.025,7.835 -24.909,15.605 -5.054,8.04 -5.919,18.055 -2.543,29.853 0.063,0.204 0.126,0.407 0.189,0.615l0.527,1.608 -1.665,-0.286c-0.561,-0.101 -1.135,-0.18 -1.729,-0.241 -0.493,-0.06 -1.001,-0.082 -1.509,-0.082 -5.633,-0 -11.663,3.585 -16.128,9.592 -3.451,4.641 -7.588,12.849 -7.735,25.601 -0.114,9.573 0.906,18.401 3.038,26.228 1.581,5.795 3.326,9.329 4.004,10.577l13.306,24.94 6.096,-27.619c2.454,-11.09 4.864,-15.262 7.725,-18.111l0.561,-0.563 0.679,0.411c6.605,3.977 14.466,6.084 22.73,6.084 9.286,-0 18.965,-2.682 27.259,-7.551 5.38,-3.16 9.974,-7.036 13.649,-11.531l0.45,-0.369 0.85,-0.02c2.156,-0.068 5.16,-1.164 8.222,-3.004 2.6,-1.555 6.543,-4.428 10.501,-9.262 3.997,-4.884 7.274,-10.854 9.716,-17.734 2.876,-8.073 4.625,-17.489 5.204,-28.004 0.689,-9.668 -0.434,-17.641 -3.327,-23.704"
|
||||
android:fillColor="#ffffff"
|
||||
android:strokeColor="#00000000"
|
||||
android:fillType="nonZero"/>
|
||||
<path
|
||||
android:pathData="m180.026,98.414c-1.67,-2.596 -3.771,-4.206 -5.475,-4.206 -0.313,-0 -0.613,0.051 -0.895,0.161 -0.911,0.361 -2.356,4.532 -1.714,7.566 0.434,2.066 2.938,9.04 4.151,12.394 0.456,1.281 0.68,1.91 0.754,2.142 0.064,0.183 0.145,0.448 0.256,0.774 0.97,2.971 3.467,10.586 4.206,16.761 1.549,-6.579 2.424,-14.512 2.085,-23.997C183.235,105.662 182.04,101.538 180.026,98.414"
|
||||
android:fillColor="#ffffff"
|
||||
android:strokeColor="#00000000"
|
||||
android:fillType="nonZero"/>
|
||||
<path
|
||||
android:pathData="M168.088,142.604C169.896,142.111 171.33,141.705 172.398,141.395 170.213,139.874 167.689,137.979 164.247,135.304c-8.418,-6.546 -17.449,-9.87 -26.839,-9.87 -5.135,-0 -9.611,0.991 -13.156,2.186 0.882,-0.05 1.779,-0.079 2.7,-0.079 1.1,-0 2.247,0.04 3.411,0.119 3.652,0.246 13.061,1.901 21.565,12.047 1.714,2.039 3.559,3.73 8.794,3.73 1.873,-0 4.051,-0.207 6.662,-0.645C167.544,142.751 167.793,142.678 168.088,142.604"
|
||||
android:fillColor="#ffffff"
|
||||
android:strokeColor="#00000000"
|
||||
android:fillType="nonZero"/>
|
||||
<path
|
||||
android:pathData="m164.3,147.583c-0.122,1.563 -0.376,4.509 -0.782,6.76 -0.495,2.719 -1.31,5.02 -1.791,6.226 0.85,0.786 1.694,1.553 2.247,2.043 2.214,-1.447 9.47,-6.96 14.483,-19.474C176.847,144.229 174.59,145.178 171.671,146.018 168.701,146.861 165.82,147.357 164.3,147.583"
|
||||
android:fillColor="#ffffff"
|
||||
android:strokeColor="#00000000"
|
||||
android:fillType="nonZero"/>
|
||||
</group>
|
||||
</vector>
|
||||
@@ -2,4 +2,5 @@
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
<monochrome android:drawable="@drawable/ic_launcher_monochrome"/>
|
||||
</adaptive-icon>
|
||||
@@ -2,4 +2,5 @@
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
<monochrome android:drawable="@drawable/ic_launcher_monochrome"/>
|
||||
</adaptive-icon>
|
||||
@@ -1,5 +1,4 @@
|
||||
import groovy.json.JsonSlurper
|
||||
import org.apache.tools.ant.taskdefs.condition.Os
|
||||
import org.gradle.util.VersionNumber
|
||||
|
||||
// Top-level build file where you can add configuration options common to all
|
||||
@@ -12,16 +11,16 @@ buildscript {
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:7.0.4'
|
||||
classpath 'com.google.gms:google-services:4.3.10'
|
||||
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1'
|
||||
classpath 'com.google.gms:google-services:4.3.14'
|
||||
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.2'
|
||||
}
|
||||
}
|
||||
|
||||
ext {
|
||||
buildToolsVersion = "31.0.0"
|
||||
compileSdkVersion = 31
|
||||
compileSdkVersion = 32
|
||||
minSdkVersion = 23
|
||||
targetSdkVersion = 31
|
||||
targetSdkVersion = 32
|
||||
supportLibVersion = "28.0.0"
|
||||
|
||||
if (System.properties['os.arch'] == "aarch64") {
|
||||
|
||||
@@ -81,6 +81,8 @@ public class JitsiMeetView extends FrameLayout {
|
||||
result.putBoolean(key, (Boolean)bValue);
|
||||
} else if (valueType.contentEquals("String")) {
|
||||
result.putString(key, (String)bValue);
|
||||
} else if (valueType.contentEquals("Integer")) {
|
||||
result.putInt(key, (int)bValue);
|
||||
} else if (valueType.contentEquals("Bundle")) {
|
||||
result.putBundle(key, mergeProps((Bundle)aValue, (Bundle)bValue));
|
||||
} else {
|
||||
|
||||
@@ -73,7 +73,6 @@ class ReactInstanceManagerHolder {
|
||||
new SplashScreenModule(reactContext),
|
||||
new PictureInPictureModule(reactContext),
|
||||
new ProximityModule(reactContext),
|
||||
new WiFiStatsModule(reactContext),
|
||||
new org.jitsi.meet.sdk.net.NAT64AddrInfoModule(reactContext)));
|
||||
|
||||
if (AudioModeModule.useConnectionService()) {
|
||||
@@ -124,7 +123,7 @@ class ReactInstanceManagerHolder {
|
||||
new com.reactnativecommunity.webview.RNCWebViewPackage(),
|
||||
new com.kevinresol.react_native_default_preference.RNDefaultPreferencePackage(),
|
||||
new com.learnium.RNDeviceInfo.RNDeviceInfo(),
|
||||
new com.swmansion.gesturehandler.react.RNGestureHandlerPackage(),
|
||||
new com.swmansion.gesturehandler.RNGestureHandlerPackage(),
|
||||
new org.linusu.RNGetRandomValuesPackage(),
|
||||
new com.rnimmersive.RNImmersivePackage(),
|
||||
new com.swmansion.rnscreens.RNScreensPackage(),
|
||||
|
||||
@@ -42,10 +42,10 @@ public class WebRTCVideoDecoderFactory implements VideoDecoderFactory {
|
||||
public VideoCodecInfo[] getSupportedCodecs() {
|
||||
List<VideoCodecInfo> codecs = new ArrayList<>();
|
||||
|
||||
codecs.add(H264Utils.DEFAULT_H264_BASELINE_PROFILE_CODEC);
|
||||
codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP8.name(), new HashMap<>()));
|
||||
codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP9.name(), new HashMap<>()));
|
||||
codecs.add(new VideoCodecInfo(VideoCodecMimeType.AV1.name(), new HashMap<>()));
|
||||
codecs.add(H264Utils.DEFAULT_H264_BASELINE_PROFILE_CODEC);
|
||||
|
||||
return codecs.toArray(new VideoCodecInfo[codecs.size()]);
|
||||
}
|
||||
|
||||
@@ -43,10 +43,10 @@ public class WebRTCVideoEncoderFactory implements VideoEncoderFactory {
|
||||
public VideoCodecInfo[] getSupportedCodecs() {
|
||||
List<VideoCodecInfo> codecs = new ArrayList<>();
|
||||
|
||||
codecs.add(H264Utils.DEFAULT_H264_BASELINE_PROFILE_CODEC);
|
||||
codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP8.name(), new HashMap<>()));
|
||||
codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP9.name(), new HashMap<>()));
|
||||
codecs.add(new VideoCodecInfo(VideoCodecMimeType.AV1.name(), new HashMap<>()));
|
||||
codecs.add(H264Utils.DEFAULT_H264_BASELINE_PROFILE_CODEC);
|
||||
|
||||
return codecs.toArray(new VideoCodecInfo[codecs.size()]);
|
||||
}
|
||||
|
||||
@@ -1,203 +0,0 @@
|
||||
/*
|
||||
* Copyright @ 2017-present Atlassian Pty Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jitsi.meet.sdk;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.wifi.WifiInfo;
|
||||
import android.net.wifi.WifiManager;
|
||||
|
||||
import com.facebook.react.bridge.Promise;
|
||||
import com.facebook.react.bridge.ReactApplicationContext;
|
||||
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
||||
import com.facebook.react.bridge.ReactMethod;
|
||||
import com.facebook.react.module.annotations.ReactModule;
|
||||
|
||||
import org.jitsi.meet.sdk.log.JitsiMeetLogger;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.net.InetAddress;
|
||||
import java.net.NetworkInterface;
|
||||
import java.net.SocketException;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.Enumeration;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
/**
|
||||
* Module exposing WiFi statistics.
|
||||
*
|
||||
* Gathers rssi, signal in percentage, timestamp and the addresses of the wifi
|
||||
* device.
|
||||
*/
|
||||
@ReactModule(name = WiFiStatsModule.NAME)
|
||||
class WiFiStatsModule
|
||||
extends ReactContextBaseJavaModule {
|
||||
|
||||
public static final String NAME = "WiFiStats";
|
||||
|
||||
/**
|
||||
* The {@code Log} tag {@code WiFiStatsModule} is to log messages with.
|
||||
*/
|
||||
static final String TAG = NAME;
|
||||
|
||||
/**
|
||||
* The scale used for the signal value. A level of the signal, given in the
|
||||
* range of 0 to SIGNAL_LEVEL_SCALE-1 (both inclusive).
|
||||
*/
|
||||
public final static int SIGNAL_LEVEL_SCALE = 101;
|
||||
|
||||
/**
|
||||
* {@link ExecutorService} for running all operations on a dedicated thread.
|
||||
*/
|
||||
private static final ExecutorService executor
|
||||
= Executors.newSingleThreadExecutor();
|
||||
|
||||
/**
|
||||
* Initializes a new module instance. There shall be a single instance of
|
||||
* this module throughout the lifetime of the application.
|
||||
*
|
||||
* @param reactContext the {@link ReactApplicationContext} where this module
|
||||
* is created.
|
||||
*/
|
||||
public WiFiStatsModule(ReactApplicationContext reactContext) {
|
||||
super(reactContext);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the name for this module to be used in the React Native bridge.
|
||||
*
|
||||
* @return a string with the module name.
|
||||
*/
|
||||
@Override
|
||||
public String getName() {
|
||||
return NAME;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the {@link InetAddress} represented by this int.
|
||||
*
|
||||
* @param value the int representation of the ip address.
|
||||
* @return the {@link InetAddress}.
|
||||
* @throws UnknownHostException - if IP address is of illegal length.
|
||||
*/
|
||||
public static InetAddress toInetAddress(int value)
|
||||
throws UnknownHostException {
|
||||
return InetAddress.getByAddress(
|
||||
new byte[] {
|
||||
(byte) value,
|
||||
(byte) (value >> 8),
|
||||
(byte) (value >> 16),
|
||||
(byte) (value >> 24)
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Public method to retrieve WiFi stats.
|
||||
*
|
||||
* @param promise a {@link Promise} which will be resolved if WiFi stats are
|
||||
* retrieved successfully, and it will be rejected otherwise.
|
||||
*/
|
||||
@ReactMethod
|
||||
public void getWiFiStats(final Promise promise) {
|
||||
Runnable r = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
Context context
|
||||
= getReactApplicationContext().getApplicationContext();
|
||||
WifiManager wifiManager
|
||||
= (WifiManager) context
|
||||
.getSystemService(Context.WIFI_SERVICE);
|
||||
|
||||
if (!wifiManager.isWifiEnabled()) {
|
||||
promise.reject(new Exception("Wifi not enabled"));
|
||||
return;
|
||||
}
|
||||
|
||||
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
|
||||
|
||||
if (wifiInfo.getNetworkId() == -1) {
|
||||
promise.reject(new Exception("Wifi not connected"));
|
||||
return;
|
||||
}
|
||||
|
||||
int rssi = wifiInfo.getRssi();
|
||||
int signalLevel
|
||||
= WifiManager.calculateSignalLevel(
|
||||
rssi, SIGNAL_LEVEL_SCALE);
|
||||
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("rssi", rssi)
|
||||
.put("signal", signalLevel)
|
||||
.put("timestamp", System.currentTimeMillis());
|
||||
|
||||
JSONArray addresses = new JSONArray();
|
||||
|
||||
InetAddress wifiAddress
|
||||
= toInetAddress(wifiInfo.getIpAddress());
|
||||
|
||||
try {
|
||||
Enumeration<NetworkInterface> e
|
||||
= NetworkInterface.getNetworkInterfaces();
|
||||
while (e.hasMoreElements()) {
|
||||
NetworkInterface networkInterface = e.nextElement();
|
||||
boolean found = false;
|
||||
|
||||
// first check whether this is the desired interface
|
||||
Enumeration<InetAddress> as
|
||||
= networkInterface.getInetAddresses();
|
||||
while (as.hasMoreElements()) {
|
||||
InetAddress a = as.nextElement();
|
||||
if(a.equals(wifiAddress)) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (found) {
|
||||
// interface found let's put addresses
|
||||
// to the result object
|
||||
as = networkInterface.getInetAddresses();
|
||||
while (as.hasMoreElements()) {
|
||||
InetAddress a = as.nextElement();
|
||||
if (a.isLinkLocalAddress())
|
||||
continue;
|
||||
|
||||
addresses.put(a.getHostAddress());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
} catch (SocketException e) {
|
||||
JitsiMeetLogger.e(e, TAG + " Unable to NetworkInterface.getNetworkInterfaces()");
|
||||
}
|
||||
|
||||
result.put("addresses", addresses);
|
||||
promise.resolve(result.toString());
|
||||
|
||||
JitsiMeetLogger.d(TAG + " WiFi stats: " + result.toString());
|
||||
} catch (Throwable e) {
|
||||
JitsiMeetLogger.e(e, TAG + " Failed to obtain wifi stats");
|
||||
promise.reject(
|
||||
new Exception("Failed to obtain wifi stats"));
|
||||
}
|
||||
}
|
||||
};
|
||||
executor.execute(r);
|
||||
}
|
||||
}
|
||||
BIN
android/sdk/src/main/res/drawable-hdpi/ic_notification.png
Normal file
|
After Width: | Height: | Size: 699 B |
BIN
android/sdk/src/main/res/drawable-mdpi/ic_notification.png
Normal file
|
After Width: | Height: | Size: 406 B |
BIN
android/sdk/src/main/res/drawable-xhdpi/ic_notification.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
android/sdk/src/main/res/drawable-xxhdpi/ic_notification.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
android/sdk/src/main/res/drawable-xxxhdpi/ic_notification.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
237
conference.js
@@ -44,8 +44,10 @@ import {
|
||||
conferenceUniqueIdSet,
|
||||
conferenceWillJoin,
|
||||
conferenceWillLeave,
|
||||
dataChannelClosed,
|
||||
dataChannelOpened,
|
||||
e2eRttChanged,
|
||||
generateVisitorConfig,
|
||||
getConferenceOptions,
|
||||
kickedOut,
|
||||
lockStateChanged,
|
||||
@@ -54,10 +56,7 @@ import {
|
||||
p2pStatusChanged,
|
||||
sendLocalParticipant
|
||||
} from './react/features/base/conference';
|
||||
import {
|
||||
getMultipleVideoSendingSupportFeatureFlag,
|
||||
getReplaceParticipant
|
||||
} from './react/features/base/config/functions';
|
||||
import { getReplaceParticipant } from './react/features/base/config/functions';
|
||||
import {
|
||||
checkAndNotifyForNewDevice,
|
||||
getAvailableDevices,
|
||||
@@ -104,6 +103,7 @@ import {
|
||||
participantMutedUs,
|
||||
participantPresenceChanged,
|
||||
participantRoleChanged,
|
||||
participantSourcesUpdated,
|
||||
participantUpdated,
|
||||
screenshareParticipantDisplayNameChanged,
|
||||
updateRemoteParticipantFeatures
|
||||
@@ -134,9 +134,12 @@ import {
|
||||
import { maybeSetLobbyChatMessageListener } from './react/features/lobby/actions.any';
|
||||
import { setNoiseSuppressionEnabled } from './react/features/noise-suppression/actions';
|
||||
import {
|
||||
DATA_CHANNEL_CLOSED_NOTIFICATION_ID,
|
||||
NOTIFICATION_TIMEOUT_TYPE,
|
||||
hideNotification,
|
||||
isModerationNotificationDisplayed,
|
||||
showNotification
|
||||
showNotification,
|
||||
showWarningNotification
|
||||
} from './react/features/notifications';
|
||||
import { mediaPermissionPromptVisibilityChanged } from './react/features/overlay';
|
||||
import { suspendDetected } from './react/features/power-monitor';
|
||||
@@ -276,7 +279,8 @@ class ConferenceConnector {
|
||||
/**
|
||||
*
|
||||
*/
|
||||
constructor(resolve, reject) {
|
||||
constructor(resolve, reject, conference) {
|
||||
this._conference = conference;
|
||||
this._resolve = resolve;
|
||||
this._reject = reject;
|
||||
this.reconnectTimeout = null;
|
||||
@@ -335,6 +339,26 @@ class ConferenceConnector {
|
||||
break;
|
||||
}
|
||||
|
||||
case JitsiConferenceErrors.REDIRECTED: {
|
||||
generateVisitorConfig(APP.store.getState(), params);
|
||||
|
||||
connection.disconnect().then(() => {
|
||||
connect(this._conference.roomName).then(con => {
|
||||
const localTracks = getLocalTracks(APP.store.getState()['features/base/tracks']);
|
||||
|
||||
const jitsiTracks = localTracks.map(t => t.jitsiTrack);
|
||||
|
||||
// visitors connect muted
|
||||
jitsiTracks.forEach(t => t.mute());
|
||||
|
||||
// TODO disable option to unmute audio or video
|
||||
this._conference.startConference(con, jitsiTracks);
|
||||
});
|
||||
});
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case JitsiConferenceErrors.GRACEFUL_SHUTDOWN:
|
||||
APP.UI.notifyGracefulShutdown();
|
||||
break;
|
||||
@@ -458,6 +482,11 @@ export default {
|
||||
*/
|
||||
_localTracksInitialized: false,
|
||||
|
||||
/**
|
||||
* Flag used to prevent the creation of another local video track in this.muteVideo if one is already in progress.
|
||||
*/
|
||||
isCreatingLocalTrack: false,
|
||||
|
||||
isSharingScreen: false,
|
||||
|
||||
/**
|
||||
@@ -726,7 +755,7 @@ export default {
|
||||
// XXX The API will take care of disconnecting from the XMPP
|
||||
// server (and, thus, leaving the room) on unload.
|
||||
return new Promise((resolve, reject) => {
|
||||
new ConferenceConnector(resolve, reject).connect();
|
||||
new ConferenceConnector(resolve, reject, this).connect();
|
||||
});
|
||||
},
|
||||
|
||||
@@ -1027,11 +1056,13 @@ export default {
|
||||
|
||||
const localVideo = getLocalJitsiVideoTrack(APP.store.getState());
|
||||
|
||||
if (!localVideo && !mute) {
|
||||
if (!localVideo && !mute && !this.isCreatingLocalTrack) {
|
||||
const maybeShowErrorDialog = error => {
|
||||
showUI && APP.store.dispatch(notifyCameraError(error));
|
||||
};
|
||||
|
||||
this.isCreatingLocalTrack = true;
|
||||
|
||||
// Try to create local video if there wasn't any.
|
||||
// This handles the case when user joined with no video
|
||||
// (dismissed screen sharing screen or in audio only mode), but
|
||||
@@ -1053,6 +1084,9 @@ export default {
|
||||
logger.debug(`muteVideo: calling useVideoStream for track: ${videoTrack}`);
|
||||
|
||||
return this.useVideoStream(videoTrack);
|
||||
})
|
||||
.finally(() => {
|
||||
this.isCreatingLocalTrack = false;
|
||||
});
|
||||
} else {
|
||||
// FIXME show error dialog if it fails (should be handled by react)
|
||||
@@ -1338,7 +1372,7 @@ export default {
|
||||
this._createRoom(localTracks);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
new ConferenceConnector(resolve, reject).connect();
|
||||
new ConferenceConnector(resolve, reject, this).connect();
|
||||
});
|
||||
},
|
||||
|
||||
@@ -1418,30 +1452,13 @@ export default {
|
||||
return;
|
||||
}
|
||||
|
||||
// In the multi-stream mode, add the track to the conference if there is no existing track, replace it
|
||||
// otherwise.
|
||||
if (getMultipleVideoSendingSupportFeatureFlag(state)) {
|
||||
const trackAction = oldTrack
|
||||
? replaceLocalTrack(oldTrack, newTrack, room)
|
||||
: addLocalTrack(newTrack);
|
||||
// Add the track to the conference if there is no existing track, replace it otherwise.
|
||||
const trackAction = oldTrack
|
||||
? replaceLocalTrack(oldTrack, newTrack, room)
|
||||
: addLocalTrack(newTrack);
|
||||
|
||||
APP.store.dispatch(trackAction)
|
||||
.then(() => {
|
||||
this.setVideoMuteStatus();
|
||||
})
|
||||
.then(resolve)
|
||||
.catch(error => {
|
||||
logger.error(`useVideoStream failed: ${error}`);
|
||||
reject(error);
|
||||
})
|
||||
.then(onFinish);
|
||||
|
||||
return;
|
||||
}
|
||||
APP.store.dispatch(
|
||||
replaceLocalTrack(oldTrack, newTrack, room))
|
||||
APP.store.dispatch(trackAction)
|
||||
.then(() => {
|
||||
this._setSharingScreen(newTrack);
|
||||
this.setVideoMuteStatus();
|
||||
})
|
||||
.then(resolve)
|
||||
@@ -1971,6 +1988,11 @@ export default {
|
||||
APP.store.dispatch(participantKicked(kicker, kicked));
|
||||
});
|
||||
|
||||
room.on(JitsiConferenceEvents.PARTICIPANT_SOURCE_UPDATED,
|
||||
jitsiParticipant => {
|
||||
APP.store.dispatch(participantSourcesUpdated(jitsiParticipant));
|
||||
});
|
||||
|
||||
room.on(JitsiConferenceEvents.SUSPEND_DETECTED, () => {
|
||||
APP.store.dispatch(suspendDetected());
|
||||
});
|
||||
@@ -2067,6 +2089,18 @@ export default {
|
||||
room.on(
|
||||
JitsiConferenceEvents.DATA_CHANNEL_OPENED, () => {
|
||||
APP.store.dispatch(dataChannelOpened());
|
||||
APP.store.dispatch(hideNotification(DATA_CHANNEL_CLOSED_NOTIFICATION_ID));
|
||||
}
|
||||
);
|
||||
|
||||
room.on(
|
||||
JitsiConferenceEvents.DATA_CHANNEL_CLOSED, ev => {
|
||||
APP.store.dispatch(dataChannelClosed(ev.code, ev.reason));
|
||||
APP.store.dispatch(showWarningNotification({
|
||||
descriptionKey: 'notify.dataChannelClosedDescription',
|
||||
titleKey: 'notify.dataChannelClosed',
|
||||
uid: DATA_CHANNEL_CLOSED_NOTIFICATION_ID
|
||||
}, NOTIFICATION_TIMEOUT_TYPE.STICKY));
|
||||
}
|
||||
);
|
||||
|
||||
@@ -2314,7 +2348,7 @@ export default {
|
||||
* @param {MediaDeviceInfo[]} devices
|
||||
* @returns {Promise}
|
||||
*/
|
||||
_onDeviceListChanged(devices) {
|
||||
async _onDeviceListChanged(devices) {
|
||||
const oldDevices = APP.store.getState()['features/base/devices'].availableDevices;
|
||||
const localAudio = getLocalJitsiAudioTrack(APP.store.getState());
|
||||
const localVideo = getLocalJitsiVideoTrack(APP.store.getState());
|
||||
@@ -2328,13 +2362,10 @@ export default {
|
||||
const newDevices
|
||||
= mediaDeviceHelper.getNewMediaDevicesAfterDeviceListChanged(
|
||||
devices,
|
||||
this.isSharingScreen,
|
||||
localVideo,
|
||||
localAudio,
|
||||
newLabelsOnly);
|
||||
const promises = [];
|
||||
const audioWasMuted = this.isLocalAudioMuted();
|
||||
const videoWasMuted = this.isLocalVideoMuted();
|
||||
const requestedInput = {
|
||||
audio: Boolean(newDevices.audioinput),
|
||||
video: Boolean(newDevices.videoinput)
|
||||
@@ -2346,7 +2377,6 @@ export default {
|
||||
= setAudioOutputDeviceId(newDevices.audiooutput, dispatch)
|
||||
.catch(); // Just ignore any errors in catch block.
|
||||
|
||||
|
||||
promises.push(setAudioOutputPromise);
|
||||
}
|
||||
|
||||
@@ -2363,8 +2393,7 @@ export default {
|
||||
}
|
||||
|
||||
// Let's handle unknown/non-preferred devices
|
||||
const newAvailDevices
|
||||
= APP.store.getState()['features/base/devices'].availableDevices;
|
||||
const newAvailDevices = APP.store.getState()['features/base/devices'].availableDevices;
|
||||
let newAudioDevices = [];
|
||||
let oldAudioDevices = [];
|
||||
|
||||
@@ -2380,103 +2409,85 @@ export default {
|
||||
|
||||
// check for audio
|
||||
if (newAudioDevices.length > 0) {
|
||||
APP.store.dispatch(
|
||||
checkAndNotifyForNewDevice(newAudioDevices, oldAudioDevices));
|
||||
APP.store.dispatch(checkAndNotifyForNewDevice(newAudioDevices, oldAudioDevices));
|
||||
}
|
||||
|
||||
// check for video
|
||||
if (!requestedInput.video) {
|
||||
APP.store.dispatch(
|
||||
checkAndNotifyForNewDevice(newAvailDevices.videoInput, oldDevices.videoInput));
|
||||
APP.store.dispatch(checkAndNotifyForNewDevice(newAvailDevices.videoInput, oldDevices.videoInput));
|
||||
}
|
||||
|
||||
// When the 'default' mic needs to be selected, we need to
|
||||
// pass the real device id to gUM instead of 'default' in order
|
||||
// to get the correct MediaStreamTrack from chrome because of the
|
||||
// following bug.
|
||||
// When the 'default' mic needs to be selected, we need to pass the real device id to gUM instead of 'default'
|
||||
// in order to get the correct MediaStreamTrack from chrome because of the following bug.
|
||||
// https://bugs.chromium.org/p/chromium/issues/detail?id=997689
|
||||
const hasDefaultMicChanged = newDevices.audioinput === 'default';
|
||||
|
||||
// This is the case when the local video is muted and a preferred device is connected.
|
||||
// When the local video is muted and a preferred device is connected, update the settings and remove the track
|
||||
// from the conference. A new track will be created and replaced when the user unmutes their camera.
|
||||
if (requestedInput.video && this.isLocalVideoMuted()) {
|
||||
// We want to avoid creating a new video track in order to prevent turning on the camera.
|
||||
requestedInput.video = false;
|
||||
APP.store.dispatch(updateSettings({ // Update the current selected camera for the device selection dialog.
|
||||
APP.store.dispatch(updateSettings({
|
||||
cameraDeviceId: newDevices.videoinput
|
||||
}));
|
||||
requestedInput.video = false;
|
||||
delete newDevices.videoinput;
|
||||
|
||||
// Removing the current video track in order to force the unmute to select the preferred device.
|
||||
logger.debug('_onDeviceListChanged: Removing the current video track.');
|
||||
this.useVideoStream(null);
|
||||
|
||||
// Remove the track from the conference.
|
||||
if (localVideo) {
|
||||
await this.useVideoStream(null);
|
||||
logger.debug('_onDeviceListChanged: Removed the current video track.');
|
||||
}
|
||||
}
|
||||
|
||||
promises.push(
|
||||
mediaDeviceHelper.createLocalTracksAfterDeviceListChanged(
|
||||
// When the local audio is muted and a preferred device is connected, update the settings and remove the track
|
||||
// from the conference. A new track will be created and replaced when the user unmutes their mic.
|
||||
if (requestedInput.audio && this.isLocalAudioMuted()) {
|
||||
APP.store.dispatch(updateSettings({
|
||||
micDeviceId: newDevices.audioinput
|
||||
}));
|
||||
requestedInput.audio = false;
|
||||
delete newDevices.audioinput;
|
||||
|
||||
// Remove the track from the conference.
|
||||
if (localAudio) {
|
||||
await this.useAudioStream(null);
|
||||
logger.debug('_onDeviceListChanged: Removed the current audio track.');
|
||||
}
|
||||
}
|
||||
|
||||
// Create the tracks and replace them only if the user is unmuted.
|
||||
if (requestedInput.audio || requestedInput.video) {
|
||||
let tracks = [];
|
||||
|
||||
try {
|
||||
tracks = await mediaDeviceHelper.createLocalTracksAfterDeviceListChanged(
|
||||
createLocalTracksF,
|
||||
newDevices.videoinput,
|
||||
hasDefaultMicChanged
|
||||
? getDefaultDeviceId(APP.store.getState(), 'audioInput')
|
||||
: newDevices.audioinput)
|
||||
.then(tracks => {
|
||||
// If audio or video muted before, or we unplugged current
|
||||
// device and selected new one, then mute new track.
|
||||
const muteSyncPromises = tracks.map(track => {
|
||||
if ((track.isVideoTrack() && videoWasMuted)
|
||||
|| (track.isAudioTrack() && audioWasMuted)) {
|
||||
return track.mute();
|
||||
}
|
||||
: newDevices.audioinput);
|
||||
} catch (error) {
|
||||
logger.error(`Track creation failed on device change, ${error}`);
|
||||
|
||||
return Promise.resolve();
|
||||
});
|
||||
return Promise.reject(error);
|
||||
}
|
||||
|
||||
return Promise.all(muteSyncPromises)
|
||||
.then(() =>
|
||||
Promise.all(Object.keys(requestedInput).map(mediaType => {
|
||||
if (requestedInput[mediaType]) {
|
||||
const useStream
|
||||
= mediaType === 'audio'
|
||||
? this.useAudioStream.bind(this)
|
||||
: this.useVideoStream.bind(this);
|
||||
const track = tracks.find(t => t.getType() === mediaType) || null;
|
||||
|
||||
// Use the new stream or null if we failed to obtain it.
|
||||
return useStream(track)
|
||||
.then(() => {
|
||||
if (track?.isAudioTrack() && hasDefaultMicChanged) {
|
||||
// workaround for the default device to be shown as selected in the
|
||||
// settings even when the real device id was passed to gUM because of
|
||||
// the above mentioned chrome bug.
|
||||
track._realDeviceId = track.deviceId = 'default';
|
||||
}
|
||||
mediaType === 'audio'
|
||||
? this._updateAudioDeviceId()
|
||||
: this._updateVideoDeviceId();
|
||||
});
|
||||
}
|
||||
|
||||
return Promise.resolve();
|
||||
})));
|
||||
})
|
||||
.then(() => {
|
||||
// Log and sync known mute state.
|
||||
if (audioWasMuted) {
|
||||
sendAnalytics(createTrackMutedEvent(
|
||||
'audio',
|
||||
'device list changed'));
|
||||
logger.log('Audio mute: device list changed');
|
||||
muteLocalAudio(true);
|
||||
}
|
||||
|
||||
if (!this.isSharingScreen && videoWasMuted) {
|
||||
sendAnalytics(createTrackMutedEvent(
|
||||
'video',
|
||||
'device list changed'));
|
||||
logger.log('Video mute: device list changed');
|
||||
muteLocalVideo(true);
|
||||
}
|
||||
}));
|
||||
for (const track of tracks) {
|
||||
if (track.isAudioTrack()) {
|
||||
promises.push(
|
||||
this.useAudioStream(track)
|
||||
.then(() => {
|
||||
hasDefaultMicChanged && (track._realDeviceId = track.deviceId = 'default');
|
||||
this._updateAudioDeviceId();
|
||||
}));
|
||||
} else {
|
||||
promises.push(
|
||||
this.useVideoStream(track)
|
||||
.then(() => {
|
||||
this._updateVideoDeviceId();
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Promise.all(promises)
|
||||
.then(() => {
|
||||
|
||||
106
config.js
@@ -79,11 +79,6 @@ var config = {
|
||||
// This is useful when the client runs on a host with limited resources.
|
||||
// noAutoPlayVideo: false,
|
||||
|
||||
// Whether to use fake constraints (height: 99999, width: 99999) when calling getDisplayMedia on
|
||||
// Chromium based browsers. This is intended as a workaround for
|
||||
// https://bugs.chromium.org/p/chromium/issues/detail?id=1056311
|
||||
// setScreenSharingResolutionConstraints: true,
|
||||
|
||||
// Enable callstats only for a percentage of users.
|
||||
// This takes a value between 0 and 100 which determines the probability for
|
||||
// the callstats to be enabled.
|
||||
@@ -262,17 +257,6 @@ var config = {
|
||||
// applied locally. FIXME: having these 2 options is confusing.
|
||||
// startWithVideoMuted: false,
|
||||
|
||||
// If set to true, prefer to use the H.264 video codec (if supported).
|
||||
// Note that it's not recommended to do this because simulcast is not
|
||||
// supported when using H.264. For 1-to-1 calls this setting is enabled by
|
||||
// default and can be toggled in the p2p section.
|
||||
// This option has been deprecated, use preferredCodec under videoQuality section instead.
|
||||
// preferH264: true,
|
||||
|
||||
// If set to true, disable H.264 video codec by stripping it out of the
|
||||
// SDP.
|
||||
// disableH264: false,
|
||||
|
||||
// Desktop sharing
|
||||
|
||||
// Optional desktop sharing frame rate options. Default value: min:5, max:5.
|
||||
@@ -434,12 +418,6 @@ var config = {
|
||||
// 90: 2,
|
||||
// },
|
||||
|
||||
// Provides a way to translate the legacy bridge signaling messages, 'LastNChangedEvent',
|
||||
// 'SelectedEndpointsChangedEvent' and 'ReceiverVideoConstraint' into the new 'ReceiverVideoConstraints' message
|
||||
// that invokes the new bandwidth allocation algorithm in the bridge which is described here
|
||||
// - https://github.com/jitsi/jitsi-videobridge/blob/master/doc/allocation.md.
|
||||
// useNewBandwidthAllocationStrategy: false,
|
||||
|
||||
// Specify the settings for video quality optimizations on the client.
|
||||
// videoQuality: {
|
||||
// // Provides a way to prevent a video codec from being negotiated on the JVB connection. The codec specified
|
||||
@@ -580,9 +558,19 @@ var config = {
|
||||
// Require users to always specify a display name.
|
||||
// requireDisplayName: true,
|
||||
|
||||
// DEPRECATED! Use 'welcomePage.disabled' instead.
|
||||
// Whether to use a welcome page or not. In case it's false a random room
|
||||
// will be joined when no room is specified.
|
||||
enableWelcomePage: true,
|
||||
// enableWelcomePage: true,
|
||||
|
||||
// Configs for welcome page.
|
||||
// welcomePage: {
|
||||
// // Whether to disable welcome page. In case it's disabled a random room
|
||||
// // will be joined when no room is specified.
|
||||
// disabled: false,
|
||||
// // If set,landing page will redirect to this URL.
|
||||
// customUrl: ''
|
||||
// },
|
||||
|
||||
// Disable app shortcuts that are registered upon joining a conference
|
||||
// disableShortcuts: false,
|
||||
@@ -701,7 +689,6 @@ var config = {
|
||||
// 'chat',
|
||||
// 'closedcaptions',
|
||||
// 'desktop',
|
||||
// 'dock-iframe',
|
||||
// 'download',
|
||||
// 'embedmeeting',
|
||||
// 'etherpad',
|
||||
@@ -729,7 +716,6 @@ var config = {
|
||||
// 'stats',
|
||||
// 'tileview',
|
||||
// 'toggle-camera',
|
||||
// 'undock-iframe',
|
||||
// 'videoquality',
|
||||
// 'whiteboard',
|
||||
// ],
|
||||
@@ -915,18 +901,10 @@ var config = {
|
||||
// If not set, the effective value is 'all'.
|
||||
// iceTransportPolicy: 'all',
|
||||
|
||||
// If set to true, it will prefer to use H.264 for P2P calls (if H.264
|
||||
// is supported). This setting is deprecated, use preferredCodec instead.
|
||||
// preferH264: true,
|
||||
|
||||
// Provides a way to set the video codec preference on the p2p connection. Acceptable
|
||||
// codec values are 'VP8', 'VP9' and 'H264'.
|
||||
// preferredCodec: 'H264',
|
||||
|
||||
// If set to true, disable H.264 video codec by stripping it out of the
|
||||
// SDP. This setting is deprecated, use disabledCodec instead.
|
||||
// disableH264: false,
|
||||
|
||||
// Provides a way to prevent a video codec from being negotiated on the p2p connection.
|
||||
// disabledCodec: '',
|
||||
|
||||
@@ -1083,10 +1061,64 @@ var config = {
|
||||
// use only.
|
||||
// _desktopSharingSourceDevice: 'sample-id-or-label',
|
||||
|
||||
// DEPRECATED! Use deeplinking.disabled instead.
|
||||
// If true, any checks to handoff to another application will be prevented
|
||||
// and instead the app will continue to display in the current browser.
|
||||
// disableDeepLinking: false,
|
||||
|
||||
// The deeplinking config.
|
||||
// For information about the properties of
|
||||
// deeplinking.[ios/android].dynamicLink check:
|
||||
// https://firebase.google.com/docs/dynamic-links/create-manually
|
||||
// deeplinking: {
|
||||
//
|
||||
// // The desktop deeplinking config.
|
||||
// desktop: {
|
||||
// appName: 'Jitsi Meet'
|
||||
// },
|
||||
// // If true, any checks to handoff to another application will be prevented
|
||||
// // and instead the app will continue to display in the current browser.
|
||||
// disabled: false,
|
||||
|
||||
// // whether to hide the logo on the deep linking pages.
|
||||
// hideLogo: false,
|
||||
|
||||
// // The ios deeplinking config.
|
||||
// ios: {
|
||||
// appName: 'Jitsi Meet',
|
||||
// // Specify mobile app scheme for opening the app from the mobile browser.
|
||||
// appScheme: 'org.jitsi.meet',
|
||||
// // Custom URL for downloading ios mobile app.
|
||||
// downloadLink: 'https://itunes.apple.com/us/app/jitsi-meet/id1165103905',
|
||||
// dynamicLink: {
|
||||
// apn: 'org.jitsi.meet',
|
||||
// appCode: 'w2atb',
|
||||
// customDomain: undefined,
|
||||
// ibi: 'com.atlassian.JitsiMeet.ios',
|
||||
// isi: '1165103905'
|
||||
// }
|
||||
// },
|
||||
|
||||
// // The android deeplinking config.
|
||||
// android: {
|
||||
// appName: 'Jitsi Meet',
|
||||
// // Specify mobile app scheme for opening the app from the mobile browser.
|
||||
// appScheme: 'org.jitsi.meet',
|
||||
// // Custom URL for downloading android mobile app.
|
||||
// downloadLink: 'https://play.google.com/store/apps/details?id=org.jitsi.meet',
|
||||
// // Android app package name.
|
||||
// appPackage: 'org.jitsi.meet',
|
||||
// fDroidUrl: 'https://f-droid.org/en/packages/org.jitsi.meet/',
|
||||
// dynamicLink: {
|
||||
// apn: 'org.jitsi.meet',
|
||||
// appCode: 'w2atb',
|
||||
// customDomain: undefined,
|
||||
// ibi: 'com.atlassian.JitsiMeet.ios',
|
||||
// isi: '1165103905'
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
|
||||
// A property to disable the right click context menu for localVideo
|
||||
// the menu has option to flip the locally seen video for local presentations
|
||||
// disableLocalVideoFlip: false,
|
||||
@@ -1483,6 +1515,8 @@ 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
|
||||
@@ -1512,6 +1546,12 @@ var config = {
|
||||
// },
|
||||
};
|
||||
|
||||
// Temporary backwards compatibility with old mobile clients.
|
||||
config.flags = config.flags || {};
|
||||
config.flags.sourceNameSignaling = true;
|
||||
config.flags.sendMultipleVideoStreams = true;
|
||||
config.flags.receiveMultipleVideoStreams = true;
|
||||
|
||||
// Set the default values for JaaS customers
|
||||
if (enableJaaS) {
|
||||
config.dialInNumbersUrl = 'https://conference-mapper.jitsi.net/v1/access/dids';
|
||||
|
||||
@@ -126,6 +126,12 @@ form {
|
||||
background-size: contain;
|
||||
}
|
||||
|
||||
.leftwatermarknomargin {
|
||||
background-position: center left;
|
||||
background-repeat: no-repeat;
|
||||
background-size: contain;
|
||||
}
|
||||
|
||||
.rightwatermark {
|
||||
right: 32px;
|
||||
top: 32px;
|
||||
|
||||
126
css/_chat.scss
@@ -32,7 +32,7 @@
|
||||
|
||||
#chat-conversation-container {
|
||||
// extract message input height
|
||||
height: calc(100% - 68px);
|
||||
height: calc(100% - 64px);
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
@@ -76,32 +76,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
#chat-recipient {
|
||||
align-items: center;
|
||||
background-color: $chatPrivateMessageBackgroundColor;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
font-weight: 100;
|
||||
padding: 10px;
|
||||
|
||||
span {
|
||||
color: white;
|
||||
display: flex;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
div {
|
||||
svg {
|
||||
cursor: pointer;
|
||||
fill: white;
|
||||
}
|
||||
}
|
||||
|
||||
&.lobby-chat-recipient {
|
||||
background-color: $chatLobbyMessageBackgroundColor;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.chat-header {
|
||||
height: 70px;
|
||||
@@ -124,13 +98,12 @@
|
||||
}
|
||||
|
||||
.chat-input-container {
|
||||
padding: 0 16px 16px;
|
||||
padding: 0 16px 24px;
|
||||
}
|
||||
|
||||
#chat-input {
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
padding: 4px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
@@ -263,15 +236,6 @@
|
||||
-webkit-user-select: text;
|
||||
user-select: text;
|
||||
}
|
||||
|
||||
.display-name {
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
margin-bottom: 5px;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
}
|
||||
}
|
||||
|
||||
.sr-only {
|
||||
@@ -288,24 +252,11 @@
|
||||
}
|
||||
|
||||
.chatmessage {
|
||||
background-color: $chatRemoteMessageBackgroundColor;
|
||||
border-radius: 0px 6px 6px 6px;
|
||||
box-sizing: border-box;
|
||||
color: white;
|
||||
margin-top: 3px;
|
||||
max-width: 100%;
|
||||
position: relative;
|
||||
|
||||
&.localuser {
|
||||
background-color: $chatLocalMessageBackgroundColor;
|
||||
border-radius: 6px 0px 6px 6px;
|
||||
}
|
||||
|
||||
.usermessage {
|
||||
white-space: pre-wrap;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
&.error {
|
||||
border-radius: 0px;
|
||||
|
||||
@@ -320,22 +271,12 @@
|
||||
}
|
||||
}
|
||||
|
||||
.privatemessagenotice {
|
||||
font-size: 11px;
|
||||
font-weight: 100;
|
||||
}
|
||||
|
||||
.messagecontent {
|
||||
margin: 8px;
|
||||
max-width: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
}
|
||||
|
||||
.timestamp {
|
||||
color: #757575;
|
||||
}
|
||||
|
||||
#smileys {
|
||||
font-size: 20pt;
|
||||
margin: auto;
|
||||
@@ -409,24 +350,9 @@
|
||||
}
|
||||
|
||||
.chat-message-group {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
&.local {
|
||||
align-items: flex-end;
|
||||
|
||||
.chatmessage {
|
||||
background-color: $chatLocalMessageBackgroundColor;
|
||||
border-radius: 6px 0px 6px 6px;
|
||||
|
||||
&.privatemessage {
|
||||
background-color: $chatPrivateMessageBackgroundColor;
|
||||
}
|
||||
&.lobbymessage {
|
||||
background-color: $chatLobbyMessageBackgroundColor;
|
||||
}
|
||||
}
|
||||
|
||||
.display-name {
|
||||
display: none;
|
||||
}
|
||||
@@ -437,58 +363,10 @@
|
||||
}
|
||||
|
||||
&.error {
|
||||
.chatmessage {
|
||||
background-color: $defaultWarningColor;
|
||||
border-radius: 0px;
|
||||
font-weight: 100;
|
||||
}
|
||||
|
||||
.display-name {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.chatmessage-wrapper {
|
||||
max-width: 100%;
|
||||
|
||||
.replywrapper {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
|
||||
.messageactions {
|
||||
align-self: stretch;
|
||||
border-left: 1px solid $chatActionsSeparatorColor;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
padding: 5px;
|
||||
|
||||
&.lobbychatmessageactions {
|
||||
border-left-color: $chatLobbyActionsSeparatorColor;
|
||||
}
|
||||
|
||||
.toolbox-icon {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.chatmessage {
|
||||
background-color: $chatRemoteMessageBackgroundColor;
|
||||
border-radius: 0px 6px 6px 6px;
|
||||
display: inline-block;
|
||||
margin-top: 3px;
|
||||
color: white;
|
||||
|
||||
&.privatemessage {
|
||||
background-color: $chatPrivateMessageBackgroundColor;
|
||||
}
|
||||
&.lobbymessage {
|
||||
background-color: $chatLobbyMessageBackgroundColor;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.chat-dialog {
|
||||
|
||||
357
css/_polls.scss
@@ -1,360 +1,3 @@
|
||||
.poll-dialog {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
line-height: 20px;
|
||||
|
||||
h1, span, li, strong {
|
||||
color: #bce;
|
||||
}
|
||||
ol {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.poll-question-field {
|
||||
padding: 8px 16px;
|
||||
padding-bottom: 24px;
|
||||
border-bottom: 1px solid #525252;
|
||||
}
|
||||
|
||||
.poll-header {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.poll-creator {
|
||||
color: #C2C2C2;
|
||||
font-weight: 600;
|
||||
margin: 4px 0 16px 0;
|
||||
}
|
||||
|
||||
.poll-answer-container {
|
||||
display: flex;
|
||||
padding: 4px;
|
||||
background: #3D3D3D;
|
||||
border-radius: 3px;
|
||||
margin-bottom: 8px;
|
||||
|
||||
@media (max-width: 580px) {
|
||||
&> span {
|
||||
padding: 8px 0;
|
||||
}
|
||||
|
||||
svg {
|
||||
margin-top: 6px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.poll-answer-field-list, .poll-answer-list, .poll-result-list {
|
||||
list-style-type: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.poll-answer-field-list {
|
||||
padding: 0 16px;
|
||||
}
|
||||
|
||||
ol.poll-result-list {
|
||||
margin-bottom: 1.5em;
|
||||
}
|
||||
|
||||
.poll-result-list > li {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.poll-answer-field {
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
margin-bottom: 16;
|
||||
|
||||
}
|
||||
|
||||
.poll-answer-field:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.poll-create-option-row {
|
||||
display: flex;
|
||||
margin-bottom: 4;
|
||||
}
|
||||
|
||||
// Needed to override atlaskit default blue color
|
||||
.poll-create-container .jsYMHu {
|
||||
background: #292929;
|
||||
border-color: #808090;
|
||||
color: #fff // #808090
|
||||
}
|
||||
|
||||
.poll-add-button {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
padding: 8px 16px;
|
||||
}
|
||||
|
||||
.poll-remove-option-button {
|
||||
background: 0 0;
|
||||
border: none;
|
||||
color: #E04757;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.poll-create-add-option {
|
||||
border: none;
|
||||
background-color: #292929;
|
||||
padding: 3px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.poll-icon-button, .poll-drag-handle {
|
||||
.jitsi-icon svg {
|
||||
fill: #929292;
|
||||
}
|
||||
}
|
||||
|
||||
.poll-drag-handle {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
cursor: grab;
|
||||
padding-left: 8;
|
||||
padding-top: 8px;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.poll-dragged {
|
||||
opacity: 0.5;
|
||||
* {
|
||||
cursor: grabbing !important;
|
||||
}
|
||||
}
|
||||
|
||||
.poll-question {
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
line-height: 26px;
|
||||
}
|
||||
|
||||
.poll-answer-voters {
|
||||
font-weight: lighter;
|
||||
list-style-type: none;
|
||||
border: #616161 solid 1px;
|
||||
border-radius: 3px;
|
||||
padding: 2px 6px;
|
||||
margin: 4px 0px 12px;
|
||||
background-color: #616161;
|
||||
}
|
||||
|
||||
.poll-answer-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.poll-answer-vote-name {
|
||||
flex-shrink: 1;
|
||||
overflow-wrap: anywhere
|
||||
}
|
||||
|
||||
.poll-answer-vote-count-container{
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.poll-answer-vote-count {
|
||||
margin-left: 10px;
|
||||
white-space: nowrap;
|
||||
flex: 1;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.poll-answer-short-results{
|
||||
display: flex;
|
||||
min-width: 10em;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.poll-bar-container, .poll-bar {
|
||||
border-radius: 3px;
|
||||
height: 6px;
|
||||
}
|
||||
|
||||
.poll-bar-container {
|
||||
background-color: #616161;
|
||||
max-width: 160px;
|
||||
margin-top: 3px;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.poll-bar {
|
||||
background-color: #246FE5;
|
||||
}
|
||||
|
||||
.poll-message-footer {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
font-size: 12px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.poll-notice {
|
||||
font-weight: 100;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.poll-show-details {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
|
||||
&:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
.poll-result-links {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
|
||||
a.poll-detail-link, a.poll-change-vote-link {
|
||||
color: #669AEC;
|
||||
cursor: pointer;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
|
||||
&:hover {
|
||||
color: #669AEC;
|
||||
}
|
||||
|
||||
&:visited {
|
||||
color: #669AEC;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.polls-pane-content {
|
||||
height: 100%;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.pane-content{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.empty-pane-icon {
|
||||
width: 50%;
|
||||
padding: 24px;
|
||||
}
|
||||
|
||||
.empty-pane-icon svg {
|
||||
fill: #3D3D3D;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.empty-pane-message {
|
||||
color: #fff;
|
||||
padding: 0 16px;
|
||||
text-align: center;
|
||||
|
||||
}
|
||||
|
||||
.poll-results, .poll-answer {
|
||||
background: #292929;
|
||||
border-radius: 8px;
|
||||
border: 1px solid #666666;
|
||||
margin: 16px;
|
||||
padding: 16px;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
.poll-results {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.poll-answer {
|
||||
|
||||
h1, strong ,span {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
button > span {
|
||||
color: inherit;
|
||||
}
|
||||
}
|
||||
|
||||
.poll-create-label {
|
||||
color: #C2C2C2;
|
||||
display: flex;
|
||||
font-weight: 400;
|
||||
margin-bottom: 4;
|
||||
}
|
||||
|
||||
.expandable-input{
|
||||
line-height: 18px;
|
||||
resize: none;
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
box-sizing: border-box;
|
||||
overflow: hidden;
|
||||
border: 1px solid #666666;
|
||||
background-color: #141414;
|
||||
color: #FFF;
|
||||
border-radius: 6px;
|
||||
padding: 10px 16px;
|
||||
}
|
||||
|
||||
#polls-panel {
|
||||
height: calc(100% - 119px);
|
||||
}
|
||||
|
||||
.poll-container {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
height: calc(100% - 88px);
|
||||
line-height: 20px;
|
||||
overflow-y: auto;
|
||||
position: relative;
|
||||
|
||||
& > * + *:not(.ignore-child) {
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
@media (max-width: 580px) {
|
||||
height: calc(100% - 102px);
|
||||
}
|
||||
}
|
||||
|
||||
.poll-create-header {
|
||||
color: #fff;
|
||||
font-size: 20px;
|
||||
line-height: 28px;
|
||||
margin: 20px 16px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.poll-create-container {
|
||||
padding: 8px 0;
|
||||
}
|
||||
|
||||
.poll-create-footer {
|
||||
background-color: #141414;
|
||||
bottom: 0;
|
||||
position: absolute;
|
||||
width: calc(100% - 32px);
|
||||
}
|
||||
|
||||
.poll-footer {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: 0 16px 16px 16px;
|
||||
}
|
||||
|
||||
.poll-answer-footer {
|
||||
padding: 8px 0 0 0;
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
align-items: center;
|
||||
font-size: 14px;
|
||||
margin-left: 16px;
|
||||
max-width: 70%;
|
||||
}
|
||||
|
||||
&.space-top {
|
||||
@@ -82,7 +83,7 @@
|
||||
background-color: #FFFFFF;
|
||||
border-radius: 4px;
|
||||
height: 40px;
|
||||
width: 56px;
|
||||
width: 40px;
|
||||
}
|
||||
|
||||
.jitsi-content-recording-icon-container-without-switch {
|
||||
|
||||
@@ -31,10 +31,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
.welcome-tabs {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.header-text-title {
|
||||
text-align: center;
|
||||
}
|
||||
@@ -56,13 +52,6 @@
|
||||
.welcome-footer-row-block {
|
||||
display: block;
|
||||
}
|
||||
.welcome-badge {
|
||||
margin-right: 16px;
|
||||
}
|
||||
|
||||
.welcome-footer {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -73,6 +73,7 @@
|
||||
min-width: 34px;
|
||||
padding: 0 8px;
|
||||
height: 28px;
|
||||
font-variant-numeric: tabular-nums;
|
||||
|
||||
@media (max-width: 300px) {
|
||||
display: none;
|
||||
|
||||
@@ -79,7 +79,6 @@ $modalTextColor: #333;
|
||||
$chatActionsSeparatorColor: rgb(173, 105, 112);
|
||||
$chatBackgroundColor: #131519;
|
||||
$chatInputSeparatorColor: #A4B8D1;
|
||||
$chatLobbyMessageBackgroundColor: #6A50D3;
|
||||
$chatLobbyActionsSeparatorColor: #6A50D3;
|
||||
$chatLocalMessageBackgroundColor: #484A4F;
|
||||
$chatPrivateMessageBackgroundColor: rgb(153, 69, 77);
|
||||
@@ -170,8 +169,9 @@ $welcomePageHeaderPaddingBottom: 0px;
|
||||
$welcomePageHeaderTitleMaxWidth: initial;
|
||||
$welcomePageHeaderTextAlign: center;
|
||||
|
||||
$welcomePageHeaderContainerMarginTop: 104px;
|
||||
$welcomePageHeaderContainerDisplay: flex;
|
||||
$welcomePageHeaderContainerMargin: 104px 32px 0 32px;
|
||||
$welcomePageHeaderContainerMargin: $welcomePageHeaderContainerMarginTop auto 0;
|
||||
|
||||
$welcomePageHeaderTextTitleMarginBottom: 0;
|
||||
$welcomePageHeaderTextTitleFontSize: 42px;
|
||||
|
||||
@@ -29,6 +29,16 @@ body.welcome-page {
|
||||
flex-direction: column;
|
||||
margin: $welcomePageHeaderContainerMargin;
|
||||
z-index: $zindex2;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
max-width: 688px;
|
||||
}
|
||||
|
||||
.header-watermark-container {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin-top: calc(20px - #{$welcomePageHeaderContainerMarginTop});
|
||||
}
|
||||
|
||||
.header-text-title {
|
||||
@@ -123,16 +133,11 @@ body.welcome-page {
|
||||
max-width: calc(100% - 40px);
|
||||
padding: 16px 0 39px 0;
|
||||
width: $welcomePageEnterRoomWidth;
|
||||
text-align: center;
|
||||
|
||||
p {
|
||||
color: $welcomePageDescriptionColor;
|
||||
float: left;
|
||||
text-align: $welcomePageHeaderTextAlign;
|
||||
|
||||
a {
|
||||
color: inherit;
|
||||
font-weight: 600;
|
||||
}
|
||||
a {
|
||||
color: inherit;
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -200,8 +205,8 @@ body.welcome-page {
|
||||
color: $welcomePageDescriptionColor;
|
||||
padding: 4px;
|
||||
position: absolute;
|
||||
top: 32px;
|
||||
right: 32px;
|
||||
top: calc(35px - #{$welcomePageHeaderContainerMarginTop});
|
||||
right: 0;
|
||||
z-index: $zindex2;
|
||||
|
||||
* {
|
||||
@@ -224,6 +229,11 @@ body.welcome-page {
|
||||
width: $welcomePageWatermarkWidth;
|
||||
height: $welcomePageWatermarkHeight;
|
||||
}
|
||||
|
||||
.watermark.leftwatermarknomargin {
|
||||
width: $welcomePageWatermarkWidth;
|
||||
height: $welcomePageWatermarkHeight;
|
||||
}
|
||||
}
|
||||
|
||||
&.without-content {
|
||||
@@ -242,10 +252,17 @@ body.welcome-page {
|
||||
padding-top: 40px;
|
||||
}
|
||||
|
||||
.welcome-card-row {
|
||||
.welcome-card-column {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
padding: 0 32px;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
max-width: 688px;
|
||||
margin: auto;
|
||||
|
||||
> div {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
.welcome-card-text {
|
||||
@@ -253,7 +270,7 @@ body.welcome-page {
|
||||
}
|
||||
|
||||
.welcome-card {
|
||||
width: 49%;
|
||||
width: 100%;
|
||||
border-radius: 8px;
|
||||
|
||||
&--dark {
|
||||
@@ -268,10 +285,6 @@ body.welcome-page {
|
||||
&--grey {
|
||||
background: #F2F3F4;
|
||||
}
|
||||
|
||||
&--shadow {
|
||||
box-shadow: 0px 4px 30px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
}
|
||||
|
||||
.welcome-footer {
|
||||
|
||||
@@ -2,7 +2,8 @@ $sidePanelWidth: 300px;
|
||||
|
||||
.prejoin-third-party {
|
||||
flex-direction: column-reverse;
|
||||
|
||||
z-index: auto;
|
||||
|
||||
.content {
|
||||
height: auto;
|
||||
margin: 0 auto;
|
||||
|
||||
@@ -41,20 +41,27 @@
|
||||
&-dropdown-btns {
|
||||
padding: 8px 0;
|
||||
}
|
||||
|
||||
|
||||
&-dropdown-container {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
|
||||
|
||||
/**
|
||||
* Override default InlineDialog behaviour, since it does not play nicely with relative widths
|
||||
*/
|
||||
& > div:nth-child(2) {
|
||||
background: #fff;
|
||||
background: #E0E0E0;
|
||||
padding: 0;
|
||||
position: absolute !important;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.prejoin-input {
|
||||
margin-bottom: 16px;
|
||||
|
||||
& input {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,4 @@
|
||||
.premeeting-screen {
|
||||
background: #292929;
|
||||
bottom: 0;
|
||||
display: flex;
|
||||
font-size: 1.3em;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
z-index: $toolbarZ + 2;
|
||||
|
||||
.premeeting-screen {
|
||||
.action-btn {
|
||||
border-radius: 6px;
|
||||
box-sizing: border-box;
|
||||
@@ -75,129 +65,38 @@
|
||||
}
|
||||
}
|
||||
|
||||
.content {
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex-shrink: 0;
|
||||
height: 100%;
|
||||
margin: 0 30px;
|
||||
padding: 24px 0 16px;
|
||||
#new-toolbox {
|
||||
bottom: 0;
|
||||
position: relative;
|
||||
width: $prejoinDefaultContentWidth;
|
||||
z-index: $toolbarZ + 2;
|
||||
transition: none;
|
||||
|
||||
&-controls {
|
||||
align-items: center;
|
||||
.toolbox-content {
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.toolbox-content-items {
|
||||
@include ltr;
|
||||
background: transparent;
|
||||
box-shadow: none;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
margin: auto;
|
||||
justify-content: space-between;
|
||||
padding: 8px 0;
|
||||
}
|
||||
|
||||
.toolbox-content,
|
||||
.toolbox-content-wrapper,
|
||||
.toolbox-content-items {
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
|
||||
.title {
|
||||
color: #fff;
|
||||
font-size: 28px;
|
||||
font-weight: 600;
|
||||
letter-spacing: -0.015;
|
||||
line-height: 36px;
|
||||
margin-bottom: 16px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
input.field {
|
||||
background-color: white;
|
||||
border: none;
|
||||
outline: none;
|
||||
border-radius: 6px;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
margin-bottom: 16px;
|
||||
color: #1C2025;
|
||||
padding: 10px 16px;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
|
||||
&.error {
|
||||
border: 1px solid #E04757;
|
||||
}
|
||||
|
||||
&.focused {
|
||||
box-shadow: 0px 0px 1px 1.5px black, 0px 0px 1.3px 4px white;
|
||||
}
|
||||
}
|
||||
|
||||
#new-toolbox {
|
||||
bottom: 0;
|
||||
position: relative;
|
||||
transition: none;
|
||||
|
||||
.toolbox-content {
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.toolbox-content-items {
|
||||
@include ltr;
|
||||
background: transparent;
|
||||
box-shadow: none;
|
||||
display: flex;
|
||||
justify-content: space-evenly;
|
||||
padding: 8px 0;
|
||||
}
|
||||
|
||||
.toolbox-content,
|
||||
.toolbox-content-wrapper,
|
||||
.toolbox-content-items {
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 720px) {
|
||||
flex-direction: column-reverse;
|
||||
|
||||
.content {
|
||||
height: auto;
|
||||
margin: 0 auto;
|
||||
}
|
||||
}
|
||||
|
||||
// mobile phone landscape
|
||||
@media (max-height: 420px) {
|
||||
div.content {
|
||||
padding: 16px 16px 0 16px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 400px) {
|
||||
.content {
|
||||
padding: 16px;
|
||||
width: 100%;
|
||||
|
||||
&-controls {
|
||||
input.field {
|
||||
font-size: 16px;
|
||||
padding: 14px 16px;
|
||||
}
|
||||
}
|
||||
|
||||
.title {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.device-status-error {
|
||||
border-radius: 0;
|
||||
margin: 0 -16px;
|
||||
}
|
||||
|
||||
input.field {
|
||||
font-size: 16px;
|
||||
padding: 14px 16px;
|
||||
}
|
||||
|
||||
.action-btn {
|
||||
font-size: 16px;
|
||||
margin-bottom: 8px;
|
||||
|
||||
7
debian/jitsi-meet-prosody.postinst
vendored
@@ -44,12 +44,7 @@ case "$1" in
|
||||
fi
|
||||
JVB_SECRET="$RET"
|
||||
|
||||
db_get jicofo/jicofo-authuser
|
||||
if [ -z "$RET" ] ; then
|
||||
db_input critical jicofo/jicofo-authuser || true
|
||||
db_go
|
||||
fi
|
||||
JICOFO_AUTH_USER="$RET"
|
||||
JICOFO_AUTH_USER="focus"
|
||||
|
||||
db_get jicofo/jicofo-authpassword
|
||||
if [ -z "$RET" ] ; then
|
||||
|
||||
6
debian/jitsi-meet-prosody.templates
vendored
@@ -13,12 +13,6 @@ Type: password
|
||||
_Description: Jitsi Videobridge Component secret:
|
||||
The secret used by Jitsi Videobridge to connect to xmpp server as component.
|
||||
|
||||
Template: jicofo/jicofo-authuser
|
||||
Type: string
|
||||
Default: focus
|
||||
_Description: Jicofo username:
|
||||
The jicofo needs an authenticated admin user to connect to xmpp server.
|
||||
|
||||
Template: jicofo/jicofo-authpassword
|
||||
Type: password
|
||||
_Description: Jicofo user password:
|
||||
|
||||
5
debian/jitsi-meet-web-config.postinst
vendored
@@ -176,6 +176,11 @@ case "$1" in
|
||||
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
|
||||
|
||||
@@ -15,6 +15,17 @@ upstream jvb1 {
|
||||
server 127.0.0.1:9090;
|
||||
keepalive 2;
|
||||
}
|
||||
map $arg_vnode $prosody_node {
|
||||
default prosody;
|
||||
v1 v1;
|
||||
v2 v2;
|
||||
v3 v3;
|
||||
v4 v4;
|
||||
v5 v5;
|
||||
v6 v6;
|
||||
v7 v7;
|
||||
v8 v8;
|
||||
}
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
@@ -95,7 +106,7 @@ server {
|
||||
|
||||
# BOSH
|
||||
location = /http-bind {
|
||||
proxy_pass http://prosody/http-bind?prefix=$prefix&$args;
|
||||
proxy_pass http://$prosody_node/http-bind?prefix=$prefix&$args;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header X-Forwarded-For $remote_addr;
|
||||
proxy_set_header Host $http_host;
|
||||
@@ -104,7 +115,7 @@ server {
|
||||
|
||||
# xmpp websockets
|
||||
location = /xmpp-websocket {
|
||||
proxy_pass http://prosody/xmpp-websocket?prefix=$prefix&$args;
|
||||
proxy_pass http://$prosody_node/xmpp-websocket?prefix=$prefix&$args;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
|
||||
3
globals.d.ts
vendored
@@ -13,6 +13,8 @@ declare global {
|
||||
keyboardshortcut: {
|
||||
registerShortcut: Function;
|
||||
unregisterShortcut: Function;
|
||||
openDialog: Function;
|
||||
enable: Function;
|
||||
}
|
||||
};
|
||||
const interfaceConfig: any;
|
||||
@@ -22,6 +24,7 @@ declare global {
|
||||
JITSI_MEET_LITE_SDK?: boolean;
|
||||
interfaceConfig?: any;
|
||||
JitsiMeetJS?: any;
|
||||
JitsiMeetElectron?: any;
|
||||
}
|
||||
|
||||
const config: IConfig;
|
||||
|
||||
2
globals.native.d.ts
vendored
@@ -23,6 +23,8 @@ interface IWindow {
|
||||
onerror: (event: string, source: any, lineno: any, colno: any, e: Error) => void;
|
||||
onunhandledrejection: (event: any) => void;
|
||||
|
||||
setInterval: typeof setInterval;
|
||||
clearInterval: typeof clearInterval;
|
||||
setTimeout: typeof setTimeout;
|
||||
clearTimeout: typeof clearTimeout;
|
||||
setImmediate: typeof setImmediate;
|
||||
|
||||
@@ -76,11 +76,6 @@ var interfaceConfig = {
|
||||
|
||||
GENERATE_ROOMNAMES_ON_WELCOME_PAGE: true,
|
||||
|
||||
/**
|
||||
* Hide the logo on the deep linking pages.
|
||||
*/
|
||||
HIDE_DEEP_LINKING_LOGO: false,
|
||||
|
||||
/**
|
||||
* Hide the invite prompt in the header when alone in the meeting.
|
||||
*/
|
||||
@@ -108,23 +103,6 @@ var interfaceConfig = {
|
||||
*/
|
||||
MOBILE_APP_PROMO: true,
|
||||
|
||||
/**
|
||||
* Specify custom URL for downloading android mobile app.
|
||||
*/
|
||||
MOBILE_DOWNLOAD_LINK_ANDROID: 'https://play.google.com/store/apps/details?id=org.jitsi.meet',
|
||||
|
||||
/**
|
||||
* Specify custom URL for downloading f droid app.
|
||||
*/
|
||||
MOBILE_DOWNLOAD_LINK_F_DROID: 'https://f-droid.org/en/packages/org.jitsi.meet/',
|
||||
|
||||
/**
|
||||
* Specify URL for downloading ios mobile app.
|
||||
*/
|
||||
MOBILE_DOWNLOAD_LINK_IOS: 'https://itunes.apple.com/us/app/jitsi-meet/id1165103905',
|
||||
|
||||
NATIVE_APP_NAME: 'Jitsi Meet',
|
||||
|
||||
// Names of browsers which should show a warning stating the current browser
|
||||
// has a suboptimal experience. Browsers which are not listed as optimal or
|
||||
// unsupported are considered suboptimal. Valid values are:
|
||||
@@ -159,7 +137,6 @@ var interfaceConfig = {
|
||||
*/
|
||||
SHOW_CHROME_EXTENSION_BANNER: false,
|
||||
|
||||
SHOW_DEEP_LINKING_IMAGE: false,
|
||||
SHOW_JITSI_WATERMARK: true,
|
||||
SHOW_POWERED_BY: false,
|
||||
SHOW_PROMOTIONAL_CLOSE_PAGE: false,
|
||||
@@ -200,6 +177,31 @@ var interfaceConfig = {
|
||||
*/
|
||||
// TILE_VIEW_MAX_COLUMNS: 5,
|
||||
|
||||
// List of undocumented settings
|
||||
/**
|
||||
INDICATOR_FONT_SIZES
|
||||
PHONE_NUMBER_REGEX
|
||||
*/
|
||||
|
||||
// -----------------DEPRECATED CONFIGS BELOW THIS LINE-----------------------------
|
||||
|
||||
/**
|
||||
* Specify URL for downloading ios mobile app.
|
||||
*/
|
||||
// MOBILE_DOWNLOAD_LINK_IOS: 'https://itunes.apple.com/us/app/jitsi-meet/id1165103905',
|
||||
|
||||
/**
|
||||
* Specify custom URL for downloading android mobile app.
|
||||
*/
|
||||
// MOBILE_DOWNLOAD_LINK_ANDROID: 'https://play.google.com/store/apps/details?id=org.jitsi.meet',
|
||||
|
||||
/**
|
||||
* Specify mobile app scheme for opening the app from the mobile browser.
|
||||
*/
|
||||
// APP_SCHEME: 'org.jitsi.meet',
|
||||
|
||||
// NATIVE_APP_NAME: 'Jitsi Meet',
|
||||
|
||||
/**
|
||||
* Specify Firebase dynamic link properties for the mobile apps.
|
||||
*/
|
||||
@@ -212,22 +214,19 @@ var interfaceConfig = {
|
||||
// },
|
||||
|
||||
/**
|
||||
* Specify mobile app scheme for opening the app from the mobile browser.
|
||||
* Hide the logo on the deep linking pages.
|
||||
*/
|
||||
// APP_SCHEME: 'org.jitsi.meet',
|
||||
// HIDE_DEEP_LINKING_LOGO: false,
|
||||
|
||||
/**
|
||||
* Specify the Android app package name.
|
||||
*/
|
||||
// ANDROID_APP_PACKAGE: 'org.jitsi.meet',
|
||||
|
||||
// List of undocumented settings
|
||||
/**
|
||||
INDICATOR_FONT_SIZES
|
||||
PHONE_NUMBER_REGEX
|
||||
*/
|
||||
|
||||
// -----------------DEPRECATED CONFIGS BELOW THIS LINE-----------------------------
|
||||
* Specify custom URL for downloading f droid app.
|
||||
*/
|
||||
// MOBILE_DOWNLOAD_LINK_F_DROID: 'https://f-droid.org/en/packages/org.jitsi.meet/',
|
||||
|
||||
// Connection indicators (
|
||||
// CONNECTION_INDICATOR_AUTO_HIDE_ENABLED,
|
||||
|
||||
446
ios/Podfile.lock
@@ -13,14 +13,14 @@ PODS:
|
||||
- CocoaLumberjack/Core (= 3.7.2)
|
||||
- CocoaLumberjack/Core (3.7.2)
|
||||
- DoubleConversion (1.1.6)
|
||||
- FBLazyVector (0.68.4)
|
||||
- FBReactNativeSpec (0.68.4):
|
||||
- FBLazyVector (0.68.5)
|
||||
- FBReactNativeSpec (0.68.5):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTRequired (= 0.68.4)
|
||||
- RCTTypeSafety (= 0.68.4)
|
||||
- React-Core (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- ReactCommon/turbomodule/core (= 0.68.4)
|
||||
- RCTRequired (= 0.68.5)
|
||||
- RCTTypeSafety (= 0.68.5)
|
||||
- React-Core (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- Firebase/Analytics (8.15.0):
|
||||
- Firebase/Core
|
||||
- Firebase/Core (8.15.0):
|
||||
@@ -163,201 +163,201 @@ PODS:
|
||||
- DoubleConversion
|
||||
- fmt (~> 6.2.1)
|
||||
- glog
|
||||
- RCTRequired (0.68.4)
|
||||
- RCTTypeSafety (0.68.4):
|
||||
- FBLazyVector (= 0.68.4)
|
||||
- RCTRequired (0.68.5)
|
||||
- RCTTypeSafety (0.68.5):
|
||||
- FBLazyVector (= 0.68.5)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTRequired (= 0.68.4)
|
||||
- React-Core (= 0.68.4)
|
||||
- React (0.68.4):
|
||||
- React-Core (= 0.68.4)
|
||||
- React-Core/DevSupport (= 0.68.4)
|
||||
- React-Core/RCTWebSocket (= 0.68.4)
|
||||
- React-RCTActionSheet (= 0.68.4)
|
||||
- React-RCTAnimation (= 0.68.4)
|
||||
- React-RCTBlob (= 0.68.4)
|
||||
- React-RCTImage (= 0.68.4)
|
||||
- React-RCTLinking (= 0.68.4)
|
||||
- React-RCTNetwork (= 0.68.4)
|
||||
- React-RCTSettings (= 0.68.4)
|
||||
- React-RCTText (= 0.68.4)
|
||||
- React-RCTVibration (= 0.68.4)
|
||||
- React-callinvoker (0.68.4)
|
||||
- React-Codegen (0.68.4):
|
||||
- FBReactNativeSpec (= 0.68.4)
|
||||
- RCTRequired (= 0.68.5)
|
||||
- React-Core (= 0.68.5)
|
||||
- React (0.68.5):
|
||||
- React-Core (= 0.68.5)
|
||||
- React-Core/DevSupport (= 0.68.5)
|
||||
- React-Core/RCTWebSocket (= 0.68.5)
|
||||
- React-RCTActionSheet (= 0.68.5)
|
||||
- React-RCTAnimation (= 0.68.5)
|
||||
- React-RCTBlob (= 0.68.5)
|
||||
- React-RCTImage (= 0.68.5)
|
||||
- React-RCTLinking (= 0.68.5)
|
||||
- React-RCTNetwork (= 0.68.5)
|
||||
- React-RCTSettings (= 0.68.5)
|
||||
- React-RCTText (= 0.68.5)
|
||||
- React-RCTVibration (= 0.68.5)
|
||||
- React-callinvoker (0.68.5)
|
||||
- React-Codegen (0.68.5):
|
||||
- FBReactNativeSpec (= 0.68.5)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTRequired (= 0.68.4)
|
||||
- RCTTypeSafety (= 0.68.4)
|
||||
- React-Core (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- ReactCommon/turbomodule/core (= 0.68.4)
|
||||
- React-Core (0.68.4):
|
||||
- RCTRequired (= 0.68.5)
|
||||
- RCTTypeSafety (= 0.68.5)
|
||||
- React-Core (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-Core (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-Core/Default (= 0.68.5)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-Core/CoreModulesHeaders (0.68.4):
|
||||
- React-Core/CoreModulesHeaders (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-Core/Default (0.68.4):
|
||||
- React-Core/Default (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-Core/DevSupport (0.68.4):
|
||||
- React-Core/DevSupport (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default (= 0.68.4)
|
||||
- React-Core/RCTWebSocket (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-jsinspector (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-Core/Default (= 0.68.5)
|
||||
- React-Core/RCTWebSocket (= 0.68.5)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-jsinspector (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-Core/RCTActionSheetHeaders (0.68.4):
|
||||
- React-Core/RCTActionSheetHeaders (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-Core/RCTAnimationHeaders (0.68.4):
|
||||
- React-Core/RCTAnimationHeaders (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-Core/RCTBlobHeaders (0.68.4):
|
||||
- React-Core/RCTBlobHeaders (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-Core/RCTImageHeaders (0.68.4):
|
||||
- React-Core/RCTImageHeaders (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-Core/RCTLinkingHeaders (0.68.4):
|
||||
- React-Core/RCTLinkingHeaders (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-Core/RCTNetworkHeaders (0.68.4):
|
||||
- React-Core/RCTNetworkHeaders (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-Core/RCTSettingsHeaders (0.68.4):
|
||||
- React-Core/RCTSettingsHeaders (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-Core/RCTTextHeaders (0.68.4):
|
||||
- React-Core/RCTTextHeaders (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-Core/RCTVibrationHeaders (0.68.4):
|
||||
- React-Core/RCTVibrationHeaders (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-Core/RCTWebSocket (0.68.4):
|
||||
- React-Core/RCTWebSocket (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-Core/Default (= 0.68.5)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-CoreModules (0.68.4):
|
||||
- React-CoreModules (0.68.5):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.68.4)
|
||||
- React-Codegen (= 0.68.4)
|
||||
- React-Core/CoreModulesHeaders (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-RCTImage (= 0.68.4)
|
||||
- ReactCommon/turbomodule/core (= 0.68.4)
|
||||
- React-cxxreact (0.68.4):
|
||||
- RCTTypeSafety (= 0.68.5)
|
||||
- React-Codegen (= 0.68.5)
|
||||
- React-Core/CoreModulesHeaders (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-RCTImage (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-cxxreact (0.68.5):
|
||||
- boost (= 1.76.0)
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-callinvoker (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsinspector (= 0.68.4)
|
||||
- React-logger (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-runtimeexecutor (= 0.68.4)
|
||||
- React-jsi (0.68.4):
|
||||
- React-callinvoker (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsinspector (= 0.68.5)
|
||||
- React-logger (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- React-runtimeexecutor (= 0.68.5)
|
||||
- React-jsi (0.68.5):
|
||||
- boost (= 1.76.0)
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-jsi/Default (= 0.68.4)
|
||||
- React-jsi/Default (0.68.4):
|
||||
- React-jsi/Default (= 0.68.5)
|
||||
- React-jsi/Default (0.68.5):
|
||||
- boost (= 1.76.0)
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-jsiexecutor (0.68.4):
|
||||
- React-jsiexecutor (0.68.5):
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-jsinspector (0.68.4)
|
||||
- React-logger (0.68.4):
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- React-jsinspector (0.68.5)
|
||||
- React-logger (0.68.5):
|
||||
- glog
|
||||
- react-native-background-timer (2.4.1):
|
||||
- React-Core
|
||||
@@ -373,8 +373,12 @@ PODS:
|
||||
- React-Core
|
||||
- react-native-performance (2.1.0):
|
||||
- React-Core
|
||||
- react-native-safe-area-context (3.3.2):
|
||||
- react-native-safe-area-context (4.4.1):
|
||||
- RCT-Folly
|
||||
- RCTRequired
|
||||
- RCTTypeSafety
|
||||
- React-Core
|
||||
- ReactCommon/turbomodule/core
|
||||
- react-native-slider (4.1.12):
|
||||
- React-Core
|
||||
- react-native-splash-screen (3.3.0):
|
||||
@@ -385,76 +389,76 @@ PODS:
|
||||
- react-native-video/Video (6.0.0-alpha.1):
|
||||
- PromisesSwift
|
||||
- React-Core
|
||||
- react-native-webrtc (1.106.1):
|
||||
- react-native-webrtc (106.0.4):
|
||||
- JitsiWebRTC (~> 106.0.0)
|
||||
- React-Core
|
||||
- react-native-webview (11.15.1):
|
||||
- React-Core
|
||||
- React-perflogger (0.68.4)
|
||||
- React-RCTActionSheet (0.68.4):
|
||||
- React-Core/RCTActionSheetHeaders (= 0.68.4)
|
||||
- React-RCTAnimation (0.68.4):
|
||||
- React-perflogger (0.68.5)
|
||||
- React-RCTActionSheet (0.68.5):
|
||||
- React-Core/RCTActionSheetHeaders (= 0.68.5)
|
||||
- React-RCTAnimation (0.68.5):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.68.4)
|
||||
- React-Codegen (= 0.68.4)
|
||||
- React-Core/RCTAnimationHeaders (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- ReactCommon/turbomodule/core (= 0.68.4)
|
||||
- React-RCTBlob (0.68.4):
|
||||
- RCTTypeSafety (= 0.68.5)
|
||||
- React-Codegen (= 0.68.5)
|
||||
- React-Core/RCTAnimationHeaders (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-RCTBlob (0.68.5):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Codegen (= 0.68.4)
|
||||
- React-Core/RCTBlobHeaders (= 0.68.4)
|
||||
- React-Core/RCTWebSocket (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-RCTNetwork (= 0.68.4)
|
||||
- ReactCommon/turbomodule/core (= 0.68.4)
|
||||
- React-RCTImage (0.68.4):
|
||||
- React-Codegen (= 0.68.5)
|
||||
- React-Core/RCTBlobHeaders (= 0.68.5)
|
||||
- React-Core/RCTWebSocket (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-RCTNetwork (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-RCTImage (0.68.5):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.68.4)
|
||||
- React-Codegen (= 0.68.4)
|
||||
- React-Core/RCTImageHeaders (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-RCTNetwork (= 0.68.4)
|
||||
- ReactCommon/turbomodule/core (= 0.68.4)
|
||||
- React-RCTLinking (0.68.4):
|
||||
- React-Codegen (= 0.68.4)
|
||||
- React-Core/RCTLinkingHeaders (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- ReactCommon/turbomodule/core (= 0.68.4)
|
||||
- React-RCTNetwork (0.68.4):
|
||||
- RCTTypeSafety (= 0.68.5)
|
||||
- React-Codegen (= 0.68.5)
|
||||
- React-Core/RCTImageHeaders (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-RCTNetwork (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-RCTLinking (0.68.5):
|
||||
- React-Codegen (= 0.68.5)
|
||||
- React-Core/RCTLinkingHeaders (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-RCTNetwork (0.68.5):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.68.4)
|
||||
- React-Codegen (= 0.68.4)
|
||||
- React-Core/RCTNetworkHeaders (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- ReactCommon/turbomodule/core (= 0.68.4)
|
||||
- React-RCTSettings (0.68.4):
|
||||
- RCTTypeSafety (= 0.68.5)
|
||||
- React-Codegen (= 0.68.5)
|
||||
- React-Core/RCTNetworkHeaders (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-RCTSettings (0.68.5):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.68.4)
|
||||
- React-Codegen (= 0.68.4)
|
||||
- React-Core/RCTSettingsHeaders (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- ReactCommon/turbomodule/core (= 0.68.4)
|
||||
- React-RCTText (0.68.4):
|
||||
- React-Core/RCTTextHeaders (= 0.68.4)
|
||||
- React-RCTVibration (0.68.4):
|
||||
- RCTTypeSafety (= 0.68.5)
|
||||
- React-Codegen (= 0.68.5)
|
||||
- React-Core/RCTSettingsHeaders (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-RCTText (0.68.5):
|
||||
- React-Core/RCTTextHeaders (= 0.68.5)
|
||||
- React-RCTVibration (0.68.5):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Codegen (= 0.68.4)
|
||||
- React-Core/RCTVibrationHeaders (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- ReactCommon/turbomodule/core (= 0.68.4)
|
||||
- React-runtimeexecutor (0.68.4):
|
||||
- React-jsi (= 0.68.4)
|
||||
- ReactCommon/turbomodule/core (0.68.4):
|
||||
- React-Codegen (= 0.68.5)
|
||||
- React-Core/RCTVibrationHeaders (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-runtimeexecutor (0.68.5):
|
||||
- React-jsi (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (0.68.5):
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-callinvoker (= 0.68.4)
|
||||
- React-Core (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-logger (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-callinvoker (= 0.68.5)
|
||||
- React-Core (= 0.68.5)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-logger (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- RNCalendarEvents (2.2.0):
|
||||
- React
|
||||
- RNCAsyncStorage (1.17.3):
|
||||
@@ -467,7 +471,7 @@ PODS:
|
||||
- React-Core
|
||||
- RNDeviceInfo (8.4.8):
|
||||
- React-Core
|
||||
- RNGestureHandler (2.1.0):
|
||||
- RNGestureHandler (2.8.0):
|
||||
- React-Core
|
||||
- RNGoogleSignin (7.0.4):
|
||||
- GoogleSignIn (~> 6.0.0)
|
||||
@@ -706,8 +710,8 @@ SPEC CHECKSUMS:
|
||||
boost: a7c83b31436843459a1961bfd74b96033dc77234
|
||||
CocoaLumberjack: b7e05132ff94f6ae4dfa9d5bce9141893a21d9da
|
||||
DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662
|
||||
FBLazyVector: 023a2028f218d648b588348bfa9261b4914b93db
|
||||
FBReactNativeSpec: 9f4902cc009389d3704ff75de2aa513dee34d5c2
|
||||
FBLazyVector: 2b47ff52037bd9ae07cc9b051c9975797814b736
|
||||
FBReactNativeSpec: 0e0d384ef17a33b385f13f0c7f97702c7cd17858
|
||||
Firebase: 5f8193dff4b5b7c5d5ef72ae54bb76c08e2b841d
|
||||
FirebaseAnalytics: 7761cbadb00a717d8d0939363eb46041526474fa
|
||||
FirebaseCore: 5743c5785c074a794d35f2fff7ecc254a91e08b1
|
||||
@@ -732,18 +736,18 @@ SPEC CHECKSUMS:
|
||||
PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb
|
||||
PromisesSwift: 99fddfe4a0ec88a56486644c0da106694c92a604
|
||||
RCT-Folly: 4d8508a426467c48885f1151029bc15fa5d7b3b8
|
||||
RCTRequired: e6003505912d056f21f64465063cf4b79418f2b9
|
||||
RCTTypeSafety: d7ef4745c8d9c9faa65c26b4b6230fc5cd4c4424
|
||||
React: 6692c30fb74ab29078b25c31c9841d863e08cdd9
|
||||
React-callinvoker: fe2b234fa518d8bb7600707c536ab0a3e1f5edba
|
||||
React-Codegen: 9964bb2422c7014894182ac50068caae05f68551
|
||||
React-Core: a07bcd2f15ff93cddc9ceb07eddeec3d2ff8d990
|
||||
React-CoreModules: 7fb4ee0fc35ad2b7daf775f0ef6309efdd8d3d82
|
||||
React-cxxreact: 51a8058a35a2f02ad4175334a7cd24aa5558ced4
|
||||
React-jsi: 69b974b418d2658a3f1799903be7cbcb8ac59755
|
||||
React-jsiexecutor: 4f35a29798ba9d0d892a84001d11f626688dbb8e
|
||||
React-jsinspector: 6f75220cd4b6020976d340ab21c63458dd3cad9e
|
||||
React-logger: 7013d2499df6346e6a72802d4084badaaa82543b
|
||||
RCTRequired: 0f06b6068f530932d10e1a01a5352fad4eaacb74
|
||||
RCTTypeSafety: b0ee81f10ef1b7d977605a2b266823dabd565e65
|
||||
React: 3becd12bd51ea8a43bdde7e09d0f40fba7820e03
|
||||
React-callinvoker: 11abfff50e6bf7a55b3a90b4dc2187f71f224593
|
||||
React-Codegen: f8946ce0768fb8e92e092e30944489c4b2955b2d
|
||||
React-Core: 203cdb6ee2657b198d97d41031c249161060e6ca
|
||||
React-CoreModules: 6eb0c06a4a223fde2cb6a8d0f44f58b67e808942
|
||||
React-cxxreact: afb0c6c07d19adbd850747fedeac20c6832d40b9
|
||||
React-jsi: 14d37a6db2af2c1a49f6f5c2e4ee667c364ae45c
|
||||
React-jsiexecutor: 45c0496ca8cef6b02d9fa0274c25cf458fe91a56
|
||||
React-jsinspector: eb202e43b3879aba9a14f3f65788aec85d4e1ea9
|
||||
React-logger: 98f663b292a60967ebbc6d803ae96c1381183b6d
|
||||
react-native-background-timer: 17ea5e06803401a379ebf1f20505b793ac44d0fe
|
||||
react-native-get-random-values: 30b3f74ca34e30e2e480de48e4add2706a40ac8f
|
||||
react-native-keep-awake: afad8a51dfef9fe9655a6344771be32c8596d774
|
||||
@@ -751,37 +755,37 @@ SPEC CHECKSUMS:
|
||||
react-native-orientation-locker: 851f6510d8046ea2f14aa169b1e01fcd309a94ba
|
||||
react-native-pager-view: 3ee7d4c7697fb3ef788346e834a60cca97ed8540
|
||||
react-native-performance: f4b6604a9d5a8a7407e34a82fab6c641d9a3ec12
|
||||
react-native-safe-area-context: 584dc04881deb49474363f3be89e4ca0e854c057
|
||||
react-native-safe-area-context: 99b24a0c5acd0d5dcac2b1a7f18c49ea317be99a
|
||||
react-native-slider: 6e9b86e76cce4b9e35b3403193a6432ed07e0c81
|
||||
react-native-splash-screen: 4312f786b13a81b5169ef346d76d33bc0c6dc457
|
||||
react-native-video: bb6f12a7198db53b261fefb5d609dc77417acc8b
|
||||
react-native-webrtc: 4a4c31be61f88d1d3356526eebce72f462a6760e
|
||||
react-native-webrtc: 4522d420ead45fff83c4ecc7e5a706797857a185
|
||||
react-native-webview: ea4899a1056c782afa96dd082179a66cbebf5504
|
||||
React-perflogger: 0b0500685176e53ea582c45179a653aa82e4ae49
|
||||
React-RCTActionSheet: 38469be9d20242f9c717e43c2983e8e3e6c640c4
|
||||
React-RCTAnimation: 93774f3e8857e7c3c1cbbd277056d02be4496be1
|
||||
React-RCTBlob: 6d0567d7a6561b62feb8c3b1cc33b3c591ba85ab
|
||||
React-RCTImage: 1006a91318a6181a0256b89d2e321b6ea0e2e6e3
|
||||
React-RCTLinking: 0b2300493c879c3bcac2d4c6b0178e8d0e5e2202
|
||||
React-RCTNetwork: b9a33a95703651abed92490e50396d54b7270a17
|
||||
React-RCTSettings: e6464123e5b5062fc23bb5adb51188a6061e9601
|
||||
React-RCTText: 188d6f0ae20cd28891f59ecad41028ee2f793757
|
||||
React-RCTVibration: a67beb7d2f3c73e9b74c4124ef61b84c601be649
|
||||
React-runtimeexecutor: 088723cf020113e64736a709f52719dbb359c73e
|
||||
ReactCommon: 1a4f19f3b4366feec03a98bdbb200b6085c5000f
|
||||
React-perflogger: 0458a87ea9a7342079e7a31b0d32b3734fb8415f
|
||||
React-RCTActionSheet: 22538001ea2926dea001111dd2846c13a0730bc9
|
||||
React-RCTAnimation: 732ce66878d4aa151d56a0d142b1105aa12fd313
|
||||
React-RCTBlob: 9cb9e3e9a41d27be34aaf89b0e0f52c7ca415d57
|
||||
React-RCTImage: 6bd16627eb9c4bb79903c4cdec7c551266ee1a5b
|
||||
React-RCTLinking: e9edfc8919c8fa9a3f3c7b34362811f58a2ebba4
|
||||
React-RCTNetwork: 880eccd21bbe2660a0b63da5ccba75c46eceeaa6
|
||||
React-RCTSettings: 8c85d8188c97d6c6bd470af6631a6c4555b79bb3
|
||||
React-RCTText: bbd275ee287730c5acbab1aadc0db39c25c5c64e
|
||||
React-RCTVibration: 9819a3bf6230e4b2a99877c21268b0b2416157a1
|
||||
React-runtimeexecutor: b1f1995089b90696dbc2a7ffe0059a80db5c8eb1
|
||||
ReactCommon: 149e2c0acab9bac61378da0db5b2880a1b5ff59b
|
||||
RNCalendarEvents: 7e65eb4a94f53c1744d1e275f7fafcfaa619f7a3
|
||||
RNCAsyncStorage: 005c0e2f09575360f142d0d1f1f15e4ec575b1af
|
||||
RNCClipboard: 41d8d918092ae8e676f18adada19104fa3e68495
|
||||
RNCMaskedView: c298b644a10c0c142055b3ae24d83879ecb13ccd
|
||||
RNDefaultPreference: 08bdb06cfa9188d5da97d4642dac745218d7fb31
|
||||
RNDeviceInfo: 0400a6d0c94186d1120c3cbd97b23abc022187a9
|
||||
RNGestureHandler: e5c7cab5f214503dcefd6b2b0cefb050e1f51c4a
|
||||
RNGestureHandler: 62232ba8f562f7dea5ba1b3383494eb5bf97a4d3
|
||||
RNGoogleSignin: c4381751eefd73c552b923ba347a9bfc6f18771c
|
||||
RNScreens: 40a2cb40a02a609938137a1e0acfbf8fc9eebf19
|
||||
RNSound: 27e8268bdb0a1f191f219a33267f7e0445e8d62f
|
||||
RNSVG: f3b60aeeaa81960e2e0536c3a9eef50b667ef3a9
|
||||
RNWatch: dae6c858a2051dbdcfb00b9a86cf4d90400263b4
|
||||
Yoga: c926c8eec5c78a788b51e6c8a604825d00d694d7
|
||||
Yoga: c4d61225a466f250c35c1ee78d2d0b3d41fe661c
|
||||
|
||||
PODFILE CHECKSUM: e671cdcdb80fab67e305861c36bfae8ed5a5b0ef
|
||||
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"size" : "1024x1024"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"colors" : [
|
||||
{
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "end_call_button.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "microphone_off_button.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "microphone_on_button.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
@@ -1,101 +0,0 @@
|
||||
//
|
||||
// DarwinNotificationsObserver.swift
|
||||
// WidgetsExtension
|
||||
//
|
||||
// Created by Alex Bumbu on 17.10.2022.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
enum DarwinNotification: String {
|
||||
case meetingMutedChanged = "iOS_MeetingMutedChanged"
|
||||
}
|
||||
|
||||
extension DarwinNotification {
|
||||
|
||||
var name: String { rawValue }
|
||||
}
|
||||
|
||||
class DarwinNotificationsObserver {
|
||||
|
||||
private static var observers = Array<ProxyObserver>()
|
||||
|
||||
private let queue = DispatchQueue(label: "org.jitsi.meet.darwinNotificationObserver", qos: .default, autoreleaseFrequency: .workItem)
|
||||
private var notificationCenter: CFNotificationCenter
|
||||
|
||||
init() {
|
||||
notificationCenter = CFNotificationCenterGetDarwinNotifyCenter()
|
||||
}
|
||||
|
||||
func observe(notification: DarwinNotification, handler: @escaping () -> Void) {
|
||||
let proxyObserver = ProxyObserver(observer: self, notificationName: notification.name, handler: handler)
|
||||
queue.async {
|
||||
DarwinNotificationsObserver.observers.append(proxyObserver)
|
||||
}
|
||||
|
||||
let callback: CFNotificationCallback = { _, observer, name, _, _ in
|
||||
guard let observer = observer else {
|
||||
return
|
||||
}
|
||||
|
||||
// Extract pointer to `observer` from void pointer:
|
||||
let proxyObserver = Unmanaged<ProxyObserver>.fromOpaque(observer).takeUnretainedValue()
|
||||
var observers = DarwinNotificationsObserver.observers
|
||||
if !proxyObserver.forwardNotification(), let index = observers.firstIndex(of: proxyObserver) {
|
||||
// cleanup if `forwardNotification` fails
|
||||
observers.remove(at: index)
|
||||
}
|
||||
}
|
||||
|
||||
CFNotificationCenterAddObserver(notificationCenter,
|
||||
Unmanaged.passUnretained(proxyObserver).toOpaque(),
|
||||
callback,
|
||||
notification.name as CFString,
|
||||
nil,
|
||||
.deliverImmediately)
|
||||
}
|
||||
|
||||
func stopObserving(notification: DarwinNotification) {
|
||||
queue.sync {
|
||||
DarwinNotificationsObserver.observers.removeAll { $0.observer == nil }
|
||||
}
|
||||
|
||||
if let index = DarwinNotificationsObserver.observers.firstIndex(where: { $0.observer === self && $0.notificationName == notification.name }) {
|
||||
let proxyObserver = DarwinNotificationsObserver.observers[index]
|
||||
CFNotificationCenterRemoveObserver(notificationCenter,
|
||||
Unmanaged.passUnretained(proxyObserver).toOpaque(),
|
||||
CFNotificationName(notification.name as CFString),
|
||||
nil)
|
||||
queue.async {
|
||||
DarwinNotificationsObserver.observers.remove(at: index)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class ProxyObserver: Equatable {
|
||||
|
||||
let notificationName: String
|
||||
weak var observer: AnyObject?
|
||||
|
||||
private let handler: () -> (Void)
|
||||
|
||||
static func == (lhs: ProxyObserver, rhs: ProxyObserver) -> Bool {
|
||||
lhs.observer === rhs.observer && lhs.notificationName == rhs.notificationName
|
||||
}
|
||||
|
||||
init(observer: AnyObject? = nil, notificationName: String, handler: @escaping () -> Void) {
|
||||
self.notificationName = notificationName
|
||||
self.handler = handler
|
||||
self.observer = observer
|
||||
}
|
||||
|
||||
func forwardNotification() -> Bool {
|
||||
guard observer != nil else {
|
||||
return false
|
||||
}
|
||||
|
||||
handler()
|
||||
return true
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>NSExtension</key>
|
||||
<dict>
|
||||
<key>NSExtensionPointIdentifier</key>
|
||||
<string>com.apple.widgetkit-extension</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -1,54 +0,0 @@
|
||||
//
|
||||
// LockScreenLeaveMeetingWidget.swift
|
||||
// WidgetsExtension
|
||||
//
|
||||
// Created by Alex Bumbu on 31.10.2022.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
import WidgetKit
|
||||
|
||||
struct LockScreenLeaveMeetingWidget: Widget {
|
||||
let kind: String = "LockScreenLeaveMeetingWidget"
|
||||
|
||||
var body: some WidgetConfiguration {
|
||||
StaticConfiguration(kind: kind, provider: Provider()) { entry in
|
||||
WidgetsEntryView(entry: entry)
|
||||
}
|
||||
.configurationDisplayName("Leave Jitsi Meeting Widget")
|
||||
.description("This is a lockscreen widget for leaving the ongoing Jitsi meeting.")
|
||||
.supportedFamilies([.accessoryCircular])
|
||||
}
|
||||
}
|
||||
|
||||
//struct LockScreenLeaveMeetingWidget_Preview: PreviewProvider {
|
||||
// static var previews: some View {
|
||||
// let meetingState = MeetingState(audioMuted: true)
|
||||
//
|
||||
// WidgetsEntryView(entry: CurrentMeetingEntry(date: Date(), meetingState: meetingState))
|
||||
// .previewContext(WidgetPreviewContext(family: .accessoryCircular))
|
||||
// .previewDisplayName("Circular")
|
||||
// }
|
||||
//}
|
||||
|
||||
private struct WidgetsEntryView: View {
|
||||
@Environment(\.widgetFamily) var widgetFamily
|
||||
var entry: Provider.Entry
|
||||
|
||||
var body: some View {
|
||||
if entry.meetingState != nil, widgetFamily == .accessoryCircular {
|
||||
AccessoryCircularWidgetView()
|
||||
} else {
|
||||
EmptyView()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private struct AccessoryCircularWidgetView: View {
|
||||
var body: some View {
|
||||
Image("leave_meeting")
|
||||
.resizable()
|
||||
.aspectRatio(contentMode: .fit)
|
||||
.widgetURL(URL(string: "meet/leaveMeeting")!)
|
||||
}
|
||||
}
|
||||
@@ -1,89 +0,0 @@
|
||||
//
|
||||
// LockScreenMuteAudioWidget.swift
|
||||
// WidgetsExtension
|
||||
//
|
||||
// Created by Alex Bumbu on 31.10.2022.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
import WidgetKit
|
||||
|
||||
struct LockScreenMuteAudioWidget: Widget {
|
||||
let kind: String = "LockScreenMuteAudioWidget"
|
||||
|
||||
var body: some WidgetConfiguration {
|
||||
StaticConfiguration(kind: kind, provider: Provider()) { entry in
|
||||
WidgetsEntryView(entry: entry)
|
||||
}
|
||||
.configurationDisplayName("Mute Jitsi Audio Widget")
|
||||
.description("This is a lockscreen widget for muting or unmuting the audio for the ongoing Jitsi meeting.")
|
||||
.supportedFamilies([.accessoryCircular])
|
||||
}
|
||||
}
|
||||
|
||||
//struct LockScreenMuteAudioWidget_Preview: PreviewProvider {
|
||||
// static var previews: some View {
|
||||
// let meetingState = MeetingState(audioMuted: true)
|
||||
//
|
||||
// WidgetsEntryView(entry: CurrentMeetingEntry(date: Date(), meetingState: meetingState))
|
||||
// .previewContext(WidgetPreviewContext(family: .accessoryInline))
|
||||
// .previewDisplayName("Inline")
|
||||
//
|
||||
// WidgetsEntryView(entry: CurrentMeetingEntry(date: Date(), meetingState: meetingState))
|
||||
// .previewContext(WidgetPreviewContext(family: .accessoryCircular))
|
||||
// .previewDisplayName("Circular")
|
||||
//
|
||||
// WidgetsEntryView(entry: CurrentMeetingEntry(date: Date(), meetingState: meetingState))
|
||||
// .previewContext(WidgetPreviewContext(family: .accessoryRectangular))
|
||||
// .previewDisplayName("Rectangular")
|
||||
// }
|
||||
//}
|
||||
|
||||
private struct WidgetsEntryView: View {
|
||||
@Environment(\.widgetFamily) var widgetFamily
|
||||
var entry: Provider.Entry
|
||||
|
||||
var body: some View {
|
||||
if let meetingState = entry.meetingState {
|
||||
switch widgetFamily {
|
||||
case .accessoryInline:
|
||||
Text("Some meeting name")
|
||||
case .accessoryRectangular:
|
||||
AccessoryCircularWidgetView(audioMuted: meetingState.audioMuted)
|
||||
case .accessoryCircular:
|
||||
AccessoryCircularWidgetView(audioMuted: meetingState.audioMuted)
|
||||
default:
|
||||
EmptyView()
|
||||
}
|
||||
} else {
|
||||
EmptyView()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private struct AccessoryRectangularWidgetView: View {
|
||||
var audioMuted: Bool
|
||||
|
||||
var body: some View {
|
||||
let imageName: String = audioMuted ? "microphone_on" : "microphone_off"
|
||||
let caption: String = audioMuted ? "Unmute \naudio" : "Mute \naudio"
|
||||
HStack {
|
||||
Image(imageName)
|
||||
.resizable()
|
||||
.aspectRatio(contentMode: .fit)
|
||||
Text(caption)
|
||||
}.widgetURL(URL(string: "meet/toggleAudioMute")!)
|
||||
}
|
||||
}
|
||||
|
||||
private struct AccessoryCircularWidgetView: View {
|
||||
var audioMuted: Bool
|
||||
|
||||
var body: some View {
|
||||
let imageName: String = audioMuted ? "microphone_on" : "microphone_off"
|
||||
Image(imageName)
|
||||
.resizable()
|
||||
.aspectRatio(contentMode: .fit)
|
||||
.widgetURL(URL(string: "meet/toggleAudioMute")!)
|
||||
}
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
//
|
||||
// MeetingState.swift
|
||||
// WidgetsExtension
|
||||
//
|
||||
// Created by Alex Bumbu on 28.10.2022.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
struct MeetingState: Decodable {
|
||||
var audioMuted: Bool
|
||||
}
|
||||
|
||||
extension MeetingState {
|
||||
private static var stateFileURL: URL? {
|
||||
return FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.org.jitsi.meet.appgroup")?.appending(component: "widgetState")
|
||||
}
|
||||
|
||||
static func load() -> MeetingState? {
|
||||
guard
|
||||
let stateFileURL = stateFileURL,
|
||||
let data = try? Data(contentsOf: stateFileURL)
|
||||
else {
|
||||
return nil
|
||||
}
|
||||
|
||||
let decoder = PropertyListDecoder()
|
||||
return try? decoder.decode(MeetingState.self, from: data)
|
||||
}
|
||||
}
|
||||
@@ -1,44 +0,0 @@
|
||||
//
|
||||
// Provider.swift
|
||||
// WidgetsExtension
|
||||
//
|
||||
// Created by Alex Bumbu on 31.10.2022.
|
||||
//
|
||||
|
||||
import WidgetKit
|
||||
import SwiftUI
|
||||
|
||||
struct CurrentMeetingEntry: TimelineEntry {
|
||||
let date: Date
|
||||
var meetingState: MeetingState?
|
||||
}
|
||||
|
||||
class Provider: TimelineProvider {
|
||||
private var currentMeetingState: MeetingState? {
|
||||
return MeetingState.load()
|
||||
}
|
||||
|
||||
func placeholder(in context: Context) -> CurrentMeetingEntry {
|
||||
CurrentMeetingEntry(date: Date(),
|
||||
meetingState: MeetingState(audioMuted: false))
|
||||
}
|
||||
|
||||
func getSnapshot(in context: Context, completion: @escaping (CurrentMeetingEntry) -> ()) {
|
||||
var meetingState = currentMeetingState
|
||||
if context.isPreview {
|
||||
meetingState = MeetingState(audioMuted: false)
|
||||
}
|
||||
|
||||
let entry = CurrentMeetingEntry(date: Date(), meetingState: meetingState)
|
||||
completion(entry)
|
||||
}
|
||||
|
||||
func getTimeline(in context: Context, completion: @escaping (Timeline<CurrentMeetingEntry>) -> ()) {
|
||||
var entries: [CurrentMeetingEntry] = []
|
||||
let entry = CurrentMeetingEntry(date: Date(), meetingState: currentMeetingState)
|
||||
entries.append(entry)
|
||||
|
||||
let timeline = Timeline(entries: entries, policy: .atEnd)
|
||||
completion(timeline)
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
//
|
||||
// Widgets.swift
|
||||
// Widgets
|
||||
//
|
||||
// Created by Alex Bumbu on 17.10.2022.
|
||||
// Copyright © 2022 Facebook. All rights reserved.
|
||||
//
|
||||
|
||||
import WidgetKit
|
||||
import SwiftUI
|
||||
|
||||
@main
|
||||
struct Widgets: WidgetBundle {
|
||||
@WidgetBundleBuilder
|
||||
var body: some Widget {
|
||||
LockScreenMuteAudioWidget()
|
||||
LockScreenLeaveMeetingWidget()
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.application-groups</key>
|
||||
<array>
|
||||
<string>group.org.jitsi.meet.appgroup</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -23,26 +23,14 @@
|
||||
13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; };
|
||||
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
|
||||
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
|
||||
4E46D952290FF39E00761DEF /* LockScreenMuteAudioWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E46D951290FF39E00761DEF /* LockScreenMuteAudioWidget.swift */; };
|
||||
4E46D954290FF55600761DEF /* LockScreenLeaveMeetingWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E46D953290FF55600761DEF /* LockScreenLeaveMeetingWidget.swift */; };
|
||||
4E6920B828FD84D700645D9E /* DarwinNotificationsObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E6920B728FD84D700645D9E /* DarwinNotificationsObserver.swift */; };
|
||||
4E6A3E17291024B900E6B0B5 /* Provider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E6A3E16291024B900E6B0B5 /* Provider.swift */; };
|
||||
2681BB562C7A0B42CFBA6719 /* libPods-JitsiMeet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D6152FF9E9F7B0E86F70A21D /* libPods-JitsiMeet.a */; };
|
||||
4E90F9402632D1AB001102D4 /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E90F93F2632D1AB001102D4 /* Atomic.swift */; };
|
||||
4EA73DA3290C1D6C00A16FF8 /* MeetingState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EA73DA2290C1D6C00A16FF8 /* MeetingState.swift */; };
|
||||
4EB06024260E026600F524C5 /* ReplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4EC49B8625BED71300E76218 /* ReplayKit.framework */; };
|
||||
4EB06027260E026600F524C5 /* SampleHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB06026260E026600F524C5 /* SampleHandler.swift */; };
|
||||
4EB0602B260E026600F524C5 /* JitsiMeetBroadcastExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 4EB06023260E026600F524C5 /* JitsiMeetBroadcastExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||
4EB0603C260E09D000F524C5 /* SocketConnection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB06039260E09D000F524C5 /* SocketConnection.swift */; };
|
||||
4EB0603D260E09D000F524C5 /* DarwinNotificationCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB0603A260E09D000F524C5 /* DarwinNotificationCenter.swift */; };
|
||||
4EB0603E260E09D000F524C5 /* SampleUploader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB0603B260E09D000F524C5 /* SampleUploader.swift */; };
|
||||
4EBB458A28FFFD4100855769 /* RoutesHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EBB458928FFFD4100855769 /* RoutesHandler.m */; };
|
||||
4EBB458E2902E85B00855769 /* WidgetKitHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EBB458D2902E85B00855769 /* WidgetKitHelper.swift */; };
|
||||
4ECA496628FD590000085365 /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4ECA496528FD590000085365 /* WidgetKit.framework */; };
|
||||
4ECA496828FD590000085365 /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4ECA496728FD590000085365 /* SwiftUI.framework */; };
|
||||
4ECA496B28FD590000085365 /* Widgets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4ECA496A28FD590000085365 /* Widgets.swift */; };
|
||||
4ECA496D28FD590000085365 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4ECA496C28FD590000085365 /* Assets.xcassets */; };
|
||||
4ECA497128FD590000085365 /* WidgetsExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 4ECA496428FD590000085365 /* WidgetsExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||
C2116A7673E01A1CCD5DC1F4 /* libPods-JitsiMeet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BF9FEBA4DEAB800AD735681 /* libPods-JitsiMeet.a */; };
|
||||
DE4C456121DE1E4E00EA0709 /* FIRUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = DE4C455F21DE1E4E00EA0709 /* FIRUtilities.m */; };
|
||||
DEA9F289258A6EA800D4CD74 /* JitsiMeetSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DEA9F288258A6EA800D4CD74 /* JitsiMeetSDK.framework */; };
|
||||
DEA9F28A258A6EA800D4CD74 /* JitsiMeetSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DEA9F288258A6EA800D4CD74 /* JitsiMeetSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||
@@ -76,13 +64,6 @@
|
||||
remoteGlobalIDString = 4EB06022260E026600F524C5;
|
||||
remoteInfo = "JitsiMeetBroadcast Extension";
|
||||
};
|
||||
4ECA496F28FD590000085365 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 4ECA496328FD590000085365;
|
||||
remoteInfo = WidgetsExtension;
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */
|
||||
@@ -127,7 +108,6 @@
|
||||
dstPath = "";
|
||||
dstSubfolderSpec = 13;
|
||||
files = (
|
||||
4ECA497128FD590000085365 /* WidgetsExtension.appex in Embed App Extensions */,
|
||||
4EB0602B260E026600F524C5 /* JitsiMeetBroadcastExtension.appex in Embed App Extensions */,
|
||||
);
|
||||
name = "Embed App Extensions";
|
||||
@@ -154,7 +134,6 @@
|
||||
0BEA5C3A1F7B8F73000D0AB4 /* ComplicationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComplicationController.swift; sourceTree = "<group>"; };
|
||||
0BEA5C3C1F7B8F73000D0AB4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||
0BEA5C3E1F7B8F73000D0AB4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
0BF9FEBA4DEAB800AD735681 /* libPods-JitsiMeet.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-JitsiMeet.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
13B07F961A680F5B00A75B9A /* jitsi-meet.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "jitsi-meet.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
|
||||
13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
|
||||
@@ -162,12 +141,8 @@
|
||||
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
|
||||
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>"; };
|
||||
4E46D951290FF39E00761DEF /* LockScreenMuteAudioWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LockScreenMuteAudioWidget.swift; sourceTree = "<group>"; };
|
||||
4E46D953290FF55600761DEF /* LockScreenLeaveMeetingWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LockScreenLeaveMeetingWidget.swift; sourceTree = "<group>"; };
|
||||
4E6920B728FD84D700645D9E /* DarwinNotificationsObserver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DarwinNotificationsObserver.swift; sourceTree = "<group>"; };
|
||||
4E6A3E16291024B900E6B0B5 /* Provider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Provider.swift; 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>"; };
|
||||
4E90F93F2632D1AB001102D4 /* Atomic.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Atomic.swift; sourceTree = "<group>"; };
|
||||
4EA73DA2290C1D6C00A16FF8 /* MeetingState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingState.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>"; };
|
||||
4EB06028260E026600F524C5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
@@ -175,21 +150,10 @@
|
||||
4EB06039260E09D000F524C5 /* SocketConnection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketConnection.swift; sourceTree = "<group>"; };
|
||||
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>"; };
|
||||
4EBB458828FFFD4100855769 /* RoutesHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RoutesHandler.h; sourceTree = "<group>"; };
|
||||
4EBB458928FFFD4100855769 /* RoutesHandler.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RoutesHandler.m; sourceTree = "<group>"; };
|
||||
4EBB458B2902A94700855769 /* WidgetsExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = WidgetsExtension.entitlements; sourceTree = "<group>"; };
|
||||
4EBB458C2902E85B00855769 /* JitsiMeet-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "JitsiMeet-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||
4EBB458D2902E85B00855769 /* WidgetKitHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WidgetKitHelper.swift; sourceTree = "<group>"; };
|
||||
4EC49B8625BED71300E76218 /* ReplayKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReplayKit.framework; path = System/Library/Frameworks/ReplayKit.framework; sourceTree = SDKROOT; };
|
||||
4ECA496428FD590000085365 /* WidgetsExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = WidgetsExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
4ECA496528FD590000085365 /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; };
|
||||
4ECA496728FD590000085365 /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; };
|
||||
4ECA496A28FD590000085365 /* Widgets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Widgets.swift; sourceTree = "<group>"; };
|
||||
4ECA496C28FD590000085365 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||
4ECA496E28FD590000085365 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
7052390E12D7319D36D8E4CA /* 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>"; };
|
||||
8CAA3C5A38E868335D1C1EC1 /* 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>"; };
|
||||
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; };
|
||||
DE050388256E904600DEE3A5 /* WebRTC.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = WebRTC.xcframework; path = "../../node_modules/react-native-webrtc/apple/WebRTC.xcframework"; sourceTree = "<group>"; };
|
||||
DE4C455F21DE1E4E00EA0709 /* FIRUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FIRUtilities.m; sourceTree = "<group>"; };
|
||||
DE4C456021DE1E4E00EA0709 /* FIRUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FIRUtilities.h; sourceTree = "<group>"; };
|
||||
@@ -216,7 +180,7 @@
|
||||
DED016F128ECBC9D009D5E8D /* WebRTC.xcframework in Frameworks */,
|
||||
DEA9F289258A6EA800D4CD74 /* JitsiMeetSDK.framework in Frameworks */,
|
||||
FD572B9827EDF32300A800FB /* GiphyUISDK.xcframework in Frameworks */,
|
||||
C2116A7673E01A1CCD5DC1F4 /* libPods-JitsiMeet.a in Frameworks */,
|
||||
2681BB562C7A0B42CFBA6719 /* libPods-JitsiMeet.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -235,15 +199,6 @@
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
4ECA496128FD590000085365 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
4ECA496828FD590000085365 /* SwiftUI.framework in Frameworks */,
|
||||
4ECA496628FD590000085365 /* WidgetKit.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
@@ -258,9 +213,7 @@
|
||||
DEFDBBDB25656E3B00344B23 /* WebRTC.xcframework */,
|
||||
0BD6B4361EF82A6B00D1F4CD /* WebRTC.framework */,
|
||||
4EC49B8625BED71300E76218 /* ReplayKit.framework */,
|
||||
4ECA496528FD590000085365 /* WidgetKit.framework */,
|
||||
4ECA496728FD590000085365 /* SwiftUI.framework */,
|
||||
0BF9FEBA4DEAB800AD735681 /* libPods-JitsiMeet.a */,
|
||||
D6152FF9E9F7B0E86F70A21D /* libPods-JitsiMeet.a */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
@@ -308,10 +261,6 @@
|
||||
0BBD021F212EB69D00CCB19F /* Types.h */,
|
||||
0B412F1D1EDEE6E800B1A0A6 /* ViewController.h */,
|
||||
0B412F1E1EDEE6E800B1A0A6 /* ViewController.m */,
|
||||
4EBB458828FFFD4100855769 /* RoutesHandler.h */,
|
||||
4EBB458928FFFD4100855769 /* RoutesHandler.m */,
|
||||
4EBB458D2902E85B00855769 /* WidgetKitHelper.swift */,
|
||||
4EBB458C2902E85B00855769 /* JitsiMeet-Bridging-Header.h */,
|
||||
);
|
||||
path = src;
|
||||
sourceTree = "<group>";
|
||||
@@ -333,25 +282,9 @@
|
||||
sourceTree = "<group>";
|
||||
tabWidth = 4;
|
||||
};
|
||||
4ECA496928FD590000085365 /* Widgets Extension */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4ECA496A28FD590000085365 /* Widgets.swift */,
|
||||
4E46D951290FF39E00761DEF /* LockScreenMuteAudioWidget.swift */,
|
||||
4E46D953290FF55600761DEF /* LockScreenLeaveMeetingWidget.swift */,
|
||||
4E6A3E16291024B900E6B0B5 /* Provider.swift */,
|
||||
4EA73DA2290C1D6C00A16FF8 /* MeetingState.swift */,
|
||||
4E6920B728FD84D700645D9E /* DarwinNotificationsObserver.swift */,
|
||||
4ECA496C28FD590000085365 /* Assets.xcassets */,
|
||||
4ECA496E28FD590000085365 /* Info.plist */,
|
||||
);
|
||||
path = "Widgets Extension";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
83CBB9F61A601CBA00E9B192 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4EBB458B2902A94700855769 /* WidgetsExtension.entitlements */,
|
||||
B3B083EB1D4955FF0069CEE7 /* app.entitlements */,
|
||||
0B26BE711EC5BC4D00EEFB41 /* Frameworks */,
|
||||
83CBBA001A601CBA00E9B192 /* Products */,
|
||||
@@ -359,12 +292,11 @@
|
||||
0BEA5C261F7B8F73000D0AB4 /* Watch app */,
|
||||
0BEA5C351F7B8F73000D0AB4 /* WatchKit extension */,
|
||||
4EB06025260E026600F524C5 /* JitsiMeetBroadcast Extension */,
|
||||
4ECA496928FD590000085365 /* Widgets Extension */,
|
||||
BD4E28FA984EA7018FD927DF /* Pods */,
|
||||
CDD71F5E1157E9F283DF92A8 /* Pods */,
|
||||
);
|
||||
indentWidth = 4;
|
||||
indentWidth = 2;
|
||||
sourceTree = "<group>";
|
||||
tabWidth = 4;
|
||||
tabWidth = 2;
|
||||
};
|
||||
83CBBA001A601CBA00E9B192 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
@@ -373,16 +305,15 @@
|
||||
0BEA5C251F7B8F73000D0AB4 /* JitsiMeetCompanion.app */,
|
||||
0BEA5C311F7B8F73000D0AB4 /* JitsiMeetCompanion Extension.appex */,
|
||||
4EB06023260E026600F524C5 /* JitsiMeetBroadcastExtension.appex */,
|
||||
4ECA496428FD590000085365 /* WidgetsExtension.appex */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
BD4E28FA984EA7018FD927DF /* Pods */ = {
|
||||
CDD71F5E1157E9F283DF92A8 /* Pods */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
7052390E12D7319D36D8E4CA /* Pods-JitsiMeet.debug.xcconfig */,
|
||||
8CAA3C5A38E868335D1C1EC1 /* Pods-JitsiMeet.release.xcconfig */,
|
||||
756FCE06C08D9B947653C98A /* Pods-JitsiMeet.debug.xcconfig */,
|
||||
3E0F4ED943C0B12BE77F6B45 /* Pods-JitsiMeet.release.xcconfig */,
|
||||
);
|
||||
name = Pods;
|
||||
path = ../Pods;
|
||||
@@ -430,7 +361,7 @@
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "JitsiMeet" */;
|
||||
buildPhases = (
|
||||
58E2CB346F2C2A873294F481 /* [CP] Check Pods Manifest.lock */,
|
||||
69BC5020DBE393B56BD76636 /* [CP] Check Pods Manifest.lock */,
|
||||
0BBA83C41EC9F7600075A103 /* Run React packager */,
|
||||
13B07F871A680F5B00A75B9A /* Sources */,
|
||||
13B07F8C1A680F5B00A75B9A /* Frameworks */,
|
||||
@@ -449,7 +380,6 @@
|
||||
dependencies = (
|
||||
0BEA5C401F7B8F73000D0AB4 /* PBXTargetDependency */,
|
||||
4EB0602A260E026600F524C5 /* PBXTargetDependency */,
|
||||
4ECA497028FD590000085365 /* PBXTargetDependency */,
|
||||
);
|
||||
name = JitsiMeet;
|
||||
productName = "Jitsi Meet";
|
||||
@@ -473,32 +403,15 @@
|
||||
productReference = 4EB06023260E026600F524C5 /* JitsiMeetBroadcastExtension.appex */;
|
||||
productType = "com.apple.product-type.app-extension";
|
||||
};
|
||||
4ECA496328FD590000085365 /* WidgetsExtension */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 4ECA497428FD590100085365 /* Build configuration list for PBXNativeTarget "WidgetsExtension" */;
|
||||
buildPhases = (
|
||||
4ECA496028FD590000085365 /* Sources */,
|
||||
4ECA496128FD590000085365 /* Frameworks */,
|
||||
4ECA496228FD590000085365 /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = WidgetsExtension;
|
||||
productName = WidgetsExtension;
|
||||
productReference = 4ECA496428FD590000085365 /* WidgetsExtension.appex */;
|
||||
productType = "com.apple.product-type.app-extension";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
83CBB9F71A601CBA00E9B192 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastSwiftUpdateCheck = 1400;
|
||||
LastSwiftUpdateCheck = 1240;
|
||||
LastUpgradeCheck = 1020;
|
||||
ORGANIZATIONNAME = "";
|
||||
ORGANIZATIONNAME = Facebook;
|
||||
TargetAttributes = {
|
||||
0BEA5C241F7B8F73000D0AB4 = {
|
||||
CreatedOnToolsVersion = 9.0;
|
||||
@@ -511,7 +424,6 @@
|
||||
ProvisioningStyle = Automatic;
|
||||
};
|
||||
13B07F861A680F5B00A75B9A = {
|
||||
LastSwiftMigration = 1400;
|
||||
SystemCapabilities = {
|
||||
com.apple.SafariKeychain = {
|
||||
enabled = 1;
|
||||
@@ -524,9 +436,6 @@
|
||||
4EB06022260E026600F524C5 = {
|
||||
CreatedOnToolsVersion = 12.4;
|
||||
};
|
||||
4ECA496328FD590000085365 = {
|
||||
CreatedOnToolsVersion = 14.0.1;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "app" */;
|
||||
@@ -546,7 +455,6 @@
|
||||
0BEA5C241F7B8F73000D0AB4 /* JitsiMeetCompanion */,
|
||||
0BEA5C301F7B8F73000D0AB4 /* JitsiMeetCompanion Extension */,
|
||||
4EB06022260E026600F524C5 /* JitsiMeetBroadcastExtension */,
|
||||
4ECA496328FD590000085365 /* WidgetsExtension */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
@@ -586,14 +494,6 @@
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
4ECA496228FD590000085365 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
4ECA496D28FD590000085365 /* Assets.xcassets in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
@@ -643,7 +543,7 @@
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "if test \"$PRODUCT_BUNDLE_IDENTIFIER\" = \"com.atlassian.JitsiMeet.ios\"; then\n ENTITLEMENTS_PLIST=\"$PROJECT_DIR/app.entitlements\"\n \n /usr/libexec/PlistBuddy -c \"Add :com.apple.developer.avfoundation.multitasking-camera-access bool 1\" $ENTITLEMENTS_PLIST\nfi\n";
|
||||
};
|
||||
58E2CB346F2C2A873294F481 /* [CP] Check Pods Manifest.lock */ = {
|
||||
69BC5020DBE393B56BD76636 /* [CP] Check Pods Manifest.lock */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
@@ -742,10 +642,8 @@
|
||||
files = (
|
||||
0B412F1F1EDEE6E800B1A0A6 /* ViewController.m in Sources */,
|
||||
13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */,
|
||||
4EBB458E2902E85B00855769 /* WidgetKitHelper.swift in Sources */,
|
||||
DE4C456121DE1E4E00EA0709 /* FIRUtilities.m in Sources */,
|
||||
13B07FC11A68108700A75B9A /* main.m in Sources */,
|
||||
4EBB458A28FFFD4100855769 /* RoutesHandler.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -761,19 +659,6 @@
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
4ECA496028FD590000085365 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
4ECA496B28FD590000085365 /* Widgets.swift in Sources */,
|
||||
4E6920B828FD84D700645D9E /* DarwinNotificationsObserver.swift in Sources */,
|
||||
4E46D954290FF55600761DEF /* LockScreenLeaveMeetingWidget.swift in Sources */,
|
||||
4EA73DA3290C1D6C00A16FF8 /* MeetingState.swift in Sources */,
|
||||
4E6A3E17291024B900E6B0B5 /* Provider.swift in Sources */,
|
||||
4E46D952290FF39E00761DEF /* LockScreenMuteAudioWidget.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
@@ -792,11 +677,6 @@
|
||||
target = 4EB06022260E026600F524C5 /* JitsiMeetBroadcastExtension */;
|
||||
targetProxy = 4EB06029260E026600F524C5 /* PBXContainerItemProxy */;
|
||||
};
|
||||
4ECA497028FD590000085365 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 4ECA496328FD590000085365 /* WidgetsExtension */;
|
||||
targetProxy = 4ECA496F28FD590000085365 /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
/* Begin PBXVariantGroup section */
|
||||
@@ -965,12 +845,11 @@
|
||||
};
|
||||
13B07F941A680F5B00A75B9A /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 7052390E12D7319D36D8E4CA /* Pods-JitsiMeet.debug.xcconfig */;
|
||||
baseConfigurationReference = 756FCE06C08D9B947653C98A /* Pods-JitsiMeet.debug.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIconDebug;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = app.entitlements;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
@@ -992,20 +871,16 @@
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.meet;
|
||||
PRODUCT_NAME = "jitsi-meet";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "src/JitsiMeet-Bridging-Header.h";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
13B07F951A680F5B00A75B9A /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 8CAA3C5A38E868335D1C1EC1 /* Pods-JitsiMeet.release.xcconfig */;
|
||||
baseConfigurationReference = 3E0F4ED943C0B12BE77F6B45 /* Pods-JitsiMeet.release.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIconRelease;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = app.entitlements;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
@@ -1026,8 +901,6 @@
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.meet;
|
||||
PRODUCT_NAME = "jitsi-meet";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "src/JitsiMeet-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
@@ -1100,91 +973,6 @@
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
4ECA497228FD590100085365 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CODE_SIGN_ENTITLEMENTS = WidgetsExtension.entitlements;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
DEVELOPMENT_TEAM = FC967L3QRG;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = "Widgets Extension/Info.plist";
|
||||
INFOPLIST_KEY_CFBundleDisplayName = Widgets;
|
||||
INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 Facebook. All rights reserved.";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.meet.widgets.extension;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
4ECA497328FD590100085365 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CODE_SIGN_ENTITLEMENTS = WidgetsExtension.entitlements;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
DEVELOPMENT_TEAM = FC967L3QRG;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = "Widgets Extension/Info.plist";
|
||||
INFOPLIST_KEY_CFBundleDisplayName = Widgets;
|
||||
INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 Facebook. All rights reserved.";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.meet.widgets.extension;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
83CBBA201A601CBA00E9B192 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
@@ -1338,15 +1126,6 @@
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
4ECA497428FD590100085365 /* Build configuration list for PBXNativeTarget "WidgetsExtension" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
4ECA497228FD590100085365 /* Debug */,
|
||||
4ECA497328FD590100085365 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "app" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
|
||||
@@ -1,124 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1400"
|
||||
wasCreatedForAppExtension = "YES"
|
||||
version = "2.0">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "4ECA496328FD590000085365"
|
||||
BuildableName = "WidgetsExtension.appex"
|
||||
BlueprintName = "WidgetsExtension"
|
||||
ReferencedContainer = "container:app.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
||||
BuildableName = "jitsi-meet.app"
|
||||
BlueprintName = "JitsiMeet"
|
||||
ReferencedContainer = "container:app.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<Testables>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = ""
|
||||
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
|
||||
launchStyle = "0"
|
||||
askForAppToLaunch = "Yes"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES"
|
||||
launchAutomaticallySubstyle = "2">
|
||||
<RemoteRunnable
|
||||
runnableDebuggingMode = "2"
|
||||
BundleIdentifier = "com.apple.springboard">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "4ECA496328FD590000085365"
|
||||
BuildableName = "WidgetsExtension.appex"
|
||||
BlueprintName = "WidgetsExtension"
|
||||
ReferencedContainer = "container:app.xcodeproj">
|
||||
</BuildableReference>
|
||||
</RemoteRunnable>
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
||||
BuildableName = "jitsi-meet.app"
|
||||
BlueprintName = "JitsiMeet"
|
||||
ReferencedContainer = "container:app.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
<EnvironmentVariables>
|
||||
<EnvironmentVariable
|
||||
key = "_XCWidgetKind"
|
||||
value = "LockScreenLeaveMeetingWidget"
|
||||
isEnabled = "YES">
|
||||
</EnvironmentVariable>
|
||||
<EnvironmentVariable
|
||||
key = "_XCWidgetDefaultView"
|
||||
value = "timeline"
|
||||
isEnabled = "NO">
|
||||
</EnvironmentVariable>
|
||||
<EnvironmentVariable
|
||||
key = "_XCWidgetFamily"
|
||||
value = "medium"
|
||||
isEnabled = "NO">
|
||||
</EnvironmentVariable>
|
||||
</EnvironmentVariables>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
askForAppToLaunch = "Yes"
|
||||
launchAutomaticallySubstyle = "2">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
||||
BuildableName = "jitsi-meet.app"
|
||||
BlueprintName = "JitsiMeet"
|
||||
ReferencedContainer = "container:app.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@@ -17,7 +17,6 @@
|
||||
|
||||
#import "AppDelegate.h"
|
||||
#import "FIRUtilities.h"
|
||||
#import "RoutesHandler.h"
|
||||
#import "Types.h"
|
||||
#import "ViewController.h"
|
||||
|
||||
@@ -70,7 +69,7 @@
|
||||
- (BOOL)application:(UIApplication *)application
|
||||
continueUserActivity:(NSUserActivity *)userActivity
|
||||
restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> *restorableObjects))restorationHandler {
|
||||
|
||||
|
||||
if ([FIRUtilities appContainsRealServiceInfoPlist]) {
|
||||
// 1. Attempt to handle Universal Links through Firebase in order to support
|
||||
// its Dynamic Links (which we utilize for the purposes of deferred deep
|
||||
@@ -108,10 +107,6 @@
|
||||
if ([[url absoluteString] containsString:@"google/link/?dismiss=1&is_weak_match=1"]) {
|
||||
return NO;
|
||||
}
|
||||
|
||||
if ([[RoutesHandler sharedInstance] routeURL:url]) {
|
||||
return YES;
|
||||
}
|
||||
|
||||
NSURL *openUrl = url;
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
//
|
||||
// Use this file to import your target's public headers that you would like to expose to Swift.
|
||||
//
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
//
|
||||
// RoutesHandler.h
|
||||
// JitsiMeet
|
||||
//
|
||||
// Created by Alex Bumbu on 19.10.2022.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@protocol RouteObserving <NSObject>
|
||||
|
||||
@property (nonatomic, readonly) void (^didRouteCallback)(NSString *route);
|
||||
|
||||
@end
|
||||
|
||||
@interface RoutesHandler : NSObject
|
||||
|
||||
+ (instancetype)sharedInstance;
|
||||
- (void)registerObserver:(id<RouteObserving>)observer forRoute:(NSString *)route;
|
||||
- (void)unregisterObserver:(id<RouteObserving>)observer;
|
||||
- (BOOL)routeURL:(NSURL *)url;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -1,123 +0,0 @@
|
||||
//
|
||||
// RoutesHandler.m
|
||||
// JitsiMeet
|
||||
//
|
||||
// Created by Alex Bumbu on 19.10.2022.
|
||||
//
|
||||
|
||||
#import "RoutesHandler.h"
|
||||
|
||||
@protocol Routing <NSObject>
|
||||
|
||||
@property (nonatomic, readonly) NSString *route;
|
||||
@property (nonatomic, readonly) id<RouteObserving> observer;
|
||||
|
||||
@end
|
||||
|
||||
@interface Route: NSObject <Routing>
|
||||
|
||||
@property (nonatomic, readonly) NSString *route;
|
||||
@property (nonatomic, readonly, weak) id<RouteObserving> observer;
|
||||
|
||||
+ (instancetype)routeWithString:(nonnull NSString *)route observer:(id<RouteObserving>)observer;
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark -
|
||||
|
||||
@implementation RoutesHandler {
|
||||
NSMutableArray *routes;
|
||||
}
|
||||
|
||||
+ (instancetype)sharedInstance {
|
||||
static RoutesHandler *sharedInstance = nil;
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
sharedInstance = [[self alloc] init];
|
||||
});
|
||||
|
||||
return sharedInstance;
|
||||
}
|
||||
|
||||
- (instancetype)init {
|
||||
self = [super init];
|
||||
if (self) {
|
||||
routes = [[NSMutableArray alloc] init];
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)registerObserver:(id<RouteObserving>)observer forRoute:(NSString *)route {
|
||||
[routes addObject:[Route routeWithString:route observer:observer]];
|
||||
}
|
||||
|
||||
- (void)unregisterObserver:(id<RouteObserving>)observer {
|
||||
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id<Routing> _Nullable evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {
|
||||
return evaluatedObject.observer == nil || evaluatedObject.observer == observer;
|
||||
}];
|
||||
NSArray *routesToClear = [routes filteredArrayUsingPredicate:predicate];
|
||||
[routes removeObjectsInArray:routesToClear];
|
||||
}
|
||||
|
||||
- (BOOL)routeURL:(NSURL *)url {
|
||||
[self clearRoutes];
|
||||
|
||||
NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:false];
|
||||
if (!components) {
|
||||
return false;
|
||||
}
|
||||
|
||||
NSString *route = components.path;
|
||||
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id<Routing> _Nullable evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {
|
||||
return [evaluatedObject.route isEqualToString:route];
|
||||
}];
|
||||
NSArray *routesToHandle = [routes filteredArrayUsingPredicate:predicate];
|
||||
if ([routesToHandle count] == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (id<Routing> route in routesToHandle) {
|
||||
route.observer.didRouteCallback(route.route);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
- (void)clearRoutes {
|
||||
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id<Routing> _Nullable evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {
|
||||
return evaluatedObject.observer == nil;
|
||||
}];
|
||||
NSArray *routesToClear = [routes filteredArrayUsingPredicate:predicate];
|
||||
[routes removeObjectsInArray:routesToClear];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
#pragma mark -
|
||||
|
||||
@interface Route()
|
||||
|
||||
@property (nonatomic, nonnull, copy) NSString *route;
|
||||
@property (nonatomic, weak) id<RouteObserving> observer;
|
||||
|
||||
@end
|
||||
|
||||
@implementation Route
|
||||
|
||||
+ (instancetype)routeWithString:(nonnull NSString *)route observer:(nonnull id<RouteObserving>)observer {
|
||||
return [[Route alloc] initWithString:route observer:observer];
|
||||
}
|
||||
|
||||
- (instancetype)initWithString:(nonnull NSString *)route observer:(nonnull id<RouteObserving>)observer {
|
||||
self = [super init];
|
||||
if (self) {
|
||||
self.route = route;
|
||||
self.observer = observer;
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -21,16 +21,8 @@
|
||||
@import JitsiMeetSDK;
|
||||
|
||||
#import "Types.h"
|
||||
#import "RoutesHandler.h"
|
||||
#import "ViewController.h"
|
||||
#import "jitsi_meet-Swift.h"
|
||||
|
||||
@interface ViewController() <RouteObserving>
|
||||
|
||||
@property (nonatomic, nonnull, copy) void (^didRouteCallback)(NSString *);
|
||||
@property (nonatomic, assign) BOOL audioMuted;
|
||||
|
||||
@end
|
||||
|
||||
@implementation ViewController
|
||||
|
||||
@@ -41,8 +33,6 @@
|
||||
view.delegate = self;
|
||||
|
||||
[view join:[[JitsiMeet sharedInstance] getInitialConferenceOptions]];
|
||||
|
||||
[self registerRouteObserver];
|
||||
}
|
||||
|
||||
// JitsiMeetViewDelegate
|
||||
@@ -63,10 +53,6 @@
|
||||
|
||||
- (void)conferenceJoined:(NSDictionary *)data {
|
||||
[self _onJitsiMeetViewDelegateEvent:@"CONFERENCE_JOINED" withData:data];
|
||||
|
||||
self.audioMuted = [[data objectForKey:@"isAudioMuted"] boolValue];
|
||||
|
||||
[self refreshWidgetState:self.audioMuted];
|
||||
|
||||
// Register a NSUserActivity for this conference so it can be invoked as a
|
||||
// Siri shortcut.
|
||||
@@ -96,12 +82,6 @@
|
||||
|
||||
- (void)conferenceTerminated:(NSDictionary *)data {
|
||||
[self _onJitsiMeetViewDelegateEvent:@"CONFERENCE_TERMINATED" withData:data];
|
||||
|
||||
NSURL *sharedContainer = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.org.jitsi.meet.appgroup"];
|
||||
NSURL *widgetStateFileURL = [sharedContainer URLByAppendingPathComponent:@"widgetState"];
|
||||
[[NSFileManager defaultManager] removeItemAtURL:widgetStateFileURL error:nil];
|
||||
|
||||
[WidgetKitHelper reloadAllWidgets];
|
||||
}
|
||||
|
||||
- (void)conferenceWillJoin:(NSDictionary *)data {
|
||||
@@ -127,16 +107,7 @@
|
||||
}
|
||||
|
||||
- (void)audioMutedChanged:(NSDictionary *)data {
|
||||
NSLog(@"%@%@", @"Audio muted changed: ", data[@"muted"]);
|
||||
// CFNotificationCenterRef notificationCenter = CFNotificationCenterGetDarwinNotifyCenter();
|
||||
// CFNotificationCenterPostNotification(notificationCenter,
|
||||
// (__bridge CFStringRef)@"iOS_MeetingMutedChanged",
|
||||
// NULL,
|
||||
// NULL,
|
||||
// true);
|
||||
|
||||
self.audioMuted = [[data objectForKey:@"muted"] boolValue];
|
||||
[self refreshWidgetState:self.audioMuted];
|
||||
NSLog(@"%@%@", @"Audio muted changed: ", data[@"muted"]);
|
||||
}
|
||||
|
||||
- (void)endpointTextMessageReceived:(NSDictionary *)data {
|
||||
@@ -161,40 +132,9 @@
|
||||
|
||||
#pragma mark - Helpers
|
||||
|
||||
- (void)registerRouteObserver {
|
||||
__weak typeof(self) weakSelf = self;
|
||||
__weak JitsiMeetView *view = (JitsiMeetView *)self.view;
|
||||
self.didRouteCallback = ^(NSString *route) {
|
||||
if ([route isEqual:@"meet/toggleAudioMute"]) {
|
||||
weakSelf.audioMuted = !weakSelf.audioMuted;
|
||||
[view setAudioMuted:weakSelf.audioMuted];
|
||||
} else if ([route isEqualToString:@"meet/leaveMeeting"]) {
|
||||
[weakSelf terminate];
|
||||
}
|
||||
};
|
||||
|
||||
[[RoutesHandler sharedInstance] registerObserver:self forRoute:@"meet/toggleAudioMute"];
|
||||
[[RoutesHandler sharedInstance] registerObserver:self forRoute:@"meet/leaveMeeting"];
|
||||
}
|
||||
|
||||
- (void)terminate {
|
||||
JitsiMeetView *view = (JitsiMeetView *) self.view;
|
||||
[view leave];
|
||||
}
|
||||
|
||||
- (void)refreshWidgetState:(BOOL)audioMuted {
|
||||
// let sharedContainer = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: Constants.appGroupIdentifier)
|
||||
// return sharedContainer?.appendingPathComponent("rtc_SSFD").path ?? ""
|
||||
|
||||
NSURL *sharedContainer = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.org.jitsi.meet.appgroup"];
|
||||
NSURL *widgetStateFileURL = [sharedContainer URLByAppendingPathComponent:@"widgetState"];
|
||||
|
||||
NSDictionary *meetingState = @{@"audioMuted": @(audioMuted)};
|
||||
if (![meetingState writeToURL:widgetStateFileURL atomically:true]) {
|
||||
NSLog(@"error saving state file");
|
||||
}
|
||||
|
||||
[WidgetKitHelper reloadAllWidgets];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
//
|
||||
// WidgetKitHelper.swift
|
||||
// JitsiMeet
|
||||
//
|
||||
// Created by Alex Bumbu on 21.10.2022.
|
||||
//
|
||||
|
||||
import WidgetKit
|
||||
|
||||
@available(iOS 14.0, *)
|
||||
@objcMembers final class WidgetKitHelper: NSObject {
|
||||
|
||||
class func reloadAllWidgets(){
|
||||
|
||||
#if arch(arm64) || arch(i386) || arch(x86_64)
|
||||
WidgetCenter.shared.reloadAllTimelines()
|
||||
#endif
|
||||
|
||||
}
|
||||
}
|
||||
@@ -46,7 +46,7 @@ public class PiPViewCoordinator {
|
||||
}
|
||||
}
|
||||
|
||||
public let initialPositionInSuperView: Position = .lowerRightCorner
|
||||
public var initialPositionInSuperView: Position = .lowerRightCorner
|
||||
|
||||
// Unused. Remove on the next major release.
|
||||
@available(*, deprecated, message: "The PiP window size is now fixed to 150px.")
|
||||
|
||||
@@ -1061,7 +1061,6 @@
|
||||
"chat": "اظهِر/اخفِ نافذة الدردشة",
|
||||
"clap": "تصفيق",
|
||||
"collapse": "قلّص",
|
||||
"dock": "إرساء في النافذة الرئيسية",
|
||||
"document": "اظهِر/اخفِ الملف المشارك",
|
||||
"download": "نزِّل التطبيق",
|
||||
"embedMeeting": "ضمِّن المُلتقى",
|
||||
@@ -1115,7 +1114,6 @@
|
||||
"tileView": "اظهِر/اخفِ عرض العنوان",
|
||||
"toggleCamera": "بدِّل الكاميرا",
|
||||
"toggleFilmstrip": "بدِّل وضع الشريط السينمائي (filmstrip)",
|
||||
"undock": "فك في نافذة منفصلة",
|
||||
"videoblur": "استعمل/اخرج من وضع تغبيش خلفية الفيديو",
|
||||
"videomute": "بدِّل وضع اخفاء الفيديو"
|
||||
},
|
||||
@@ -1133,7 +1131,6 @@
|
||||
"closeReactionsMenu": "إغلاق قائمة ردود الفعل",
|
||||
"disableNoiseSuppression": "قم بتعطيل خاصية منع الضوضاء",
|
||||
"disableReactionSounds": "يمكنك تعطيل أصوات ردود الفعل لهذا المُلتقى",
|
||||
"dock": "إرساء في النافذة الرئيسية",
|
||||
"documentClose": "أغلق الملف المشارك",
|
||||
"documentOpen": "افتح الملف المشارك",
|
||||
"download": "نزِّل التطبيق",
|
||||
@@ -1205,7 +1202,6 @@
|
||||
"talkWhileMutedPopup": "أتحاول التحدث؟ الميكروفون لديك مكتوم.",
|
||||
"tileViewToggle": "بدِّل عنوان العرض",
|
||||
"toggleCamera": "بدِّل الكاميرا",
|
||||
"undock": "فك في نافذة منفصلة",
|
||||
"videoSettings": "اعدادات الفيديو",
|
||||
"videomute": "استعمل / أوقف الكاميرا"
|
||||
},
|
||||
|
||||
@@ -1027,7 +1027,6 @@
|
||||
"chat": "Obre o tanca el xat",
|
||||
"clap": "Picament de mans",
|
||||
"collapse": "Col·lapsa",
|
||||
"dock": "Acobla a la finestra principal",
|
||||
"document": "Activa o desactiva el document compartit",
|
||||
"download": "Baixeu les nostres aplicacions",
|
||||
"embedMeeting": "Insereix la reunió",
|
||||
@@ -1079,7 +1078,6 @@
|
||||
"tileView": "Activa o desactiva el mode mosaic",
|
||||
"toggleCamera": "Activa o desactiva la càmera",
|
||||
"toggleFilmstrip": "Mostra o amaga la cinta",
|
||||
"undock": "Desacobla en una finestra separada",
|
||||
"videoblur": "Activa o desactiva el desenfocament del vídeo",
|
||||
"videomute": "Activa o desactiva la càmera"
|
||||
},
|
||||
@@ -1096,7 +1094,6 @@
|
||||
"closeChat": "Tanca el xat",
|
||||
"closeReactionsMenu": "Tanca el menú de reaccions",
|
||||
"disableReactionSounds": "Podeu desactivar els sons de reacció per a aquesta reunió",
|
||||
"dock": "Acobla en la finestra principal",
|
||||
"documentClose": "Tanca el document compartit",
|
||||
"documentOpen": "Obre el document compartit",
|
||||
"download": "Baixeu les nostres aplicacions",
|
||||
@@ -1166,7 +1163,6 @@
|
||||
"talkWhileMutedPopup": "Intenteu parlar? Esteu silenciat.",
|
||||
"tileViewToggle": "Activa o desactiva el mode mosaic",
|
||||
"toggleCamera": "Activa o desactiva la càmera",
|
||||
"undock": "Desacobla en una finestra principal",
|
||||
"videoSettings": "Paràmetres de vídeo",
|
||||
"videomute": "Inicia o atura la càmera"
|
||||
},
|
||||
|
||||
@@ -1060,7 +1060,6 @@
|
||||
"chat": "Přepnout okno zpráv",
|
||||
"clap": "Tleskat",
|
||||
"collapse": "Zabalit",
|
||||
"dock": "Dokovat v hlavním okně",
|
||||
"document": "Přepnout sdílený dokument",
|
||||
"download": "Stáhnout naše aplikace",
|
||||
"embedMeeting": "Vložit setkání",
|
||||
@@ -1114,7 +1113,6 @@
|
||||
"tileView": "Přepnout dlaždicové zobrazení",
|
||||
"toggleCamera": "Přepnout kameru",
|
||||
"toggleFilmstrip": "Přepnout video náhledy",
|
||||
"undock": "Oddokovat do samostatného okna",
|
||||
"videoblur": "Přepnout rozmazání videa",
|
||||
"videomute": "Přepnout ztišení videa"
|
||||
},
|
||||
@@ -1132,7 +1130,6 @@
|
||||
"closeReactionsMenu": "Zavrít menu reakcí",
|
||||
"disableNoiseSuppression": "Vypnout potlačení šumu",
|
||||
"disableReactionSounds": "Vypnout zvuky reakcí",
|
||||
"dock": "Dokovat v hlavním okně",
|
||||
"documentClose": "Zavřít sdílený dokument",
|
||||
"documentOpen": "Otevřít sdílený dokument",
|
||||
"download": "Stáhnout naše aplikace",
|
||||
@@ -1204,7 +1201,6 @@
|
||||
"talkWhileMutedPopup": "Snažíte se mluvit? Máte ztišený mikrofon.",
|
||||
"tileViewToggle": "Přepnout dlaždicové zobrazení",
|
||||
"toggleCamera": "Přepnout kameru",
|
||||
"undock": "",
|
||||
"videoSettings": "",
|
||||
"videomute": "Zapnout / Vypnout kameru"
|
||||
},
|
||||
|
||||
@@ -147,6 +147,7 @@
|
||||
"bridgeCount": "Serverzahl: ",
|
||||
"codecs": "Codecs (A/V): ",
|
||||
"connectedTo": "Verbunden mit:",
|
||||
"e2eeVerified": "E2EE verifiziert:",
|
||||
"framerate": "Bildwiederholrate:",
|
||||
"less": "Weniger anzeigen",
|
||||
"localaddress": "Lokale Adresse:",
|
||||
@@ -408,6 +409,10 @@
|
||||
"user": "Anmeldename",
|
||||
"userIdentifier": "Benutzername",
|
||||
"userPassword": "Passwort",
|
||||
"verifyParticipantConfirm": "Sie stimmen überein",
|
||||
"verifyParticipantDismiss": "Sie stimmen nicht überein",
|
||||
"verifyParticipantQuestion": "EXPERIMENTELL: Frage Person {{participantName}} ob sie den selben Inhalt in der selben Reihenfolge sieht.",
|
||||
"verifyParticipantTitle": "Personsverifikation",
|
||||
"videoLink": "Video-Link",
|
||||
"viewUpgradeOptions": "Upgradeoptionen anzeigen",
|
||||
"viewUpgradeOptionsContent": "Sie müssen Ihren Tarif erweitern, um Premium-Features wie Aufnahme, Transkription, RTMP-Streaming und mehr zu nutzen.",
|
||||
@@ -437,9 +442,6 @@
|
||||
"noResults": "Keine Ergebnisse :(",
|
||||
"search": "GIPHY durchsuchen"
|
||||
},
|
||||
"helpView": {
|
||||
"title": "Hilfecenter"
|
||||
},
|
||||
"incomingCall": {
|
||||
"answer": "Antworten",
|
||||
"audioCallTitle": "Eingehender Anruf",
|
||||
@@ -563,7 +565,6 @@
|
||||
"lobby": {
|
||||
"admit": "Zulassen",
|
||||
"admitAll": "Alle zulassen",
|
||||
"allow": "Annehmen",
|
||||
"backToKnockModeButton": "Kein Passwort, stattdessen Beitritt anfragen",
|
||||
"chat": "Chat",
|
||||
"dialogTitle": "Lobbymodus",
|
||||
@@ -649,6 +650,8 @@
|
||||
"connectedOneMember": "{{name}} nimmt am Meeting teil",
|
||||
"connectedThreePlusMembers": "{{name}} und {{count}} andere Personen nehmen am Meeting teil",
|
||||
"connectedTwoMembers": "{{first}} und {{second}} nehmen am Meeting teil",
|
||||
"dataChannelClosed": "Schlechte Videoqualität",
|
||||
"dataChannelClosedDescription": "Die Steuerungsverbindung (Bridge Channel) wurde unterbrochen, daher ist die Videoqulität auf die schlechteste Stufe limitiert.",
|
||||
"disconnected": "getrennt",
|
||||
"displayNotifications": "Benachrichtigungen anzeigen für",
|
||||
"focus": "Konferenzleitung",
|
||||
@@ -709,6 +712,8 @@
|
||||
"reactionSoundsForAll": "Interaktionstöne für alle deaktivieren",
|
||||
"screenShareNoAudio": "Die Option \"Audio freigeben\" wurde bei der Auswahl des Fensters nicht ausgewählt.",
|
||||
"screenShareNoAudioTitle": "Share audio was not checked",
|
||||
"screenSharingAudioOnlyDescription": "Durch die Bildschirmfreigabe wird der Modus \"Beste Leistung\" beeinflusst und daher mehr Datenrate benötigt.",
|
||||
"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",
|
||||
@@ -858,9 +863,6 @@
|
||||
"rejected": "Abgelehnt",
|
||||
"ringing": "Es klingelt …"
|
||||
},
|
||||
"privacyView": {
|
||||
"title": "Datenschutz"
|
||||
},
|
||||
"profile": {
|
||||
"avatar": "Benutzerbild",
|
||||
"setDisplayNameLabel": "Anzeigename festlegen",
|
||||
@@ -1003,6 +1005,7 @@
|
||||
"displayName": "Anzeigename",
|
||||
"displayNamePlaceholderText": "z.B. Erika Musterfrau",
|
||||
"email": "E-Mail",
|
||||
"emailPlaceholderText": "email@beispiel.de",
|
||||
"goTo": "Gehe zu",
|
||||
"header": "Einstellungen",
|
||||
"help": "Hilfe",
|
||||
@@ -1011,6 +1014,7 @@
|
||||
"profileSection": "Profil",
|
||||
"serverURL": "Server-URL",
|
||||
"showAdvanced": "Erweiterte Einstellungen anzeigen",
|
||||
"startCarModeInLowBandwidthMode": "Automodus mit Datensparmodus starten",
|
||||
"startWithAudioMuted": "Stumm beitreten",
|
||||
"startWithVideoMuted": "Ohne Video beitreten",
|
||||
"terms": "Nutzungsbedingungen",
|
||||
@@ -1066,7 +1070,6 @@
|
||||
"chat": "Chatfenster öffnen / schließen",
|
||||
"clap": "Klatschen",
|
||||
"collapse": "Einklappen",
|
||||
"dock": "In Hauptfenster einbinden",
|
||||
"document": "Geteiltes Dokument schließen",
|
||||
"download": "Unsere Apps herunterladen",
|
||||
"embedMeeting": "Konferenz einbetten",
|
||||
@@ -1120,7 +1123,6 @@
|
||||
"tileView": "Kachelansicht ein-/ausschalten",
|
||||
"toggleCamera": "Kamera wechseln",
|
||||
"toggleFilmstrip": "Miniaturansichten ein-/ausschalten",
|
||||
"undock": "In eigenem Fenster anzeigen",
|
||||
"videoblur": "Unscharfer Hintergrund ein-/ausschalten",
|
||||
"videomute": "„Video stummschalten“ ein-/ausschalten",
|
||||
"whiteboard": "Whiteboard ein-/ausschalten"
|
||||
@@ -1139,7 +1141,6 @@
|
||||
"closeReactionsMenu": "Interaktionsmenü schließen",
|
||||
"disableNoiseSuppression": "Rauschunterdrückung deaktivieren",
|
||||
"disableReactionSounds": "Sie können die Interaktionstöne für diese Konferenz deaktivieren",
|
||||
"dock": "In Hauptfenster einbinden",
|
||||
"documentClose": "Geteiltes Dokument schließen",
|
||||
"documentOpen": "Geteiltes Dokument öffnen",
|
||||
"download": "Unsere Apps herunterladen",
|
||||
@@ -1213,7 +1214,6 @@
|
||||
"talkWhileMutedPopup": "Versuchen Sie zu sprechen? Ihr Mikrofon ist stummgeschaltet.",
|
||||
"tileViewToggle": "Kachelansicht ein-/ausschalten",
|
||||
"toggleCamera": "Kamera wechseln",
|
||||
"undock": "In eigenem Fenster anzeigen",
|
||||
"videoSettings": "Kameraeinstellungen",
|
||||
"videomute": "Kamera starten / stoppen"
|
||||
},
|
||||
@@ -1294,6 +1294,7 @@
|
||||
"show": "Im Vordergrund anzeigen",
|
||||
"showSelfView": "Eigene Ansicht anzeigen",
|
||||
"unpinFromStage": "Lösen",
|
||||
"verify": "Person verifizieren",
|
||||
"videoMuted": "Kamera ausgeschaltet",
|
||||
"videomute": "Person hat die Kamera angehalten"
|
||||
},
|
||||
@@ -1361,6 +1362,7 @@
|
||||
"recentList": "Verlauf",
|
||||
"recentListDelete": "Eintrag löschen",
|
||||
"recentListEmpty": "Ihr Konferenzverlauf ist derzeit leer. Reden Sie mit Ihrem Team und Ihre vergangenen Konferenzen landen hier.",
|
||||
"recentMeetings": "Ihre letzten Konferenzen",
|
||||
"reducedUIText": "Willkommen bei {{app}}!",
|
||||
"roomNameAllowedChars": "Der Konferenzname sollte keines der folgenden Zeichen enthalten: ?, &, :, ', \", %, #.",
|
||||
"roomname": "Konferenzname eingeben",
|
||||
@@ -1369,6 +1371,7 @@
|
||||
"settings": "Einstellungen",
|
||||
"startMeeting": "Meeting starten",
|
||||
"terms": "AGB",
|
||||
"title": "Sichere, voll funktionale und komplett kostenlose Videokonferenzen"
|
||||
"title": "Sichere, voll funktionale und komplett kostenlose Videokonferenzen",
|
||||
"upcomingMeetings": "Ihre zukünftigen Konferenzen"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -365,7 +365,7 @@
|
||||
"mute": "Mute or unmute your microphone",
|
||||
"pushToTalk": "Press to transmit",
|
||||
"raiseHand": "Raise or lower your hand",
|
||||
"showSpeakerStats": "Show speaker stats",
|
||||
"showSpeakerStats": "Show participants stats",
|
||||
"toggleChat": "Open or close the chat",
|
||||
"toggleFilmstrip": "Show or hide video thumbnails",
|
||||
"toggleScreensharing": "Switch between camera and screen sharing",
|
||||
@@ -579,7 +579,7 @@
|
||||
"minutes": "{{count}}m",
|
||||
"name": "Name",
|
||||
"seconds": "{{count}}s",
|
||||
"speakerStats": "Speaker Stats",
|
||||
"speakerStats": "Participants Stats",
|
||||
"speakerTime": "Speaker Time"
|
||||
},
|
||||
"startupoverlay": {
|
||||
@@ -626,7 +626,7 @@
|
||||
"sharedvideo": "Toggle video sharing",
|
||||
"shortcuts": "Toggle shortcuts",
|
||||
"show": "Show on stage",
|
||||
"speakerStats": "Toggle speaker statistics",
|
||||
"speakerStats": "Toggle participants statistics",
|
||||
"tileView": "Toggle tile view",
|
||||
"toggleCamera": "Toggle camera",
|
||||
"videoblur": "",
|
||||
@@ -662,7 +662,7 @@
|
||||
"shareRoom": "Invite someone",
|
||||
"sharedvideo": "Share video",
|
||||
"shortcuts": "View shortcuts",
|
||||
"speakerStats": "Speaker stats",
|
||||
"speakerStats": "Participants stats",
|
||||
"startScreenSharing": "Start screen sharing",
|
||||
"startSubtitles": "Start subtitles",
|
||||
"startvideoblur": "",
|
||||
|
||||
@@ -1067,7 +1067,6 @@
|
||||
"chat": "Otvori/Zatvori chat",
|
||||
"clap": "Plješći",
|
||||
"collapse": "Sklopi",
|
||||
"dock": "Prikvači u glavni prozor",
|
||||
"document": "Uključi/Isključi dijeljeni dokument",
|
||||
"download": "Preuzmi naše aplikacije",
|
||||
"embedMeeting": "Ugradi sastanak",
|
||||
@@ -1121,7 +1120,6 @@
|
||||
"tileView": "Uključi/Isključi pločasti prikaz",
|
||||
"toggleCamera": "Uključi/Isključi kameru",
|
||||
"toggleFilmstrip": "Uključi/Isključi slike videa",
|
||||
"undock": "Odspoji u zasebni prozor",
|
||||
"videoblur": "Uključi/Isključi zamućenje videa",
|
||||
"videomute": "Pokreni/Prekini kameru",
|
||||
"whiteboard": "Pokaži/Sakrij ploču za prezentacije"
|
||||
@@ -1140,7 +1138,6 @@
|
||||
"closeReactionsMenu": "Zatvori izbornik reakcija",
|
||||
"disableNoiseSuppression": "Isključi suzbijanje šumova",
|
||||
"disableReactionSounds": "Za ovaj sastanak možeš isključiti zvukove reakcija",
|
||||
"dock": "Prikvači u glavni prozor",
|
||||
"documentClose": "Zatvori dijeljeni dokument",
|
||||
"documentOpen": "Otvori dijeljeni dokument",
|
||||
"download": "Preuzmi naše aplikacije",
|
||||
@@ -1214,7 +1211,6 @@
|
||||
"talkWhileMutedPopup": "Pokušavaš govoriti? Tvoj zvuk je isključen.",
|
||||
"tileViewToggle": "Uključi/Isključi pločasti prikaz",
|
||||
"toggleCamera": "Uključi/Isključi kameru",
|
||||
"undock": "Odspoji u zasebni prozor",
|
||||
"videoSettings": "Videopostavke",
|
||||
"videomute": "Pokreni/Prekini kameru"
|
||||
},
|
||||
|
||||
@@ -1033,7 +1033,6 @@
|
||||
"chat": "chat-woknješko pokazać/schować",
|
||||
"clap": "placać",
|
||||
"collapse": "pomjeńšić",
|
||||
"dock": "we hłownej wobrazowce fiksěrować",
|
||||
"document": "dźěleny dokument začinić",
|
||||
"download": "naše aplikacije downloadować ",
|
||||
"embedMeeting": "konferencu integrować",
|
||||
@@ -1085,7 +1084,6 @@
|
||||
"tileView": "kachlicowy napohlad zapnyć/hasnyć",
|
||||
"toggleCamera": "kameru měnić",
|
||||
"toggleFilmstrip": "miniaturowy napohlad zapnyć/hasnyć ",
|
||||
"undock": "rozwjazać",
|
||||
"videoblur": "njejasny widejo zapnyć/hasnyć ",
|
||||
"videomute": "„něme šaltowanje wideja zapnyć/hasnyć "
|
||||
},
|
||||
@@ -1102,7 +1100,6 @@
|
||||
"closeChat": "chat začinić",
|
||||
"closeReactionsMenu": "meni za interakcije začinić",
|
||||
"disableReactionSounds": "Móžeće zwuki za interakcije za tutu konferencu deaktiwěrować.",
|
||||
"dock": "fiksěrować",
|
||||
"documentClose": "dźěleny dokument začinić",
|
||||
"documentOpen": "dźěleny dokument wočinić",
|
||||
"download": "naše aplikacije downloadować",
|
||||
@@ -1172,7 +1169,6 @@
|
||||
"talkWhileMutedPopup": "Spytaće Wy rěčeć? Waš mikrofon je němy.",
|
||||
"tileViewToggle": " kachlicowy napohlad zapnyć/hasnyć ",
|
||||
"toggleCamera": "kameru měnić",
|
||||
"undock": "rozwjazać",
|
||||
"videoSettings": "nastajenja za widejo",
|
||||
"videomute": "kameru startować/hasnyć"
|
||||
},
|
||||
|
||||
@@ -27,6 +27,25 @@
|
||||
"audioOnly": {
|
||||
"audioOnly": "Alacsony sávszélesség"
|
||||
},
|
||||
"breakoutRooms": {
|
||||
"actions": {
|
||||
"add": "Pihenőszoba hozzáadása",
|
||||
"autoAssign": "Automatikus hozzárendelés a pihenőszobákhoz",
|
||||
"close": "Bezárás",
|
||||
"join": "Csatlakozás",
|
||||
"leaveBreakoutRoom": "Pihenőszoba elhagyása",
|
||||
"more": "Bővebben",
|
||||
"remove": "Eltávolítás",
|
||||
"sendToBreakoutRoom": "Résztvevő áthelyezése ide:"
|
||||
},
|
||||
"defaultName": "Pihenőszoba #{{index}}",
|
||||
"mainRoom": "Fő szoba",
|
||||
"notifications": {
|
||||
"joined": "Csatlakozva a \"{{name}}\" pihenőszobához",
|
||||
"joinedMainRoom": "Csatlakozva a fő szobához",
|
||||
"joinedTitle": "Pihenőszobák"
|
||||
}
|
||||
},
|
||||
"calendarSync": {
|
||||
"addMeetingURL": "Értekezlet hivatkozásának hozzáadása",
|
||||
"confirmAddLink": "Hozzáadható egy Jitsi hivatkozás az eseményhez?",
|
||||
@@ -46,6 +65,7 @@
|
||||
"today": "Ma"
|
||||
},
|
||||
"chat": {
|
||||
"enter": "Belépés a szobába",
|
||||
"error": "Hiba: az üzenetet nem sikerült elküldeni. Hiba oka: {{error}}",
|
||||
"fieldPlaceHolder": "Írja ide az üzenetét",
|
||||
"messageTo": "Privát üzenet a felhasználónak: {{recipient}}",
|
||||
@@ -58,14 +78,21 @@
|
||||
"noMessagesMessage": "A találkozón még nincsenek üzenetek. Itt kezdhet beszélgetést!",
|
||||
"privateNotice": "Privát üzenet a felhasználónak: {{recipient}}",
|
||||
"sendButton": "Küldés",
|
||||
"tabs": {
|
||||
"chat": "Csevegés",
|
||||
"polls": "Szavazás"
|
||||
},
|
||||
"title": "Csevegés",
|
||||
"titleWithPolls": "Csevegés",
|
||||
"you": "neked"
|
||||
"titleWithPolls": "Csevegés és szavazás",
|
||||
"you": "te"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
"buttonText": "Chrome kiterjesztés telepítése",
|
||||
"dontShowAgain": "Ne jelenjen meg újra",
|
||||
"installExtensionText": "Kiterjesztés telepítése a Google Calendar és az Office 365 integrációjához"
|
||||
"installExtensionText": "Kiterjesztés telepítése a Google Calendar és az Office 365 integrációjához",
|
||||
"raiseHandAction": "Kéz felemelése",
|
||||
"reactionSounds": "Hangok kikapcsolása",
|
||||
"reactionSoundsForAll": "Hangok kikapcsolása mindenkinek"
|
||||
},
|
||||
"connectingOverlay": {
|
||||
"joiningRoom": "Kapcsolódás az értekezlethez…"
|
||||
@@ -189,12 +216,18 @@
|
||||
"dismiss": "Elutasítás",
|
||||
"displayNameRequired": "Helló! Mi a neve?",
|
||||
"done": "Kész",
|
||||
"enterDisplayName": "Adja meg itt a nevét",
|
||||
"e2eeDescription": "A végpontok közötti titkosítás jelenleg KÍSÉRLETES. Ne feledje, hogy a végpontok közötti titkosítás bekapcsolása hatékonyan letiltja a szerveroldali szolgáltatásokat, például: telefonos részvételt. Ne feledje azt is, hogy az értekezlet csak olyan felhasználók számára működik, akik olyan böngészőkből csatlakoznak, amelyek támogatják a beilleszthető adatfolyamokat.",
|
||||
"e2eeLabel": "Végpontok közötti titkosítás engedélyezése",
|
||||
"embedMeeting": "Meeting beágyazása",
|
||||
"enterDisplayName": "Adja meg a nevét",
|
||||
"error": "Hiba",
|
||||
"externalInstallationMsg": "Telepíteni kell a munkaasztal megosztására való kiterjesztést.",
|
||||
"externalInstallationTitle": "Kiterjesztésre van szükség",
|
||||
"goToStore": "Ugrás az alkalmazásbolthoz",
|
||||
"gracefulShutdown": "Jelenleg a szolgáltatás karbantartás miatt nem elérhető. Később próbálja meg ismét.",
|
||||
"grantModeratorDialog": "Biztos, hogy moderátori jogokat kíván adni a következőnek: {{participantName}}?",
|
||||
"grantModeratorTitle": "Moderátori jogok megadása",
|
||||
"hideShareAudioHelper": "Ne mutassa ezt az ablakot többé",
|
||||
"incorrectPassword": "Helytelen felhasználói név és jelszó",
|
||||
"incorrectRoomLockPassword": "Helytelen jelszó",
|
||||
"inlineInstallExtension": "Telepítés azonnal",
|
||||
@@ -217,21 +250,34 @@
|
||||
"maxUsersLimitReached": "A lehetséges résztvevők maximális száma elérve. A konferencia tele van. Lépjen kapcsolatba az értekezlet tulajdonosával vagy próbálkozzon később!",
|
||||
"maxUsersLimitReachedTitle": "A lehetséges résztvevők maximális száma elérve",
|
||||
"micConstraintFailedError": "A mikrofon nem felel meg bizonyos kikötéseknek.",
|
||||
"micNotFoundError": "Nem található mikrofon.",
|
||||
"micNotFoundError": "A mikrofon nem található.",
|
||||
"micNotSendingData": "A számítógép beállításai között kell visszahangosítani a mikrofont vagy beállítani a hangfelvétel szintjét",
|
||||
"micNotSendingDataTitle": "A mikrofon le van némítva a rendszerbeállításokban",
|
||||
"micPermissionDeniedError": "Nem adott engedélyt a mikrofon használatához. Csatlakozhat a beszélgetéshez, de a többiek nem fogják Önt hallani. A címsorban lévő kamera ikonnal lehet ezt helyrehozni.",
|
||||
"micUnknownError": "Ismeretlen ok miatt nem lehet a mikrofont használni.",
|
||||
"moderationAudioLabel": "Engedélyezze a résztvevőknek saját némításuk feloldását",
|
||||
"moderationVideoLabel": "Engedélyezze a résztvevőknek saját kamerájuk elindítását",
|
||||
"muteEveryoneDialog": "Valóban mindenki elnémítható? Nem fogja tudni visszahangosítani, de ő önmagát bármikor vissza tudja majd hangosítani.",
|
||||
"muteEveryoneElseDialog": "Némítás után már nem fogja tudni visszahangosítani, de ő önmagát bármikor vissza tudja hangosítani.",
|
||||
"muteEveryoneElseTitle": "Mindenki elnémítása, kivéve: {{whom}}?",
|
||||
"muteEveryoneElsesVideoDialog": "A kamera letiltása után nem tudja újra bekapcsolni, de ők bármikor újra bekapcsolhatják.",
|
||||
"muteEveryoneElsesVideoTitle": "Mindenki kamerájának tilátsa, kivéve {{whom}}?",
|
||||
"muteEveryoneSelf": "önmagamat",
|
||||
"muteEveryoneStartMuted": "Mindenki elnémítva kezd ezután",
|
||||
"muteEveryoneTitle": "Mindenki elnémítása?",
|
||||
"muteEveryonesVideoDialog": "A résztvevők bármikor be tudják kapcsolni a kamerájukat.",
|
||||
"muteEveryonesVideoDialogModerationOn": "A résztvevők bármikor kérhetik videójuk bekapcsolását.",
|
||||
"muteEveryonesVideoTitle": "Minden résztvevő kameráját leállítja?",
|
||||
"muteParticipantBody": "Nem fogja tudni visszahangosítani, de ő önmagát bármikor vissza tudja majd hangosítani.",
|
||||
"muteParticipantButton": "Némítás",
|
||||
"muteParticipantDialog": "Valóban elnémítható ez a résztvevő? Nem fogja tudni visszahangosítani, de ő önmagát bármikor vissza tudja majd hangosítani.",
|
||||
"muteParticipantTitle": "Elnémítható a résztvevő?",
|
||||
"muteParticipantsVideoBody": "Ön nem tudja újra bekapcsolni a kamerát, de ők bármikor újra bekapcsolhatják.",
|
||||
"muteParticipantsVideoButton": "Kamera leállítása",
|
||||
"muteParticipantsVideoDialog": "Biztosan le akarja tiltani ennek a résztvevőnek a kameráját? Ön nem tudja újra bekapcsolni a kamerát, de ők bármikor újra bekapcsolhatják.",
|
||||
"muteParticipantsVideoDialogModerationOn": "Are you sure you want to turn off this participant's camera? You won't be able to turn the camera back on and neither will they.",
|
||||
"muteParticipantsVideoTitle": "Letiltja ennek a résztvevőnek a kameráját?",
|
||||
"password": "Jelszó",
|
||||
"passwordLabel": "Az értekezletet zárolta egy résztvevő. Csatlakozáshoz adja meg a $t(lockRoomPassword).",
|
||||
"passwordNotSupported": "Az értekezlet $t(lockRoomPassword) beállítása nem támogatott.",
|
||||
"passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) nem támogatott",
|
||||
@@ -249,6 +295,7 @@
|
||||
"remoteControlShareScreenWarning": "Vegye figyelembe, hogy ha megnyomja az „Engedélyezés” lehetőséget, akkor megosztja a képernyőt!",
|
||||
"remoteControlStopMessage": "A távoli munkamenet irányítása befejeződött!",
|
||||
"remoteControlTitle": "Távoli asztal vezérlése",
|
||||
"remoteUserControls": "{{username}} vezérlői",
|
||||
"removePassword": "$t(lockRoomPassword) eltávolítása",
|
||||
"removeSharedVideoMsg": "Valóban eltávolítható a megosztott videó?",
|
||||
"removeSharedVideoTitle": "Megosztott videó eltávolítása",
|
||||
@@ -267,11 +314,14 @@
|
||||
"sendPrivateMessageTitle": "Privátban legyen elküldve?",
|
||||
"serviceUnavailable": "Szolgáltatás nem elérhető",
|
||||
"sessTerminated": "Hívás megszakadt",
|
||||
"shareAudio": "Tovább",
|
||||
"shareAudioTitle": "Hang megosztása",
|
||||
"shareVideoLinkError": "Adjon meg egy helyes linket.",
|
||||
"shareVideoTitle": "Videó megosztása",
|
||||
"shareYourScreen": "Képernyő megosztása",
|
||||
"shareYourScreenDisabled": "Képernyőmegosztás letiltva.",
|
||||
"shareYourScreenDisabledForGuest": "Vendég nem végezhet képernyőmegosztást.",
|
||||
"sharedVideoLinkPlaceholder": "YouTube link vagy közvetlen videó link",
|
||||
"startLiveStreaming": "Élő közvetítés kezdése",
|
||||
"startRecording": "Felvétel indítása",
|
||||
"startRemoteControlErrorMessage": "Hiba történt a távoli vezérlés munkamenetének indítása közben!",
|
||||
@@ -287,6 +337,7 @@
|
||||
"transcribing": "Átirat készítése",
|
||||
"unlockRoom": "Értekezlet $t(lockRoomPassword) eltávolítása",
|
||||
"userPassword": "felhasználói jelszó",
|
||||
"videoLink": "Videó link",
|
||||
"yourEntireScreen": "A teljes képernyő"
|
||||
},
|
||||
"documentSharing": {
|
||||
@@ -367,11 +418,16 @@
|
||||
"showSpeakerStats": "Beszéd statisztikák megjelenítése",
|
||||
"toggleChat": "Csevegés megnyitása vagy bezárása",
|
||||
"toggleFilmstrip": "Videó bélyegképek megjelenítése vagy elrejtése",
|
||||
"toggleParticipantsPane": "A résztvevők panel megjelenítése vagy elrejtése",
|
||||
"toggleScreensharing": "Váltás kamera és képernyőmegosztás között",
|
||||
"toggleShortcuts": "Gyorsbillentyűk megjelenítése vagy elrejtése",
|
||||
"videoMute": "Kamera elindítása vagy leállítása",
|
||||
"videoQuality": "Hívás minőségének kezelése"
|
||||
},
|
||||
"largeVideo": {
|
||||
"screenIsShared": "Ön megosztja a képernyőjét",
|
||||
"showMeWhatImSharing": "Látni szeretném mit osztok meg"
|
||||
},
|
||||
"liveStreaming": {
|
||||
"busy": "Dolgozunk a közvetítési erőforrások felszabadításán. Kísérelje meg újra néhány perc múlva.",
|
||||
"busyTitle": "Jelenleg minden közvetítő foglalt",
|
||||
@@ -405,6 +461,44 @@
|
||||
"unavailableTitle": "Élő közvetítés elérhetetlen",
|
||||
"youtubeTerms": "YouTube szolgáltatási feltételek"
|
||||
},
|
||||
"lobby": {
|
||||
"admit": "Engedélyezés",
|
||||
"admitAll": "Mindet engedélyez",
|
||||
"allow": "Engedélyez",
|
||||
"backToKnockModeButton": "Csatlakozási kérelem küldése",
|
||||
"chat": "Chat",
|
||||
"dialogTitle": "Lobby mód",
|
||||
"disableDialogContent": "A lobby mód jelenleg elérhető. Lehetőséged van csak azokat behívni a megbeszélésre, akik erre jogosultak általad. Szeretnéd kikapcsolni?",
|
||||
"disableDialogSubmit": "Elutasítás",
|
||||
"emailField": "Írd be az email címed",
|
||||
"enableDialogPasswordField": "Jelszó megadása (választható)",
|
||||
"enableDialogSubmit": "Elfogadás",
|
||||
"enableDialogText": "A Lobby mód lehetővé teszi a megbeszélés védelmét azáltal, hogy csak a moderátor hivatalos jóváhagyása után engedi be az embereket.",
|
||||
"enterPasswordButton": "Adja meg az értekezlet jelszavát",
|
||||
"enterPasswordTitle": "Adja meg a jelszót az értekezlethez való csatlakozáshoz",
|
||||
"errorMissingPassword": "Kérjük, adja meg az értekezlet jelszavát",
|
||||
"invalidPassword": "Helytelen jelszó",
|
||||
"joinRejectedMessage": "Csatlakozási kérelmét egy moderátor elutasította.",
|
||||
"joinRejectedTitle": "Csatlakozási kérelem elutasítva.",
|
||||
"joinTitle": "Csatlakozás az értekezlethez",
|
||||
"joinWithPasswordMessage": "Csatlakozás jelszóval, kérjük várjon...",
|
||||
"joiningMessage": "Amint valaki elfogadja kérését, csatlakoztatjuk az értekezlethez",
|
||||
"joiningTitle": "Értekezlethez csatlakozás kérése...",
|
||||
"joiningWithPasswordTitle": "Csatlakozás jelszóval...",
|
||||
"knockButton": "Csatlakozási kérelem küldése",
|
||||
"knockTitle": "Valaki szeretne csatlakozni az értekezlethez",
|
||||
"nameField": "Adja meg a nevét",
|
||||
"notificationLobbyAccessDenied": "{{targetParticipantName}} elutasításra került a csatlakozásod {{originParticipantName}} által",
|
||||
"notificationLobbyAccessGranted": "{{targetParticipantName}} a csatlakozozásod elfogadva lett {{originParticipantName}} által",
|
||||
"notificationLobbyDisabled": "Lobby tiltva lett {{originParticipantName}} által.",
|
||||
"notificationLobbyEnabled": "Lobby engedélyezve lett {{originParticipantName}} által.",
|
||||
"notificationTitle": "Lobby",
|
||||
"passwordField": "Adja meg az értekezlet jelszavát",
|
||||
"passwordJoinButton": "Csatlakozás",
|
||||
"reject": "Elutasít",
|
||||
"rejectAll": "Mindet elutasít",
|
||||
"toggleLabel": "Lobby engedélyezése"
|
||||
},
|
||||
"localRecording": {
|
||||
"clientState": {
|
||||
"off": "Kikapcsolva",
|
||||
@@ -449,11 +543,18 @@
|
||||
"focus": "Konferencia fókusza",
|
||||
"focusFail": "{{component}} nem elérhető – újrapróbálkozás {{ms}} másodperc múlva",
|
||||
"grantedTo": "Moderátori jogok biztosítva {{to}} számára!",
|
||||
"hostAskedUnmute": "Kérlek hangosítsd vissza a mikrofonod.",
|
||||
"invitedOneMember": "{{name}} meg lett hívva",
|
||||
"invitedThreePlusMembers": "{{name}} és {{count}} másik felhasználó meg lett hívva",
|
||||
"invitedTwoMembers": "{{first}} és {{second}} lett meghívva",
|
||||
"kickParticipant": "{{kicked}} résztvevőt kirúgta {{kicker}}",
|
||||
"leftOneMember": "{{name}} elhagyta az értekezletet",
|
||||
"leftThreePlusMembers": "{{name}} és mások elhagyták az értekezletet",
|
||||
"leftTwoMembers": "{{first}} és {{second}} elhagyták az értekezletet",
|
||||
"localRecordingStarted": "{{name}} elkezdte rögzíteni az értekezletet.",
|
||||
"localRecordingStopped": "{{name}} leállította a rögzítést.",
|
||||
"me": "Én",
|
||||
"moderationInEffectTitle": "A moderátor elnémította a mikrofonját",
|
||||
"moderator": "Moderátori jogok biztosítva!",
|
||||
"muted": "A beszélgetést elnémítva kezdte meg.",
|
||||
"mutedRemotelyDescription": "Bármikor visszahangosíthatja magát, ha készen áll a beszédre. Némítsa le magát ismét, ha a felesleges zajoktól meg kívánja védeni az értekezletet.",
|
||||
@@ -462,6 +563,10 @@
|
||||
"newDeviceAction": "Alkalmaz",
|
||||
"newDeviceAudioTitle": "Új hangeszköz észlelve",
|
||||
"newDeviceCameraTitle": "Új kamera észlelve",
|
||||
"noiseSuppressionFailedTitle": "Nem sikerült elindítani a zajcsökkentést",
|
||||
"noiseSuppressionNoTrackDescription": "Kérjük, először kapcsolja ki a mikrofon némítását.",
|
||||
"noiseSuppressionStereoDescription": "A sztereó zajcsökkentés jelenleg nem támogatott.",
|
||||
"participantWantsToJoin": "Csatlakozni szeretne az értekezlethez",
|
||||
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) egy másik résztvevő által eltávolítva",
|
||||
"passwordSetRemotely": "$t(lockRoomPasswordUppercase) egy másik résztvevő által beállítva",
|
||||
"raisedHand": "{{name}} beszélni szeretne.",
|
||||
@@ -472,9 +577,115 @@
|
||||
"suboptimalExperienceTitle": "Böngészőhiba",
|
||||
"unmute": "Visszahangosítás"
|
||||
},
|
||||
"participantsPane": {
|
||||
"actions": {
|
||||
"allow": "Engedélyezés a résztvevőknek, hogy:",
|
||||
"allowVideo": "Videó engedélyezése",
|
||||
"askUnmute": "Kérje a némítás feloldását",
|
||||
"audioModeration": "A némítást feloldhassák",
|
||||
"blockEveryoneMicCamera": "Block everyone's mic and camera",
|
||||
"invite": "Meghívás",
|
||||
"moreModerationActions": "További moderálási opciók",
|
||||
"moreModerationControls": "További moderálási vezérlők",
|
||||
"moreParticipantOptions": "Résztvevő további beállításai",
|
||||
"mute": "Némítás",
|
||||
"muteAll": "Mindenkit elnémít",
|
||||
"muteEveryoneElse": "Mute everyone else",
|
||||
"stopEveryonesVideo": "Mindenki videójának leállítása",
|
||||
"stopVideo": "Videó leállítása",
|
||||
"unblockEveryoneMicCamera": "Unblock everyone's mic and camera",
|
||||
"videoModeration": "Elindíthassák a videójukat"
|
||||
},
|
||||
"close": "Bezár",
|
||||
"header": "Résztvevők",
|
||||
"headings": {
|
||||
"lobby": "Lobby ({{count}})",
|
||||
"participantsList": "Résztvevők ({{count}})",
|
||||
"waitingLobby": "Lobby-ban várakozók ({{count}})"
|
||||
},
|
||||
"search": "Résztvevők keresése"
|
||||
},
|
||||
"passwordDigitsOnly": "Legfeljebb {{number}} szám",
|
||||
"passwordSetRemotely": "egy másik résztvevő által beállítva",
|
||||
"polls": {
|
||||
"answer": {
|
||||
"skip": "Kihagyás",
|
||||
"submit": "Küldés"
|
||||
},
|
||||
"by": "Létrehozta: {{ name }}",
|
||||
"create": {
|
||||
"addOption": "Opció hozzáadása",
|
||||
"answerPlaceholder": "Opció {{index}}",
|
||||
"cancel": "Mégsem",
|
||||
"create": "Szavazás létrehozása",
|
||||
"pollOption": "Opció {{index}}",
|
||||
"pollQuestion": "Szavazás kérdése",
|
||||
"questionPlaceholder": "Írja le a kérdést",
|
||||
"removeOption": "Opció eltávolítása",
|
||||
"send": "Küldés"
|
||||
},
|
||||
"notification": {
|
||||
"description": "Szavazás megnyitása",
|
||||
"title": "Új szavazás létrehozva"
|
||||
},
|
||||
"results": {
|
||||
"changeVote": "Módosítás",
|
||||
"empty": "Még nincsenek szavazások. Indítson szavazást itt!",
|
||||
"hideDetailedResults": "Részletek elrejtése",
|
||||
"showDetailedResults": "Részletek",
|
||||
"vote": "Szavazás"
|
||||
}
|
||||
},
|
||||
"poweredby": "Működteti a",
|
||||
"prejoin": {
|
||||
"audioAndVideoError": "Hang és videó hiba:",
|
||||
"audioDeviceProblem": "Hiba lépett fel az hangeszközzel",
|
||||
"audioOnlyError": "Hang hiba:",
|
||||
"audioTrackError": "Nem lehet a hangot rögzíteni.",
|
||||
"callMe": "Hívj fel",
|
||||
"callMeAtNumber": "Hívj fel ezen a számon:",
|
||||
"calling": "Hívás",
|
||||
"configuringDevices": "Eszköz beállítás...",
|
||||
"connectedWithAudioQ": "Csak hanggal szeretne csatlakozni?",
|
||||
"connection": {
|
||||
"good": "Az internet kapcsolat jónak tűnik!",
|
||||
"nonOptimal": "Az internet kapcsolat nem optimális",
|
||||
"poor": "Az internet kapcsolat nagyon gyenge!"
|
||||
},
|
||||
"connectionDetails": {
|
||||
"goodQuality": "Fantasztikus! A média minősége kiváló lesz."
|
||||
},
|
||||
"copyAndShare": "Másolom és megosztom az értekezlet linkjét",
|
||||
"dialInMeeting": "Behívás az értekezletbe",
|
||||
"dialInPin": "Behívás az értkezeletbe és megadom a PIN kódot:",
|
||||
"dialing": "Tárcsázás",
|
||||
"doNotShow": "Ne mutassa mégegyszer ezt a képernyőt",
|
||||
"errorDialOut": "Nem sikerült a behívás",
|
||||
"errorDialOutDisconnected": "Nem sikerült a behívás. Kapcsolat bontása",
|
||||
"errorDialOutFailed": "Nem sikerült a behívás. Hiba a hívásban",
|
||||
"errorDialOutStatus": "Hiba a hívás státusz megadásában",
|
||||
"errorMissingName": "Kérlet add meg a neved, hogy csatlakozhass a megbeszéléshez",
|
||||
"errorNoPermissions": "Engedélyeznie kell a mikrofonhoz és a kamerához való hozzáférést",
|
||||
"errorStatusCode": "Hiba a hiváskor, hiba kód: {{status}}",
|
||||
"errorValidation": "Hívószám validációs hiba",
|
||||
"iWantToDialIn": "Hívni szeretném",
|
||||
"initiated": "Hívás felépítés",
|
||||
"joinAudioByPhone": "Csatlakozás telefon beszélgetéssel",
|
||||
"joinMeeting": "Csatlakozás",
|
||||
"joinMeetingInLowBandwidthMode": "Csatlakozás alacsony sávszélességi módban",
|
||||
"joinWithoutAudio": "Csatlakozás hang nélkül",
|
||||
"keyboardShortcuts": "Gyorsbillentyűk engedélyezése",
|
||||
"linkCopied": "A link a vágólapra másolva",
|
||||
"lookGood": "A mikrofon megfelelően működik",
|
||||
"or": "vagy",
|
||||
"premeeting": "Csatlakozás előtt",
|
||||
"screenSharingError": "Képernyő megosztás hiba:",
|
||||
"showScreen": "Csatlakozás előtti kamerakép",
|
||||
"startWithPhone": "Kezdés telefonhanggal",
|
||||
"videoOnlyError": "Videó hiba:",
|
||||
"videoTrackError": "Nem sikerült a videó megjelenítés.",
|
||||
"viewAllNumbers": "Összes szám megjelenítése"
|
||||
},
|
||||
"presenceStatus": {
|
||||
"busy": "Foglalt",
|
||||
"calling": "Hívás…",
|
||||
@@ -509,13 +720,19 @@
|
||||
"failedToStart": "A felvétel indítása meghiúsult",
|
||||
"fileSharingdescription": "Felvétel megosztása az értekezlet résztvevőivel",
|
||||
"live": "ÉLŐ",
|
||||
"localRecordingNoNotificationWarning": "A felvételt nem közöljük más résztvevőkkel. Értesítenie kell velük, hogy a találkozót rögzítették.",
|
||||
"localRecordingStartWarning": "A megbeszélésből való kilépés előtt feltétlenül állítsa le a felvételt, hogy elmentse azt.",
|
||||
"localRecordingStartWarningTitle": "Állítsa le a felvételt a mentéshez",
|
||||
"localRecordingWarning": "Győződjön meg arról, hogy az aktuális lapot választotta a megfelelő videó és hang használatához. A felvétel jelenleg 1 GB-ra van korlátozva, ami körülbelül 100 perc.",
|
||||
"loggedIn": "Belépve mint {{userName}}",
|
||||
"off": "Felvétel leállítva",
|
||||
"offBy": "{{name}} leállította a felvételt",
|
||||
"on": "Felvétel",
|
||||
"onBy": "{{name}} elindította a felvételt",
|
||||
"onlyRecordSelf": "Csak az én hang- és videófolyamomat rögzítse",
|
||||
"pending": "Értekezlet rögzítésének előkészítése…",
|
||||
"rec": "REC",
|
||||
"saveLocalRecording": "Felvétel mentése helyileg (béta)",
|
||||
"serviceDescription": "A felvételt a rögzítési szolgáltatás veszi fel",
|
||||
"serviceName": "Felvétel szolgáltatás",
|
||||
"signIn": "Belépés",
|
||||
@@ -527,6 +744,12 @@
|
||||
"sectionList": {
|
||||
"pullToRefresh": "Húzás a frissítéshez"
|
||||
},
|
||||
"security": {
|
||||
"about": "Hozzáadhat jelszót az értekezlethez. A résztvevőknek meg kell adniuk a jelszót, mielőtt csatlakozhatnak az értekezlethez.",
|
||||
"aboutReadOnly": "A moderátor résztvevői hozzáadhatnak egy jelszót az értekezlethez. A résztvevőknek meg kell adniuk a jelszót, mielőtt csatlakozhatnak az értekezlethez.",
|
||||
"header": "Biztonsági beállítások",
|
||||
"insecureRoomNameWarning": "The room name is unsafe. Unwanted participants may join your conference. Consider securing your meeting using the security button."
|
||||
},
|
||||
"settings": {
|
||||
"calendar": {
|
||||
"about": "A {{appName}} naptárintegráció a naptár biztonságos elérésére szolgál, így olvasni tudja a soron következő eseményeket.",
|
||||
@@ -535,8 +758,13 @@
|
||||
"signedIn": "Jelenleg ehhez az címhez tartozó naptár eseményei érhetőek el: {{email}}. Alább a „szétkapcsolás” gombra kattintva lehet leállítani a naptár eseményeinek elérését.",
|
||||
"title": "Naptár"
|
||||
},
|
||||
"desktopShareFramerate": "Képernyőmegosztás sebessége (FPS)",
|
||||
"desktopShareHighFpsWarning": "A nagyobb képkockasebesség az asztali megosztásnál hatással lehet a sávszélességre. Az új beállítások érvénybe léptetéséhez újra kell indítania a képernyőmegosztást.",
|
||||
"desktopShareWarning": "Az új beállítások érvénybe léptetéséhez újra kell indítania a képernyőmegosztást.",
|
||||
"devices": "Eszközök",
|
||||
"followMe": "Mindenki engem kövessen",
|
||||
"framesPerSecond": "képkocka / másodperc",
|
||||
"incomingMessage": "Bejövő üzenet",
|
||||
"language": "Nyelv",
|
||||
"loggedIn": "Belépve mint {{name}}",
|
||||
"microphones": "Mikrofonok",
|
||||
@@ -544,12 +772,22 @@
|
||||
"more": "Továbbiak",
|
||||
"name": "Név",
|
||||
"noDevice": "Nincs",
|
||||
"participantJoined": "Résztvevő csatlakozott",
|
||||
"participantKnocking": "Résztvevő belépett a lobby-ba",
|
||||
"participantLeft": "Résztvevő kilépett",
|
||||
"playSounds": "Hangok lejátszása a következőkhöz:",
|
||||
"reactions": "Meeting reakciók",
|
||||
"sameAsSystem": "Rendszerhang ({{label}})",
|
||||
"selectAudioOutput": "Hangkimenet",
|
||||
"selectCamera": "Kamera",
|
||||
"selectMic": "Mikrofon",
|
||||
"selfView": "Saját kép",
|
||||
"sounds": "Hangok",
|
||||
"speakers": "Hangszórók",
|
||||
"startAudioMuted": "Mindenki elnémítva kezd",
|
||||
"startReactionsMuted": "Reakció hangok némítása mindenki számára",
|
||||
"startVideoMuted": "Mindenki videó nélkül kezd",
|
||||
"talkWhileMuted": "Lenémított beszéd",
|
||||
"title": "Beállítások"
|
||||
},
|
||||
"settingsView": {
|
||||
@@ -577,14 +815,23 @@
|
||||
},
|
||||
"speaker": "Hangszóró",
|
||||
"speakerStats": {
|
||||
"angry": "Mérges",
|
||||
"disgusted": "Felháborodott",
|
||||
"fearful": "Félelmetes",
|
||||
"happy": "Boldog",
|
||||
"hours": "{{count}} h",
|
||||
"minutes": "{{count}} perc",
|
||||
"name": "Név",
|
||||
"neutral": "Semleges",
|
||||
"sad": "Szomorú",
|
||||
"search": "Keresés",
|
||||
"seconds": "{{count}} mp",
|
||||
"speakerStats": "Beszélő statisztika",
|
||||
"speakerTime": "Beszélő ideje"
|
||||
"speakerTime": "Beszélő ideje",
|
||||
"surprised": "Meglepett"
|
||||
},
|
||||
"startupoverlay": {
|
||||
"genericTitle": "Az értekezlethez engedélyezni kell a mikrofont és kamerát.",
|
||||
"policyText": " ",
|
||||
"title": "A {{app}} használni szeretné a mikrofont és a kamerát."
|
||||
},
|
||||
@@ -599,36 +846,49 @@
|
||||
"Settings": "Beállítások átváltása",
|
||||
"audioOnly": "Csak a hang átváltása",
|
||||
"audioRoute": "Hangeszköz kijelölése",
|
||||
"boo": "Szomorú",
|
||||
"callQuality": "Videóminőség kezelése",
|
||||
"cc": "Feliratok átváltása",
|
||||
"chat": "Csevegés ablak átváltása",
|
||||
"clap": "Taps",
|
||||
"document": "Megosztott dokumentum átváltása",
|
||||
"download": "Alkalmazás letöltése",
|
||||
"embedMeeting": "Meeting beágyazása",
|
||||
"feedback": "Visszajelzés küldése",
|
||||
"fullScreen": "Teljes képernyő átváltása",
|
||||
"grantModerator": "Moderátori jogok megadása",
|
||||
"hangup": "Beszélgetés elhagyása",
|
||||
"help": "Súgó",
|
||||
"invite": "Személyek meghívása",
|
||||
"kick": "Résztvevő kirúgása",
|
||||
"laugh": "Nevetés",
|
||||
"like": "Hüvelykujj fel",
|
||||
"localRecording": "Helyi felvétel vezérlőelemeinek átváltása",
|
||||
"lockRoom": "Értekezlet jelszavának átváltása",
|
||||
"moreActions": "További műveltek menü átváltása",
|
||||
"moreActionsMenu": "További műveltek menü",
|
||||
"moreActions": "További műveletek menü átváltása",
|
||||
"moreActionsMenu": "További műveletek menü",
|
||||
"moreOptions": "További beállítások megjelenítése",
|
||||
"mute": "Hang némításának átváltása",
|
||||
"muteEveryone": "Mindenki elnémítása",
|
||||
"muteEveryonesVideoStream": "Mindenki videójának leállítása",
|
||||
"noiseSuppression": "Zajcsökkentés",
|
||||
"participants": "Résztvevők",
|
||||
"pip": "Kép és képben mód átváltása",
|
||||
"privateMessage": "Privát üzenet küldése",
|
||||
"profile": "Adja meg a profilját",
|
||||
"raiseHand": "Kéz felemelésének átváltása",
|
||||
"recording": "Felvétel átváltása",
|
||||
"remoteMute": "Résztvevők némítása",
|
||||
"security": "Biztonsági Beállítások",
|
||||
"shareRoom": "Valaki meghívása",
|
||||
"shareYourScreen": "Képernyőmegosztás átváltása",
|
||||
"shareaudio": "Hang megosztása",
|
||||
"sharedvideo": "Videó megosztásának átváltása",
|
||||
"shortcuts": "Gyorsbillentyűk átváltása",
|
||||
"show": "Megjelenítés a színpadon",
|
||||
"silence": "Néma",
|
||||
"speakerStats": "Beszélő statisztika átváltása",
|
||||
"surprised": "Meglepett",
|
||||
"tileView": "Mozaikos nézet átváltása",
|
||||
"toggleCamera": "Kamera átváltása",
|
||||
"toggleFilmstrip": "Filmszalag átváltása",
|
||||
@@ -639,13 +899,18 @@
|
||||
"audioOnlyOff": "Alacsony sávszélességű mód letiltása",
|
||||
"audioOnlyOn": "Alacsony sávszélességű mód engedélyezése",
|
||||
"audioRoute": "Hangeszköz kijelölése",
|
||||
"audioSettings": "Hangbeállítások",
|
||||
"authenticate": "Hitelesítés",
|
||||
"boo": "Szomorú",
|
||||
"callQuality": "Videominőség kezelése",
|
||||
"chat": "Csevegés megnyitása / bezárása",
|
||||
"clap": "Taps",
|
||||
"closeChat": "Csevegés bezárása",
|
||||
"disableReactionSounds": "Kikapcsolhatja a reakcióhangokat a Meeting-en",
|
||||
"documentClose": "Megosztott dokumentum bezárása",
|
||||
"documentOpen": "Megosztott dokumentum megnyitása",
|
||||
"download": "Alkalmazás letöltése",
|
||||
"embedMeeting": "Meeting beágyazása",
|
||||
"enterFullScreen": "Teljes képernyős megtekintés",
|
||||
"enterTileView": "Mozaikos nézet indítása",
|
||||
"exitFullScreen": "Kilépés a teljes képernyőből",
|
||||
@@ -654,10 +919,14 @@
|
||||
"hangup": "Kilépés",
|
||||
"help": "Súgó",
|
||||
"invite": "Személyek meghívása",
|
||||
"joinBreakoutRoom": "Csatlakozás a pihenőszobához",
|
||||
"laugh": "Nevetés",
|
||||
"leaveBreakoutRoom": "Pihenőszoba elhagyása",
|
||||
"like": "Hüvelykujj fel",
|
||||
"login": "Bejelentkezés",
|
||||
"logout": "Kijelentkezés",
|
||||
"lowerYourHand": "Kéz leengedése",
|
||||
"moreActions": "További műveltek",
|
||||
"moreActions": "További műveletek",
|
||||
"moreOptions": "További beállítások",
|
||||
"mute": "Némítás / Visszahangosítás",
|
||||
"muteEveryone": "Mindenki elnémítása",
|
||||
@@ -666,28 +935,42 @@
|
||||
"noAudioSignalDialInDesc": "Be is tárcsázhat:",
|
||||
"noAudioSignalDialInLinkDesc": "Betárcsázási számok",
|
||||
"noAudioSignalTitle": "Nincs bemenet a mikrofonjáról!",
|
||||
"noiseSuppression": "Zajcsökkentés",
|
||||
"noisyAudioInputDesc": "Úgy tűnik, hogy ez a mikrofon zajos. Le kellene némítani vagy cserélni az eszközt.",
|
||||
"noisyAudioInputTitle": "Zajosnak tűnik a mikrofonja!",
|
||||
"openChat": "Csevegés megnyitása",
|
||||
"participants": "Résztvevők",
|
||||
"pip": "Belépés kép a képben módba",
|
||||
"privateMessage": "Privát üzenet küldése",
|
||||
"profile": "Adja meg a profilját",
|
||||
"raiseHand": "Kéz felemelése / leengedése",
|
||||
"raiseYourHand": "Kéz felemelése",
|
||||
"reactionBoo": "Boo reakció küldése",
|
||||
"reactionClap": "Tapsolás reakció küldése",
|
||||
"reactionLaugh": "Nevetés reakció küldése",
|
||||
"reactionLike": "Hüvelykujj fel reakció küldése",
|
||||
"reactionSilence": "Néma arc reakció küldése",
|
||||
"reactionSurprised": "Meglepett reakció küldése",
|
||||
"security": "Biztonsági Beállítások",
|
||||
"selectBackground": "Háttér beállítása",
|
||||
"shareRoom": "Valaki meghívása",
|
||||
"shareaudio": "Hang megosztása",
|
||||
"sharedvideo": "Videó megosztása",
|
||||
"shortcuts": "Gyorsbillentyűk megtekintése",
|
||||
"silence": "Néma",
|
||||
"speakerStats": "Beszélő statisztika",
|
||||
"startScreenSharing": "Képernyőmegosztás kezdése",
|
||||
"startSubtitles": "Feliratok kezdése",
|
||||
"startvideoblur": "Háttér elhomályosítása",
|
||||
"stopScreenSharing": "Képernyőmegosztás leállítása",
|
||||
"stopSharedVideo": "Videó leállítása",
|
||||
"stopSharedVideo": "Kamera leállítása",
|
||||
"stopSubtitles": "Felirat leállítása",
|
||||
"stopvideoblur": "Háttér elhomályosításának letiltása",
|
||||
"surprised": "Meglepett",
|
||||
"talkWhileMutedPopup": "Úgy tűnik beszélni szeretne, de le van némítva.",
|
||||
"tileViewToggle": "Mozaikos nézet átváltása",
|
||||
"toggleCamera": "Kamera átváltása",
|
||||
"videoSettings": "Videóbeállítások",
|
||||
"videomute": "Kamera indítása / leállítása"
|
||||
},
|
||||
"transcribing": {
|
||||
@@ -725,12 +1008,15 @@
|
||||
"pending": "{{displayName}} -t meghívta"
|
||||
},
|
||||
"videoStatus": {
|
||||
"adjustFor": "Igazítsa a legjobb:",
|
||||
"audioOnly": "CsH",
|
||||
"audioOnlyExpanded": "Jelenleg az alacsony sávszélességű mód az aktív, vagyis csak hangot lehet fogadni és képernyőmegosztást.",
|
||||
"bestPerformance": "Teljesítményhez",
|
||||
"callQuality": "Videominőség",
|
||||
"hd": "MF",
|
||||
"hdTooltip": "Magas felbontású videó megtekintése",
|
||||
"highDefinition": "Magas felbontású",
|
||||
"highestQuality": "Minőséghez",
|
||||
"labelTooiltipNoVideo": "Nincs videó",
|
||||
"labelTooltipAudioOnly": "Alacsony sávszélességű mód aktiválva",
|
||||
"ld": "AF",
|
||||
@@ -738,6 +1024,7 @@
|
||||
"lowDefinition": "Alacsony felbontású",
|
||||
"onlyAudioAvailable": "„Csak hang” mód elérhető",
|
||||
"onlyAudioSupported": "Csak a hang támogatott ebben a böngészőben.",
|
||||
"performanceSettings": "Teljesítménybeállítások",
|
||||
"sd": "SF",
|
||||
"sdTooltip": "Szabványos felbontású videó megtekintése",
|
||||
"standardDefinition": "Szabványos felbontású"
|
||||
@@ -745,7 +1032,10 @@
|
||||
"videothumbnail": {
|
||||
"domute": "Némítás",
|
||||
"domuteOthers": "Mindenki más elnémítása",
|
||||
"domuteVideoOfOthers": "Mindenki más kamerájának letiltása",
|
||||
"flip": "Tükrözés",
|
||||
"grantModerator": "Moderátori jogok megadása",
|
||||
"hideSelfView": "Saját kép elrejtése",
|
||||
"kick": "Kirúgás",
|
||||
"moderator": "Moderátor",
|
||||
"mute": "A résztvevő le van némítva",
|
||||
@@ -754,6 +1044,29 @@
|
||||
"show": "Megjelenítés a színpadon",
|
||||
"videomute": "A résztvevő leállította a kameráját"
|
||||
},
|
||||
"virtualBackground": {
|
||||
"addBackground": "Háttér hozzáadása",
|
||||
"apply": "Alkalmaz",
|
||||
"backgroundEffectError": "Hiba a háttér effekt hozzáadásnál.",
|
||||
"blur": "Elmosódott",
|
||||
"deleteImage": "Delete image",
|
||||
"desktopShare": "Asztal megosztása",
|
||||
"desktopShareError": "Nem lehet asztalt megosztani",
|
||||
"image1": "Tengerpart",
|
||||
"image2": "Fehér semleges fal",
|
||||
"image3": "Fehér üres szoba",
|
||||
"image4": "Fekete állólámpa",
|
||||
"image5": "Hegy",
|
||||
"image6": "Erdő",
|
||||
"image7": "Napfelkelte",
|
||||
"none": "Nincs",
|
||||
"pleaseWait": "Kérjük várjon...",
|
||||
"removeBackground": "Háttér eltávolítása",
|
||||
"slightBlur": "Enyhén elmosódott",
|
||||
"title": "Virtuális háttérképek",
|
||||
"uploadedImage": "Feltöltött kép {{index}}"
|
||||
},
|
||||
"volumeSlider": "Hangerő szabályzó",
|
||||
"welcomepage": {
|
||||
"accessibilityLabel": {
|
||||
"join": "Koppintson a csatlakozáshoz",
|
||||
@@ -771,17 +1084,20 @@
|
||||
"getHelp": "Segítség kérése",
|
||||
"go": "Indítás",
|
||||
"goSmall": "Indítás",
|
||||
"headerSubtitle": "Biztonságos és magas színvonalú konferenciák",
|
||||
"info": "Információ",
|
||||
"jitsiOnMobile": "Jitsi Mobil – töltse le az app-ot, és indítson megbeszélést bárhonnan",
|
||||
"join": "LÉTREHOZ /HOZZÁAD",
|
||||
"privacy": "Adatvédelem",
|
||||
"recentList": "Legutóbbi",
|
||||
"recentListDelete": "Törlés",
|
||||
"recentListDelete": "Lista törlés",
|
||||
"recentListEmpty": "A legutóbbi lista jelenleg üres. Csevegjen a csapattal és minden előző értekezlet itt lesz megtalálható.",
|
||||
"reducedUIText": "Üdvözlet a {{app}} programban!",
|
||||
"roomNameAllowedChars": "Az értekezlet neve nem tartalmazhatja a következő karaktereket: ?, &, :, ', \", %, #.",
|
||||
"roomname": "Adja meg a szoba nevét",
|
||||
"roomnameHint": "Adja meg a kívánt nevet vagy URL-t, amelyhez csatlakozni szeretne. Bármiképp elnevezheti, csak ossza meg az értekezlet résztvevőivel, hogy ők ugyanezt a nevet tudják majd megadni.",
|
||||
"sendFeedback": "Visszajelzés küldése",
|
||||
"startMeeting": "Csatlakozás",
|
||||
"terms": "Feltételek",
|
||||
"title": "Biztonságos, maradéktalanul felszerelt és teljesen ingyenes videokonferencia"
|
||||
}
|
||||
|
||||
@@ -1067,7 +1067,6 @@
|
||||
"chat": "Conversazione",
|
||||
"clap": "Applaudi",
|
||||
"collapse": "Riduci",
|
||||
"dock": "Aggancia alla finestra principale",
|
||||
"document": "Documenti condivisi",
|
||||
"download": "Scarica le nostre app",
|
||||
"embedMeeting": "Incorpora riunione altrove",
|
||||
@@ -1121,7 +1120,6 @@
|
||||
"tileView": "Vedi tutti i partecipanti, o uno solo",
|
||||
"toggleCamera": "Cambia videocamera",
|
||||
"toggleFilmstrip": "Pellicola",
|
||||
"undock": "Sgancia in una finestra separata",
|
||||
"videoblur": "Sfoca video",
|
||||
"videomute": "Videocamera",
|
||||
"whiteboard": "Usa lavagna"
|
||||
@@ -1140,7 +1138,6 @@
|
||||
"closeReactionsMenu": "Chiudi il menù reazioni",
|
||||
"disableNoiseSuppression": "Interrompi riduzione rumore",
|
||||
"disableReactionSounds": "Puoi disattivare i suoni delle reaction, in questa riunione",
|
||||
"dock": "Aggancia nella finestra principale",
|
||||
"documentClose": "Chiudi documento condiviso",
|
||||
"documentOpen": "Apri documento condiviso",
|
||||
"download": "Scarica le nostre app",
|
||||
@@ -1214,7 +1211,6 @@
|
||||
"talkWhileMutedPopup": "Stai provando a parlare? Il microfono è disattivato.",
|
||||
"tileViewToggle": "Vedi tutti i partecipanti insieme, o uno solo",
|
||||
"toggleCamera": "Cambia videocamera",
|
||||
"undock": "Sgancia in una finestra separata",
|
||||
"videoSettings": "Impostazioni video",
|
||||
"videomute": "Videocamera"
|
||||
},
|
||||
|
||||
@@ -1057,7 +1057,6 @@
|
||||
"chat": "Przełączanie okna rozmowy",
|
||||
"clap": "Klaskanie",
|
||||
"collapse": "Zwiń",
|
||||
"dock": "Zadokuj w głównym oknie",
|
||||
"document": "Przełączanie wspólnego dokumentu",
|
||||
"download": "Pobierz nasze aplikacje",
|
||||
"embedMeeting": "Osadź spotkanie",
|
||||
@@ -1109,7 +1108,6 @@
|
||||
"tileView": "Przełącz widok kafelkowy",
|
||||
"toggleCamera": "Przełączanie kamery",
|
||||
"toggleFilmstrip": "Przełącz filmstrip",
|
||||
"undock": "Oddokuj w osobnym oknie",
|
||||
"videoblur": "Przełącz rozmazanie obrazu",
|
||||
"videomute": "Przełączanie wyciszonego filmu wideo"
|
||||
},
|
||||
@@ -1127,7 +1125,6 @@
|
||||
"closeReactionsMenu": "Zamknij reakcje",
|
||||
"disableNoiseSuppression": "Wyłącz tłumienie szumów",
|
||||
"disableReactionSounds": "Wyłącz dźwięki reakcji dla tego spotkania",
|
||||
"dock": "Zadokuj w głównym oknie",
|
||||
"documentClose": "Zamknij udostępniony dokument",
|
||||
"documentOpen": "Otwarty udostępniony dokument",
|
||||
"download": "Pobierz nasze aplikacje",
|
||||
@@ -1197,7 +1194,6 @@
|
||||
"talkWhileMutedPopup": "Próbujesz mówić? Jesteś wyciszony.",
|
||||
"tileViewToggle": "Przełączanie kafelkowego widoku",
|
||||
"toggleCamera": "Przełączanie kamery",
|
||||
"undock": "Oddokuj w osobnym oknie",
|
||||
"videoSettings": "Ustawienia video",
|
||||
"videomute": "Włącz / Wyłącz kamerę"
|
||||
},
|
||||
|
||||
@@ -1067,7 +1067,6 @@
|
||||
"chat": "Abrir / Fechar chat",
|
||||
"clap": "Aplausos",
|
||||
"collapse": "Colapsar",
|
||||
"dock": "Ancorar na janela principal",
|
||||
"document": "Mudar para documento partilhado",
|
||||
"download": "Descarregar as nossas aplicações",
|
||||
"embedMeeting": "Reunião incorporada",
|
||||
@@ -1121,7 +1120,6 @@
|
||||
"tileView": "Mudar a vista em quadrícula",
|
||||
"toggleCamera": "Mudar a câmara",
|
||||
"toggleFilmstrip": "Mudar a película de filme",
|
||||
"undock": "Desancorar numa janela separada",
|
||||
"videoblur": "Mudar o desfoque de vídeo",
|
||||
"videomute": "Iniciar / Parar câmara",
|
||||
"whiteboard": "Mostrar / Esconder quadro branco"
|
||||
@@ -1140,7 +1138,6 @@
|
||||
"closeReactionsMenu": "Fechar menu de reações",
|
||||
"disableNoiseSuppression": "Desativar a supressão de ruído",
|
||||
"disableReactionSounds": "Pode desactivar os sons de reacção para esta reunião",
|
||||
"dock": "Ancorar na janela principal",
|
||||
"documentClose": "Fechar documento partilhado",
|
||||
"documentOpen": "Abrir documento partilhado",
|
||||
"download": "Descarregar as nossas aplicações",
|
||||
@@ -1214,7 +1211,6 @@
|
||||
"talkWhileMutedPopup": "Está a tentar falar? Está com o microfone desativado.",
|
||||
"tileViewToggle": "Mudar para vista em quadrícula",
|
||||
"toggleCamera": "Mudar a câmara",
|
||||
"undock": "Desancorar numa janela separada",
|
||||
"videoSettings": "Definições de vídeo",
|
||||
"videomute": "Iniciar / Parar câmara"
|
||||
},
|
||||
|
||||
@@ -1067,7 +1067,6 @@
|
||||
"chat": "Öppna eller stäng chattfönster",
|
||||
"clap": "Klappa",
|
||||
"collapse": "Kollaps",
|
||||
"dock": "Docka i huvudfönstret",
|
||||
"document": "Öppna eller stäng delat dokument",
|
||||
"download": "Ladda ner app",
|
||||
"embedMeeting": "Bädda in möte",
|
||||
@@ -1121,7 +1120,6 @@
|
||||
"tileView": "Öppna eller stäng panelvyn",
|
||||
"toggleCamera": "Växla kamera",
|
||||
"toggleFilmstrip": "Växla filmremsa",
|
||||
"undock": "Lossa till ett separat fönster",
|
||||
"videoblur": "Växla videooskärpa",
|
||||
"videomute": "Sätt på eller stäng av mikrofonen",
|
||||
"whiteboard": "Visa/dölj whiteboardtavlan"
|
||||
@@ -1140,7 +1138,6 @@
|
||||
"closeReactionsMenu": "Stäng meny för reaktioner",
|
||||
"disableNoiseSuppression": "Inaktivera brusreducering",
|
||||
"disableReactionSounds": "Du kan inaktivera reaktionsljud för det här mötet",
|
||||
"dock": "Docka i huvudfönstret",
|
||||
"documentClose": "Stäng delat dokument",
|
||||
"documentOpen": "Öppna delat dokument",
|
||||
"download": "Ladda ner vår app",
|
||||
@@ -1214,7 +1211,6 @@
|
||||
"talkWhileMutedPopup": "Försöker du tala? Din mikrofon är tystad.",
|
||||
"tileViewToggle": "Öppna eller stäng panelvyn",
|
||||
"toggleCamera": "Byta kamera",
|
||||
"undock": "Lossa till ett separat fönster",
|
||||
"videoSettings": "Video inställningar",
|
||||
"videomute": "Aktivera / avaktivera kameran"
|
||||
},
|
||||
|
||||
@@ -1067,7 +1067,6 @@
|
||||
"chat": "Mesajlaşma penceresini aç/kapat",
|
||||
"clap": "Alkış",
|
||||
"collapse": "Daralt",
|
||||
"dock": "Ana pencerede sabitleyin",
|
||||
"document": "Paylaşılan dokümanı aç/kapat",
|
||||
"download": "Uygulamalarımızı indirin",
|
||||
"embedMeeting": "Toplantıyı yerleştir",
|
||||
@@ -1121,7 +1120,6 @@
|
||||
"tileView": "Döşeme görünümünü aç/kapat",
|
||||
"toggleCamera": "Kamerayı değiştir",
|
||||
"toggleFilmstrip": "Film şeridini aç/kapat",
|
||||
"undock": "Ayrı pencereye çıkarın",
|
||||
"videoblur": "Video bulanıklaştırma aç/kapat",
|
||||
"videomute": "Sessiz videoyu aç/kapat",
|
||||
"whiteboard": "Beyaztahtayı Göster / Gizle"
|
||||
@@ -1140,7 +1138,6 @@
|
||||
"closeReactionsMenu": "Reaksiyon menüsünü kapat",
|
||||
"disableNoiseSuppression": "",
|
||||
"disableReactionSounds": "Toplantı için reaksiyon seslerini devre dışı bırak",
|
||||
"dock": "Ana pencerede sabitleyin",
|
||||
"documentClose": "Paylaşılan dokümanı kapat",
|
||||
"documentOpen": "Paylaşılan dokümanı aç",
|
||||
"download": "Uygulamalarımızı indirin",
|
||||
@@ -1214,7 +1211,6 @@
|
||||
"talkWhileMutedPopup": "Bir şey mi dediniz? Mikrofonunuz kapalı.",
|
||||
"tileViewToggle": "Döşeme görünümünü aç/kapat",
|
||||
"toggleCamera": "Kamerayı değiştir",
|
||||
"undock": "Ayrı pencereye çıkarın",
|
||||
"videoSettings": "Video ayarları",
|
||||
"videomute": "Kamera başlat / durdur"
|
||||
},
|
||||
|
||||
@@ -1067,7 +1067,6 @@
|
||||
"chat": "Показати/приховати чат",
|
||||
"clap": "Овації",
|
||||
"collapse": "Згорнути",
|
||||
"dock": "Закріпити в головному вікні",
|
||||
"document": "Відкрити/закрити спільний документ",
|
||||
"download": "Звантажити мобільний застосунок",
|
||||
"embedMeeting": "Вставити зустріч",
|
||||
@@ -1121,7 +1120,6 @@
|
||||
"tileView": "Увімкнути/вимкнути плитки",
|
||||
"toggleCamera": "Увімкнути/вимкнути камеру",
|
||||
"toggleFilmstrip": "Показати/приховати панель видів",
|
||||
"undock": "Відкріпити в окремому вікні",
|
||||
"videoblur": "Увімкнути/вимкнути розмиття фону",
|
||||
"videomute": "Увімкнути/вимкнути камеру",
|
||||
"whiteboard": "Показати/приховати дошку"
|
||||
@@ -1140,7 +1138,6 @@
|
||||
"closeReactionsMenu": "Закрити меню реакцій",
|
||||
"disableNoiseSuppression": "Вимкнути придушення шуму",
|
||||
"disableReactionSounds": "Ви можете вимкнути звуки реакції для цієї зустрічі",
|
||||
"dock": "Закріпити в головному вікні",
|
||||
"documentClose": "Закрити спільний документ",
|
||||
"documentOpen": "Відкрити спільний документ",
|
||||
"download": "Звантажити мобільний застосунок",
|
||||
@@ -1214,7 +1211,6 @@
|
||||
"talkWhileMutedPopup": "Намагаєтесь говорити? Ваш мікрофон вимкнено.",
|
||||
"tileViewToggle": "Плитки",
|
||||
"toggleCamera": "Увімкнути/вимкнути камеру",
|
||||
"undock": "Відкріпити в окремому вікні",
|
||||
"videoSettings": "Налаштування камери",
|
||||
"videomute": "Камера"
|
||||
},
|
||||
|
||||
@@ -1067,7 +1067,6 @@
|
||||
"chat": "打开/关闭聊天窗口",
|
||||
"clap": "鼓掌",
|
||||
"collapse": "收起",
|
||||
"dock": "在主窗口停靠",
|
||||
"document": "开启/关闭文件共享",
|
||||
"download": "下载应用",
|
||||
"embedMeeting": "嵌入会议",
|
||||
@@ -1121,7 +1120,6 @@
|
||||
"tileView": "开启/关闭画廊视图",
|
||||
"toggleCamera": "开启/关闭摄像头",
|
||||
"toggleFilmstrip": "开启/关闭幻灯片",
|
||||
"undock": "取消停靠到单独的窗口",
|
||||
"videoblur": "开启/关闭视频模糊",
|
||||
"videomute": "启动/停止摄像头",
|
||||
"whiteboard": "显示/隐藏白板"
|
||||
@@ -1140,7 +1138,6 @@
|
||||
"closeReactionsMenu": "关闭反应菜单",
|
||||
"disableNoiseSuppression": "关闭噪音抑制",
|
||||
"disableReactionSounds": "你可以禁用此会议的反应声音",
|
||||
"dock": "在主窗口停靠",
|
||||
"documentClose": "关闭文件共享",
|
||||
"documentOpen": "开启文件共享",
|
||||
"download": "下载我们的APP",
|
||||
@@ -1214,7 +1211,6 @@
|
||||
"talkWhileMutedPopup": "你在尝试发言吗? 当前你是静音状态。",
|
||||
"tileViewToggle": "画面模式",
|
||||
"toggleCamera": "开启/关闭摄像头",
|
||||
"undock": "取消停靠到单独的窗口",
|
||||
"videoSettings": "视频设置",
|
||||
"videomute": "开启/关闭摄像头"
|
||||
},
|
||||
|
||||
@@ -1067,7 +1067,6 @@
|
||||
"chat": "打開/關閉聊天視窗",
|
||||
"clap": "鼓掌",
|
||||
"collapse": "收回",
|
||||
"dock": "停靠在主視窗中",
|
||||
"document": "啟用/停用分享文檔",
|
||||
"download": "下載我們的應用程式",
|
||||
"embedMeeting": "嵌入會議",
|
||||
@@ -1121,7 +1120,6 @@
|
||||
"tileView": "啟用/停用畫廊檢視",
|
||||
"toggleCamera": "啟用/停用網路攝影機",
|
||||
"toggleFilmstrip": "啟用/停用簡報",
|
||||
"undock": "取消停靠到單獨的视窗",
|
||||
"videoblur": "啟用/停用畫面模糊",
|
||||
"videomute": "啟用/停用網路攝影機",
|
||||
"whiteboard": "啟用/停用白板"
|
||||
@@ -1140,7 +1138,6 @@
|
||||
"closeReactionsMenu": "關閉反應選單",
|
||||
"disableNoiseSuppression": "停用雜訊抑制",
|
||||
"disableReactionSounds": "您可以停用此會議的反應音效",
|
||||
"dock": "停靠在主視窗中",
|
||||
"documentClose": "關閉分享檔案欄",
|
||||
"documentOpen": "開啟分享檔案欄",
|
||||
"download": "下載我們的應用程式",
|
||||
@@ -1214,7 +1211,6 @@
|
||||
"talkWhileMutedPopup": "您要發言嗎?目前您處於靜音。",
|
||||
"tileViewToggle": "啟動/停用畫廊檢視",
|
||||
"toggleCamera": "啟動/停用網路攝影機",
|
||||
"undock": "取消停靠到單獨的视窗",
|
||||
"videoSettings": "視訊設定",
|
||||
"videomute": "啟動/停用網路攝影機"
|
||||
},
|
||||
|
||||
@@ -147,6 +147,7 @@
|
||||
"bridgeCount": "Server count: ",
|
||||
"codecs": "Codecs (A/V): ",
|
||||
"connectedTo": "Connected to:",
|
||||
"e2eeVerified": "E2EE verified:",
|
||||
"framerate": "Frame rate:",
|
||||
"less": "Show less",
|
||||
"localaddress": "Local address:",
|
||||
@@ -408,6 +409,10 @@
|
||||
"user": "User",
|
||||
"userIdentifier": "User identifier",
|
||||
"userPassword": "User password",
|
||||
"verifyParticipantConfirm": "They match",
|
||||
"verifyParticipantDismiss": "They do not match",
|
||||
"verifyParticipantQuestion": "EXPERIMENTAL: Ask participant {{participantName}} if they see the same content, in the same order.",
|
||||
"verifyParticipantTitle": "User verification",
|
||||
"videoLink": "Video link",
|
||||
"viewUpgradeOptions": "View upgrade options",
|
||||
"viewUpgradeOptionsContent": "To get unlimited access to premium features like recording, transcriptions, RTMP Streaming & more, you'll need to upgrade your plan.",
|
||||
@@ -437,9 +442,6 @@
|
||||
"noResults": "No results found :(",
|
||||
"search": "Search GIPHY"
|
||||
},
|
||||
"helpView": {
|
||||
"title": "Help center"
|
||||
},
|
||||
"incomingCall": {
|
||||
"answer": "Answer",
|
||||
"audioCallTitle": "Incoming call",
|
||||
@@ -511,7 +513,7 @@
|
||||
"mute": "Mute or unmute your microphone",
|
||||
"pushToTalk": "Push to talk",
|
||||
"raiseHand": "Raise or lower your hand",
|
||||
"showSpeakerStats": "Show speaker stats",
|
||||
"showSpeakerStats": "Show participants stats",
|
||||
"toggleChat": "Open or close the chat",
|
||||
"toggleFilmstrip": "Show or hide video thumbnails",
|
||||
"toggleParticipantsPane": "Show or hide the participants pane",
|
||||
@@ -563,7 +565,6 @@
|
||||
"lobby": {
|
||||
"admit": "Admit",
|
||||
"admitAll": "Admit all",
|
||||
"allow": "Allow",
|
||||
"backToKnockModeButton": "Ask to join",
|
||||
"chat": "Chat",
|
||||
"dialogTitle": "Lobby mode",
|
||||
@@ -649,6 +650,8 @@
|
||||
"connectedOneMember": "{{name}} joined the meeting",
|
||||
"connectedThreePlusMembers": "{{name}} and many others joined the meeting",
|
||||
"connectedTwoMembers": "{{first}} and {{second}} joined the meeting",
|
||||
"dataChannelClosed": "Video quality impaired",
|
||||
"dataChannelClosedDescription": "The bridge channel has been disconnected and thus video quality is limited to its lowest setting.",
|
||||
"disconnected": "disconnected",
|
||||
"displayNotifications": "Display notifications for",
|
||||
"focus": "Conference focus",
|
||||
@@ -709,6 +712,8 @@
|
||||
"reactionSoundsForAll": "Disable sounds for all",
|
||||
"screenShareNoAudio": "Share audio box was not checked in the window selection screen.",
|
||||
"screenShareNoAudioTitle": "Couldn't share system audio!",
|
||||
"screenSharingAudioOnlyDescription": "Please note that by sharing your screen you're affecting the \"Best performance\" mode and you will use more bandwidth.",
|
||||
"screenSharingAudioOnlyTitle": "\"Best performance\" mode",
|
||||
"selfViewTitle": "You can always un-hide the self-view from settings",
|
||||
"somebody": "Somebody",
|
||||
"startSilentDescription": "Rejoin the meeting to enable audio",
|
||||
@@ -858,9 +863,6 @@
|
||||
"rejected": "Rejected",
|
||||
"ringing": "Ringing..."
|
||||
},
|
||||
"privacyView": {
|
||||
"title": "Privacy"
|
||||
},
|
||||
"profile": {
|
||||
"avatar": "avatar",
|
||||
"setDisplayNameLabel": "Set your display name",
|
||||
@@ -1036,7 +1038,7 @@
|
||||
"sad": "Sad",
|
||||
"search": "Search",
|
||||
"seconds": "{{count}}s",
|
||||
"speakerStats": "Speaker Stats",
|
||||
"speakerStats": "Participants Stats",
|
||||
"speakerTime": "Speaker Time",
|
||||
"surprised": "Surprised"
|
||||
},
|
||||
@@ -1068,7 +1070,6 @@
|
||||
"chat": "Open / Close chat",
|
||||
"clap": "Clap",
|
||||
"collapse": "Collapse",
|
||||
"dock": "Dock in main window",
|
||||
"document": "Toggle shared document",
|
||||
"download": "Download our apps",
|
||||
"embedMeeting": "Embed meeting",
|
||||
@@ -1117,12 +1118,11 @@
|
||||
"shortcuts": "Toggle shortcuts",
|
||||
"show": "Show on stage",
|
||||
"silence": "Silence",
|
||||
"speakerStats": "Toggle speaker statistics",
|
||||
"speakerStats": "Toggle participants statistics",
|
||||
"surprised": "Surprised",
|
||||
"tileView": "Toggle tile view",
|
||||
"toggleCamera": "Toggle camera",
|
||||
"toggleFilmstrip": "Toggle filmstrip",
|
||||
"undock": "Undock into separate window",
|
||||
"videoblur": "Toggle video blur",
|
||||
"videomute": "Start / Stop camera",
|
||||
"whiteboard": "Show / Hide whiteboard"
|
||||
@@ -1141,7 +1141,6 @@
|
||||
"closeReactionsMenu": "Close reactions menu",
|
||||
"disableNoiseSuppression": "Disable noise suppression",
|
||||
"disableReactionSounds": "You can disable reaction sounds for this meeting",
|
||||
"dock": "Dock in main window",
|
||||
"documentClose": "Close shared document",
|
||||
"documentOpen": "Open shared document",
|
||||
"download": "Download our apps",
|
||||
@@ -1204,7 +1203,7 @@
|
||||
"shortcuts": "View shortcuts",
|
||||
"showWhiteboard": "Show whiteboard",
|
||||
"silence": "Silence",
|
||||
"speakerStats": "Speaker stats",
|
||||
"speakerStats": "Participants stats",
|
||||
"startScreenSharing": "Start screen sharing",
|
||||
"startSubtitles": "Subtitles • {{language}}",
|
||||
"stopAudioSharing": "Stop audio sharing",
|
||||
@@ -1215,7 +1214,6 @@
|
||||
"talkWhileMutedPopup": "Trying to speak? You are muted.",
|
||||
"tileViewToggle": "Toggle tile view",
|
||||
"toggleCamera": "Toggle camera",
|
||||
"undock": "Undock into separate window",
|
||||
"videoSettings": "Video settings",
|
||||
"videomute": "Start / Stop camera"
|
||||
},
|
||||
@@ -1296,6 +1294,7 @@
|
||||
"show": "Show on stage",
|
||||
"showSelfView": "Show self view",
|
||||
"unpinFromStage": "Unpin",
|
||||
"verify": "Verify participant",
|
||||
"videoMuted": "Camera disabled",
|
||||
"videomute": "Participant has stopped the camera"
|
||||
},
|
||||
@@ -1363,6 +1362,7 @@
|
||||
"recentList": "Recent",
|
||||
"recentListDelete": "Delete entry",
|
||||
"recentListEmpty": "Your recent list is currently empty. Chat with your team and you will find all your recent meetings here.",
|
||||
"recentMeetings": "Your recent meetings",
|
||||
"reducedUIText": "Welcome to {{app}}!",
|
||||
"roomNameAllowedChars": "Meeting name should not contain any of these characters: ?, &, :, ', \", %, #.",
|
||||
"roomname": "Enter room name",
|
||||
@@ -1371,6 +1371,7 @@
|
||||
"settings": "Settings",
|
||||
"startMeeting": "Start meeting",
|
||||
"terms": "Terms",
|
||||
"title": "Secure, fully featured, and completely free video conferencing"
|
||||
"title": "Secure, fully featured, and completely free video conferencing",
|
||||
"upcomingMeetings": "Your upcoming meetings"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -644,15 +644,15 @@ function initCommands() {
|
||||
}
|
||||
|
||||
let recordingConfig;
|
||||
const { recordingService } = state['features/base/config'];
|
||||
|
||||
if (!recordingService.enabled && !dropboxToken) {
|
||||
logger.error('Failed starting recording: the recording service is not enabled');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (mode === JitsiRecordingConstants.mode.FILE) {
|
||||
const { recordingService } = state['features/base/config'];
|
||||
|
||||
if (!recordingService.enabled && !dropboxToken) {
|
||||
logger.error('Failed starting recording: the recording service is not enabled');
|
||||
|
||||
return;
|
||||
}
|
||||
if (dropboxToken) {
|
||||
recordingConfig = {
|
||||
mode: JitsiRecordingConstants.mode.FILE,
|
||||
@@ -1450,6 +1450,22 @@ class API {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify external application that the data channel has been closed.
|
||||
*
|
||||
* @param {number} code - The close code.
|
||||
* @param {string} reason - The close reason.
|
||||
*
|
||||
* @returns {void}
|
||||
*/
|
||||
notifyDataChannelClosed(code: number, reason: string) {
|
||||
this._sendEvent({
|
||||
name: 'data-channel-closed',
|
||||
code,
|
||||
reason
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify external application that the data channel has been opened.
|
||||
*
|
||||
@@ -1655,22 +1671,6 @@ class API {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify external application (if API is enabled) that the iframe
|
||||
* docked state has been changed. The responsibility for implementing
|
||||
* the dock / undock functionality lies with the external application.
|
||||
*
|
||||
* @param {boolean} docked - Whether or not the iframe has been set to
|
||||
* be docked or undocked.
|
||||
* @returns {void}
|
||||
*/
|
||||
notifyIframeDockStateChanged(docked: boolean) {
|
||||
this._sendEvent({
|
||||
name: 'iframe-dock-state-changed',
|
||||
docked
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify external application of a participant, remote or local, being
|
||||
* removed from the conference by another participant.
|
||||
@@ -1920,6 +1920,27 @@ class API {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify the external application that a PeerConnection lost connectivity. This event is fired only if
|
||||
* a PC `failed` but connectivity to the rtcstats server is still maintained signaling that there is a
|
||||
* problem establishing a link between the app and the JVB server or the remote peer in case of P2P.
|
||||
* Will only fire if rtcstats is enabled.
|
||||
*
|
||||
* @param {boolean} isP2P - Type of PC.
|
||||
* @param {boolean} wasConnected - Was this connection previously connected. If it was it could mean
|
||||
* that connectivity was disrupted, if not it most likely means that the app could not reach
|
||||
* the JVB server, or the other peer in case of P2P.
|
||||
*
|
||||
* @returns {void}
|
||||
*/
|
||||
notifyPeerConnectionFailure(isP2P, wasConnected) {
|
||||
this._sendEvent({
|
||||
name: 'peer-connection-failure',
|
||||
isP2P,
|
||||
wasConnected
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Disposes the allocated resources.
|
||||
*
|
||||
|
||||
7
modules/API/external/external_api.js
vendored
@@ -106,6 +106,7 @@ const events = {
|
||||
'camera-error': 'cameraError',
|
||||
'chat-updated': 'chatUpdated',
|
||||
'content-sharing-participants-changed': 'contentSharingParticipantsChanged',
|
||||
'data-channel-closed': 'dataChannelClosed',
|
||||
'data-channel-opened': 'dataChannelOpened',
|
||||
'device-list-changed': 'deviceListChanged',
|
||||
'display-name-change': 'displayNameChange',
|
||||
@@ -116,7 +117,6 @@ const events = {
|
||||
'feedback-submitted': 'feedbackSubmitted',
|
||||
'feedback-prompt-displayed': 'feedbackPromptDisplayed',
|
||||
'filmstrip-display-changed': 'filmstripDisplayChanged',
|
||||
'iframe-dock-state-changed': 'iframeDockStateChanged',
|
||||
'incoming-message': 'incomingMessage',
|
||||
'knocking-participant': 'knockingParticipant',
|
||||
'log': 'log',
|
||||
@@ -134,6 +134,7 @@ const events = {
|
||||
'participant-role-changed': 'participantRoleChanged',
|
||||
'participants-pane-toggled': 'participantsPaneToggled',
|
||||
'password-required': 'passwordRequired',
|
||||
'peer-connection-failure': 'peerConnectionFailure',
|
||||
'prejoin-screen-loaded': 'prejoinScreenLoaded',
|
||||
'proxy-connection-event': 'proxyConnectionEvent',
|
||||
'raise-hand-updated': 'raiseHandUpdated',
|
||||
@@ -387,10 +388,10 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
|
||||
|
||||
this._frame = document.createElement('iframe');
|
||||
this._frame.allow = 'camera; microphone; display-capture; autoplay; clipboard-write';
|
||||
this._frame.src = this._url;
|
||||
this._frame.name = frameName;
|
||||
this._frame.id = frameName;
|
||||
this._setSize(height, width);
|
||||
this._frame.sandbox = 'allow-scripts allow-same-origin allow-popups allow-forms allow-downloads';
|
||||
this._frame.setAttribute('allowFullScreen', 'true');
|
||||
this._frame.style.border = 0;
|
||||
|
||||
@@ -401,6 +402,8 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
|
||||
}
|
||||
|
||||
this._frame = this._parentNode.appendChild(this._frame);
|
||||
|
||||
this._frame.src = this._url;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,11 +14,13 @@ import { i18next } from '../../../react/features/base/i18n';
|
||||
import { JitsiTrackEvents } from '../../../react/features/base/lib-jitsi-meet';
|
||||
import { VIDEO_TYPE } from '../../../react/features/base/media';
|
||||
import {
|
||||
getLocalParticipant,
|
||||
getParticipantById,
|
||||
getParticipantDisplayName,
|
||||
isLocalScreenshareParticipant,
|
||||
isScreenShareParticipant
|
||||
} from '../../../react/features/base/participants';
|
||||
import { getHideSelfView } from '../../../react/features/base/settings/functions.any';
|
||||
import {
|
||||
getVideoTrackByParticipant,
|
||||
trackStreamingStatusChanged
|
||||
@@ -232,6 +234,10 @@ export default class LargeVideoManager {
|
||||
|
||||
preUpdate.then(() => {
|
||||
const { id, stream, videoType, resolve } = this.newStreamData;
|
||||
const state = APP.store.getState();
|
||||
const shouldHideSelfView = getHideSelfView(state);
|
||||
const localId = getLocalParticipant(state)?.id;
|
||||
|
||||
|
||||
// FIXME this does not really make sense, because the videoType
|
||||
// (camera or desktop) is a completely different thing than
|
||||
@@ -245,13 +251,16 @@ export default class LargeVideoManager {
|
||||
// eslint-disable-next-line no-shadow
|
||||
const container = this.getCurrentContainer();
|
||||
|
||||
if (shouldHideSelfView && localId === id) {
|
||||
return container.hide();
|
||||
}
|
||||
|
||||
container.setStream(id, stream, videoType);
|
||||
|
||||
// change the avatar url on large
|
||||
this.updateAvatar();
|
||||
|
||||
const isVideoMuted = !stream || stream.isMuted();
|
||||
const state = APP.store.getState();
|
||||
const participant = getParticipantById(state, id);
|
||||
const videoTrack = getVideoTrackByParticipant(state, participant);
|
||||
|
||||
|
||||
@@ -158,7 +158,6 @@ export default {
|
||||
* Determines if currently selected media devices should be changed after
|
||||
* list of available devices has been changed.
|
||||
* @param {MediaDeviceInfo[]} newDevices
|
||||
* @param {boolean} isSharingScreen
|
||||
* @param {JitsiLocalTrack} localVideo
|
||||
* @param {JitsiLocalTrack} localAudio
|
||||
* @returns {{
|
||||
@@ -169,13 +168,12 @@ export default {
|
||||
*/
|
||||
getNewMediaDevicesAfterDeviceListChanged( // eslint-disable-line max-params
|
||||
newDevices,
|
||||
isSharingScreen,
|
||||
localVideo,
|
||||
localAudio,
|
||||
newLabels) {
|
||||
return {
|
||||
audioinput: getNewAudioInputDevice(newDevices, localAudio, newLabels),
|
||||
videoinput: isSharingScreen ? undefined : getNewVideoInputDevice(newDevices, localVideo, newLabels),
|
||||
videoinput: getNewVideoInputDevice(newDevices, localVideo, newLabels),
|
||||
audiooutput: getNewAudioOutputDevice(newDevices)
|
||||
};
|
||||
},
|
||||
|
||||
718
package-lock.json
generated
40
package.json
@@ -28,15 +28,15 @@
|
||||
"@atlaskit/tooltip": "17.1.2",
|
||||
"@emotion/react": "11.10.0",
|
||||
"@emotion/styled": "11.10.0",
|
||||
"@giphy/js-fetch-api": "4.1.2",
|
||||
"@giphy/js-fetch-api": "4.7.1",
|
||||
"@giphy/react-components": "5.6.0",
|
||||
"@giphy/react-native-sdk": "1.7.0",
|
||||
"@hapi/bourne": "2.0.0",
|
||||
"@jitsi/excalidraw": "https://github.com/jitsi/excalidraw/releases/download/v0.0.11/jitsi-excalidraw-0.0.11.tgz",
|
||||
"@jitsi/js-utils": "2.0.4",
|
||||
"@jitsi/excalidraw": "https://github.com/jitsi/excalidraw/releases/download/v0.0.12/jitsi-excalidraw-0.0.12.tgz",
|
||||
"@jitsi/js-utils": "2.0.5",
|
||||
"@jitsi/logger": "2.0.0",
|
||||
"@jitsi/rnnoise-wasm": "0.1.0",
|
||||
"@jitsi/rtcstats": "9.4.1",
|
||||
"@jitsi/rtcstats": "9.5.1",
|
||||
"@matrix-org/olm": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.3.tgz",
|
||||
"@microsoft/microsoft-graph-client": "3.0.1",
|
||||
"@mui/material": "5.10.2",
|
||||
@@ -47,11 +47,11 @@
|
||||
"@react-native-community/slider": "4.1.12",
|
||||
"@react-native-google-signin/google-signin": "7.0.4",
|
||||
"@react-native-masked-view/masked-view": "0.2.6",
|
||||
"@react-navigation/bottom-tabs": "6.0.9",
|
||||
"@react-navigation/elements": "1.2.1",
|
||||
"@react-navigation/material-top-tabs": "6.0.6",
|
||||
"@react-navigation/native": "6.0.6",
|
||||
"@react-navigation/stack": "6.2.2",
|
||||
"@react-navigation/bottom-tabs": "6.5.3",
|
||||
"@react-navigation/elements": "1.3.13",
|
||||
"@react-navigation/material-top-tabs": "6.5.2",
|
||||
"@react-navigation/native": "6.1.2",
|
||||
"@react-navigation/stack": "6.3.11",
|
||||
"@svgr/webpack": "6.3.1",
|
||||
"@tensorflow/tfjs-backend-wasm": "3.13.0",
|
||||
"@tensorflow/tfjs-core": "3.13.0",
|
||||
@@ -60,7 +60,7 @@
|
||||
"@types/w3c-image-capture": "1.0.6",
|
||||
"@vladmandic/human": "2.6.5",
|
||||
"@vladmandic/human-models": "2.5.9",
|
||||
"@xmldom/xmldom": "0.7.6",
|
||||
"@xmldom/xmldom": "0.7.9",
|
||||
"amplitude-js": "8.2.1",
|
||||
"base64-js": "1.3.1",
|
||||
"bc-css-flags": "3.0.0",
|
||||
@@ -79,7 +79,7 @@
|
||||
"js-md5": "0.6.1",
|
||||
"js-sha512": "0.8.0",
|
||||
"jwt-decode": "2.2.0",
|
||||
"lib-jitsi-meet": "https://github.com/jitsi/lib-jitsi-meet/releases/download/v1535.0.0+e6263e7c/lib-jitsi-meet.tgz",
|
||||
"lib-jitsi-meet": "https://github.com/jitsi/lib-jitsi-meet/releases/download/v1578.0.0+5855ca72/lib-jitsi-meet.tgz",
|
||||
"lodash": "4.17.21",
|
||||
"moment": "2.29.4",
|
||||
"moment-duration-format": "2.2.2",
|
||||
@@ -93,7 +93,7 @@
|
||||
"react-focus-lock": "2.5.1",
|
||||
"react-i18next": "10.11.4",
|
||||
"react-linkify": "1.0.0-alpha",
|
||||
"react-native": "0.68.4",
|
||||
"react-native": "0.68.5",
|
||||
"react-native-background-timer": "2.4.1",
|
||||
"react-native-calendar-events": "2.2.0",
|
||||
"react-native-callstats": "3.73.7",
|
||||
@@ -101,15 +101,15 @@
|
||||
"react-native-default-preference": "1.4.4",
|
||||
"react-native-device-info": "8.4.8",
|
||||
"react-native-dialog": "https://github.com/jitsi/react-native-dialog/releases/download/v9.2.2-jitsi.1/react-native-dialog-9.2.2.tgz",
|
||||
"react-native-gesture-handler": "2.1.0",
|
||||
"react-native-gesture-handler": "2.8.0",
|
||||
"react-native-get-random-values": "1.7.2",
|
||||
"react-native-immersive": "2.0.0",
|
||||
"react-native-keep-awake": "4.0.0",
|
||||
"react-native-orientation-locker": "1.5.0",
|
||||
"react-native-pager-view": "5.4.9",
|
||||
"react-native-paper": "4.11.1",
|
||||
"react-native-paper": "5.1.2",
|
||||
"react-native-performance": "2.1.0",
|
||||
"react-native-safe-area-context": "3.3.2",
|
||||
"react-native-safe-area-context": "4.4.1",
|
||||
"react-native-screens": "3.13.1",
|
||||
"react-native-sound": "0.11.1",
|
||||
"react-native-splash-screen": "3.3.0",
|
||||
@@ -119,14 +119,14 @@
|
||||
"react-native-url-polyfill": "1.3.0",
|
||||
"react-native-video": "https://git@github.com/react-native-video/react-native-video#7c48ae7c8544b2b537fb60194e9620b9fcceae52",
|
||||
"react-native-watch-connectivity": "1.0.11",
|
||||
"react-native-webrtc": "1.106.1",
|
||||
"react-native-webrtc": "106.0.4",
|
||||
"react-native-webview": "11.15.1",
|
||||
"react-native-youtube-iframe": "2.2.1",
|
||||
"react-redux": "7.1.0",
|
||||
"react-textarea-autosize": "8.3.0",
|
||||
"react-transition-group": "2.4.0",
|
||||
"react-window": "1.8.6",
|
||||
"react-youtube": "7.13.1",
|
||||
"react-youtube": "10.1.0",
|
||||
"redux": "4.0.4",
|
||||
"redux-thunk": "2.4.1",
|
||||
"resemblejs": "4.0.0",
|
||||
@@ -152,7 +152,8 @@
|
||||
"@types/js-md5": "0.4.3",
|
||||
"@types/lodash": "4.14.182",
|
||||
"@types/react": "17.0.14",
|
||||
"@types/react-native": "0.68.7",
|
||||
"@types/react-linkify": "1.0.1",
|
||||
"@types/react-native": "0.68.9",
|
||||
"@types/react-redux": "7.1.24",
|
||||
"@types/react-window": "1.8.5",
|
||||
"@types/unorm": "1.3.28",
|
||||
@@ -199,7 +200,8 @@
|
||||
"tsc:web": "tsc --noEmit --project tsconfig.web.json",
|
||||
"tsc:native": "tsc --noEmit --project tsconfig.native.json",
|
||||
"tsc:ci": "npm run tsc:web && npm run tsc:native",
|
||||
"lint:ci": "eslint --ext .js,.ts,.tsx --max-warnings 0 . && npm run tsc:ci",
|
||||
"lint:ci": "eslint --ext .js,.ts,.tsx --max-warnings 0 . && npm run tsc:ci && npm run lint:lang",
|
||||
"lint:lang": "for file in lang/*.json; do npx --yes jsonlint -q $file || exit 1; done",
|
||||
"lang-sort": "./resources/lang-sort.sh",
|
||||
"lint-fix": "eslint --ext .js,.ts,.tsx --max-warnings 0 --fix .",
|
||||
"postinstall": "patch-package --error-on-fail && jetify",
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
diff --git a/node_modules/react-native-gesture-handler/android/build.gradle b/node_modules/react-native-gesture-handler/android/build.gradle
|
||||
index 8afc3d5..4b1f721 100644
|
||||
--- a/node_modules/react-native-gesture-handler/android/build.gradle
|
||||
+++ b/node_modules/react-native-gesture-handler/android/build.gradle
|
||||
@@ -26,7 +26,7 @@ def shouldUseCommonInterfaceFromReanimated() {
|
||||
def json = new JsonSlurper().parseText(inputFile.text)
|
||||
def reanimatedVersion = json.version as String
|
||||
def (major, minor, patch) = reanimatedVersion.tokenize('.')
|
||||
- return Integer.parseInt(minor) >= 3
|
||||
+ return Integer.parseInt(major) >= 2 && Integer.parseInt(minor) >= 3
|
||||
} else {
|
||||
return false
|
||||
}
|
||||