Compare commits
186 Commits
oianc/jits
...
jitihouse/
Author | SHA1 | Date |
---|---|---|
|
4bd73cc368 | |
|
e12999d44f | |
|
8982f17ce1 | |
|
c8f1690057 | |
|
aa57309057 | |
|
fb81619fc5 | |
|
5a5656020b | |
|
0ff44a2f22 | |
|
4d04ea325e | |
|
42ce6dcc58 | |
|
b033d0268a | |
|
4aea40d34f | |
|
e5a170fb28 | |
|
d1cf5578fc | |
|
4b29af6b5f | |
|
f3481576ff | |
|
455a91a5c6 | |
|
297ab194a8 | |
|
077a88a803 | |
|
02c232440e | |
|
f727b9295f | |
|
0d0bec3aad | |
|
cfb8589bef | |
|
65730e256e | |
|
7b8b911fee | |
|
036286a1d6 | |
|
d550254f31 | |
|
b1a71d55d7 | |
|
17ed45799c | |
|
e5681382b0 | |
|
c27cb25afe | |
|
baf5aa14e8 | |
|
29b6ce7721 | |
|
4f95c45e50 | |
|
72dd609247 | |
|
fed74afffe | |
|
204f34cccb | |
|
c81777a475 | |
|
778bca3031 | |
|
336fa304ce | |
|
f14b69166c | |
|
e405595a11 | |
|
cabe48d66a | |
|
8d7f46024b | |
|
d7f6c2bbf0 | |
|
3c69645169 | |
|
abe2fa4dd4 | |
|
863fd12488 | |
|
50c4748d40 | |
|
f83840a3bc | |
|
1466d7d149 | |
|
d0fe034db5 | |
|
8225f5e363 | |
|
c641835d0f | |
|
35ee92869f | |
|
9b7a5ffdd1 | |
|
581c2e621c | |
|
f3117f3037 | |
|
877ef58dfb | |
|
19e61747b8 | |
|
b4bf363237 | |
|
f8af9c4fae | |
|
9fa426d97f | |
|
e3c95e376a | |
|
00ed794c50 | |
|
b52d5629e2 | |
|
9d8e646d4e | |
|
850c0b97e4 | |
|
87035d0812 | |
|
ef0168c9ff | |
|
df1a5a25d4 | |
|
c424884201 | |
|
0a464a5223 | |
|
8cd62bc132 | |
|
123a74b38b | |
|
dbeca806bb | |
|
f790d3e3ed | |
|
a12f7fc4d2 | |
|
456ce38a10 | |
|
72ef1668f2 | |
|
fce8f52574 | |
|
8fcfd7a308 | |
|
04a41395c8 | |
|
18e8201167 | |
|
27b8794d8c | |
|
3cb0df579c | |
|
22ded30b61 | |
|
533deea5fd | |
|
46c6d1057d | |
|
45aa53b1a6 | |
|
7d65123495 | |
|
e1ac000cd1 | |
|
f98036efa1 | |
|
23aeafcc93 | |
|
0ffe2c2c87 | |
|
dec58afe46 | |
|
2aa770e532 | |
|
1a113ba733 | |
|
3a5833829c | |
|
e6d1f039d2 | |
|
fef78152e1 | |
|
84221c5c13 | |
|
3e59359563 | |
|
e69db9b878 | |
|
ae7e441e21 | |
|
6b8afbcceb | |
|
d712a565f8 | |
|
36bfbeb81d | |
|
e7b16b0daf | |
|
92a891e7d3 | |
|
09e4696c60 | |
|
a594aac078 | |
|
9409e64066 | |
|
12318db4c7 | |
|
749c26b74c | |
|
babe62eb6d | |
|
fbc0a502e7 | |
|
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 |
|
@ -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
|
||||||
|
}
|
||||||
|
'
|
|
@ -0,0 +1,8 @@
|
||||||
|
global = false
|
||||||
|
unused = false
|
||||||
|
redefined = false
|
||||||
|
ignore = { "581" }
|
||||||
|
max_line_length = false
|
||||||
|
color = false
|
||||||
|
formatter = "plain"
|
||||||
|
quiet = 1
|
7
Makefile
7
Makefile
|
@ -44,12 +44,8 @@ deploy-appbundle:
|
||||||
cp \
|
cp \
|
||||||
$(BUILD_DIR)/app.bundle.min.js \
|
$(BUILD_DIR)/app.bundle.min.js \
|
||||||
$(BUILD_DIR)/app.bundle.min.js.map \
|
$(BUILD_DIR)/app.bundle.min.js.map \
|
||||||
$(BUILD_DIR)/do_external_connect.min.js \
|
|
||||||
$(BUILD_DIR)/do_external_connect.min.js.map \
|
|
||||||
$(BUILD_DIR)/external_api.min.js \
|
$(BUILD_DIR)/external_api.min.js \
|
||||||
$(BUILD_DIR)/external_api.min.js.map \
|
$(BUILD_DIR)/external_api.min.js.map \
|
||||||
$(BUILD_DIR)/dial_in_info_bundle.min.js \
|
|
||||||
$(BUILD_DIR)/dial_in_info_bundle.min.js.map \
|
|
||||||
$(BUILD_DIR)/alwaysontop.min.js \
|
$(BUILD_DIR)/alwaysontop.min.js \
|
||||||
$(BUILD_DIR)/alwaysontop.min.js.map \
|
$(BUILD_DIR)/alwaysontop.min.js.map \
|
||||||
$(OUTPUT_DIR)/analytics-ga.js \
|
$(OUTPUT_DIR)/analytics-ga.js \
|
||||||
|
@ -70,7 +66,6 @@ deploy-lib-jitsi-meet:
|
||||||
$(LIBJITSIMEET_DIR)/dist/umd/lib-jitsi-meet.min.js \
|
$(LIBJITSIMEET_DIR)/dist/umd/lib-jitsi-meet.min.js \
|
||||||
$(LIBJITSIMEET_DIR)/dist/umd/lib-jitsi-meet.min.map \
|
$(LIBJITSIMEET_DIR)/dist/umd/lib-jitsi-meet.min.map \
|
||||||
$(LIBJITSIMEET_DIR)/dist/umd/lib-jitsi-meet.e2ee-worker.js \
|
$(LIBJITSIMEET_DIR)/dist/umd/lib-jitsi-meet.e2ee-worker.js \
|
||||||
$(LIBJITSIMEET_DIR)/connection_optimization/external_connect.js \
|
|
||||||
$(LIBJITSIMEET_DIR)/modules/browser/capabilities.json \
|
$(LIBJITSIMEET_DIR)/modules/browser/capabilities.json \
|
||||||
$(DEPLOY_DIR)
|
$(DEPLOY_DIR)
|
||||||
|
|
||||||
|
@ -131,7 +126,7 @@ dev: deploy-init deploy-css deploy-rnnoise-binary deploy-tflite deploy-meet-mode
|
||||||
|
|
||||||
source-package:
|
source-package:
|
||||||
mkdir -p source_package/jitsi-meet/css && \
|
mkdir -p source_package/jitsi-meet/css && \
|
||||||
cp -r *.js *.html resources/*.txt connection_optimization favicon.ico fonts images libs static sounds LICENSE lang source_package/jitsi-meet && \
|
cp -r *.js *.html resources/*.txt favicon.ico fonts images libs static sounds LICENSE lang source_package/jitsi-meet && \
|
||||||
cp css/all.css source_package/jitsi-meet/css && \
|
cp css/all.css source_package/jitsi-meet/css && \
|
||||||
(cd source_package ; tar cjf ../jitsi-meet.tar.bz2 jitsi-meet) && \
|
(cd source_package ; tar cjf ../jitsi-meet.tar.bz2 jitsi-meet) && \
|
||||||
rm -rf source_package
|
rm -rf source_package
|
||||||
|
|
|
@ -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">
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<background android:drawable="@color/ic_launcher_background"/>
|
<background android:drawable="@color/ic_launcher_background"/>
|
||||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||||
|
<monochrome android:drawable="@drawable/ic_launcher_monochrome"/>
|
||||||
</adaptive-icon>
|
</adaptive-icon>
|
|
@ -2,4 +2,5 @@
|
||||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<background android:drawable="@color/ic_launcher_background"/>
|
<background android:drawable="@color/ic_launcher_background"/>
|
||||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||||
|
<monochrome android:drawable="@drawable/ic_launcher_monochrome"/>
|
||||||
</adaptive-icon>
|
</adaptive-icon>
|
|
@ -76,7 +76,6 @@ dependencies {
|
||||||
implementation project(':react-native-get-random-values')
|
implementation project(':react-native-get-random-values')
|
||||||
implementation project(':react-native-immersive')
|
implementation project(':react-native-immersive')
|
||||||
implementation project(':react-native-keep-awake')
|
implementation project(':react-native-keep-awake')
|
||||||
implementation project(':react-native-masked-view_masked-view')
|
|
||||||
implementation project(':react-native-orientation-locker')
|
implementation project(':react-native-orientation-locker')
|
||||||
implementation project(':react-native-pager-view')
|
implementation project(':react-native-pager-view')
|
||||||
implementation project(':react-native-performance')
|
implementation project(':react-native-performance')
|
||||||
|
|
|
@ -73,7 +73,6 @@ class ReactInstanceManagerHolder {
|
||||||
new SplashScreenModule(reactContext),
|
new SplashScreenModule(reactContext),
|
||||||
new PictureInPictureModule(reactContext),
|
new PictureInPictureModule(reactContext),
|
||||||
new ProximityModule(reactContext),
|
new ProximityModule(reactContext),
|
||||||
new WiFiStatsModule(reactContext),
|
|
||||||
new org.jitsi.meet.sdk.net.NAT64AddrInfoModule(reactContext)));
|
new org.jitsi.meet.sdk.net.NAT64AddrInfoModule(reactContext)));
|
||||||
|
|
||||||
if (AudioModeModule.useConnectionService()) {
|
if (AudioModeModule.useConnectionService()) {
|
||||||
|
@ -120,11 +119,10 @@ class ReactInstanceManagerHolder {
|
||||||
new com.oblador.performance.PerformancePackage(),
|
new com.oblador.performance.PerformancePackage(),
|
||||||
new com.reactnativecommunity.slider.ReactSliderPackage(),
|
new com.reactnativecommunity.slider.ReactSliderPackage(),
|
||||||
new com.brentvatne.react.ReactVideoPackage(),
|
new com.brentvatne.react.ReactVideoPackage(),
|
||||||
new org.reactnative.maskedview.RNCMaskedViewPackage(),
|
|
||||||
new com.reactnativecommunity.webview.RNCWebViewPackage(),
|
new com.reactnativecommunity.webview.RNCWebViewPackage(),
|
||||||
new com.kevinresol.react_native_default_preference.RNDefaultPreferencePackage(),
|
new com.kevinresol.react_native_default_preference.RNDefaultPreferencePackage(),
|
||||||
new com.learnium.RNDeviceInfo.RNDeviceInfo(),
|
new com.learnium.RNDeviceInfo.RNDeviceInfo(),
|
||||||
new com.swmansion.gesturehandler.react.RNGestureHandlerPackage(),
|
new com.swmansion.gesturehandler.RNGestureHandlerPackage(),
|
||||||
new org.linusu.RNGetRandomValuesPackage(),
|
new org.linusu.RNGetRandomValuesPackage(),
|
||||||
new com.rnimmersive.RNImmersivePackage(),
|
new com.rnimmersive.RNImmersivePackage(),
|
||||||
new com.swmansion.rnscreens.RNScreensPackage(),
|
new com.swmansion.rnscreens.RNScreensPackage(),
|
||||||
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -31,8 +31,6 @@ include ':react-native-immersive'
|
||||||
project(':react-native-immersive').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-immersive/android')
|
project(':react-native-immersive').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-immersive/android')
|
||||||
include ':react-native-keep-awake'
|
include ':react-native-keep-awake'
|
||||||
project(':react-native-keep-awake').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-keep-awake/android')
|
project(':react-native-keep-awake').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-keep-awake/android')
|
||||||
include ':react-native-masked-view_masked-view'
|
|
||||||
project(':react-native-masked-view_masked-view').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-masked-view/masked-view/android')
|
|
||||||
include ':react-native-orientation-locker'
|
include ':react-native-orientation-locker'
|
||||||
project(':react-native-orientation-locker').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-orientation-locker/android')
|
project(':react-native-orientation-locker').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-orientation-locker/android')
|
||||||
include ':react-native-pager-view'
|
include ':react-native-pager-view'
|
||||||
|
|
11
app.js
11
app.js
|
@ -33,17 +33,6 @@ window.APP = {
|
||||||
API,
|
API,
|
||||||
conference,
|
conference,
|
||||||
|
|
||||||
// Used by do_external_connect.js if we receive the attach data after
|
|
||||||
// connect was already executed. status property can be 'initialized',
|
|
||||||
// 'ready', or 'connecting'. We are interested in 'ready' status only which
|
|
||||||
// means that connect was executed but we have to wait for the attach data.
|
|
||||||
// In status 'ready' handler property will be set to a function that will
|
|
||||||
// finish the connect process when the attach data or error is received.
|
|
||||||
connect: {
|
|
||||||
handler: null,
|
|
||||||
status: 'initialized'
|
|
||||||
},
|
|
||||||
|
|
||||||
// Used for automated performance tests.
|
// Used for automated performance tests.
|
||||||
connectionTimes: {
|
connectionTimes: {
|
||||||
'index.loaded': window.indexLoadedTime
|
'index.loaded': window.indexLoadedTime
|
||||||
|
|
|
@ -103,6 +103,7 @@ import {
|
||||||
participantMutedUs,
|
participantMutedUs,
|
||||||
participantPresenceChanged,
|
participantPresenceChanged,
|
||||||
participantRoleChanged,
|
participantRoleChanged,
|
||||||
|
participantSourcesUpdated,
|
||||||
participantUpdated,
|
participantUpdated,
|
||||||
screenshareParticipantDisplayNameChanged,
|
screenshareParticipantDisplayNameChanged,
|
||||||
updateRemoteParticipantFeatures
|
updateRemoteParticipantFeatures
|
||||||
|
@ -140,7 +141,7 @@ import {
|
||||||
showNotification,
|
showNotification,
|
||||||
showWarningNotification
|
showWarningNotification
|
||||||
} from './react/features/notifications';
|
} from './react/features/notifications';
|
||||||
import { mediaPermissionPromptVisibilityChanged } from './react/features/overlay';
|
import { mediaPermissionPromptVisibilityChanged } from './react/features/overlay/actions';
|
||||||
import { suspendDetected } from './react/features/power-monitor';
|
import { suspendDetected } from './react/features/power-monitor';
|
||||||
import { initPrejoin, makePrecallTest, setJoiningInProgress } from './react/features/prejoin/actions';
|
import { initPrejoin, makePrecallTest, setJoiningInProgress } from './react/features/prejoin/actions';
|
||||||
import { isPrejoinPageVisible } from './react/features/prejoin/functions';
|
import { isPrejoinPageVisible } from './react/features/prejoin/functions';
|
||||||
|
@ -152,6 +153,7 @@ import { createRnnoiseProcessor } from './react/features/stream-effects/rnnoise'
|
||||||
import { endpointMessageReceived } from './react/features/subtitles';
|
import { endpointMessageReceived } from './react/features/subtitles';
|
||||||
import { handleToggleVideoMuted } from './react/features/toolbox/actions.any';
|
import { handleToggleVideoMuted } from './react/features/toolbox/actions.any';
|
||||||
import { muteLocal } from './react/features/video-menu/actions.any';
|
import { muteLocal } from './react/features/video-menu/actions.any';
|
||||||
|
import { setIAmVisitor } from './react/features/visitors/actions';
|
||||||
import UIEvents from './service/UI/UIEvents';
|
import UIEvents from './service/UI/UIEvents';
|
||||||
|
|
||||||
const logger = Logger.getLogger(__filename);
|
const logger = Logger.getLogger(__filename);
|
||||||
|
@ -341,6 +343,8 @@ class ConferenceConnector {
|
||||||
case JitsiConferenceErrors.REDIRECTED: {
|
case JitsiConferenceErrors.REDIRECTED: {
|
||||||
generateVisitorConfig(APP.store.getState(), params);
|
generateVisitorConfig(APP.store.getState(), params);
|
||||||
|
|
||||||
|
APP.store.dispatch(setIAmVisitor(true));
|
||||||
|
|
||||||
connection.disconnect().then(() => {
|
connection.disconnect().then(() => {
|
||||||
connect(this._conference.roomName).then(con => {
|
connect(this._conference.roomName).then(con => {
|
||||||
const localTracks = getLocalTracks(APP.store.getState()['features/base/tracks']);
|
const localTracks = getLocalTracks(APP.store.getState()['features/base/tracks']);
|
||||||
|
@ -1987,6 +1991,11 @@ export default {
|
||||||
APP.store.dispatch(participantKicked(kicker, kicked));
|
APP.store.dispatch(participantKicked(kicker, kicked));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
room.on(JitsiConferenceEvents.PARTICIPANT_SOURCE_UPDATED,
|
||||||
|
jitsiParticipant => {
|
||||||
|
APP.store.dispatch(participantSourcesUpdated(jitsiParticipant));
|
||||||
|
});
|
||||||
|
|
||||||
room.on(JitsiConferenceEvents.SUSPEND_DETECTED, () => {
|
room.on(JitsiConferenceEvents.SUSPEND_DETECTED, () => {
|
||||||
APP.store.dispatch(suspendDetected());
|
APP.store.dispatch(suspendDetected());
|
||||||
});
|
});
|
||||||
|
|
72
config.js
72
config.js
|
@ -46,9 +46,9 @@ var config = {
|
||||||
},
|
},
|
||||||
|
|
||||||
// BOSH URL. FIXME: use XEP-0156 to discover it.
|
// BOSH URL. FIXME: use XEP-0156 to discover it.
|
||||||
bosh: '//jitsi-meet.example.com/' + subdir + 'http-bind',
|
bosh: 'https://jitsi-meet.example.com/' + subdir + 'http-bind',
|
||||||
|
|
||||||
// Websocket URL
|
// Websocket URL (XMPP)
|
||||||
// websocket: 'wss://jitsi-meet.example.com/' + subdir + 'xmpp-websocket',
|
// websocket: 'wss://jitsi-meet.example.com/' + subdir + 'xmpp-websocket',
|
||||||
|
|
||||||
// The real JID of focus participant - can be overridden here
|
// The real JID of focus participant - can be overridden here
|
||||||
|
@ -56,6 +56,19 @@ var config = {
|
||||||
// https://github.com/jitsi/jitsi-meet/issues/7376
|
// https://github.com/jitsi/jitsi-meet/issues/7376
|
||||||
// focusUserJid: 'focus@auth.jitsi-meet.example.com',
|
// focusUserJid: 'focus@auth.jitsi-meet.example.com',
|
||||||
|
|
||||||
|
// Options related to the bridge (colibri) data channel
|
||||||
|
bridgeChannel: {
|
||||||
|
// If the backend advertises multiple colibri websockets, this options allows
|
||||||
|
// to filter some of them out based on the domain name. We use the first URL
|
||||||
|
// which does not match ignoreDomain, falling back to the first one that matches
|
||||||
|
// ignoreDomain. Has no effect if undefined.
|
||||||
|
// ignoreDomain: 'example.com',
|
||||||
|
|
||||||
|
// Prefer SCTP (WebRTC data channels over the media path) over a colibri websocket.
|
||||||
|
// If SCTP is available in the backend it will be used instead of a WS. Defaults to
|
||||||
|
// false (SCTP is used only if available and no WS are available).
|
||||||
|
// preferSctp: false
|
||||||
|
},
|
||||||
|
|
||||||
// Testing / experimental features.
|
// Testing / experimental features.
|
||||||
//
|
//
|
||||||
|
@ -418,12 +431,6 @@ var config = {
|
||||||
// 90: 2,
|
// 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.
|
// Specify the settings for video quality optimizations on the client.
|
||||||
// videoQuality: {
|
// videoQuality: {
|
||||||
// // Provides a way to prevent a video codec from being negotiated on the JVB connection. The codec specified
|
// // Provides a way to prevent a video codec from being negotiated on the JVB connection. The codec specified
|
||||||
|
@ -548,12 +555,15 @@ var config = {
|
||||||
// Disables responsive tiles.
|
// Disables responsive tiles.
|
||||||
// disableResponsiveTiles: false,
|
// disableResponsiveTiles: false,
|
||||||
|
|
||||||
// Hides lobby button
|
// DEPRECATED. Please use `securityUi?.hideLobbyButton` instead.
|
||||||
|
// Hides lobby button.
|
||||||
// hideLobbyButton: false,
|
// hideLobbyButton: false,
|
||||||
|
|
||||||
|
// DEPRECATED. Please use `lobby?.autoKnock` instead.
|
||||||
// If Lobby is enabled starts knocking automatically.
|
// If Lobby is enabled starts knocking automatically.
|
||||||
// autoKnockLobby: false,
|
// autoKnockLobby: false,
|
||||||
|
|
||||||
|
// DEPRECATED. Please use `lobby?.enableChat` instead.
|
||||||
// Enable lobby chat.
|
// Enable lobby chat.
|
||||||
// enableLobbyChat: true,
|
// enableLobbyChat: true,
|
||||||
|
|
||||||
|
@ -578,6 +588,22 @@ var config = {
|
||||||
// customUrl: ''
|
// customUrl: ''
|
||||||
// },
|
// },
|
||||||
|
|
||||||
|
// Configs for the lobby screen.
|
||||||
|
// lobby {
|
||||||
|
// // If Lobby is enabled, it starts knocking automatically. Replaces `autoKnockLobby`.
|
||||||
|
// autoKnock: false,
|
||||||
|
// // Enables the lobby chat. Replaces `enableLobbyChat`.
|
||||||
|
// enableChat: true,
|
||||||
|
// },
|
||||||
|
|
||||||
|
// Configs for the security related UI elements.
|
||||||
|
// securityUi: {
|
||||||
|
// // Hides the lobby button. Replaces `hideLobbyButton`.
|
||||||
|
// hideLobbyButton: false,
|
||||||
|
// // Hides the possibility to set and enter a lobby password.
|
||||||
|
// disableLobbyPassword: false,
|
||||||
|
// },
|
||||||
|
|
||||||
// Disable app shortcuts that are registered upon joining a conference
|
// Disable app shortcuts that are registered upon joining a conference
|
||||||
// disableShortcuts: false,
|
// disableShortcuts: false,
|
||||||
|
|
||||||
|
@ -805,6 +831,14 @@ var config = {
|
||||||
// 'microphone', 'camera', 'select-background', 'invite', 'settings'
|
// 'microphone', 'camera', 'select-background', 'invite', 'settings'
|
||||||
// hiddenPremeetingButtons: [],
|
// hiddenPremeetingButtons: [],
|
||||||
|
|
||||||
|
// An array with custom option buttons for the participant context menu
|
||||||
|
// type: Array<{ icon: string; id: string; text: string; }>
|
||||||
|
// customParticipantMenuButtons: [],
|
||||||
|
|
||||||
|
// An array with custom option buttons for the toolbar
|
||||||
|
// type: Array<{ icon: string; id: string; text: string; }>
|
||||||
|
// customToolbarButtons: [],
|
||||||
|
|
||||||
// Stats
|
// Stats
|
||||||
//
|
//
|
||||||
|
|
||||||
|
@ -1089,9 +1123,6 @@ var config = {
|
||||||
// // whether to hide the logo on the deep linking pages.
|
// // whether to hide the logo on the deep linking pages.
|
||||||
// hideLogo: false,
|
// hideLogo: false,
|
||||||
|
|
||||||
// // whether to show deeplinking image.
|
|
||||||
// showImage: false,
|
|
||||||
|
|
||||||
// // The ios deeplinking config.
|
// // The ios deeplinking config.
|
||||||
// ios: {
|
// ios: {
|
||||||
// appName: 'Jitsi Meet',
|
// appName: 'Jitsi Meet',
|
||||||
|
@ -1128,6 +1159,13 @@ var config = {
|
||||||
// }
|
// }
|
||||||
// },
|
// },
|
||||||
|
|
||||||
|
// // The terms, privacy and help centre URL's.
|
||||||
|
// legalUrls: {
|
||||||
|
// helpCentre: 'https://web-cdn.jitsi.net/faq/meet-faq.html',
|
||||||
|
// privacy: 'https://jitsi.org/meet/privacy',
|
||||||
|
// terms: 'https://jitsi.org/meet/terms'
|
||||||
|
// },
|
||||||
|
|
||||||
// A property to disable the right click context menu for localVideo
|
// A property to disable the right click context menu for localVideo
|
||||||
// the menu has option to flip the locally seen video for local presentations
|
// the menu has option to flip the locally seen video for local presentations
|
||||||
// disableLocalVideoFlip: false,
|
// disableLocalVideoFlip: false,
|
||||||
|
@ -1344,9 +1382,9 @@ var config = {
|
||||||
deploymentInfo
|
deploymentInfo
|
||||||
dialOutAuthUrl
|
dialOutAuthUrl
|
||||||
dialOutCodesUrl
|
dialOutCodesUrl
|
||||||
|
dialOutRegionUrl
|
||||||
disableRemoteControl
|
disableRemoteControl
|
||||||
displayJids
|
displayJids
|
||||||
externalConnectUrl
|
|
||||||
e2eeLabels
|
e2eeLabels
|
||||||
firefox_fake_device
|
firefox_fake_device
|
||||||
googleApiApplicationClientID
|
googleApiApplicationClientID
|
||||||
|
@ -1524,6 +1562,8 @@ var config = {
|
||||||
// tileTime: 5000,
|
// tileTime: 5000,
|
||||||
// // Limit results by rating: g, pg, pg-13, r. Default value: g.
|
// // Limit results by rating: g, pg, pg-13, r. Default value: g.
|
||||||
// rating: 'pg',
|
// rating: 'pg',
|
||||||
|
// // The proxy server url for giphy requests in the web app.
|
||||||
|
// proxyUrl: 'https://giphy-proxy.example.com',
|
||||||
// },
|
// },
|
||||||
|
|
||||||
// Logging
|
// Logging
|
||||||
|
@ -1553,6 +1593,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
|
// Set the default values for JaaS customers
|
||||||
if (enableJaaS) {
|
if (enableJaaS) {
|
||||||
config.dialInNumbersUrl = 'https://conference-mapper.jitsi.net/v1/access/dids';
|
config.dialInNumbersUrl = 'https://conference-mapper.jitsi.net/v1/access/dids';
|
||||||
|
|
|
@ -32,54 +32,6 @@ const logger = Logger.getLogger(__filename);
|
||||||
*/
|
*/
|
||||||
export const DISCO_JIBRI_FEATURE = 'http://jitsi.org/protocol/jibri';
|
export const DISCO_JIBRI_FEATURE = 'http://jitsi.org/protocol/jibri';
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if we have data to use attach instead of connect. If we have the data
|
|
||||||
* executes attach otherwise check if we have to wait for the data. If we have
|
|
||||||
* to wait for the attach data we are setting handler to APP.connect.handler
|
|
||||||
* which is going to be called when the attach data is received otherwise
|
|
||||||
* executes connect.
|
|
||||||
*
|
|
||||||
* @param {string} [id] user id
|
|
||||||
* @param {string} [password] password
|
|
||||||
* @param {string} [roomName] the name of the conference.
|
|
||||||
*/
|
|
||||||
function checkForAttachParametersAndConnect(id, password, connection) {
|
|
||||||
if (window.XMPPAttachInfo) {
|
|
||||||
APP.connect.status = 'connecting';
|
|
||||||
|
|
||||||
// When connection optimization is not deployed or enabled the default
|
|
||||||
// value will be window.XMPPAttachInfo.status = "error"
|
|
||||||
// If the connection optimization is deployed and enabled and there is
|
|
||||||
// a failure the value will be window.XMPPAttachInfo.status = "error"
|
|
||||||
if (window.XMPPAttachInfo.status === 'error') {
|
|
||||||
connection.connect({
|
|
||||||
id,
|
|
||||||
password
|
|
||||||
});
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const attachOptions = window.XMPPAttachInfo.data;
|
|
||||||
|
|
||||||
if (attachOptions) {
|
|
||||||
connection.attach(attachOptions);
|
|
||||||
delete window.XMPPAttachInfo.data;
|
|
||||||
} else {
|
|
||||||
connection.connect({
|
|
||||||
id,
|
|
||||||
password
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
APP.connect.status = 'ready';
|
|
||||||
APP.connect.handler
|
|
||||||
= checkForAttachParametersAndConnect.bind(
|
|
||||||
null,
|
|
||||||
id, password, connection);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Try to open connection using provided credentials.
|
* Try to open connection using provided credentials.
|
||||||
* @param {string} [id]
|
* @param {string} [id]
|
||||||
|
@ -182,7 +134,10 @@ export async function connect(id, password) {
|
||||||
APP.store.dispatch(setPrejoinDisplayNameRequired());
|
APP.store.dispatch(setPrejoinDisplayNameRequired());
|
||||||
}
|
}
|
||||||
|
|
||||||
checkForAttachParametersAndConnect(id, password, connection);
|
connection.connect({
|
||||||
|
id,
|
||||||
|
password
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
'extends': '../react/.eslintrc.js'
|
|
||||||
};
|
|
|
@ -1,86 +0,0 @@
|
||||||
/* global config, createConnectionExternally */
|
|
||||||
|
|
||||||
import getRoomName from '../react/features/base/config/getRoomName';
|
|
||||||
import { parseURLParams } from '../react/features/base/util/parseURLParams';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implements external connect using createConnectionExternally function defined
|
|
||||||
* in external_connect.js for Jitsi Meet. Parses the room name and JSON Web
|
|
||||||
* Token (JWT) from the URL and executes createConnectionExternally.
|
|
||||||
*
|
|
||||||
* NOTE: If you are using lib-jitsi-meet without Jitsi Meet, you should use this
|
|
||||||
* file as reference only because the implementation is Jitsi Meet-specific.
|
|
||||||
*
|
|
||||||
* NOTE: For optimal results this file should be included right after
|
|
||||||
* external_connect.js.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (typeof createConnectionExternally === 'function') {
|
|
||||||
// URL params have higher priority than config params.
|
|
||||||
// Do not use external connect if websocket is enabled.
|
|
||||||
let url
|
|
||||||
= parseURLParams(window.location, true, 'hash')[
|
|
||||||
'config.externalConnectUrl']
|
|
||||||
|| config.websocket ? undefined : config.externalConnectUrl;
|
|
||||||
const isRecorder
|
|
||||||
= parseURLParams(window.location, true, 'hash')['config.iAmRecorder'];
|
|
||||||
|
|
||||||
let roomName;
|
|
||||||
|
|
||||||
if (url && (roomName = getRoomName()) && !isRecorder) {
|
|
||||||
url += `?room=${roomName}`;
|
|
||||||
|
|
||||||
const token = parseURLParams(window.location, true, 'search').jwt;
|
|
||||||
|
|
||||||
if (token) {
|
|
||||||
url += `&token=${token}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
createConnectionExternally(
|
|
||||||
url,
|
|
||||||
connectionInfo => {
|
|
||||||
// Sets that global variable to be used later by connect method
|
|
||||||
// in connection.js.
|
|
||||||
window.XMPPAttachInfo = {
|
|
||||||
status: 'success',
|
|
||||||
data: connectionInfo
|
|
||||||
};
|
|
||||||
checkForConnectHandlerAndConnect();
|
|
||||||
},
|
|
||||||
errorCallback);
|
|
||||||
} else {
|
|
||||||
errorCallback();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
errorCallback();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if connect from connection.js was executed and executes the handler
|
|
||||||
* that is going to finish the connect work.
|
|
||||||
*
|
|
||||||
* @returns {void}
|
|
||||||
*/
|
|
||||||
function checkForConnectHandlerAndConnect() {
|
|
||||||
window.APP
|
|
||||||
&& window.APP.connect.status === 'ready'
|
|
||||||
&& window.APP.connect.handler();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implements a callback to be invoked if anything goes wrong.
|
|
||||||
*
|
|
||||||
* @param {Error} error - The specifics of what went wrong.
|
|
||||||
* @returns {void}
|
|
||||||
*/
|
|
||||||
function errorCallback(error) {
|
|
||||||
// The value of error is undefined if external connect is disabled.
|
|
||||||
error && console.warn(error);
|
|
||||||
|
|
||||||
// Sets that global variable to be used later by connect method in
|
|
||||||
// connection.js.
|
|
||||||
window.XMPPAttachInfo = {
|
|
||||||
status: 'error'
|
|
||||||
};
|
|
||||||
checkForConnectHandlerAndConnect();
|
|
||||||
}
|
|
|
@ -2,13 +2,13 @@
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
|
||||||
&-content {
|
&-content {
|
||||||
background: $menuBG;
|
position: relative;
|
||||||
border-radius: 3px;
|
right: auto;
|
||||||
font-size: 14px;
|
margin-bottom: 4px;
|
||||||
line-height: 24px;
|
|
||||||
max-height: 456px;
|
max-height: 456px;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
width: 300px;
|
width: 300px;
|
||||||
|
|
||||||
&-ul {
|
&-ul {
|
||||||
margin:0;
|
margin:0;
|
||||||
padding:0;
|
padding:0;
|
||||||
|
@ -16,90 +16,33 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&-header {
|
&-header:hover {
|
||||||
color: #fff;
|
background-color: initial;
|
||||||
align-items: center;
|
cursor: initial;
|
||||||
display: flex;
|
|
||||||
margin-top: 8px;
|
|
||||||
padding: 8px 16px;
|
|
||||||
|
|
||||||
&-icon {
|
|
||||||
display: inline-block;
|
|
||||||
|
|
||||||
svg {
|
|
||||||
fill: #fff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&--bordered {
|
|
||||||
border-bottom: 1px solid #4C4D50;
|
|
||||||
}
|
|
||||||
|
|
||||||
&-text {
|
|
||||||
margin-left: 12px;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
&-entry {
|
&-entry-text {
|
||||||
align-items: center;
|
max-width: 213px;
|
||||||
color: #fff;
|
|
||||||
cursor: pointer;
|
|
||||||
display: flex;
|
|
||||||
padding: 8px 0;
|
|
||||||
margin-left: 48px;
|
|
||||||
|
|
||||||
&--selected {
|
&.left-margin {
|
||||||
background: #131519;
|
margin-left: 36px;
|
||||||
cursor: initial;
|
|
||||||
margin-left: 0;
|
|
||||||
padding-left: 18px;
|
|
||||||
}
|
|
||||||
|
|
||||||
&-text {
|
|
||||||
color: #fff;
|
|
||||||
display: inline-block;
|
|
||||||
line-height: 24px;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
max-width: 213px;
|
|
||||||
overflow: hidden;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&-speaker {
|
&-speaker {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
&-ul {
|
|
||||||
margin:0;
|
|
||||||
padding:0;
|
|
||||||
list-style-type: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:hover, &:focus-within, &:focus {
|
&:hover, &:focus-within, &:focus {
|
||||||
.audio-preview-entry {
|
|
||||||
background: #36383C;
|
|
||||||
margin-left: 0;
|
|
||||||
padding-left: 48px;
|
|
||||||
|
|
||||||
&--selected {
|
|
||||||
padding-left: 18px;
|
|
||||||
background: $newToolbarBackgroundColor;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.audio-preview-test-button {
|
.audio-preview-test-button {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.audio-preview-entry-text {
|
.audio-preview-entry-text {
|
||||||
max-width: 178px;
|
max-width: 178px;
|
||||||
|
margin-right: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&:last-child {
|
|
||||||
padding-bottom: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.audio-preview-entry-text {
|
.audio-preview-entry-text {
|
||||||
max-width: 238px;
|
max-width: 238px;
|
||||||
}
|
}
|
||||||
|
@ -108,19 +51,6 @@
|
||||||
&-microphone {
|
&-microphone {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
&:hover {
|
|
||||||
.audio-preview-entry {
|
|
||||||
background: #36383C;
|
|
||||||
margin-left: 0;
|
|
||||||
padding-left: 48px;
|
|
||||||
|
|
||||||
&--selected {
|
|
||||||
background: $newToolbarBackgroundColor;
|
|
||||||
padding-left: 18px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&--nometer {
|
&--nometer {
|
||||||
.audio-preview-entry-text {
|
.audio-preview-entry-text {
|
||||||
max-width: 238px;
|
max-width: 238px;
|
||||||
|
@ -140,42 +70,21 @@
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 14px;
|
width: 14px;
|
||||||
|
|
||||||
& svg {
|
|
||||||
fill: #1C2025;
|
|
||||||
}
|
|
||||||
|
|
||||||
&--check {
|
|
||||||
background: #31B76A;
|
|
||||||
margin-right: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
&--exclamation {
|
&--exclamation {
|
||||||
margin-left: 6px;
|
margin-left: 6px;
|
||||||
|
|
||||||
& svg {
|
& svg {
|
||||||
fill: #E54B4B;
|
fill: #E54B4B;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&-hr {
|
|
||||||
border-top: 1px solid #4C4D50;
|
|
||||||
border-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
&-test-button {
|
&-test-button {
|
||||||
display: none;
|
display: none;
|
||||||
background: #FFF;
|
padding: 4px 10px;
|
||||||
border: 1px solid #D1DBE8;
|
|
||||||
border-radius: 3px;
|
|
||||||
color: #1C2025;
|
|
||||||
cursor: pointer;
|
|
||||||
font-weight: 600;
|
|
||||||
font-size: 0.8rem;
|
|
||||||
line-height: 24px;
|
|
||||||
padding: 2px 8px;
|
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 16px;
|
right: 16px;
|
||||||
top: 5px;
|
top: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&-meter-mic {
|
&-meter-mic {
|
||||||
|
@ -184,9 +93,7 @@
|
||||||
top: 14px;
|
top: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Override @atlaskit/InlineDialog container which is made with styled components
|
&-checkbox-container {
|
||||||
& > div:nth-child(2) {
|
padding: 10px 16px;
|
||||||
outline: none;
|
|
||||||
padding: 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
126
css/_chat.scss
126
css/_chat.scss
|
@ -32,7 +32,7 @@
|
||||||
|
|
||||||
#chat-conversation-container {
|
#chat-conversation-container {
|
||||||
// extract message input height
|
// extract message input height
|
||||||
height: calc(100% - 68px);
|
height: calc(100% - 64px);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
position: relative;
|
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 {
|
.chat-header {
|
||||||
height: 70px;
|
height: 70px;
|
||||||
|
@ -124,13 +98,12 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.chat-input-container {
|
.chat-input-container {
|
||||||
padding: 0 16px 16px;
|
padding: 0 16px 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#chat-input {
|
#chat-input {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: flex-end;
|
align-items: flex-end;
|
||||||
padding: 4px;
|
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -263,15 +236,6 @@
|
||||||
-webkit-user-select: text;
|
-webkit-user-select: text;
|
||||||
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 {
|
.sr-only {
|
||||||
|
@ -288,24 +252,11 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.chatmessage {
|
.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 {
|
&.localuser {
|
||||||
background-color: $chatLocalMessageBackgroundColor;
|
background-color: $chatLocalMessageBackgroundColor;
|
||||||
border-radius: 6px 0px 6px 6px;
|
border-radius: 6px 0px 6px 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.usermessage {
|
|
||||||
white-space: pre-wrap;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.error {
|
&.error {
|
||||||
border-radius: 0px;
|
border-radius: 0px;
|
||||||
|
|
||||||
|
@ -320,22 +271,12 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.privatemessagenotice {
|
|
||||||
font-size: 11px;
|
|
||||||
font-weight: 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
.messagecontent {
|
.messagecontent {
|
||||||
margin: 8px;
|
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.timestamp {
|
|
||||||
color: #757575;
|
|
||||||
}
|
|
||||||
|
|
||||||
#smileys {
|
#smileys {
|
||||||
font-size: 20pt;
|
font-size: 20pt;
|
||||||
margin: auto;
|
margin: auto;
|
||||||
|
@ -409,24 +350,9 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.chat-message-group {
|
.chat-message-group {
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
|
|
||||||
&.local {
|
&.local {
|
||||||
align-items: flex-end;
|
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-name {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
@ -437,58 +363,10 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
&.error {
|
&.error {
|
||||||
.chatmessage {
|
|
||||||
background-color: $defaultWarningColor;
|
|
||||||
border-radius: 0px;
|
|
||||||
font-weight: 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
.display-name {
|
.display-name {
|
||||||
display: none;
|
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 {
|
.chat-dialog {
|
||||||
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
@keyframes rotateAroundY {
|
||||||
|
from { transform: rotateY(0deg); }
|
||||||
|
to { transform: rotateY(360deg); }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes rainbowRoad {
|
||||||
|
to {
|
||||||
|
background-position: 400% 0 !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: "Comic Sans MS", "Comic Sans", sans-serif !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
background: linear-gradient(90deg, rgba(255,0,0,1) 0%, rgba(255,154,0,1) 10%, rgba(208,222,33,1) 20%, rgba(79,220,74,1) 30%, rgba(63,218,216,1) 40%, rgba(47,201,226,1) 50%, rgba(28,127,238,1) 60%, rgba(95,21,242,1) 70%, rgba(186,12,248,1) 80%, rgba(251,7,217,1) 90%, rgba(255,0,0,1) 100%) !important;
|
||||||
|
-webkit-background-clip: text !important;
|
||||||
|
-webkit-text-fill-color: transparent !important;
|
||||||
|
-moz-background-clip: text !important;
|
||||||
|
-moz-text-fill-color: transparent !important;
|
||||||
|
animation: rainbowRoad 8s linear infinite !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.dominant-speaker {
|
||||||
|
box-shadow: inset 0px 0px 0px 4px rgba(255,0,255,0.33) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.display-avatar-only {
|
||||||
|
background-image: url("");
|
||||||
|
}
|
||||||
|
|
||||||
|
.videocontainer:nth-child(odd) {
|
||||||
|
transform: rotate(1.5deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.videocontainer:nth-child(even) {
|
||||||
|
transform: rotate(-1.3deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
#largeVideoContainer.videocontainer {
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sideToolbarContainer {
|
||||||
|
transform: rotate(-1.1deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.displayname:before {
|
||||||
|
content: "♡︎ ";
|
||||||
|
}
|
||||||
|
|
||||||
|
.displayname:after {
|
||||||
|
content: " ♡︎";
|
||||||
|
}
|
||||||
|
|
||||||
|
.avatar, .userAvatar {
|
||||||
|
transform: rotateY(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.avatar:hover, .userAvatar:hover {
|
||||||
|
animation: rotateAroundY 3.6s linear infinite;
|
||||||
|
}
|
|
@ -82,6 +82,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.left-column {
|
.left-column {
|
||||||
|
order: -1;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
flex-grow: 0;
|
flex-grow: 0;
|
||||||
|
@ -92,6 +93,7 @@
|
||||||
.right-column {
|
.right-column {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
align-items: flex-start;
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
padding-left: 16px;
|
padding-left: 16px;
|
||||||
padding-top: 13px;
|
padding-top: 13px;
|
||||||
|
@ -99,11 +101,11 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
line-height: 16px;
|
line-height: 16px;
|
||||||
padding-bottom: 4px;
|
margin-bottom: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.subtitle {
|
.subtitle {
|
||||||
color: #5E6D7A;
|
color: #5E6D7A;
|
||||||
|
@ -125,8 +127,7 @@
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.with-click-handler:hover,
|
&.with-click-handler:hover {
|
||||||
&.with-click-handler:focus {
|
|
||||||
background-color: #c7ddff;
|
background-color: #c7ddff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,28 +3,28 @@
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
|
||||||
& > svg {
|
& > svg {
|
||||||
fill: #4E5E6C;
|
fill: #525252;
|
||||||
width: 38px;
|
width: 38px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.metr--disabled {
|
&.metr--disabled {
|
||||||
& > svg {
|
& > svg {
|
||||||
fill: #4E5E6C;
|
fill: #525252;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.metr-l-0 {
|
.metr-l-0 {
|
||||||
rect:first-child {
|
rect:first-child {
|
||||||
fill: #31B76A;
|
fill: #1EC26A;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@for $i from 1 through 7 {
|
@for $i from 1 through 7 {
|
||||||
.metr-l-#{$i} {
|
.metr-l-#{$i} {
|
||||||
rect:nth-child(-n+#{$i+1}) {
|
rect:nth-child(-n+#{$i+1}) {
|
||||||
fill: #31B76A;
|
fill: #1EC26A;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
352
css/_polls.scss
352
css/_polls.scss
|
@ -1,353 +1,3 @@
|
||||||
.poll-dialog {
|
.polls-panel {
|
||||||
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-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);
|
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;
|
|
||||||
}
|
|
||||||
|
|
|
@ -5,15 +5,15 @@
|
||||||
.popupmenu__contents {
|
.popupmenu__contents {
|
||||||
.popupmenu__volume-slider {
|
.popupmenu__volume-slider {
|
||||||
&::-webkit-slider-runnable-track {
|
&::-webkit-slider-runnable-track {
|
||||||
background-color: $popupSliderColor;
|
background-color: #246FE5;
|
||||||
}
|
}
|
||||||
|
|
||||||
&::-moz-range-track {
|
&::-moz-range-track {
|
||||||
background-color: $popupSliderColor;
|
background-color: #246FE5;
|
||||||
}
|
}
|
||||||
|
|
||||||
&::-ms-fill-lower {
|
&::-ms-fill-lower {
|
||||||
background-color: $popupSliderColor;
|
background-color: #246FE5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
align-items: center;
|
align-items: center;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
margin-left: 16px;
|
margin-left: 16px;
|
||||||
|
max-width: 70%;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.space-top {
|
&.space-top {
|
||||||
|
@ -82,7 +83,7 @@
|
||||||
background-color: #FFFFFF;
|
background-color: #FFFFFF;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
height: 40px;
|
height: 40px;
|
||||||
width: 56px;
|
width: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.jitsi-content-recording-icon-container-without-switch {
|
.jitsi-content-recording-icon-container-without-switch {
|
||||||
|
|
|
@ -31,10 +31,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.welcome-tabs {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header-text-title {
|
.header-text-title {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
@ -56,13 +52,6 @@
|
||||||
.welcome-footer-row-block {
|
.welcome-footer-row-block {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
.welcome-badge {
|
|
||||||
margin-right: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.welcome-footer {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,24 +30,24 @@
|
||||||
right: -4px;
|
right: -4px;
|
||||||
top: -3px;
|
top: -3px;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background: #F2F3F4;
|
background: #F2F3F4;
|
||||||
box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25), 0px 0px 0px 1px rgba(0, 0, 0, 0.1);
|
box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25), 0px 0px 0px 1px rgba(0, 0, 0, 0.1);
|
||||||
|
|
||||||
&> svg {
|
& > svg {
|
||||||
fill: #000;
|
fill: #040404;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.settings-button-small-icon--disabled {
|
&.settings-button-small-icon--disabled {
|
||||||
background: #36383C;
|
background: #36383C;
|
||||||
|
|
||||||
&> svg {
|
&> svg {
|
||||||
fill: #929292;
|
fill: #929292;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&> svg {
|
& > svg {
|
||||||
fill: #fff;
|
fill: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
&#autoHide.with-always-on {
|
&#autoHide.with-always-on {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
animation: hideSubject forwards .6s ease-out;
|
animation: hideSubject forwards .6s ease-out;
|
||||||
margin-left: 4px;
|
|
||||||
|
|
||||||
& > .subject-info-container {
|
& > .subject-info-container {
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
|
@ -43,42 +42,6 @@
|
||||||
height: 28px;
|
height: 28px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.subject-text {
|
|
||||||
background: rgba(0, 0, 0, 0.6);
|
|
||||||
border-radius: 3px 0px 0px 3px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
font-size: 14px;
|
|
||||||
line-height: 28px;
|
|
||||||
padding: 0 16px;
|
|
||||||
height: 28px;
|
|
||||||
max-width: 324px;
|
|
||||||
|
|
||||||
@media (max-width: 300px) {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
&--content {
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.subject-timer {
|
|
||||||
background: rgba(0, 0, 0, 0.8);
|
|
||||||
border-radius: 0px 3px 3px 0px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
font-size: 12px;
|
|
||||||
line-height: 28px;
|
|
||||||
min-width: 34px;
|
|
||||||
padding: 0 8px;
|
|
||||||
height: 28px;
|
|
||||||
|
|
||||||
@media (max-width: 300px) {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.details-container {
|
.details-container {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
|
@ -120,12 +120,16 @@
|
||||||
margin: 8px 0;
|
margin: 8px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hangup-button {
|
div.hangup-button {
|
||||||
background-color: $hangupColor;
|
background-color: #CB2233;
|
||||||
|
|
||||||
@media (hover: hover) and (pointer: fine) {
|
@media (hover: hover) and (pointer: fine) {
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: $hangupHoverColor;
|
background-color: #E04757;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:active {
|
||||||
|
background-color: #A21B29;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,12 +138,16 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.hangup-menu-button {
|
div.hangup-menu-button {
|
||||||
background-color: $hangupMenuButtonColor;
|
background-color: #CB2233;
|
||||||
|
|
||||||
@media (hover: hover) and (pointer: fine) {
|
@media (hover: hover) and (pointer: fine) {
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: $hangupMenuButtonHoverColor;
|
background-color: #E04757;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:active {
|
||||||
|
background-color: #A21B29;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,10 +4,6 @@
|
||||||
* Style variables
|
* Style variables
|
||||||
*/
|
*/
|
||||||
$baseFontFamily: -apple-system, BlinkMacSystemFont, 'open_sanslight', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
$baseFontFamily: -apple-system, BlinkMacSystemFont, 'open_sanslight', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||||
$hangupColor:#DD3849;
|
|
||||||
$hangupHoverColor: #F25363;
|
|
||||||
$hangupMenuButtonColor:#0056E0;;
|
|
||||||
$hangupMenuButtonHoverColor: #246FE5;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Size variables.
|
* Size variables.
|
||||||
|
@ -79,7 +75,6 @@ $modalTextColor: #333;
|
||||||
$chatActionsSeparatorColor: rgb(173, 105, 112);
|
$chatActionsSeparatorColor: rgb(173, 105, 112);
|
||||||
$chatBackgroundColor: #131519;
|
$chatBackgroundColor: #131519;
|
||||||
$chatInputSeparatorColor: #A4B8D1;
|
$chatInputSeparatorColor: #A4B8D1;
|
||||||
$chatLobbyMessageBackgroundColor: #6A50D3;
|
|
||||||
$chatLobbyActionsSeparatorColor: #6A50D3;
|
$chatLobbyActionsSeparatorColor: #6A50D3;
|
||||||
$chatLocalMessageBackgroundColor: #484A4F;
|
$chatLocalMessageBackgroundColor: #484A4F;
|
||||||
$chatPrivateMessageBackgroundColor: rgb(153, 69, 77);
|
$chatPrivateMessageBackgroundColor: rgb(153, 69, 77);
|
||||||
|
@ -206,11 +201,6 @@ $deepLinkingDialInConferenceIdPadding: inherit;
|
||||||
$deepLinkingDialInConferenceIdBackgroundColor: inherit;
|
$deepLinkingDialInConferenceIdBackgroundColor: inherit;
|
||||||
$deepLinkingDialInConferenceIdBorderRadius: inherit;
|
$deepLinkingDialInConferenceIdBorderRadius: inherit;
|
||||||
|
|
||||||
$deepLinkingDialInConferenceNameFontSize: inherit;
|
|
||||||
$deepLinkingDialInConferenceNameLineHeight: inherit;
|
|
||||||
$deepLinkingDialInConferenceNameMarginBottom: none;
|
|
||||||
$deepLinkingDialInConferenceNameFontWeight: inherit;
|
|
||||||
|
|
||||||
$deepLinkingDialInConferenceDescriptionFontSize: 0.8em;
|
$deepLinkingDialInConferenceDescriptionFontSize: 0.8em;
|
||||||
$deepLinkingDialInConferenceDescriptionLineHeight: inherit;
|
$deepLinkingDialInConferenceDescriptionLineHeight: inherit;
|
||||||
$deepLinkingDialInConferenceDescriptionMarginBottom: none;
|
$deepLinkingDialInConferenceDescriptionMarginBottom: none;
|
||||||
|
|
|
@ -3,49 +3,38 @@
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
|
||||||
&-container {
|
&-container {
|
||||||
max-height: 344px;
|
max-height: 456px;
|
||||||
background: $menuBG;
|
|
||||||
border-radius: 3px;
|
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
padding: 8px;
|
margin-bottom: 4px;
|
||||||
margin-bottom: 8px;
|
position: relative;
|
||||||
|
right: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
&-entry {
|
&-entry {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
height: 168px;
|
height: 138px;
|
||||||
margin-bottom: 8px;
|
width: 244px;
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 284px;
|
margin: 0 7px 4px;
|
||||||
|
border-radius: 6px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
&:last-child {
|
&:last-child {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
&--selected {
|
&--selected {
|
||||||
border: 3px solid #31B76A;
|
border: 2px solid #4687ED;
|
||||||
border-radius: 3px;
|
|
||||||
cursor: default;
|
|
||||||
height: 162px;
|
|
||||||
width: 278px;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&-video {
|
&-video {
|
||||||
border-radius: 3px;
|
|
||||||
height: 100%;
|
height: 100%;
|
||||||
object-fit: cover;
|
object-fit: cover;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
&-overlay {
|
|
||||||
background: rgba(42, 58, 75, 0.6);
|
|
||||||
height: 100%;
|
|
||||||
position: absolute;
|
|
||||||
width: 100%;
|
|
||||||
z-index: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
&-error {
|
&-error {
|
||||||
align-items: center;
|
align-items: center;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
@ -56,23 +45,22 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
&-label {
|
&-label {
|
||||||
bottom: 8px;
|
|
||||||
color: #fff;
|
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: 100%;
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
max-width: 100%;
|
||||||
|
padding: 8px;
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
|
|
||||||
&-container {
|
|
||||||
margin: 0 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
&-text {
|
&-text {
|
||||||
background-color: #131519;
|
background-color: rgba(0, 0, 0, 0.7);
|
||||||
border-radius: 3px;
|
border-radius: 4px;
|
||||||
padding: 2px 8px;
|
padding: 4px 8px;
|
||||||
font-size: 13px;
|
color: #fff;
|
||||||
line-height: 20px;
|
font-size: 12px;
|
||||||
margin: 0 auto;
|
line-height: 16px;
|
||||||
|
font-weight: 600;
|
||||||
max-width: calc(100% - 16px);
|
max-width: calc(100% - 16px);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
|
@ -80,8 +68,8 @@
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Override @atlaskit/InlineDialog container which is made with styled components
|
|
||||||
& > div:nth-child(2) {
|
&-checkbox-container {
|
||||||
padding: 0;
|
padding: 10px 14px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,7 +90,7 @@ body.welcome-page {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
padding-left: 10px;
|
padding-left: 10px;
|
||||||
|
|
||||||
&:focus {
|
&.focus-visible {
|
||||||
outline: auto 2px #005fcc;
|
outline: auto 2px #005fcc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -167,7 +167,7 @@ body.welcome-page {
|
||||||
margin: 4px;
|
margin: 4px;
|
||||||
display: $welcomePageTabButtonsDisplay;
|
display: $welcomePageTabButtonsDisplay;
|
||||||
|
|
||||||
.tab {
|
[role="tab"] {
|
||||||
background-color: #c7ddff;
|
background-color: #c7ddff;
|
||||||
border-radius: 7px;
|
border-radius: 7px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
@ -176,8 +176,10 @@ body.welcome-page {
|
||||||
margin: 2px;
|
margin: 2px;
|
||||||
padding: 7px 0;
|
padding: 7px 0;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
color: inherit;
|
||||||
|
border: 0;
|
||||||
|
|
||||||
&.selected {
|
&[aria-selected="true"] {
|
||||||
background-color: #FFF;
|
background-color: #FFF;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,6 +67,13 @@
|
||||||
font-size: 1em;
|
font-size: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.dial-in-conference-id {
|
||||||
|
text-align: center;
|
||||||
|
min-width: 200px;
|
||||||
|
margin-top: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
.dial-in-conference-id {
|
.dial-in-conference-id {
|
||||||
margin: $deepLinkingDialInConferenceIdMargin;
|
margin: $deepLinkingDialInConferenceIdMargin;
|
||||||
padding: $deepLinkingDialInConferenceIdPadding;
|
padding: $deepLinkingDialInConferenceIdPadding;
|
||||||
|
@ -74,24 +81,12 @@
|
||||||
border-radius: $deepLinkingDialInConferenceIdBorderRadius;
|
border-radius: $deepLinkingDialInConferenceIdBorderRadius;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dial-in-conference-name {
|
|
||||||
font-size: $deepLinkingDialInConferenceNameFontSize;
|
|
||||||
line-height: $deepLinkingDialInConferenceNameLineHeight;
|
|
||||||
margin-bottom: $deepLinkingDialInConferenceNameMarginBottom;
|
|
||||||
font-weight: $deepLinkingDialInConferenceNameFontWeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dial-in-conference-description {
|
.dial-in-conference-description {
|
||||||
font-size: $deepLinkingDialInConferenceDescriptionFontSize;
|
font-size: $deepLinkingDialInConferenceDescriptionFontSize;
|
||||||
line-height: $deepLinkingDialInConferenceDescriptionLineHeight;
|
line-height: $deepLinkingDialInConferenceDescriptionLineHeight;
|
||||||
margin-bottom: $deepLinkingDialInConferenceDescriptionMarginBottom;
|
margin-bottom: $deepLinkingDialInConferenceDescriptionMarginBottom;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dial-in-conference-pin {
|
|
||||||
font-size: $deepLinkingDialInConferencePinFontSize;
|
|
||||||
line-height: $deepLinkingDialInConferencePinLineHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
.toll-free-list {
|
.toll-free-list {
|
||||||
min-width: 80px;
|
min-width: 80px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,6 @@ $flagsImagePath: "../images/";
|
||||||
@import 'reload_overlay/reload_overlay';
|
@import 'reload_overlay/reload_overlay';
|
||||||
@import 'mini_toolbox';
|
@import 'mini_toolbox';
|
||||||
@import 'modals/desktop-picker/desktop-picker';
|
@import 'modals/desktop-picker/desktop-picker';
|
||||||
@import 'modals/device-selection/device-selection';
|
|
||||||
@import 'modals/dialog';
|
@import 'modals/dialog';
|
||||||
@import 'modals/embed-meeting/embed-meeting';
|
@import 'modals/embed-meeting/embed-meeting';
|
||||||
@import 'modals/feedback/feedback';
|
@import 'modals/feedback/feedback';
|
||||||
|
@ -95,3 +94,9 @@ $flagsImagePath: "../images/";
|
||||||
@import 'notifications';
|
@import 'notifications';
|
||||||
|
|
||||||
/* Modules END */
|
/* Modules END */
|
||||||
|
|
||||||
|
/* Jeet crew BEGIN */
|
||||||
|
|
||||||
|
@import 'jiti';
|
||||||
|
|
||||||
|
/* Jeet crew END */
|
||||||
|
|
|
@ -63,3 +63,8 @@
|
||||||
.desktop-source-preview-image-container {
|
.desktop-source-preview-image-container {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.desktop-picker-tabs-container {
|
||||||
|
width: 65%;
|
||||||
|
margin-top: 3px;
|
||||||
|
}
|
||||||
|
|
|
@ -1,148 +0,0 @@
|
||||||
.device-selection {
|
|
||||||
.device-selectors {
|
|
||||||
font-size: 14px;
|
|
||||||
|
|
||||||
> div {
|
|
||||||
display: block;
|
|
||||||
margin-bottom: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.device-selector-icon {
|
|
||||||
align-self: center;
|
|
||||||
color: inherit;
|
|
||||||
font-size: 20px;
|
|
||||||
margin-left: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.device-selector-label {
|
|
||||||
margin-bottom: 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* device-selector-trigger stylings attempt to mimic AtlasKit button */
|
|
||||||
.device-selector-trigger {
|
|
||||||
background-color: #0E1624;
|
|
||||||
border: 1px solid #455166;
|
|
||||||
border-radius: 5px;
|
|
||||||
display: flex;
|
|
||||||
height: 2.3em;
|
|
||||||
justify-content: space-between;
|
|
||||||
line-height: 2.3em;
|
|
||||||
overflow: hidden;
|
|
||||||
padding: 0 8px;
|
|
||||||
}
|
|
||||||
.device-selector-trigger-disabled {
|
|
||||||
.device-selector-trigger {
|
|
||||||
color: #a5adba;
|
|
||||||
cursor: default;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.device-selector-trigger-text {
|
|
||||||
overflow: hidden;
|
|
||||||
text-align: center;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
white-space: nowrap;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.device-selection-column {
|
|
||||||
box-sizing: border-box;
|
|
||||||
display: inline-block;
|
|
||||||
vertical-align: top;
|
|
||||||
|
|
||||||
&.column-selectors {
|
|
||||||
margin-left: 15px;
|
|
||||||
width: 45%;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.column-video {
|
|
||||||
width: 50%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.device-selection-video-container {
|
|
||||||
border-radius: 3px;
|
|
||||||
margin-bottom: 5px;
|
|
||||||
|
|
||||||
.video-input-preview {
|
|
||||||
margin-top: 2px;
|
|
||||||
position: relative;
|
|
||||||
|
|
||||||
> video {
|
|
||||||
border-radius: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.video-input-preview-error {
|
|
||||||
color: $participantNameColor;
|
|
||||||
display: none;
|
|
||||||
left: 0;
|
|
||||||
position: absolute;
|
|
||||||
right: 0;
|
|
||||||
text-align: center;
|
|
||||||
top: 50%;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.video-preview-has-error {
|
|
||||||
background: black;
|
|
||||||
|
|
||||||
.video-input-preview-error {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.video-input-preview-display {
|
|
||||||
height: auto;
|
|
||||||
overflow: hidden;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.audio-output-preview {
|
|
||||||
font-size: 14px;
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: #6FB1EA;
|
|
||||||
cursor: pointer;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover {
|
|
||||||
color: #B3D4FF;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.audio-input-preview {
|
|
||||||
background: #1B2638;
|
|
||||||
border-radius: 5px;
|
|
||||||
height: 8px;
|
|
||||||
|
|
||||||
.audio-input-preview-level {
|
|
||||||
background: #75B1FF;
|
|
||||||
border-radius: 5px;
|
|
||||||
height: 100%;
|
|
||||||
-webkit-transition: width .1s ease-in-out;
|
|
||||||
-moz-transition: width .1s ease-in-out;
|
|
||||||
-o-transition: width .1s ease-in-out;
|
|
||||||
transition: width .1s ease-in-out;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.device-selection.video-hidden {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
width: 100%;
|
|
||||||
|
|
||||||
.column-selectors {
|
|
||||||
width: 100%;
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.column-video {
|
|
||||||
order: 1;
|
|
||||||
width: 100%;
|
|
||||||
margin-top: 8px;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -44,61 +44,3 @@
|
||||||
-webkit-animation-timing-function: ease-in-out;
|
-webkit-animation-timing-function: ease-in-out;
|
||||||
animation-timing-function: ease-in-out
|
animation-timing-function: ease-in-out
|
||||||
}
|
}
|
||||||
|
|
||||||
.feedback-dialog {
|
|
||||||
margin-bottom: 5px;
|
|
||||||
|
|
||||||
.details {
|
|
||||||
textarea {
|
|
||||||
min-height: 100px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.input-control {
|
|
||||||
background-color: $feedbackInputBg;
|
|
||||||
color: $feedbackInputTextColor;
|
|
||||||
|
|
||||||
&::-webkit-input-placeholder {
|
|
||||||
color: $feedbackInputPlaceholderColor;
|
|
||||||
}
|
|
||||||
&::-moz-placeholder { /* Firefox 19+ */
|
|
||||||
color: $feedbackInputPlaceholderColor;
|
|
||||||
}
|
|
||||||
&:-ms-input-placeholder {
|
|
||||||
color: $feedbackInputPlaceholderColor;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.rating {
|
|
||||||
line-height: 1.2;
|
|
||||||
margin-top: 10px;
|
|
||||||
text-align: center;
|
|
||||||
|
|
||||||
.star-label {
|
|
||||||
font-size: 14px;
|
|
||||||
height: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.star-btn {
|
|
||||||
color: inherit;
|
|
||||||
cursor: pointer;
|
|
||||||
display: inline-block;
|
|
||||||
font-size: 34px;
|
|
||||||
outline: none;
|
|
||||||
position: relative;
|
|
||||||
text-decoration: none;
|
|
||||||
@include transition(all .2s ease);
|
|
||||||
|
|
||||||
&.active,
|
|
||||||
&:hover,
|
|
||||||
&.starHover {
|
|
||||||
color: #36B37E;
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
.star-btn:focus,
|
|
||||||
.star-btn:active {
|
|
||||||
outline: 1px solid #B8C7E0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -50,6 +50,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.dial-in-numbers-list {
|
.dial-in-numbers-list {
|
||||||
|
max-width: 334px;
|
||||||
|
width: 100%;
|
||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
|
@ -59,10 +61,6 @@
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
tr {
|
|
||||||
border-bottom: 1px solid #d1dbe8;
|
|
||||||
}
|
|
||||||
|
|
||||||
.flag-cell {
|
.flag-cell {
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
width: 30px;
|
width: 30px;
|
||||||
|
@ -91,6 +89,7 @@
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
list-style: none;
|
list-style: none;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
li.toll-free:empty:before {
|
li.toll-free:empty:before {
|
||||||
|
@ -119,11 +118,6 @@
|
||||||
margin-top: 40px;
|
margin-top: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dial-in-conference-name,
|
|
||||||
.dial-in-conference-pin {
|
|
||||||
font-size: 18px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dial-in-conference-description {
|
.dial-in-conference-description {
|
||||||
margin: 12px;
|
margin: 12px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,11 +41,11 @@
|
||||||
&-dropdown-btns {
|
&-dropdown-btns {
|
||||||
padding: 8px 0;
|
padding: 8px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
&-dropdown-container {
|
&-dropdown-container {
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Override default InlineDialog behaviour, since it does not play nicely with relative widths
|
* Override default InlineDialog behaviour, since it does not play nicely with relative widths
|
||||||
*/
|
*/
|
||||||
|
@ -56,5 +56,13 @@
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.prejoin-input {
|
||||||
|
margin-bottom: 16px;
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
& input {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,14 +1,4 @@
|
||||||
.premeeting-screen {
|
.premeeting-screen {
|
||||||
background: #292929;
|
|
||||||
bottom: 0;
|
|
||||||
display: flex;
|
|
||||||
font-size: 1.3em;
|
|
||||||
left: 0;
|
|
||||||
position: absolute;
|
|
||||||
right: 0;
|
|
||||||
top: 0;
|
|
||||||
z-index: $toolbarZ + 2;
|
|
||||||
|
|
||||||
.action-btn {
|
.action-btn {
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
@ -75,139 +65,44 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.content {
|
#new-toolbox {
|
||||||
align-items: center;
|
bottom: 0;
|
||||||
box-sizing: border-box;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
flex-shrink: 0;
|
|
||||||
height: 100%;
|
|
||||||
margin: 0 30px;
|
|
||||||
padding: 24px 0 16px;
|
|
||||||
position: relative;
|
position: relative;
|
||||||
width: $prejoinDefaultContentWidth;
|
transition: none;
|
||||||
z-index: $toolbarZ + 2;
|
|
||||||
|
|
||||||
&-controls {
|
.toolbox-content {
|
||||||
align-items: center;
|
margin-bottom: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toolbox-content-items {
|
||||||
|
@include ltr;
|
||||||
|
background: transparent;
|
||||||
|
box-shadow: none;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
justify-content: space-between;
|
||||||
margin: auto;
|
padding: 8px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toolbox-content,
|
||||||
|
.toolbox-content-wrapper,
|
||||||
|
.toolbox-content-items {
|
||||||
|
box-sizing: border-box;
|
||||||
width: 100%;
|
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) {
|
@media (max-width: 400px) {
|
||||||
.content {
|
|
||||||
padding: 16px;
|
|
||||||
width: 100%;
|
|
||||||
|
|
||||||
&-controls {
|
|
||||||
input.field {
|
|
||||||
font-size: 16px;
|
|
||||||
padding: 14px 16px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.title {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.device-status-error {
|
.device-status-error {
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
margin: 0 -16px;
|
margin: 0 -16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
input.field {
|
|
||||||
font-size: 16px;
|
|
||||||
padding: 14px 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.action-btn {
|
.action-btn {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
margin-bottom: 8px;
|
margin-bottom: 8px;
|
||||||
padding: 11px 16px;
|
padding: 11px 16px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
input::placeholder {
|
|
||||||
color: #040404;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#preview {
|
#preview {
|
||||||
|
|
|
@ -65,7 +65,6 @@ $errorColor: #c61600;
|
||||||
|
|
||||||
// Popover colors
|
// Popover colors
|
||||||
$popoverFontColor: #ffffff !important;
|
$popoverFontColor: #ffffff !important;
|
||||||
$popupSliderColor: #0376da;
|
|
||||||
|
|
||||||
// Toolbar
|
// Toolbar
|
||||||
$toolbarBackground: rgba(0, 0, 0, 0.5);
|
$toolbarBackground: rgba(0, 0, 0, 0.5);
|
||||||
|
|
|
@ -44,12 +44,7 @@ case "$1" in
|
||||||
fi
|
fi
|
||||||
JVB_SECRET="$RET"
|
JVB_SECRET="$RET"
|
||||||
|
|
||||||
db_get jicofo/jicofo-authuser
|
JICOFO_AUTH_USER="focus"
|
||||||
if [ -z "$RET" ] ; then
|
|
||||||
db_input critical jicofo/jicofo-authuser || true
|
|
||||||
db_go
|
|
||||||
fi
|
|
||||||
JICOFO_AUTH_USER="$RET"
|
|
||||||
|
|
||||||
db_get jicofo/jicofo-authpassword
|
db_get jicofo/jicofo-authpassword
|
||||||
if [ -z "$RET" ] ; then
|
if [ -z "$RET" ] ; then
|
||||||
|
|
|
@ -13,12 +13,6 @@ Type: password
|
||||||
_Description: Jitsi Videobridge Component secret:
|
_Description: Jitsi Videobridge Component secret:
|
||||||
The secret used by Jitsi Videobridge to connect to xmpp server as component.
|
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
|
Template: jicofo/jicofo-authpassword
|
||||||
Type: password
|
Type: password
|
||||||
_Description: Jicofo user password:
|
_Description: Jicofo user password:
|
||||||
|
|
|
@ -176,9 +176,10 @@ case "$1" in
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Fixes multi-stream flags to workaround problem with mobile joining a multi-stream call with multi-stream disabled
|
# Fixes multi-stream flags to workaround problem with mobile joining a multi-stream call with multi-stream disabled
|
||||||
FIX_MSG="//Enables multi-stream, do not delete me"
|
FIX_MSG="// Temporary backwards compatibility with old mobile clients."
|
||||||
if ! grep -q "^${FIX_MSG}" $JITSI_MEET_CONFIG; then
|
if ! grep -q "^${FIX_MSG}" $JITSI_MEET_CONFIG; then
|
||||||
sed -i "s#config.flags.sourceNameSignaling#${FIX_MSG}\nconfig.flags = config.flags || {};\nconfig.flags.sourceNameSignaling#g" $JITSI_MEET_CONFIG
|
echo $FIX_MSG >> $JITSI_MEET_CONFIG
|
||||||
|
echo "config.flags = config.flags || {};" >> $JITSI_MEET_CONFIG
|
||||||
fi
|
fi
|
||||||
if ! grep -q "^config.flags.sourceNameSignaling*" $JITSI_MEET_CONFIG; then
|
if ! grep -q "^config.flags.sourceNameSignaling*" $JITSI_MEET_CONFIG; then
|
||||||
echo "config.flags.sourceNameSignaling = true;" >> $JITSI_MEET_CONFIG
|
echo "config.flags.sourceNameSignaling = true;" >> $JITSI_MEET_CONFIG
|
||||||
|
|
|
@ -8,7 +8,6 @@ sounds /usr/share/jitsi-meet/
|
||||||
fonts /usr/share/jitsi-meet/
|
fonts /usr/share/jitsi-meet/
|
||||||
images /usr/share/jitsi-meet/
|
images /usr/share/jitsi-meet/
|
||||||
lang /usr/share/jitsi-meet/
|
lang /usr/share/jitsi-meet/
|
||||||
connection_optimization /usr/share/jitsi-meet/
|
|
||||||
resources/robots.txt /usr/share/jitsi-meet/
|
resources/robots.txt /usr/share/jitsi-meet/
|
||||||
resources/*.sh /usr/share/jitsi-meet/scripts/
|
resources/*.sh /usr/share/jitsi-meet/scripts/
|
||||||
pwa-worker.js /usr/share/jitsi-meet/
|
pwa-worker.js /usr/share/jitsi-meet/
|
||||||
|
|
|
@ -93,7 +93,7 @@ server {
|
||||||
}
|
}
|
||||||
|
|
||||||
# ensure all static content can always be found first
|
# ensure all static content can always be found first
|
||||||
location ~ ^/(libs|css|static|images|fonts|lang|sounds|connection_optimization|.well-known)/(.*)$
|
location ~ ^/(libs|css|static|images|fonts|lang|sounds|.well-known)/(.*)$
|
||||||
{
|
{
|
||||||
add_header 'Access-Control-Allow-Origin' '*';
|
add_header 'Access-Control-Allow-Origin' '*';
|
||||||
alias /usr/share/jitsi-meet/$1/$2;
|
alias /usr/share/jitsi-meet/$1/$2;
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 1.9 KiB |
Binary file not shown.
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 6.3 KiB |
|
@ -182,8 +182,6 @@
|
||||||
'error', loadErrHandler, true /* capture phase type of listener */);
|
'error', loadErrHandler, true /* capture phase type of listener */);
|
||||||
</script>
|
</script>
|
||||||
<script><!--#include virtual="/config.js" --></script><!-- adapt to your needs, i.e. set hosts and bosh path -->
|
<script><!--#include virtual="/config.js" --></script><!-- adapt to your needs, i.e. set hosts and bosh path -->
|
||||||
<!--#include virtual="connection_optimization/connection_optimization.html" -->
|
|
||||||
<script src="libs/do_external_connect.min.js?v=1"></script>
|
|
||||||
<script><!--#include virtual="/interface_config.js" --></script>
|
<script><!--#include virtual="/interface_config.js" --></script>
|
||||||
<script src="libs/lib-jitsi-meet.min.js?v=139"></script>
|
<script src="libs/lib-jitsi-meet.min.js?v=139"></script>
|
||||||
<script src="libs/app.bundle.min.js?v=139"></script>
|
<script src="libs/app.bundle.min.js?v=139"></script>
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var interfaceConfig = {
|
var interfaceConfig = {
|
||||||
APP_NAME: 'Jitsi Meet',
|
APP_NAME: 'JitSea 🏴☠️',
|
||||||
AUDIO_LEVEL_PRIMARY_COLOR: 'rgba(255,255,255,0.4)',
|
AUDIO_LEVEL_PRIMARY_COLOR: 'rgba(255,255,255,0.4)',
|
||||||
AUDIO_LEVEL_SECONDARY_COLOR: 'rgba(255,255,255,0.2)',
|
AUDIO_LEVEL_SECONDARY_COLOR: 'rgba(255,255,255,0.2)',
|
||||||
|
|
||||||
|
@ -195,8 +195,6 @@ var interfaceConfig = {
|
||||||
*/
|
*/
|
||||||
// MOBILE_DOWNLOAD_LINK_ANDROID: 'https://play.google.com/store/apps/details?id=org.jitsi.meet',
|
// MOBILE_DOWNLOAD_LINK_ANDROID: 'https://play.google.com/store/apps/details?id=org.jitsi.meet',
|
||||||
|
|
||||||
// SHOW_DEEP_LINKING_IMAGE: false,
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specify mobile app scheme for opening the app from the mobile browser.
|
* Specify mobile app scheme for opening the app from the mobile browser.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -373,8 +373,12 @@ PODS:
|
||||||
- React-Core
|
- React-Core
|
||||||
- react-native-performance (2.1.0):
|
- react-native-performance (2.1.0):
|
||||||
- React-Core
|
- React-Core
|
||||||
- react-native-safe-area-context (3.3.2):
|
- react-native-safe-area-context (4.4.1):
|
||||||
|
- RCT-Folly
|
||||||
|
- RCTRequired
|
||||||
|
- RCTTypeSafety
|
||||||
- React-Core
|
- React-Core
|
||||||
|
- ReactCommon/turbomodule/core
|
||||||
- react-native-slider (4.1.12):
|
- react-native-slider (4.1.12):
|
||||||
- React-Core
|
- React-Core
|
||||||
- react-native-splash-screen (3.3.0):
|
- react-native-splash-screen (3.3.0):
|
||||||
|
@ -385,7 +389,7 @@ PODS:
|
||||||
- react-native-video/Video (6.0.0-alpha.1):
|
- react-native-video/Video (6.0.0-alpha.1):
|
||||||
- PromisesSwift
|
- PromisesSwift
|
||||||
- React-Core
|
- React-Core
|
||||||
- react-native-webrtc (106.0.1):
|
- react-native-webrtc (106.0.6):
|
||||||
- JitsiWebRTC (~> 106.0.0)
|
- JitsiWebRTC (~> 106.0.0)
|
||||||
- React-Core
|
- React-Core
|
||||||
- react-native-webview (11.15.1):
|
- react-native-webview (11.15.1):
|
||||||
|
@ -461,13 +465,11 @@ PODS:
|
||||||
- React-Core
|
- React-Core
|
||||||
- RNCClipboard (1.5.1):
|
- RNCClipboard (1.5.1):
|
||||||
- React-Core
|
- React-Core
|
||||||
- RNCMaskedView (0.2.6):
|
|
||||||
- React-Core
|
|
||||||
- RNDefaultPreference (1.4.4):
|
- RNDefaultPreference (1.4.4):
|
||||||
- React-Core
|
- React-Core
|
||||||
- RNDeviceInfo (8.4.8):
|
- RNDeviceInfo (8.4.8):
|
||||||
- React-Core
|
- React-Core
|
||||||
- RNGestureHandler (2.1.0):
|
- RNGestureHandler (2.9.0):
|
||||||
- React-Core
|
- React-Core
|
||||||
- RNGoogleSignin (7.0.4):
|
- RNGoogleSignin (7.0.4):
|
||||||
- GoogleSignIn (~> 6.0.0)
|
- GoogleSignIn (~> 6.0.0)
|
||||||
|
@ -543,7 +545,6 @@ DEPENDENCIES:
|
||||||
- RNCalendarEvents (from `../node_modules/react-native-calendar-events`)
|
- RNCalendarEvents (from `../node_modules/react-native-calendar-events`)
|
||||||
- "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)"
|
- "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)"
|
||||||
- "RNCClipboard (from `../node_modules/@react-native-community/clipboard`)"
|
- "RNCClipboard (from `../node_modules/@react-native-community/clipboard`)"
|
||||||
- "RNCMaskedView (from `../node_modules/@react-native-masked-view/masked-view`)"
|
|
||||||
- RNDefaultPreference (from `../node_modules/react-native-default-preference`)
|
- RNDefaultPreference (from `../node_modules/react-native-default-preference`)
|
||||||
- RNDeviceInfo (from `../node_modules/react-native-device-info`)
|
- RNDeviceInfo (from `../node_modules/react-native-device-info`)
|
||||||
- RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
|
- RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
|
||||||
|
@ -678,8 +679,6 @@ EXTERNAL SOURCES:
|
||||||
:path: "../node_modules/@react-native-async-storage/async-storage"
|
:path: "../node_modules/@react-native-async-storage/async-storage"
|
||||||
RNCClipboard:
|
RNCClipboard:
|
||||||
:path: "../node_modules/@react-native-community/clipboard"
|
:path: "../node_modules/@react-native-community/clipboard"
|
||||||
RNCMaskedView:
|
|
||||||
:path: "../node_modules/@react-native-masked-view/masked-view"
|
|
||||||
RNDefaultPreference:
|
RNDefaultPreference:
|
||||||
:path: "../node_modules/react-native-default-preference"
|
:path: "../node_modules/react-native-default-preference"
|
||||||
RNDeviceInfo:
|
RNDeviceInfo:
|
||||||
|
@ -751,11 +750,11 @@ SPEC CHECKSUMS:
|
||||||
react-native-orientation-locker: 851f6510d8046ea2f14aa169b1e01fcd309a94ba
|
react-native-orientation-locker: 851f6510d8046ea2f14aa169b1e01fcd309a94ba
|
||||||
react-native-pager-view: 3ee7d4c7697fb3ef788346e834a60cca97ed8540
|
react-native-pager-view: 3ee7d4c7697fb3ef788346e834a60cca97ed8540
|
||||||
react-native-performance: f4b6604a9d5a8a7407e34a82fab6c641d9a3ec12
|
react-native-performance: f4b6604a9d5a8a7407e34a82fab6c641d9a3ec12
|
||||||
react-native-safe-area-context: 584dc04881deb49474363f3be89e4ca0e854c057
|
react-native-safe-area-context: 99b24a0c5acd0d5dcac2b1a7f18c49ea317be99a
|
||||||
react-native-slider: 6e9b86e76cce4b9e35b3403193a6432ed07e0c81
|
react-native-slider: 6e9b86e76cce4b9e35b3403193a6432ed07e0c81
|
||||||
react-native-splash-screen: 4312f786b13a81b5169ef346d76d33bc0c6dc457
|
react-native-splash-screen: 4312f786b13a81b5169ef346d76d33bc0c6dc457
|
||||||
react-native-video: bb6f12a7198db53b261fefb5d609dc77417acc8b
|
react-native-video: bb6f12a7198db53b261fefb5d609dc77417acc8b
|
||||||
react-native-webrtc: aa3a0fdc4c410813892b97d18947f223d3e50f0c
|
react-native-webrtc: 22ac6c64a1e38552bb173dde81ffea6979a58ef3
|
||||||
react-native-webview: ea4899a1056c782afa96dd082179a66cbebf5504
|
react-native-webview: ea4899a1056c782afa96dd082179a66cbebf5504
|
||||||
React-perflogger: 0458a87ea9a7342079e7a31b0d32b3734fb8415f
|
React-perflogger: 0458a87ea9a7342079e7a31b0d32b3734fb8415f
|
||||||
React-RCTActionSheet: 22538001ea2926dea001111dd2846c13a0730bc9
|
React-RCTActionSheet: 22538001ea2926dea001111dd2846c13a0730bc9
|
||||||
|
@ -772,10 +771,9 @@ SPEC CHECKSUMS:
|
||||||
RNCalendarEvents: 7e65eb4a94f53c1744d1e275f7fafcfaa619f7a3
|
RNCalendarEvents: 7e65eb4a94f53c1744d1e275f7fafcfaa619f7a3
|
||||||
RNCAsyncStorage: 005c0e2f09575360f142d0d1f1f15e4ec575b1af
|
RNCAsyncStorage: 005c0e2f09575360f142d0d1f1f15e4ec575b1af
|
||||||
RNCClipboard: 41d8d918092ae8e676f18adada19104fa3e68495
|
RNCClipboard: 41d8d918092ae8e676f18adada19104fa3e68495
|
||||||
RNCMaskedView: c298b644a10c0c142055b3ae24d83879ecb13ccd
|
|
||||||
RNDefaultPreference: 08bdb06cfa9188d5da97d4642dac745218d7fb31
|
RNDefaultPreference: 08bdb06cfa9188d5da97d4642dac745218d7fb31
|
||||||
RNDeviceInfo: 0400a6d0c94186d1120c3cbd97b23abc022187a9
|
RNDeviceInfo: 0400a6d0c94186d1120c3cbd97b23abc022187a9
|
||||||
RNGestureHandler: e5c7cab5f214503dcefd6b2b0cefb050e1f51c4a
|
RNGestureHandler: 071d7a9ad81e8b83fe7663b303d132406a7d8f39
|
||||||
RNGoogleSignin: c4381751eefd73c552b923ba347a9bfc6f18771c
|
RNGoogleSignin: c4381751eefd73c552b923ba347a9bfc6f18771c
|
||||||
RNScreens: 40a2cb40a02a609938137a1e0acfbf8fc9eebf19
|
RNScreens: 40a2cb40a02a609938137a1e0acfbf8fc9eebf19
|
||||||
RNSound: 27e8268bdb0a1f191f219a33267f7e0445e8d62f
|
RNSound: 27e8268bdb0a1f191f219a33267f7e0445e8d62f
|
||||||
|
|
|
@ -40,19 +40,10 @@ static NSString *const PiPEnabledFeatureFlag = @"pip.enabled";
|
||||||
|
|
||||||
#pragma mark Initializers
|
#pragma mark Initializers
|
||||||
|
|
||||||
- (instancetype)init {
|
|
||||||
self = [super init];
|
|
||||||
if (self) {
|
|
||||||
[self initWithXXX];
|
|
||||||
}
|
|
||||||
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (instancetype)initWithCoder:(NSCoder *)coder {
|
- (instancetype)initWithCoder:(NSCoder *)coder {
|
||||||
self = [super initWithCoder:coder];
|
self = [super initWithCoder:coder];
|
||||||
if (self) {
|
if (self) {
|
||||||
[self initWithXXX];
|
[self doInitialize];
|
||||||
}
|
}
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
|
@ -61,7 +52,7 @@ static NSString *const PiPEnabledFeatureFlag = @"pip.enabled";
|
||||||
- (instancetype)initWithFrame:(CGRect)frame {
|
- (instancetype)initWithFrame:(CGRect)frame {
|
||||||
self = [super initWithFrame:frame];
|
self = [super initWithFrame:frame];
|
||||||
if (self) {
|
if (self) {
|
||||||
[self initWithXXX];
|
[self doInitialize];
|
||||||
}
|
}
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
|
@ -71,9 +62,9 @@ static NSString *const PiPEnabledFeatureFlag = @"pip.enabled";
|
||||||
* Internal initialization:
|
* Internal initialization:
|
||||||
*
|
*
|
||||||
* - sets the background color
|
* - sets the background color
|
||||||
* - initializes the external API scope
|
* - registers necessary observers
|
||||||
*/
|
*/
|
||||||
- (void)initWithXXX {
|
- (void)doInitialize {
|
||||||
// Set a background color which is in accord with the JavaScript and Android
|
// Set a background color which is in accord with the JavaScript and Android
|
||||||
// parts of the application and causes less perceived visual flicker than
|
// parts of the application and causes less perceived visual flicker than
|
||||||
// the default background color.
|
// the default background color.
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
"cs": "Čeština",
|
"cs": "Čeština",
|
||||||
"da": "Dansk",
|
"da": "Dansk",
|
||||||
"de": "Deutsch",
|
"de": "Deutsch",
|
||||||
|
"dsb": "Dolnoserbšćina",
|
||||||
"el": "Ελληνικά",
|
"el": "Ελληνικά",
|
||||||
"en": "English",
|
"en": "English",
|
||||||
"enGB": "English (United Kingdom)",
|
"enGB": "English (United Kingdom)",
|
||||||
|
|
|
@ -184,13 +184,21 @@
|
||||||
"deepLinking": {
|
"deepLinking": {
|
||||||
"appNotInstalled": "Sie benötigen die „{{app}}“-App, um der Konferenz auf dem Smartphone beizutreten.",
|
"appNotInstalled": "Sie benötigen die „{{app}}“-App, um der Konferenz auf dem Smartphone beizutreten.",
|
||||||
"description": "Nichts passiert? Wir haben versucht, die Konferenz in {{app}} zu öffnen. Versuchen Sie es erneut oder treten Sie der Konferenz in {{app}} im Web bei.",
|
"description": "Nichts passiert? Wir haben versucht, die Konferenz in {{app}} zu öffnen. Versuchen Sie es erneut oder treten Sie der Konferenz in {{app}} im Web bei.",
|
||||||
|
"descriptionNew": "Nichts passiert? Wir haben versucht, die Konferenz in {{app}} zu öffnen. <br /><br /> Versuchen Sie es erneut oder treten Sie der Konferenz im Web bei.",
|
||||||
"descriptionWithoutWeb": "Ist nichts passiert? Wir haben versucht, Ihre Besprechung in der „{{app}}“-Desktop-App zu starten.",
|
"descriptionWithoutWeb": "Ist nichts passiert? Wir haben versucht, Ihre Besprechung in der „{{app}}“-Desktop-App zu starten.",
|
||||||
"downloadApp": "App herunterladen",
|
"downloadApp": "App herunterladen",
|
||||||
|
"downloadMobileApp": "Aus dem App Store herunterladen",
|
||||||
"ifDoNotHaveApp": "Wenn Sie die App noch nicht haben:",
|
"ifDoNotHaveApp": "Wenn Sie die App noch nicht haben:",
|
||||||
"ifHaveApp": "Wenn Sie die App bereits haben:",
|
"ifHaveApp": "Wenn Sie die App bereits haben:",
|
||||||
"joinInApp": "Mit der App am Meeting teilnehmen",
|
"joinInApp": "Mit der App am Meeting teilnehmen",
|
||||||
|
"joinInAppNew": "Mit der App",
|
||||||
|
"joinInBrowser": "Im Browser",
|
||||||
|
"launchMeetingLabel": "Wie möchten Sie an der Konferenz teilnehmen?",
|
||||||
"launchWebButton": "Im Web öffnen",
|
"launchWebButton": "Im Web öffnen",
|
||||||
|
"noMobileApp": "Sie haben die App noch nicht installiert?",
|
||||||
|
"termsAndConditions": "Indem Sie fortfahren, stimmen Sie underen<a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>Nutzungsbedingungen</a> zu.",
|
||||||
"title": "Die Konferenz wird in {{app}} geöffnet …",
|
"title": "Die Konferenz wird in {{app}} geöffnet …",
|
||||||
|
"titleNew": "Konferenz starten ...",
|
||||||
"tryAgainButton": "Erneut mit der nativen Applikation versuchen",
|
"tryAgainButton": "Erneut mit der nativen Applikation versuchen",
|
||||||
"unsupportedBrowser": "Sie verwenden einen Browser, der noch nicht unterstützt wird."
|
"unsupportedBrowser": "Sie verwenden einen Browser, der noch nicht unterstützt wird."
|
||||||
},
|
},
|
||||||
|
@ -203,6 +211,12 @@
|
||||||
"microphonePermission": "Fehler beim Bezug der Mikrofon-Zugriffsberechtigungen"
|
"microphonePermission": "Fehler beim Bezug der Mikrofon-Zugriffsberechtigungen"
|
||||||
},
|
},
|
||||||
"deviceSelection": {
|
"deviceSelection": {
|
||||||
|
"hid": {
|
||||||
|
"callControl": "Anrufsteuerung",
|
||||||
|
"connectedDevices": "Verbundene Geräte:",
|
||||||
|
"deleteDevice": "Gerät löschen",
|
||||||
|
"pairDevice": "Gerät verbinden"
|
||||||
|
},
|
||||||
"noPermission": "Berechtigungen nicht erteilt",
|
"noPermission": "Berechtigungen nicht erteilt",
|
||||||
"previewUnavailable": "Keine Vorschau verfügbar",
|
"previewUnavailable": "Keine Vorschau verfügbar",
|
||||||
"selectADevice": "Ein Gerät wählen",
|
"selectADevice": "Ein Gerät wählen",
|
||||||
|
@ -226,7 +240,9 @@
|
||||||
"WaitingForHostTitle": "Warten auf den Beginn der Konferenz …",
|
"WaitingForHostTitle": "Warten auf den Beginn der Konferenz …",
|
||||||
"Yes": "Ja",
|
"Yes": "Ja",
|
||||||
"accessibilityLabel": {
|
"accessibilityLabel": {
|
||||||
"liveStreaming": "Livestream"
|
"close": "Popup schließen",
|
||||||
|
"liveStreaming": "Livestream",
|
||||||
|
"sharingTabs": "Optionen zum Teilen"
|
||||||
},
|
},
|
||||||
"add": "Hinzufügen",
|
"add": "Hinzufügen",
|
||||||
"addMeetingNote": "Notiz zu dieser Konferenz hinzufügen",
|
"addMeetingNote": "Notiz zu dieser Konferenz hinzufügen",
|
||||||
|
@ -438,6 +454,11 @@
|
||||||
"veryBad": "Sehr schlecht",
|
"veryBad": "Sehr schlecht",
|
||||||
"veryGood": "Sehr gut"
|
"veryGood": "Sehr gut"
|
||||||
},
|
},
|
||||||
|
"filmstrip": {
|
||||||
|
"accessibilityLabel": {
|
||||||
|
"heading": "Videominiaturen"
|
||||||
|
}
|
||||||
|
},
|
||||||
"giphy": {
|
"giphy": {
|
||||||
"noResults": "Keine Ergebnisse :(",
|
"noResults": "Keine Ergebnisse :(",
|
||||||
"search": "GIPHY durchsuchen"
|
"search": "GIPHY durchsuchen"
|
||||||
|
@ -751,6 +772,7 @@
|
||||||
"headings": {
|
"headings": {
|
||||||
"lobby": "Lobby ({{count}})",
|
"lobby": "Lobby ({{count}})",
|
||||||
"participantsList": "Anwesende ({{count}})",
|
"participantsList": "Anwesende ({{count}})",
|
||||||
|
"visitors": "Gäste ({{count}})",
|
||||||
"waitingLobby": "In der Lobby ({{count}})"
|
"waitingLobby": "In der Lobby ({{count}})"
|
||||||
},
|
},
|
||||||
"search": "Suche Anwesende",
|
"search": "Suche Anwesende",
|
||||||
|
@ -758,6 +780,7 @@
|
||||||
},
|
},
|
||||||
"passwordDigitsOnly": "Bis zu {{number}} Ziffern",
|
"passwordDigitsOnly": "Bis zu {{number}} Ziffern",
|
||||||
"passwordSetRemotely": "von einer anderen Person gesetzt",
|
"passwordSetRemotely": "von einer anderen Person gesetzt",
|
||||||
|
"pinParticipant": "{{participantName}} - anheften",
|
||||||
"pinnedParticipant": "Die Person ist angeheftet",
|
"pinnedParticipant": "Die Person ist angeheftet",
|
||||||
"polls": {
|
"polls": {
|
||||||
"answer": {
|
"answer": {
|
||||||
|
@ -916,6 +939,7 @@
|
||||||
"localRecordingVideoWarning": "Um Ihr eigenes Kamerabild aufzuzeichnen, müssen Sie Ihre Kamera beim Start der Aufnahme einschalten",
|
"localRecordingVideoWarning": "Um Ihr eigenes Kamerabild aufzuzeichnen, müssen Sie Ihre Kamera beim Start der Aufnahme einschalten",
|
||||||
"localRecordingWarning": "Bitte prüfen Sie, dass das aktuelle Tab auswählen, um Bild und Ton aufzuzeichnen. Die Länge der Aufzeichnung ist aktuell auf 1GB beschränkt, was ungefähr 100 Minuten entspricht.",
|
"localRecordingWarning": "Bitte prüfen Sie, dass das aktuelle Tab auswählen, um Bild und Ton aufzuzeichnen. Die Länge der Aufzeichnung ist aktuell auf 1GB beschränkt, was ungefähr 100 Minuten entspricht.",
|
||||||
"loggedIn": "Als {{userName}} angemeldet",
|
"loggedIn": "Als {{userName}} angemeldet",
|
||||||
|
"noMicPermission": "Zugriff auf Mikrofon fehlgeschlagen. Bitte erlauben Sie den Zugriff auf das Mikrofon.",
|
||||||
"noStreams": "Kein Ton oder Video erkannt.",
|
"noStreams": "Kein Ton oder Video erkannt.",
|
||||||
"off": "Aufnahme gestoppt",
|
"off": "Aufnahme gestoppt",
|
||||||
"offBy": "{{name}} stoppte die Aufnahme",
|
"offBy": "{{name}} stoppte die Aufnahme",
|
||||||
|
@ -949,6 +973,7 @@
|
||||||
"title": "Sicherheitsoptionen"
|
"title": "Sicherheitsoptionen"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
|
"audio": "Audio",
|
||||||
"buttonLabel": "Einstellungen",
|
"buttonLabel": "Einstellungen",
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"about": "Die Kalenderintegration von {{appName}} wird verwendet, um ein sicheres Zugreifen auf Ihren Kalender und Auslesen der bevorstehenden Termine zu ermöglichen.",
|
"about": "Die Kalenderintegration von {{appName}} wird verwendet, um ein sicheres Zugreifen auf Ihren Kalender und Auslesen der bevorstehenden Termine zu ermöglichen.",
|
||||||
|
@ -969,9 +994,11 @@
|
||||||
"maxStageParticipants": "Maximale Anzahl an Personen, die zur Hauptansicht angeheftet werden können",
|
"maxStageParticipants": "Maximale Anzahl an Personen, die zur Hauptansicht angeheftet werden können",
|
||||||
"microphones": "Mikrofon",
|
"microphones": "Mikrofon",
|
||||||
"moderator": "Moderation",
|
"moderator": "Moderation",
|
||||||
|
"moderatorOptions": "Moderationseinstellungen",
|
||||||
"more": "Mehr",
|
"more": "Mehr",
|
||||||
"name": "Name",
|
"name": "Name",
|
||||||
"noDevice": "Kein",
|
"noDevice": "Kein",
|
||||||
|
"notifications": "Benachrichtigungen",
|
||||||
"participantJoined": "Neue Person nimmt teil",
|
"participantJoined": "Neue Person nimmt teil",
|
||||||
"participantKnocking": "Person hat Lobby betreten",
|
"participantKnocking": "Person hat Lobby betreten",
|
||||||
"participantLeft": "Person verlässt die Konferenz",
|
"participantLeft": "Person verlässt die Konferenz",
|
||||||
|
@ -982,13 +1009,14 @@
|
||||||
"selectCamera": "Kamera",
|
"selectCamera": "Kamera",
|
||||||
"selectMic": "Mikrofon",
|
"selectMic": "Mikrofon",
|
||||||
"selfView": "Eigene Ansicht",
|
"selfView": "Eigene Ansicht",
|
||||||
"sounds": "Hinweistöne",
|
"shortcuts": "Tastaturkürzel",
|
||||||
"speakers": "Lautsprecher",
|
"speakers": "Lautsprecher",
|
||||||
"startAudioMuted": "Alle Personen treten stummgeschaltet bei",
|
"startAudioMuted": "Alle Personen treten stummgeschaltet bei",
|
||||||
"startReactionsMuted": "Interaktionstöne für alle deaktivieren",
|
"startReactionsMuted": "Interaktionstöne für alle deaktivieren",
|
||||||
"startVideoMuted": "Alle Personen treten ohne Video bei",
|
"startVideoMuted": "Alle Personen treten ohne Video bei",
|
||||||
"talkWhileMuted": "Wenn bei Stummschaltung gesprochen wird",
|
"talkWhileMuted": "Wenn bei Stummschaltung gesprochen wird",
|
||||||
"title": "Einstellungen"
|
"title": "Einstellungen",
|
||||||
|
"video": "Kamera"
|
||||||
},
|
},
|
||||||
"settingsView": {
|
"settingsView": {
|
||||||
"advanced": "Erweitert",
|
"advanced": "Erweitert",
|
||||||
|
@ -1080,6 +1108,7 @@
|
||||||
"giphy": "GIPHY ein-/ausschalten",
|
"giphy": "GIPHY ein-/ausschalten",
|
||||||
"grantModerator": "Moderationsrechte vergeben",
|
"grantModerator": "Moderationsrechte vergeben",
|
||||||
"hangup": "Konferenz verlassen",
|
"hangup": "Konferenz verlassen",
|
||||||
|
"heading": "Toolbar",
|
||||||
"help": "Hilfe",
|
"help": "Hilfe",
|
||||||
"invite": "Person einladen",
|
"invite": "Person einladen",
|
||||||
"kick": "Person entfernen",
|
"kick": "Person entfernen",
|
||||||
|
@ -1146,6 +1175,7 @@
|
||||||
"download": "Unsere Apps herunterladen",
|
"download": "Unsere Apps herunterladen",
|
||||||
"e2ee": "Ende-zu-Ende-Verschlüsselung",
|
"e2ee": "Ende-zu-Ende-Verschlüsselung",
|
||||||
"embedMeeting": "Konferenz einbetten",
|
"embedMeeting": "Konferenz einbetten",
|
||||||
|
"enableNoiseSuppression": "Rauschunterdrückung einschalten",
|
||||||
"endConference": "Konferenz für alle beenden",
|
"endConference": "Konferenz für alle beenden",
|
||||||
"enterFullScreen": "Vollbildmodus",
|
"enterFullScreen": "Vollbildmodus",
|
||||||
"enterTileView": "Kachelansicht einschalten",
|
"enterTileView": "Kachelansicht einschalten",
|
||||||
|
@ -1233,6 +1263,7 @@
|
||||||
"subtitlesOff": "Ausschalten",
|
"subtitlesOff": "Ausschalten",
|
||||||
"tr": "TR"
|
"tr": "TR"
|
||||||
},
|
},
|
||||||
|
"unpinParticipant": "{{participantName}} - Nicht mehr anheften",
|
||||||
"userMedia": {
|
"userMedia": {
|
||||||
"androidGrantPermissions": "Wählen Sie <b><i>Zulassen</i></b>, wenn der Browser um Berechtigungen bittet.",
|
"androidGrantPermissions": "Wählen Sie <b><i>Zulassen</i></b>, wenn der Browser um Berechtigungen bittet.",
|
||||||
"chromeGrantPermissions": "Wählen Sie <b><i>Zulassen</i></b>, wenn der Browser um Berechtigungen bittet.",
|
"chromeGrantPermissions": "Wählen Sie <b><i>Zulassen</i></b>, wenn der Browser um Berechtigungen bittet.",
|
||||||
|
@ -1271,9 +1302,11 @@
|
||||||
"ldTooltip": "Video wird in niedriger Auflösung angezeigt",
|
"ldTooltip": "Video wird in niedriger Auflösung angezeigt",
|
||||||
"lowDefinition": "Niedrige Auflösung",
|
"lowDefinition": "Niedrige Auflösung",
|
||||||
"performanceSettings": "Qualitätseinstellungen",
|
"performanceSettings": "Qualitätseinstellungen",
|
||||||
|
"recording": "Aufnahme läuft",
|
||||||
"sd": "SD",
|
"sd": "SD",
|
||||||
"sdTooltip": "Video wird in Standardauflösung angezeigt",
|
"sdTooltip": "Video wird in Standardauflösung angezeigt",
|
||||||
"standardDefinition": "Standardauflösung"
|
"standardDefinition": "Standardauflösung",
|
||||||
|
"streaming": "Streaming läuft"
|
||||||
},
|
},
|
||||||
"videothumbnail": {
|
"videothumbnail": {
|
||||||
"connectionInfo": "Verbindungsinformationen",
|
"connectionInfo": "Verbindungsinformationen",
|
||||||
|
@ -1285,6 +1318,7 @@
|
||||||
"grantModerator": "Moderationsrechte vergeben",
|
"grantModerator": "Moderationsrechte vergeben",
|
||||||
"hideSelfView": "Eigene Ansicht ausblenden",
|
"hideSelfView": "Eigene Ansicht ausblenden",
|
||||||
"kick": "Hinauswerfen",
|
"kick": "Hinauswerfen",
|
||||||
|
"mirrorVideo": "Mein Video spiegeln",
|
||||||
"moderator": "Moderation",
|
"moderator": "Moderation",
|
||||||
"mute": "Person ist stumm geschaltet",
|
"mute": "Person ist stumm geschaltet",
|
||||||
"muted": "Stummgeschaltet",
|
"muted": "Stummgeschaltet",
|
||||||
|
@ -1322,6 +1356,7 @@
|
||||||
"webAssemblyWarning": "WebAssembly wird nicht unterstützt",
|
"webAssemblyWarning": "WebAssembly wird nicht unterstützt",
|
||||||
"webAssemblyWarningDescription": "WebAssembly ist deaktiviert oder wird in diesem Browser nicht unterstützt"
|
"webAssemblyWarningDescription": "WebAssembly ist deaktiviert oder wird in diesem Browser nicht unterstützt"
|
||||||
},
|
},
|
||||||
|
"visitorsLabel": "Anzahl Gäste: {{count}}",
|
||||||
"volumeSlider": "Lautstärkeregler",
|
"volumeSlider": "Lautstärkeregler",
|
||||||
"welcomepage": {
|
"welcomepage": {
|
||||||
"accessibilityLabel": {
|
"accessibilityLabel": {
|
||||||
|
@ -1354,6 +1389,7 @@
|
||||||
"microsoftLogo": "Microsoft Logo",
|
"microsoftLogo": "Microsoft Logo",
|
||||||
"policyLogo": "Richtlinienlogo"
|
"policyLogo": "Richtlinienlogo"
|
||||||
},
|
},
|
||||||
|
"meetingsAccessibilityLabel": "Konferenzen",
|
||||||
"mobileDownLoadLinkAndroid": "Android App Download",
|
"mobileDownLoadLinkAndroid": "Android App Download",
|
||||||
"mobileDownLoadLinkFDroid": "F-Droid App Download",
|
"mobileDownLoadLinkFDroid": "F-Droid App Download",
|
||||||
"mobileDownLoadLinkIos": "iOS App Download",
|
"mobileDownLoadLinkIos": "iOS App Download",
|
||||||
|
@ -1373,5 +1409,10 @@
|
||||||
"terms": "AGB",
|
"terms": "AGB",
|
||||||
"title": "Sichere, voll funktionale und komplett kostenlose Videokonferenzen",
|
"title": "Sichere, voll funktionale und komplett kostenlose Videokonferenzen",
|
||||||
"upcomingMeetings": "Ihre zukünftigen Konferenzen"
|
"upcomingMeetings": "Ihre zukünftigen Konferenzen"
|
||||||
|
},
|
||||||
|
"whiteboard": {
|
||||||
|
"accessibilityLabel": {
|
||||||
|
"heading": "Whiteboard"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -838,7 +838,7 @@
|
||||||
"selectCamera": "Cámara",
|
"selectCamera": "Cámara",
|
||||||
"selectMic": "Micrófono",
|
"selectMic": "Micrófono",
|
||||||
"sounds": "Sonidos",
|
"sounds": "Sonidos",
|
||||||
"speakers": "Parlantes",
|
"speakers": "Altavoces",
|
||||||
"startAudioMuted": "Todos inician silenciados",
|
"startAudioMuted": "Todos inician silenciados",
|
||||||
"startVideoMuted": "Todos inician con cámara desactivada",
|
"startVideoMuted": "Todos inician con cámara desactivada",
|
||||||
"talkWhileMuted": "Hablar en silencio",
|
"talkWhileMuted": "Hablar en silencio",
|
||||||
|
|
|
@ -882,6 +882,7 @@
|
||||||
"document": "Gedeeld document in- of uitschakelen",
|
"document": "Gedeeld document in- of uitschakelen",
|
||||||
"download": "Download onze apps",
|
"download": "Download onze apps",
|
||||||
"embedMeeting": "Vergadering embedden",
|
"embedMeeting": "Vergadering embedden",
|
||||||
|
"endConference": "Vergadering voor iedereen beëindigen",
|
||||||
"feedback": "Feedback achterlaten",
|
"feedback": "Feedback achterlaten",
|
||||||
"fullScreen": "Volledig scherm in- of uitschakelen",
|
"fullScreen": "Volledig scherm in- of uitschakelen",
|
||||||
"grantModerator": "Moderatorrechten verlenen",
|
"grantModerator": "Moderatorrechten verlenen",
|
||||||
|
@ -889,6 +890,7 @@
|
||||||
"help": "Hulp",
|
"help": "Hulp",
|
||||||
"invite": "Personen uitnodigen",
|
"invite": "Personen uitnodigen",
|
||||||
"kick": "Deelnemer verwijderen",
|
"kick": "Deelnemer verwijderen",
|
||||||
|
"leaveConference": "Vergadering verlaten",
|
||||||
"lobbyButton": "Lobby-modus in- of uitschakelen",
|
"lobbyButton": "Lobby-modus in- of uitschakelen",
|
||||||
"localRecording": "Besturingselementen voor lokale opname in- of uitschakelen",
|
"localRecording": "Besturingselementen voor lokale opname in- of uitschakelen",
|
||||||
"lockRoom": "Wachtwoord voor vergadering in- of uitschakelen",
|
"lockRoom": "Wachtwoord voor vergadering in- of uitschakelen",
|
||||||
|
@ -938,6 +940,7 @@
|
||||||
"download": "Download onze apps",
|
"download": "Download onze apps",
|
||||||
"e2ee": "Eind-tot-eind-versleuteling",
|
"e2ee": "Eind-tot-eind-versleuteling",
|
||||||
"embedMeeting": "Vergadering embedden",
|
"embedMeeting": "Vergadering embedden",
|
||||||
|
"endConference": "Vergadering voor iedereen beëindigen",
|
||||||
"enterFullScreen": "Volledig scherm weergeven",
|
"enterFullScreen": "Volledig scherm weergeven",
|
||||||
"enterTileView": "Tegelweergave openen",
|
"enterTileView": "Tegelweergave openen",
|
||||||
"exitFullScreen": "Volledig scherm sluiten",
|
"exitFullScreen": "Volledig scherm sluiten",
|
||||||
|
@ -948,6 +951,7 @@
|
||||||
"invite": "Personen uitnodigen",
|
"invite": "Personen uitnodigen",
|
||||||
"joinBreakoutRoom": "Deelnemen aan aparte vergaderruimte",
|
"joinBreakoutRoom": "Deelnemen aan aparte vergaderruimte",
|
||||||
"leaveBreakoutRoom": "Aparte vergaderruimte verlaten",
|
"leaveBreakoutRoom": "Aparte vergaderruimte verlaten",
|
||||||
|
"leaveConference": "Vergadering verlaten",
|
||||||
"lobbyButtonDisable": "Schakel lobby-modus uit",
|
"lobbyButtonDisable": "Schakel lobby-modus uit",
|
||||||
"lobbyButtonEnable": "Schakel lobby-modus in",
|
"lobbyButtonEnable": "Schakel lobby-modus in",
|
||||||
"login": "Aanmelden",
|
"login": "Aanmelden",
|
||||||
|
|
|
@ -89,7 +89,7 @@
|
||||||
"chat": {
|
"chat": {
|
||||||
"enter": "Entrar na sala",
|
"enter": "Entrar na sala",
|
||||||
"error": "Erro: a sua mensagem não foi enviada. Motivo: {{error}}",
|
"error": "Erro: a sua mensagem não foi enviada. Motivo: {{error}}",
|
||||||
"fieldPlaceHolder": "Escreva aqui a sua mensagem",
|
"fieldPlaceHolder": "Aa",
|
||||||
"lobbyChatMessageTo": "Mensagem de chat na sala de espera para {{recipient}}",
|
"lobbyChatMessageTo": "Mensagem de chat na sala de espera para {{recipient}}",
|
||||||
"message": "Mensagem",
|
"message": "Mensagem",
|
||||||
"messageAccessibleTitle": "{{user}} disse:",
|
"messageAccessibleTitle": "{{user}} disse:",
|
||||||
|
@ -147,6 +147,7 @@
|
||||||
"bridgeCount": "Servidores: ",
|
"bridgeCount": "Servidores: ",
|
||||||
"codecs": "Codecs (A/V): ",
|
"codecs": "Codecs (A/V): ",
|
||||||
"connectedTo": "Ligado a:",
|
"connectedTo": "Ligado a:",
|
||||||
|
"e2eeVerified": "E2EE verificada:",
|
||||||
"framerate": "Taxa de frames:",
|
"framerate": "Taxa de frames:",
|
||||||
"less": "Mostrar menos",
|
"less": "Mostrar menos",
|
||||||
"localaddress": "Endereço local:",
|
"localaddress": "Endereço local:",
|
||||||
|
@ -266,7 +267,7 @@
|
||||||
"e2eeWarning": "AVISO: Nem todos os participantes neste encontro parecem ter apoio para a encriptação de ponta a ponta. Se o permitir, eles não o poderão ver nem ouvir.",
|
"e2eeWarning": "AVISO: Nem todos os participantes neste encontro parecem ter apoio para a encriptação de ponta a ponta. Se o permitir, eles não o poderão ver nem ouvir.",
|
||||||
"e2eeWillDisableDueToMaxModeDescription": "AVISO: A encriptação de ponta a ponta será automaticamente desativada se mais participantes aderirem à conferência.",
|
"e2eeWillDisableDueToMaxModeDescription": "AVISO: A encriptação de ponta a ponta será automaticamente desativada se mais participantes aderirem à conferência.",
|
||||||
"embedMeeting": "Embutir reunião",
|
"embedMeeting": "Embutir reunião",
|
||||||
"enterDisplayName": "Digite o seu nome aqui",
|
"enterDisplayName": "Digite o seu nome",
|
||||||
"error": "Erro",
|
"error": "Erro",
|
||||||
"gracefulShutdown": "O nosso serviço está atualmente em manutenção. Por favor, tente novamente mais tarde.",
|
"gracefulShutdown": "O nosso serviço está atualmente em manutenção. Por favor, tente novamente mais tarde.",
|
||||||
"grantModeratorDialog": "Tem a certeza que quer conceder direitos de moderador a {{participantName}}?",
|
"grantModeratorDialog": "Tem a certeza que quer conceder direitos de moderador a {{participantName}}?",
|
||||||
|
@ -408,6 +409,10 @@
|
||||||
"user": "Utilizador",
|
"user": "Utilizador",
|
||||||
"userIdentifier": "Identificador do utilizador",
|
"userIdentifier": "Identificador do utilizador",
|
||||||
"userPassword": "Palavra-passe do utilizador",
|
"userPassword": "Palavra-passe do utilizador",
|
||||||
|
"verifyParticipantConfirm": "Coincidem",
|
||||||
|
"verifyParticipantDismiss": "Não coincidem",
|
||||||
|
"verifyParticipantQuestion": "EXPERIMENTAL: Perguntar ao participante {{participantName}} se vêem o mesmo conteúdo, na mesma ordem.",
|
||||||
|
"verifyParticipantTitle": "Verificação pelo utilizador",
|
||||||
"videoLink": "Link do vídeo",
|
"videoLink": "Link do vídeo",
|
||||||
"viewUpgradeOptions": "Ver opções de actualização",
|
"viewUpgradeOptions": "Ver opções de actualização",
|
||||||
"viewUpgradeOptionsContent": "Para obter acesso ilimitado a funcionalidades premium como gravação, transcrições, RTMP Streaming & mais, terá de actualizar o seu plano.",
|
"viewUpgradeOptionsContent": "Para obter acesso ilimitado a funcionalidades premium como gravação, transcrições, RTMP Streaming & mais, terá de actualizar o seu plano.",
|
||||||
|
@ -437,9 +442,6 @@
|
||||||
"noResults": "Não foram encontrados resultados :(",
|
"noResults": "Não foram encontrados resultados :(",
|
||||||
"search": "Procurar no GIPHY"
|
"search": "Procurar no GIPHY"
|
||||||
},
|
},
|
||||||
"helpView": {
|
|
||||||
"title": "Centro de ajuda"
|
|
||||||
},
|
|
||||||
"incomingCall": {
|
"incomingCall": {
|
||||||
"answer": "Responder",
|
"answer": "Responder",
|
||||||
"audioCallTitle": "Chamada recebida",
|
"audioCallTitle": "Chamada recebida",
|
||||||
|
@ -563,7 +565,6 @@
|
||||||
"lobby": {
|
"lobby": {
|
||||||
"admit": "Aceitar",
|
"admit": "Aceitar",
|
||||||
"admitAll": "Aceitar todos",
|
"admitAll": "Aceitar todos",
|
||||||
"allow": "Permitir",
|
|
||||||
"backToKnockModeButton": "Peça para aderir",
|
"backToKnockModeButton": "Peça para aderir",
|
||||||
"chat": "Chat",
|
"chat": "Chat",
|
||||||
"dialogTitle": "Modo sala de espera",
|
"dialogTitle": "Modo sala de espera",
|
||||||
|
@ -649,6 +650,8 @@
|
||||||
"connectedOneMember": "{{name}} entrou na reunião",
|
"connectedOneMember": "{{name}} entrou na reunião",
|
||||||
"connectedThreePlusMembers": "{{name}} e muitos outros entraram na reunião",
|
"connectedThreePlusMembers": "{{name}} e muitos outros entraram na reunião",
|
||||||
"connectedTwoMembers": "{{first}} e {{second}} entraram na reunião",
|
"connectedTwoMembers": "{{first}} e {{second}} entraram na reunião",
|
||||||
|
"dataChannelClosed": "Deficiência na qualidade do vídeo",
|
||||||
|
"dataChannelClosedDescription": "O canal de ponte foi desconectado e, portanto, a qualidade do vídeo está limitada à sua configuração mais baixa.",
|
||||||
"disconnected": "desconectado",
|
"disconnected": "desconectado",
|
||||||
"displayNotifications": "Mostrar notificações para",
|
"displayNotifications": "Mostrar notificações para",
|
||||||
"focus": "Foco da conferência",
|
"focus": "Foco da conferência",
|
||||||
|
@ -709,6 +712,8 @@
|
||||||
"reactionSoundsForAll": "Desativar sons para todos",
|
"reactionSoundsForAll": "Desativar sons para todos",
|
||||||
"screenShareNoAudio": "A caixa de compartilhar áudio não foi marcada no ecrã de seleção da janela.",
|
"screenShareNoAudio": "A caixa de compartilhar áudio não foi marcada no ecrã de seleção da janela.",
|
||||||
"screenShareNoAudioTitle": "Não foi possível partilhar o áudio do sistema!",
|
"screenShareNoAudioTitle": "Não foi possível partilhar o áudio do sistema!",
|
||||||
|
"screenSharingAudioOnlyDescription": "Note por favor que ao partilhar o seu ecrã está a afectar o modo \"Melhor desempenho\" e irá utilizar mais largura de banda.",
|
||||||
|
"screenSharingAudioOnlyTitle": "Modo \"Melhor desempenho\"",
|
||||||
"selfViewTitle": "Pode sempre reexibir a autovisualização a partir das definições",
|
"selfViewTitle": "Pode sempre reexibir a autovisualização a partir das definições",
|
||||||
"somebody": "Alguém",
|
"somebody": "Alguém",
|
||||||
"startSilentDescription": "Volte à reunião para habilitar o áudio",
|
"startSilentDescription": "Volte à reunião para habilitar o áudio",
|
||||||
|
@ -858,9 +863,6 @@
|
||||||
"rejected": "Rejeitado",
|
"rejected": "Rejeitado",
|
||||||
"ringing": "Tocando..."
|
"ringing": "Tocando..."
|
||||||
},
|
},
|
||||||
"privacyView": {
|
|
||||||
"title": "Privacidade"
|
|
||||||
},
|
|
||||||
"profile": {
|
"profile": {
|
||||||
"avatar": "avatar",
|
"avatar": "avatar",
|
||||||
"setDisplayNameLabel": "Definir seu nome de exibição",
|
"setDisplayNameLabel": "Definir seu nome de exibição",
|
||||||
|
@ -914,6 +916,7 @@
|
||||||
"localRecordingVideoWarning": "Para gravar o seu vídeo deve tê-lo ligado quando iniciar a gravação",
|
"localRecordingVideoWarning": "Para gravar o seu vídeo deve tê-lo ligado quando iniciar a gravação",
|
||||||
"localRecordingWarning": "Certifique-se de selecionar o separador actual a fim de utilizar o vídeo e áudio corretos. A gravação está actualmente limitada a 1 GB, o que é cerca de 100 minutos.",
|
"localRecordingWarning": "Certifique-se de selecionar o separador actual a fim de utilizar o vídeo e áudio corretos. A gravação está actualmente limitada a 1 GB, o que é cerca de 100 minutos.",
|
||||||
"loggedIn": "Conectado como {{userName}}",
|
"loggedIn": "Conectado como {{userName}}",
|
||||||
|
"noMicPermission": "Não foi possível criar a faixa de microfone. Por favor, conceda permissão para utilizar o microfone.",
|
||||||
"noStreams": "Não foi detetado nenhum sinal áudio ou vídeo.",
|
"noStreams": "Não foi detetado nenhum sinal áudio ou vídeo.",
|
||||||
"off": "Gravação parada",
|
"off": "Gravação parada",
|
||||||
"offBy": "{{name}} parou a gravação",
|
"offBy": "{{name}} parou a gravação",
|
||||||
|
@ -964,7 +967,7 @@
|
||||||
"incomingMessage": "Receber uma mensagem",
|
"incomingMessage": "Receber uma mensagem",
|
||||||
"language": "Idioma",
|
"language": "Idioma",
|
||||||
"loggedIn": "Sessão iniciada como {{name}}",
|
"loggedIn": "Sessão iniciada como {{name}}",
|
||||||
"maxStageParticipants": "Número máximo de participantes que podem ser afixados",
|
"maxStageParticipants": "Número máximo de participantes que podem ser afixados (EXPERIMENTAL)",
|
||||||
"microphones": "Microfones",
|
"microphones": "Microfones",
|
||||||
"moderator": "Moderador",
|
"moderator": "Moderador",
|
||||||
"more": "Mais",
|
"more": "Mais",
|
||||||
|
@ -983,7 +986,7 @@
|
||||||
"sounds": "Sons",
|
"sounds": "Sons",
|
||||||
"speakers": "Participantes",
|
"speakers": "Participantes",
|
||||||
"startAudioMuted": "Todos começam com microfone desligado",
|
"startAudioMuted": "Todos começam com microfone desligado",
|
||||||
"startReactionsMuted": "Sons de reação silenciados para todos",
|
"startReactionsMuted": "Todos começam com os sons de reação desativados",
|
||||||
"startVideoMuted": "Todos começam com câmara desligada",
|
"startVideoMuted": "Todos começam com câmara desligada",
|
||||||
"talkWhileMuted": "Falar com o microfone desligado",
|
"talkWhileMuted": "Falar com o microfone desligado",
|
||||||
"title": "Definições"
|
"title": "Definições"
|
||||||
|
@ -1003,6 +1006,7 @@
|
||||||
"displayName": "Nome de exibição",
|
"displayName": "Nome de exibição",
|
||||||
"displayNamePlaceholderText": "Ex: João Dias",
|
"displayNamePlaceholderText": "Ex: João Dias",
|
||||||
"email": "Email",
|
"email": "Email",
|
||||||
|
"emailPlaceholderText": "email@example.com",
|
||||||
"goTo": "Ir para",
|
"goTo": "Ir para",
|
||||||
"header": "Configurações",
|
"header": "Configurações",
|
||||||
"help": "Ajuda",
|
"help": "Ajuda",
|
||||||
|
@ -1291,6 +1295,7 @@
|
||||||
"show": "Mostrar no palco",
|
"show": "Mostrar no palco",
|
||||||
"showSelfView": "Mostrar autovisualização",
|
"showSelfView": "Mostrar autovisualização",
|
||||||
"unpinFromStage": "Desafixar",
|
"unpinFromStage": "Desafixar",
|
||||||
|
"verify": "Verificar participante",
|
||||||
"videoMuted": "Câmara desativada",
|
"videoMuted": "Câmara desativada",
|
||||||
"videomute": "Participante parou a câmara"
|
"videomute": "Participante parou a câmara"
|
||||||
},
|
},
|
||||||
|
@ -1358,6 +1363,7 @@
|
||||||
"recentList": "Recente",
|
"recentList": "Recente",
|
||||||
"recentListDelete": "Remover",
|
"recentListDelete": "Remover",
|
||||||
"recentListEmpty": "A sua lista recente está atualmente vazia. Converse com a sua equipa e encontrará aqui todas as suas reuniões recentes.",
|
"recentListEmpty": "A sua lista recente está atualmente vazia. Converse com a sua equipa e encontrará aqui todas as suas reuniões recentes.",
|
||||||
|
"recentMeetings": "As suas reuniões recentes",
|
||||||
"reducedUIText": "Bem-vindo ao {{app}}!",
|
"reducedUIText": "Bem-vindo ao {{app}}!",
|
||||||
"roomNameAllowedChars": "Nome da reunião não deve conter qualquer um destes caracteres: ?. &, :, ', \", %, #.",
|
"roomNameAllowedChars": "Nome da reunião não deve conter qualquer um destes caracteres: ?. &, :, ', \", %, #.",
|
||||||
"roomname": "Digite o nome da sala",
|
"roomname": "Digite o nome da sala",
|
||||||
|
@ -1366,6 +1372,7 @@
|
||||||
"settings": "Definições",
|
"settings": "Definições",
|
||||||
"startMeeting": "Iniciar reunião",
|
"startMeeting": "Iniciar reunião",
|
||||||
"terms": "Termos",
|
"terms": "Termos",
|
||||||
"title": "Videoconferências mais seguras, flexíveis e totalmente gratuitas"
|
"title": "Videoconferências mais seguras, flexíveis e totalmente gratuitas",
|
||||||
|
"upcomingMeetings": "As suas próximas reuniões"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -184,13 +184,21 @@
|
||||||
"deepLinking": {
|
"deepLinking": {
|
||||||
"appNotInstalled": "You need the {{app}} mobile app to join this meeting on your phone.",
|
"appNotInstalled": "You need the {{app}} mobile app to join this meeting on your phone.",
|
||||||
"description": "Nothing happened? We tried launching your meeting in the {{app}} desktop app. Try again or launch it in the {{app}} web app.",
|
"description": "Nothing happened? We tried launching your meeting in the {{app}} desktop app. Try again or launch it in the {{app}} web app.",
|
||||||
|
"descriptionNew": "Nothing happened? We tried launching your meeting in the {{app}} desktop app. <br /><br /> You can try again or launch it on web.",
|
||||||
"descriptionWithoutWeb": "Nothing happened? We tried launching your meeting in the {{app}} desktop app.",
|
"descriptionWithoutWeb": "Nothing happened? We tried launching your meeting in the {{app}} desktop app.",
|
||||||
"downloadApp": "Download the app",
|
"downloadApp": "Download the app",
|
||||||
|
"downloadMobileApp": "Download from App Store",
|
||||||
"ifDoNotHaveApp": "If you don't have the app yet:",
|
"ifDoNotHaveApp": "If you don't have the app yet:",
|
||||||
"ifHaveApp": "If you already have the app:",
|
"ifHaveApp": "If you already have the app:",
|
||||||
"joinInApp": "Join this meeting using the app",
|
"joinInApp": "Join this meeting using the app",
|
||||||
|
"joinInAppNew": "Join in app",
|
||||||
|
"joinInBrowser": "Join in browser",
|
||||||
|
"launchMeetingLabel": "How do you want to join this meeting?",
|
||||||
"launchWebButton": "Launch in web",
|
"launchWebButton": "Launch in web",
|
||||||
|
"noMobileApp": "You don’t have the app?",
|
||||||
|
"termsAndConditions": "By continuing you agree to our <a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>terms & conditions.</a>",
|
||||||
"title": "Launching your meeting in {{app}}...",
|
"title": "Launching your meeting in {{app}}...",
|
||||||
|
"titleNew": "Launching your meeting ...",
|
||||||
"tryAgainButton": "Try again in desktop",
|
"tryAgainButton": "Try again in desktop",
|
||||||
"unsupportedBrowser": "It looks like you're using a browser we don't support."
|
"unsupportedBrowser": "It looks like you're using a browser we don't support."
|
||||||
},
|
},
|
||||||
|
@ -203,10 +211,16 @@
|
||||||
"microphonePermission": "Error obtaining microphone permission"
|
"microphonePermission": "Error obtaining microphone permission"
|
||||||
},
|
},
|
||||||
"deviceSelection": {
|
"deviceSelection": {
|
||||||
|
"hid": {
|
||||||
|
"callControl": "Call control",
|
||||||
|
"connectedDevices": "Connected devices:",
|
||||||
|
"deleteDevice": "Delete device",
|
||||||
|
"pairDevice": "Pair device"
|
||||||
|
},
|
||||||
"noPermission": "Permission not granted",
|
"noPermission": "Permission not granted",
|
||||||
"previewUnavailable": "Preview unavailable",
|
"previewUnavailable": "Preview unavailable",
|
||||||
"selectADevice": "Select a device",
|
"selectADevice": "Select a device",
|
||||||
"testAudio": "Play a test sound"
|
"testAudio": "Test"
|
||||||
},
|
},
|
||||||
"dialIn": {
|
"dialIn": {
|
||||||
"screenTitle": "Dial-in summary"
|
"screenTitle": "Dial-in summary"
|
||||||
|
@ -226,7 +240,9 @@
|
||||||
"WaitingForHostTitle": "Waiting for the host ...",
|
"WaitingForHostTitle": "Waiting for the host ...",
|
||||||
"Yes": "Yes",
|
"Yes": "Yes",
|
||||||
"accessibilityLabel": {
|
"accessibilityLabel": {
|
||||||
"liveStreaming": "Live Stream"
|
"close": "Close dialog",
|
||||||
|
"liveStreaming": "Live Stream",
|
||||||
|
"sharingTabs": "Sharing options"
|
||||||
},
|
},
|
||||||
"add": "Add",
|
"add": "Add",
|
||||||
"addMeetingNote": "Add a note about this meeting",
|
"addMeetingNote": "Add a note about this meeting",
|
||||||
|
@ -438,6 +454,11 @@
|
||||||
"veryBad": "Very Bad",
|
"veryBad": "Very Bad",
|
||||||
"veryGood": "Very Good"
|
"veryGood": "Very Good"
|
||||||
},
|
},
|
||||||
|
"filmstrip": {
|
||||||
|
"accessibilityLabel": {
|
||||||
|
"heading": "Video thumbnails"
|
||||||
|
}
|
||||||
|
},
|
||||||
"giphy": {
|
"giphy": {
|
||||||
"noResults": "No results found :(",
|
"noResults": "No results found :(",
|
||||||
"search": "Search GIPHY"
|
"search": "Search GIPHY"
|
||||||
|
@ -751,6 +772,7 @@
|
||||||
"headings": {
|
"headings": {
|
||||||
"lobby": "Lobby ({{count}})",
|
"lobby": "Lobby ({{count}})",
|
||||||
"participantsList": "Meeting participants ({{count}})",
|
"participantsList": "Meeting participants ({{count}})",
|
||||||
|
"visitors": "Visitors ({{count}})",
|
||||||
"waitingLobby": "Waiting in lobby ({{count}})"
|
"waitingLobby": "Waiting in lobby ({{count}})"
|
||||||
},
|
},
|
||||||
"search": "Search participants",
|
"search": "Search participants",
|
||||||
|
@ -758,6 +780,7 @@
|
||||||
},
|
},
|
||||||
"passwordDigitsOnly": "Up to {{number}} digits",
|
"passwordDigitsOnly": "Up to {{number}} digits",
|
||||||
"passwordSetRemotely": "Set by another participant",
|
"passwordSetRemotely": "Set by another participant",
|
||||||
|
"pinParticipant": "{{participantName}} - Pin",
|
||||||
"pinnedParticipant": "The participant is pinned",
|
"pinnedParticipant": "The participant is pinned",
|
||||||
"polls": {
|
"polls": {
|
||||||
"answer": {
|
"answer": {
|
||||||
|
@ -865,9 +888,9 @@
|
||||||
},
|
},
|
||||||
"profile": {
|
"profile": {
|
||||||
"avatar": "avatar",
|
"avatar": "avatar",
|
||||||
"setDisplayNameLabel": "Set your display name",
|
"setDisplayNameLabel": "Name",
|
||||||
"setEmailInput": "Enter email",
|
"setEmailInput": "Enter email",
|
||||||
"setEmailLabel": "Set your gravatar email",
|
"setEmailLabel": "Gravatar email",
|
||||||
"title": "Profile"
|
"title": "Profile"
|
||||||
},
|
},
|
||||||
"raisedHand": "Would like to speak",
|
"raisedHand": "Would like to speak",
|
||||||
|
@ -916,6 +939,7 @@
|
||||||
"localRecordingVideoWarning": "To record your video you must have it on when starting the recording",
|
"localRecordingVideoWarning": "To record your video you must have it on when starting the recording",
|
||||||
"localRecordingWarning": "Make sure you select the current tab in order to use the right video and audio. The recording is currently limited to 1GB, which is around 100 minutes.",
|
"localRecordingWarning": "Make sure you select the current tab in order to use the right video and audio. The recording is currently limited to 1GB, which is around 100 minutes.",
|
||||||
"loggedIn": "Logged in as {{userName}}",
|
"loggedIn": "Logged in as {{userName}}",
|
||||||
|
"noMicPermission": "Microphone track could not be created. Please grant permission to use the microphone.",
|
||||||
"noStreams": "No audio or video stream detected.",
|
"noStreams": "No audio or video stream detected.",
|
||||||
"off": "Recording stopped",
|
"off": "Recording stopped",
|
||||||
"offBy": "{{name}} stopped the recording",
|
"offBy": "{{name}} stopped the recording",
|
||||||
|
@ -949,6 +973,7 @@
|
||||||
"title": "Security Options"
|
"title": "Security Options"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
|
"audio": "Audio",
|
||||||
"buttonLabel": "Settings",
|
"buttonLabel": "Settings",
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"about": "The {{appName}} calendar integration is used to securely access your calendar so it can read upcoming events.",
|
"about": "The {{appName}} calendar integration is used to securely access your calendar so it can read upcoming events.",
|
||||||
|
@ -969,9 +994,11 @@
|
||||||
"maxStageParticipants": "Maximum number of participants who can be pinned to the main stage (EXPERIMENTAL)",
|
"maxStageParticipants": "Maximum number of participants who can be pinned to the main stage (EXPERIMENTAL)",
|
||||||
"microphones": "Microphones",
|
"microphones": "Microphones",
|
||||||
"moderator": "Moderator",
|
"moderator": "Moderator",
|
||||||
"more": "More",
|
"moderatorOptions": "Moderator options",
|
||||||
|
"more": "General",
|
||||||
"name": "Name",
|
"name": "Name",
|
||||||
"noDevice": "None",
|
"noDevice": "None",
|
||||||
|
"notifications": "Notifications",
|
||||||
"participantJoined": "Participant Joined",
|
"participantJoined": "Participant Joined",
|
||||||
"participantKnocking": "Participant entered lobby",
|
"participantKnocking": "Participant entered lobby",
|
||||||
"participantLeft": "Participant Left",
|
"participantLeft": "Participant Left",
|
||||||
|
@ -982,13 +1009,14 @@
|
||||||
"selectCamera": "Camera",
|
"selectCamera": "Camera",
|
||||||
"selectMic": "Microphone",
|
"selectMic": "Microphone",
|
||||||
"selfView": "Self view",
|
"selfView": "Self view",
|
||||||
"sounds": "Sounds",
|
"shortcuts": "Shortcuts",
|
||||||
"speakers": "Speakers",
|
"speakers": "Speakers",
|
||||||
"startAudioMuted": "Everyone starts muted",
|
"startAudioMuted": "Everyone starts muted",
|
||||||
"startReactionsMuted": "Mute reaction sounds for everyone",
|
"startReactionsMuted": "Mute reaction sounds for everyone",
|
||||||
"startVideoMuted": "Everyone starts hidden",
|
"startVideoMuted": "Everyone starts hidden",
|
||||||
"talkWhileMuted": "Talk while muted",
|
"talkWhileMuted": "Talk while muted",
|
||||||
"title": "Settings"
|
"title": "Settings",
|
||||||
|
"video": "Video"
|
||||||
},
|
},
|
||||||
"settingsView": {
|
"settingsView": {
|
||||||
"advanced": "Advanced",
|
"advanced": "Advanced",
|
||||||
|
@ -1080,6 +1108,7 @@
|
||||||
"giphy": "Toggle GIPHY menu",
|
"giphy": "Toggle GIPHY menu",
|
||||||
"grantModerator": "Grant Moderator Rights",
|
"grantModerator": "Grant Moderator Rights",
|
||||||
"hangup": "Leave the meeting",
|
"hangup": "Leave the meeting",
|
||||||
|
"heading": "Toolbar",
|
||||||
"help": "Help",
|
"help": "Help",
|
||||||
"invite": "Invite people",
|
"invite": "Invite people",
|
||||||
"kick": "Kick participant",
|
"kick": "Kick participant",
|
||||||
|
@ -1146,6 +1175,7 @@
|
||||||
"download": "Download our apps",
|
"download": "Download our apps",
|
||||||
"e2ee": "End-to-End Encryption",
|
"e2ee": "End-to-End Encryption",
|
||||||
"embedMeeting": "Embed meeting",
|
"embedMeeting": "Embed meeting",
|
||||||
|
"enableNoiseSuppression": "Enable noise suppression",
|
||||||
"endConference": "End meeting for all",
|
"endConference": "End meeting for all",
|
||||||
"enterFullScreen": "View full screen",
|
"enterFullScreen": "View full screen",
|
||||||
"enterTileView": "Enter tile view",
|
"enterTileView": "Enter tile view",
|
||||||
|
@ -1233,6 +1263,7 @@
|
||||||
"subtitlesOff": "Off",
|
"subtitlesOff": "Off",
|
||||||
"tr": "TR"
|
"tr": "TR"
|
||||||
},
|
},
|
||||||
|
"unpinParticipant": "{{participantName}} - Unpin",
|
||||||
"userMedia": {
|
"userMedia": {
|
||||||
"androidGrantPermissions": "Select <b><i>Allow</i></b> when your browser asks for permissions.",
|
"androidGrantPermissions": "Select <b><i>Allow</i></b> when your browser asks for permissions.",
|
||||||
"chromeGrantPermissions": "Select <b><i>Allow</i></b> when your browser asks for permissions.",
|
"chromeGrantPermissions": "Select <b><i>Allow</i></b> when your browser asks for permissions.",
|
||||||
|
@ -1271,9 +1302,11 @@
|
||||||
"ldTooltip": "Viewing low definition video",
|
"ldTooltip": "Viewing low definition video",
|
||||||
"lowDefinition": "Low definition",
|
"lowDefinition": "Low definition",
|
||||||
"performanceSettings": "Performance settings",
|
"performanceSettings": "Performance settings",
|
||||||
|
"recording": "Recording in progress",
|
||||||
"sd": "SD",
|
"sd": "SD",
|
||||||
"sdTooltip": "Viewing standard definition video",
|
"sdTooltip": "Viewing standard definition video",
|
||||||
"standardDefinition": "Standard definition"
|
"standardDefinition": "Standard definition",
|
||||||
|
"streaming": "Streaming in progress"
|
||||||
},
|
},
|
||||||
"videothumbnail": {
|
"videothumbnail": {
|
||||||
"connectionInfo": "Connection Info",
|
"connectionInfo": "Connection Info",
|
||||||
|
@ -1285,6 +1318,7 @@
|
||||||
"grantModerator": "Grant Moderator Rights",
|
"grantModerator": "Grant Moderator Rights",
|
||||||
"hideSelfView": "Hide self view",
|
"hideSelfView": "Hide self view",
|
||||||
"kick": "Kick out",
|
"kick": "Kick out",
|
||||||
|
"mirrorVideo": "Mirror my video",
|
||||||
"moderator": "Moderator",
|
"moderator": "Moderator",
|
||||||
"mute": "Participant is muted",
|
"mute": "Participant is muted",
|
||||||
"muted": "Muted",
|
"muted": "Muted",
|
||||||
|
@ -1316,12 +1350,13 @@
|
||||||
"none": "None",
|
"none": "None",
|
||||||
"pleaseWait": "Please wait...",
|
"pleaseWait": "Please wait...",
|
||||||
"removeBackground": "Remove background",
|
"removeBackground": "Remove background",
|
||||||
"slightBlur": "Slight Blur",
|
"slightBlur": "Half Blur",
|
||||||
"title": "Virtual backgrounds",
|
"title": "Virtual backgrounds",
|
||||||
"uploadedImage": "Uploaded image {{index}}",
|
"uploadedImage": "Uploaded image {{index}}",
|
||||||
"webAssemblyWarning": "WebAssembly not supported",
|
"webAssemblyWarning": "WebAssembly not supported",
|
||||||
"webAssemblyWarningDescription": "WebAssembly disabled or not supported by this browser"
|
"webAssemblyWarningDescription": "WebAssembly disabled or not supported by this browser"
|
||||||
},
|
},
|
||||||
|
"visitorsLabel": "Number of visitors: {{count}}",
|
||||||
"volumeSlider": "Volume slider",
|
"volumeSlider": "Volume slider",
|
||||||
"welcomepage": {
|
"welcomepage": {
|
||||||
"accessibilityLabel": {
|
"accessibilityLabel": {
|
||||||
|
@ -1354,6 +1389,7 @@
|
||||||
"microsoftLogo": "Microsoft logo",
|
"microsoftLogo": "Microsoft logo",
|
||||||
"policyLogo": "Policy logo"
|
"policyLogo": "Policy logo"
|
||||||
},
|
},
|
||||||
|
"meetingsAccessibilityLabel": "Meetings",
|
||||||
"mobileDownLoadLinkAndroid": "Download mobile app for Android",
|
"mobileDownLoadLinkAndroid": "Download mobile app for Android",
|
||||||
"mobileDownLoadLinkFDroid": "Download mobile app for F-Droid",
|
"mobileDownLoadLinkFDroid": "Download mobile app for F-Droid",
|
||||||
"mobileDownLoadLinkIos": "Download mobile app for iOS",
|
"mobileDownLoadLinkIos": "Download mobile app for iOS",
|
||||||
|
@ -1373,5 +1409,10 @@
|
||||||
"terms": "Terms",
|
"terms": "Terms",
|
||||||
"title": "Secure, fully featured, and completely free video conferencing",
|
"title": "Secure, fully featured, and completely free video conferencing",
|
||||||
"upcomingMeetings": "Your upcoming meetings"
|
"upcomingMeetings": "Your upcoming meetings"
|
||||||
|
},
|
||||||
|
"whiteboard": {
|
||||||
|
"accessibilityLabel": {
|
||||||
|
"heading": "Whiteboard"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,8 +71,13 @@ import {
|
||||||
import { appendSuffix } from '../../react/features/display-name';
|
import { appendSuffix } from '../../react/features/display-name';
|
||||||
import { isEnabled as isDropboxEnabled } from '../../react/features/dropbox';
|
import { isEnabled as isDropboxEnabled } from '../../react/features/dropbox';
|
||||||
import { setMediaEncryptionKey, toggleE2EE } from '../../react/features/e2ee/actions';
|
import { setMediaEncryptionKey, toggleE2EE } from '../../react/features/e2ee/actions';
|
||||||
import { addStageParticipant, resizeFilmStrip, setVolume } from '../../react/features/filmstrip/actions.web';
|
import {
|
||||||
import { isStageFilmstripAvailable } from '../../react/features/filmstrip/functions.web';
|
addStageParticipant,
|
||||||
|
resizeFilmStrip,
|
||||||
|
setVolume,
|
||||||
|
togglePinStageParticipant
|
||||||
|
} from '../../react/features/filmstrip/actions.web';
|
||||||
|
import { getPinnedActiveParticipants, isStageFilmstripAvailable } from '../../react/features/filmstrip/functions.web';
|
||||||
import { invite } from '../../react/features/invite';
|
import { invite } from '../../react/features/invite';
|
||||||
import {
|
import {
|
||||||
selectParticipantInLargeVideo
|
selectParticipantInLargeVideo
|
||||||
|
@ -101,6 +106,8 @@ import { startAudioScreenShareFlow, startScreenShareFlow } from '../../react/fea
|
||||||
import { isScreenAudioSupported } from '../../react/features/screen-share/functions';
|
import { isScreenAudioSupported } from '../../react/features/screen-share/functions';
|
||||||
import { toggleScreenshotCaptureSummary } from '../../react/features/screenshot-capture';
|
import { toggleScreenshotCaptureSummary } from '../../react/features/screenshot-capture';
|
||||||
import { isScreenshotCaptureEnabled } from '../../react/features/screenshot-capture/functions';
|
import { isScreenshotCaptureEnabled } from '../../react/features/screenshot-capture/functions';
|
||||||
|
import SettingsDialog from '../../react/features/settings/components/web/SettingsDialog';
|
||||||
|
import { SETTINGS_TABS } from '../../react/features/settings/constants';
|
||||||
import { playSharedVideo, stopSharedVideo } from '../../react/features/shared-video/actions.any';
|
import { playSharedVideo, stopSharedVideo } from '../../react/features/shared-video/actions.any';
|
||||||
import { extractYoutubeIdOrURL } from '../../react/features/shared-video/functions';
|
import { extractYoutubeIdOrURL } from '../../react/features/shared-video/functions';
|
||||||
import { setRequestingSubtitles, toggleRequestingSubtitles } from '../../react/features/subtitles/actions';
|
import { setRequestingSubtitles, toggleRequestingSubtitles } from '../../react/features/subtitles/actions';
|
||||||
|
@ -108,7 +115,6 @@ import { isAudioMuteButtonDisabled } from '../../react/features/toolbox/function
|
||||||
import { setTileView, toggleTileView } from '../../react/features/video-layout';
|
import { setTileView, toggleTileView } from '../../react/features/video-layout';
|
||||||
import { muteAllParticipants } from '../../react/features/video-menu/actions';
|
import { muteAllParticipants } from '../../react/features/video-menu/actions';
|
||||||
import { setVideoQuality } from '../../react/features/video-quality';
|
import { setVideoQuality } from '../../react/features/video-quality';
|
||||||
import VirtualBackgroundDialog from '../../react/features/virtual-background/components/VirtualBackgroundDialog';
|
|
||||||
import { getJitsiMeetTransport } from '../transport';
|
import { getJitsiMeetTransport } from '../transport';
|
||||||
|
|
||||||
import { API_ID, ENDPOINT_TEXT_MESSAGE_NAME } from './constants';
|
import { API_ID, ENDPOINT_TEXT_MESSAGE_NAME } from './constants';
|
||||||
|
@ -241,6 +247,22 @@ function initCommands() {
|
||||||
logger.debug('Pin participant command received');
|
logger.debug('Pin participant command received');
|
||||||
|
|
||||||
const state = APP.store.getState();
|
const state = APP.store.getState();
|
||||||
|
|
||||||
|
// if id not provided, unpin everybody.
|
||||||
|
if (!id) {
|
||||||
|
if (isStageFilmstripAvailable(state)) {
|
||||||
|
const pinnedParticipants = getPinnedActiveParticipants(state);
|
||||||
|
|
||||||
|
pinnedParticipants?.forEach(p => {
|
||||||
|
APP.store.dispatch(togglePinStageParticipant(p.participantId));
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
APP.store.dispatch(pinParticipant());
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const participant = videoType === VIDEO_TYPE.DESKTOP
|
const participant = videoType === VIDEO_TYPE.DESKTOP
|
||||||
? getVirtualScreenshareParticipantByOwnerId(state, id) : getParticipantById(state, id);
|
? getVirtualScreenshareParticipantByOwnerId(state, id) : getParticipantById(state, id);
|
||||||
|
|
||||||
|
@ -254,7 +276,7 @@ function initCommands() {
|
||||||
|
|
||||||
const participantId = participant.id;
|
const participantId = participant.id;
|
||||||
|
|
||||||
if (isStageFilmstripAvailable(APP.store.getState())) {
|
if (isStageFilmstripAvailable(state)) {
|
||||||
APP.store.dispatch(addStageParticipant(participantId, true));
|
APP.store.dispatch(addStageParticipant(participantId, true));
|
||||||
} else {
|
} else {
|
||||||
APP.store.dispatch(pinParticipant(participantId));
|
APP.store.dispatch(pinParticipant(participantId));
|
||||||
|
@ -644,15 +666,15 @@ function initCommands() {
|
||||||
}
|
}
|
||||||
|
|
||||||
let recordingConfig;
|
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) {
|
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) {
|
if (dropboxToken) {
|
||||||
recordingConfig = {
|
recordingConfig = {
|
||||||
mode: JitsiRecordingConstants.mode.FILE,
|
mode: JitsiRecordingConstants.mode.FILE,
|
||||||
|
@ -777,7 +799,8 @@ function initCommands() {
|
||||||
APP.store.dispatch(overwriteConfig(whitelistedConfig));
|
APP.store.dispatch(overwriteConfig(whitelistedConfig));
|
||||||
},
|
},
|
||||||
'toggle-virtual-background': () => {
|
'toggle-virtual-background': () => {
|
||||||
APP.store.dispatch(toggleDialog(VirtualBackgroundDialog));
|
APP.store.dispatch(toggleDialog(SettingsDialog, {
|
||||||
|
defaultTab: SETTINGS_TABS.VIRTUAL_BACKGROUND }));
|
||||||
},
|
},
|
||||||
'end-conference': () => {
|
'end-conference': () => {
|
||||||
APP.store.dispatch(endConference());
|
APP.store.dispatch(endConference());
|
||||||
|
@ -1208,6 +1231,22 @@ class API {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notify the external app that a notification has been triggered.
|
||||||
|
*
|
||||||
|
* @param {string} title - The notification title.
|
||||||
|
* @param {string} description - The notification description.
|
||||||
|
*
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
notifyNotificationTriggered(title: string, description: string) {
|
||||||
|
this._sendEvent({
|
||||||
|
description,
|
||||||
|
name: 'notification-triggered',
|
||||||
|
title
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Notify external application that the video quality setting has changed.
|
* Notify external application that the video quality setting has changed.
|
||||||
*
|
*
|
||||||
|
@ -1941,6 +1980,21 @@ class API {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notify external application ( if API is enabled) that a participant menu button was clicked.
|
||||||
|
*
|
||||||
|
* @param {string} key - The key of the participant menu button.
|
||||||
|
* @param {string} participantId - The ID of the participant for with the participant menu button was clicked.
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
notifyParticipantMenuButtonClicked(key, participantId) {
|
||||||
|
this._sendEvent({
|
||||||
|
name: 'participant-menu-button-clicked',
|
||||||
|
key,
|
||||||
|
participantId
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Disposes the allocated resources.
|
* Disposes the allocated resources.
|
||||||
*
|
*
|
||||||
|
|
|
@ -127,6 +127,7 @@ const events = {
|
||||||
'mouse-enter': 'mouseEnter',
|
'mouse-enter': 'mouseEnter',
|
||||||
'mouse-leave': 'mouseLeave',
|
'mouse-leave': 'mouseLeave',
|
||||||
'mouse-move': 'mouseMove',
|
'mouse-move': 'mouseMove',
|
||||||
|
'notification-triggered': 'notificationTriggered',
|
||||||
'outgoing-message': 'outgoingMessage',
|
'outgoing-message': 'outgoingMessage',
|
||||||
'participant-joined': 'participantJoined',
|
'participant-joined': 'participantJoined',
|
||||||
'participant-kicked-out': 'participantKickedOut',
|
'participant-kicked-out': 'participantKickedOut',
|
||||||
|
@ -140,6 +141,7 @@ const events = {
|
||||||
'raise-hand-updated': 'raiseHandUpdated',
|
'raise-hand-updated': 'raiseHandUpdated',
|
||||||
'recording-link-available': 'recordingLinkAvailable',
|
'recording-link-available': 'recordingLinkAvailable',
|
||||||
'recording-status-changed': 'recordingStatusChanged',
|
'recording-status-changed': 'recordingStatusChanged',
|
||||||
|
'participant-menu-button-clicked': 'participantMenuButtonClick',
|
||||||
'video-ready-to-close': 'readyToClose',
|
'video-ready-to-close': 'readyToClose',
|
||||||
'video-conference-joined': 'videoConferenceJoined',
|
'video-conference-joined': 'videoConferenceJoined',
|
||||||
'video-conference-left': 'videoConferenceLeft',
|
'video-conference-left': 'videoConferenceLeft',
|
||||||
|
@ -388,10 +390,10 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
|
||||||
|
|
||||||
this._frame = document.createElement('iframe');
|
this._frame = document.createElement('iframe');
|
||||||
this._frame.allow = 'camera; microphone; display-capture; autoplay; clipboard-write';
|
this._frame.allow = 'camera; microphone; display-capture; autoplay; clipboard-write';
|
||||||
this._frame.src = this._url;
|
|
||||||
this._frame.name = frameName;
|
this._frame.name = frameName;
|
||||||
this._frame.id = frameName;
|
this._frame.id = frameName;
|
||||||
this._setSize(height, width);
|
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.setAttribute('allowFullScreen', 'true');
|
||||||
this._frame.style.border = 0;
|
this._frame.style.border = 0;
|
||||||
|
|
||||||
|
@ -402,6 +404,8 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
|
||||||
}
|
}
|
||||||
|
|
||||||
this._frame = this._parentNode.appendChild(this._frame);
|
this._frame = this._parentNode.appendChild(this._frame);
|
||||||
|
|
||||||
|
this._frame.src = this._url;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -292,17 +292,6 @@ UI.showToolbar = timeout => APP.store.dispatch(showToolbox(timeout));
|
||||||
// Used by torture.
|
// Used by torture.
|
||||||
UI.dockToolbar = dock => APP.store.dispatch(dockToolbox(dock));
|
UI.dockToolbar = dock => APP.store.dispatch(dockToolbox(dock));
|
||||||
|
|
||||||
/**
|
|
||||||
* Updates the displayed avatar for participant.
|
|
||||||
*
|
|
||||||
* @param {string} id - User id whose avatar should be updated.
|
|
||||||
* @param {string} avatarURL - The URL to avatar image to display.
|
|
||||||
* @returns {void}
|
|
||||||
*/
|
|
||||||
UI.refreshAvatarDisplay = function(id) {
|
|
||||||
VideoLayout.changeUserAvatar(id);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Notify user that connection failed.
|
* Notify user that connection failed.
|
||||||
* @param {string} stropheErrorMsg raw Strophe error message
|
* @param {string} stropheErrorMsg raw Strophe error message
|
||||||
|
|
|
@ -8,39 +8,6 @@ import Filmstrip from '../videolayout/Filmstrip';
|
||||||
import LargeContainer from '../videolayout/LargeContainer';
|
import LargeContainer from '../videolayout/LargeContainer';
|
||||||
import VideoLayout from '../videolayout/VideoLayout';
|
import VideoLayout from '../videolayout/VideoLayout';
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
function bubbleIframeMouseMove(iframe) {
|
|
||||||
const existingOnMouseMove = iframe.contentWindow.onmousemove;
|
|
||||||
|
|
||||||
iframe.contentWindow.onmousemove = function(e) {
|
|
||||||
if (existingOnMouseMove) {
|
|
||||||
existingOnMouseMove(e);
|
|
||||||
}
|
|
||||||
const evt = document.createEvent('MouseEvents');
|
|
||||||
const boundingClientRect = iframe.getBoundingClientRect();
|
|
||||||
|
|
||||||
evt.initMouseEvent(
|
|
||||||
'mousemove',
|
|
||||||
true, // bubbles
|
|
||||||
false, // not cancelable
|
|
||||||
window,
|
|
||||||
e.detail,
|
|
||||||
e.screenX,
|
|
||||||
e.screenY,
|
|
||||||
e.clientX + boundingClientRect.left,
|
|
||||||
e.clientY + boundingClientRect.top,
|
|
||||||
e.ctrlKey,
|
|
||||||
e.altKey,
|
|
||||||
e.shiftKey,
|
|
||||||
e.metaKey,
|
|
||||||
e.button,
|
|
||||||
null // no related element
|
|
||||||
);
|
|
||||||
iframe.dispatchEvent(evt);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default Etherpad frame width.
|
* Default Etherpad frame width.
|
||||||
|
@ -68,7 +35,7 @@ class Etherpad extends LargeContainer {
|
||||||
|
|
||||||
iframe.id = 'etherpadIFrame';
|
iframe.id = 'etherpadIFrame';
|
||||||
iframe.src = url;
|
iframe.src = url;
|
||||||
iframe.frameBorder = 0;
|
iframe.style.border = 0;
|
||||||
iframe.scrolling = 'no';
|
iframe.scrolling = 'no';
|
||||||
iframe.width = DEFAULT_WIDTH;
|
iframe.width = DEFAULT_WIDTH;
|
||||||
iframe.height = DEFAULT_HEIGHT;
|
iframe.height = DEFAULT_HEIGHT;
|
||||||
|
@ -76,26 +43,6 @@ class Etherpad extends LargeContainer {
|
||||||
|
|
||||||
this.container.appendChild(iframe);
|
this.container.appendChild(iframe);
|
||||||
|
|
||||||
iframe.onload = function() {
|
|
||||||
// eslint-disable-next-line no-self-assign
|
|
||||||
document.domain = document.domain;
|
|
||||||
bubbleIframeMouseMove(iframe);
|
|
||||||
|
|
||||||
setTimeout(() => {
|
|
||||||
const doc = iframe.contentDocument;
|
|
||||||
|
|
||||||
// the iframes inside of the etherpad are
|
|
||||||
// not yet loaded when the etherpad iframe is loaded
|
|
||||||
const outer = doc.getElementsByName('ace_outer')[0];
|
|
||||||
|
|
||||||
bubbleIframeMouseMove(outer);
|
|
||||||
|
|
||||||
const inner = doc.getElementsByName('ace_inner')[0];
|
|
||||||
|
|
||||||
bubbleIframeMouseMove(inner);
|
|
||||||
}, 2000);
|
|
||||||
};
|
|
||||||
|
|
||||||
this.iframe = iframe;
|
this.iframe = iframe;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,11 +14,13 @@ import { i18next } from '../../../react/features/base/i18n';
|
||||||
import { JitsiTrackEvents } from '../../../react/features/base/lib-jitsi-meet';
|
import { JitsiTrackEvents } from '../../../react/features/base/lib-jitsi-meet';
|
||||||
import { VIDEO_TYPE } from '../../../react/features/base/media';
|
import { VIDEO_TYPE } from '../../../react/features/base/media';
|
||||||
import {
|
import {
|
||||||
|
getLocalParticipant,
|
||||||
getParticipantById,
|
getParticipantById,
|
||||||
getParticipantDisplayName,
|
getParticipantDisplayName,
|
||||||
isLocalScreenshareParticipant,
|
isLocalScreenshareParticipant,
|
||||||
isScreenShareParticipant
|
isScreenShareParticipant
|
||||||
} from '../../../react/features/base/participants';
|
} from '../../../react/features/base/participants';
|
||||||
|
import { getHideSelfView } from '../../../react/features/base/settings/functions.any';
|
||||||
import {
|
import {
|
||||||
getVideoTrackByParticipant,
|
getVideoTrackByParticipant,
|
||||||
trackStreamingStatusChanged
|
trackStreamingStatusChanged
|
||||||
|
@ -232,6 +234,10 @@ export default class LargeVideoManager {
|
||||||
|
|
||||||
preUpdate.then(() => {
|
preUpdate.then(() => {
|
||||||
const { id, stream, videoType, resolve } = this.newStreamData;
|
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
|
// FIXME this does not really make sense, because the videoType
|
||||||
// (camera or desktop) is a completely different thing than
|
// (camera or desktop) is a completely different thing than
|
||||||
|
@ -245,13 +251,16 @@ export default class LargeVideoManager {
|
||||||
// eslint-disable-next-line no-shadow
|
// eslint-disable-next-line no-shadow
|
||||||
const container = this.getCurrentContainer();
|
const container = this.getCurrentContainer();
|
||||||
|
|
||||||
|
if (shouldHideSelfView && localId === id) {
|
||||||
|
return container.hide();
|
||||||
|
}
|
||||||
|
|
||||||
container.setStream(id, stream, videoType);
|
container.setStream(id, stream, videoType);
|
||||||
|
|
||||||
// change the avatar url on large
|
// change the avatar url on large
|
||||||
this.updateAvatar();
|
this.updateAvatar();
|
||||||
|
|
||||||
const isVideoMuted = !stream || stream.isMuted();
|
const isVideoMuted = !stream || stream.isMuted();
|
||||||
const state = APP.store.getState();
|
|
||||||
const participant = getParticipantById(state, id);
|
const participant = getParticipantById(state, id);
|
||||||
const videoTrack = getVideoTrackByParticipant(state, participant);
|
const videoTrack = getVideoTrackByParticipant(state, participant);
|
||||||
|
|
||||||
|
|
|
@ -139,12 +139,6 @@ const VideoLayout = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
changeUserAvatar(id, avatarUrl) {
|
|
||||||
if (this.isCurrentlyOnLarge(id)) {
|
|
||||||
largeVideo.updateAvatar(avatarUrl);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
isLargeVideoVisible() {
|
isLargeVideoVisible() {
|
||||||
return this.isLargeContainerTypeVisible(VIDEO_CONTAINER_TYPE);
|
return this.isLargeContainerTypeVisible(VIDEO_CONTAINER_TYPE);
|
||||||
},
|
},
|
||||||
|
|
|
@ -8,10 +8,9 @@ import {
|
||||||
createShortcutEvent,
|
createShortcutEvent,
|
||||||
sendAnalytics
|
sendAnalytics
|
||||||
} from '../../react/features/analytics';
|
} from '../../react/features/analytics';
|
||||||
import { toggleDialog } from '../../react/features/base/dialog';
|
|
||||||
import { clickOnVideo } from '../../react/features/filmstrip/actions';
|
import { clickOnVideo } from '../../react/features/filmstrip/actions';
|
||||||
import { KeyboardShortcutsDialog }
|
import { openSettingsDialog } from '../../react/features/settings/actions';
|
||||||
from '../../react/features/keyboard-shortcuts';
|
import { SETTINGS_TABS } from '../../react/features/settings/constants';
|
||||||
|
|
||||||
const logger = Logger.getLogger(__filename);
|
const logger = Logger.getLogger(__filename);
|
||||||
|
|
||||||
|
@ -120,15 +119,17 @@ const KeyboardShortcut = {
|
||||||
return jitsiLocalStorage.getItem(_enableShortcutsKey) === 'false' ? false : true;
|
return jitsiLocalStorage.getItem(_enableShortcutsKey) === 'false' ? false : true;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
getShortcutsDescriptions() {
|
||||||
|
return _shortcutsHelp;
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Opens the {@KeyboardShortcutsDialog} dialog.
|
* Opens the {@SettingsDialog} dialog on the Shortcuts page.
|
||||||
*
|
*
|
||||||
* @returns {void}
|
* @returns {void}
|
||||||
*/
|
*/
|
||||||
openDialog() {
|
openDialog() {
|
||||||
APP.store.dispatch(toggleDialog(KeyboardShortcutsDialog, {
|
APP.store.dispatch(openSettingsDialog(SETTINGS_TABS.SHORTCUTS, false));
|
||||||
shortcutDescriptions: _shortcutsHelp
|
|
||||||
}));
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
34
package.json
34
package.json
|
@ -20,15 +20,13 @@
|
||||||
"@atlaskit/icon": "21.2.0",
|
"@atlaskit/icon": "21.2.0",
|
||||||
"@atlaskit/inline-dialog": "13.0.9",
|
"@atlaskit/inline-dialog": "13.0.9",
|
||||||
"@atlaskit/inline-message": "11.0.8",
|
"@atlaskit/inline-message": "11.0.8",
|
||||||
"@atlaskit/modal-dialog": "11.2.4",
|
|
||||||
"@atlaskit/multi-select": "15.0.5",
|
"@atlaskit/multi-select": "15.0.5",
|
||||||
"@atlaskit/spinner": "15.0.6",
|
"@atlaskit/spinner": "15.0.6",
|
||||||
"@atlaskit/tabs": "12.1.2",
|
|
||||||
"@atlaskit/theme": "11.0.2",
|
"@atlaskit/theme": "11.0.2",
|
||||||
"@atlaskit/tooltip": "17.1.2",
|
"@atlaskit/tooltip": "17.1.2",
|
||||||
"@emotion/react": "11.10.0",
|
"@emotion/react": "11.10.0",
|
||||||
"@emotion/styled": "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-components": "5.6.0",
|
||||||
"@giphy/react-native-sdk": "1.7.0",
|
"@giphy/react-native-sdk": "1.7.0",
|
||||||
"@hapi/bourne": "2.0.0",
|
"@hapi/bourne": "2.0.0",
|
||||||
|
@ -46,18 +44,18 @@
|
||||||
"@react-native-community/netinfo": "7.1.7",
|
"@react-native-community/netinfo": "7.1.7",
|
||||||
"@react-native-community/slider": "4.1.12",
|
"@react-native-community/slider": "4.1.12",
|
||||||
"@react-native-google-signin/google-signin": "7.0.4",
|
"@react-native-google-signin/google-signin": "7.0.4",
|
||||||
"@react-native-masked-view/masked-view": "0.2.6",
|
"@react-navigation/bottom-tabs": "6.5.3",
|
||||||
"@react-navigation/bottom-tabs": "6.0.9",
|
"@react-navigation/elements": "1.3.13",
|
||||||
"@react-navigation/elements": "1.2.1",
|
"@react-navigation/material-top-tabs": "6.5.2",
|
||||||
"@react-navigation/material-top-tabs": "6.0.6",
|
"@react-navigation/native": "6.1.2",
|
||||||
"@react-navigation/native": "6.0.6",
|
"@react-navigation/stack": "6.3.11",
|
||||||
"@react-navigation/stack": "6.2.2",
|
|
||||||
"@svgr/webpack": "6.3.1",
|
"@svgr/webpack": "6.3.1",
|
||||||
"@tensorflow/tfjs-backend-wasm": "3.13.0",
|
"@tensorflow/tfjs-backend-wasm": "3.13.0",
|
||||||
"@tensorflow/tfjs-core": "3.13.0",
|
"@tensorflow/tfjs-core": "3.13.0",
|
||||||
"@types/amplitude-js": "8.16.2",
|
"@types/amplitude-js": "8.16.2",
|
||||||
"@types/audioworklet": "0.0.29",
|
"@types/audioworklet": "0.0.29",
|
||||||
"@types/w3c-image-capture": "1.0.6",
|
"@types/w3c-image-capture": "1.0.6",
|
||||||
|
"@types/w3c-web-hid": "1.0.3",
|
||||||
"@vladmandic/human": "2.6.5",
|
"@vladmandic/human": "2.6.5",
|
||||||
"@vladmandic/human-models": "2.5.9",
|
"@vladmandic/human-models": "2.5.9",
|
||||||
"@xmldom/xmldom": "0.7.9",
|
"@xmldom/xmldom": "0.7.9",
|
||||||
|
@ -79,7 +77,7 @@
|
||||||
"js-md5": "0.6.1",
|
"js-md5": "0.6.1",
|
||||||
"js-sha512": "0.8.0",
|
"js-sha512": "0.8.0",
|
||||||
"jwt-decode": "2.2.0",
|
"jwt-decode": "2.2.0",
|
||||||
"lib-jitsi-meet": "https://github.com/jitsi/lib-jitsi-meet/releases/download/v1564.0.0+e2aa3700/lib-jitsi-meet.tgz",
|
"lib-jitsi-meet": "https://github.com/jitsi/lib-jitsi-meet/releases/download/v1589.0.0+d43c349d/lib-jitsi-meet.tgz",
|
||||||
"lodash": "4.17.21",
|
"lodash": "4.17.21",
|
||||||
"moment": "2.29.4",
|
"moment": "2.29.4",
|
||||||
"moment-duration-format": "2.2.2",
|
"moment-duration-format": "2.2.2",
|
||||||
|
@ -97,19 +95,18 @@
|
||||||
"react-native-background-timer": "2.4.1",
|
"react-native-background-timer": "2.4.1",
|
||||||
"react-native-calendar-events": "2.2.0",
|
"react-native-calendar-events": "2.2.0",
|
||||||
"react-native-callstats": "3.73.7",
|
"react-native-callstats": "3.73.7",
|
||||||
"react-native-collapsible": "1.6.0",
|
|
||||||
"react-native-default-preference": "1.4.4",
|
"react-native-default-preference": "1.4.4",
|
||||||
"react-native-device-info": "8.4.8",
|
"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-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.9.0",
|
||||||
"react-native-get-random-values": "1.7.2",
|
"react-native-get-random-values": "1.7.2",
|
||||||
"react-native-immersive": "2.0.0",
|
"react-native-immersive": "2.0.0",
|
||||||
"react-native-keep-awake": "4.0.0",
|
"react-native-keep-awake": "4.0.0",
|
||||||
"react-native-orientation-locker": "1.5.0",
|
"react-native-orientation-locker": "1.5.0",
|
||||||
"react-native-pager-view": "5.4.9",
|
"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-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-screens": "3.13.1",
|
||||||
"react-native-sound": "0.11.1",
|
"react-native-sound": "0.11.1",
|
||||||
"react-native-splash-screen": "3.3.0",
|
"react-native-splash-screen": "3.3.0",
|
||||||
|
@ -119,7 +116,7 @@
|
||||||
"react-native-url-polyfill": "1.3.0",
|
"react-native-url-polyfill": "1.3.0",
|
||||||
"react-native-video": "https://git@github.com/react-native-video/react-native-video#7c48ae7c8544b2b537fb60194e9620b9fcceae52",
|
"react-native-video": "https://git@github.com/react-native-video/react-native-video#7c48ae7c8544b2b537fb60194e9620b9fcceae52",
|
||||||
"react-native-watch-connectivity": "1.0.11",
|
"react-native-watch-connectivity": "1.0.11",
|
||||||
"react-native-webrtc": "106.0.1",
|
"react-native-webrtc": "106.0.6",
|
||||||
"react-native-webview": "11.15.1",
|
"react-native-webview": "11.15.1",
|
||||||
"react-native-youtube-iframe": "2.2.1",
|
"react-native-youtube-iframe": "2.2.1",
|
||||||
"react-redux": "7.1.0",
|
"react-redux": "7.1.0",
|
||||||
|
@ -147,11 +144,12 @@
|
||||||
"@babel/preset-env": "7.16.0",
|
"@babel/preset-env": "7.16.0",
|
||||||
"@babel/preset-flow": "7.16.0",
|
"@babel/preset-flow": "7.16.0",
|
||||||
"@babel/preset-react": "7.16.0",
|
"@babel/preset-react": "7.16.0",
|
||||||
"@babel/runtime": "7.16.0",
|
|
||||||
"@jitsi/eslint-config": "4.1.5",
|
"@jitsi/eslint-config": "4.1.5",
|
||||||
"@types/js-md5": "0.4.3",
|
"@types/js-md5": "0.4.3",
|
||||||
"@types/lodash": "4.14.182",
|
"@types/lodash": "4.14.182",
|
||||||
"@types/react": "17.0.14",
|
"@types/react": "17.0.14",
|
||||||
|
"@types/react-dom": "17.0.14",
|
||||||
|
"@types/react-linkify": "1.0.1",
|
||||||
"@types/react-native": "0.68.9",
|
"@types/react-native": "0.68.9",
|
||||||
"@types/react-redux": "7.1.24",
|
"@types/react-redux": "7.1.24",
|
||||||
"@types/react-window": "1.8.5",
|
"@types/react-window": "1.8.5",
|
||||||
|
@ -165,20 +163,18 @@
|
||||||
"circular-dependency-plugin": "5.2.0",
|
"circular-dependency-plugin": "5.2.0",
|
||||||
"clean-css-cli": "4.3.0",
|
"clean-css-cli": "4.3.0",
|
||||||
"css-loader": "3.6.0",
|
"css-loader": "3.6.0",
|
||||||
"eslint": "8.25.0",
|
"eslint": "8.35.0",
|
||||||
"eslint-plugin-flowtype": "8.0.3",
|
"eslint-plugin-flowtype": "8.0.3",
|
||||||
"eslint-plugin-import": "2.25.2",
|
"eslint-plugin-import": "2.25.2",
|
||||||
"eslint-plugin-jsdoc": "37.0.3",
|
"eslint-plugin-jsdoc": "37.0.3",
|
||||||
"eslint-plugin-react": "7.26.1",
|
"eslint-plugin-react": "7.26.1",
|
||||||
"eslint-plugin-react-native": "3.11.0",
|
"eslint-plugin-react-native": "3.11.0",
|
||||||
"eslint-plugin-typescript-sort-keys": "2.1.0",
|
"eslint-plugin-typescript-sort-keys": "2.1.0",
|
||||||
"imports-loader": "0.7.1",
|
|
||||||
"jetifier": "1.6.4",
|
"jetifier": "1.6.4",
|
||||||
"metro-react-native-babel-preset": "0.67.0",
|
"metro-react-native-babel-preset": "0.67.0",
|
||||||
"patch-package": "6.4.7",
|
"patch-package": "6.4.7",
|
||||||
"process": "0.11.10",
|
"process": "0.11.10",
|
||||||
"sass": "1.26.8",
|
"sass": "1.26.8",
|
||||||
"string-replace-loader": "3.0.3",
|
|
||||||
"style-loader": "3.3.1",
|
"style-loader": "3.3.1",
|
||||||
"traverse": "0.6.6",
|
"traverse": "0.6.6",
|
||||||
"ts-loader": "9.4.1",
|
"ts-loader": "9.4.1",
|
||||||
|
|
|
@ -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
|
|
||||||
}
|
|
|
@ -199,7 +199,7 @@ export default class AlwaysOnTop extends Component<*, State> {
|
||||||
color = { getAvatarColor(displayName, customAvatarBackgrounds) }
|
color = { getAvatarColor(displayName, customAvatarBackgrounds) }
|
||||||
id = 'avatar'
|
id = 'avatar'
|
||||||
initials = { getInitials(displayName) }
|
initials = { getInitials(displayName) }
|
||||||
url = { displayName ? null : avatarURL } />)
|
url = { avatarURL } />)
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
className = 'displayname'
|
className = 'displayname'
|
||||||
|
|
|
@ -30,12 +30,10 @@ import {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import { screen } from '../mobile/navigation/routes';
|
import { screen } from '../mobile/navigation/routes';
|
||||||
import { clearNotifications } from '../notifications/actions';
|
import { clearNotifications } from '../notifications/actions';
|
||||||
// @ts-ignore
|
|
||||||
import { setFatalError } from '../overlay';
|
|
||||||
|
|
||||||
import { addTrackStateToURL, getDefaultURL } from './functions.native';
|
import { addTrackStateToURL, getDefaultURL } from './functions.native';
|
||||||
import logger from './logger';
|
import logger from './logger';
|
||||||
import { IStore } from './types';
|
import { IReloadNowOptions, IStore } from './types';
|
||||||
|
|
||||||
export * from './actions.any';
|
export * from './actions.any';
|
||||||
|
|
||||||
|
@ -46,9 +44,10 @@ export * from './actions.any';
|
||||||
* @param {string|undefined} uri - The URI to which to navigate. It may be a
|
* @param {string|undefined} uri - The URI to which to navigate. It may be a
|
||||||
* full URL with an HTTP(S) scheme, a full or partial URI with the app-specific
|
* full URL with an HTTP(S) scheme, a full or partial URI with the app-specific
|
||||||
* scheme, or a mere room name.
|
* scheme, or a mere room name.
|
||||||
|
* @param {Object} [options] - Options.
|
||||||
* @returns {Function}
|
* @returns {Function}
|
||||||
*/
|
*/
|
||||||
export function appNavigate(uri?: string) {
|
export function appNavigate(uri?: string, options: IReloadNowOptions = {}) {
|
||||||
logger.info(`appNavigate to ${uri}`);
|
logger.info(`appNavigate to ${uri}`);
|
||||||
|
|
||||||
return async (dispatch: IStore['dispatch'], getState: IStore['getState']) => {
|
return async (dispatch: IStore['dispatch'], getState: IStore['getState']) => {
|
||||||
|
@ -144,7 +143,10 @@ export function appNavigate(uri?: string) {
|
||||||
dispatch(createDesiredLocalTracks());
|
dispatch(createDesiredLocalTracks());
|
||||||
dispatch(clearNotifications());
|
dispatch(clearNotifications());
|
||||||
|
|
||||||
if (isPrejoinPageEnabled(getState())) {
|
// @ts-ignore
|
||||||
|
const { hidePrejoin } = options;
|
||||||
|
|
||||||
|
if (!hidePrejoin && isPrejoinPageEnabled(getState())) {
|
||||||
navigateRoot(screen.preJoin);
|
navigateRoot(screen.preJoin);
|
||||||
} else {
|
} else {
|
||||||
dispatch(connect());
|
dispatch(connect());
|
||||||
|
@ -177,7 +179,6 @@ export function maybeRedirectToWelcomePage(options: any) { // eslint-disable-lin
|
||||||
*/
|
*/
|
||||||
export function reloadNow() {
|
export function reloadNow() {
|
||||||
return (dispatch: IStore['dispatch'], getState: IStore['getState']) => {
|
return (dispatch: IStore['dispatch'], getState: IStore['getState']) => {
|
||||||
dispatch(setFatalError(undefined));
|
|
||||||
|
|
||||||
const state = getState();
|
const state = getState();
|
||||||
const { locationURL } = state['features/base/connection'];
|
const { locationURL } = state['features/base/connection'];
|
||||||
|
@ -188,6 +189,8 @@ export function reloadNow() {
|
||||||
|
|
||||||
logger.info(`Reloading the conference using URL: ${locationURL}`);
|
logger.info(`Reloading the conference using URL: ${locationURL}`);
|
||||||
|
|
||||||
dispatch(appNavigate(toURLString(newURL)));
|
dispatch(appNavigate(toURLString(newURL), {
|
||||||
|
hidePrejoin: true
|
||||||
|
}));
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,6 @@ import {
|
||||||
import { isVpaasMeeting } from '../jaas/functions';
|
import { isVpaasMeeting } from '../jaas/functions';
|
||||||
import { clearNotifications, showNotification } from '../notifications/actions';
|
import { clearNotifications, showNotification } from '../notifications/actions';
|
||||||
import { NOTIFICATION_TIMEOUT_TYPE } from '../notifications/constants';
|
import { NOTIFICATION_TIMEOUT_TYPE } from '../notifications/constants';
|
||||||
import { setFatalError } from '../overlay/actions';
|
|
||||||
import { isWelcomePageEnabled } from '../welcome/functions';
|
import { isWelcomePageEnabled } from '../welcome/functions';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
@ -222,7 +221,6 @@ export function maybeRedirectToWelcomePage(options: { feedbackSubmitted?: boolea
|
||||||
*/
|
*/
|
||||||
export function reloadNow() {
|
export function reloadNow() {
|
||||||
return (dispatch: IStore['dispatch'], getState: IStore['getState']) => {
|
return (dispatch: IStore['dispatch'], getState: IStore['getState']) => {
|
||||||
dispatch(setFatalError(undefined));
|
|
||||||
|
|
||||||
const state = getState();
|
const state = getState();
|
||||||
const { locationURL } = state['features/base/connection'];
|
const { locationURL } = state['features/base/connection'];
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
// @flow
|
import React from 'react';
|
||||||
|
|
||||||
import React, { Fragment } from 'react';
|
|
||||||
|
|
||||||
import { BaseApp } from '../../base/app';
|
import { BaseApp } from '../../base/app';
|
||||||
import { toURLString } from '../../base/util';
|
import { toURLString } from '../../base/util';
|
||||||
import { OverlayContainer } from '../../overlay';
|
|
||||||
import { appNavigate } from '../actions';
|
import { appNavigate } from '../actions';
|
||||||
import { getDefaultURL } from '../functions';
|
import { getDefaultURL } from '../functions';
|
||||||
|
|
||||||
|
@ -73,23 +70,7 @@ export class AbstractApp extends BaseApp<Props, *> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
_createMainElement: (React.ReactElement, Object) => ?React.ReactElement;
|
||||||
* Creates an extra {@link ReactElement}s to be added (unconditionally)
|
|
||||||
* alongside the main element.
|
|
||||||
*
|
|
||||||
* @abstract
|
|
||||||
* @protected
|
|
||||||
* @returns {ReactElement}
|
|
||||||
*/
|
|
||||||
_createExtraElement() {
|
|
||||||
return (
|
|
||||||
<Fragment>
|
|
||||||
<OverlayContainer />
|
|
||||||
</Fragment>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
_createMainElement: (React$Element<*>, Object) => ?React$Element<*>;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the default URL to be opened when this {@code App} mounts.
|
* Gets the default URL to be opened when this {@code App} mounts.
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
// @flow
|
|
||||||
|
|
||||||
import { AtlasKitThemeProvider } from '@atlaskit/theme';
|
import { AtlasKitThemeProvider } from '@atlaskit/theme';
|
||||||
import React from 'react';
|
import React, { Fragment } from 'react';
|
||||||
|
|
||||||
import GlobalStyles from '../../base/ui/components/GlobalStyles.web';
|
import GlobalStyles from '../../base/ui/components/GlobalStyles.web';
|
||||||
import JitsiThemeProvider from '../../base/ui/components/JitsiThemeProvider.web';
|
import JitsiThemeProvider from '../../base/ui/components/JitsiThemeProvider.web';
|
||||||
import DialogContainer from '../../base/ui/components/web/DialogContainer';
|
import DialogContainer from '../../base/ui/components/web/DialogContainer';
|
||||||
import { ChromeExtensionBanner } from '../../chrome-extension-banner';
|
import { ChromeExtensionBanner } from '../../chrome-extension-banner';
|
||||||
|
import OverlayContainer from '../../overlay/components/web/OverlayContainer';
|
||||||
|
|
||||||
import { AbstractApp } from './AbstractApp';
|
import { AbstractApp } from './AbstractApp';
|
||||||
|
|
||||||
|
@ -14,12 +13,30 @@ import { AbstractApp } from './AbstractApp';
|
||||||
import '../middlewares';
|
import '../middlewares';
|
||||||
import '../reducers';
|
import '../reducers';
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Root app {@code Component} on Web/React.
|
* Root app {@code Component} on Web/React.
|
||||||
*
|
*
|
||||||
* @augments AbstractApp
|
* @augments AbstractApp
|
||||||
*/
|
*/
|
||||||
export class App extends AbstractApp {
|
export class App extends AbstractApp {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an extra {@link ReactElement}s to be added (unconditionally)
|
||||||
|
* alongside the main element.
|
||||||
|
*
|
||||||
|
* @abstract
|
||||||
|
* @protected
|
||||||
|
* @returns {ReactElement}
|
||||||
|
*/
|
||||||
|
_createExtraElement() {
|
||||||
|
return (
|
||||||
|
<Fragment>
|
||||||
|
<OverlayContainer />
|
||||||
|
</Fragment>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Overrides the parent method to inject {@link AtlasKitThemeProvider} as
|
* Overrides the parent method to inject {@link AtlasKitThemeProvider} as
|
||||||
* the top most component.
|
* the top most component.
|
||||||
|
|
|
@ -48,5 +48,6 @@ import '../transcribing/middleware';
|
||||||
import '../video-layout/middleware';
|
import '../video-layout/middleware';
|
||||||
import '../video-quality/middleware';
|
import '../video-quality/middleware';
|
||||||
import '../videosipgw/middleware';
|
import '../videosipgw/middleware';
|
||||||
|
import '../visitors/middleware';
|
||||||
|
|
||||||
import './middleware';
|
import './middleware';
|
||||||
|
|
|
@ -5,7 +5,6 @@ import '../base/media/middleware';
|
||||||
import '../dynamic-branding/middleware';
|
import '../dynamic-branding/middleware';
|
||||||
import '../e2ee/middleware';
|
import '../e2ee/middleware';
|
||||||
import '../external-api/middleware';
|
import '../external-api/middleware';
|
||||||
import '../keyboard-shortcuts/middleware';
|
|
||||||
import '../no-audio-signal/middleware';
|
import '../no-audio-signal/middleware';
|
||||||
import '../notifications/middleware';
|
import '../notifications/middleware';
|
||||||
import '../noise-detection/middleware';
|
import '../noise-detection/middleware';
|
||||||
|
@ -15,12 +14,12 @@ import '../prejoin/middleware';
|
||||||
import '../remote-control/middleware';
|
import '../remote-control/middleware';
|
||||||
import '../screen-share/middleware';
|
import '../screen-share/middleware';
|
||||||
import '../shared-video/middleware';
|
import '../shared-video/middleware';
|
||||||
|
import '../web-hid/middleware';
|
||||||
import '../settings/middleware';
|
import '../settings/middleware';
|
||||||
import '../talk-while-muted/middleware';
|
import '../talk-while-muted/middleware';
|
||||||
import '../toolbox/middleware';
|
import '../toolbox/middleware';
|
||||||
import '../face-landmarks/middleware';
|
import '../face-landmarks/middleware';
|
||||||
import '../gifs/middleware';
|
import '../gifs/middleware';
|
||||||
import '../whiteboard/middleware';
|
import '../whiteboard/middleware';
|
||||||
import '../base/dialog/middleware';
|
|
||||||
|
|
||||||
import './middlewares.any';
|
import './middlewares.any';
|
||||||
|
|
|
@ -56,3 +56,4 @@ import '../transcribing/reducer';
|
||||||
import '../video-layout/reducer';
|
import '../video-layout/reducer';
|
||||||
import '../video-quality/reducer';
|
import '../video-quality/reducer';
|
||||||
import '../videosipgw/reducer';
|
import '../videosipgw/reducer';
|
||||||
|
import '../visitors/reducer';
|
||||||
|
|
|
@ -6,6 +6,7 @@ import '../mobile/call-integration/reducer';
|
||||||
import '../mobile/external-api/reducer';
|
import '../mobile/external-api/reducer';
|
||||||
import '../mobile/full-screen/reducer';
|
import '../mobile/full-screen/reducer';
|
||||||
import '../mobile/watchos/reducer';
|
import '../mobile/watchos/reducer';
|
||||||
|
import '../share-room/reducer';
|
||||||
|
|
||||||
import './reducer.native';
|
import './reducer.native';
|
||||||
|
|
||||||
|
|
|
@ -16,5 +16,6 @@ import '../screenshot-capture/reducer';
|
||||||
import '../talk-while-muted/reducer';
|
import '../talk-while-muted/reducer';
|
||||||
import '../virtual-background/reducer';
|
import '../virtual-background/reducer';
|
||||||
import '../whiteboard/reducer';
|
import '../whiteboard/reducer';
|
||||||
|
import '../web-hid/reducer';
|
||||||
|
|
||||||
import './reducers.any';
|
import './reducers.any';
|
||||||
|
|
|
@ -65,6 +65,7 @@ import { IRecordingState } from '../recording/reducer';
|
||||||
import { IRemoteControlState } from '../remote-control/reducer';
|
import { IRemoteControlState } from '../remote-control/reducer';
|
||||||
import { IScreenShareState } from '../screen-share/reducer';
|
import { IScreenShareState } from '../screen-share/reducer';
|
||||||
import { IScreenshotCaptureState } from '../screenshot-capture/reducer';
|
import { IScreenshotCaptureState } from '../screenshot-capture/reducer';
|
||||||
|
import { IShareRoomState } from '../share-room/reducer';
|
||||||
import { ISharedVideoState } from '../shared-video/reducer';
|
import { ISharedVideoState } from '../shared-video/reducer';
|
||||||
import { ISpeakerStatsState } from '../speaker-stats/reducer';
|
import { ISpeakerStatsState } from '../speaker-stats/reducer';
|
||||||
import { ISubtitlesState } from '../subtitles/reducer';
|
import { ISubtitlesState } from '../subtitles/reducer';
|
||||||
|
@ -75,6 +76,8 @@ import { IVideoLayoutState } from '../video-layout/reducer';
|
||||||
import { IVideoQualityPersistedState, IVideoQualityState } from '../video-quality/reducer';
|
import { IVideoQualityPersistedState, IVideoQualityState } from '../video-quality/reducer';
|
||||||
import { IVideoSipGW } from '../videosipgw/reducer';
|
import { IVideoSipGW } from '../videosipgw/reducer';
|
||||||
import { IVirtualBackground } from '../virtual-background/reducer';
|
import { IVirtualBackground } from '../virtual-background/reducer';
|
||||||
|
import { IVisitorsState } from '../visitors/reducer';
|
||||||
|
import { IWebHid } from '../web-hid/reducer';
|
||||||
import { IWhiteboardState } from '../whiteboard/reducer';
|
import { IWhiteboardState } from '../whiteboard/reducer';
|
||||||
|
|
||||||
export interface IStore {
|
export interface IStore {
|
||||||
|
@ -89,6 +92,7 @@ export interface IReduxState {
|
||||||
'features/background': IBackgroundState;
|
'features/background': IBackgroundState;
|
||||||
'features/base/app': IAppState;
|
'features/base/app': IAppState;
|
||||||
'features/base/audio-only': IAudioOnlyState;
|
'features/base/audio-only': IAudioOnlyState;
|
||||||
|
'features/base/color-scheme': any;
|
||||||
'features/base/conference': IConferenceState;
|
'features/base/conference': IConferenceState;
|
||||||
'features/base/config': IConfigState;
|
'features/base/config': IConfigState;
|
||||||
'features/base/connection': IConnectionState;
|
'features/base/connection': IConnectionState;
|
||||||
|
@ -148,6 +152,7 @@ export interface IReduxState {
|
||||||
'features/screen-share': IScreenShareState;
|
'features/screen-share': IScreenShareState;
|
||||||
'features/screenshot-capture': IScreenshotCaptureState;
|
'features/screenshot-capture': IScreenshotCaptureState;
|
||||||
'features/settings': ISettingsState;
|
'features/settings': ISettingsState;
|
||||||
|
'features/share-room': IShareRoomState;
|
||||||
'features/shared-video': ISharedVideoState;
|
'features/shared-video': ISharedVideoState;
|
||||||
'features/speaker-stats': ISpeakerStatsState;
|
'features/speaker-stats': ISpeakerStatsState;
|
||||||
'features/subtitles': ISubtitlesState;
|
'features/subtitles': ISubtitlesState;
|
||||||
|
@ -160,5 +165,11 @@ export interface IReduxState {
|
||||||
'features/video-quality-persistent-storage': IVideoQualityPersistedState;
|
'features/video-quality-persistent-storage': IVideoQualityPersistedState;
|
||||||
'features/videosipgw': IVideoSipGW;
|
'features/videosipgw': IVideoSipGW;
|
||||||
'features/virtual-background': IVirtualBackground;
|
'features/virtual-background': IVirtualBackground;
|
||||||
|
'features/visitors': IVisitorsState;
|
||||||
|
'features/web-hid': IWebHid;
|
||||||
'features/whiteboard': IWhiteboardState;
|
'features/whiteboard': IWhiteboardState;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface IReloadNowOptions {
|
||||||
|
hidePrejoin?: boolean;
|
||||||
|
}
|
||||||
|
|
|
@ -98,7 +98,7 @@ function _upgradeRoleFinished(
|
||||||
name: authenticationError || connectionError,
|
name: authenticationError || connectionError,
|
||||||
...other
|
...other
|
||||||
};
|
};
|
||||||
progress = authenticationError ? 0.5 : 0;
|
progress = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -207,7 +207,7 @@ class LoginDialog extends Component<IProps, IState> {
|
||||||
let messageKey;
|
let messageKey;
|
||||||
|
|
||||||
if (progress && progress < 1) {
|
if (progress && progress < 1) {
|
||||||
messageKey = t('connection.FETCH_SESSION_ID');
|
messageKey = 'connection.FETCH_SESSION_ID';
|
||||||
} else if (error) {
|
} else if (error) {
|
||||||
const { name } = error;
|
const { name } = error;
|
||||||
|
|
||||||
|
@ -218,14 +218,14 @@ class LoginDialog extends Component<IProps, IState> {
|
||||||
&& credentials.jid === toJid(username, configHosts ?? { authdomain: '',
|
&& credentials.jid === toJid(username, configHosts ?? { authdomain: '',
|
||||||
domain: '' })
|
domain: '' })
|
||||||
&& credentials.password === password) {
|
&& credentials.password === password) {
|
||||||
messageKey = t('dialog.incorrectPassword');
|
messageKey = 'dialog.incorrectPassword';
|
||||||
}
|
}
|
||||||
} else if (name) {
|
} else if (name) {
|
||||||
messageKey = t('dialog.connectErrorWithMsg');
|
messageKey = 'dialog.connectErrorWithMsg';
|
||||||
messageOptions.msg = `${name} ${error.message}`;
|
messageOptions.msg = `${name} ${error.message}`;
|
||||||
}
|
}
|
||||||
} else if (connecting) {
|
} else if (connecting) {
|
||||||
messageKey = t('connection.CONNECTING');
|
messageKey = 'connection.CONNECTING';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (messageKey) {
|
if (messageKey) {
|
||||||
|
@ -253,6 +253,7 @@ class LoginDialog extends Component<IProps, IState> {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Dialog
|
<Dialog
|
||||||
|
disableAutoHideOnSubmit = { true }
|
||||||
disableBackdropClose = { true }
|
disableBackdropClose = { true }
|
||||||
hideCloseButton = { true }
|
hideCloseButton = { true }
|
||||||
ok = {{
|
ok = {{
|
||||||
|
|
|
@ -24,9 +24,8 @@ import {
|
||||||
openWaitForOwnerDialog,
|
openWaitForOwnerDialog,
|
||||||
stopWaitForOwner
|
stopWaitForOwner
|
||||||
} from './actions.web';
|
} from './actions.web';
|
||||||
// eslint-disable-next-line lines-around-comment
|
import LoginDialog from './components/web/LoginDialog';
|
||||||
// @ts-ignore
|
import WaitForOwnerDialog from './components/web/WaitForOwnerDialog';
|
||||||
import { LoginDialog, WaitForOwnerDialog } from './components';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Middleware that captures connection or conference failed errors and controls
|
* Middleware that captures connection or conference failed errors and controls
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
// @flow
|
import { toState } from '../redux/functions';
|
||||||
|
import { StyleType } from '../styles/functions.any';
|
||||||
import { toState } from '../redux';
|
|
||||||
import { StyleType } from '../styles';
|
|
||||||
|
|
||||||
import defaultScheme from './defaultScheme';
|
import defaultScheme from './defaultScheme';
|
||||||
|
|
||||||
|
@ -90,7 +88,7 @@ class ColorSchemeRegistry {
|
||||||
stateful: Object | Function,
|
stateful: Object | Function,
|
||||||
componentName: string,
|
componentName: string,
|
||||||
style: StyleType): StyleType {
|
style: StyleType): StyleType {
|
||||||
let schemedStyle;
|
let schemedStyle: any;
|
||||||
|
|
||||||
if (Array.isArray(style)) {
|
if (Array.isArray(style)) {
|
||||||
// The style is an array of styles, we apply the same transformation
|
// The style is an array of styles, we apply the same transformation
|
||||||
|
@ -116,7 +114,7 @@ class ColorSchemeRegistry {
|
||||||
// The value is another style object, we apply the same
|
// The value is another style object, we apply the same
|
||||||
// transformation recursively.
|
// transformation recursively.
|
||||||
schemedStyle[styleName]
|
schemedStyle[styleName]
|
||||||
= this._applyColorScheme(
|
= this._applyColorScheme( // @ts-ignore
|
||||||
stateful, componentName, styleValue);
|
stateful, componentName, styleValue);
|
||||||
} else if (typeof styleValue === 'function') {
|
} else if (typeof styleValue === 'function') {
|
||||||
// The value is a function, which indicates that it's a
|
// The value is a function, which indicates that it's a
|
||||||
|
@ -149,11 +147,14 @@ class ColorSchemeRegistry {
|
||||||
stateful: Object | Function,
|
stateful: Object | Function,
|
||||||
componentName: string,
|
componentName: string,
|
||||||
colorDefinition: string): string {
|
colorDefinition: string): string {
|
||||||
|
// @ts-ignore
|
||||||
const colorScheme = toState(stateful)['features/base/color-scheme'] || {};
|
const colorScheme = toState(stateful)['features/base/color-scheme'] || {};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...defaultScheme._defaultTheme,
|
...defaultScheme._defaultTheme,
|
||||||
...colorScheme._defaultTheme,
|
...colorScheme._defaultTheme,
|
||||||
|
|
||||||
|
// @ts-ignore
|
||||||
...defaultScheme[componentName],
|
...defaultScheme[componentName],
|
||||||
...colorScheme[componentName]
|
...colorScheme[componentName]
|
||||||
}[colorDefinition];
|
}[colorDefinition];
|
|
@ -1,4 +1,5 @@
|
||||||
import { ColorPalette, getRGBAFormat } from '../styles';
|
import { ColorPalette } from '../styles/components/styles/ColorPalette';
|
||||||
|
import { getRGBAFormat } from '../styles/functions.any';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The default color scheme of the application.
|
* The default color scheme of the application.
|
|
@ -1,5 +1,3 @@
|
||||||
// @flow
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A special function to be used in the {@code createColorSchemedStyle} call,
|
* A special function to be used in the {@code createColorSchemedStyle} call,
|
||||||
* that denotes that the color is a dynamic color.
|
* that denotes that the color is a dynamic color.
|
|
@ -88,7 +88,7 @@ const useStyles = makeStyles()(theme => {
|
||||||
boxShadow: 'inset 0px -1px 0px rgba(255, 255, 255, 0.15)',
|
boxShadow: 'inset 0px -1px 0px rgba(255, 255, 255, 0.15)',
|
||||||
minHeight: '40px',
|
minHeight: '40px',
|
||||||
|
|
||||||
'&:hover': {
|
'&:hover, &:focus-within': {
|
||||||
backgroundColor: theme.palette.ui02,
|
backgroundColor: theme.palette.ui02,
|
||||||
|
|
||||||
'& .indicators': {
|
'& .indicators': {
|
||||||
|
@ -97,6 +97,8 @@ const useStyles = makeStyles()(theme => {
|
||||||
|
|
||||||
'& .actions': {
|
'& .actions': {
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
|
position: 'relative',
|
||||||
|
top: 'auto',
|
||||||
boxShadow: `-15px 0px 10px -5px ${theme.palette.ui02}`,
|
boxShadow: `-15px 0px 10px -5px ${theme.palette.ui02}`,
|
||||||
backgroundColor: theme.palette.ui02
|
backgroundColor: theme.palette.ui02
|
||||||
}
|
}
|
||||||
|
@ -154,7 +156,8 @@ const useStyles = makeStyles()(theme => {
|
||||||
},
|
},
|
||||||
|
|
||||||
actionsContainer: {
|
actionsContainer: {
|
||||||
display: 'none',
|
position: 'absolute',
|
||||||
|
top: '-1000px',
|
||||||
boxShadow: `-15px 0px 10px -5px ${theme.palette.ui02}`,
|
boxShadow: `-15px 0px 10px -5px ${theme.palette.ui02}`,
|
||||||
backgroundColor: theme.palette.ui02
|
backgroundColor: theme.palette.ui02
|
||||||
},
|
},
|
||||||
|
|
|
@ -15,9 +15,11 @@ import {
|
||||||
participantMutedUs,
|
participantMutedUs,
|
||||||
participantPresenceChanged,
|
participantPresenceChanged,
|
||||||
participantRoleChanged,
|
participantRoleChanged,
|
||||||
|
participantSourcesUpdated,
|
||||||
participantUpdated
|
participantUpdated
|
||||||
} from '../participants/actions';
|
} from '../participants/actions';
|
||||||
import { getNormalizedDisplayName } from '../participants/functions';
|
import { getNormalizedDisplayName } from '../participants/functions';
|
||||||
|
import { IJitsiParticipant } from '../participants/types';
|
||||||
import { toState } from '../redux/functions';
|
import { toState } from '../redux/functions';
|
||||||
import {
|
import {
|
||||||
destroyLocalTracks,
|
destroyLocalTracks,
|
||||||
|
@ -128,6 +130,10 @@ function _addConferenceListeners(conference: IJitsiConference, dispatch: IStore[
|
||||||
JitsiConferenceEvents.PARTICIPANT_KICKED,
|
JitsiConferenceEvents.PARTICIPANT_KICKED,
|
||||||
(kicker: any, kicked: any) => dispatch(participantKicked(kicker, kicked)));
|
(kicker: any, kicked: any) => dispatch(participantKicked(kicker, kicked)));
|
||||||
|
|
||||||
|
conference.on(
|
||||||
|
JitsiConferenceEvents.PARTICIPANT_SOURCE_UPDATED,
|
||||||
|
(jitsiParticipant: IJitsiParticipant) => dispatch(participantSourcesUpdated(jitsiParticipant)));
|
||||||
|
|
||||||
conference.on(
|
conference.on(
|
||||||
JitsiConferenceEvents.LOCK_STATE_CHANGED, // @ts-ignore
|
JitsiConferenceEvents.LOCK_STATE_CHANGED, // @ts-ignore
|
||||||
(...args: any[]) => dispatch(lockStateChanged(conference, ...args)));
|
(...args: any[]) => dispatch(lockStateChanged(conference, ...args)));
|
||||||
|
@ -501,7 +507,7 @@ export function conferenceWillLeave(conference: IJitsiConference) {
|
||||||
* from Redux.
|
* from Redux.
|
||||||
* @returns {Function}
|
* @returns {Function}
|
||||||
*/
|
*/
|
||||||
export function createConference(overrideRoom?: string) {
|
export function createConference(overrideRoom?: string | String) {
|
||||||
return (dispatch: IStore['dispatch'], getState: IStore['getState']) => {
|
return (dispatch: IStore['dispatch'], getState: IStore['getState']) => {
|
||||||
const state = getState();
|
const state = getState();
|
||||||
const { connection, locationURL } = state['features/base/connection'];
|
const { connection, locationURL } = state['features/base/connection'];
|
||||||
|
|
|
@ -14,8 +14,11 @@ import {
|
||||||
} from '../participants/actions';
|
} from '../participants/actions';
|
||||||
import { getLocalParticipant } from '../participants/functions';
|
import { getLocalParticipant } from '../participants/functions';
|
||||||
import { toState } from '../redux/functions';
|
import { toState } from '../redux/functions';
|
||||||
import { getJitsiMeetGlobalNS } from '../util/helpers';
|
import {
|
||||||
import { getBackendSafePath, safeDecodeURIComponent } from '../util/uri';
|
appendURLParam,
|
||||||
|
getBackendSafePath,
|
||||||
|
safeDecodeURIComponent
|
||||||
|
} from '../util/uri';
|
||||||
|
|
||||||
import { setObfuscatedRoom } from './actions';
|
import { setObfuscatedRoom } from './actions';
|
||||||
import {
|
import {
|
||||||
|
@ -102,7 +105,8 @@ export function commonUserJoinedHandling(
|
||||||
name: displayName,
|
name: displayName,
|
||||||
presence: user.getStatus(),
|
presence: user.getStatus(),
|
||||||
role: user.getRole(),
|
role: user.getRole(),
|
||||||
isReplacing
|
isReplacing,
|
||||||
|
sources: user.getSources()
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -245,8 +249,6 @@ export function getConferenceOptions(stateful: IStateful) {
|
||||||
delete config.analytics?.googleAnalyticsTrackingId;
|
delete config.analytics?.googleAnalyticsTrackingId;
|
||||||
delete options.callStatsID;
|
delete options.callStatsID;
|
||||||
delete options.callStatsSecret;
|
delete options.callStatsSecret;
|
||||||
} else {
|
|
||||||
options.getWiFiStatsMethod = getWiFiStatsMethod;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return options;
|
return options;
|
||||||
|
@ -279,8 +281,12 @@ export function generateVisitorConfig(stateful: IStateful, params: Array<string>
|
||||||
// This flag disables sending the initial conference request
|
// This flag disables sending the initial conference request
|
||||||
config.disableFocus = true;
|
config.disableFocus = true;
|
||||||
|
|
||||||
config.bosh += `?vnode=${vnode}`;
|
if (config.bosh) {
|
||||||
config.websocket += `?vnode=${vnode}`;
|
config.bosh = appendURLParam(config.bosh, 'vnode', vnode);
|
||||||
|
}
|
||||||
|
if (config.websocket) {
|
||||||
|
config.websocket = appendURLParam(config.websocket, 'vnode', vnode);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -374,21 +380,6 @@ export function getAnalyticsRoomName(state: IReduxState, dispatch: IStore['dispa
|
||||||
return getRoomName(state);
|
return getRoomName(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the result of getWiFiStats from the global NS or does nothing
|
|
||||||
* (returns empty result).
|
|
||||||
* Fixes a concurrency problem where we need to pass a function when creating
|
|
||||||
* a JitsiConference, but that method is added to the context later.
|
|
||||||
*
|
|
||||||
* @returns {Promise}
|
|
||||||
* @private
|
|
||||||
*/
|
|
||||||
function getWiFiStatsMethod() {
|
|
||||||
const gloabalNS = getJitsiMeetGlobalNS();
|
|
||||||
|
|
||||||
return gloabalNS.getWiFiStats ? gloabalNS.getWiFiStats() : Promise.resolve('{}');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle an error thrown by the backend (i.e. {@code lib-jitsi-meet}) while
|
* Handle an error thrown by the backend (i.e. {@code lib-jitsi-meet}) while
|
||||||
* manipulating a conference participant (e.g. Pin or select participant).
|
* manipulating a conference participant (e.g. Pin or select participant).
|
||||||
|
|
|
@ -85,6 +85,7 @@ export interface IJitsiConference {
|
||||||
sendFaceLandmarks: (faceLandmarks: FaceLandmarks) => void;
|
sendFaceLandmarks: (faceLandmarks: FaceLandmarks) => void;
|
||||||
sendFeedback: Function;
|
sendFeedback: Function;
|
||||||
sendLobbyMessage: Function;
|
sendLobbyMessage: Function;
|
||||||
|
sendMessage: Function;
|
||||||
sessionId: string;
|
sessionId: string;
|
||||||
setDesktopSharingFrameRate: Function;
|
setDesktopSharingFrameRate: Function;
|
||||||
setDisplayName: Function;
|
setDisplayName: Function;
|
||||||
|
|
|
@ -98,7 +98,7 @@ export function overwriteConfig(config: Object) {
|
||||||
* base/config.
|
* base/config.
|
||||||
* @returns {Function}
|
* @returns {Function}
|
||||||
*/
|
*/
|
||||||
export function setConfig(config: Object = {}) {
|
export function setConfig(config: IConfig = {}) {
|
||||||
return (dispatch: IStore['dispatch'], getState: IStore['getState']) => {
|
return (dispatch: IStore['dispatch'], getState: IStore['getState']) => {
|
||||||
const { locationURL } = getState()['features/base/connection'];
|
const { locationURL } = getState()['features/base/connection'];
|
||||||
|
|
||||||
|
@ -119,6 +119,26 @@ export function setConfig(config: Object = {}) {
|
||||||
window.interfaceConfig,
|
window.interfaceConfig,
|
||||||
locationURL);
|
locationURL);
|
||||||
|
|
||||||
|
let { bosh } = config;
|
||||||
|
|
||||||
|
if (bosh) {
|
||||||
|
// Normalize the BOSH URL.
|
||||||
|
if (bosh.startsWith('//')) {
|
||||||
|
// By default our config.js doesn't include the protocol.
|
||||||
|
bosh = `${locationURL?.protocol}${bosh}`;
|
||||||
|
} else if (bosh.startsWith('/')) {
|
||||||
|
// Handle relative URLs, which won't work on mobile.
|
||||||
|
const {
|
||||||
|
protocol,
|
||||||
|
host,
|
||||||
|
contextRoot
|
||||||
|
} = parseURIString(locationURL?.href);
|
||||||
|
|
||||||
|
bosh = `${protocol}//${host}${contextRoot || '/'}${bosh.substr(1)}`;
|
||||||
|
}
|
||||||
|
config.bosh = bosh;
|
||||||
|
}
|
||||||
|
|
||||||
dispatch({
|
dispatch({
|
||||||
type: SET_CONFIG,
|
type: SET_CONFIG,
|
||||||
config
|
config
|
||||||
|
|
|
@ -115,7 +115,6 @@ export interface IDeeplinkingConfig {
|
||||||
disabled: boolean;
|
disabled: boolean;
|
||||||
hideLogo: boolean;
|
hideLogo: boolean;
|
||||||
ios?: IDeeplinkingMobileConfig;
|
ios?: IDeeplinkingMobileConfig;
|
||||||
showImage: boolean;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IConfig {
|
export interface IConfig {
|
||||||
|
@ -189,6 +188,7 @@ export interface IConfig {
|
||||||
alwaysVisible?: Array<string>;
|
alwaysVisible?: Array<string>;
|
||||||
autoHide?: Array<string>;
|
autoHide?: Array<string>;
|
||||||
};
|
};
|
||||||
|
conferenceRequestUrl?: string;
|
||||||
connectionIndicators?: {
|
connectionIndicators?: {
|
||||||
autoHide?: boolean;
|
autoHide?: boolean;
|
||||||
autoHideTimeout?: number;
|
autoHideTimeout?: number;
|
||||||
|
@ -206,6 +206,8 @@ export interface IConfig {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
corsAvatarURLs?: Array<string>;
|
corsAvatarURLs?: Array<string>;
|
||||||
|
customParticipantMenuButtons?: Array<{ icon: string; id: string; text: string; }>;
|
||||||
|
customToolbarButtons?: Array<{ icon: string; id: string; text: string; }>;
|
||||||
deeplinking?: IDeeplinkingConfig;
|
deeplinking?: IDeeplinkingConfig;
|
||||||
defaultLanguage?: string;
|
defaultLanguage?: string;
|
||||||
defaultLocalDisplayName?: string;
|
defaultLocalDisplayName?: string;
|
||||||
|
@ -336,12 +338,14 @@ export interface IConfig {
|
||||||
};
|
};
|
||||||
firefox_fake_device?: string;
|
firefox_fake_device?: string;
|
||||||
flags?: {
|
flags?: {
|
||||||
|
ssrcRewritingEnabled: boolean;
|
||||||
};
|
};
|
||||||
focusUserJid?: string;
|
focusUserJid?: string;
|
||||||
gatherStats?: boolean;
|
gatherStats?: boolean;
|
||||||
giphy?: {
|
giphy?: {
|
||||||
displayMode?: 'all' | 'tile' | 'chat';
|
displayMode?: 'all' | 'tile' | 'chat';
|
||||||
enabled?: boolean;
|
enabled?: boolean;
|
||||||
|
proxyUrl?: string;
|
||||||
rating?: 'g' | 'pg' | 'pg-13' | 'r';
|
rating?: 'g' | 'pg' | 'pg-13' | 'r';
|
||||||
sdkKey?: string;
|
sdkKey?: string;
|
||||||
tileTime?: number;
|
tileTime?: number;
|
||||||
|
@ -384,6 +388,11 @@ export interface IConfig {
|
||||||
lastNLimits?: {
|
lastNLimits?: {
|
||||||
[key: number]: number;
|
[key: number]: number;
|
||||||
};
|
};
|
||||||
|
legalUrls?: {
|
||||||
|
helpCentre: string;
|
||||||
|
privacy: string;
|
||||||
|
terms: string;
|
||||||
|
};
|
||||||
liveStreaming?: {
|
liveStreaming?: {
|
||||||
dataPrivacyLink?: string;
|
dataPrivacyLink?: string;
|
||||||
enabled?: boolean;
|
enabled?: boolean;
|
||||||
|
@ -392,6 +401,10 @@ export interface IConfig {
|
||||||
validatorRegExpString?: string;
|
validatorRegExpString?: string;
|
||||||
};
|
};
|
||||||
liveStreamingEnabled?: boolean;
|
liveStreamingEnabled?: boolean;
|
||||||
|
lobby?: {
|
||||||
|
autoKnock?: boolean;
|
||||||
|
enableChat?: boolean;
|
||||||
|
};
|
||||||
localRecording?: {
|
localRecording?: {
|
||||||
disable?: boolean;
|
disable?: boolean;
|
||||||
disableSelfRecording?: boolean;
|
disableSelfRecording?: boolean;
|
||||||
|
@ -462,6 +475,10 @@ export interface IConfig {
|
||||||
enabled?: boolean;
|
enabled?: boolean;
|
||||||
mode?: 'always' | 'recording';
|
mode?: 'always' | 'recording';
|
||||||
};
|
};
|
||||||
|
securityUi?: {
|
||||||
|
disableLobbyPassword?: boolean;
|
||||||
|
hideLobbyButton?: boolean;
|
||||||
|
};
|
||||||
serviceUrl?: string;
|
serviceUrl?: string;
|
||||||
sipInviteUrl?: string;
|
sipInviteUrl?: string;
|
||||||
speakerStats?: {
|
speakerStats?: {
|
||||||
|
@ -511,7 +528,6 @@ export interface IConfig {
|
||||||
useAppLanguage?: boolean;
|
useAppLanguage?: boolean;
|
||||||
};
|
};
|
||||||
useHostPageLocalStorage?: boolean;
|
useHostPageLocalStorage?: boolean;
|
||||||
useNewBandwidthAllocationStrategy?: boolean;
|
|
||||||
useTurnUdp?: boolean;
|
useTurnUdp?: boolean;
|
||||||
videoQuality?: {
|
videoQuality?: {
|
||||||
disabledCodec?: string;
|
disabledCodec?: string;
|
||||||
|
|
|
@ -82,7 +82,6 @@ export default [
|
||||||
'debug',
|
'debug',
|
||||||
'debugAudioLevels',
|
'debugAudioLevels',
|
||||||
'deeplinking.disabled',
|
'deeplinking.disabled',
|
||||||
'deeplinking.showImage',
|
|
||||||
'defaultLocalDisplayName',
|
'defaultLocalDisplayName',
|
||||||
'defaultRemoteDisplayName',
|
'defaultRemoteDisplayName',
|
||||||
'deploymentUrls',
|
'deploymentUrls',
|
||||||
|
@ -186,6 +185,7 @@ export default [
|
||||||
'inviteAppName',
|
'inviteAppName',
|
||||||
'liveStreaming',
|
'liveStreaming',
|
||||||
'liveStreamingEnabled',
|
'liveStreamingEnabled',
|
||||||
|
'lobby',
|
||||||
'localRecording',
|
'localRecording',
|
||||||
'localSubject',
|
'localSubject',
|
||||||
'logging',
|
'logging',
|
||||||
|
@ -210,6 +210,7 @@ export default [
|
||||||
'resolution',
|
'resolution',
|
||||||
'salesforceUrl',
|
'salesforceUrl',
|
||||||
'screenshotCapture',
|
'screenshotCapture',
|
||||||
|
'securityUi',
|
||||||
'speakerStats',
|
'speakerStats',
|
||||||
'startAudioMuted',
|
'startAudioMuted',
|
||||||
'startAudioOnly',
|
'startAudioOnly',
|
||||||
|
|
|
@ -60,3 +60,33 @@ export const PREMEETING_BUTTONS = [ 'microphone', 'camera', 'select-background',
|
||||||
* The toolbar buttons to show on 3rdParty prejoin screen.
|
* The toolbar buttons to show on 3rdParty prejoin screen.
|
||||||
*/
|
*/
|
||||||
export const THIRD_PARTY_PREJOIN_BUTTONS = [ 'microphone', 'camera', 'select-background' ];
|
export const THIRD_PARTY_PREJOIN_BUTTONS = [ 'microphone', 'camera', 'select-background' ];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The toolbar buttons to show when in visitors mode.
|
||||||
|
*/
|
||||||
|
export const VISITORS_MODE_BUTTONS = [ 'hangup', 'tileview' ];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The set of feature flags.
|
||||||
|
*
|
||||||
|
* @enum {string}
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const FEATURE_FLAGS = {
|
||||||
|
SSRC_REWRITING: 'ssrcRewritingEnabled'
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The URL at which the terms (of service/use) are available to the user.
|
||||||
|
*/
|
||||||
|
export const DEFAULT_TERMS_URL = 'https://jitsi.org/meet/terms';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The URL at which the privacy policy is available to the user.
|
||||||
|
*/
|
||||||
|
export const DEFAULT_PRIVACY_URL = 'https://jitsi.org/meet/privacy';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The URL at which the help centre is available to the user.
|
||||||
|
*/
|
||||||
|
export const DEFAULT_HELP_CENTRE_URL = 'https://web-cdn.jitsi.net/faq/meet-faq.html';
|
||||||
|
|
|
@ -11,7 +11,13 @@ import { parseURLParams } from '../util/parseURLParams';
|
||||||
|
|
||||||
import { IConfig } from './configType';
|
import { IConfig } from './configType';
|
||||||
import CONFIG_WHITELIST from './configWhitelist';
|
import CONFIG_WHITELIST from './configWhitelist';
|
||||||
import { _CONFIG_STORE_PREFIX } from './constants';
|
import {
|
||||||
|
DEFAULT_HELP_CENTRE_URL,
|
||||||
|
DEFAULT_PRIVACY_URL,
|
||||||
|
DEFAULT_TERMS_URL,
|
||||||
|
FEATURE_FLAGS,
|
||||||
|
_CONFIG_STORE_PREFIX
|
||||||
|
} from './constants';
|
||||||
import INTERFACE_CONFIG_WHITELIST from './interfaceConfigWhitelist';
|
import INTERFACE_CONFIG_WHITELIST from './interfaceConfigWhitelist';
|
||||||
import logger from './logger';
|
import logger from './logger';
|
||||||
|
|
||||||
|
@ -63,6 +69,16 @@ export function getMultipleVideoSendingSupportFeatureFlag(state: IReduxState) {
|
||||||
return isUnifiedPlanEnabled(state);
|
return isUnifiedPlanEnabled(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Selector used to get the SSRC-rewriting feature flag.
|
||||||
|
*
|
||||||
|
* @param {Object} state - The global state.
|
||||||
|
* @returns {boolean}
|
||||||
|
*/
|
||||||
|
export function getSsrcRewritingFeatureFlag(state: IReduxState) {
|
||||||
|
return getFeatureFlag(state, FEATURE_FLAGS.SSRC_REWRITING);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Selector used to get a feature flag.
|
* Selector used to get a feature flag.
|
||||||
*
|
*
|
||||||
|
@ -306,3 +322,34 @@ export function getDialOutStatusUrl(state: IReduxState) {
|
||||||
export function getDialOutUrl(state: IReduxState) {
|
export function getDialOutUrl(state: IReduxState) {
|
||||||
return state['features/base/config'].guestDialOutUrl;
|
return state['features/base/config'].guestDialOutUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Selector to return the security UI config.
|
||||||
|
*
|
||||||
|
* @param {IReduxState} state - State object.
|
||||||
|
* @returns {Object}
|
||||||
|
*/
|
||||||
|
export function getSecurityUiConfig(state: IReduxState) {
|
||||||
|
return state['features/base/config']?.securityUi || {};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the terms, privacy and help centre URL's.
|
||||||
|
*
|
||||||
|
* @param {IReduxState} state - The state of the application.
|
||||||
|
* @returns {{
|
||||||
|
* privacy: string,
|
||||||
|
* helpCentre: string,
|
||||||
|
* terms: string
|
||||||
|
* }}
|
||||||
|
*/
|
||||||
|
export function getLegalUrls(state: IReduxState) {
|
||||||
|
const helpCentreURL = state['features/base/config']?.helpCentreURL;
|
||||||
|
const configLegalUrls = state['features/base/config']?.legalUrls;
|
||||||
|
|
||||||
|
return {
|
||||||
|
privacy: configLegalUrls?.privacy || DEFAULT_PRIVACY_URL,
|
||||||
|
helpCentre: helpCentreURL || configLegalUrls?.helpCentre || DEFAULT_HELP_CENTRE_URL,
|
||||||
|
terms: configLegalUrls?.terms || DEFAULT_TERMS_URL
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
@ -32,9 +32,16 @@ export function getReplaceParticipant(state: IReduxState): string | undefined {
|
||||||
* @returns {Array<string>} - The list of enabled toolbar buttons.
|
* @returns {Array<string>} - The list of enabled toolbar buttons.
|
||||||
*/
|
*/
|
||||||
export function getToolbarButtons(state: IReduxState): Array<string> {
|
export function getToolbarButtons(state: IReduxState): Array<string> {
|
||||||
const { toolbarButtons } = state['features/base/config'];
|
const { toolbarButtons, customToolbarButtons } = state['features/base/config'];
|
||||||
|
const customButtons = customToolbarButtons?.map(({ id }) => id);
|
||||||
|
|
||||||
return Array.isArray(toolbarButtons) ? toolbarButtons : TOOLBAR_BUTTONS;
|
const buttons = Array.isArray(toolbarButtons) ? toolbarButtons : TOOLBAR_BUTTONS;
|
||||||
|
|
||||||
|
if (customButtons) {
|
||||||
|
buttons.push(...customButtons);
|
||||||
|
}
|
||||||
|
|
||||||
|
return buttons;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -101,3 +108,30 @@ export function _setDeeplinkingDefaults(deeplinking: IDeeplinkingConfig) {
|
||||||
android.dynamicLink.isi = android.dynamicLink.isi || '1165103905';
|
android.dynamicLink.isi = android.dynamicLink.isi || '1165103905';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the list of buttons that have that notify the api when clicked.
|
||||||
|
*
|
||||||
|
* @param {Object} state - The redux state.
|
||||||
|
* @returns {Array} - The list of buttons.
|
||||||
|
*/
|
||||||
|
export function getButtonsWithNotifyClick(state: IReduxState): Array<{ key: string; preventExecution: boolean; }> {
|
||||||
|
const { buttonsWithNotifyClick, customToolbarButtons } = state['features/base/config'];
|
||||||
|
const customButtons = customToolbarButtons?.map(({ id }) => {
|
||||||
|
return {
|
||||||
|
key: id,
|
||||||
|
preventExecution: false
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
const buttons = Array.isArray(buttonsWithNotifyClick)
|
||||||
|
? buttonsWithNotifyClick as Array<{ key: string; preventExecution: boolean; }>
|
||||||
|
: [];
|
||||||
|
|
||||||
|
if (customButtons) {
|
||||||
|
buttons.push(...customButtons);
|
||||||
|
}
|
||||||
|
|
||||||
|
return buttons;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,6 @@ export default [
|
||||||
'SETTINGS_SECTIONS',
|
'SETTINGS_SECTIONS',
|
||||||
'SHARING_FEATURES',
|
'SHARING_FEATURES',
|
||||||
'SHOW_CHROME_EXTENSION_BANNER',
|
'SHOW_CHROME_EXTENSION_BANNER',
|
||||||
'SHOW_DEEP_LINKING_IMAGE',
|
|
||||||
'SHOW_POWERED_BY',
|
'SHOW_POWERED_BY',
|
||||||
'SUPPORT_URL',
|
'SUPPORT_URL',
|
||||||
'TILE_VIEW_MAX_COLUMNS',
|
'TILE_VIEW_MAX_COLUMNS',
|
||||||
|
|
|
@ -52,9 +52,7 @@ function _setConfig({ dispatch, getState }: IStore, next: Function, action: AnyA
|
||||||
const settings = state['features/base/settings'];
|
const settings = state['features/base/settings'];
|
||||||
const config: IConfig = {};
|
const config: IConfig = {};
|
||||||
|
|
||||||
// FIXME: P2P is currently temporality disabled on mobile.
|
if (typeof settings.disableP2P !== 'undefined') {
|
||||||
// eslint-disable-next-line no-constant-condition
|
|
||||||
if (false && typeof settings.disableP2P !== 'undefined') {
|
|
||||||
config.p2p = { enabled: !settings.disableP2P };
|
config.p2p = { enabled: !settings.disableP2P };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,10 +57,8 @@ const INITIAL_RN_STATE: IConfig = {
|
||||||
// than requiring this override here...
|
// than requiring this override here...
|
||||||
|
|
||||||
p2p: {
|
p2p: {
|
||||||
// Temporarily disable P2P on mobile while we sort out some (codec?) issues.
|
|
||||||
enabled: false,
|
|
||||||
disabledCodec: 'vp9',
|
disabledCodec: 'vp9',
|
||||||
preferredCodec: 'h264'
|
preferredCodec: 'vp8'
|
||||||
},
|
},
|
||||||
|
|
||||||
videoQuality: {
|
videoQuality: {
|
||||||
|
@ -298,14 +296,18 @@ function _translateInterfaceConfig(oldValue: IConfig) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if we have `deeplinking` defined, ignore deprecated values. Otherwise, compose the config.
|
// if we have `deeplinking` defined, ignore deprecated values, except `disableDeepLinking`.
|
||||||
if (!oldValue.deeplinking) {
|
// Otherwise, compose the config.
|
||||||
|
if (oldValue.deeplinking && newValue.deeplinking) { // make TS happy
|
||||||
|
newValue.deeplinking.disabled = oldValue.deeplinking.hasOwnProperty('disabled')
|
||||||
|
? oldValue.deeplinking.disabled
|
||||||
|
: Boolean(oldValue.disableDeepLinking);
|
||||||
|
} else {
|
||||||
const disabled = Boolean(oldValue.disableDeepLinking);
|
const disabled = Boolean(oldValue.disableDeepLinking);
|
||||||
const deeplinking: IDeeplinkingConfig = {
|
const deeplinking: IDeeplinkingConfig = {
|
||||||
desktop: {} as IDeeplinkingPlatformConfig,
|
desktop: {} as IDeeplinkingPlatformConfig,
|
||||||
hideLogo: false,
|
hideLogo: false,
|
||||||
disabled,
|
disabled,
|
||||||
showImage: false,
|
|
||||||
android: {} as IDeeplinkingMobileConfig,
|
android: {} as IDeeplinkingMobileConfig,
|
||||||
ios: {} as IDeeplinkingMobileConfig
|
ios: {} as IDeeplinkingMobileConfig
|
||||||
};
|
};
|
||||||
|
@ -325,7 +327,6 @@ function _translateInterfaceConfig(oldValue: IConfig) {
|
||||||
}
|
}
|
||||||
|
|
||||||
deeplinking.hideLogo = Boolean(interfaceConfig.HIDE_DEEP_LINKING_LOGO);
|
deeplinking.hideLogo = Boolean(interfaceConfig.HIDE_DEEP_LINKING_LOGO);
|
||||||
deeplinking.showImage = interfaceConfig.SHOW_DEEP_LINKING_IMAGE;
|
|
||||||
deeplinking.android = {
|
deeplinking.android = {
|
||||||
appName: interfaceConfig.NATIVE_APP_NAME,
|
appName: interfaceConfig.NATIVE_APP_NAME,
|
||||||
appScheme: interfaceConfig.APP_SCHEME,
|
appScheme: interfaceConfig.APP_SCHEME,
|
||||||
|
@ -532,6 +533,30 @@ function _translateLegacyConfig(oldValue: IConfig) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (oldValue.autoKnockLobby !== undefined
|
||||||
|
&& newValue.lobby?.autoKnock === undefined) {
|
||||||
|
newValue.lobby = {
|
||||||
|
...newValue.lobby || {},
|
||||||
|
autoKnock: oldValue.autoKnockLobby
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (oldValue.enableLobbyChat !== undefined
|
||||||
|
&& newValue.lobby?.enableChat === undefined) {
|
||||||
|
newValue.lobby = {
|
||||||
|
...newValue.lobby || {},
|
||||||
|
enableChat: oldValue.enableLobbyChat
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (oldValue.hideLobbyButton !== undefined
|
||||||
|
&& newValue.securityUi?.hideLobbyButton === undefined) {
|
||||||
|
newValue.securityUi = {
|
||||||
|
...newValue.securityUi || {},
|
||||||
|
hideLobbyButton: oldValue.hideLobbyButton
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
_setDeeplinkingDefaults(newValue.deeplinking as IDeeplinkingConfig);
|
_setDeeplinkingDefaults(newValue.deeplinking as IDeeplinkingConfig);
|
||||||
|
|
||||||
return newValue;
|
return newValue;
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue