mirror of
https://gitcode.com/GitHub_Trending/ji/jitsi-meet.git
synced 2026-01-04 22:02:28 +00:00
Compare commits
265 Commits
enable-deb
...
5411
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7c86ece9fa | ||
|
|
8aa475d159 | ||
|
|
0c187f180f | ||
|
|
c6d3667211 | ||
|
|
eba58ad56b | ||
|
|
3aec980378 | ||
|
|
31ce7e010d | ||
|
|
acfc9c6683 | ||
|
|
576fd0d343 | ||
|
|
1beed8c490 | ||
|
|
33503122c4 | ||
|
|
4369579d2b | ||
|
|
51626506ff | ||
|
|
eb494f6b8c | ||
|
|
6124e72f21 | ||
|
|
6a223763a3 | ||
|
|
432c4ada70 | ||
|
|
31a7fbfa82 | ||
|
|
9e5a9599ca | ||
|
|
2a725d2165 | ||
|
|
0214138863 | ||
|
|
fc6c389902 | ||
|
|
12139655c6 | ||
|
|
dd184763ff | ||
|
|
cfde918a30 | ||
|
|
d66f23ca4a | ||
|
|
28904e18f8 | ||
|
|
4bfbc72613 | ||
|
|
b1ecd03924 | ||
|
|
7546db53e4 | ||
|
|
7b0dccdad1 | ||
|
|
7936117fcb | ||
|
|
ace53c880b | ||
|
|
e3ac52908a | ||
|
|
989303f5d2 | ||
|
|
6b8db2ad9e | ||
|
|
b42ebf6901 | ||
|
|
e38a9c3525 | ||
|
|
700e809439 | ||
|
|
a91b2c91dd | ||
|
|
344e9c8a03 | ||
|
|
ba6247daaf | ||
|
|
f9cc813e91 | ||
|
|
57083c174f | ||
|
|
823cab3851 | ||
|
|
c3348bf38e | ||
|
|
0d42f14dfc | ||
|
|
cd4c940107 | ||
|
|
e9f3625ffa | ||
|
|
2f8cfb3ae2 | ||
|
|
d36bd06b7b | ||
|
|
35e363577c | ||
|
|
68de35357e | ||
|
|
554e2eeb11 | ||
|
|
19e7f07b32 | ||
|
|
b1ebe340cf | ||
|
|
a6359e5d4c | ||
|
|
4473ce8fb6 | ||
|
|
41c38427c1 | ||
|
|
92f1985219 | ||
|
|
99e56e229d | ||
|
|
c3dae1f6e9 | ||
|
|
703e43ecd7 | ||
|
|
0bf52b613b | ||
|
|
584ec7c82e | ||
|
|
5f5cac0e01 | ||
|
|
0a9b9bb41d | ||
|
|
5ad98d193a | ||
|
|
4cd5be9d8b | ||
|
|
5514be630d | ||
|
|
6a6146727f | ||
|
|
52e9e90b3a | ||
|
|
7ff3b669ee | ||
|
|
e791c4f70c | ||
|
|
fc75fd9644 | ||
|
|
62e5d6c139 | ||
|
|
06d8956bdb | ||
|
|
adbb5f8ead | ||
|
|
32ed2bccec | ||
|
|
58d98ad7d3 | ||
|
|
e278703c58 | ||
|
|
042a2cb447 | ||
|
|
a8f281a43e | ||
|
|
663752be2c | ||
|
|
380ef3da0b | ||
|
|
07da5940a5 | ||
|
|
ab366b9d94 | ||
|
|
bba1917820 | ||
|
|
0833f8c867 | ||
|
|
3bf9c41f08 | ||
|
|
0b54e005d7 | ||
|
|
b92c1f52d5 | ||
|
|
8eaf99586e | ||
|
|
c7ad5b5b26 | ||
|
|
61c3613de0 | ||
|
|
b801e0115d | ||
|
|
1add438a1f | ||
|
|
aadbe59d00 | ||
|
|
350f0fbb27 | ||
|
|
1db52354fb | ||
|
|
6711801c3b | ||
|
|
e2443f8d01 | ||
|
|
11a86a9383 | ||
|
|
40a485ec6c | ||
|
|
535bd81d61 | ||
|
|
1dc8bfa631 | ||
|
|
f2e2d52cfd | ||
|
|
0db2dd0546 | ||
|
|
6673d12cec | ||
|
|
5e152b4a42 | ||
|
|
db473dfef5 | ||
|
|
0bad0d9ecf | ||
|
|
f1bf8e5f9a | ||
|
|
131d2476ae | ||
|
|
34c55b4eb2 | ||
|
|
d83d822818 | ||
|
|
5857620d81 | ||
|
|
b7cb0a44f2 | ||
|
|
3bf1a1774f | ||
|
|
d21eb59f24 | ||
|
|
9a16733950 | ||
|
|
d96246dea8 | ||
|
|
a5fc75ed35 | ||
|
|
07d023968a | ||
|
|
d95d52843f | ||
|
|
49be96799a | ||
|
|
2008c90359 | ||
|
|
0f01772625 | ||
|
|
f5dee99131 | ||
|
|
909c397664 | ||
|
|
f51e65d129 | ||
|
|
56c0edc896 | ||
|
|
add8265ab9 | ||
|
|
527b96fe00 | ||
|
|
452b1b7e2e | ||
|
|
a0c3a00e59 | ||
|
|
00b5ce71e0 | ||
|
|
9a8b67a0a4 | ||
|
|
c730676ce6 | ||
|
|
76a53b039f | ||
|
|
5713b381c4 | ||
|
|
1e83bdef6c | ||
|
|
531ec79e13 | ||
|
|
772e7b0121 | ||
|
|
5bd329acb9 | ||
|
|
dfd53f4041 | ||
|
|
221cf67d0a | ||
|
|
20a1833c6c | ||
|
|
36f604aab8 | ||
|
|
8db6e783f1 | ||
|
|
7b4a426ad2 | ||
|
|
a687907105 | ||
|
|
5dc03f56f6 | ||
|
|
83a1ee1182 | ||
|
|
0a6872733e | ||
|
|
5249998ec5 | ||
|
|
18e2232e9e | ||
|
|
5c299bcd46 | ||
|
|
b9866e3464 | ||
|
|
e5041202dc | ||
|
|
bec9920c79 | ||
|
|
5367d43c26 | ||
|
|
aa06e89807 | ||
|
|
74026e743c | ||
|
|
eb4fff773b | ||
|
|
5d402b2039 | ||
|
|
a2bac9c3ac | ||
|
|
aff976d53d | ||
|
|
c2ffcdc67e | ||
|
|
bb670fd90d | ||
|
|
b31ed40309 | ||
|
|
7dd43d93b6 | ||
|
|
37acce3764 | ||
|
|
4716bdd380 | ||
|
|
7c93a130ca | ||
|
|
3c18117101 | ||
|
|
9013b01df6 | ||
|
|
7827c3d1ad | ||
|
|
751d9a9b8e | ||
|
|
bafe6fa895 | ||
|
|
1edf8ab9f0 | ||
|
|
c03fb61c5f | ||
|
|
7d6365c5e0 | ||
|
|
eb4aefbca1 | ||
|
|
6c40329f6a | ||
|
|
b14e571d5c | ||
|
|
70b369a1af | ||
|
|
cf6d6f8a12 | ||
|
|
b15f1d190d | ||
|
|
e67db2381e | ||
|
|
11382cfda6 | ||
|
|
248865ad3f | ||
|
|
7966c8f88f | ||
|
|
6537447d7c | ||
|
|
a892d5fed1 | ||
|
|
4acafebe5f | ||
|
|
88a11b9f3e | ||
|
|
bcc326c150 | ||
|
|
e348270099 | ||
|
|
fc59cdbdbe | ||
|
|
59ef5c4789 | ||
|
|
b6b943e7de | ||
|
|
48efa4ac61 | ||
|
|
2f1105e6d2 | ||
|
|
9d5024cc5d | ||
|
|
8b23265a50 | ||
|
|
5bc424459f | ||
|
|
605ce9db62 | ||
|
|
e2f760c7f1 | ||
|
|
e63b3016c9 | ||
|
|
4d07d4ae76 | ||
|
|
2616e126fb | ||
|
|
38f9c97f40 | ||
|
|
c7a91e1974 | ||
|
|
fe41eef398 | ||
|
|
08177af182 | ||
|
|
229520f74f | ||
|
|
0d9af05a4b | ||
|
|
1ad9046a38 | ||
|
|
49a73ac446 | ||
|
|
8e4a22bdbf | ||
|
|
ddbf334930 | ||
|
|
cd5f2b483f | ||
|
|
cf34b0a783 | ||
|
|
10cc3b2b31 | ||
|
|
27e4e862fd | ||
|
|
4b3d92dcbd | ||
|
|
5c1e2b4bd2 | ||
|
|
a4d516ca86 | ||
|
|
d41c597446 | ||
|
|
4788720edd | ||
|
|
40099e97ec | ||
|
|
a7a44902ec | ||
|
|
7af23f35ba | ||
|
|
cf49af1a9f | ||
|
|
186125607f | ||
|
|
508decc3f3 | ||
|
|
6d3a4b920b | ||
|
|
595df524b0 | ||
|
|
9914a5d14a | ||
|
|
fbf9d489f0 | ||
|
|
8106fb06e4 | ||
|
|
036ef0f387 | ||
|
|
307699a34c | ||
|
|
c23375793e | ||
|
|
4dc642fb4d | ||
|
|
d47e67c28c | ||
|
|
db0b861353 | ||
|
|
e40d4a48b8 | ||
|
|
8c82c0f56e | ||
|
|
c123ff9e15 | ||
|
|
ae33755913 | ||
|
|
bcc870daa7 | ||
|
|
a6a95ad13b | ||
|
|
195508ea60 | ||
|
|
5ce4b82c2c | ||
|
|
ab1c016108 | ||
|
|
29dd0cf726 | ||
|
|
1e0c25d816 | ||
|
|
dfd28c501b | ||
|
|
ed98eca326 | ||
|
|
c5c4449fbc | ||
|
|
e45cab9a80 | ||
|
|
6f44368647 | ||
|
|
a31a10ba38 |
2
Makefile
2
Makefile
@@ -3,7 +3,7 @@ CLEANCSS = ./node_modules/.bin/cleancss
|
||||
DEPLOY_DIR = libs
|
||||
LIBJITSIMEET_DIR = node_modules/lib-jitsi-meet/
|
||||
LIBFLAC_DIR = node_modules/libflacjs/dist/min/
|
||||
OLM_DIR = node_modules/olm
|
||||
OLM_DIR = node_modules/@matrix-org/olm
|
||||
RNNOISE_WASM_DIR = node_modules/rnnoise-wasm/dist/
|
||||
TFLITE_WASM = react/features/stream-effects/virtual-background/vendor/tflite
|
||||
MEET_MODELS_DIR = react/features/stream-effects/virtual-background/vendor/models/
|
||||
|
||||
118
README.md
118
README.md
@@ -1,82 +1,88 @@
|
||||
# Jitsi Meet - Secure, Simple and Scalable Video Conferences
|
||||
# <p align="center">Jitsi Meet</p>
|
||||
|
||||
Jitsi Meet is an open-source (Apache) WebRTC JavaScript application that uses [Jitsi Videobridge](https://jitsi.org/videobridge) to provide high quality, [secure](https://jitsi.org/security) and scalable video conferences. Jitsi Meet in action can be seen at [here at the session #482 of the VoIP Users Conference](http://youtu.be/7vFUVClsNh0).
|
||||
Jitsi Meet is a set of Open Source projects which empower users to use and deploy
|
||||
video conferencing platforms with state-of-the-art video quality and features.
|
||||
|
||||
The Jitsi Meet client runs in your browser, without installing anything on your computer. You can try it out at https://meet.jit.si.
|
||||
<hr />
|
||||
|
||||
Jitsi Meet allows for very efficient collaboration. Users can stream their desktop or only some windows. It also supports shared document editing with Etherpad.
|
||||
<p align="center">
|
||||
<img src="https://raw.githubusercontent.com/jitsi/jitsi-meet/master/readme-img1.png" width="900" />
|
||||
</p>
|
||||
|
||||
**NOTE:** If you are looking for Jitsi as a Service (JaaS) please start [here](https://jaas.8x8.vc).
|
||||
<hr />
|
||||
|
||||
## Installation
|
||||
Amongst others here are the main features Jitsi Meet offers:
|
||||
|
||||
On the client side, no installation is necessary. You just point your browser to the URL of your deployment. This section is about installing a Jitsi Meet suite on your server and hosting your own conferencing service.
|
||||
* Support for all current browsers
|
||||
* Mobile applications
|
||||
* Web and native SDKs for integration
|
||||
* HD audio and video
|
||||
* Content sharing
|
||||
* End-to-End Encryption
|
||||
* Raise hand and reactions
|
||||
* Chat with private conversations
|
||||
* Polls
|
||||
* Virtual backgrounds
|
||||
|
||||
Installing Jitsi Meet is a simple experience. For Debian-based system, following the [quick install](https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-quickstart) document, which uses the package system. You can also see a demonstration of the process in [this tutorial video](https://jitsi.org/tutorial).
|
||||
And many more!
|
||||
|
||||
For other systems, or if you wish to install all components manually, see the [detailed manual installation instructions](https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-manual).
|
||||
## Using Jitsi Meet
|
||||
|
||||
Installation with Docker is also available. Please see the [instruction](https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker).
|
||||
Using Jitsi Meet is straightforward, as it's browser based. Head over to [meet.jit.si](https://meet.jit.si) and give it a try. It's anonymous, scalable and free to use. All browsers are supported!
|
||||
|
||||
## Download
|
||||
Using mobile? No problem, you can either use your mobile web browser or our fully-featured
|
||||
mobile apps:
|
||||
|
||||
| Latest stable release | [](https://github.com/jitsi/jitsi-meet/releases/latest) |
|
||||
|---|---|
|
||||
| Android | Android (F-Droid) | iOS |
|
||||
|:-:|:-:|:-:|
|
||||
| [<img src="resources/img/google-play-badge.png" height="50">](https://play.google.com/store/apps/details?id=org.jitsi.meet) | [<img src="resources/img/f-droid-badge.png" height="50">](https://f-droid.org/en/packages/org.jitsi.meet/) | [<img src="resources/img/appstore-badge.png" height="50">](https://itunes.apple.com/us/app/jitsi-meet/id1165103905) |
|
||||
|
||||
You can download Debian/Ubuntu binaries:
|
||||
* [stable](https://download.jitsi.org/stable/) ([instructions](https://jitsi.org/downloads/ubuntu-debian-installations-instructions/))
|
||||
* [testing](https://download.jitsi.org/testing/) ([instructions](https://jitsi.org/downloads/ubuntu-debian-installations-instructions-for-testing/))
|
||||
* [nightly](https://download.jitsi.org/unstable/) ([instructions](https://jitsi.org/downloads/ubuntu-debian-installations-instructions-nightly/))
|
||||
|
||||
You can download source archives (produced by ```make source-package```):
|
||||
* [source builds](https://download.jitsi.org/jitsi-meet/src/)
|
||||
|
||||
### Mobile apps
|
||||
|
||||
* [Android](https://play.google.com/store/apps/details?id=org.jitsi.meet)
|
||||
|
||||
[<img src="resources/img/google-play-badge.png" height="50">](https://play.google.com/store/apps/details?id=org.jitsi.meet)
|
||||
|
||||
* [Android (F-Droid)](https://f-droid.org/en/packages/org.jitsi.meet/)
|
||||
|
||||
[<img src="resources/img/f-droid-badge.png" height="50">](https://f-droid.org/en/packages/org.jitsi.meet/)
|
||||
|
||||
* [iOS](https://itunes.apple.com/us/app/jitsi-meet/id1165103905)
|
||||
|
||||
[<img src="resources/img/appstore-badge.png" height="50">](https://itunes.apple.com/us/app/jitsi-meet/id1165103905)
|
||||
|
||||
You can also sign up for our open beta testing here:
|
||||
If you are feeling adventurous and want to get an early scoop of the features as they are being
|
||||
developed you can also sign up for our open beta testing here:
|
||||
|
||||
* [Android](https://play.google.com/apps/testing/org.jitsi.meet)
|
||||
* [iOS](https://testflight.apple.com/join/isy6ja7S)
|
||||
|
||||
## Release notes
|
||||
## Running your own instance
|
||||
|
||||
Release notes for Jitsi Meet are maintained on [this repository](https://github.com/jitsi/jitsi-meet-release-notes).
|
||||
If you'd like to run your own Jitsi Meet installation head over to the [handbook](https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-start) to get started.
|
||||
|
||||
## Development
|
||||
We provide Debian packages and a comprehensive Docker setup to make deployments as simple as possible.
|
||||
Advanced users also have the possibility of building all the components from source.
|
||||
|
||||
For web development see [here](https://jitsi.github.io/handbook/docs/dev-guide/dev-guide-web), and for mobile see [here](https://jitsi.github.io/handbook/docs/dev-guide/dev-guide-mobile).
|
||||
You can check the latest releases [[here](https://jitsi.github.io/handbook/docs/releases).
|
||||
|
||||
## Jitsi as a Service
|
||||
|
||||
If you like the branding capabilities of running your own instance but you'd like
|
||||
to avoid dealing with the complexity of monitoring, scaling and updates, JaaS might be
|
||||
for you.
|
||||
|
||||
[8x8 Jitsi as a Service (JaaS)](https://jaas.8x8.vc) is an enterprise-ready video meeting platform that allows developers, organizations and businesses to easily build and deploy video solutions. With Jitsi as a Service we now give you all the power of Jitsi running on our global platform so you can focus on building secure and branded video experiences.
|
||||
|
||||
## Documentation
|
||||
|
||||
All the Jitsi Meet documentation is available in [the handbook](https://jitsi.github.io/handbook/).
|
||||
|
||||
## Security
|
||||
|
||||
For a comprehensive description of all Jitsi Meet's security aspects, please check [this link](https://jitsi.org/security).
|
||||
|
||||
For a detailed description of Jitsi Meet's End-to-End Encryption (E2EE) implementation,
|
||||
please check [this link](https://jitsi.org/e2ee-whitepaper/).
|
||||
|
||||
For information on reporting security vulnerabilities in Jitsi Meet, see [SECURITY.md](./SECURITY.md).
|
||||
|
||||
## Contributing
|
||||
|
||||
If you are looking to contribute to Jitsi Meet, first of all, thank you! Please
|
||||
see our [guidelines for contributing](CONTRIBUTING.md).
|
||||
|
||||
## Embedding in external applications
|
||||
<br />
|
||||
<br />
|
||||
|
||||
Jitsi Meet provides a very flexible way of embedding in external applications by using the [Jitsi Meet API](doc/api.md).
|
||||
|
||||
## Security
|
||||
|
||||
The security section here was starting to feel a bit too succinct for the complexity of the topic, so we created a post that covers the topic much more broadly here: https://jitsi.org/security
|
||||
|
||||
The section on end-to-end encryption in that document is likely going to be one of the key points of interest: https://jitsi.org/security/#e2ee
|
||||
|
||||
## Security issues
|
||||
|
||||
For information on reporting security vulnerabilities in Jitsi Meet, see [SECURITY.md](./SECURITY.md).
|
||||
|
||||
## Acknowledgements
|
||||
|
||||
Jitsi Meet started out as a sample conferencing application using Jitsi Videobridge. It was originally developed by ESTOS' developer Philipp Hancke who then contributed it to the community where development continues with joint forces!
|
||||
<footer>
|
||||
<p align="center" style="font-size: smaller;">
|
||||
Built with ❤️ by the Jitsi team at <a href="https://8x8.com" target="_blank">8x8</a> and our community.
|
||||
</p>
|
||||
</footer>
|
||||
|
||||
@@ -78,7 +78,7 @@ dependencies {
|
||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||
implementation 'androidx.appcompat:appcompat:1.2.0'
|
||||
|
||||
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.2'
|
||||
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.7'
|
||||
|
||||
if (!rootProject.ext.libreBuild) {
|
||||
implementation 'com.google.android.gms:play-services-auth:16.0.1'
|
||||
@@ -109,6 +109,7 @@ gradle.projectsEvaluated {
|
||||
def dropboxActivity = """
|
||||
<activity
|
||||
android:configChanges="keyboard|orientation"
|
||||
android:exported="true"
|
||||
android:launchMode="singleTask"
|
||||
android:name="com.dropbox.core.android.AuthActivity">
|
||||
<intent-filter>
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
android:installLocation="auto">
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:extractNativeLibs="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:networkSecurityConfig="@xml/network_security_config"
|
||||
@@ -13,6 +14,7 @@
|
||||
android:resource="@xml/app_restrictions" />
|
||||
<activity
|
||||
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize"
|
||||
android:exported="true"
|
||||
android:label="@string/app_name"
|
||||
android:launchMode="singleTask"
|
||||
android:name=".MainActivity"
|
||||
|
||||
@@ -18,9 +18,9 @@ buildscript {
|
||||
|
||||
ext {
|
||||
buildToolsVersion = "30.0.3"
|
||||
compileSdkVersion = 30
|
||||
compileSdkVersion = 31
|
||||
minSdkVersion = 23
|
||||
targetSdkVersion = 30
|
||||
targetSdkVersion = 31
|
||||
supportLibVersion = "28.0.0"
|
||||
|
||||
// The Maven artifact groupdId of the third-party react-native modules which
|
||||
|
||||
@@ -24,6 +24,7 @@ android.enableDexingArtifactTransform.desugaring=false
|
||||
|
||||
android.useAndroidX=true
|
||||
android.enableJetifier=true
|
||||
android.bundle.enableUncompressedNativeLibs=false
|
||||
|
||||
appVersion=21.3.0
|
||||
sdkVersion=3.8.0
|
||||
appVersion=21.4.0
|
||||
sdkVersion=3.10.0
|
||||
|
||||
@@ -44,7 +44,7 @@ dependencies {
|
||||
//noinspection GradleDynamicVersion
|
||||
implementation 'org.webkit:android-jsc:+'
|
||||
|
||||
implementation 'com.dropbox.core:dropbox-core-sdk:3.0.8'
|
||||
implementation 'com.dropbox.core:dropbox-core-sdk:4.0.1'
|
||||
implementation 'com.jakewharton.timber:timber:4.7.1'
|
||||
implementation 'com.squareup.duktape:duktape-android:1.3.0'
|
||||
implementation 'com.google.code.gson:gson:2.8.6'
|
||||
@@ -56,6 +56,7 @@ dependencies {
|
||||
exclude group: 'com.android.installreferrer'
|
||||
}
|
||||
} else {
|
||||
implementation project(':react-native-amplitude')
|
||||
implementation project(':react-native-device-info')
|
||||
implementation(project(":react-native-google-signin")) {
|
||||
exclude group: 'com.google.android.gms'
|
||||
@@ -70,6 +71,7 @@ dependencies {
|
||||
implementation project(':react-native-default-preference')
|
||||
implementation project(':react-native-immersive')
|
||||
implementation project(':react-native-keep-awake')
|
||||
implementation project(':react-native-performance')
|
||||
implementation project(':react-native-slider')
|
||||
implementation project(':react-native-sound')
|
||||
implementation project(':react-native-splash-screen')
|
||||
@@ -155,16 +157,9 @@ android.libraryVariants.all { def variant ->
|
||||
// Bundle sounds
|
||||
//
|
||||
copy {
|
||||
from("${projectDir}/../../sounds/incomingMessage.wav")
|
||||
from("${projectDir}/../../sounds/joined.wav")
|
||||
from("${projectDir}/../../sounds/left.wav")
|
||||
from("${projectDir}/../../sounds/liveStreamingOn.mp3")
|
||||
from("${projectDir}/../../sounds/liveStreamingOff.mp3")
|
||||
from("${projectDir}/../../sounds/outgoingRinging.wav")
|
||||
from("${projectDir}/../../sounds/outgoingStart.wav")
|
||||
from("${projectDir}/../../sounds/recordingOn.mp3")
|
||||
from("${projectDir}/../../sounds/recordingOff.mp3")
|
||||
from("${projectDir}/../../sounds/rejected.wav")
|
||||
from("${projectDir}/../../sounds")
|
||||
include("*.wav")
|
||||
include("*.mp3")
|
||||
into("${assetsDir}/sounds")
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,8 @@ import android.text.TextUtils;
|
||||
|
||||
import com.dropbox.core.DbxException;
|
||||
import com.dropbox.core.DbxRequestConfig;
|
||||
import com.dropbox.core.android.Auth;
|
||||
import com.dropbox.core.oauth.DbxCredential;
|
||||
import com.dropbox.core.v2.DbxClientV2;
|
||||
import com.dropbox.core.v2.users.FullAccount;
|
||||
import com.dropbox.core.v2.users.SpaceAllocation;
|
||||
@@ -17,7 +19,6 @@ import com.facebook.react.bridge.LifecycleEventListener;
|
||||
import com.facebook.react.bridge.Promise;
|
||||
import com.facebook.react.bridge.ReactApplicationContext;
|
||||
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
||||
import com.dropbox.core.android.Auth;
|
||||
import com.facebook.react.bridge.ReactMethod;
|
||||
import com.facebook.react.bridge.WritableMap;
|
||||
import com.facebook.react.module.annotations.ReactModule;
|
||||
@@ -66,7 +67,7 @@ class DropboxModule
|
||||
@ReactMethod
|
||||
public void authorize(final Promise promise) {
|
||||
if (isEnabled) {
|
||||
Auth.startOAuth2Authentication(this.getCurrentActivity(), appKey);
|
||||
Auth.startOAuth2PKCE(this.getCurrentActivity(), appKey, DbxRequestConfig.newBuilder(clientId).build());
|
||||
this.promise = promise;
|
||||
} else {
|
||||
promise.reject(
|
||||
@@ -181,11 +182,23 @@ class DropboxModule
|
||||
|
||||
@Override
|
||||
public void onHostResume() {
|
||||
String token = Auth.getOAuth2Token();
|
||||
DbxCredential credential = Auth.getDbxCredential();
|
||||
|
||||
if (this.promise != null ) {
|
||||
if (credential != null) {
|
||||
WritableMap result = Arguments.createMap();
|
||||
result.putString("token", credential.getAccessToken());
|
||||
result.putString("rToken", credential.getRefreshToken());
|
||||
result.putDouble("expireDate", credential.getExpiresAt());
|
||||
|
||||
this.promise.resolve(result);
|
||||
this.promise = null;
|
||||
} else {
|
||||
this.promise.reject("Invalid dropbox credentials");
|
||||
}
|
||||
|
||||
if (token != null && this.promise != null) {
|
||||
this.promise.resolve(token);
|
||||
this.promise = null;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,12 +116,15 @@ public class JitsiMeetActivityDelegate {
|
||||
= ReactInstanceManagerHolder.getReactInstanceManager();
|
||||
|
||||
if (reactInstanceManager != null) {
|
||||
// Try to avoid a crash because some devices trip on this assert:
|
||||
// https://github.com/facebook/react-native/blob/df4e67fe75d781d1eb264128cadf079989542755/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java#L512
|
||||
// Why this happens is a mystery wrapped in an enigma.
|
||||
ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
|
||||
if (reactContext != null && activity == reactContext.getCurrentActivity()) {
|
||||
try {
|
||||
reactInstanceManager.onHostPause(activity);
|
||||
} catch (AssertionError e) {
|
||||
// There seems to be a problem in RN when resuming an Activity when
|
||||
// rotation is involved and the planets align. There doesn't seem to
|
||||
// be a proper solution, but since the activity is going away anyway,
|
||||
// we'll YOLO-ignore the exception and hope fo the best.
|
||||
// Ref: https://github.com/facebook/react-native/search?q=Pausing+an+activity+that+is+not+the+current+activity%2C+this+is+incorrect%21&type=issues
|
||||
JitsiMeetLogger.e(e, "Error running onHostPause, ignoring");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,10 +40,6 @@ public class JitsiMeetConferenceOptions implements Parcelable {
|
||||
* Room name.
|
||||
*/
|
||||
private String room;
|
||||
/**
|
||||
* Conference subject.
|
||||
*/
|
||||
private String subject;
|
||||
/**
|
||||
* JWT token used for authentication.
|
||||
*/
|
||||
@@ -54,19 +50,16 @@ public class JitsiMeetConferenceOptions implements Parcelable {
|
||||
*/
|
||||
private Bundle colorScheme;
|
||||
|
||||
/**
|
||||
* Config. See: https://github.com/jitsi/jitsi-meet/blob/master/config.js
|
||||
*/
|
||||
private Bundle config;
|
||||
|
||||
/**
|
||||
* Feature flags. See: https://github.com/jitsi/jitsi-meet/blob/master/react/features/base/flags/constants.js
|
||||
*/
|
||||
private Bundle featureFlags;
|
||||
|
||||
/**
|
||||
* Set to {@code true} to join the conference with audio / video muted or to start in audio
|
||||
* only mode respectively.
|
||||
*/
|
||||
private Boolean audioMuted;
|
||||
private Boolean audioOnly;
|
||||
private Boolean videoMuted;
|
||||
|
||||
/**
|
||||
* USer information, to be used when no token is specified.
|
||||
*/
|
||||
@@ -80,10 +73,6 @@ public class JitsiMeetConferenceOptions implements Parcelable {
|
||||
return room;
|
||||
}
|
||||
|
||||
public String getSubject() {
|
||||
return subject;
|
||||
}
|
||||
|
||||
public String getToken() {
|
||||
return token;
|
||||
}
|
||||
@@ -96,18 +85,6 @@ public class JitsiMeetConferenceOptions implements Parcelable {
|
||||
return featureFlags;
|
||||
}
|
||||
|
||||
public boolean getAudioMuted() {
|
||||
return audioMuted;
|
||||
}
|
||||
|
||||
public boolean getAudioOnly() {
|
||||
return audioOnly;
|
||||
}
|
||||
|
||||
public boolean getVideoMuted() {
|
||||
return videoMuted;
|
||||
}
|
||||
|
||||
public JitsiMeetUserInfo getUserInfo() {
|
||||
return userInfo;
|
||||
}
|
||||
@@ -118,19 +95,16 @@ public class JitsiMeetConferenceOptions implements Parcelable {
|
||||
public static class Builder {
|
||||
private URL serverURL;
|
||||
private String room;
|
||||
private String subject;
|
||||
private String token;
|
||||
|
||||
private Bundle colorScheme;
|
||||
private Bundle config;
|
||||
private Bundle featureFlags;
|
||||
|
||||
private Boolean audioMuted;
|
||||
private Boolean audioOnly;
|
||||
private Boolean videoMuted;
|
||||
|
||||
private JitsiMeetUserInfo userInfo;
|
||||
|
||||
public Builder() {
|
||||
config = new Bundle();
|
||||
featureFlags = new Bundle();
|
||||
}
|
||||
|
||||
@@ -162,7 +136,7 @@ public class JitsiMeetConferenceOptions implements Parcelable {
|
||||
* @return - The {@link Builder} object itself so the method calls can be chained.
|
||||
*/
|
||||
public Builder setSubject(String subject) {
|
||||
this.subject = subject;
|
||||
setConfigOverride("subject", subject);
|
||||
|
||||
return this;
|
||||
}
|
||||
@@ -193,11 +167,11 @@ public class JitsiMeetConferenceOptions implements Parcelable {
|
||||
|
||||
/**
|
||||
* Indicates the conference will be joined with the microphone muted.
|
||||
* @param muted - Muted indication.
|
||||
* @param audioMuted - Muted indication.
|
||||
* @return - The {@link Builder} object itself so the method calls can be chained.
|
||||
*/
|
||||
public Builder setAudioMuted(boolean muted) {
|
||||
this.audioMuted = muted;
|
||||
public Builder setAudioMuted(boolean audioMuted) {
|
||||
setConfigOverride("startWithAudioMuted", audioMuted);
|
||||
|
||||
return this;
|
||||
}
|
||||
@@ -209,7 +183,7 @@ public class JitsiMeetConferenceOptions implements Parcelable {
|
||||
* @return - The {@link Builder} object itself so the method calls can be chained.
|
||||
*/
|
||||
public Builder setAudioOnly(boolean audioOnly) {
|
||||
this.audioOnly = audioOnly;
|
||||
setConfigOverride("startAudioOnly", audioOnly);
|
||||
|
||||
return this;
|
||||
}
|
||||
@@ -219,7 +193,7 @@ public class JitsiMeetConferenceOptions implements Parcelable {
|
||||
* @return - The {@link Builder} object itself so the method calls can be chained.
|
||||
*/
|
||||
public Builder setVideoMuted(boolean videoMuted) {
|
||||
this.videoMuted = videoMuted;
|
||||
setConfigOverride("startWithVideoMuted", videoMuted);
|
||||
|
||||
return this;
|
||||
}
|
||||
@@ -261,6 +235,36 @@ public class JitsiMeetConferenceOptions implements Parcelable {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setConfigOverride(String config, String value) {
|
||||
this.config.putString(config, value);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setConfigOverride(String config, int value) {
|
||||
this.config.putInt(config, value);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setConfigOverride(String config, boolean value) {
|
||||
this.config.putBoolean(config, value);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setConfigOverride(String config, Bundle bundle) {
|
||||
this.config.putBundle(config, bundle);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setConfigOverride(String config, String[] list) {
|
||||
this.config.putStringArray(config, list);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds the immutable {@link JitsiMeetConferenceOptions} object with the configuration
|
||||
* that this {@link Builder} instance specified.
|
||||
@@ -271,13 +275,10 @@ public class JitsiMeetConferenceOptions implements Parcelable {
|
||||
|
||||
options.serverURL = this.serverURL;
|
||||
options.room = this.room;
|
||||
options.subject = this.subject;
|
||||
options.token = this.token;
|
||||
options.colorScheme = this.colorScheme;
|
||||
options.config = this.config;
|
||||
options.featureFlags = this.featureFlags;
|
||||
options.audioMuted = this.audioMuted;
|
||||
options.audioOnly = this.audioOnly;
|
||||
options.videoMuted = this.videoMuted;
|
||||
options.userInfo = this.userInfo;
|
||||
|
||||
return options;
|
||||
@@ -290,17 +291,11 @@ public class JitsiMeetConferenceOptions implements Parcelable {
|
||||
private JitsiMeetConferenceOptions(Parcel in) {
|
||||
serverURL = (URL) in.readSerializable();
|
||||
room = in.readString();
|
||||
subject = in.readString();
|
||||
token = in.readString();
|
||||
colorScheme = in.readBundle();
|
||||
config = in.readBundle();
|
||||
featureFlags = in.readBundle();
|
||||
userInfo = new JitsiMeetUserInfo(in.readBundle());
|
||||
byte tmpAudioMuted = in.readByte();
|
||||
audioMuted = tmpAudioMuted == 0 ? null : tmpAudioMuted == 1;
|
||||
byte tmpAudioOnly = in.readByte();
|
||||
audioOnly = tmpAudioOnly == 0 ? null : tmpAudioOnly == 1;
|
||||
byte tmpVideoMuted = in.readByte();
|
||||
videoMuted = tmpVideoMuted == 0 ? null : tmpVideoMuted == 1;
|
||||
}
|
||||
|
||||
Bundle asProps() {
|
||||
@@ -317,21 +312,6 @@ public class JitsiMeetConferenceOptions implements Parcelable {
|
||||
props.putBundle("colorScheme", colorScheme);
|
||||
}
|
||||
|
||||
Bundle config = new Bundle();
|
||||
|
||||
if (audioMuted != null) {
|
||||
config.putBoolean("startWithAudioMuted", audioMuted);
|
||||
}
|
||||
if (audioOnly != null) {
|
||||
config.putBoolean("startAudioOnly", audioOnly);
|
||||
}
|
||||
if (videoMuted != null) {
|
||||
config.putBoolean("startWithVideoMuted", videoMuted);
|
||||
}
|
||||
if (subject != null) {
|
||||
config.putString("subject", subject);
|
||||
}
|
||||
|
||||
Bundle urlProps = new Bundle();
|
||||
|
||||
// The room is fully qualified
|
||||
@@ -379,14 +359,11 @@ public class JitsiMeetConferenceOptions implements Parcelable {
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeSerializable(serverURL);
|
||||
dest.writeString(room);
|
||||
dest.writeString(subject);
|
||||
dest.writeString(token);
|
||||
dest.writeBundle(colorScheme);
|
||||
dest.writeBundle(config);
|
||||
dest.writeBundle(featureFlags);
|
||||
dest.writeBundle(userInfo != null ? userInfo.asBundle() : new Bundle());
|
||||
dest.writeByte((byte) (audioMuted == null ? 0 : audioMuted ? 1 : 2));
|
||||
dest.writeByte((byte) (audioOnly == null ? 0 : audioOnly ? 1 : 2));
|
||||
dest.writeByte((byte) (videoMuted == null ? 0 : videoMuted ? 1 : 2));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package org.jitsi.meet.sdk;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class NotificationChannels {
|
||||
static final String ONGOING_CONFERENCE_CHANNEL_ID = "JitsiOngoingConferenceChannel";
|
||||
|
||||
public static List<String> allIds = new ArrayList<String>() {{ add(ONGOING_CONFERENCE_CHANNEL_ID); }};
|
||||
}
|
||||
@@ -16,6 +16,8 @@
|
||||
|
||||
package org.jitsi.meet.sdk;
|
||||
|
||||
import static org.jitsi.meet.sdk.NotificationChannels.ONGOING_CONFERENCE_CHANNEL_ID;
|
||||
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
@@ -39,9 +41,6 @@ import java.util.Random;
|
||||
class OngoingNotification {
|
||||
private static final String TAG = OngoingNotification.class.getSimpleName();
|
||||
|
||||
private static final String CHANNEL_ID = "JitsiNotificationChannel";
|
||||
private static final String CHANNEL_NAME = "Ongoing Conference Notifications";
|
||||
|
||||
static final int NOTIFICATION_ID = new Random().nextInt(99999) + 10000;
|
||||
private static long startingTime = 0;
|
||||
|
||||
@@ -60,13 +59,13 @@ class OngoingNotification {
|
||||
= (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
|
||||
NotificationChannel channel
|
||||
= notificationManager.getNotificationChannel(CHANNEL_ID);
|
||||
= notificationManager.getNotificationChannel(ONGOING_CONFERENCE_CHANNEL_ID);
|
||||
if (channel != null) {
|
||||
// The channel was already created, no need to do it again.
|
||||
return;
|
||||
}
|
||||
|
||||
channel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT);
|
||||
channel = new NotificationChannel(ONGOING_CONFERENCE_CHANNEL_ID, context.getString(R.string.ongoing_notification_action_unmute), NotificationManager.IMPORTANCE_DEFAULT);
|
||||
channel.enableLights(false);
|
||||
channel.enableVibration(false);
|
||||
channel.setShowBadge(false);
|
||||
@@ -82,9 +81,9 @@ class OngoingNotification {
|
||||
}
|
||||
|
||||
Intent notificationIntent = new Intent(context, context.getClass());
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_IMMUTABLE);
|
||||
|
||||
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, CHANNEL_ID);
|
||||
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, ONGOING_CONFERENCE_CHANNEL_ID);
|
||||
|
||||
if (startingTime == 0) {
|
||||
startingTime = System.currentTimeMillis();
|
||||
@@ -125,7 +124,7 @@ class OngoingNotification {
|
||||
Intent intent = new Intent(context, JitsiMeetOngoingConferenceService.class);
|
||||
intent.setAction(action.getName());
|
||||
PendingIntent pendingIntent
|
||||
= PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
= PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_IMMUTABLE);
|
||||
String title = context.getString(titleId);
|
||||
return new NotificationCompat.Action(0, title, pendingIntent);
|
||||
}
|
||||
|
||||
@@ -174,7 +174,7 @@ class ReactInstanceManagerHolder {
|
||||
return;
|
||||
}
|
||||
|
||||
SoLoader.init(activity, /* native exopackage */ false);
|
||||
SoLoader.init(activity.getApplication(), /* native exopackage */ false);
|
||||
|
||||
List<ReactPackage> packages
|
||||
= new ArrayList<>(Arrays.asList(
|
||||
@@ -184,6 +184,7 @@ class ReactInstanceManagerHolder {
|
||||
new com.horcrux.svg.SvgPackage(),
|
||||
new com.kevinresol.react_native_default_preference.RNDefaultPreferencePackage(),
|
||||
new com.learnium.RNDeviceInfo.RNDeviceInfo(),
|
||||
new com.oblador.performance.PerformancePackage(),
|
||||
new com.ocetnik.timer.BackgroundTimerPackage(),
|
||||
new com.reactnativecommunity.asyncstorage.AsyncStoragePackage(),
|
||||
new com.reactnativecommunity.netinfo.NetInfoPackage(),
|
||||
@@ -203,6 +204,16 @@ class ReactInstanceManagerHolder {
|
||||
}
|
||||
}));
|
||||
|
||||
// AmplitudeReactNativePackage
|
||||
try {
|
||||
Class<?> amplitudePackageClass = Class.forName("com.amplitude.reactnative.AmplitudeReactNativePackage");
|
||||
Constructor constructor = amplitudePackageClass.getConstructor();
|
||||
packages.add((ReactPackage)constructor.newInstance());
|
||||
} catch (Exception e) {
|
||||
// Ignore any error, the module is not compiled when LIBRE_BUILD is enabled.
|
||||
}
|
||||
|
||||
// RNGoogleSigninPackage
|
||||
try {
|
||||
Class<?> googlePackageClass = Class.forName("co.apptailor.googlesignin.RNGoogleSigninPackage");
|
||||
Constructor constructor = googlePackageClass.getConstructor();
|
||||
|
||||
@@ -6,4 +6,5 @@
|
||||
<string name="ongoing_notification_action_hang_up">Hang up</string>
|
||||
<string name="ongoing_notification_action_mute">Mute</string>
|
||||
<string name="ongoing_notification_action_unmute">Unmute</string>
|
||||
<string name="ongoing_notification_channel_name">Ongoing Conference Notifications</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
rootProject.name = 'jitsi-meet'
|
||||
|
||||
include ':app', ':sdk'
|
||||
include ':react-native-amplitude'
|
||||
project(':react-native-amplitude').projectDir = new File(rootProject.projectDir, '../node_modules/@amplitude/react-native//android')
|
||||
include ':react-native-async-storage'
|
||||
project(':react-native-async-storage').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-async-storage/async-storage/android')
|
||||
include ':react-native-background-timer'
|
||||
@@ -19,6 +21,8 @@ include ':react-native-immersive'
|
||||
project(':react-native-immersive').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-immersive/android')
|
||||
include ':react-native-keep-awake'
|
||||
project(':react-native-keep-awake').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-keep-awake/android')
|
||||
include ':react-native-performance'
|
||||
project(':react-native-performance').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-performance/android')
|
||||
include ':react-native-slider'
|
||||
project(':react-native-slider').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/slider/android')
|
||||
include ':react-native-sound'
|
||||
|
||||
2
app.js
2
app.js
@@ -2,7 +2,7 @@
|
||||
|
||||
import 'jquery';
|
||||
|
||||
import 'olm';
|
||||
import '@matrix-org/olm';
|
||||
|
||||
import 'focus-visible';
|
||||
|
||||
|
||||
265
conference.js
265
conference.js
@@ -24,6 +24,8 @@ import {
|
||||
redirectToStaticPage,
|
||||
reloadWithStoredParams
|
||||
} from './react/features/app/actions';
|
||||
import { showModeratedNotification } from './react/features/av-moderation/actions';
|
||||
import { shouldShowModeratedNotification } from './react/features/av-moderation/functions';
|
||||
import {
|
||||
AVATAR_URL_COMMAND,
|
||||
EMAIL_COMMAND,
|
||||
@@ -44,7 +46,8 @@ import {
|
||||
lockStateChanged,
|
||||
onStartMutedPolicyChanged,
|
||||
p2pStatusChanged,
|
||||
sendLocalParticipant
|
||||
sendLocalParticipant,
|
||||
_conferenceWillJoin
|
||||
} from './react/features/base/conference';
|
||||
import { getReplaceParticipant } from './react/features/base/config/functions';
|
||||
import {
|
||||
@@ -56,6 +59,7 @@ import {
|
||||
setAudioOutputDeviceId,
|
||||
updateDeviceList
|
||||
} from './react/features/base/devices';
|
||||
import { isIosMobileBrowser } from './react/features/base/environment/utils';
|
||||
import {
|
||||
browser,
|
||||
isFatalJitsiConnectionError,
|
||||
@@ -118,14 +122,15 @@ import {
|
||||
maybeOpenFeedbackDialog,
|
||||
submitFeedback
|
||||
} from './react/features/feedback';
|
||||
import { showNotification } from './react/features/notifications';
|
||||
import { isModerationNotificationDisplayed, showNotification } from './react/features/notifications';
|
||||
import { mediaPermissionPromptVisibilityChanged, toggleSlowGUMOverlay } from './react/features/overlay';
|
||||
import { suspendDetected } from './react/features/power-monitor';
|
||||
import {
|
||||
initPrejoin,
|
||||
isPrejoinPageEnabled,
|
||||
isPrejoinPageVisible,
|
||||
makePrecallTest
|
||||
makePrecallTest,
|
||||
setJoiningInProgress
|
||||
} from './react/features/prejoin';
|
||||
import { disableReceiver, stopReceiver } from './react/features/remote-control';
|
||||
import { setScreenAudioShareState, isScreenAudioShared } from './react/features/screen-share/';
|
||||
@@ -152,6 +157,15 @@ let connection;
|
||||
*/
|
||||
let _connectionPromise;
|
||||
|
||||
/**
|
||||
* We are storing the resolve function of a Promise that waits for the _connectionPromise to be created. This is needed
|
||||
* when the prejoin button was pressed before the conference object was initialized and the _connectionPromise has not
|
||||
* been initialized when we tried to execute prejoinStart. In this case in prejoinStart we create a new Promise, assign
|
||||
* the resolve function to this variable and wait for the promise to resolve before we continue. The
|
||||
* _onConnectionPromiseCreated will be called once the _connectionPromise is created.
|
||||
*/
|
||||
let _onConnectionPromiseCreated;
|
||||
|
||||
/**
|
||||
* This promise is used for chaining mutePresenterVideo calls in order to avoid calling GUM multiple times if it takes
|
||||
* a while to finish.
|
||||
@@ -453,27 +467,12 @@ export default {
|
||||
|
||||
isSharingScreen: false,
|
||||
|
||||
/**
|
||||
* The local audio track (if any).
|
||||
* FIXME tracks from redux store should be the single source of truth
|
||||
* @type {JitsiLocalTrack|null}
|
||||
*/
|
||||
localAudio: null,
|
||||
|
||||
/**
|
||||
* The local presenter video track (if any).
|
||||
* @type {JitsiLocalTrack|null}
|
||||
*/
|
||||
localPresenterVideo: null,
|
||||
|
||||
/**
|
||||
* The local video track (if any).
|
||||
* FIXME tracks from redux store should be the single source of truth, but
|
||||
* more refactoring is required around screen sharing ('localVideo' usages).
|
||||
* @type {JitsiLocalTrack|null}
|
||||
*/
|
||||
localVideo: null,
|
||||
|
||||
/**
|
||||
* Returns an object containing a promise which resolves with the created tracks &
|
||||
* the errors resulting from that process.
|
||||
@@ -727,9 +726,7 @@ export default {
|
||||
track.mute();
|
||||
}
|
||||
});
|
||||
logger.log(`Initialized with ${tracks.length} local tracks`);
|
||||
|
||||
this._localTracksInitialized = true;
|
||||
con.addEventListener(JitsiConnectionEvents.CONNECTION_FAILED, _connectionFailedHandler);
|
||||
APP.connection = connection = con;
|
||||
|
||||
@@ -807,6 +804,10 @@ export default {
|
||||
return c;
|
||||
});
|
||||
|
||||
if (_onConnectionPromiseCreated) {
|
||||
_onConnectionPromiseCreated();
|
||||
}
|
||||
|
||||
APP.store.dispatch(makePrecallTest(this._getConferenceOptions()));
|
||||
|
||||
const { tryCreateLocalTracks, errors } = this.createInitialLocalTracks(initialOptions);
|
||||
@@ -834,7 +835,13 @@ export default {
|
||||
this._initDeviceList(true);
|
||||
|
||||
if (initialOptions.startWithAudioMuted) {
|
||||
localTracks = localTracks.filter(track => track.getType() !== MEDIA_TYPE.AUDIO);
|
||||
// Always add the audio track to the peer connection and then mute the track on mobile Safari
|
||||
// because of a known issue where audio playout doesn't happen if the user joins audio and video muted.
|
||||
if (isIosMobileBrowser()) {
|
||||
this.muteAudio(true, true);
|
||||
} else {
|
||||
localTracks = localTracks.filter(track => track.getType() !== MEDIA_TYPE.AUDIO);
|
||||
}
|
||||
}
|
||||
|
||||
return this.startConference(con, localTracks);
|
||||
@@ -844,12 +851,26 @@ export default {
|
||||
* Joins conference after the tracks have been configured in the prejoin screen.
|
||||
*
|
||||
* @param {Object[]} tracks - An array with the configured tracks
|
||||
* @returns {Promise}
|
||||
* @returns {void}
|
||||
*/
|
||||
async prejoinStart(tracks) {
|
||||
const con = await _connectionPromise;
|
||||
if (!_connectionPromise) {
|
||||
// The conference object isn't initialized yet. Wait for the promise to initialise.
|
||||
await new Promise(resolve => {
|
||||
_onConnectionPromiseCreated = resolve;
|
||||
});
|
||||
_onConnectionPromiseCreated = undefined;
|
||||
}
|
||||
|
||||
return this.startConference(con, tracks);
|
||||
let con;
|
||||
|
||||
try {
|
||||
con = await _connectionPromise;
|
||||
this.startConference(con, tracks);
|
||||
} catch (error) {
|
||||
logger.error(`An error occurred while trying to join a meeting from the prejoin screen: ${error}`);
|
||||
APP.store.dispatch(setJoiningInProgress(false));
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -880,13 +901,24 @@ export default {
|
||||
* dialogs in case of media permissions error.
|
||||
*/
|
||||
muteAudio(mute, showUI = true) {
|
||||
const state = APP.store.getState();
|
||||
|
||||
if (!mute
|
||||
&& isUserInteractionRequiredForUnmute(APP.store.getState())) {
|
||||
&& isUserInteractionRequiredForUnmute(state)) {
|
||||
logger.error('Unmuting audio requires user interaction');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// check for A/V Moderation when trying to unmute
|
||||
if (!mute && shouldShowModeratedNotification(MEDIA_TYPE.AUDIO, state)) {
|
||||
if (!isModerationNotificationDisplayed(MEDIA_TYPE.AUDIO, state)) {
|
||||
APP.store.dispatch(showModeratedNotification(MEDIA_TYPE.AUDIO));
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Not ready to modify track's state yet
|
||||
if (!this._localTracksInitialized) {
|
||||
// This will only modify base/media.audio.muted which is then synced
|
||||
@@ -900,7 +932,9 @@ export default {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.localAudio && !mute) {
|
||||
const localAudio = getLocalJitsiAudioTrack(APP.store.getState());
|
||||
|
||||
if (!localAudio && !mute) {
|
||||
const maybeShowErrorDialog = error => {
|
||||
showUI && APP.store.dispatch(notifyMicError(error));
|
||||
};
|
||||
@@ -954,17 +988,18 @@ export default {
|
||||
const maybeShowErrorDialog = error => {
|
||||
showUI && APP.store.dispatch(notifyCameraError(error));
|
||||
};
|
||||
const localVideo = getLocalJitsiVideoTrack(APP.store.getState());
|
||||
|
||||
if (mute) {
|
||||
try {
|
||||
await this.localVideo.setEffect(undefined);
|
||||
await localVideo.setEffect(undefined);
|
||||
} catch (err) {
|
||||
logger.error('Failed to remove the presenter effect', err);
|
||||
maybeShowErrorDialog(err);
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
await this.localVideo.setEffect(await this._createPresenterStreamEffect());
|
||||
await localVideo.setEffect(await this._createPresenterStreamEffect());
|
||||
} catch (err) {
|
||||
logger.error('Failed to apply the presenter effect', err);
|
||||
maybeShowErrorDialog(err);
|
||||
@@ -1006,7 +1041,9 @@ export default {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.localVideo && !mute) {
|
||||
const localVideo = getLocalJitsiVideoTrack(APP.store.getState());
|
||||
|
||||
if (!localVideo && !mute) {
|
||||
const maybeShowErrorDialog = error => {
|
||||
showUI && APP.store.dispatch(notifyCameraError(error));
|
||||
};
|
||||
@@ -1320,14 +1357,14 @@ export default {
|
||||
APP.conference.roomName,
|
||||
this._getConferenceOptions());
|
||||
|
||||
APP.store.dispatch(conferenceWillJoin(room));
|
||||
|
||||
// Filter out the tracks that are muted.
|
||||
const tracks = localTracks.filter(track => !track.isMuted());
|
||||
// Filter out the tracks that are muted (except on mobile Safari).
|
||||
const tracks = isIosMobileBrowser() ? localTracks : localTracks.filter(track => !track.isMuted());
|
||||
|
||||
this._setLocalAudioVideoStreams(tracks);
|
||||
this._room = room; // FIXME do not use this
|
||||
|
||||
APP.store.dispatch(_conferenceWillJoin(room));
|
||||
|
||||
sendLocalParticipant(APP.store, room);
|
||||
|
||||
this._setupListeners();
|
||||
@@ -1340,7 +1377,7 @@ export default {
|
||||
* @private
|
||||
*/
|
||||
_setLocalAudioVideoStreams(tracks = []) {
|
||||
return tracks.map(track => {
|
||||
const promises = tracks.map(track => {
|
||||
if (track.isAudioTrack()) {
|
||||
return this.useAudioStream(track);
|
||||
} else if (track.isVideoTrack()) {
|
||||
@@ -1349,12 +1386,16 @@ export default {
|
||||
return this.useVideoStream(track);
|
||||
}
|
||||
|
||||
logger.error(
|
||||
'Ignored not an audio nor a video track: ', track);
|
||||
logger.error('Ignored not an audio nor a video track: ', track);
|
||||
|
||||
return Promise.resolve();
|
||||
|
||||
});
|
||||
|
||||
return Promise.allSettled(promises).then(() => {
|
||||
this._localTracksInitialized = true;
|
||||
logger.log(`Initialized with ${tracks.length} local tracks`);
|
||||
});
|
||||
},
|
||||
|
||||
_getConferenceOptions() {
|
||||
@@ -1376,29 +1417,20 @@ export default {
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
_replaceLocalVideoTrackQueue.enqueue(onFinish => {
|
||||
const state = APP.store.getState();
|
||||
const oldTrack = getLocalJitsiVideoTrack(APP.store.getState());
|
||||
|
||||
// When the prejoin page is displayed localVideo is not set
|
||||
// so just replace the video track from the store with the new one.
|
||||
if (isPrejoinPageVisible(state)) {
|
||||
const oldTrack = getLocalJitsiVideoTrack(state);
|
||||
logger.debug(`useVideoStream: Replacing ${oldTrack} with ${newTrack}`);
|
||||
|
||||
logger.debug(`useVideoStream on the prejoin screen: Replacing ${oldTrack} with ${newTrack}`);
|
||||
if (oldTrack === newTrack) {
|
||||
resolve();
|
||||
onFinish();
|
||||
|
||||
return APP.store.dispatch(replaceLocalTrack(oldTrack, newTrack))
|
||||
.then(resolve)
|
||||
.catch(error => {
|
||||
logger.error(`useVideoStream failed on the prejoin screen: ${error}`);
|
||||
reject(error);
|
||||
})
|
||||
.then(onFinish);
|
||||
return;
|
||||
}
|
||||
|
||||
logger.debug(`useVideoStream: Replacing ${this.localVideo} with ${newTrack}`);
|
||||
APP.store.dispatch(
|
||||
replaceLocalTrack(this.localVideo, newTrack, room))
|
||||
replaceLocalTrack(oldTrack, newTrack, room))
|
||||
.then(() => {
|
||||
this.localVideo = newTrack;
|
||||
this._setSharingScreen(newTrack);
|
||||
this.setVideoMuteStatus();
|
||||
})
|
||||
@@ -1448,23 +1480,18 @@ export default {
|
||||
useAudioStream(newTrack) {
|
||||
return new Promise((resolve, reject) => {
|
||||
_replaceLocalAudioTrackQueue.enqueue(onFinish => {
|
||||
const state = APP.store.getState();
|
||||
const oldTrack = getLocalJitsiAudioTrack(APP.store.getState());
|
||||
|
||||
// When the prejoin page is displayed localAudio is not set
|
||||
// so just replace the audio track from the store with the new one.
|
||||
if (isPrejoinPageVisible(state)) {
|
||||
const oldTrack = getLocalJitsiAudioTrack(state);
|
||||
if (oldTrack === newTrack) {
|
||||
resolve();
|
||||
onFinish();
|
||||
|
||||
return APP.store.dispatch(replaceLocalTrack(oldTrack, newTrack))
|
||||
.then(resolve)
|
||||
.catch(reject)
|
||||
.then(onFinish);
|
||||
return;
|
||||
}
|
||||
|
||||
APP.store.dispatch(
|
||||
replaceLocalTrack(this.localAudio, newTrack, room))
|
||||
replaceLocalTrack(oldTrack, newTrack, room))
|
||||
.then(() => {
|
||||
this.localAudio = newTrack;
|
||||
this.setAudioMuteStatus(this.isLocalAudioMuted());
|
||||
})
|
||||
.then(resolve)
|
||||
@@ -1504,14 +1531,14 @@ export default {
|
||||
*
|
||||
* @param {boolean} didHaveVideo indicates if there was a camera video being
|
||||
* used, before switching to screen sharing.
|
||||
* @param {boolean} wasVideoMuted indicates if the video was muted, before
|
||||
* switching to screen sharing.
|
||||
* @param {boolean} ignoreDidHaveVideo indicates if the camera video should be
|
||||
* ignored when switching screen sharing off.
|
||||
* @return {Promise} resolved after the screen sharing is turned off, or
|
||||
* rejected with some error (no idea what kind of error, possible GUM error)
|
||||
* in case it fails.
|
||||
* @private
|
||||
*/
|
||||
async _turnScreenSharingOff(didHaveVideo) {
|
||||
async _turnScreenSharingOff(didHaveVideo, ignoreDidHaveVideo) {
|
||||
this._untoggleScreenSharing = null;
|
||||
this.videoSwitchInProgress = true;
|
||||
|
||||
@@ -1539,7 +1566,9 @@ export default {
|
||||
|
||||
// If system audio was also shared stop the AudioMixerEffect and dispose of the desktop audio track.
|
||||
if (this._mixerEffect) {
|
||||
await this.localAudio.setEffect(undefined);
|
||||
const localAudio = getLocalJitsiAudioTrack(APP.store.getState());
|
||||
|
||||
await localAudio.setEffect(undefined);
|
||||
await this._desktopAudioStream.dispose();
|
||||
this._mixerEffect = undefined;
|
||||
this._desktopAudioStream = undefined;
|
||||
@@ -1553,7 +1582,7 @@ export default {
|
||||
|
||||
APP.store.dispatch(setScreenAudioShareState(false));
|
||||
|
||||
if (didHaveVideo) {
|
||||
if (didHaveVideo && !ignoreDidHaveVideo) {
|
||||
promise = promise.then(() => createLocalTracksF({ devices: [ 'video' ] }))
|
||||
.then(([ stream ]) => {
|
||||
logger.debug(`_turnScreenSharingOff using ${stream} for useVideoStream`);
|
||||
@@ -1604,9 +1633,10 @@ export default {
|
||||
* @param {Array<string>} [options.desktopSharingSources] - Array with the
|
||||
* sources that have to be displayed in the desktop picker window ('screen',
|
||||
* 'window', etc.).
|
||||
* @param {boolean} ignoreDidHaveVideo - if true ignore if video was on when sharing started.
|
||||
* @return {Promise.<T>}
|
||||
*/
|
||||
async toggleScreenSharing(toggle = !this._untoggleScreenSharing, options = {}) {
|
||||
async toggleScreenSharing(toggle = !this._untoggleScreenSharing, options = {}, ignoreDidHaveVideo) {
|
||||
logger.debug(`toggleScreenSharing: ${toggle}`);
|
||||
if (this.videoSwitchInProgress) {
|
||||
return Promise.reject('Switch in progress.');
|
||||
@@ -1632,7 +1662,7 @@ export default {
|
||||
}
|
||||
|
||||
return this._untoggleScreenSharing
|
||||
? this._untoggleScreenSharing()
|
||||
? this._untoggleScreenSharing(ignoreDidHaveVideo)
|
||||
: Promise.resolve();
|
||||
},
|
||||
|
||||
@@ -1765,7 +1795,8 @@ export default {
|
||||
|
||||
// Create a new presenter track and apply the presenter effect.
|
||||
if (!this.localPresenterVideo && !mute) {
|
||||
const { height, width } = this.localVideo.track.getSettings() ?? this.localVideo.track.getConstraints();
|
||||
const localVideo = getLocalJitsiVideoTrack(APP.store.getState());
|
||||
const { height, width } = localVideo.track.getSettings() ?? localVideo.track.getConstraints();
|
||||
const isPortrait = height >= width;
|
||||
const DESKTOP_STREAM_CAP = 720;
|
||||
|
||||
@@ -1794,7 +1825,7 @@ export default {
|
||||
|
||||
// Apply the constraints on the desktop track.
|
||||
try {
|
||||
await this.localVideo.track.applyConstraints(desktopResizeConstraints);
|
||||
await localVideo.track.applyConstraints(desktopResizeConstraints);
|
||||
} catch (err) {
|
||||
logger.error('Failed to apply constraints on the desktop stream for presenter mode', err);
|
||||
|
||||
@@ -1802,7 +1833,7 @@ export default {
|
||||
}
|
||||
}
|
||||
const trackHeight = resizeDesktopStream
|
||||
? this.localVideo.track.getSettings().height ?? DESKTOP_STREAM_CAP
|
||||
? localVideo.track.getSettings().height ?? DESKTOP_STREAM_CAP
|
||||
: height;
|
||||
let effect;
|
||||
|
||||
@@ -1817,7 +1848,7 @@ export default {
|
||||
|
||||
// Replace the desktop track on the peerconnection.
|
||||
try {
|
||||
await this.localVideo.setEffect(effect);
|
||||
await localVideo.setEffect(effect);
|
||||
APP.store.dispatch(setVideoMuted(mute, MEDIA_TYPE.PRESENTER));
|
||||
this.setVideoMuteStatus();
|
||||
} catch (err) {
|
||||
@@ -1873,12 +1904,14 @@ export default {
|
||||
}
|
||||
|
||||
if (this._desktopAudioStream) {
|
||||
const localAudio = getLocalJitsiAudioTrack(APP.store.getState());
|
||||
|
||||
// If there is a localAudio stream, mix in the desktop audio stream captured by the screen sharing
|
||||
// api.
|
||||
if (this.localAudio) {
|
||||
if (localAudio) {
|
||||
this._mixerEffect = new AudioMixerEffect(this._desktopAudioStream);
|
||||
|
||||
await this.localAudio.setEffect(this._mixerEffect);
|
||||
await localAudio.setEffect(this._mixerEffect);
|
||||
} else {
|
||||
// If no local stream is present ( i.e. no input audio devices) we use the screen share audio
|
||||
// stream as we would use a regular stream.
|
||||
@@ -2059,10 +2092,10 @@ export default {
|
||||
});
|
||||
|
||||
room.on(JitsiConferenceEvents.TRACK_AUDIO_LEVEL_CHANGED, (id, lvl) => {
|
||||
const localAudio = getLocalJitsiAudioTrack(APP.store.getState());
|
||||
let newLvl = lvl;
|
||||
|
||||
if (this.isLocalId(id)
|
||||
&& this.localAudio && this.localAudio.isMuted()) {
|
||||
if (this.isLocalId(id) && localAudio?.isMuted()) {
|
||||
newLvl = 0;
|
||||
}
|
||||
|
||||
@@ -2106,7 +2139,7 @@ export default {
|
||||
|
||||
room.on(
|
||||
JitsiConferenceEvents.DOMINANT_SPEAKER_CHANGED,
|
||||
id => APP.store.dispatch(dominantSpeakerChanged(id, room)));
|
||||
(dominant, previous) => APP.store.dispatch(dominantSpeakerChanged(dominant, previous, room)));
|
||||
|
||||
room.on(
|
||||
JitsiConferenceEvents.CONFERENCE_CREATED_TIMESTAMP,
|
||||
@@ -2261,7 +2294,9 @@ export default {
|
||||
|
||||
// Remove the tracks from the peerconnection.
|
||||
for (const track of localTracks) {
|
||||
if (audioMuted && track.jitsiTrack?.getType() === MEDIA_TYPE.AUDIO) {
|
||||
// Always add the track on mobile Safari because of a known issue where audio playout doesn't happen
|
||||
// if the user joins audio and video muted.
|
||||
if (audioMuted && track.jitsiTrack?.getType() === MEDIA_TYPE.AUDIO && !isIosMobileBrowser()) {
|
||||
promises.push(this.useAudioStream(null));
|
||||
}
|
||||
if (videoMuted && track.jitsiTrack?.getType() === MEDIA_TYPE.VIDEO) {
|
||||
@@ -2302,6 +2337,7 @@ export default {
|
||||
APP.UI.addListener(
|
||||
UIEvents.VIDEO_DEVICE_CHANGED,
|
||||
cameraDeviceId => {
|
||||
const localVideo = getLocalJitsiVideoTrack(APP.store.getState());
|
||||
const videoWasMuted = this.isLocalVideoMuted();
|
||||
|
||||
sendAnalytics(createDeviceChangedEvent('video', 'input'));
|
||||
@@ -2309,7 +2345,7 @@ export default {
|
||||
// If both screenshare and video are in progress, restart the
|
||||
// presenter mode with the new camera device.
|
||||
if (this.isSharingScreen && !videoWasMuted) {
|
||||
const { height } = this.localVideo.track.getSettings();
|
||||
const { height } = localVideo.track.getSettings();
|
||||
|
||||
// dispose the existing presenter track and create a new
|
||||
// camera track.
|
||||
@@ -2318,7 +2354,7 @@ export default {
|
||||
this.localPresenterVideo = null;
|
||||
|
||||
return this._createPresenterStreamEffect(height, cameraDeviceId)
|
||||
.then(effect => this.localVideo.setEffect(effect))
|
||||
.then(effect => localVideo.setEffect(effect))
|
||||
.then(() => {
|
||||
this.setVideoMuteStatus();
|
||||
logger.log('Switched local video device while screen sharing and the video is unmuted');
|
||||
@@ -2331,7 +2367,7 @@ export default {
|
||||
// that can be applied on un-mute.
|
||||
} else if (this.isSharingScreen && videoWasMuted) {
|
||||
logger.log('Switched local video device: while screen sharing and the video is muted');
|
||||
const { height } = this.localVideo.track.getSettings();
|
||||
const { height } = localVideo.track.getSettings();
|
||||
|
||||
this._updateVideoDeviceId();
|
||||
|
||||
@@ -2417,13 +2453,15 @@ export default {
|
||||
return this.useAudioStream(stream);
|
||||
})
|
||||
.then(() => {
|
||||
if (this.localAudio && hasDefaultMicChanged) {
|
||||
const localAudio = getLocalJitsiAudioTrack(APP.store.getState());
|
||||
|
||||
if (localAudio && hasDefaultMicChanged) {
|
||||
// workaround for the default device to be shown as selected in the
|
||||
// settings even when the real device id was passed to gUM because of the
|
||||
// above mentioned chrome bug.
|
||||
this.localAudio._realDeviceId = this.localAudio.deviceId = 'default';
|
||||
localAudio._realDeviceId = localAudio.deviceId = 'default';
|
||||
}
|
||||
logger.log(`switched local audio device: ${this.localAudio?.getDeviceId()}`);
|
||||
logger.log(`switched local audio device: ${localAudio?.getDeviceId()}`);
|
||||
|
||||
this._updateAudioDeviceId();
|
||||
})
|
||||
@@ -2467,8 +2505,8 @@ export default {
|
||||
});
|
||||
|
||||
APP.UI.addListener(
|
||||
UIEvents.TOGGLE_SCREENSHARING, ({ enabled, audioOnly }) => {
|
||||
this.toggleScreenSharing(enabled, { audioOnly });
|
||||
UIEvents.TOGGLE_SCREENSHARING, ({ enabled, audioOnly, ignoreDidHaveVideo }) => {
|
||||
this.toggleScreenSharing(enabled, { audioOnly }, ignoreDidHaveVideo);
|
||||
}
|
||||
);
|
||||
},
|
||||
@@ -2489,9 +2527,6 @@ export default {
|
||||
JitsiMediaDevicesEvents.DEVICE_LIST_CHANGED,
|
||||
this.deviceChangeListener);
|
||||
}
|
||||
|
||||
this.localVideo = null;
|
||||
this.localAudio = null;
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -2554,10 +2589,11 @@ export default {
|
||||
* @private
|
||||
*/
|
||||
_updateVideoDeviceId() {
|
||||
if (this.localVideo
|
||||
&& this.localVideo.videoType === 'camera') {
|
||||
const localVideo = getLocalJitsiVideoTrack(APP.store.getState());
|
||||
|
||||
if (localVideo && localVideo.videoType === 'camera') {
|
||||
APP.store.dispatch(updateSettings({
|
||||
cameraDeviceId: this.localVideo.getDeviceId()
|
||||
cameraDeviceId: localVideo.getDeviceId()
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -2575,9 +2611,11 @@ export default {
|
||||
* @private
|
||||
*/
|
||||
_updateAudioDeviceId() {
|
||||
if (this.localAudio) {
|
||||
const localAudio = getLocalJitsiAudioTrack(APP.store.getState());
|
||||
|
||||
if (localAudio) {
|
||||
APP.store.dispatch(updateSettings({
|
||||
micDeviceId: this.localAudio.getDeviceId()
|
||||
micDeviceId: localAudio.getDeviceId()
|
||||
}));
|
||||
}
|
||||
},
|
||||
@@ -2591,6 +2629,8 @@ export default {
|
||||
*/
|
||||
_onDeviceListChanged(devices) {
|
||||
const oldDevices = APP.store.getState()['features/base/devices'].availableDevices;
|
||||
const localAudio = getLocalJitsiAudioTrack(APP.store.getState());
|
||||
const localVideo = getLocalJitsiVideoTrack(APP.store.getState());
|
||||
|
||||
APP.store.dispatch(updateDeviceList(devices));
|
||||
|
||||
@@ -2598,8 +2638,8 @@ export default {
|
||||
= mediaDeviceHelper.getNewMediaDevicesAfterDeviceListChanged(
|
||||
devices,
|
||||
this.isSharingScreen,
|
||||
this.localVideo,
|
||||
this.localAudio);
|
||||
localVideo,
|
||||
localAudio);
|
||||
const promises = [];
|
||||
const audioWasMuted = this.isLocalAudioMuted();
|
||||
const videoWasMuted = this.isLocalVideoMuted();
|
||||
@@ -2622,12 +2662,12 @@ export default {
|
||||
// simpler):
|
||||
// If the default device is changed we need to first stop the local streams and then call GUM. Otherwise GUM
|
||||
// will return a stream using the old default device.
|
||||
if (requestedInput.audio && this.localAudio) {
|
||||
this.localAudio.stopStream();
|
||||
if (requestedInput.audio && localAudio) {
|
||||
localAudio.stopStream();
|
||||
}
|
||||
|
||||
if (requestedInput.video && this.localVideo) {
|
||||
this.localVideo.stopStream();
|
||||
if (requestedInput.video && localVideo) {
|
||||
localVideo.stopStream();
|
||||
}
|
||||
|
||||
// Let's handle unknown/non-preferred devices
|
||||
@@ -2707,15 +2747,16 @@ export default {
|
||||
= mediaType === 'audio'
|
||||
? this.useAudioStream.bind(this)
|
||||
: this.useVideoStream.bind(this);
|
||||
const track = tracks.find(t => t.getType() === mediaType) || null;
|
||||
|
||||
// Use the new stream or null if we failed to obtain it.
|
||||
return useStream(tracks.find(track => track.getType() === mediaType) || null)
|
||||
return useStream(track)
|
||||
.then(() => {
|
||||
if (this.localAudio && hasDefaultMicChanged) {
|
||||
if (track?.isAudioTrack() && hasDefaultMicChanged) {
|
||||
// workaround for the default device to be shown as selected in the
|
||||
// settings even when the real device id was passed to gUM because of
|
||||
// the above mentioned chrome bug.
|
||||
this.localAudio._realDeviceId = this.localAudio.deviceId = 'default';
|
||||
track._realDeviceId = track.deviceId = 'default';
|
||||
}
|
||||
mediaType === 'audio'
|
||||
? this._updateAudioDeviceId()
|
||||
@@ -2755,14 +2796,13 @@ export default {
|
||||
* Determines whether or not the audio button should be enabled.
|
||||
*/
|
||||
updateAudioIconEnabled() {
|
||||
const audioMediaDevices
|
||||
= APP.store.getState()['features/base/devices'].availableDevices.audioInput;
|
||||
const audioDeviceCount
|
||||
= audioMediaDevices ? audioMediaDevices.length : 0;
|
||||
const localAudio = getLocalJitsiAudioTrack(APP.store.getState());
|
||||
const audioMediaDevices = APP.store.getState()['features/base/devices'].availableDevices.audioInput;
|
||||
const audioDeviceCount = audioMediaDevices ? audioMediaDevices.length : 0;
|
||||
|
||||
// The audio functionality is considered available if there are any
|
||||
// audio devices detected or if the local audio stream already exists.
|
||||
const available = audioDeviceCount > 0 || Boolean(this.localAudio);
|
||||
const available = audioDeviceCount > 0 || Boolean(localAudio);
|
||||
|
||||
APP.store.dispatch(setAudioAvailable(available));
|
||||
APP.API.notifyAudioAvailabilityChanged(available);
|
||||
@@ -2776,13 +2816,14 @@ export default {
|
||||
= APP.store.getState()['features/base/devices'].availableDevices.videoInput;
|
||||
const videoDeviceCount
|
||||
= videoMediaDevices ? videoMediaDevices.length : 0;
|
||||
const localVideo = getLocalJitsiVideoTrack(APP.store.getState());
|
||||
|
||||
// The video functionality is considered available if there are any
|
||||
// video devices detected or if there is local video stream already
|
||||
// active which could be either screensharing stream or a video track
|
||||
// created before the permissions were rejected (through browser
|
||||
// config).
|
||||
const available = videoDeviceCount > 0 || Boolean(this.localVideo);
|
||||
const available = videoDeviceCount > 0 || Boolean(localVideo);
|
||||
|
||||
APP.store.dispatch(setVideoAvailable(available));
|
||||
APP.API.notifyVideoAvailabilityChanged(available);
|
||||
@@ -2800,8 +2841,6 @@ export default {
|
||||
|
||||
APP.store.dispatch(destroyLocalTracks());
|
||||
this._localTracksInitialized = false;
|
||||
this.localVideo = null;
|
||||
this.localAudio = null;
|
||||
|
||||
// Remove unnecessary event listeners from firing callbacks.
|
||||
if (this.deviceChangeListener) {
|
||||
|
||||
221
config.js
221
config.js
@@ -27,9 +27,6 @@ var config = {
|
||||
// Websocket URL
|
||||
// websocket: 'wss://jitsi-meet.example.com/xmpp-websocket',
|
||||
|
||||
// The name of client node advertised in XEP-0115 'c' stanza
|
||||
clientNode: 'http://jitsi.org/jitsimeet',
|
||||
|
||||
// The real JID of focus participant - can be overridden here
|
||||
// Do not change username - FIXME: Make focus username configurable
|
||||
// https://github.com/jitsi/jitsi-meet/issues/7376
|
||||
@@ -44,9 +41,16 @@ var config = {
|
||||
// issues related to insertable streams.
|
||||
// disableE2EE: false,
|
||||
|
||||
// Enables/disables thumbnail reordering in the filmstrip. It is enabled by default unless explicitly
|
||||
// disabled by the below option.
|
||||
// enableThumbnailReordering: true,
|
||||
|
||||
// Enables XMPP WebSocket (as opposed to BOSH) for the given amount of users.
|
||||
// mobileXmppWsThreshold: 10 // enable XMPP WebSockets on mobile for 10% of the users
|
||||
|
||||
// P2P test mode disables automatic switching to P2P when there are 2
|
||||
// participants in the conference.
|
||||
p2pTestMode: false
|
||||
// p2pTestMode: false,
|
||||
|
||||
// Enables the test specific features consumed by jitsi-meet-torture
|
||||
// testMode: false
|
||||
@@ -70,8 +74,14 @@ var config = {
|
||||
// callStatsThreshold: 5 // enable callstats for 5% of the users.
|
||||
},
|
||||
|
||||
// Enables reactions feature.
|
||||
// enableReactions: false,
|
||||
// Disables moderator indicators.
|
||||
// disableModeratorIndicator: false,
|
||||
|
||||
// Disables the reactions feature.
|
||||
// disableReactions: true,
|
||||
|
||||
// Disables polls feature.
|
||||
// disablePolls: false,
|
||||
|
||||
// Disables ICE/UDP by filtering out local and remote UDP candidates in
|
||||
// signalling.
|
||||
@@ -144,6 +154,19 @@ var config = {
|
||||
// Sets the preferred resolution (height) for local video. Defaults to 720.
|
||||
// resolution: 720,
|
||||
|
||||
// Specifies whether the raised hand will hide when someone becomes a dominant speaker or not
|
||||
// disableRemoveRaisedHandOnFocus: false,
|
||||
|
||||
// Specifies whether there will be a search field in speaker stats or not
|
||||
// disableSpeakerStatsSearch: false,
|
||||
|
||||
// Specifies whether participants in speaker stats should be ordered or not, and with what priority
|
||||
// speakerStatsOrder: [
|
||||
// 'role', <- Moderators on top
|
||||
// 'name', <- Alphabetically by name
|
||||
// 'hasLeft', <- The ones that have left in the bottom
|
||||
// ] <- the order of the array elements determines priority
|
||||
|
||||
// How many participants while in the tile view mode, before the receiving video quality is reduced from HD to SD.
|
||||
// Use -1 to disable.
|
||||
// maxFullResolutionParticipants: 2,
|
||||
@@ -166,9 +189,10 @@ var config = {
|
||||
// Enable / disable simulcast support.
|
||||
// disableSimulcast: false,
|
||||
|
||||
// Enable / disable layer suspension. If enabled, endpoints whose HD
|
||||
// layers are not in use will be suspended (no longer sent) until they
|
||||
// are requested again.
|
||||
// Enable / disable layer suspension. If enabled, endpoints whose HD layers are not in use will be suspended
|
||||
// (no longer sent) until they are requested again. This is enabled by default. This must be enabled for screen
|
||||
// sharing to work as expected on Chrome. Disabling this might result in low resolution screenshare being sent
|
||||
// by the client.
|
||||
// enableLayerSuspension: false,
|
||||
|
||||
// Every participant after the Nth will start video muted.
|
||||
@@ -230,6 +254,18 @@ var config = {
|
||||
// subtitles and buttons can be configured)
|
||||
// transcribingEnabled: false,
|
||||
|
||||
// If true transcriber will use the application language.
|
||||
// The application language is either explicitly set by participants in their settings or automatically
|
||||
// detected based on the environment, e.g. if the app is opened in a chrome instance which is using french as its
|
||||
// default language then transcriptions for that participant will be in french.
|
||||
// Defaults to true.
|
||||
// transcribeWithAppLanguage: true,
|
||||
|
||||
// Transcriber language. This settings will only work if "transcribeWithAppLanguage" is explicitly set to false.
|
||||
// Available languages can be found in
|
||||
// ./src/react/features/transcribing/transcriber-langs.json.
|
||||
// preferredTranscribeLanguage: 'en-US',
|
||||
|
||||
// Enables automatic turning on captions when recording is started
|
||||
// autoCaptionOnRecord: false,
|
||||
|
||||
@@ -238,6 +274,14 @@ var config = {
|
||||
// Default value for the channel "last N" attribute. -1 for unlimited.
|
||||
channelLastN: -1,
|
||||
|
||||
// Connection indicators
|
||||
// connectionIndicators: {
|
||||
// autoHide: true,
|
||||
// autoHideTimeout: 5000,
|
||||
// disabled: false,
|
||||
// inactiveDisabled: false
|
||||
// },
|
||||
|
||||
// Provides a way for the lastN value to be controlled through the UI.
|
||||
// When startLastN is present, conference starts with a last-n value of startLastN and channelLastN
|
||||
// value will be used when the quality level is selected using "Manage Video Quality" slider.
|
||||
@@ -306,7 +350,7 @@ var config = {
|
||||
// VP9: {
|
||||
// low: 100000,
|
||||
// standard: 300000,
|
||||
// high: 1200000
|
||||
// high: 1200000
|
||||
// }
|
||||
// },
|
||||
//
|
||||
@@ -371,6 +415,11 @@ var config = {
|
||||
// bridge itself is reachable via UDP)
|
||||
// useTurnUdp: false
|
||||
|
||||
// Enable support for encoded transform in supported browsers. This allows
|
||||
// E2EE to work in Safari if the corresponding flag is enabled in the browser.
|
||||
// Experimental.
|
||||
// enableEncodedTransformSupport: false,
|
||||
|
||||
// UI
|
||||
//
|
||||
|
||||
@@ -496,6 +545,60 @@ var config = {
|
||||
// '__end'
|
||||
// ],
|
||||
|
||||
// Holds values related to toolbar visibility control.
|
||||
// toolbarConfig: {
|
||||
// // Moved from interfaceConfig.INITIAL_TOOLBAR_TIMEOUT
|
||||
// // The initial numer of miliseconds for the toolbar buttons to be visible on screen.
|
||||
// initialTimeout: 20000,
|
||||
// // Moved from interfaceConfig.TOOLBAR_TIMEOUT
|
||||
// // Number of miliseconds for the toolbar buttons to be visible on screen.
|
||||
// timeout: 4000,
|
||||
// // Moved from interfaceConfig.TOOLBAR_ALWAYS_VISIBLE
|
||||
// // Whether toolbar should be always visible or should hide after x miliseconds.
|
||||
// alwaysVisible: false
|
||||
// },
|
||||
|
||||
// Toolbar buttons which have their click event exposed through the API on
|
||||
// `toolbarButtonClicked` event instead of executing the normal click routine.
|
||||
// buttonsWithNotifyClick: [
|
||||
// 'camera',
|
||||
// 'chat',
|
||||
// 'closedcaptions',
|
||||
// 'desktop',
|
||||
// 'download',
|
||||
// 'embedmeeting',
|
||||
// 'etherpad',
|
||||
// 'feedback',
|
||||
// 'filmstrip',
|
||||
// 'fullscreen',
|
||||
// 'hangup',
|
||||
// 'help',
|
||||
// 'invite',
|
||||
// 'livestreaming',
|
||||
// 'microphone',
|
||||
// 'mute-everyone',
|
||||
// 'mute-video-everyone',
|
||||
// 'participants-pane',
|
||||
// 'profile',
|
||||
// 'raisehand',
|
||||
// 'recording',
|
||||
// 'security',
|
||||
// 'select-background',
|
||||
// 'settings',
|
||||
// 'shareaudio',
|
||||
// 'sharedvideo',
|
||||
// 'shortcuts',
|
||||
// 'stats',
|
||||
// 'tileview',
|
||||
// 'toggle-camera',
|
||||
// 'videoquality',
|
||||
// '__end'
|
||||
// ],
|
||||
|
||||
// List of pre meeting screens buttons to hide. The values must be one or more of the 5 allowed buttons:
|
||||
// 'microphone', 'camera', 'select-background', 'invite', 'settings'
|
||||
// hiddenPremeetingButtons: [],
|
||||
|
||||
// Stats
|
||||
//
|
||||
|
||||
@@ -513,6 +616,28 @@ var config = {
|
||||
// callStatsID: '',
|
||||
// callStatsSecret: '',
|
||||
|
||||
// The callstats initialize config params as described in the API:
|
||||
// https://docs.callstats.io/docs/javascript#callstatsinitialize-with-app-secret
|
||||
// callStatsConfigParams: {
|
||||
// disableBeforeUnloadHandler: true, // disables callstats.js's window.onbeforeunload parameter.
|
||||
// applicationVersion: "app_version", // Application version specified by the developer.
|
||||
// disablePrecalltest: true, // disables the pre-call test, it is enabled by default.
|
||||
// siteID: "siteID", // The name/ID of the site/campus from where the call/pre-call test is made.
|
||||
// additionalIDs: { // additionalIDs object, contains application related IDs.
|
||||
// customerID: "Customer Identifier. Example, walmart.",
|
||||
// tenantID: "Tenant Identifier. Example, monster.",
|
||||
// productName: "Product Name. Example, Jitsi.",
|
||||
// meetingsName: "Meeting Name. Example, Jitsi loves callstats.",
|
||||
// serverName: "Server/MiddleBox Name. Example, jvb-prod-us-east-mlkncws12.",
|
||||
// pbxID: "PBX Identifier. Example, walmart.",
|
||||
// pbxExtensionID: "PBX Extension Identifier. Example, 5625.",
|
||||
// fqExtensionID: "Fully qualified Extension Identifier. Example, +71 (US) +5625.",
|
||||
// sessionID: "Session Identifier. Example, session-12-34"
|
||||
// },
|
||||
// collectLegacyStats: true, //enables the collection of legacy stats in chrome browser
|
||||
// collectIP: true //enables the collection localIP address
|
||||
// },
|
||||
|
||||
// Enables sending participants' display names to callstats
|
||||
// enableDisplayNameInStats: false,
|
||||
|
||||
@@ -583,6 +708,9 @@ var config = {
|
||||
},
|
||||
|
||||
analytics: {
|
||||
// True if the analytics should be disabled
|
||||
// disabled: false,
|
||||
|
||||
// The Google Analytics Tracking ID:
|
||||
// googleAnalyticsTrackingId: 'your-tracking-id-UA-123456-1'
|
||||
|
||||
@@ -626,13 +754,40 @@ var config = {
|
||||
// userRegion: "asia"
|
||||
},
|
||||
|
||||
// Array<string> of disabled sounds.
|
||||
// Possible values:
|
||||
// - 'ASKED_TO_UNMUTE_SOUND'
|
||||
// - 'E2EE_OFF_SOUND'
|
||||
// - 'E2EE_ON_SOUND'
|
||||
// - 'INCOMING_MSG_SOUND'
|
||||
// - 'KNOCKING_PARTICIPANT_SOUND'
|
||||
// - 'LIVE_STREAMING_OFF_SOUND'
|
||||
// - 'LIVE_STREAMING_ON_SOUND'
|
||||
// - 'NO_AUDIO_SIGNAL_SOUND'
|
||||
// - 'NOISY_AUDIO_INPUT_SOUND'
|
||||
// - 'OUTGOING_CALL_EXPIRED_SOUND'
|
||||
// - 'OUTGOING_CALL_REJECTED_SOUND'
|
||||
// - 'OUTGOING_CALL_RINGING_SOUND'
|
||||
// - 'OUTGOING_CALL_START_SOUND'
|
||||
// - 'PARTICIPANT_JOINED_SOUND'
|
||||
// - 'PARTICIPANT_LEFT_SOUND'
|
||||
// - 'RAISE_HAND_SOUND'
|
||||
// - 'REACTION_SOUND'
|
||||
// - 'RECORDING_OFF_SOUND'
|
||||
// - 'RECORDING_ON_SOUND'
|
||||
// - 'TALK_WHILE_MUTED_SOUND'
|
||||
// disabledSounds: [],
|
||||
|
||||
// DEPRECATED! Use `disabledSounds` instead.
|
||||
// Decides whether the start/stop recording audio notifications should play on record.
|
||||
// disableRecordAudioNotification: false,
|
||||
|
||||
// DEPRECATED! Use `disabledSounds` instead.
|
||||
// Disables the sounds that play when other participants join or leave the
|
||||
// conference (if set to true, these sounds will not be played).
|
||||
// disableJoinLeaveSounds: false,
|
||||
|
||||
// DEPRECATED! Use `disabledSounds` instead.
|
||||
// Disables the sounds that play when a chat message is received.
|
||||
// disableIncomingMessageSound: false,
|
||||
|
||||
@@ -746,11 +901,19 @@ var config = {
|
||||
// The anchor url used when clicking the logo image
|
||||
logoClickUrl: 'https://example-company.org',
|
||||
// The url used for the image used as logo
|
||||
logoImageUrl: 'https://example.com/logo-img.png'
|
||||
logoImageUrl: 'https://example.com/logo-img.png',
|
||||
// Overwrite for pool of background images for avatars
|
||||
avatarBackgrounds: ['url(https://example.com/avatar-background-1.png)', '#FFF'],
|
||||
// The lobby/prejoin screen background
|
||||
premeetingBackground: 'url(https://example.com/premeeting-background.png)'
|
||||
}
|
||||
*/
|
||||
// dynamicBrandingUrl: '',
|
||||
|
||||
// When true the user cannot add more images to be used as virtual background.
|
||||
// Only the default ones from will be available.
|
||||
// disableAddingBackgroundImages: false,
|
||||
|
||||
// Sets the background transparency level. '0' is fully transparent, '1' is opaque.
|
||||
// backgroundAlpha: 1,
|
||||
|
||||
@@ -762,15 +925,32 @@ var config = {
|
||||
// If true, tile view will not be enabled automatically when the participants count threshold is reached.
|
||||
// disableTileView: true,
|
||||
|
||||
// Controls the visibility and behavior of the top header conference info labels.
|
||||
// If a label's id is not in any of the 2 arrays, it will not be visible at all on the header.
|
||||
// conferenceInfo: {
|
||||
// // those labels will not be hidden in tandem with the toolbox.
|
||||
// alwaysVisible: ['recording', 'local-recording'],
|
||||
// // those labels will be auto-hidden in tandem with the toolbox buttons.
|
||||
// autoHide: [
|
||||
// 'subject',
|
||||
// 'conference-timer',
|
||||
// 'participants-count',
|
||||
// 'e2ee',
|
||||
// 'transcribing',
|
||||
// 'video-quality',
|
||||
// 'insecure-room'
|
||||
// ]
|
||||
// },
|
||||
|
||||
// Hides the conference subject
|
||||
// hideConferenceSubject: true,
|
||||
|
||||
// Hides the recording label
|
||||
// hideRecordingLabel: false,
|
||||
|
||||
// Hides the conference timer.
|
||||
// hideConferenceTimer: true,
|
||||
|
||||
// Hides the recording label
|
||||
// hideRecordingLabel: false,
|
||||
|
||||
// Hides the participants stats
|
||||
// hideParticipantsStats: true,
|
||||
|
||||
@@ -807,6 +987,7 @@ var config = {
|
||||
disableRemoteControl
|
||||
displayJids
|
||||
externalConnectUrl
|
||||
e2eeLabels
|
||||
firefox_fake_device
|
||||
googleApiApplicationClientID
|
||||
iAmRecorder
|
||||
@@ -886,11 +1067,19 @@ var config = {
|
||||
// 'lobby.notificationTitle', // shown when lobby is toggled and when join requests are allowed / denied
|
||||
// 'localRecording.localRecording', // shown when a local recording is started
|
||||
// 'notify.disconnected', // shown when a participant has left
|
||||
// 'notify.connectedOneMember', // show when a participant joined
|
||||
// 'notify.connectedTwoMembers', // show when two participants joined simultaneously
|
||||
// 'notify.connectedThreePlusMembers', // show when more than 2 participants joined simultaneously
|
||||
// 'notify.grantedTo', // shown when moderator rights were granted to a participant
|
||||
// 'notify.invitedOneMember', // shown when 1 participant has been invited
|
||||
// 'notify.invitedThreePlusMembers', // shown when 3+ participants have been invited
|
||||
// 'notify.invitedTwoMembers', // shown when 2 participants have been invited
|
||||
// 'notify.kickParticipant', // shown when a participant is kicked
|
||||
// 'notify.moderationStartedTitle', // shown when AV moderation is activated
|
||||
// 'notify.moderationStoppedTitle', // shown when AV moderation is deactivated
|
||||
// 'notify.moderationInEffectTitle', // shown when user attempts to unmute audio during AV moderation
|
||||
// 'notify.moderationInEffectVideoTitle', // shown when user attempts to enable video during AV moderation
|
||||
// 'notify.moderationInEffectCSTitle', // shown when user attempts to share content during AV moderation
|
||||
// 'notify.mutedRemotelyTitle', // shown when user is muted by a remote party
|
||||
// 'notify.mutedTitle', // shown when user has been muted upon joining,
|
||||
// 'notify.newDeviceAudioTitle', // prompts the user to use a newly detected audio device
|
||||
@@ -899,6 +1088,7 @@ var config = {
|
||||
// 'notify.passwordSetRemotely', // shown when a password has been set remotely
|
||||
// 'notify.raisedHand', // shown when a partcipant used raise hand,
|
||||
// 'notify.startSilentTitle', // shown when user joined with no audio
|
||||
// 'notify.unmute', // shown to moderator when user raises hand during AV moderation
|
||||
// 'prejoin.errorDialOut',
|
||||
// 'prejoin.errorDialOutDisconnected',
|
||||
// 'prejoin.errorDialOutFailed',
|
||||
@@ -917,6 +1107,9 @@ var config = {
|
||||
// Prevent the filmstrip from autohiding when screen width is under a certain threshold
|
||||
// disableFilmstripAutohiding: false,
|
||||
|
||||
// Specifies whether the chat emoticons are disabled or not
|
||||
// disableChatSmileys: false,
|
||||
|
||||
// Allow all above example options to include a trailing comma and
|
||||
// prevent fear when commenting out the last value.
|
||||
makeJsonParserHappy: 'even if last key had a trailing comma'
|
||||
|
||||
@@ -17,6 +17,7 @@ import {
|
||||
JitsiConnectionErrors,
|
||||
JitsiConnectionEvents
|
||||
} from './react/features/base/lib-jitsi-meet';
|
||||
import { getCustomerDetails } from './react/features/jaas/actions.any';
|
||||
import { isVpaasMeeting, getJaasJWT } from './react/features/jaas/functions';
|
||||
import { setPrejoinDisplayNameRequired } from './react/features/prejoin/actions';
|
||||
const logger = Logger.getLogger(__filename);
|
||||
@@ -90,9 +91,13 @@ export async function connect(id, password, roomName) {
|
||||
let { jwt } = state['features/base/jwt'];
|
||||
const { iAmRecorder, iAmSipGateway } = state['features/base/config'];
|
||||
|
||||
if (!iAmRecorder && !iAmSipGateway && !jwt && isVpaasMeeting(state)) {
|
||||
jwt = await getJaasJWT(state);
|
||||
APP.store.dispatch(setJWT(jwt));
|
||||
if (!iAmRecorder && !iAmSipGateway && isVpaasMeeting(state)) {
|
||||
await APP.store.dispatch(getCustomerDetails());
|
||||
|
||||
if (!jwt) {
|
||||
jwt = await getJaasJWT(state);
|
||||
APP.store.dispatch(setJWT(jwt));
|
||||
}
|
||||
}
|
||||
|
||||
// Use Websocket URL for the web app if configured. Note that there is no 'isWeb' check, because there's assumption
|
||||
@@ -101,9 +106,7 @@ export async function connect(id, password, roomName) {
|
||||
|
||||
serviceUrl += `?room=${roomName}`;
|
||||
|
||||
// FIXME Remove deprecated 'bosh' option assignment at some point(LJM will be accepting only 'serviceUrl' option
|
||||
// in future). It's included for the time being for Jitsi Meet and lib-jitsi-meet versions interoperability.
|
||||
connectionConfig.serviceUrl = connectionConfig.bosh = serviceUrl;
|
||||
connectionConfig.serviceUrl = serviceUrl;
|
||||
|
||||
if (connectionConfig.websocketKeepAliveUrl) {
|
||||
connectionConfig.websocketKeepAliveUrl += `?room=${roomName}`;
|
||||
|
||||
@@ -51,8 +51,10 @@ body {
|
||||
}
|
||||
}
|
||||
|
||||
.jitsi-icon svg {
|
||||
fill: white;
|
||||
.jitsi-icon {
|
||||
&-default svg {
|
||||
fill: white;
|
||||
}
|
||||
}
|
||||
|
||||
.disabled .jitsi-icon svg {
|
||||
|
||||
@@ -213,6 +213,7 @@
|
||||
}
|
||||
|
||||
#usermsg {
|
||||
-ms-overflow-style: none;
|
||||
border: 0px none;
|
||||
border-radius:0;
|
||||
box-shadow: none;
|
||||
@@ -221,8 +222,13 @@
|
||||
padding: 10px;
|
||||
overflow-y: auto;
|
||||
resize: none;
|
||||
scrollbar-width: none;
|
||||
width: 100%;
|
||||
word-break: break-word;
|
||||
|
||||
&::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
#usermsg:hover {
|
||||
@@ -574,3 +580,41 @@
|
||||
background: #36383C;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.chat-tabs-container {
|
||||
width: 100%;
|
||||
border-bottom: thin solid #292929;
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
}
|
||||
|
||||
.chat-tab {
|
||||
font-size: 1.2em;
|
||||
padding-bottom: 0.5em;
|
||||
width: 50%;
|
||||
text-align: center;
|
||||
color: #8B8B8B;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.chat-tab-focus {
|
||||
border-bottom-style: solid;
|
||||
color: #FFF;
|
||||
}
|
||||
|
||||
.chat-tab-title {
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
.chat-tab-badge {
|
||||
background-color: #165ecc;
|
||||
border-radius: 50%;
|
||||
box-sizing: border-box;
|
||||
font-weight: 700;
|
||||
overflow: hidden;
|
||||
text-align: center;
|
||||
text-overflow: ellipsis;
|
||||
vertical-align: middle;
|
||||
padding: 0 4px;
|
||||
color: #FFF;
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
max-height: calc(80vh - 64px);
|
||||
background: #242528;
|
||||
border-radius: 16px 16px 0 0;
|
||||
overflow-y: hidden;
|
||||
overflow-y: scroll;
|
||||
margin-bottom: env(safe-area-inset-bottom, 0);
|
||||
width: 100%;
|
||||
|
||||
|
||||
@@ -5,14 +5,6 @@
|
||||
.description {
|
||||
font-size: 13px;
|
||||
margin: 15px 0;
|
||||
|
||||
.read-more {
|
||||
cursor: pointer;
|
||||
opacity: .9;
|
||||
color: #fff;
|
||||
font-size: 0.8rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
|
||||
.control-row {
|
||||
|
||||
@@ -206,13 +206,3 @@
|
||||
bottom: 0;
|
||||
width: 35%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resizes elements width to fill the whole screen width with some margin
|
||||
*/
|
||||
@mixin adjust-for-max-width($width, $margin) {
|
||||
@media (max-width: $width) {
|
||||
margin: 0 $margin;
|
||||
width: $width - 2 * $margin;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
margin: 8px 16px 8px 0;
|
||||
}
|
||||
|
||||
@media (max-width: 375px) {
|
||||
@media (max-width: 580px) {
|
||||
.participants_pane {
|
||||
height: 100vh;
|
||||
height: -webkit-fill-available;
|
||||
@@ -48,4 +48,11 @@
|
||||
.participants_pane-content {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.jitsi-icon {
|
||||
&-dominant-speaker {
|
||||
background-color: #1EC26A;
|
||||
border-radius: 3px;
|
||||
}
|
||||
}
|
||||
|
||||
448
css/_polls.scss
Normal file
448
css/_polls.scss
Normal file
@@ -0,0 +1,448 @@
|
||||
.poll-dialog {
|
||||
font-size: 1rem;
|
||||
|
||||
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 {
|
||||
padding: 8px 16px;
|
||||
}
|
||||
|
||||
.poll-answer-container{
|
||||
padding: 8px;
|
||||
background: #3D3D3D;
|
||||
border-radius: 3px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.poll-answer-field-list, .poll-answer-list, .poll-result-list {
|
||||
list-style-type: none;
|
||||
padding: 0 16px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
ol.poll-result-list {
|
||||
margin-bottom: 1.5em;
|
||||
}
|
||||
|
||||
.poll-result-list > li {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
|
||||
// Needeed to override atlaskit default blue color
|
||||
.poll-create-container .jsYMHu {
|
||||
background: #292929;
|
||||
border-color: #808090;
|
||||
color: white // #808090
|
||||
}
|
||||
|
||||
.poll-add-button {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
padding: 8px 16px;
|
||||
}
|
||||
|
||||
.poll-remove-option-button {
|
||||
background: 0 0;
|
||||
border: none;
|
||||
color: #8B8B8B;
|
||||
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: #bce;
|
||||
}
|
||||
}
|
||||
|
||||
.poll-drag-handle {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
cursor: grab;
|
||||
padding-left: 8;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.poll-dragged {
|
||||
opacity: 0.5;
|
||||
* {
|
||||
cursor: grabbing !important;
|
||||
}
|
||||
}
|
||||
|
||||
.poll-question {
|
||||
font-size: 1.2em;
|
||||
font-weight: 600;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
.poll-answer-voters {
|
||||
font-size: 1em;
|
||||
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: #246FE5;
|
||||
cursor: pointer;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.polls-pane-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
font-weight: 600;
|
||||
height: 85%;
|
||||
align-items: stretch;
|
||||
}
|
||||
|
||||
.pane-content{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.empty-pane-icon {
|
||||
width: 50%;
|
||||
padding: 24px;
|
||||
}
|
||||
|
||||
.empty-pane-icon svg {
|
||||
fill: #3D3D3D;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.empty-pane-message {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.poll-results {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.poll-answer {
|
||||
h1, strong ,span {
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
|
||||
.poll-results, .poll-answer {
|
||||
margin-bottom: 16px;
|
||||
background: #292929;
|
||||
border-radius: 8px;
|
||||
padding: 12px 8px;
|
||||
border-width: thin;
|
||||
border-style: solid;
|
||||
border-color: #616161;
|
||||
}
|
||||
|
||||
.poll-create-label {
|
||||
color: white;
|
||||
margin-bottom: 4;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.expandable-input{
|
||||
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;
|
||||
}
|
||||
|
||||
.poll-container {
|
||||
box-sizing: border-box;
|
||||
flex: 1;
|
||||
overflow-y: auto;
|
||||
position: relative;
|
||||
padding: 16px;
|
||||
|
||||
& > * + *:not(.ignore-child) {
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
&::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.poll-create-header {
|
||||
font-size: 20px;
|
||||
margin: 20px 16px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.poll-create-container {
|
||||
padding: 8px 0;
|
||||
}
|
||||
|
||||
.poll-footer {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
padding: 8px 16px;
|
||||
height: 40px;
|
||||
align-items: stretch;
|
||||
|
||||
& > *:not(:last-child) {
|
||||
margin-right: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
.poll-primary-button {
|
||||
align-items: center;
|
||||
background-color: #0056E0;
|
||||
border: 0;
|
||||
border-radius: 6px;
|
||||
display: flex;
|
||||
font-weight: unset;
|
||||
justify-content: center;
|
||||
font-size: 15px;
|
||||
flex: 1;
|
||||
|
||||
&:hover {
|
||||
background-color: #246FE5;
|
||||
}
|
||||
|
||||
&:active {
|
||||
background-color: #0045B3;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
background-color: #0045B3;
|
||||
border: 3px solid #99BBF3;
|
||||
}
|
||||
|
||||
&:disabled {
|
||||
background-color: #00225A;
|
||||
color: #858585;
|
||||
}
|
||||
|
||||
& > *:not(:last-child) {
|
||||
margin-right: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
.poll-secondary-button {
|
||||
align-items: center;
|
||||
background-color: #3D3D3D;
|
||||
border: 0;
|
||||
border-radius: 6px;
|
||||
display: flex;
|
||||
font-weight: unset;
|
||||
justify-content: center;
|
||||
font-size: 15px;
|
||||
height: 40px;
|
||||
width: 100%;
|
||||
|
||||
&:hover {
|
||||
background-color: #525252;
|
||||
}
|
||||
|
||||
&:active {
|
||||
background-color: #292929;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
background-color: #292929;
|
||||
border: 3px solid #858585;
|
||||
}
|
||||
|
||||
&:disabled {
|
||||
background-color: #141414;
|
||||
color: #858585;
|
||||
}
|
||||
|
||||
& > *:not(:last-child) {
|
||||
margin-right: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
.poll-small-primary-button {
|
||||
align-items: center;
|
||||
background-color: #0056E0;
|
||||
border: 0;
|
||||
border-radius: 6px;
|
||||
display: flex;
|
||||
font-weight: unset;
|
||||
justify-content: center;
|
||||
font-size: 15px;
|
||||
height: 40px;
|
||||
width: 50%;
|
||||
|
||||
&:hover {
|
||||
background-color: #246FE5;
|
||||
}
|
||||
|
||||
&:active {
|
||||
background-color: #0045B3;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
background-color: #0045B3;
|
||||
border: 3px solid #99BBF3;
|
||||
}
|
||||
|
||||
&:disabled {
|
||||
background-color: #00225A;
|
||||
color: #858585;
|
||||
}
|
||||
|
||||
& > *:not(:last-child) {
|
||||
margin-right: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
.poll-small-secondary-button {
|
||||
align-items: center;
|
||||
background-color: #3D3D3D;
|
||||
border: 0;
|
||||
border-radius: 6px;
|
||||
display: flex;
|
||||
font-weight: unset;
|
||||
justify-content: center;
|
||||
font-size: 15px;
|
||||
height: 40px;
|
||||
width: 50%;
|
||||
|
||||
&:hover {
|
||||
background-color: #525252;
|
||||
}
|
||||
|
||||
&:active {
|
||||
background-color: #292929;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
background-color: #292929;
|
||||
border: 3px solid #858585;
|
||||
}
|
||||
|
||||
&:disabled {
|
||||
background-color: #141414;
|
||||
color: #858585;
|
||||
}
|
||||
|
||||
& > *:not(:last-child) {
|
||||
margin-right: 8px;
|
||||
}
|
||||
}
|
||||
@@ -1,153 +0,0 @@
|
||||
.prejoin {
|
||||
|
||||
&-input-area {
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
|
||||
&-label {
|
||||
display: block;
|
||||
margin-bottom: 5px;
|
||||
color: #ffffff;
|
||||
font-weight: 300;
|
||||
font-size: 15px;
|
||||
line-height: 24px;
|
||||
}
|
||||
}
|
||||
|
||||
&-title {
|
||||
color: #fff;
|
||||
font-size: 24px;
|
||||
line-height: 32px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
&-text-btns {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
&-input-label {
|
||||
color: #A4B8D1;
|
||||
font-size: 13px;
|
||||
line-height: 20px;
|
||||
margin-top: 32px 0 8px 0;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
&-checkbox {
|
||||
border: 0;
|
||||
height: 16px;
|
||||
margin-right: 8px;
|
||||
padding: 0;
|
||||
width: 16px;
|
||||
}
|
||||
|
||||
&-checkbox-container {
|
||||
margin-bottom: 14px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
&-error {
|
||||
color: white;
|
||||
background-color: rgba(225, 45, 45, 0.6);
|
||||
border-radius: 3px;
|
||||
width: 100%;
|
||||
padding: 2px;
|
||||
box-sizing: border-box;
|
||||
margin-top: 4px;
|
||||
font-size: 13px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin name-placeholder {
|
||||
color: #fff;
|
||||
font-weight: 300;
|
||||
opacity: 0.6;
|
||||
}
|
||||
|
||||
.prejoin-preview {
|
||||
&-status {
|
||||
align-items: center;
|
||||
align-self: stretch;
|
||||
bottom: 0;
|
||||
color: #fff;
|
||||
display: flex;
|
||||
font-size: 13px;
|
||||
min-height: 24px;
|
||||
justify-content: center;
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
z-index: 1;
|
||||
|
||||
&--warning {
|
||||
background: rgba(241, 173, 51, 1);
|
||||
}
|
||||
&--ok {
|
||||
background: rgba(49, 183, 106, 1);
|
||||
}
|
||||
}
|
||||
|
||||
&-icon {
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
display: inline-block;
|
||||
height: 16px;
|
||||
margin-right: 8px;
|
||||
width: 16px;
|
||||
}
|
||||
|
||||
&-error-desc {
|
||||
margin-right: 4px;
|
||||
color: #fff;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.settings-button-container {
|
||||
width: 49px;
|
||||
margin: 0 8px;
|
||||
}
|
||||
|
||||
&-dropdown-btns {
|
||||
width: 320px;
|
||||
padding: 8px 0;
|
||||
|
||||
@include adjust-for-max-width(320px, 8px);
|
||||
}
|
||||
|
||||
&-dropdown-btn {
|
||||
align-items: center;
|
||||
color: #1C2025;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
height: 40px;
|
||||
font-size: 15px;
|
||||
line-height: 24px;
|
||||
padding: 0 16px;
|
||||
|
||||
&:hover {
|
||||
background-color: #DAEBFA;
|
||||
}
|
||||
}
|
||||
|
||||
&-dropdown-icon {
|
||||
display: inline-block;
|
||||
margin-right: 16px;
|
||||
|
||||
& > svg {
|
||||
fill: #1C2025;
|
||||
}
|
||||
}
|
||||
|
||||
&-dropdown-container {
|
||||
margin-top: 16px;
|
||||
|
||||
& > div:nth-child(2) {
|
||||
background: #fff;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,298 +0,0 @@
|
||||
/**
|
||||
* Shared style for full screen local track based dialogs/modals.
|
||||
*/
|
||||
.premeeting-screen {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
.premeeting-screen {
|
||||
align-items: stretch;
|
||||
background: radial-gradient(50% 50% at 50% 50%, #2A3A4B 20.83%, #1E2A36 100%);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
font-size: 1.3em;
|
||||
z-index: $toolbarZ + 1;
|
||||
|
||||
&-avatar {
|
||||
background-color: #A4B8D1;
|
||||
margin-bottom: 24px;
|
||||
|
||||
text {
|
||||
fill: black;
|
||||
font-size: 26px;
|
||||
font-weight: 400;
|
||||
}
|
||||
}
|
||||
|
||||
.action-btn {
|
||||
border-radius: 3px;
|
||||
box-sizing: border-box;
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
font-size: 15px;
|
||||
line-height: 24px;
|
||||
padding: 7px 16px;
|
||||
position: relative;
|
||||
text-align: center;
|
||||
width: 320px;
|
||||
|
||||
@include adjust-for-max-width(320px, 8px);
|
||||
|
||||
&.primary {
|
||||
background: #0376DA;
|
||||
border: 1px solid #0376DA;
|
||||
}
|
||||
|
||||
&.secondary {
|
||||
background: transparent;
|
||||
border: 1px solid #5E6D7A;
|
||||
}
|
||||
|
||||
&.text {
|
||||
width: auto;
|
||||
font-size: 13px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
&.disabled {
|
||||
background: #5E6D7A;
|
||||
border: 1px solid #5E6D7A;
|
||||
color: #AFB6BC;
|
||||
cursor: initial;
|
||||
|
||||
.icon {
|
||||
& > svg {
|
||||
fill: #AFB6BC;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.options {
|
||||
border-radius: 3px;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
height: 100%;
|
||||
justify-content: center;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
width: 36px;
|
||||
|
||||
&:hover {
|
||||
background-color: #0262B6;
|
||||
}
|
||||
|
||||
svg {
|
||||
pointer-events: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.content {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex: 1;
|
||||
flex-direction: column;
|
||||
justify-content: flex-end;
|
||||
padding-bottom: 24px;
|
||||
z-index: $toolbarZ + 2;
|
||||
|
||||
.title {
|
||||
color: #fff;
|
||||
font-size: 24px;
|
||||
line-height: 32px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.copy-meeting {
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
color: #fff;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
font-size: 15px;
|
||||
font-weight: 300;
|
||||
justify-content: center;
|
||||
line-height: 24px;
|
||||
margin-bottom: 16px;
|
||||
|
||||
.url {
|
||||
background: rgba(28, 32, 37, 0.5);
|
||||
border-radius: 4px;
|
||||
display: flex;
|
||||
padding: 8px 10px;
|
||||
transition: background 0.16s ease-out;
|
||||
|
||||
&:hover {
|
||||
background: #1C2025;
|
||||
}
|
||||
|
||||
&.done {
|
||||
background: #31B76A;
|
||||
}
|
||||
|
||||
.jitsi-icon {
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
.copy-button{
|
||||
width: 298px;
|
||||
}
|
||||
|
||||
.copy-meeting-text {
|
||||
width: 266px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
align-self: stretch;
|
||||
}
|
||||
|
||||
textarea {
|
||||
border-width: 0;
|
||||
height: 0;
|
||||
opacity: 0;
|
||||
padding: 0;
|
||||
width: 0;
|
||||
}
|
||||
}
|
||||
|
||||
input.field {
|
||||
background-color: white;
|
||||
border: none;
|
||||
outline: none;
|
||||
border-radius: 3px;
|
||||
font-size: 15px;
|
||||
line-height: 24px;
|
||||
color: #1C2025;
|
||||
padding: 8px 0;
|
||||
text-align: center;
|
||||
width: 320px;
|
||||
|
||||
@include adjust-for-max-width(320px, 8px);
|
||||
|
||||
&.error {
|
||||
box-shadow: 0px 0px 4px 3px rgba(225, 45, 45, 0.4);
|
||||
}
|
||||
|
||||
&.focused {
|
||||
box-shadow: 0px 0px 1px 1.5px black, 0px 0px 1.3px 4px white;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.media-btn-container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
margin: 24px 0 16px 0;
|
||||
width: 100%;
|
||||
|
||||
&> div {
|
||||
margin: 0 12px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#preview {
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
|
||||
&.no-video {
|
||||
background: radial-gradient(50% 50% at 50% 50%, #5B6F80 0%, #365067 100%), #FFFFFF;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.avatar {
|
||||
background: #A4B8D1;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
video {
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin flex-centered() {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
@mixin icon-container($bg, $fill) {
|
||||
.toggle-button-icon-container {
|
||||
background: $bg;
|
||||
|
||||
svg {
|
||||
fill: $fill
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.toggle-button {
|
||||
border-radius: 3px;
|
||||
cursor: pointer;
|
||||
color: #fff;
|
||||
font-size: 13px;
|
||||
height: 40px;
|
||||
margin: 0 auto;
|
||||
transition: background 0.16s ease-out;
|
||||
width: 320px;
|
||||
|
||||
@include adjust-for-max-width(320px, 8px);
|
||||
@include flex-centered();
|
||||
|
||||
svg {
|
||||
fill: transparent;
|
||||
}
|
||||
|
||||
label {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
|
||||
.toggle-button-icon-container {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
&-container {
|
||||
position: relative;
|
||||
|
||||
@include flex-centered();
|
||||
}
|
||||
|
||||
&-icon-container {
|
||||
border-radius: 50%;
|
||||
left: -22px;
|
||||
padding: 2px;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
&--toggled {
|
||||
@include icon-container(white, #1C2025);
|
||||
|
||||
&:hover {
|
||||
.toggle-button-icon-container {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
.toggle-button-icon-container {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
.reactions-menu {
|
||||
width: 280px;
|
||||
background: #292929;
|
||||
background: $menuBG;
|
||||
box-shadow: 0px 3px 16px rgba(0, 0, 0, 0.6), 0px 0px 4px 1px rgba(0, 0, 0, 0.25);
|
||||
border-radius: 3px;
|
||||
padding: 16px;
|
||||
@@ -48,6 +48,13 @@
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
transition: font-size ease .1s;
|
||||
|
||||
@for $i from 1 through 12 {
|
||||
&.increase-#{$i}{
|
||||
font-size: calc(20px + #{$i}px);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,54 +1,22 @@
|
||||
.subject {
|
||||
box-sizing: border-box;
|
||||
color: #fff;
|
||||
margin-top: 20px;
|
||||
position: absolute;
|
||||
top: -120px;
|
||||
transition: top .3s ease-in;
|
||||
width: 100%;
|
||||
margin-top: -120px;
|
||||
transition: margin-top .3s ease-in;
|
||||
z-index: $zindex3;
|
||||
|
||||
&.visible {
|
||||
top: 0;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
&.recording {
|
||||
top: 0;
|
||||
|
||||
.subject-details-container {
|
||||
opacity: 0;
|
||||
transition: opacity .3s ease-in;
|
||||
}
|
||||
|
||||
.subject-info-container .show-always {
|
||||
transition: margin-left .3s ease-in;
|
||||
}
|
||||
|
||||
&.visible {
|
||||
.subject-details-container {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.subject-details-container {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.subject-info-container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
max-width: calc(100% - 280px);
|
||||
margin: 0 auto;
|
||||
|
||||
&--full-width {
|
||||
max-width: 100%;
|
||||
}
|
||||
height: 28px;
|
||||
|
||||
@media (max-width: 500px) {
|
||||
flex-wrap: wrap;
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,21 +31,51 @@
|
||||
.subject-text {
|
||||
background: rgba(0, 0, 0, 0.6);
|
||||
border-radius: 3px 0px 0px 3px;
|
||||
box-sizing: border-box;
|
||||
font-size: 14px;
|
||||
line-height: 24px;
|
||||
padding: 2px 16px;
|
||||
height: 24px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
line-height: 28px;
|
||||
padding: 0 16px;
|
||||
height: 28px;
|
||||
|
||||
@media (max-width: 700px) {
|
||||
max-width: 100px;
|
||||
}
|
||||
|
||||
@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;
|
||||
display: inline-block;
|
||||
box-sizing: border-box;
|
||||
font-size: 12px;
|
||||
line-height: 16px;
|
||||
line-height: 28px;
|
||||
min-width: 34px;
|
||||
padding: 6px 8px;
|
||||
padding: 0 8px;
|
||||
height: 28px;
|
||||
|
||||
@media (max-width: 300px) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.details-container {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
height: 48px;
|
||||
}
|
||||
|
||||
.shift-right .details-container {
|
||||
margin-left: calc(#{$sidebarWidth} / 2);
|
||||
}
|
||||
|
||||
@@ -334,7 +334,7 @@
|
||||
border-radius: 0;
|
||||
display: flex;
|
||||
justify-content: space-evenly;
|
||||
padding: 6px 0;
|
||||
padding: 8px 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
|
||||
@@ -264,3 +264,9 @@ $chromeExtensionBannerRightInMeeeting: 10px;
|
||||
*/
|
||||
$smallScreen: 700px;
|
||||
$verySmallScreen: 500px;
|
||||
|
||||
/**
|
||||
* Prejoin / premeeting screen
|
||||
*/
|
||||
|
||||
$prejoinDefaultContentWidth: 336px;
|
||||
@@ -84,6 +84,10 @@
|
||||
margin-bottom: 3px;
|
||||
margin-left: $remoteVideoMenuIconMargin;
|
||||
}
|
||||
|
||||
.self-view-mobile-portrait video {
|
||||
object-fit: contain;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -112,3 +116,11 @@
|
||||
transition-delay: 0.1s;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides for self view when in portrait mode on mobile.
|
||||
* This is done in order to keep the aspect ratio.
|
||||
*/
|
||||
.vertical-filmstrip .self-view-mobile-portrait #localVideo_container {
|
||||
object-fit: contain;
|
||||
}
|
||||
|
||||
@@ -79,7 +79,6 @@ $flagsImagePath: "../images/";
|
||||
@import 'filmstrip/vertical_filmstrip';
|
||||
@import 'filmstrip/vertical_filmstrip_overrides';
|
||||
@import 'labels';
|
||||
@import 'lobby';
|
||||
@import 'unsupported-browser/main';
|
||||
@import 'modals/invite/add-people';
|
||||
@import 'deep-linking/main';
|
||||
@@ -95,18 +94,17 @@ $flagsImagePath: "../images/";
|
||||
@import 'meter';
|
||||
@import 'audio-preview';
|
||||
@import 'video-preview';
|
||||
@import 'prejoin';
|
||||
@import 'prejoin-dialog';
|
||||
@import 'premeeting/main';
|
||||
@import 'country-picker';
|
||||
@import 'modals/invite/invite_more';
|
||||
@import 'modals/security/security';
|
||||
@import 'premeeting-screens';
|
||||
@import 'modals/mute/mute-dialog';
|
||||
@import 'e2ee';
|
||||
@import 'responsive';
|
||||
@import 'connection-status';
|
||||
@import 'drawer';
|
||||
@import 'participants-pane';
|
||||
@import 'reactions-menu';
|
||||
@import 'plan-limit';
|
||||
@import 'polls';
|
||||
|
||||
/* Modules END */
|
||||
|
||||
19
css/modals/mute/_mute-dialog.scss
Normal file
19
css/modals/mute/_mute-dialog.scss
Normal file
@@ -0,0 +1,19 @@
|
||||
.mute-dialog {
|
||||
.separator-line {
|
||||
margin: 24px 0 24px -20px;
|
||||
padding: 0 20px;
|
||||
width: 100%;
|
||||
height: 1px;
|
||||
background: #5E6D7A;
|
||||
}
|
||||
|
||||
.control-row {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 15px;
|
||||
|
||||
label {
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,32 +1,24 @@
|
||||
.con-status {
|
||||
border-radius: 6px;
|
||||
color: #fff;
|
||||
font-size: 12px;
|
||||
letter-spacing: 0.16px;
|
||||
line-height: 16px;
|
||||
position: absolute;
|
||||
top: 24px;
|
||||
width: 100%;
|
||||
z-index: $toolbarZ + 3;
|
||||
|
||||
&-container {
|
||||
border-radius: 3px;
|
||||
color: #fff;
|
||||
font-size: 13px;
|
||||
line-height: 13px;
|
||||
margin: 0 auto;
|
||||
width: 320px;
|
||||
|
||||
@include adjust-for-max-width(320px, 8px);
|
||||
}
|
||||
|
||||
&-header {
|
||||
background: rgba(28, 32, 37, .5);
|
||||
background-color: rgba(0, 0, 0, 0.7);
|
||||
align-items: center;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: 14px 16px;
|
||||
}
|
||||
|
||||
&-circle {
|
||||
border-radius: 50%;
|
||||
display: inline-block;
|
||||
padding: 4px;
|
||||
margin: 8px;
|
||||
margin-right: 16px;
|
||||
}
|
||||
|
||||
&--good {
|
||||
@@ -42,14 +34,7 @@
|
||||
}
|
||||
|
||||
&-arrow {
|
||||
height: 36px;
|
||||
width: 36px;
|
||||
border-radius: 3px;
|
||||
margin-left: 8px;
|
||||
margin-right: 2px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-left: auto;
|
||||
transition: background-color 0.16s ease-out;
|
||||
|
||||
&--up {
|
||||
@@ -70,7 +55,7 @@
|
||||
}
|
||||
|
||||
&-details {
|
||||
background: rgba(28, 32, 37, .5);
|
||||
background-color: rgba(0, 0, 0, 0.7);
|
||||
border-top: 1px solid #5E6D7A;
|
||||
padding: 16px;
|
||||
transition: opacity 0.16s ease-out;
|
||||
38
css/premeeting/_device-status.scss
Normal file
38
css/premeeting/_device-status.scss
Normal file
@@ -0,0 +1,38 @@
|
||||
.device {
|
||||
&-status {
|
||||
align-items: center;
|
||||
color: #fff;
|
||||
display: flex;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
padding: 6px;
|
||||
text-align: center;
|
||||
|
||||
&-error {
|
||||
align-items: flex-start;
|
||||
background-color: #F8AE1A;
|
||||
border-radius: 6px;
|
||||
color: #040404;
|
||||
padding: 12px 16px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
span {
|
||||
margin-left: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
&-icon {
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
display: inline-block;
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
|
||||
&--ok {
|
||||
svg path {
|
||||
fill: #189b55;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,18 +1,21 @@
|
||||
#lobby-screen {
|
||||
.content {
|
||||
.lobby-screen {
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
line-height: 26px;
|
||||
|
||||
.container {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
&-content {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
.spinner {
|
||||
margin: 30px;
|
||||
}
|
||||
.spinner {
|
||||
margin: 8px;
|
||||
}
|
||||
|
||||
.joining-message {
|
||||
margin: 10px;
|
||||
}
|
||||
.joining-message {
|
||||
color: white;
|
||||
margin: 24px auto;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -51,6 +54,10 @@
|
||||
top: 30px;
|
||||
z-index: $toolbarZ + 1;
|
||||
|
||||
&:empty {
|
||||
border: none;
|
||||
}
|
||||
|
||||
&.toolbox-visible {
|
||||
// Same as toolbox subject position
|
||||
top: 120px;
|
||||
@@ -64,7 +71,7 @@
|
||||
|
||||
button {
|
||||
align-self: stretch;
|
||||
margin: 8px 0;
|
||||
margin-bottom: 8px 0;
|
||||
padding: 12px;
|
||||
transition: .2s transform ease;
|
||||
|
||||
7
css/premeeting/_main.scss
Normal file
7
css/premeeting/_main.scss
Normal file
@@ -0,0 +1,7 @@
|
||||
@import 'connection-status';
|
||||
@import 'device-status';
|
||||
@import 'lobby';
|
||||
@import 'premeeting-screens';
|
||||
@import 'prejoin';
|
||||
@import 'prejoin-dialog';
|
||||
@import 'prejoin-third-party';
|
||||
40
css/premeeting/_prejoin-third-party.scss
Normal file
40
css/premeeting/_prejoin-third-party.scss
Normal file
@@ -0,0 +1,40 @@
|
||||
$sidePanelWidth: 300px;
|
||||
|
||||
.prejoin-third-party {
|
||||
flex-direction: column-reverse;
|
||||
|
||||
.content {
|
||||
height: auto;
|
||||
margin: 0 auto;
|
||||
width: auto;
|
||||
|
||||
.new-toolbox {
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
|
||||
#preview {
|
||||
background-color: transparent;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
|
||||
.avatar {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
&.splash {
|
||||
.content {
|
||||
margin-left: calc((100% - #{$prejoinDefaultContentWidth} + #{$sidePanelWidth}) / 2)
|
||||
}
|
||||
}
|
||||
|
||||
&.guest {
|
||||
.content {
|
||||
margin-bottom: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
68
css/premeeting/_prejoin.scss
Normal file
68
css/premeeting/_prejoin.scss
Normal file
@@ -0,0 +1,68 @@
|
||||
.prejoin {
|
||||
&-input-area {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
&-error {
|
||||
background-color: #E04757;
|
||||
border-radius: 6px;
|
||||
box-sizing: border-box;
|
||||
color: white;
|
||||
font-size: 12px;
|
||||
line-height: 16px;
|
||||
margin-bottom: 16px;
|
||||
margin-top: -8px;
|
||||
padding: 4px;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.prejoin-preview {
|
||||
&-dropdown-btns {
|
||||
padding: 8px 0;
|
||||
width: calc(100% - 48px);
|
||||
}
|
||||
|
||||
&-dropdown-btn {
|
||||
align-items: center;
|
||||
color: #1C2025;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
height: 40px;
|
||||
font-size: 15px;
|
||||
line-height: 24px;
|
||||
padding: 0 16px;
|
||||
|
||||
&:hover {
|
||||
background-color: #DAEBFA;
|
||||
}
|
||||
}
|
||||
|
||||
&-dropdown-icon {
|
||||
display: inline-block;
|
||||
margin-right: 16px;
|
||||
|
||||
& > svg {
|
||||
fill: #1C2025;
|
||||
}
|
||||
}
|
||||
|
||||
&-dropdown-container {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
|
||||
/**
|
||||
* Override default InlineDialog behaviour, since it does not play nicely with relative widths
|
||||
*/
|
||||
& > div:nth-child(2) {
|
||||
background: #fff;
|
||||
padding: 0;
|
||||
position: absolute !important;
|
||||
top: 48px !important;
|
||||
transform: none !important;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
245
css/premeeting/_premeeting-screens.scss
Normal file
245
css/premeeting/_premeeting-screens.scss
Normal file
@@ -0,0 +1,245 @@
|
||||
.premeeting-screen {
|
||||
background: #292929;
|
||||
bottom: 0;
|
||||
display: flex;
|
||||
font-size: 1.3em;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
z-index: $toolbarZ + 1;
|
||||
|
||||
.action-btn {
|
||||
border-radius: 6px;
|
||||
box-sizing: border-box;
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
line-height: 24px;
|
||||
margin-bottom: 16px;
|
||||
padding: 7px 16px;
|
||||
position: relative;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
|
||||
&.primary {
|
||||
background: #0376DA;
|
||||
border: 1px solid #0376DA;
|
||||
}
|
||||
|
||||
&.secondary {
|
||||
background: #3D3D3D;
|
||||
border: 1px solid transparent;
|
||||
}
|
||||
|
||||
&.text {
|
||||
width: auto;
|
||||
font-size: 13px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
&.disabled {
|
||||
background: #5E6D7A;
|
||||
border: 1px solid #5E6D7A;
|
||||
color: #AFB6BC;
|
||||
cursor: initial;
|
||||
|
||||
.icon {
|
||||
& > svg {
|
||||
fill: #AFB6BC;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.options {
|
||||
border-radius: 3px;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
height: 100%;
|
||||
justify-content: center;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
width: 36px;
|
||||
|
||||
&:hover {
|
||||
background-color: #0262B6;
|
||||
}
|
||||
|
||||
svg {
|
||||
pointer-events: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.content {
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex-shrink: 0;
|
||||
height: 100%;
|
||||
margin: 0 110px;
|
||||
padding: 24px 0 16px;
|
||||
position: relative;
|
||||
width: $prejoinDefaultContentWidth;
|
||||
z-index: $toolbarZ + 2;
|
||||
|
||||
&-controls {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
margin: auto;
|
||||
width: 100%;
|
||||
|
||||
.title {
|
||||
color: #fff;
|
||||
font-size: 28px;
|
||||
font-weight: 600;
|
||||
letter-spacing: -0.015;
|
||||
line-height: 36px;
|
||||
margin-bottom: 32px;
|
||||
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 {
|
||||
background: transparent;
|
||||
border-radius: 0;
|
||||
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: 1000px) {
|
||||
flex-direction: column-reverse;
|
||||
|
||||
.content {
|
||||
height: auto;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.con-status {
|
||||
margin: 24px auto;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
width: $prejoinDefaultContentWidth;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 400px) {
|
||||
.content {
|
||||
padding: 16px;
|
||||
width: 100%;
|
||||
|
||||
&-controls {
|
||||
input.field {
|
||||
font-size: 16px;
|
||||
padding: 14px 16px;
|
||||
}
|
||||
}
|
||||
|
||||
.title {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.con-status {
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.device-status-error {
|
||||
border-radius: 0;
|
||||
margin: 0 -16px;
|
||||
}
|
||||
|
||||
input.field {
|
||||
font-size: 16px;
|
||||
padding: 14px 16px;
|
||||
}
|
||||
|
||||
.action-btn {
|
||||
font-size: 16px;
|
||||
margin-bottom: 8px;
|
||||
padding: 11px 16px;
|
||||
}
|
||||
}
|
||||
|
||||
input::placeholder {
|
||||
color: #040404;
|
||||
}
|
||||
}
|
||||
|
||||
#preview {
|
||||
background: #040404;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
|
||||
.avatar {
|
||||
text {
|
||||
fill: white;
|
||||
font-size: 26px;
|
||||
font-weight: 400;
|
||||
}
|
||||
}
|
||||
|
||||
video {
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin flex-centered() {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
2
debian/control
vendored
2
debian/control
vendored
@@ -33,7 +33,7 @@ Description: Configuration for web serving of Jitsi Meet
|
||||
|
||||
Package: jitsi-meet-prosody
|
||||
Architecture: all
|
||||
Depends: openssl, prosody | prosody-trunk | prosody-0.11, lua-sec
|
||||
Depends: openssl, prosody (>= 0.11.0) | prosody-trunk | prosody-0.11, lua-sec
|
||||
Replaces: jitsi-meet-tokens
|
||||
Description: Prosody configuration for Jitsi Meet
|
||||
Jitsi Meet is a WebRTC JavaScript application that uses Jitsi
|
||||
|
||||
@@ -65,6 +65,7 @@ Component "conference.jitmeet.example.com" "muc"
|
||||
modules_enabled = {
|
||||
"muc_meeting_id";
|
||||
"muc_domain_mapper";
|
||||
"polls";
|
||||
--"token_verification";
|
||||
}
|
||||
admins = { "focusUser@auth.jitmeet.example.com" }
|
||||
|
||||
10
index.html
10
index.html
@@ -25,8 +25,16 @@
|
||||
Component: JitsiMeetJS.app.entryPoints.APP
|
||||
})
|
||||
|
||||
const inIframe = () => {
|
||||
try {
|
||||
return window.self !== window.top;
|
||||
} catch (e) {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
const isElectron = navigator.userAgent.includes('Electron');
|
||||
const shouldRegisterWorker = !isElectron && 'serviceWorker' in navigator;
|
||||
const shouldRegisterWorker = !isElectron && !inIframe() && 'serviceWorker' in navigator;
|
||||
|
||||
if (shouldRegisterWorker) {
|
||||
navigator.serviceWorker
|
||||
|
||||
@@ -25,31 +25,6 @@ var interfaceConfig = {
|
||||
BRAND_WATERMARK_LINK: '',
|
||||
|
||||
CLOSE_PAGE_GUEST_HINT: false, // A html text to be shown to guests on the close page, false disables it
|
||||
/**
|
||||
* Whether the connection indicator icon should hide itself based on
|
||||
* connection strength. If true, the connection indicator will remain
|
||||
* displayed while the participant has a weak connection and will hide
|
||||
* itself after the CONNECTION_INDICATOR_HIDE_TIMEOUT when the connection is
|
||||
* strong.
|
||||
*
|
||||
* @type {boolean}
|
||||
*/
|
||||
CONNECTION_INDICATOR_AUTO_HIDE_ENABLED: true,
|
||||
|
||||
/**
|
||||
* How long the connection indicator should remain displayed before hiding.
|
||||
* Used in conjunction with CONNECTION_INDICATOR_AUTOHIDE_ENABLED.
|
||||
*
|
||||
* @type {number}
|
||||
*/
|
||||
CONNECTION_INDICATOR_AUTO_HIDE_TIMEOUT: 5000,
|
||||
|
||||
/**
|
||||
* If true, hides the connection indicators completely.
|
||||
*
|
||||
* @type {boolean}
|
||||
*/
|
||||
CONNECTION_INDICATOR_DISABLED: false,
|
||||
|
||||
DEFAULT_BACKGROUND: '#474747',
|
||||
DEFAULT_LOCAL_DISPLAY_NAME: 'me',
|
||||
@@ -59,8 +34,6 @@ var interfaceConfig = {
|
||||
|
||||
DISABLE_DOMINANT_SPEAKER_INDICATOR: false,
|
||||
|
||||
DISABLE_FOCUS_INDICATOR: false,
|
||||
|
||||
/**
|
||||
* If true, notifications regarding joining/leaving are no longer displayed.
|
||||
*/
|
||||
@@ -116,7 +89,6 @@ var interfaceConfig = {
|
||||
*/
|
||||
HIDE_INVITE_MORE_HEADER: false,
|
||||
|
||||
INITIAL_TOOLBAR_TIMEOUT: 20000,
|
||||
JITSI_WATERMARK_LINK: 'https://jitsi.org',
|
||||
|
||||
LANG_DETECTION: true, // Allow i18n to detect the system language
|
||||
@@ -185,10 +157,10 @@ var interfaceConfig = {
|
||||
SHOW_BRAND_WATERMARK: false,
|
||||
|
||||
/**
|
||||
* Decides whether the chrome extension banner should be rendered on the landing page and during the meeting.
|
||||
* If this is set to false, the banner will not be rendered at all. If set to true, the check for extension(s)
|
||||
* being already installed is done before rendering.
|
||||
*/
|
||||
* Decides whether the chrome extension banner should be rendered on the landing page and during the meeting.
|
||||
* If this is set to false, the banner will not be rendered at all. If set to true, the check for extension(s)
|
||||
* being already installed is done before rendering.
|
||||
*/
|
||||
SHOW_CHROME_EXTENSION_BANNER: false,
|
||||
|
||||
SHOW_DEEP_LINKING_IMAGE: false,
|
||||
@@ -202,16 +174,6 @@ var interfaceConfig = {
|
||||
*/
|
||||
SUPPORT_URL: 'https://community.jitsi.org/',
|
||||
|
||||
TOOLBAR_ALWAYS_VISIBLE: false,
|
||||
|
||||
/**
|
||||
* DEPRECATED!
|
||||
* This config was moved to config.js as `toolbarButtons`.
|
||||
*/
|
||||
// TOOLBAR_BUTTONS: [],
|
||||
|
||||
TOOLBAR_TIMEOUT: 4000,
|
||||
|
||||
// Browsers, in addition to those which do not fully support WebRTC, that
|
||||
// are not supported and should show the unsupported browser page.
|
||||
UNSUPPORTED_BROWSERS: [],
|
||||
@@ -224,7 +186,8 @@ var interfaceConfig = {
|
||||
// Determines how the video would fit the screen. 'both' would fit the whole
|
||||
// screen, 'height' would fit the original video height to the height of the
|
||||
// screen, 'width' would fit the original video width to the width of the
|
||||
// screen respecting ratio.
|
||||
// screen respecting ratio, 'nocrop' would make the video as large as
|
||||
// possible and preserve aspect ratio without cropping.
|
||||
VIDEO_LAYOUT_FIT: 'both',
|
||||
|
||||
/**
|
||||
@@ -275,6 +238,28 @@ var interfaceConfig = {
|
||||
PHONE_NUMBER_REGEX
|
||||
*/
|
||||
|
||||
// -----------------DEPRECATED CONFIGS BELOW THIS LINE-----------------------------
|
||||
|
||||
// Connection indicators (
|
||||
// CONNECTION_INDICATOR_AUTO_HIDE_ENABLED,
|
||||
// CONNECTION_INDICATOR_AUTO_HIDE_TIMEOUT,
|
||||
// CONNECTION_INDICATOR_DISABLED) got moved to config.js.
|
||||
|
||||
// Please use disableModeratorIndicator from config.js
|
||||
// DISABLE_FOCUS_INDICATOR: false,
|
||||
|
||||
// Moved to config.js as `toolbarConfig.initialTimeout`.
|
||||
// INITIAL_TOOLBAR_TIMEOUT: 20000,
|
||||
|
||||
// Moved to config.js as `toolbarConfig.alwaysVisible`.
|
||||
// TOOLBAR_ALWAYS_VISIBLE: false,
|
||||
|
||||
// This config was moved to config.js as `toolbarButtons`.
|
||||
// TOOLBAR_BUTTONS: [],
|
||||
|
||||
// Moved to config.js as `toolbarConfig.timeout`.
|
||||
// TOOLBAR_TIMEOUT: 4000,
|
||||
|
||||
// Allow all above example options to include a trailing comma and
|
||||
// prevent fear when commenting out the last value.
|
||||
// eslint-disable-next-line sort-keys
|
||||
|
||||
10
ios/Podfile
10
ios/Podfile
@@ -1,4 +1,4 @@
|
||||
platform :ios, '11.0'
|
||||
platform :ios, '12.0'
|
||||
workspace 'jitsi-meet'
|
||||
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
|
||||
install! 'cocoapods', :deterministic_uuids => false
|
||||
@@ -29,7 +29,7 @@ target 'JitsiMeetSDK' do
|
||||
'CoreModulesHeaders',
|
||||
'DevSupport',
|
||||
'RCTWebSocket'
|
||||
]
|
||||
], :modular_headers => true
|
||||
pod 'React-CoreModules', :path => '../node_modules/react-native/React/CoreModules'
|
||||
pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS'
|
||||
pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation'
|
||||
@@ -54,10 +54,12 @@ target 'JitsiMeetSDK' do
|
||||
# React Native plugins
|
||||
#
|
||||
|
||||
pod 'amplitude-react-native', :path => '../node_modules/@amplitude/react-native'
|
||||
pod 'react-native-background-timer', :path => '../node_modules/react-native-background-timer'
|
||||
pod 'react-native-calendar-events', :path => '../node_modules/react-native-calendar-events'
|
||||
pod 'react-native-keep-awake', :path => '../node_modules/react-native-keep-awake'
|
||||
pod 'react-native-netinfo', :path => '../node_modules/@react-native-community/netinfo'
|
||||
pod 'react-native-performance', :path => '../node_modules/react-native-performance/ios'
|
||||
pod 'react-native-slider', :path => '../node_modules/@react-native-community/slider'
|
||||
pod 'react-native-splash-screen', :path => '../node_modules/react-native-splash-screen'
|
||||
pod 'react-native-video', :path => '../node_modules/react-native-video/react-native-video.podspec'
|
||||
@@ -75,7 +77,7 @@ target 'JitsiMeetSDK' do
|
||||
#
|
||||
|
||||
pod 'CocoaLumberjack', '~>3.5.3'
|
||||
pod 'ObjectiveDropboxOfficial', '~> 3.9.4'
|
||||
pod 'ObjectiveDropboxOfficial', '~>6.1.0'
|
||||
|
||||
use_native_modules!
|
||||
end
|
||||
@@ -85,7 +87,7 @@ post_install do |installer|
|
||||
target.build_configurations.each do |config|
|
||||
config.build_settings['ENABLE_BITCODE'] = 'YES'
|
||||
config.build_settings['SUPPORTS_MACCATALYST'] = 'NO'
|
||||
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'
|
||||
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
PODS:
|
||||
- Amplitude (8.2.0)
|
||||
- amplitude-react-native (2.3.3):
|
||||
- Amplitude (= 8.2.0)
|
||||
- React-Core
|
||||
- AppAuth (1.4.0):
|
||||
- AppAuth/Core (= 1.4.0)
|
||||
- AppAuth/ExternalUserAgent (= 1.4.0)
|
||||
@@ -111,7 +115,7 @@ PODS:
|
||||
- nanopb/encode (= 1.30906.0)
|
||||
- nanopb/decode (1.30906.0)
|
||||
- nanopb/encode (1.30906.0)
|
||||
- ObjectiveDropboxOfficial (3.9.4)
|
||||
- ObjectiveDropboxOfficial (6.1.0)
|
||||
- PromisesObjC (1.2.12)
|
||||
- RCTRequired (0.61.5-jitsi.2)
|
||||
- RCTTypeSafety (0.61.5-jitsi.2):
|
||||
@@ -284,6 +288,8 @@ PODS:
|
||||
- React
|
||||
- react-native-netinfo (4.1.5):
|
||||
- React
|
||||
- react-native-performance (2.0.0):
|
||||
- React-Core
|
||||
- react-native-slider (3.0.3):
|
||||
- React
|
||||
- react-native-splash-screen (3.2.0):
|
||||
@@ -293,7 +299,7 @@ PODS:
|
||||
- react-native-video/Video (= 5.1.1)
|
||||
- react-native-video/Video (5.1.1):
|
||||
- React-Core
|
||||
- react-native-webrtc (1.92.0):
|
||||
- react-native-webrtc (1.92.2):
|
||||
- React-Core
|
||||
- react-native-webview (11.0.2):
|
||||
- React-Core
|
||||
@@ -372,6 +378,7 @@ PODS:
|
||||
- Yoga (1.14.0)
|
||||
|
||||
DEPENDENCIES:
|
||||
- "amplitude-react-native (from `../node_modules/@amplitude/react-native`)"
|
||||
- CocoaLumberjack (~> 3.5.3)
|
||||
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
|
||||
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector/`)
|
||||
@@ -381,7 +388,7 @@ DEPENDENCIES:
|
||||
- Firebase/DynamicLinks (~> 6.33.0)
|
||||
- Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`)
|
||||
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
|
||||
- ObjectiveDropboxOfficial (~> 3.9.4)
|
||||
- ObjectiveDropboxOfficial (~> 6.1.0)
|
||||
- RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired/`)
|
||||
- RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety/`)
|
||||
- React (from `../node_modules/react-native/`)
|
||||
@@ -397,6 +404,7 @@ DEPENDENCIES:
|
||||
- react-native-calendar-events (from `../node_modules/react-native-calendar-events`)
|
||||
- react-native-keep-awake (from `../node_modules/react-native-keep-awake`)
|
||||
- "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)"
|
||||
- react-native-performance (from `../node_modules/react-native-performance/ios`)
|
||||
- "react-native-slider (from `../node_modules/@react-native-community/slider`)"
|
||||
- react-native-splash-screen (from `../node_modules/react-native-splash-screen`)
|
||||
- react-native-video (from `../node_modules/react-native-video/react-native-video.podspec`)
|
||||
@@ -423,6 +431,7 @@ DEPENDENCIES:
|
||||
|
||||
SPEC REPOS:
|
||||
trunk:
|
||||
- Amplitude
|
||||
- AppAuth
|
||||
- boost-for-react-native
|
||||
- CocoaLumberjack
|
||||
@@ -444,6 +453,8 @@ SPEC REPOS:
|
||||
- PromisesObjC
|
||||
|
||||
EXTERNAL SOURCES:
|
||||
amplitude-react-native:
|
||||
:path: "../node_modules/@amplitude/react-native"
|
||||
DoubleConversion:
|
||||
:podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
|
||||
FBLazyVector:
|
||||
@@ -480,6 +491,8 @@ EXTERNAL SOURCES:
|
||||
:path: "../node_modules/react-native-keep-awake"
|
||||
react-native-netinfo:
|
||||
:path: "../node_modules/@react-native-community/netinfo"
|
||||
react-native-performance:
|
||||
:path: "../node_modules/react-native-performance/ios"
|
||||
react-native-slider:
|
||||
:path: "../node_modules/@react-native-community/slider"
|
||||
react-native-splash-screen:
|
||||
@@ -528,6 +541,8 @@ EXTERNAL SOURCES:
|
||||
:path: "../node_modules/react-native/ReactCommon/yoga"
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
Amplitude: 263118b9e691e73a1c864b05bb08a3aff3636d16
|
||||
amplitude-react-native: 833a4bd7f656f826bda1de01a7b8593b58842209
|
||||
AppAuth: 31bcec809a638d7bd2f86ea8a52bd45f6e81e7c7
|
||||
boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
|
||||
CocoaLumberjack: 2f44e60eb91c176d471fdba43b9e3eae6a721947
|
||||
@@ -550,7 +565,7 @@ SPEC CHECKSUMS:
|
||||
GTMAppAuth: ad5c2b70b9a8689e1a04033c9369c4915bfcbe89
|
||||
GTMSessionFetcher: 36689134877faeb055b27dfa4ccc9ceaa42e029e
|
||||
nanopb: 59317e09cf1f1a0af72f12af412d54edf52603fc
|
||||
ObjectiveDropboxOfficial: a5afefc83f6467c42c45f2253f583f2ad1ffc701
|
||||
ObjectiveDropboxOfficial: b4765572e334d6fc6214b43a7595510324bbbbaa
|
||||
PromisesObjC: 3113f7f76903778cf4a0586bd1ab89329a0b7b97
|
||||
RCTRequired: a686731276578c125dff205f08b6ec9cee6ede32
|
||||
RCTTypeSafety: 88e5500e801c00d16a3d1895e3470d13beed6584
|
||||
@@ -565,10 +580,11 @@ SPEC CHECKSUMS:
|
||||
react-native-calendar-events: 1442fad71a00388f933cfa25512588fec300fcf8
|
||||
react-native-keep-awake: eba3137546b10003361b37c761f6c429b59814ae
|
||||
react-native-netinfo: 8d8db463bcc5db66a8ac5c48a7d86beb3b92f61a
|
||||
react-native-performance: 8edfa2bbc9a2af4a02f01d342118e413a95145e0
|
||||
react-native-slider: b733e17fdd31186707146debf1f04b5d94aa1a93
|
||||
react-native-splash-screen: 200d11d188e2e78cea3ad319964f6142b6384865
|
||||
react-native-video: 1574074179ecaf6a9dd067116c8f31bf9fec15c8
|
||||
react-native-webrtc: bbb644859dcc37ccb7edaec860ca62ed47bf996c
|
||||
react-native-webrtc: 41526e4060dac373c18676f866962d4180ee47b9
|
||||
react-native-webview: b2542d6fd424bcc3e3b2ec5f854f0abb4ec86c87
|
||||
React-RCTActionSheet: bcbc311dc3b47bc8efb2737ff0940239a45789a9
|
||||
React-RCTAnimation: 65f61080ce632f6dea23d52e354ffac9948396c6
|
||||
@@ -589,6 +605,6 @@ SPEC CHECKSUMS:
|
||||
RNWatch: a5320c959c75e72845c07985f3e935e58998f1d3
|
||||
Yoga: 96b469c5e81ff51b917b92e8c3390642d4ded30c
|
||||
|
||||
PODFILE CHECKSUM: f4db44d934caeae7212dbaa33abe62ed164363e8
|
||||
PODFILE CHECKSUM: 3cc305fd6ee83fff506c10c4805471fa72b61c9a
|
||||
|
||||
COCOAPODS: 1.10.1
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; };
|
||||
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
|
||||
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
|
||||
2681BB562C7A0B42CFBA6719 /* libPods-JitsiMeet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D6152FF9E9F7B0E86F70A21D /* libPods-JitsiMeet.a */; };
|
||||
4E90F9402632D1AB001102D4 /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E90F93F2632D1AB001102D4 /* Atomic.swift */; };
|
||||
4EB06024260E026600F524C5 /* ReplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4EC49B8625BED71300E76218 /* ReplayKit.framework */; };
|
||||
4EB06027260E026600F524C5 /* SampleHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB06026260E026600F524C5 /* SampleHandler.swift */; };
|
||||
@@ -30,7 +31,6 @@
|
||||
4EB0603C260E09D000F524C5 /* SocketConnection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB06039260E09D000F524C5 /* SocketConnection.swift */; };
|
||||
4EB0603D260E09D000F524C5 /* DarwinNotificationCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB0603A260E09D000F524C5 /* DarwinNotificationCenter.swift */; };
|
||||
4EB0603E260E09D000F524C5 /* SampleUploader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB0603B260E09D000F524C5 /* SampleUploader.swift */; };
|
||||
55BEDABDA92D47D399A70A5E /* libPods-JitsiMeet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D878B07B3FBD6E305EAA6B27 /* libPods-JitsiMeet.a */; };
|
||||
DE050389256E904600DEE3A5 /* WebRTC.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE050388256E904600DEE3A5 /* WebRTC.xcframework */; };
|
||||
DE05038A256E904600DEE3A5 /* WebRTC.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DE050388256E904600DEE3A5 /* WebRTC.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||
DE4C456121DE1E4E00EA0709 /* FIRUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = DE4C455F21DE1E4E00EA0709 /* FIRUtilities.m */; };
|
||||
@@ -113,7 +113,6 @@
|
||||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
09AA3B93E4CC62D84B424690 /* Pods-jitsi-meet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-jitsi-meet.release.xcconfig"; path = "../Pods/Target Support Files/Pods-jitsi-meet/Pods-jitsi-meet.release.xcconfig"; sourceTree = "<group>"; };
|
||||
0B26BE6D1EC5BC3C00EEFB41 /* JitsiMeet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = JitsiMeet.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
0B412F1D1EDEE6E800B1A0A6 /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
|
||||
0B412F1E1EDEE6E800B1A0A6 /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; };
|
||||
@@ -139,7 +138,7 @@
|
||||
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
|
||||
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
||||
4670A512A688E2DC34528282 /* Pods-jitsi-meet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-jitsi-meet.debug.xcconfig"; path = "../Pods/Target Support Files/Pods-jitsi-meet/Pods-jitsi-meet.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
3E0F4ED943C0B12BE77F6B45 /* Pods-JitsiMeet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet.release.xcconfig"; path = "Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet.release.xcconfig"; sourceTree = "<group>"; };
|
||||
4E90F93F2632D1AB001102D4 /* Atomic.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Atomic.swift; sourceTree = "<group>"; };
|
||||
4EB06023260E026600F524C5 /* JitsiMeetBroadcastExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = JitsiMeetBroadcastExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
4EB06026260E026600F524C5 /* SampleHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleHandler.swift; sourceTree = "<group>"; };
|
||||
@@ -149,11 +148,9 @@
|
||||
4EB0603A260E09D000F524C5 /* DarwinNotificationCenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DarwinNotificationCenter.swift; sourceTree = "<group>"; };
|
||||
4EB0603B260E09D000F524C5 /* SampleUploader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SampleUploader.swift; sourceTree = "<group>"; };
|
||||
4EC49B8625BED71300E76218 /* ReplayKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReplayKit.framework; path = System/Library/Frameworks/ReplayKit.framework; sourceTree = SDKROOT; };
|
||||
5FEF9D87A4D2A38AD7193308 /* Pods-JitsiMeet-JitsiMeetBroadcastExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet-JitsiMeetBroadcastExtension.release.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeet-JitsiMeetBroadcastExtension/Pods-JitsiMeet-JitsiMeetBroadcastExtension.release.xcconfig"; sourceTree = "<group>"; };
|
||||
609CB2080B75F75A89923F3D /* Pods-JitsiMeet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet.debug.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
A7B2827E068A0E05260054AC /* Pods-JitsiMeet-JitsiMeetBroadcastExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet-JitsiMeetBroadcastExtension.debug.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeet-JitsiMeetBroadcastExtension/Pods-JitsiMeet-JitsiMeetBroadcastExtension.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
756FCE06C08D9B947653C98A /* Pods-JitsiMeet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet.debug.xcconfig"; path = "Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
B3B083EB1D4955FF0069CEE7 /* app.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = app.entitlements; sourceTree = "<group>"; };
|
||||
D878B07B3FBD6E305EAA6B27 /* libPods-JitsiMeet.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-JitsiMeet.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
D6152FF9E9F7B0E86F70A21D /* libPods-JitsiMeet.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-JitsiMeet.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
DE050388256E904600DEE3A5 /* WebRTC.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = WebRTC.xcframework; path = "../../node_modules/react-native-webrtc/apple/WebRTC.xcframework"; sourceTree = "<group>"; };
|
||||
DE4C455F21DE1E4E00EA0709 /* FIRUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FIRUtilities.m; sourceTree = "<group>"; };
|
||||
DE4C456021DE1E4E00EA0709 /* FIRUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FIRUtilities.h; sourceTree = "<group>"; };
|
||||
@@ -161,7 +158,6 @@
|
||||
DEFDBBDB25656E3B00344B23 /* WebRTC.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = WebRTC.xcframework; path = "../../node_modules/react-native-webrtc/ios/WebRTC.xcframework"; sourceTree = "<group>"; };
|
||||
E58801132278944E008B0561 /* JitsiMeetContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JitsiMeetContext.swift; sourceTree = "<group>"; };
|
||||
E5C97B62227A1EB400199214 /* JitsiMeetCommands.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JitsiMeetCommands.swift; sourceTree = "<group>"; };
|
||||
FC040BBED70876444D89E91C /* Pods-JitsiMeet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet.release.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet.release.xcconfig"; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@@ -178,7 +174,7 @@
|
||||
files = (
|
||||
DE050389256E904600DEE3A5 /* WebRTC.xcframework in Frameworks */,
|
||||
DEA9F289258A6EA800D4CD74 /* JitsiMeetSDK.framework in Frameworks */,
|
||||
55BEDABDA92D47D399A70A5E /* libPods-JitsiMeet.a in Frameworks */,
|
||||
2681BB562C7A0B42CFBA6719 /* libPods-JitsiMeet.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -208,8 +204,8 @@
|
||||
0B26BE6D1EC5BC3C00EEFB41 /* JitsiMeet.framework */,
|
||||
DEFDBBDB25656E3B00344B23 /* WebRTC.xcframework */,
|
||||
0BD6B4361EF82A6B00D1F4CD /* WebRTC.framework */,
|
||||
D878B07B3FBD6E305EAA6B27 /* libPods-JitsiMeet.a */,
|
||||
4EC49B8625BED71300E76218 /* ReplayKit.framework */,
|
||||
D6152FF9E9F7B0E86F70A21D /* libPods-JitsiMeet.a */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
@@ -278,19 +274,6 @@
|
||||
sourceTree = "<group>";
|
||||
tabWidth = 4;
|
||||
};
|
||||
5E96ADD5E49F3B3822EF9A52 /* Pods */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4670A512A688E2DC34528282 /* Pods-jitsi-meet.debug.xcconfig */,
|
||||
09AA3B93E4CC62D84B424690 /* Pods-jitsi-meet.release.xcconfig */,
|
||||
609CB2080B75F75A89923F3D /* Pods-JitsiMeet.debug.xcconfig */,
|
||||
FC040BBED70876444D89E91C /* Pods-JitsiMeet.release.xcconfig */,
|
||||
A7B2827E068A0E05260054AC /* Pods-JitsiMeet-JitsiMeetBroadcastExtension.debug.xcconfig */,
|
||||
5FEF9D87A4D2A38AD7193308 /* Pods-JitsiMeet-JitsiMeetBroadcastExtension.release.xcconfig */,
|
||||
);
|
||||
name = Pods;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
83CBB9F61A601CBA00E9B192 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -298,10 +281,10 @@
|
||||
0B26BE711EC5BC4D00EEFB41 /* Frameworks */,
|
||||
83CBBA001A601CBA00E9B192 /* Products */,
|
||||
13B07FAE1A68108700A75B9A /* src */,
|
||||
5E96ADD5E49F3B3822EF9A52 /* Pods */,
|
||||
0BEA5C261F7B8F73000D0AB4 /* Watch app */,
|
||||
0BEA5C351F7B8F73000D0AB4 /* WatchKit extension */,
|
||||
4EB06025260E026600F524C5 /* JitsiMeetBroadcast Extension */,
|
||||
CDD71F5E1157E9F283DF92A8 /* Pods */,
|
||||
);
|
||||
indentWidth = 2;
|
||||
sourceTree = "<group>";
|
||||
@@ -318,6 +301,16 @@
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CDD71F5E1157E9F283DF92A8 /* Pods */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
756FCE06C08D9B947653C98A /* Pods-JitsiMeet.debug.xcconfig */,
|
||||
3E0F4ED943C0B12BE77F6B45 /* Pods-JitsiMeet.release.xcconfig */,
|
||||
);
|
||||
name = Pods;
|
||||
path = ../Pods;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
@@ -360,7 +353,7 @@
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "JitsiMeet" */;
|
||||
buildPhases = (
|
||||
B6607F42A5CF0C76E98929E2 /* [CP] Check Pods Manifest.lock */,
|
||||
69BC5020DBE393B56BD76636 /* [CP] Check Pods Manifest.lock */,
|
||||
0BBA83C41EC9F7600075A103 /* Run React packager */,
|
||||
13B07F871A680F5B00A75B9A /* Sources */,
|
||||
13B07F8C1A680F5B00A75B9A /* Frameworks */,
|
||||
@@ -523,7 +516,7 @@
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "../scripts/run-packager.sh\n";
|
||||
};
|
||||
B6607F42A5CF0C76E98929E2 /* [CP] Check Pods Manifest.lock */ = {
|
||||
69BC5020DBE393B56BD76636 /* [CP] Check Pods Manifest.lock */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
@@ -825,7 +818,7 @@
|
||||
};
|
||||
13B07F941A680F5B00A75B9A /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 609CB2080B75F75A89923F3D /* Pods-JitsiMeet.debug.xcconfig */;
|
||||
baseConfigurationReference = 756FCE06C08D9B947653C98A /* Pods-JitsiMeet.debug.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIconDebug;
|
||||
@@ -855,7 +848,7 @@
|
||||
};
|
||||
13B07F951A680F5B00A75B9A /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = FC040BBED70876444D89E91C /* Pods-JitsiMeet.release.xcconfig */;
|
||||
baseConfigurationReference = 3E0F4ED943C0B12BE77F6B45 /* Pods-JitsiMeet.release.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIconRelease;
|
||||
@@ -1003,7 +996,7 @@
|
||||
"$(inherited)",
|
||||
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
|
||||
);
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
@@ -1056,7 +1049,7 @@
|
||||
"$(inherited)",
|
||||
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
|
||||
);
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>21.3.0</string>
|
||||
<string>21.4.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>NSExtension</key>
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>21.3.0</string>
|
||||
<string>21.4.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleURLTypes</key>
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright @ 2018-present 8x8, Inc.
|
||||
* Copyright @ 2017-2018 Atlassian Pty Ltd
|
||||
* Copyright @ 2017-present 8x8, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -15,8 +14,6 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#import <Availability.h>
|
||||
|
||||
@import CoreSpotlight;
|
||||
@import MobileCoreServices;
|
||||
@import Intents; // Needed for NSUserActivity suggestedInvocationPhrase
|
||||
@@ -58,34 +55,29 @@
|
||||
[self _onJitsiMeetViewDelegateEvent:@"CONFERENCE_JOINED" withData:data];
|
||||
|
||||
// Register a NSUserActivity for this conference so it can be invoked as a
|
||||
// Siri shortcut. This is only supported in iOS >= 12.
|
||||
#ifdef __IPHONE_12_0
|
||||
if (@available(iOS 12.0, *)) {
|
||||
NSUserActivity *userActivity
|
||||
= [[NSUserActivity alloc] initWithActivityType:JitsiMeetConferenceActivityType];
|
||||
// Siri shortcut.
|
||||
NSUserActivity *userActivity
|
||||
= [[NSUserActivity alloc] initWithActivityType:JitsiMeetConferenceActivityType];
|
||||
|
||||
NSString *urlStr = data[@"url"];
|
||||
NSURL *url = [NSURL URLWithString:urlStr];
|
||||
NSString *conference = [url.pathComponents lastObject];
|
||||
NSString *urlStr = data[@"url"];
|
||||
NSURL *url = [NSURL URLWithString:urlStr];
|
||||
NSString *conference = [url.pathComponents lastObject];
|
||||
|
||||
userActivity.title = [NSString stringWithFormat:@"Join %@", conference];
|
||||
userActivity.suggestedInvocationPhrase = @"Join my Jitsi meeting";
|
||||
userActivity.userInfo = @{@"url": urlStr};
|
||||
[userActivity setEligibleForSearch:YES];
|
||||
[userActivity setEligibleForPrediction:YES];
|
||||
[userActivity setPersistentIdentifier:urlStr];
|
||||
userActivity.title = [NSString stringWithFormat:@"Join %@", conference];
|
||||
userActivity.suggestedInvocationPhrase = @"Join my Jitsi meeting";
|
||||
userActivity.userInfo = @{@"url": urlStr};
|
||||
[userActivity setEligibleForSearch:YES];
|
||||
[userActivity setEligibleForPrediction:YES];
|
||||
[userActivity setPersistentIdentifier:urlStr];
|
||||
|
||||
// Subtitle
|
||||
CSSearchableItemAttributeSet *attributes
|
||||
= [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString *)kUTTypeItem];
|
||||
attributes.contentDescription = urlStr;
|
||||
userActivity.contentAttributeSet = attributes;
|
||||
|
||||
self.userActivity = userActivity;
|
||||
[userActivity becomeCurrent];
|
||||
}
|
||||
#endif
|
||||
// Subtitle
|
||||
CSSearchableItemAttributeSet *attributes
|
||||
= [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString *)kUTTypeItem];
|
||||
attributes.contentDescription = urlStr;
|
||||
userActivity.contentAttributeSet = attributes;
|
||||
|
||||
self.userActivity = userActivity;
|
||||
[userActivity becomeCurrent];
|
||||
}
|
||||
|
||||
- (void)conferenceTerminated:(NSDictionary *)data {
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>21.3.0</string>
|
||||
<string>21.4.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>XPC!</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>21.3.0</string>
|
||||
<string>21.4.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>CLKComplicationPrincipalClass</key>
|
||||
|
||||
@@ -10,8 +10,6 @@
|
||||
0B412F181EDEC65D00B1A0A6 /* JitsiMeetView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B412F161EDEC65D00B1A0A6 /* JitsiMeetView.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
0B412F191EDEC65D00B1A0A6 /* JitsiMeetView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B412F171EDEC65D00B1A0A6 /* JitsiMeetView.m */; };
|
||||
0B412F221EDEF6EA00B1A0A6 /* JitsiMeetViewDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B412F1B1EDEC80100B1A0A6 /* JitsiMeetViewDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
0B49424520AD8DBD00BD2DE0 /* outgoingStart.wav in Resources */ = {isa = PBXBuildFile; fileRef = 0B49424320AD8DBD00BD2DE0 /* outgoingStart.wav */; };
|
||||
0B49424620AD8DBD00BD2DE0 /* outgoingRinging.wav in Resources */ = {isa = PBXBuildFile; fileRef = 0B49424420AD8DBD00BD2DE0 /* outgoingRinging.wav */; };
|
||||
0B93EF7E1EC9DDCD0030D24D /* RCTBridgeWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B93EF7C1EC9DDCD0030D24D /* RCTBridgeWrapper.h */; };
|
||||
0B93EF7F1EC9DDCD0030D24D /* RCTBridgeWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B93EF7D1EC9DDCD0030D24D /* RCTBridgeWrapper.m */; };
|
||||
0BA13D311EE83FF8007BEF7F /* ExternalAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BA13D301EE83FF8007BEF7F /* ExternalAPI.m */; };
|
||||
@@ -26,16 +24,8 @@
|
||||
0BD906EA1EC0C00300C8C18E /* JitsiMeet.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BD906E81EC0C00300C8C18E /* JitsiMeet.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
4E51B76425E5345E0038575A /* ScheenshareEventEmiter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E51B76225E5345E0038575A /* ScheenshareEventEmiter.h */; };
|
||||
4E51B76525E5345E0038575A /* ScheenshareEventEmiter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E51B76325E5345E0038575A /* ScheenshareEventEmiter.m */; };
|
||||
6C31EDC820C06D490089C899 /* recordingOn.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 6C31EDC720C06D490089C899 /* recordingOn.mp3 */; };
|
||||
6C31EDCA20C06D530089C899 /* recordingOff.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 6C31EDC920C06D530089C899 /* recordingOff.mp3 */; };
|
||||
6F08DF7D4458EE3CF3F36F6D /* libPods-JitsiMeetSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E4376CA6886DE68FD7A4294B /* libPods-JitsiMeetSDK.a */; };
|
||||
75635B0A20751D6D00F29C9F /* joined.wav in Resources */ = {isa = PBXBuildFile; fileRef = 75635B0820751D6D00F29C9F /* joined.wav */; };
|
||||
75635B0B20751D6D00F29C9F /* left.wav in Resources */ = {isa = PBXBuildFile; fileRef = 75635B0920751D6D00F29C9F /* left.wav */; };
|
||||
87FE6F3321E52437004A5DC7 /* incomingMessage.wav in Resources */ = {isa = PBXBuildFile; fileRef = 87FE6F3221E52437004A5DC7 /* incomingMessage.wav */; };
|
||||
A4414AE020B37F1A003546E6 /* rejected.wav in Resources */ = {isa = PBXBuildFile; fileRef = A4414ADF20B37F1A003546E6 /* rejected.wav */; };
|
||||
A4A934E9212F3ADB001E9388 /* Dropbox.m in Sources */ = {isa = PBXBuildFile; fileRef = A4A934E8212F3ADB001E9388 /* Dropbox.m */; };
|
||||
C30F88D0CB0F4F5593216D24 /* liveStreamingOff.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = C30F88D1CB0F4F5593216D24 /* liveStreamingOff.mp3 */; };
|
||||
C30F88D2CB0F4F5593216D24 /* liveStreamingOn.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = C30F88D3CB0F4F5593216D24 /* liveStreamingOn.mp3 */; };
|
||||
C6245F5D2053091D0040BE68 /* image-resize@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = C6245F5B2053091D0040BE68 /* image-resize@2x.png */; };
|
||||
C6245F5E2053091D0040BE68 /* image-resize@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = C6245F5C2053091D0040BE68 /* image-resize@3x.png */; };
|
||||
C69EFA0C209A0F660027712B /* JMCallKitEmitter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C69EFA09209A0F650027712B /* JMCallKitEmitter.swift */; };
|
||||
@@ -70,8 +60,6 @@
|
||||
0B412F161EDEC65D00B1A0A6 /* JitsiMeetView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JitsiMeetView.h; sourceTree = "<group>"; };
|
||||
0B412F171EDEC65D00B1A0A6 /* JitsiMeetView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JitsiMeetView.m; sourceTree = "<group>"; };
|
||||
0B412F1B1EDEC80100B1A0A6 /* JitsiMeetViewDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JitsiMeetViewDelegate.h; sourceTree = "<group>"; };
|
||||
0B49424320AD8DBD00BD2DE0 /* outgoingStart.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = outgoingStart.wav; path = ../../sounds/outgoingStart.wav; sourceTree = "<group>"; };
|
||||
0B49424420AD8DBD00BD2DE0 /* outgoingRinging.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = outgoingRinging.wav; path = ../../sounds/outgoingRinging.wav; sourceTree = "<group>"; };
|
||||
0B93EF7A1EC608550030D24D /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; };
|
||||
0B93EF7C1EC9DDCD0030D24D /* RCTBridgeWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTBridgeWrapper.h; sourceTree = "<group>"; };
|
||||
0B93EF7D1EC9DDCD0030D24D /* RCTBridgeWrapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTBridgeWrapper.m; sourceTree = "<group>"; };
|
||||
@@ -89,19 +77,11 @@
|
||||
0BD906E91EC0C00300C8C18E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
4E51B76225E5345E0038575A /* ScheenshareEventEmiter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ScheenshareEventEmiter.h; sourceTree = "<group>"; };
|
||||
4E51B76325E5345E0038575A /* ScheenshareEventEmiter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ScheenshareEventEmiter.m; sourceTree = "<group>"; };
|
||||
6C31EDC720C06D490089C899 /* recordingOn.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = recordingOn.mp3; path = ../../sounds/recordingOn.mp3; sourceTree = "<group>"; };
|
||||
6C31EDC920C06D530089C899 /* recordingOff.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = recordingOff.mp3; path = ../../sounds/recordingOff.mp3; sourceTree = "<group>"; };
|
||||
75635B0820751D6D00F29C9F /* joined.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = joined.wav; path = ../../sounds/joined.wav; sourceTree = "<group>"; };
|
||||
75635B0920751D6D00F29C9F /* left.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = left.wav; path = ../../sounds/left.wav; sourceTree = "<group>"; };
|
||||
87FE6F3221E52437004A5DC7 /* incomingMessage.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = incomingMessage.wav; path = ../../sounds/incomingMessage.wav; sourceTree = "<group>"; };
|
||||
891FE43DAD30BC8976683100 /* Pods-JitsiMeetSDK.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeetSDK.release.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeetSDK/Pods-JitsiMeetSDK.release.xcconfig"; sourceTree = "<group>"; };
|
||||
98E09B5C73D9036B4ED252FC /* Pods-JitsiMeet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet.debug.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
9C77CA3CC919B081F1A52982 /* Pods-JitsiMeet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet.release.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet.release.xcconfig"; sourceTree = "<group>"; };
|
||||
A4414ADF20B37F1A003546E6 /* rejected.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = rejected.wav; path = ../../sounds/rejected.wav; sourceTree = "<group>"; };
|
||||
A4A934E8212F3ADB001E9388 /* Dropbox.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Dropbox.m; sourceTree = "<group>"; };
|
||||
A4A934EB21349A06001E9388 /* Dropbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Dropbox.h; sourceTree = "<group>"; };
|
||||
C30F88D1CB0F4F5593216D24 /* liveStreamingOff.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = liveStreamingOff.mp3; path = ../../sounds/liveStreamingOff.mp3; sourceTree = "<group>"; };
|
||||
C30F88D3CB0F4F5593216D24 /* liveStreamingOn.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = liveStreamingOn.mp3; path = ../../sounds/liveStreamingOn.mp3; sourceTree = "<group>"; };
|
||||
C6245F5B2053091D0040BE68 /* image-resize@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "image-resize@2x.png"; path = "src/picture-in-picture/image-resize@2x.png"; sourceTree = "<group>"; };
|
||||
C6245F5C2053091D0040BE68 /* image-resize@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "image-resize@3x.png"; path = "src/picture-in-picture/image-resize@3x.png"; sourceTree = "<group>"; };
|
||||
C69EFA09209A0F650027712B /* JMCallKitEmitter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JMCallKitEmitter.swift; sourceTree = "<group>"; };
|
||||
@@ -155,19 +135,9 @@
|
||||
0BCA49681EC4BBE500B793EE /* Resources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
87FE6F3221E52437004A5DC7 /* incomingMessage.wav */,
|
||||
0BC4B8681F8C01E100CE8B21 /* CallKitIcon.png */,
|
||||
C6245F5B2053091D0040BE68 /* image-resize@2x.png */,
|
||||
C6245F5C2053091D0040BE68 /* image-resize@3x.png */,
|
||||
75635B0820751D6D00F29C9F /* joined.wav */,
|
||||
75635B0920751D6D00F29C9F /* left.wav */,
|
||||
C30F88D1CB0F4F5593216D24 /* liveStreamingOff.mp3 */,
|
||||
C30F88D3CB0F4F5593216D24 /* liveStreamingOn.mp3 */,
|
||||
0B49424420AD8DBD00BD2DE0 /* outgoingRinging.wav */,
|
||||
0B49424320AD8DBD00BD2DE0 /* outgoingStart.wav */,
|
||||
6C31EDC920C06D530089C899 /* recordingOff.mp3 */,
|
||||
6C31EDC720C06D490089C899 /* recordingOn.mp3 */,
|
||||
A4414ADF20B37F1A003546E6 /* rejected.wav */,
|
||||
);
|
||||
name = Resources;
|
||||
sourceTree = "<group>";
|
||||
@@ -328,6 +298,7 @@
|
||||
0BD906E11EC0C00300C8C18E /* Frameworks */,
|
||||
0BD906E21EC0C00300C8C18E /* Headers */,
|
||||
0BD906E31EC0C00300C8C18E /* Resources */,
|
||||
DE17D0D426E0B86300F77E2E /* Copy sounds */,
|
||||
0BCA49651EC4B77500B793EE /* Package React bundle */,
|
||||
C7BC10B338C94EEB98048E64 /* [CP] Copy Pods Resources */,
|
||||
);
|
||||
@@ -379,18 +350,8 @@
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
87FE6F3321E52437004A5DC7 /* incomingMessage.wav in Resources */,
|
||||
0B49424520AD8DBD00BD2DE0 /* outgoingStart.wav in Resources */,
|
||||
C30F88D0CB0F4F5593216D24 /* liveStreamingOff.mp3 in Resources */,
|
||||
C30F88D2CB0F4F5593216D24 /* liveStreamingOn.mp3 in Resources */,
|
||||
6C31EDCA20C06D530089C899 /* recordingOff.mp3 in Resources */,
|
||||
A4414AE020B37F1A003546E6 /* rejected.wav in Resources */,
|
||||
0B49424620AD8DBD00BD2DE0 /* outgoingRinging.wav in Resources */,
|
||||
C6245F5D2053091D0040BE68 /* image-resize@2x.png in Resources */,
|
||||
6C31EDC820C06D490089C899 /* recordingOn.mp3 in Resources */,
|
||||
0BC4B8691F8C03A700CE8B21 /* CallKitIcon.png in Resources */,
|
||||
75635B0B20751D6D00F29C9F /* left.wav in Resources */,
|
||||
75635B0A20751D6D00F29C9F /* joined.wav in Resources */,
|
||||
C6245F5D2053091D0040BE68 /* image-resize@2x.png in Resources */,
|
||||
C6245F5E2053091D0040BE68 /* image-resize@3x.png in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
@@ -437,10 +398,12 @@
|
||||
);
|
||||
inputPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-JitsiMeetSDK/Pods-JitsiMeetSDK-resources.sh",
|
||||
"${PODS_ROOT}/Amplitude/Sources/Amplitude/Resources/ComodoRsaDomainValidationCA.der",
|
||||
"${PODS_ROOT}/GoogleSignIn/Resources/GoogleSignIn.bundle",
|
||||
);
|
||||
name = "[CP] Copy Pods Resources";
|
||||
outputPaths = (
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ComodoRsaDomainValidationCA.der",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleSignIn.bundle",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
@@ -448,6 +411,24 @@
|
||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-JitsiMeetSDK/Pods-JitsiMeetSDK-resources.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
DE17D0D426E0B86300F77E2E /* Copy sounds */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
name = "Copy sounds";
|
||||
outputFileListPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "SOUNDS_DIR=\"${PROJECT_DIR}/../../sounds\"\n\ncp $SOUNDS_DIR/* ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/\n";
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
@@ -539,7 +520,7 @@
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
@@ -595,7 +576,7 @@
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
|
||||
@@ -125,12 +125,19 @@ RCT_EXPORT_MODULE();
|
||||
return _workerQueue;
|
||||
}
|
||||
|
||||
- (BOOL)setConfigWithoutLock:(RTCAudioSessionConfiguration *)config
|
||||
error:(NSError * _Nullable *)outError {
|
||||
RTCAudioSession *session = [RTCAudioSession sharedInstance];
|
||||
|
||||
return [session setConfiguration:config error:outError];
|
||||
}
|
||||
|
||||
- (BOOL)setConfig:(RTCAudioSessionConfiguration *)config
|
||||
error:(NSError * _Nullable *)outError {
|
||||
|
||||
RTCAudioSession *session = [RTCAudioSession sharedInstance];
|
||||
[session lockForConfiguration];
|
||||
BOOL success = [session setConfiguration:config error:outError];
|
||||
BOOL success = [self setConfigWithoutLock:config error:outError];
|
||||
[session unlockForConfiguration];
|
||||
|
||||
return success;
|
||||
@@ -196,7 +203,7 @@ RCT_EXPORT_METHOD(setAudioDevice:(NSString *)device
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (port != nil) {
|
||||
// First remove the override if we are going to select a different device.
|
||||
if (isSpeakerOn) {
|
||||
@@ -206,11 +213,11 @@ RCT_EXPORT_METHOD(setAudioDevice:(NSString *)device
|
||||
// Special case for the earpiece.
|
||||
if ([port.portType isEqualToString:AVAudioSessionPortBuiltInMic]) {
|
||||
forceEarpiece = YES;
|
||||
[self setConfig:earpieceConfig error:nil];
|
||||
[self setConfigWithoutLock:earpieceConfig error:nil];
|
||||
} else if (isEarpieceOn) {
|
||||
// Reset the config.
|
||||
RTCAudioSessionConfiguration *config = [self configForMode:activeMode];
|
||||
[self setConfig:config error:nil];
|
||||
[self setConfigWithoutLock:config error:nil];
|
||||
}
|
||||
|
||||
// Select our preferred input.
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>3.8.0</string>
|
||||
<string>3.10.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
|
||||
@@ -29,10 +29,6 @@
|
||||
* Room name.
|
||||
*/
|
||||
@property (nonatomic, copy, nullable) NSString *room;
|
||||
/**
|
||||
* Conference subject.
|
||||
*/
|
||||
@property (nonatomic, copy, nullable) NSString *subject;
|
||||
/**
|
||||
* JWT token used for authentication.
|
||||
*/
|
||||
@@ -49,13 +45,7 @@
|
||||
*/
|
||||
@property (nonatomic, readonly, nonnull) NSDictionary *featureFlags;
|
||||
|
||||
/**
|
||||
* Set to YES to join the conference with audio / video muted or to start in audio
|
||||
* only mode respectively.
|
||||
*/
|
||||
@property (nonatomic) BOOL audioOnly;
|
||||
@property (nonatomic) BOOL audioMuted;
|
||||
@property (nonatomic) BOOL videoMuted;
|
||||
@property (nonatomic, readonly, nonnull) NSDictionary *config;
|
||||
|
||||
/**
|
||||
* Set to YES to enable the welcome page. Typically SDK users won't need this enabled
|
||||
@@ -71,15 +61,17 @@
|
||||
- (void)setFeatureFlag:(NSString *_Nonnull)flag withBoolean:(BOOL)value;
|
||||
- (void)setFeatureFlag:(NSString *_Nonnull)flag withValue:(id _Nonnull)value;
|
||||
|
||||
/**
|
||||
* CallKit call handle, to be used when implementing incoming calls.
|
||||
*/
|
||||
@property (nonatomic, copy, nullable) NSString *callHandle;
|
||||
- (void)setConfigOverride:(NSString *_Nonnull)config withBoolean:(BOOL)value;
|
||||
- (void)setConfigOverride:(NSString *_Nonnull)config withValue:(id _Nonnull)value;
|
||||
- (void)setConfigOverride:(NSString *_Nonnull)config withDictionary:(NSDictionary * _Nonnull)dictionary;
|
||||
- (void)setConfigOverride:(NSString *_Nonnull)config withArray:( NSArray * _Nonnull)array;
|
||||
|
||||
/**
|
||||
* CallKit call UUID, to be used when implementing incoming calls.
|
||||
*/
|
||||
@property (nonatomic, copy, nullable) NSUUID *callUUID;
|
||||
- (void)setAudioOnly:(BOOL)audioOnly;
|
||||
- (void)setAudioMuted:(BOOL)audioMuted;
|
||||
- (void)setVideoMuted:(BOOL)videoMuted;
|
||||
- (void)setCallHandle:(NSString *_Nonnull)callHandle;
|
||||
- (void)setCallUUID:(NSUUID *_Nonnull)callUUID;
|
||||
- (void)setSubject:(NSString *_Nonnull)subject;
|
||||
|
||||
@end
|
||||
|
||||
@@ -88,23 +80,15 @@
|
||||
@property (nonatomic, copy, nullable, readonly) NSURL *serverURL;
|
||||
|
||||
@property (nonatomic, copy, nullable, readonly) NSString *room;
|
||||
@property (nonatomic, copy, nullable, readonly) NSString *subject;
|
||||
@property (nonatomic, copy, nullable, readonly) NSString *token;
|
||||
|
||||
@property (nonatomic, copy, nullable) NSDictionary *colorScheme;
|
||||
@property (nonatomic, readonly, nonnull) NSDictionary *featureFlags;
|
||||
|
||||
@property (nonatomic, readonly) BOOL audioOnly;
|
||||
@property (nonatomic, readonly) BOOL audioMuted;
|
||||
@property (nonatomic, readonly) BOOL videoMuted;
|
||||
|
||||
@property (nonatomic, readonly) BOOL welcomePageEnabled;
|
||||
|
||||
@property (nonatomic, nullable) JitsiMeetUserInfo *userInfo;
|
||||
|
||||
@property (nonatomic, copy, nullable, readonly) NSString *callHandle;
|
||||
@property (nonatomic, copy, nullable, readonly) NSUUID *callUUID;
|
||||
|
||||
+ (instancetype _Nonnull)fromBuilder:(void (^_Nonnull)(JitsiMeetConferenceOptionsBuilder *_Nonnull))initBlock;
|
||||
- (instancetype _Nonnull)init NS_UNAVAILABLE;
|
||||
|
||||
|
||||
@@ -26,35 +26,23 @@ static NSString *const WelcomePageEnabledFeatureFlag = @"welcomepage.enabled";
|
||||
|
||||
|
||||
@implementation JitsiMeetConferenceOptionsBuilder {
|
||||
NSNumber *_audioOnly;
|
||||
NSNumber *_audioMuted;
|
||||
NSNumber *_videoMuted;
|
||||
NSMutableDictionary *_featureFlags;
|
||||
NSMutableDictionary *_config;
|
||||
}
|
||||
|
||||
@dynamic audioOnly;
|
||||
@dynamic audioMuted;
|
||||
@dynamic videoMuted;
|
||||
@dynamic welcomePageEnabled;
|
||||
|
||||
- (instancetype)init {
|
||||
if (self = [super init]) {
|
||||
_serverURL = nil;
|
||||
_room = nil;
|
||||
_subject = nil;
|
||||
_token = nil;
|
||||
|
||||
_colorScheme = nil;
|
||||
_config = [[NSMutableDictionary alloc] init];
|
||||
_featureFlags = [[NSMutableDictionary alloc] init];
|
||||
|
||||
_audioOnly = nil;
|
||||
_audioMuted = nil;
|
||||
_videoMuted = nil;
|
||||
|
||||
_userInfo = nil;
|
||||
|
||||
_callHandle = nil;
|
||||
_callUUID = nil;
|
||||
}
|
||||
|
||||
return self;
|
||||
@@ -68,32 +56,48 @@ static NSString *const WelcomePageEnabledFeatureFlag = @"welcomepage.enabled";
|
||||
_featureFlags[flag] = value;
|
||||
}
|
||||
|
||||
#pragma mark - Dynamic properties
|
||||
|
||||
- (void)setAudioOnly:(BOOL)audioOnly {
|
||||
_audioOnly = [NSNumber numberWithBool:audioOnly];
|
||||
}
|
||||
|
||||
- (BOOL)audioOnly {
|
||||
return _audioOnly && [_audioOnly boolValue];
|
||||
[self setConfigOverride:@"startAudioOnly" withBoolean:audioOnly];
|
||||
}
|
||||
|
||||
- (void)setAudioMuted:(BOOL)audioMuted {
|
||||
_audioMuted = [NSNumber numberWithBool:audioMuted];
|
||||
}
|
||||
|
||||
- (BOOL)audioMuted {
|
||||
return _audioMuted && [_audioMuted boolValue];
|
||||
[self setConfigOverride:@"startWithAudioMuted" withBoolean:audioMuted];
|
||||
}
|
||||
|
||||
- (void)setVideoMuted:(BOOL)videoMuted {
|
||||
_videoMuted = [NSNumber numberWithBool:videoMuted];
|
||||
[self setConfigOverride:@"startWithVideoMuted" withBoolean:videoMuted];
|
||||
}
|
||||
|
||||
- (BOOL)videoMuted {
|
||||
return _videoMuted && [_videoMuted boolValue];
|
||||
- (void)setCallHandle:(NSString *_Nonnull)callHandle {
|
||||
[self setConfigOverride:@"callHandle" withValue:callHandle];
|
||||
}
|
||||
|
||||
- (void)setCallUUID:(NSUUID *_Nonnull)callUUID {
|
||||
[self setConfigOverride:@"callUUID" withValue:[callUUID UUIDString]];
|
||||
}
|
||||
|
||||
- (void)setSubject:(NSString *_Nonnull)subject {
|
||||
[self setConfigOverride:@"subject" withValue:subject];
|
||||
}
|
||||
|
||||
- (void)setConfigOverride:(NSString *_Nonnull)config withBoolean:(BOOL)value {
|
||||
[self setConfigOverride:config withValue:[NSNumber numberWithBool:value]];
|
||||
}
|
||||
|
||||
- (void)setConfigOverride:(NSString *_Nonnull)config withDictionary:(NSDictionary*)dictionary {
|
||||
_config[config] = dictionary;
|
||||
}
|
||||
|
||||
- (void)setConfigOverride:(NSString *_Nonnull)config withArray:( NSArray * _Nonnull)array {
|
||||
_config[config] = array;
|
||||
}
|
||||
|
||||
- (void)setConfigOverride:(NSString *_Nonnull)config withValue:(id _Nonnull)value {
|
||||
_config[config] = value;
|
||||
}
|
||||
|
||||
#pragma mark - Dynamic properties
|
||||
|
||||
- (void)setWelcomePageEnabled:(BOOL)welcomePageEnabled {
|
||||
[self setFeatureFlag:WelcomePageEnabledFeatureFlag
|
||||
withBoolean:welcomePageEnabled];
|
||||
@@ -105,48 +109,17 @@ static NSString *const WelcomePageEnabledFeatureFlag = @"welcomepage.enabled";
|
||||
return n != nil ? [n boolValue] : NO;
|
||||
}
|
||||
|
||||
#pragma mark - Private API
|
||||
|
||||
- (NSNumber *)getAudioOnly {
|
||||
return _audioOnly;
|
||||
}
|
||||
|
||||
- (NSNumber *)getAudioMuted {
|
||||
return _audioMuted;
|
||||
}
|
||||
|
||||
- (NSNumber *)getVideoMuted {
|
||||
return _videoMuted;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation JitsiMeetConferenceOptions {
|
||||
NSNumber *_audioOnly;
|
||||
NSNumber *_audioMuted;
|
||||
NSNumber *_videoMuted;
|
||||
NSDictionary *_featureFlags;
|
||||
NSDictionary *_config;
|
||||
}
|
||||
|
||||
@dynamic audioOnly;
|
||||
@dynamic audioMuted;
|
||||
@dynamic videoMuted;
|
||||
@dynamic welcomePageEnabled;
|
||||
|
||||
#pragma mark - Dynamic properties
|
||||
|
||||
- (BOOL)audioOnly {
|
||||
return _audioOnly && [_audioOnly boolValue];
|
||||
}
|
||||
|
||||
- (BOOL)audioMuted {
|
||||
return _audioMuted && [_audioMuted boolValue];
|
||||
}
|
||||
|
||||
- (BOOL)videoMuted {
|
||||
return _videoMuted && [_videoMuted boolValue];
|
||||
}
|
||||
|
||||
- (BOOL)welcomePageEnabled {
|
||||
NSNumber *n = _featureFlags[WelcomePageEnabledFeatureFlag];
|
||||
|
||||
@@ -159,21 +132,15 @@ static NSString *const WelcomePageEnabledFeatureFlag = @"welcomepage.enabled";
|
||||
if (self = [super init]) {
|
||||
_serverURL = builder.serverURL;
|
||||
_room = builder.room;
|
||||
_subject = builder.subject;
|
||||
_token = builder.token;
|
||||
|
||||
_colorScheme = builder.colorScheme;
|
||||
|
||||
_audioOnly = [builder getAudioOnly];
|
||||
_audioMuted = [builder getAudioMuted];
|
||||
_videoMuted = [builder getVideoMuted];
|
||||
_config = builder.config;
|
||||
|
||||
_featureFlags = [NSDictionary dictionaryWithDictionary:builder.featureFlags];
|
||||
|
||||
_userInfo = builder.userInfo;
|
||||
|
||||
_callHandle = builder.callHandle;
|
||||
_callUUID = builder.callUUID;
|
||||
}
|
||||
|
||||
return self;
|
||||
@@ -198,26 +165,6 @@ static NSString *const WelcomePageEnabledFeatureFlag = @"welcomepage.enabled";
|
||||
props[@"colorScheme"] = self.colorScheme;
|
||||
}
|
||||
|
||||
NSMutableDictionary *config = [[NSMutableDictionary alloc] init];
|
||||
if (_audioOnly != nil) {
|
||||
config[@"startAudioOnly"] = @(self.audioOnly);
|
||||
}
|
||||
if (_audioMuted != nil) {
|
||||
config[@"startWithAudioMuted"] = @(self.audioMuted);
|
||||
}
|
||||
if (_videoMuted != nil) {
|
||||
config[@"startWithVideoMuted"] = @(self.videoMuted);
|
||||
}
|
||||
if (_subject != nil) {
|
||||
config[@"subject"] = self.subject;
|
||||
}
|
||||
if (_callHandle != nil) {
|
||||
config[@"callHandle"] = self.callHandle;
|
||||
}
|
||||
if (_callUUID != nil) {
|
||||
config[@"callUUID"] = [self.callUUID UUIDString];
|
||||
}
|
||||
|
||||
NSMutableDictionary *urlProps = [[NSMutableDictionary alloc] init];
|
||||
|
||||
// The room is fully qualified.
|
||||
@@ -241,7 +188,7 @@ static NSString *const WelcomePageEnabledFeatureFlag = @"welcomepage.enabled";
|
||||
props[@"userInfo"] = [self.userInfo asDict];
|
||||
}
|
||||
|
||||
urlProps[@"config"] = config;
|
||||
urlProps[@"config"] = _config;
|
||||
props[@"url"] = urlProps;
|
||||
|
||||
return props;
|
||||
|
||||
@@ -63,11 +63,14 @@ RCT_EXPORT_METHOD(authorize:(RCTPromiseResolveBlock)resolve
|
||||
currentReject = reject;
|
||||
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[DBClientsManager authorizeFromController:[UIApplication sharedApplication]
|
||||
controller:[[self class] topMostController]
|
||||
openURL:^(NSURL *url) {
|
||||
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
|
||||
}];
|
||||
DBScopeRequest *scopeRequest = [[DBScopeRequest alloc] initWithScopeType:DBScopeTypeUser
|
||||
scopes:@[]
|
||||
includeGrantedScopes:NO];
|
||||
[DBClientsManager authorizeFromControllerV2:[UIApplication sharedApplication]
|
||||
controller:[[self class] topMostController]
|
||||
loadingStatusDelegate:nil
|
||||
openURL:^(NSURL *url) { [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil]; }
|
||||
scopeRequest:scopeRequest];
|
||||
});
|
||||
}
|
||||
|
||||
@@ -128,25 +131,31 @@ RCT_EXPORT_METHOD(getSpaceUsage: (NSString *)token
|
||||
if (currentReject == nil || currentResolve == nil) {
|
||||
return NO;
|
||||
}
|
||||
DBOAuthResult *authResult = [DBClientsManager handleRedirectURL:url];
|
||||
if (authResult) {
|
||||
if ([authResult isSuccess]) {
|
||||
currentResolve(authResult.accessToken.accessToken);
|
||||
} else {
|
||||
NSString *msg;
|
||||
if ([authResult isError]) {
|
||||
msg = [NSString stringWithFormat:@"%@, error type: %zd",[authResult errorDescription], [authResult errorType]];
|
||||
|
||||
BOOL canHandle = [DBClientsManager handleRedirectURL:url completion:^(DBOAuthResult *authResult) {
|
||||
if (authResult) {
|
||||
if ([authResult isSuccess]) {
|
||||
NSInteger msTimestamp = authResult.accessToken.tokenExpirationTimestamp * 1000;
|
||||
NSDictionary *authInfo = @{@"token": authResult.accessToken.accessToken,
|
||||
@"rToken": authResult.accessToken.refreshToken,
|
||||
@"expireDate": @(msTimestamp)
|
||||
};
|
||||
currentResolve(authInfo);
|
||||
} else {
|
||||
msg = @"OAuth canceled!";
|
||||
NSString *msg;
|
||||
if ([authResult isError]) {
|
||||
msg = [NSString stringWithFormat:@"%@, error type: %zd", [authResult errorDescription], [authResult errorType]];
|
||||
} else {
|
||||
msg = @"OAuth canceled!";
|
||||
}
|
||||
currentReject(@"authorize", msg, nil);
|
||||
}
|
||||
currentReject(@"authorize", msg, nil);
|
||||
currentResolve = nil;
|
||||
currentReject = nil;
|
||||
}
|
||||
currentResolve = nil;
|
||||
currentReject = nil;
|
||||
|
||||
return YES;
|
||||
}
|
||||
return NO;
|
||||
}];
|
||||
|
||||
return canHandle;
|
||||
}
|
||||
|
||||
+ (UIViewController *)topMostController {
|
||||
|
||||
@@ -144,7 +144,6 @@ public class PiPViewCoordinator {
|
||||
/// screen size changes
|
||||
public func resetBounds(bounds: CGRect) {
|
||||
currentBounds = bounds
|
||||
exitPictureInPicture()
|
||||
}
|
||||
|
||||
/// Stop the dragging gesture of the root view
|
||||
|
||||
@@ -49,9 +49,11 @@
|
||||
"messagebox": "",
|
||||
"nickname": {
|
||||
"popover": "Kies ’n bynaam",
|
||||
"title": ""
|
||||
"title": "",
|
||||
"titleWithPolls": ""
|
||||
},
|
||||
"title": ""
|
||||
"title": "",
|
||||
"titleWithPolls": ""
|
||||
},
|
||||
"connectingOverlay": {
|
||||
"joiningRoom": ""
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
"copyInvite": "انسخ دعوةً للاجتماع",
|
||||
"copyLink": "انسخ رابط الاجتماع",
|
||||
"copyStream": "انسخ رابط البث المباشر",
|
||||
"contacts": "contacts",
|
||||
"countryNotSupported": "لا ندعم هذه الوجهة حاليًا.",
|
||||
"countryReminder": "أتريد الاتصال بمن هو خارج الولايات المتحدة؟ تأكد من الابتداء برمز الدولة أولًا!",
|
||||
"defaultEmail": "بريدك الافتراضي",
|
||||
@@ -16,18 +17,14 @@
|
||||
"inviteMoreMailSubject": "ضم {{appName}} للاجتماع",
|
||||
"inviteMorePrompt": "ادعُ أشخاصًا آخرين",
|
||||
"linkCopied": "نُسِخ الرابط",
|
||||
"loading": "البحث عن أشخاص وأرقام هواتف",
|
||||
"loadingNumber": "التحقق من رقم الهاتف",
|
||||
"loadingPeople": "البحث عن أشخاص لإضافتهم",
|
||||
"noResults": "لم يُعثَر على أي نتيجة بحث متطابقة",
|
||||
"noValidNumbers": "ادخل رقم هاتف، رجاءً",
|
||||
"outlookEmail": "بريد مايكروسوفت",
|
||||
"searchNumbers": "أضف ارقام هواتف",
|
||||
"searchPeople": "ابحث عن أشخاص",
|
||||
"searchPeopleAndNumbers": "ابحث عن أشخاص أو أضف أرقام هواتفهم",
|
||||
"phoneNumbers": "أضف ارقام هواتف",
|
||||
"search": "ابحث عن أشخاص",
|
||||
"shareInvite": "شارك دعوةً للاجتماع",
|
||||
"shareLink": "شارك رابط الاجتماع لدعوة الأخرين",
|
||||
"shareStream": "شارك رابط البث المباشر للاجتماع",
|
||||
"sipAddresses": "sip عنوان",
|
||||
"telephone": "رقم الهاتف: {{number}}",
|
||||
"title": "ادعُ أحدًا لهذا الاجتماع",
|
||||
"yahooEmail": "بريد ياهوو"
|
||||
@@ -61,6 +58,7 @@
|
||||
"today": "اليوم"
|
||||
},
|
||||
"chat": {
|
||||
"enter": "أدخل الغرفة",
|
||||
"error": "خطأ: لم تُرسَل رسالتك. السبب: {{error}}",
|
||||
"fieldPlaceHolder": "اكتب رسالتك هنا",
|
||||
"messagebox": "اكتب رسالة",
|
||||
@@ -68,16 +66,27 @@
|
||||
"noMessagesMessage": "لا يوجد أي رسالة في الاجتماع بعد. ابدأ محادثة هنا.",
|
||||
"nickname": {
|
||||
"popover": "اختر لقبًا",
|
||||
"title": "اكتب لقبًا لاعتماده في المحادثة"
|
||||
"title": "اكتب لقبًا لاعتماده في المحادثة",
|
||||
"titleWithPolls": "اكتب لقبًا لاعتماده في المحادثة"
|
||||
},
|
||||
"privateNotice": "أرسل رسالة خاصة إلى {{recipient}}",
|
||||
"message": "رسالة",
|
||||
"messageAccessibleTitle": "{{user}} مقولة:",
|
||||
"messageAccessibleTitleMe": "أنا أقول:",
|
||||
"smileysPanel": "واجهة الإيموجي",
|
||||
"tabs": {
|
||||
"chat": "دردشة",
|
||||
"polls": "تصويت"
|
||||
},
|
||||
"title": "محادثة",
|
||||
"titleWithPolls": "محادثة",
|
||||
"you": "أنت"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
"installExtensionText": "نزِّل الإضافة للدمج مع رزنامة غوغل ورزنامة أوفيس 365",
|
||||
"buttonText": "نزِّل إضافة متصفح كروم",
|
||||
"dontShowAgain": "لا ترني هذه مرة أخرى"
|
||||
"dontShowAgain": "لا ترني هذه مرة أخرى",
|
||||
"close": "إغلق"
|
||||
},
|
||||
"connectingOverlay": {
|
||||
"joiningRoom": "قيد وصلك بالإجتماع..."
|
||||
@@ -99,6 +108,7 @@
|
||||
},
|
||||
"connectionindicator": {
|
||||
"address": "العنوان:",
|
||||
"audio_ssrc": "مصدر الصوت:",
|
||||
"bandwidth": "مُعدَّل البيانات المتبادلة:",
|
||||
"bitrate": "مُعدَّل البث:",
|
||||
"bridgeCount": "عدد المخدِّمات: ",
|
||||
@@ -126,9 +136,12 @@
|
||||
"remoteport": "المنفذ البعيد:",
|
||||
"remoteport_plural": "المنافذ البعيدة:",
|
||||
"resolution": "الدقة:",
|
||||
"savelogs": "خزن الوقوعات",
|
||||
"participant_id": "معرّف المشترك:",
|
||||
"status": "الاتصال:",
|
||||
"transport": "النقل:",
|
||||
"transport_plural": "النواقل:"
|
||||
"transport_plural": "النواقل:",
|
||||
"video_ssrc": "مصدر الصورة:"
|
||||
},
|
||||
"dateUtils": {
|
||||
"earlier": "سابقًا",
|
||||
@@ -170,6 +183,7 @@
|
||||
"alreadySharedVideoMsg": "يشارك أحد الحضور الفيديو حاليًا، ولا يسمح هذا الإجتماع سوى بمشاركة فيديو واحد في آن واحد",
|
||||
"alreadySharedVideoTitle": "لا يُسمَح سوى بفيديو مشارك واحد على الأكثر في آن واحد.",
|
||||
"applicationWindow": "نافذة التطبيق",
|
||||
"authenticationRequired": "يستلزم التوثيق",
|
||||
"Back": "عد للخلف",
|
||||
"cameraConstraintFailedError": "لا تتوافق كاميرتك مع بعض الشروط المطلوبة.",
|
||||
"cameraNotFoundError": "لم يُعثَر على اي كاميرا",
|
||||
@@ -177,6 +191,7 @@
|
||||
"cameraNotSendingDataTitle": "يصعب الوصول الوصول إلى كاميرتك",
|
||||
"cameraPermissionDeniedError": "لم تُمنَح إذن استعمال الكاميرا. لا يزال بإمكانك حضور المؤتمر ولكن لن يراك الآخرون. استعمال زر الكاميرا في شريط العنوان لمحاول إصلاح المشكلة.",
|
||||
"cameraUnknownError": "يصعب استعمال الكاميرا لأسباب مجهولة.",
|
||||
"cameraTimeoutError": "تعذر بدء مصدر الفيديو. انتهت المهلة!",
|
||||
"cameraUnsupportedResolutionError": "لا تدعم كاميرتك دقة الفيديو المطلوبة.",
|
||||
"Cancel": "ِألغ",
|
||||
"close": "أغلق",
|
||||
@@ -194,16 +209,20 @@
|
||||
"copied": "نُسِخ!",
|
||||
"copy": "انسخ",
|
||||
"dismiss": "تجاهل",
|
||||
"displayNameRequired": "السلام عليك! ما اسمك؟",
|
||||
"displayNameRequired": "السلام عليكم! ما اسمك؟",
|
||||
"done": "اُنجِز",
|
||||
"e2eeDescription": "<p>عملية التعمية من طرف لطرف <strong>قيد التجريب</strong> حاليًا. زر رجاءً <a href='https://jitsi.org/blog/e2ee/' target='_blank'>هذا المنشور</a> لمزيد من التفاصيل.</p><br/><p>ضع في ذهنك أن تشغيل عملية التعمية من طرف لطرف ستعطل عمل بعض الخدمات التي يقدمها المُخدِّم مثل: التسجيل، والبث الحي، الاشتراك عبر الهاتف. أضف إلى ذلك أن الاجتماع سيعمل مع الأشخاص المنضمين من المتصفح التي تدعم قابلية الدخول إلى البث.</p>",
|
||||
"e2eeLabel": "المفتاح",
|
||||
"e2eeWarning": "<br /><p><strong>تحذير:</strong>لا يبدو أن جميع الحاضرين في هذا الاجتماع يدعمون عملية التعمية طرف لطرف. إن فعَّلت العملية، فلن يتمكنوا من رؤيتك ولا سماعك.</p>",
|
||||
"e2eeDisabledDueToMaxModeDescription": "لا يمكن تمكين التشفير من طرف إلى طرف بسبب العدد الكبير من المشاركين في المؤتمر.",
|
||||
"e2eeWarning": "تحذير: لا يبدو أن جميع المشاركين في هذا الاجتماع لديهم دعم للتشفير من طرف إلى طرف. إذا قمت بتمكينه فلن يتمكنوا من رؤيتك أو سماعك.",
|
||||
"e2eeWillDisableDueToMaxModeDescription": "تحذير: سيتم تعطيل التشفير من طرف إلى طرف تلقائيًا إذا انضم المزيد من المشاركين إلى المؤتمر.",
|
||||
"enterDisplayName": "أدخل اسمك هنا، رجاءً",
|
||||
"embedMeeting": "تضمين الاجتماع",
|
||||
"error": "خطأ",
|
||||
"gracefulShutdown": "خدمتنا متوقفة حاليًا لعمليات الصيانة. جرب مرة أخرى في وقت لاحق.",
|
||||
"grantModeratorDialog": "أما زلت راغب بجعل هذا المشارك رئيس الجلسة؟",
|
||||
"grantModeratorTitle": "اجعله رئيس الجلسة",
|
||||
"hideShareAudioHelper": "لا تظهر هذا الحوار مرة أخرى",
|
||||
"IamHost": "أنا المضيف",
|
||||
"incorrectRoomLockPassword": "كلمة مرور خطأ",
|
||||
"incorrectPassword": "اسم المستخدم أو كلمة المرور خطأ",
|
||||
@@ -213,15 +232,15 @@
|
||||
"kickParticipantButton": "اطرد",
|
||||
"kickParticipantDialog": "أمتأكد من طرد هذا المشارك؟",
|
||||
"kickParticipantTitle": "أتريد طرد هذا المشارك؟",
|
||||
"kickTitle": "عذرًا! طردك {{participantDisplayName}} من الاجتماع",
|
||||
"kickTitle": "عذرًا! تم طردك {{participantDisplayName}} من الاجتماع",
|
||||
"liveStreaming": "البث المباشر الحي",
|
||||
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "غير ممكن أثناء التسجيل",
|
||||
"liveStreamingDisabledForGuestTooltip": "لا يمكن للضيوف بدء بث حي مباشر.",
|
||||
"liveStreamingDisabledTooltip": "بدء بثٍ حيٍّ مُعطَّل",
|
||||
"lockMessage": "فشل جعل المؤتمر مغلقًا.",
|
||||
"lockRoom": "أضف الاجتماع $t(lockRoomPasswordUppercase)",
|
||||
"lockTitle": "فشلت عملية القفل والإغلاق",
|
||||
"logoutQuestion": "أمتأكد من رغبتك في الخروج وإيقاف المؤتمر؟",
|
||||
"login": "تسجيل الدخول",
|
||||
"logoutTitle": "الخروج",
|
||||
"maxUsersLimitReached": "وصل عدد المشاركين إلى الحد الأقصى. المؤتمر مكتمل الحضور. اتصل رجاءً براعي المؤتمر أو جرب مرة أخرى لاحقًا.",
|
||||
"maxUsersLimitReachedTitle": "وصل عدد المشاركين إلى الحد الأقصى",
|
||||
@@ -230,28 +249,46 @@
|
||||
"micNotSendingData": "اذهب إلى إعدادات حاسوبك لإلغاء كتم المجهار (المايكروفون) وضبط مستواه",
|
||||
"micNotSendingDataTitle": "كتم ضبط الإعدادات لديك المجهار (المايكروفون)",
|
||||
"micPermissionDeniedError": "لم تعط إذن استعمال المجهار (المايكروفون) الخاص بك. ما يزال بإمكانك الإنضمام إلى المؤتمر ولكن دون أن يسمعك الآخرون. جرب استعمال زر الكاميرا في شريط العنوان لإصلاح هذه المشكلة.",
|
||||
"micUnknownError": "يصعب استعمال المجهار (المايكروفون) الخاص بك لأسباب مجهولة.",
|
||||
"micTimeoutError": "Could not start audio source. Timeout occured!",
|
||||
"micUnknownError": "Cannot use microphone for an unknown reason.",
|
||||
"moderationAudioLabel": "Allow attendees to unmute themselves",
|
||||
"moderationVideoLabel": "Allow attendees to start their video",
|
||||
"muteEveryoneElseDialog": "بمجرد أن تكتمهم، لن تتمكن نم إلغاء الكتم هذا، ولكن يمكنهم إلغاء كتم أنفسهم في أي وقت.",
|
||||
"muteEveryoneElseTitle": "أتريد كتم الجميع باستثناء {{whom}}?",
|
||||
"muteEveryoneDialog": "أمتأكد من رغبتك بكتم الجميع؟ لن تتمكن من إلغاء الكتم ولكن يمكنهم إلغاء كتم أنفسهم في أي وقت.",
|
||||
"muteEveryoneDialogModerationOn": "The participants can send a request to speak at any time.",
|
||||
"muteEveryoneTitle": "أتريد كتم الجميع؟",
|
||||
"muteEveryoneElsesVideoDialog": "Once the camera is disabled, you won't be able to turn it back on, but they can turn it back on at any time.",
|
||||
"muteEveryoneElsesVideoTitle": "Stop everyone's video except {{whom}}?",
|
||||
"muteEveryonesVideoDialog": "The participants can turn on their video at any time.",
|
||||
"muteEveryonesVideoDialogModerationOn": "The participants can send a request to turn on their video at any time.",
|
||||
"muteEveryonesVideoDialogOk": "Disable",
|
||||
"muteEveryonesVideoTitle": "Stop everyone's video?",
|
||||
"muteEveryoneSelf": "اكتم نفسك أيضًا",
|
||||
"muteEveryoneStartMuted": "البدء مع كتم الجميع من الآن فصاعدًا",
|
||||
"muteParticipantBody": "لن تتكمن من إلغاء كتمهم، ولكن يمكنهم إلغاء كتم أنفسهم في أي وقت.",
|
||||
"muteParticipantButton": "كتم",
|
||||
"muteParticipantDialog": "أمتأكد من رغبتك لهذا المشارك؟ لن تتمكن من إلغاء الكتم ولكن يمكنه إلغاء كتم أنفسهم في أي وقت.",
|
||||
"muteParticipantsVideoDialog": "هل أنت متأكد أنك تريد إيقاف تشغيل كاميرا هذا المشارك؟ لن تتمكن من إعادة تشغيل الكاميرا ، ولكن يمكنهم إعادة تشغيلها في أي وقت.",
|
||||
"muteParticipantTitle": "أتريد كتم هذا المشارك؟",
|
||||
"muteParticipantsVideoButton": "وقف الكاميرا",
|
||||
"muteParticipantsVideoTitle": "تعطيل الكاميرا لهذا المشارك؟",
|
||||
"muteParticipantsVideoBody": "لن تتمكن من إعادة تشغيل الكاميرا ، ولكن يمكنهم إعادة تشغيلها في أي وقت.",
|
||||
"noDropboxToken": "لا يوجد رمز مميز صالح لـ Dropbox",
|
||||
"Ok": "تمام",
|
||||
"password": "Password",
|
||||
"passwordLabel": "جعل عضو ما هذا الاجتماع مغلقًا. أدخل رجاءً $t(lockRoomPassword) للإنضمام.",
|
||||
"passwordNotSupported": "ضبط اجتماع $t(lockRoomPassword) غير مدعوم.",
|
||||
"passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) غير مدعوم",
|
||||
"passwordRequired": "يُطلَب $t(lockRoomPasswordUppercase)",
|
||||
"permissionErrorTitle": "الإذن مطلوب",
|
||||
"permissionCameraRequiredError": "مطلوب إذن الكاميرا للمشاركة في المؤتمرات بالفيديو. يرجى منحه في الإعدادات",
|
||||
"permissionMicRequiredError": "مطلوب إذن الميكروفون للمشاركة في المؤتمرات مع الصوت. يرجى منحه في الإعدادات",
|
||||
"popupError": "يمنع متصفحك النوافذ المنبثقة من هذا الموقع. فعِّل رجاءً النوافذ المنبثقة في المتصفح من إعدادات الحماية وحاول مرة أخرى.",
|
||||
"popupErrorTitle": "النوافذ المنبثقة محجوبة.",
|
||||
"readMore": "more",
|
||||
"readMore": "أكثر",
|
||||
"recording": "قيد التسجيل",
|
||||
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "ليس بالإمكان ما دمت قيد البث المباشر",
|
||||
"recordingDisabledForGuestTooltip": "لا يمكن للضيوف بدء عملية التسجيل.",
|
||||
"recordingDisabledTooltip": "عملية التسجيل معطلة.",
|
||||
"rejoinNow": "انضم مجدَّدًا الآن",
|
||||
"remoteControlAllowedMessage": "قبل {{user}} طلب إمكانية التحكم البعيد!",
|
||||
@@ -278,15 +315,27 @@
|
||||
"sendPrivateMessageTitle": "أترسل ردًا خاصًا؟",
|
||||
"serviceUnavailable": "الخدمة غير متاحة",
|
||||
"sessTerminated": "أُنهيَت المكالمة",
|
||||
"sessionRestarted": "إعادة الاتصال من الجسر",
|
||||
"Share": "شارك",
|
||||
"shareAudio": "استمر",
|
||||
"shareAudioTitle" : "How to share audio",
|
||||
"shareAudioWarningTitle": "You need to stop screen sharing before sharing audio",
|
||||
"shareAudioWarningH1": "If you want to share just audio:",
|
||||
"shareAudioWarningD1": "you need to stop screen sharing before sharing your audio.",
|
||||
"shareAudioWarningD2": "you need to restart your screen sharing and check the \"share audio\" option.",
|
||||
"shareMediaWarningGenericH2": "If you want to share your screen and audio",
|
||||
"shareVideoLinkError": "زودنا برابط يوتيوب صحيح",
|
||||
"shareVideoTitle": "شارك فيديو",
|
||||
"shareYourScreen": "شارك شاشتك",
|
||||
"shareYourScreenDisabled": "مشاركة الشاشة مُعطَّلة",
|
||||
"shareYourScreenDisabledForGuest": "لا يمكن للضيوف مشاركة شاشتهم",
|
||||
"startLiveStreaming": "ابدأ بثًا حيًا",
|
||||
"startRecording": "ابدأ التسجيل",
|
||||
"startRemoteControlErrorMessage": "حصل خطأٌ أثناء محاولة بدء جلسة تحكم بعيد!",
|
||||
"shareScreenWarningTitle": "تحتاج إلى إيقاف مشاركة الصوت قبل مشاركة شاشتك",
|
||||
"shareScreenWarningH1": "إذا كنت تريد مشاركة شاشتك فقط:",
|
||||
"shareScreenWarningD1": "تحتاج إلى إيقاف مشاركة الصوت قبل مشاركة شاشتك.",
|
||||
"shareScreenWarningD2": "you need to stop audio sharing, start screen sharing and check the \"share audio\" option.",
|
||||
"sharedVideoLinkPlaceholder": "رابط اليوتيوب او رابط الفيديو المباشر",
|
||||
"stopLiveStreaming": "أوقف البث الحي",
|
||||
"stopRecording": "أوقف التسجيل",
|
||||
"stopRecordingWarning": "أمتأكد من رغبتك بإيقاف التسجيل؟",
|
||||
@@ -299,12 +348,20 @@
|
||||
"tokenAuthFailedTitle": "فشلت عملية الاستيثاق",
|
||||
"transcribing": "يذاع",
|
||||
"unlockRoom": "إزل الاجتماع $t(lockRoomPassword)",
|
||||
"user": "مستخدم",
|
||||
"userIdentifier": "معرف المستخدم",
|
||||
"userPassword": "كلمة مرور المستخدم",
|
||||
"videoLink": "رابط الفيديو",
|
||||
"viewUpgradeOptions": "عرض خيارات الترقية",
|
||||
"viewUpgradeOptionsContent": "للحصول على وصول غير محدود إلى الميزات المتميزة مثل التسجيل والنسخ وتدفق RTMP والمزيد ، ستحتاج إلى ترقية خطتك.",
|
||||
"viewUpgradeOptionsTitle": "لقد اكتشفت ميزة مميزة!",
|
||||
"WaitForHostMsg": "لم يبدأ المؤتمر <b>{{room}}</b> بعد. إن كنت المضيف والراعي، فنرجو تأكيد ذلك عبر الاستيثاق أو انتظر وصول المضيف رجاءً. ",
|
||||
"WaitForHostMsgWOk": "لم يبدأ المؤتمر <b>{{room}}</b> بعد. إن كنت المضيف والراعي، فاضغط على «تمام» للاستيثاق أو انتظر وصول المضيف رجاءً.",
|
||||
"WaitingForHost": "ننتظر وصول المضيف ...",
|
||||
"Yes": "نعم",
|
||||
"yourEntireScreen": "شاشتك كاملةً"
|
||||
"yourEntireScreen": "شاشتك كاملةً",
|
||||
"remoteUserControls": "ضوابط المستخدم عن بعد لـ {{username}}",
|
||||
"localUserControls": "ضوابط المستخدم المحلي"
|
||||
},
|
||||
"dialOut": {
|
||||
"statusMessage": "{{status}} الآن"
|
||||
@@ -318,6 +375,29 @@
|
||||
"embedMeeting": {
|
||||
"title": "ضمِّن هذا الاجتماع"
|
||||
},
|
||||
"virtualBackground": {
|
||||
"apply": "تطبيق",
|
||||
"title": "خلفيات افتراضية",
|
||||
"blur": "ضبابية",
|
||||
"slightBlur": "طمس طفيف",
|
||||
"removeBackground": "إزالة خلفية",
|
||||
"addBackground": "أضف خلفية",
|
||||
"pleaseWait": "يرجى الانتظار...",
|
||||
"none": "بدون",
|
||||
"uploadedImage": "تحميل الصورة {{index}}",
|
||||
"deleteImage": "حذف صورة",
|
||||
"image1" : "Beach",
|
||||
"image2" : "جدار أبيض محايد",
|
||||
"image3" : "غرفة بيضاء فارغة",
|
||||
"image4" : "مصباح أرضي أسود",
|
||||
"image5" : "جبل",
|
||||
"image6" : "غابة",
|
||||
"image7" : "شروق الشمس",
|
||||
"desktopShareError": "تعذر إنشاء مشاركة سطح المكتب",
|
||||
"desktopShare":"مشاركة سطح المكتب",
|
||||
"webAssemblyWarning": "WebAssembly غير مدعوم",
|
||||
"backgroundEffectError": "فشل تطبيق تأثير الخلفية."
|
||||
},
|
||||
"feedback": {
|
||||
"average": "المتوسط",
|
||||
"bad": "سيئة",
|
||||
@@ -325,7 +405,8 @@
|
||||
"good": "جيدة",
|
||||
"rateExperience": "قيِّم تجربتك مع هذا الإجتماع",
|
||||
"veryBad": "سيئة للغاية",
|
||||
"veryGood": "ممتازة"
|
||||
"veryGood": "ممتازة",
|
||||
"star": "نجمة"
|
||||
},
|
||||
"incomingCall": {
|
||||
"answer": "أجب",
|
||||
@@ -342,6 +423,7 @@
|
||||
"country": "البلد",
|
||||
"dialANumber": "إن أردت الإنضمام إلى الإجتماع، اتصل بأحد الأرقام التالية ثم أدخل رمز المرور",
|
||||
"dialInConferenceID": "رمز المرور (PIN):",
|
||||
"copyNumber":"إنسخ الرقم",
|
||||
"dialInNotSupported": "عذرًا، الاتصال غير مدعوم حاليًا.",
|
||||
"dialInNumber": "اتصل:",
|
||||
"dialInSummaryError": "خطأ في تحصيل معلومات الاتصال. جرب مرة أخرى لاحقًا.",
|
||||
@@ -350,6 +432,11 @@
|
||||
"inviteLiveStream": "لمشاهدة البث الحي لهذا الإجتماع، اضط على هذا الرابط: {{url}}",
|
||||
"invitePhone": "للإنضمام من الهاتف، استعمل: {{number}},,{{conferenceID}}#\n",
|
||||
"invitePhoneAlternatives": "أتبحث عن رقم اتصال مختلف؟\nأنظر أرقام الوصول إلى هذا الإجتماع: {{url}}\n\n\nإن كنت أيضًا تتصل عبر غرفة اتصال (room phone)، انضم دون الاتصال بالصوت: {{silentUrl}}",
|
||||
"inviteSipEndpoint": "To join using the SIP address, enter this: {{sipUri}}",
|
||||
"inviteTextiOSPersonal": "{{name}} is inviting you to a meeting.",
|
||||
"inviteTextiOSJoinSilent": "If you are dialing-in through a room phone, use this link to join without connecting to audio: {{silentUrl}}.",
|
||||
"inviteTextiOSInviteUrl": "Click the following link to join: {{inviteUrl}}.",
|
||||
"inviteTextiOSPhone": "To join via phone, use this number: {{number}},,{{conferenceID}}#. If you are looking for a different number, this is the full list: {{didUrl}}.",
|
||||
"inviteURLFirstPartGeneral": "دُعيِت للإنضمام إلى اجتماع",
|
||||
"inviteURLFirstPartPersonal": "دعاك {{name}} لاجتماع.\n",
|
||||
"inviteURLSecondPart": "\nانضم للاجتماع:\n{{url}}\n",
|
||||
@@ -360,6 +447,7 @@
|
||||
"noRoom": "لم تُخصَّص غرفة للاتصال إليها",
|
||||
"numbers": "أرقام الاتصال",
|
||||
"password": "$t(lockRoomPasswordUppercase):",
|
||||
"sip": "SIP عنوان",
|
||||
"title": "شارك",
|
||||
"tooltip": "شارك رابط وتفاصيل الاتصال لهذا الاجتماع",
|
||||
"label": "تفاصيل الاجتماع"
|
||||
@@ -378,6 +466,7 @@
|
||||
"support": "الدعم",
|
||||
"supportMsg": "إن تكرَّر حصول هذا، تواصل مع"
|
||||
},
|
||||
"jitsiHome": "{{logo}} Logo, links to Homepage",
|
||||
"keyboardShortcuts": {
|
||||
"focusLocal": "ركز على الفيديو الخاص بك",
|
||||
"focusRemote": "ركز على فيديو مشارك آخر",
|
||||
@@ -390,10 +479,10 @@
|
||||
"showSpeakerStats": "اظهر حالة مكبر الصوت",
|
||||
"toggleChat": "افتح/أغلق المحادثة",
|
||||
"toggleFilmstrip": "أظهِر/اخفِ إطار الفيديو المُصغَّر",
|
||||
"toggleParticipantsPane": "إظهار أو إخفاء قائمة المشاركين",
|
||||
"toggleScreensharing": "بدِّل بين الكاميرا ومشاركة الشاشة",
|
||||
"toggleShortcuts": "أظهِر/اخفِ اختصارات لوحة المفاتيح",
|
||||
"videoMute": "ابدأ/أوقف كاميرتك",
|
||||
"videoQuality": "اضبط جودة المكالمة"
|
||||
"videoMute": "ابدأ/أوقف كاميرتك"
|
||||
},
|
||||
"liveStreaming": {
|
||||
"limitNotificationDescriptionWeb": "نظرًا للضغط الكبير، سيقيَّد البث إلى {{limit}} د، ولكن إن أردت إجراء عملية بث غير محدودة، جرِّب <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
@@ -462,13 +551,15 @@
|
||||
"lockRoomPasswordUppercase": "كلمة المرور",
|
||||
"me": "أنا",
|
||||
"notify": {
|
||||
"allowAction": "Allow",
|
||||
"allowedUnmute": "You can unmute your microphone, start your camera or share your screen.",
|
||||
"connectedOneMember": "انضم {{name}} للاجتماع",
|
||||
"connectedThreePlusMembers": "انضم {{name}} وعدد {{count}} غيره إلى الاجتماع",
|
||||
"connectedTwoMembers": "انضم {{first}} و {{second}} إلى الاجتماع",
|
||||
"disconnected": "انقطع الاتصال",
|
||||
"focus": "التركيز على المؤتمر",
|
||||
"focusFail": "إنَّ {{component}} غير متاح. ستعاد المحاولة مرة أخرى خلال {{ms}} ثانية.",
|
||||
"grantedTo": "مُنِحت صلاحية رئيس الجلسة إلى {{to}}!",
|
||||
"hostAskedUnmute": "The moderator would like you to speak",
|
||||
"invitedOneMember": "دُعِي {{name}}",
|
||||
"invitedThreePlusMembers": "دُعِي {{name}} وعدد {{count}} آخرين",
|
||||
"invitedTwoMembers": "دُعِي {{first}} و {{second}}",
|
||||
@@ -482,6 +573,10 @@
|
||||
"passwordRemovedRemotely": "أزال أحد المشاركين {{participantDisplayName}}",
|
||||
"passwordSetRemotely": "ضبط أحد المشاركين $t(lockRoomPasswordUppercase)",
|
||||
"raisedHand": "يريد {{name}} التحدث",
|
||||
"screenShareNoAudio": " Share audio box was not checked in the window selection screen.",
|
||||
"screenShareNoAudioTitle": "Couldn't share system audio!",
|
||||
"screenShareNoAudio": " Share audio box was not checked in the window selection screen.",
|
||||
"screenShareNoAudioTitle": "Couldn't share system audio!",
|
||||
"somebody": "شخص ما",
|
||||
"startSilentTitle": "انضممت دون مخرج للصوت!",
|
||||
"startSilentDescription": "أنضم مجدَّدًا للاجتماع لتفعيل الصوت",
|
||||
@@ -494,10 +589,76 @@
|
||||
"OldElectronAPPTitle": "ثغرة أمنية!",
|
||||
"oldElectronClientDescription1": "يبدو أنَّك تستعمل إصدارًا قديمًا من جيتسي يحوي ثغرة أمنية. تأكد رجاءً من أنَّك حدَّثته إلى ",
|
||||
"oldElectronClientDescription2": "أحدث إصدار",
|
||||
"oldElectronClientDescription3": " الآن!"
|
||||
"oldElectronClientDescription3": " الآن!",
|
||||
"moderationInEffectDescription": "Please raise hand if you want to speak.",
|
||||
"moderationInEffectCSDescription": "Please raise hand if you want to share your screen.",
|
||||
"moderationInEffectVideoDescription": "Please raise your hand if you want to start your camera.",
|
||||
"moderationInEffectTitle": "Your microphone is muted by the moderator",
|
||||
"moderationInEffectCSTitle": "Screen sharing is blocked by the moderator",
|
||||
"moderationInEffectVideoTitle": "Your camera is blocked by the moderator",
|
||||
"moderationRequestFromModerator": "The host would like you to unmute",
|
||||
"moderationRequestFromParticipant": "Wants to speak",
|
||||
"moderationStartedTitle": "Moderation started",
|
||||
"moderationStoppedTitle": "Moderation stopped",
|
||||
"moderationToggleDescription": "by {{participantDisplayName}}",
|
||||
"raiseHandAction": "Raise hand",
|
||||
"reactionSounds": "Disable sounds",
|
||||
"groupTitle": "Notifications"
|
||||
},
|
||||
"participantsPane": {
|
||||
"close": "Close",
|
||||
"header": "Participants",
|
||||
"headings": {
|
||||
"lobby": "Lobby ({{count}})",
|
||||
"participantsList": "المشاركون في الاجتماع({{count}})",
|
||||
"waitingLobby": "Waiting in lobby ({{count}})"
|
||||
},
|
||||
"actions": {
|
||||
"allow": "السماح للحاضرين بـ:",
|
||||
"allowVideo": "السماح بالفيديو",
|
||||
"audioModeration": "إعادة صوت أنفسهم",
|
||||
"blockEveryoneMicCamera": "حظر ميكروفون وكاميرا الجميع",
|
||||
"invite": "قم بدعوة شخص ما",
|
||||
"askUnmute": "اطلب إعادة الصوت",
|
||||
"mute": "كتم الصوت",
|
||||
"muteAll": "كتم الكل",
|
||||
"muteEveryoneElse": "كتم صوت الآخرين",
|
||||
"stopEveryonesVideo": "أوقف فيديو الجميع",
|
||||
"stopVideo": "أوقف الفيديو",
|
||||
"unblockEveryoneMicCamera": "قم بإلغاء حظر ميكروفون وكاميرا الجميع",
|
||||
"videoModeration": "ابدأ الفيديو الخاص بهم"
|
||||
}
|
||||
},
|
||||
"passwordSetRemotely": "ضبطها مشارك آخر",
|
||||
"passwordDigitsOnly": "حتى {{number}} عدد",
|
||||
"polls": {
|
||||
"create": {
|
||||
"addOption": "Add option",
|
||||
"answerPlaceholder": "Option {{index}}",
|
||||
"create": "Create a poll",
|
||||
"cancel": "Cancel",
|
||||
"pollOption" : "Poll option {{index}}",
|
||||
"pollQuestion" : "Poll Question",
|
||||
"questionPlaceholder": "Ask a question",
|
||||
"removeOption": "Remove option",
|
||||
"send": "Send"
|
||||
},
|
||||
"answer": {
|
||||
"skip": "Skip",
|
||||
"submit": "Submit"
|
||||
},
|
||||
"results": {
|
||||
"vote": "Vote",
|
||||
"changeVote": "Change vote",
|
||||
"empty": "There are no polls in the meeting yet. Start a poll here!",
|
||||
"hideDetailedResults": "Hide details",
|
||||
"showDetailedResults": "Show details"
|
||||
},
|
||||
"notification": {
|
||||
"title": "A new poll was added to this meeting",
|
||||
"description": "Open polls tab to vote"
|
||||
}
|
||||
},
|
||||
"poweredby": "مُشغَّل بوساطة",
|
||||
"prejoin": {
|
||||
"audioAndVideoError": "خطأ في الصوت أو الفيديو:",
|
||||
@@ -538,6 +699,7 @@
|
||||
"errorDialOutFailed": "فشلت عملية الاتصال، للأسف.",
|
||||
"errorDialOutStatus": "خطأ في معرفة حالة الاتصال",
|
||||
"errorMissingName": "أدخل اسمك للدخول للاجتماع",
|
||||
"errorNoPermissions": "You need to enable microphone and camera access",
|
||||
"errorStatusCode": "فشل الاتصال برمز خطأ: {{status}}",
|
||||
"errorValidation": "فشل التحقق من الرقم",
|
||||
"iWantToDialIn": "أريد الاتصال",
|
||||
@@ -551,6 +713,7 @@
|
||||
"premeeting": "ما قبل الاجتماع",
|
||||
"showScreen": "تفعيل واجهة ما قبل الاجتماع",
|
||||
"startWithPhone": "البدء مع جهاز الصوت من الجوال",
|
||||
"keyboardShortcuts" : "تفعيل اختصارات لوحة المفاتيح",
|
||||
"screenSharingError": "خطأ في مشاركة الشاشة:",
|
||||
"videoOnlyError": "خطأ في الفيديو:",
|
||||
"videoTrackError": "لم نتمكن من إنشاء ملف الفيديو",
|
||||
@@ -571,6 +734,7 @@
|
||||
"ringing": "يرن..."
|
||||
},
|
||||
"profile": {
|
||||
"avatar": "avatar",
|
||||
"setDisplayNameLabel": "حدد اسمك المراد عرضه",
|
||||
"setEmailInput": "أدخل بريدك الإلكتروني",
|
||||
"setEmailLabel": "حدد الصورة الرمزية (gravatar) لبريدك الإلكتروني",
|
||||
@@ -585,12 +749,15 @@
|
||||
"beta": "تجريبي",
|
||||
"busy": "نعمل على تحرير موارد التسجيل. حاول مرة أخرى بعد بضعة دقائق.",
|
||||
"busyTitle": "جميع المسجلين مشغولون حاليًا",
|
||||
"copyLink": "Copy Link",
|
||||
"error": "فشل التسجيل. حاول مرة أخرى.",
|
||||
"errorFetchingLink": "Error fetching recording link.",
|
||||
"expandedOff": "أوقٍف التسجيل",
|
||||
"expandedOn": "يُسجَّل الاجتماع الآن",
|
||||
"expandedPending": "بدء التسجيل...",
|
||||
"failedToStart": "فشل بدء التسجيل",
|
||||
"fileSharingdescription": "شارك التسجيل مع المشاركين للاجتماع",
|
||||
"linkGenerated": "We have generated a link to your recording.",
|
||||
"live": "مباشر",
|
||||
"loggedIn": "مُسجَّل باسم {{userName}}",
|
||||
"off": "أوقِف التسجيل",
|
||||
@@ -600,11 +767,13 @@
|
||||
"pending": "التحضير لتسجيل الاجتماع...",
|
||||
"rec": "تسجيل",
|
||||
"serviceDescription": "ستحفظ خدمة التسجيل الفيديو المستجل",
|
||||
"serviceDescriptionCloud": "Cloud recording",
|
||||
"serviceName": "خدمة التسجيل",
|
||||
"signIn": "دخول",
|
||||
"signOut": "خروج",
|
||||
"unavailable": "عجبًا! {{serviceName}} غير متاحة حاليًا. نعمل على حل المشكلة. حاول مرة أخرى لاحقًا.",
|
||||
"unavailableTitle": "التسجيل غير متاح"
|
||||
"unavailableTitle": "التسجيل غير متاح",
|
||||
"uploadToCloud": "Upload to the cloud"
|
||||
},
|
||||
"sectionList": {
|
||||
"pullToRefresh": "اسحب للتحديث"
|
||||
@@ -623,8 +792,13 @@
|
||||
"signedIn": "يجري الوصول إلى أحداث الرزنامة حاليًا التي تخص {{email}}. اضغط على زر قطع الاتصال بالأسفل لإيقاف الوصول إلى أحداث المسجلة في الرزنامة.",
|
||||
"title": "الرزنامة"
|
||||
},
|
||||
"desktopShareFramerate": "معدل إطارات مشاركة سطح المكتب",
|
||||
"desktopShareWarning": "تحتاج إلى إعادة تشغيل مشاركة الشاشة حتى تدخل الإعدادات الجديدة حيز التنفيذ. تحتاج إلى إعادة تشغيل مشاركة الشاشة حتى يتم تفعيل الإعدادات الجديدة.",
|
||||
"desktopShareHighFpsWarning": "قد يؤثر معدل الإطارات الأعلى لمشاركة سطح المكتب على النطاق الترددي الخاص بك. تحتاج إلى إعادة تشغيل مشاركة الشاشة حتى تدخل الإعدادات الجديدة حيز التنفيذ.",
|
||||
"devices": "الأجهزة",
|
||||
"followMe": "كل من يتابعني",
|
||||
"framesPerSecond": "إطار في الثانية",
|
||||
"incomingMessage": "رسالة واردة",
|
||||
"language": "اللغة",
|
||||
"loggedIn": "الدخول باسم {{name}}",
|
||||
"microphones": "المجهار (المايكروفون)",
|
||||
@@ -632,12 +806,19 @@
|
||||
"more": "المزيد",
|
||||
"name": "الاسم",
|
||||
"noDevice": "لا يوجد",
|
||||
"participantJoined": "انضم مشارك",
|
||||
"participantLeft": "غادر المشارك",
|
||||
"playSounds": "تشغيل الصوت عند:",
|
||||
"reactions": "ردود فعل الاجتماع",
|
||||
"sameAsSystem": "مثل النظام ({{label}})",
|
||||
"selectAudioOutput": "خرج الصوت",
|
||||
"selectCamera": "الكاميرا",
|
||||
"selectMic": "المجهار (المايكروفون)",
|
||||
"sounds": "اصوات",
|
||||
"speakers": "المذياع (مكبر الصوت)",
|
||||
"startAudioMuted": "بدء الجميع مكتومي الصوت",
|
||||
"startVideoMuted": "بدء الجميع دون فيديو",
|
||||
"talkWhileMuted": "تحدث أثناء كتم الصوت",
|
||||
"title": "الإعدادات"
|
||||
},
|
||||
"settingsView": {
|
||||
@@ -668,6 +849,7 @@
|
||||
},
|
||||
"speaker": "المتحدث",
|
||||
"speakerStats": {
|
||||
"search": "Search",
|
||||
"hours": "{{count}}س",
|
||||
"minutes": "{{count}}د",
|
||||
"name": "الاسم",
|
||||
@@ -677,6 +859,7 @@
|
||||
},
|
||||
"startupoverlay": {
|
||||
"policyText": " ",
|
||||
"genericTitle": "The meeting needs to use your microphone and camera.",
|
||||
"title": "يريد {{app}} استعمال المجهار والكاميرا خاصَّتك."
|
||||
},
|
||||
"suspendedoverlay": {
|
||||
@@ -688,9 +871,11 @@
|
||||
"accessibilityLabel": {
|
||||
"audioOnly": "بدل الصوت فقط",
|
||||
"audioRoute": "اختر جهاز الصوت",
|
||||
"boo": "Boo",
|
||||
"callQuality": "اضبط دقة الفيديو",
|
||||
"cc": "اظهِر/اخفِ الترجمة",
|
||||
"chat": "اظهِر/اخفِ نافذة الدردشة",
|
||||
"clap": "Clap",
|
||||
"document": "اظهِر/اخفِ الملف المشارك",
|
||||
"download": "نزِّل التطبيق",
|
||||
"embedMeeting": "ضمِّن الاجتماع",
|
||||
@@ -701,6 +886,8 @@
|
||||
"help": "مساعدة",
|
||||
"invite": "ادعُ آخرين",
|
||||
"kick": "اطرد مشاركًا",
|
||||
"laugh": "Laugh",
|
||||
"like": "Thumbs Up",
|
||||
"lobbyButton": "فعِّل/عطِّل وضع غرفة الانتظار",
|
||||
"localRecording": "اظهِر/اخفِ التحكم بالتسجيل المحلي",
|
||||
"lockRoom": "اظهِر/اخفِ كلمة مرور الاجتماع",
|
||||
@@ -709,34 +896,52 @@
|
||||
"moreOptions": "اظهر المزيد من الخيارت",
|
||||
"mute": "اظهِر/اخفِ كتم الصوت",
|
||||
"muteEveryone": "كتم الجميع",
|
||||
"muteEveryoneElse": "كتم صوت الآخرين",
|
||||
"muteEveryonesVideo": "تعطيل كاميرا الجميع",
|
||||
"muteEveryoneElsesVideo": "تعطيل كاميرا الآخرين",
|
||||
"participants": "مشاركون",
|
||||
"pip": "استعمل/اخرج من وضع صورة-في-صورة",
|
||||
"privateMessage": "أرسل رسالة خاصة",
|
||||
"profile": "عدِّل ملفك الشخصي",
|
||||
"raiseHand": "اظهِر/اخفِ رفع اليد",
|
||||
"reactionsMenu": "فتح / إغلاق قائمة التفاعلات",
|
||||
"recording": "اظهِر/اخفِ التسجيل",
|
||||
"remoteMute": "اكتم مشاركًا",
|
||||
"remoteVideoMute": "تعطيل كاميرا المشارك",
|
||||
"security": "خيارات الحماية",
|
||||
"Settings": "اظهِر/اخفِ الإعدادات",
|
||||
"shareaudio": "مشاركة الصوت",
|
||||
"sharedvideo": "اظهِر/اخفِ مشاركة فيديو يوتيوب",
|
||||
"shareRoom": "ادعُ أحدًا",
|
||||
"shareYourScreen": "بدِّل وضع مشاركة الشاشة",
|
||||
"shortcuts": "اظهِر/اخفِ الاختصارات",
|
||||
"show": "اظهر على المنصة",
|
||||
"silence": "Silence",
|
||||
"speakerStats": "اظهِر/اخفِ حالة المتحدث",
|
||||
"surprised": "Surprised",
|
||||
"tileView": "اظهِر/اخفِ عرض العنوان",
|
||||
"toggleCamera": "بدِّل الكاميرا",
|
||||
"toggleFilmstrip": "بدِّل وضع الشريط السينمائي (filmstrip)",
|
||||
"videomute": "بدِّل وضع اخفاء الفيديو",
|
||||
"videoblur": "استعمل/اخرج من وضع تغبيش خلفية الفيديو"
|
||||
"videoblur": "استعمل/اخرج من وضع تغبيش خلفية الفيديو",
|
||||
"selectBackground": "اختر الخلفية",
|
||||
"expand": "وسّع",
|
||||
"collapse": "قلّص"
|
||||
},
|
||||
"addPeople": "اضف أحدًا إلى المكالمة",
|
||||
"audioSettings": "إعدادات الصوت",
|
||||
"videoSettings": "اعدادات الفيديو",
|
||||
"audioOnlyOff": "عطِّل وضع معدَّل نقل البيانات المنخفص",
|
||||
"audioOnlyOn": "فعِّل وضع نقل البيانات المنخفض",
|
||||
"audioRoute": "اختر جهاز الصوت",
|
||||
"authenticate": "اَجرِ عملية الاستيثاق",
|
||||
"boo": "Boo",
|
||||
"callQuality": "اضبط دقة الفيديو",
|
||||
"chat": "افتح / أغلق الشاشة",
|
||||
"clap": "Clap",
|
||||
"closeChat": "أغلق الدردشة",
|
||||
"closeReactionsMenu": "إغلاق قائمة ردود الفعل",
|
||||
"disableReactionSounds": "يمكنك تعطيل أصوات ردود الفعل لهذا الاجتماع",
|
||||
"documentClose": "أغلق الملف المشارك",
|
||||
"documentOpen": "افتح الملف المشارك",
|
||||
"download": "نزِّل التطبيق",
|
||||
@@ -750,6 +955,8 @@
|
||||
"hangup": "غادر",
|
||||
"help": "مساعدة",
|
||||
"invite": "ادعُ أحدًا",
|
||||
"laugh": "Laugh",
|
||||
"like": "Thumbs Up",
|
||||
"lobbyButtonDisable": "عطِّل وضع غرفة الانتظار",
|
||||
"lobbyButtonEnable": "فعِّل وضع غرفة الانتظار",
|
||||
"login": "ادخل",
|
||||
@@ -759,6 +966,7 @@
|
||||
"moreOptions": "المزيد من الخيارات",
|
||||
"mute": "اكتم / ألغ الكتم",
|
||||
"muteEveryone": "اكتم الجميع",
|
||||
"muteEveryonesVideo": "تعطيل كاميرا الجميع",
|
||||
"noAudioSignalTitle": "لا يصلنا شيئًا من المجهار (المايكروفون) الخاص بك",
|
||||
"noAudioSignalDesc": "إن لم تكتمه عمدًا من إعدادات النظام لديك أو من الجهاز نفسه، بدِّله إلى جهاز آخر.",
|
||||
"noAudioSignalDescSuggestion": "إن لم تكتمه عمدًا من إعدادات النظام لديك أو من الجهاز نفسه، بدِّله إلى الجهاز الموصى به.",
|
||||
@@ -767,28 +975,39 @@
|
||||
"noisyAudioInputTitle": "يبدو أنَّ المجهار (المايكروفون) لديك يصدر الكثير من الضجة!",
|
||||
"noisyAudioInputDesc": "يبدو أنَّ المجهار (المايكروفون) لديك يصدر الكثير من الضجة، اكتمه رجاءً أو استعمل مجهارًا آخر.",
|
||||
"openChat": "فتح الدرشة",
|
||||
"openReactionsMenu": "افتح قائمة التفاعلات",
|
||||
"participants": "مشاركون",
|
||||
"pip": "استعمل وضع صورة-في-صورة",
|
||||
"privateMessage": "أرسل رسالة خاصة",
|
||||
"profile": "عدِّل ملفك الشخصي",
|
||||
"raiseHand": "ارفع / اخفض يدك",
|
||||
"raiseYourHand": "ارفع يدك",
|
||||
"reactionBoo": "Send boo reaction",
|
||||
"reactionClap": "Send clap reaction",
|
||||
"reactionLaugh": "Send laugh reaction",
|
||||
"reactionLike": "Send thumbs up reaction",
|
||||
"reactionSilence": "Send silence reaction",
|
||||
"reactionSurprised": "Send surprised reaction",
|
||||
"security": "خيارات الحماية",
|
||||
"Settings": "الإعدادات",
|
||||
"shareaudio": "مشاركة الصوت",
|
||||
"sharedvideo": "شارك فيديو يوتيوب",
|
||||
"shareRoom": "ادعُ أحدًا",
|
||||
"shortcuts": "اعرض الاختصارات",
|
||||
"silence": "Silence",
|
||||
"speakerStats": "حالة المتحدث",
|
||||
"startScreenSharing": "ابدأ بمشاركة الشاشة",
|
||||
"startSubtitles": "أظهر الترجمة",
|
||||
"stopAudioSharing": "وقف مشاركة الصوت",
|
||||
"stopScreenSharing": "أوقف مشاركة الشاشة",
|
||||
"stopSubtitles": "أخفِ الترجمة",
|
||||
"stopSharedVideo": "أوقف فيديو يوتيوب المشارك",
|
||||
"surprised": "Surprised",
|
||||
"talkWhileMutedPopup": "أتحاول التحدث؟ المجهار مكتوم لديك.",
|
||||
"tileViewToggle": "بدِّل عنوان العرض",
|
||||
"toggleCamera": "بدِّل الكاميرا",
|
||||
"videomute": "استعمل / أوقف الكاميرا",
|
||||
"startvideoblur": "غبِّش الخلفية",
|
||||
"stopvideoblur": "توقف عن تغبيش الخلفية"
|
||||
"selectBackground": "اختر الخلفية"
|
||||
},
|
||||
"transcribing": {
|
||||
"ccButtonTooltip": "أظهر / أخف الترجمة",
|
||||
@@ -814,6 +1033,7 @@
|
||||
"react-nativeGrantPermissions": "اختر <b><i>السماح</i></b> عندما يطلب المتصفح الأذونات.",
|
||||
"safariGrantPermissions": "اختر <b><i>تمام</i></b> عندما يطلب المتصفح الأذونات."
|
||||
},
|
||||
"volumeSlider": "Volume slider",
|
||||
"videoSIPGW": {
|
||||
"busy": "نعمل على تحرير الموارد. حاول مرة أخرى لاحقًا بعد بضعة دقائق.",
|
||||
"busyTitle": "خدمة الغرفة مشغولة حاليًا",
|
||||
@@ -836,26 +1056,29 @@
|
||||
"ld": "دقة منخفضة",
|
||||
"ldTooltip": "عرض فيديو بدقة منخفضة",
|
||||
"lowDefinition": "دقة منخفضة",
|
||||
"onlyAudioAvailable": "الصوت متاح فقط",
|
||||
"onlyAudioSupported": "الصوت مدعوم فقط في هذا المتصفح",
|
||||
"sd": "دقة قياسية",
|
||||
"sdTooltip": "عرض فيديو بدقة قياسية",
|
||||
"standardDefinition": "دقة قياسية"
|
||||
},
|
||||
"videothumbnail": {
|
||||
"connectionInfo": "معلومات الاتصال",
|
||||
"domute": "كتم",
|
||||
"domuteVideo": "تعطيل الكاميرا",
|
||||
"domuteOthers": "كتم الجميع",
|
||||
"domuteVideoOfOthers": "تعطيل الكاميرا للآخرين",
|
||||
"flip": "قلب",
|
||||
"grantModerator": "امنح صلاحيات رئيس الجلسة",
|
||||
"kick": "طرد خارجًا",
|
||||
"moderator": "رئيس الجلسة",
|
||||
"mute": "المشارك مكتوم الصوت",
|
||||
"muted": "مكتوم",
|
||||
"videoMuted": "الكاميرا معطلة",
|
||||
"remoteControl": "بدء / إيقاف التحكم البعيد",
|
||||
"show": "أظهر على المنصة",
|
||||
"videomute": "أوقف المشارك الكاميرا"
|
||||
},
|
||||
"welcomepage": {
|
||||
"addMeetingName": "Add Meeting name",
|
||||
"accessibilityLabel": {
|
||||
"join": "انقر للمشاركة",
|
||||
"roomname": "أدخل اسم الغرفة"
|
||||
@@ -872,8 +1095,14 @@
|
||||
"getHelp": "أريد مساعدة",
|
||||
"go": "ابدأ",
|
||||
"goSmall": "ابدأ",
|
||||
"headerTitle": "Jitsi Meet",
|
||||
"headerSubtitle": "Secure and high quality meetings",
|
||||
"info": "معلومات",
|
||||
"join": "أنشئ / انضم",
|
||||
"jitsiOnMobile": "Jitsi on mobile – download our apps and start a meeting from anywhere",
|
||||
"mobileDownLoadLinkIos": "Download mobile app for iOS",
|
||||
"mobileDownLoadLinkAndroid": "Download mobile app for Android",
|
||||
"mobileDownLoadLinkFDroid": "Download mobile app for F-Droid",
|
||||
"moderatedMessage": "أو a href=\"{{url}}\" rel=\"noopener noreferrer\" target=\"_blank\">احجز رابط لاجتماع</a> إن كنت رئيس الجلسة الوحيد فقط.",
|
||||
"privacy": "الخصوصية",
|
||||
"recentList": "الجديد",
|
||||
@@ -884,8 +1113,17 @@
|
||||
"roomname": "أدخل اسم الغرفة",
|
||||
"roomnameHint": "أدخل اسم أو رابط الغرفة التي تريد الانضمام إليها. يمكنك إنشاء اسم جديد لترسله إلى من تريد أن تجتمع معهم.",
|
||||
"sendFeedback": "أبدِ رأيك",
|
||||
"startMeeting": "Start meeting",
|
||||
"terms": "الشروط",
|
||||
"title": "منصة عقد مؤتمرات واجتماعات آمنة وكاملة المزايا ومجانية بالمطلق"
|
||||
"title": "منصة عقد مؤتمرات واجتماعات آمنة وكاملة المزايا ومجانية بالمطلق",
|
||||
"logo":{
|
||||
"calendar":"Calendar logo",
|
||||
"microsoftLogo":"Microsoft logo",
|
||||
"logoDeepLinking":"Jitsi meet logo",
|
||||
"desktopPreviewThumbnail":"Desktop preview thumbnail",
|
||||
"googleLogo":"Google Logo",
|
||||
"policyLogo":"Policy logo"
|
||||
}
|
||||
},
|
||||
"lonelyMeetingExperience": {
|
||||
"button": "ادعُ آخرين",
|
||||
@@ -895,6 +1133,8 @@
|
||||
"header": "مركز المساعدة"
|
||||
},
|
||||
"lobby": {
|
||||
"admit": "Admit",
|
||||
"admitAll": "Admit all",
|
||||
"knockingParticipantList": "تنبيه قائمة المشاركين",
|
||||
"allow": "اسمح",
|
||||
"backToKnockModeButton": "لا يوجد كلمة مرور، اطلب الإذن بالدخول بدلًا من ذلك.",
|
||||
@@ -907,6 +1147,7 @@
|
||||
"enableDialogText": "يحمي وضع الانتظار غرفة الاجتماع عبر منح رئيس الجلسة إمكانية الموافقة على انضمام المشاركين.",
|
||||
"enterPasswordButton": "أدخل كلمة المرور لهذا الاجتماع",
|
||||
"enterPasswordTitle": "أدخل كلمة المرور للدخول للاجتماع",
|
||||
"errorMissingPassword": "Please enter the meeting password",
|
||||
"invalidPassword": "كلمة مرور غير صحيحة",
|
||||
"joiningMessage": "ستتمكن من الانضمام للاجتماع بعد الموافقة على طلبك",
|
||||
"joinWithPasswordMessage": "الرجاء الانتظار أثناء محاولة الدخول دون كلمة مرور...",
|
||||
@@ -925,6 +1166,7 @@
|
||||
"passwordField": "أدخل كلمة الدخول إلى الاجتماع",
|
||||
"passwordJoinButton": "انضم",
|
||||
"reject": "رفض",
|
||||
"rejectAll": "Reject all",
|
||||
"toggleLabel": "فعِّل غرفة الانتظار"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,10 +53,12 @@
|
||||
"noMessagesMessage": "У канферэнцыі пакуль няма ніякіх паведамленняў. Пачніце размову!",
|
||||
"nickname": {
|
||||
"popover": "Калі ласка, пазначце імя",
|
||||
"title": "Калі ласка, увядзіце імя для выкарыстання чата"
|
||||
"title": "Калі ласка, увядзіце імя для выкарыстання чата",
|
||||
"titleWithPolls": "Калі ласка, увядзіце імя для выкарыстання чата"
|
||||
},
|
||||
"privateNotice": "Асабістае паведамленне карыстальнiку {{recipient}}",
|
||||
"title": "Чат",
|
||||
"titleWithPolls": "Чат",
|
||||
"you": "Вы"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
|
||||
@@ -65,10 +65,12 @@
|
||||
"noMessagesMessage": "Все още няма съобщения в срещата. Започнете разговор тук!",
|
||||
"nickname": {
|
||||
"popover": "Избор на име",
|
||||
"title": "Въведете име, за да обменяте съобщения"
|
||||
"title": "Въведете име, за да обменяте съобщения",
|
||||
"titleWithPolls": "Въведете име, за да обменяте съобщения"
|
||||
},
|
||||
"privateNotice": "Лично съобщение до {{recipient}}",
|
||||
"title": "Текстови съобщения",
|
||||
"titleWithPolls": "Текстови съобщения",
|
||||
"you": "вие"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
@@ -586,6 +588,7 @@
|
||||
},
|
||||
"speaker": "Говорещ",
|
||||
"speakerStats": {
|
||||
"search": "Търсене",
|
||||
"hours": "{{count}}ч",
|
||||
"minutes": "{{count}}мин",
|
||||
"name": "Име",
|
||||
|
||||
@@ -53,10 +53,12 @@
|
||||
"noMessagesMessage": "Encara no hi ha cap missatge en aquesta reunió. Comenceu una conversa aquí!",
|
||||
"nickname": {
|
||||
"popover": "Trieu un sobrenom",
|
||||
"title": "Introduïu un sobrenom per a usar el xat"
|
||||
"title": "Introduïu un sobrenom per a usar el xat",
|
||||
"titleWithPolls": "Introduïu un sobrenom per a usar el xat"
|
||||
},
|
||||
"privateNotice": "Missatge privat per a {{recipient}}",
|
||||
"title": "Xat",
|
||||
"titleWithPolls": "Xat",
|
||||
"you": "vós"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
|
||||
@@ -67,11 +67,13 @@
|
||||
"messagebox": "Napište zprávu",
|
||||
"nickname": {
|
||||
"popover": "Zvolte si přezdívku",
|
||||
"title": "Vložte přezdívku, abyste mohl/a používat zprávy"
|
||||
"title": "Vložte přezdívku, abyste mohl/a používat zprávy",
|
||||
"titleWithPolls": "Vložte přezdívku, abyste mohl/a používat zprávy"
|
||||
},
|
||||
"noMessagesMessage": "V setkání zatím nejsou žádné zprávy. Tady můžete začít konverzaci!",
|
||||
"privateNotice": "Soukromá zpráva pro {{recipient}}",
|
||||
"title": "Zprávy",
|
||||
"titleWithPolls": "Zprávy",
|
||||
"you": "vy"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
|
||||
@@ -54,10 +54,12 @@
|
||||
"noMessagesMessage": "Der er ikke nogen beskeder i mødet endnu. Skriv noget!",
|
||||
"nickname": {
|
||||
"popover": "Vælg dit navn/alias",
|
||||
"title": "Indtast et navn/alias for at deltage i chatten"
|
||||
"title": "Indtast et navn/alias for at deltage i chatten",
|
||||
"titleWithPolls": "Indtast et navn/alias for at deltage i chatten"
|
||||
},
|
||||
"privateNotice": "Privat besked til {{recipient}}",
|
||||
"title": "Chat",
|
||||
"titleWithPolls": "Chat",
|
||||
"you": "Dig"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
|
||||
@@ -66,15 +66,21 @@
|
||||
"noMessagesMessage": "Es gibt noch keine Nachricht in dieser Konferenz. Starten Sie hier eine Unterhaltung!",
|
||||
"nickname": {
|
||||
"popover": "Wähle einen Alias",
|
||||
"title": "Geben Sie einen Alias zum Chatten ein"
|
||||
"title": "Geben Sie einen Alias zum Chatten ein",
|
||||
"titleWithPolls": "Geben Sie einen Alias zum Chatten ein"
|
||||
},
|
||||
"privateNotice": "Private Nachricht an {{recipient}}",
|
||||
"title": "Chatten",
|
||||
"you": "Sie",
|
||||
"message": "Nachricht",
|
||||
"messageAccessibleTitle": "{{user}} sagt:",
|
||||
"messageAccessibleTitleMe": "Ich sage:",
|
||||
"smileysPanel": "Emoji-Auswahl"
|
||||
"smileysPanel": "Emoji-Auswahl",
|
||||
"tabs": {
|
||||
"chat": "Chatten",
|
||||
"polls": "Umfragen"
|
||||
},
|
||||
"title": "Chatten",
|
||||
"titleWithPolls": "Chatten und Umfragen",
|
||||
"you": "Sie"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
"installExtensionText": "Installieren Sie die Erweiterung für die Integration von Google Calendar und Office 365",
|
||||
@@ -209,7 +215,6 @@
|
||||
"e2eeLabel": "Ende-zu-Ende-Verschlüsselung aktivieren",
|
||||
"e2eeWarning": "WARNUNG: Nicht alle Personen dieser Konferenz scheinen Ende-zu-Ende-Verschlüsselung zu unterstützen. Wenn Sie diese aktivieren, können die entsprechenden Personen nichts mehr sehen oder hören.",
|
||||
"enterDisplayName": "Bitte geben Sie hier Ihren Namen ein",
|
||||
"enterDisplayNameToJoin" : "Benutzername für Konferenz eingeben" ,
|
||||
"embedMeeting": "Besprechung einbetten",
|
||||
"error": "Fehler",
|
||||
"gracefulShutdown": "Der Dienst steht momentan wegen Wartungsarbeiten nicht zur Verfügung. Bitte versuchen Sie es später noch einmal.",
|
||||
@@ -244,13 +249,17 @@
|
||||
"micPermissionDeniedError": "Die Berechtigung zur Verwendung des Mikrofons wurde nicht erteilt. Sie können trotzdem an der Konferenz teilnehmen, aber die anderen Personen können Sie nicht hören. Verwenden Sie die Kamera-Schaltfläche in der Adressleiste, um die Berechtigungen zu erteilen.",
|
||||
"micTimeoutError": "Audioquelle konnte nicht gestartet werden. Zeitüberschreitung",
|
||||
"micUnknownError": "Das Mikrofon kann aus einem unbekannten Grund nicht verwendet werden.",
|
||||
"moderationAudioLabel": "Erlaube Anwesenden die Stummschaltung für sich aufzuheben",
|
||||
"moderationVideoLabel": "Erlaube Anwesenden ihre Kamera einzuschalten",
|
||||
"muteEveryoneElseDialog": "Einmal stummgeschaltet, können Sie deren Stummschaltung nicht mehr beenden, aber sie können ihre Stummschaltung jederzeit selbst beenden.",
|
||||
"muteEveryoneElseTitle": "Alle außer {{whom}} stummschalten?",
|
||||
"muteEveryoneDialog": "Wollen Sie wirklich alle stummschalten? Sie können deren Stummschaltung nicht mehr beenden, aber sie können ihre Stummschaltung jederzeit selbst beenden.",
|
||||
"muteEveryoneDialogModerationOn": "Die Anwesenden können eine Anfrage zum Sprechen jederzeit senden.",
|
||||
"muteEveryoneTitle": "Alle stummschalten?",
|
||||
"muteEveryoneElsesVideoDialog": "Sobald die Kamera deaktiviert ist, können Sie sie nicht wieder aktivieren, die Teilnehmer können dies aber jederzeit wieder ändern.",
|
||||
"muteEveryoneElsesVideoTitle": "Die Kamera von allen außer {{whom}} ausschalten?",
|
||||
"muteEveryonesVideoDialog": "Sind Sie sicher, dass Sie die Kamera von allen Teilnehmern deaktivieren möchten? Sie können sie nicht wieder aktivieren, die Teilnehmer können dies aber jederzeit wieder ändern.",
|
||||
"muteEveryonesVideoDialogModerationOn": "Die Anwesenden können jederzeit eine Anfrage senden, um ihre Kamera einzuschalten.",
|
||||
"muteEveryonesVideoDialogOk": "deaktivieren",
|
||||
"muteEveryonesVideoTitle": "Die Kamera von allen anderen ausschalten?",
|
||||
"muteEveryoneSelf": "sich selbst",
|
||||
@@ -383,7 +392,8 @@
|
||||
"image7" : "Sonnenaufgang",
|
||||
"desktopShareError": "Desktop konnte nicht freigegeben werden",
|
||||
"desktopShare": "Desktopfreigabe",
|
||||
"webAssemblyWarning": "WebAssembly wird nicht unterstützt"
|
||||
"webAssemblyWarning": "WebAssembly wird nicht unterstützt",
|
||||
"backgroundEffectError": "Failed to apply background effect."
|
||||
},
|
||||
"feedback": {
|
||||
"average": "Durchschnittlich",
|
||||
@@ -588,6 +598,8 @@
|
||||
"moderationStoppedTitle": "Moderation gestoppt",
|
||||
"moderationToggleDescription": "von {{participantDisplayName}}",
|
||||
"raiseHandAction": "Melden",
|
||||
"groupTitle": "Benachrichtigungen",
|
||||
"reactionSounds": "Interaktionstöne deaktivieren",
|
||||
"groupTitle": "Benachrichtigungen"
|
||||
},
|
||||
"participantsPane": {
|
||||
@@ -600,20 +612,49 @@
|
||||
},
|
||||
"actions": {
|
||||
"allow": "Anwesenden erlauben:",
|
||||
"audioModeration": "Für sich selbst die Stummschaltung aufzuheben",
|
||||
"blockEveryoneMicCamera": "Kamera und Mikrofon von allen sperren",
|
||||
"invite": "Person einladen",
|
||||
"askUnmute": "Anfragen, Stummschaltung aufzuheben",
|
||||
"mute": "Stummschalten",
|
||||
"muteAll": "Alle stummschalten",
|
||||
"muteEveryoneElse": "Alle anderen stummschalten",
|
||||
"startModeration": "Stummschaltung aufheben oder Kamera aktivieren",
|
||||
"stopEveryonesVideo": "Alle Kameras ausschalten",
|
||||
"stopVideo": "Kamera ausschalten",
|
||||
"unblockEveryoneMicCamera": "Kamera und Mikrofon von allen entsperren"
|
||||
"unblockEveryoneMicCamera": "Kamera und Mikrofon von allen entsperren",
|
||||
"videoModeration": "Kamera einschalten"
|
||||
}
|
||||
},
|
||||
"passwordSetRemotely": "von einer anderen Person gesetzt",
|
||||
"passwordDigitsOnly": "Bis zu {{number}} Ziffern",
|
||||
"polls": {
|
||||
"create": {
|
||||
"addOption": "Antwort hinzufügen",
|
||||
"answerPlaceholder": "Antwort {{index}}",
|
||||
"create": "Umfrage erstellen",
|
||||
"cancel": "Abbrechen",
|
||||
"pollOption" : "Antwort {{index}}",
|
||||
"pollQuestion" : "Frage",
|
||||
"questionPlaceholder": "Eine Frage stellen",
|
||||
"removeOption": "Antwort entfernen",
|
||||
"send": "Erstellen"
|
||||
},
|
||||
"answer": {
|
||||
"skip": "Überspringen",
|
||||
"submit": "Speichern"
|
||||
},
|
||||
"results": {
|
||||
"vote": "Vote",
|
||||
"changeVote": "Antwort ändern",
|
||||
"empty": "Es gibt bisher keine Umfragen in dieser Konferenz. Sie können hier eine Umfrage starten!",
|
||||
"hideDetailedResults": "Details verbergen",
|
||||
"showDetailedResults": "Details anzeigen"
|
||||
},
|
||||
"notification": {
|
||||
"title": "Dieser Konferenz wurde eine Umfrage hinzugefügt",
|
||||
"description": "Öffnen Sie das Umfragen-Tab um abzustimmen"
|
||||
}
|
||||
},
|
||||
"poweredby": "Betrieben von",
|
||||
"prejoin": {
|
||||
"audioAndVideoError": "Audio- und Videofehler:",
|
||||
@@ -763,6 +804,7 @@
|
||||
"participantJoined": "Neue Person nimmt teil",
|
||||
"participantLeft": "Person verlässt die Konferenz",
|
||||
"playSounds": "Hinweistöne aktiviert",
|
||||
"reactions": "Interaktionen",
|
||||
"sameAsSystem": "Wie System ({{label}})",
|
||||
"selectAudioOutput": "Audioausgabe",
|
||||
"selectCamera": "Kamera",
|
||||
@@ -802,6 +844,7 @@
|
||||
},
|
||||
"speaker": "Sprecher/-in",
|
||||
"speakerStats": {
|
||||
"search": "Suche",
|
||||
"hours": "{{count}} Std. ",
|
||||
"minutes": "{{count}} Min. ",
|
||||
"name": "Name",
|
||||
@@ -852,7 +895,6 @@
|
||||
"muteEveryonesVideo": "Alle Kameras ausschalten",
|
||||
"muteEveryoneElsesVideo": "Alle anderen Kameras ausschalten",
|
||||
"participants": "Anwesende",
|
||||
"party": "Konfetti",
|
||||
"pip": "Bild-in-Bild-Modus ein-/ausschalten",
|
||||
"privateMessage": "Private Nachricht senden",
|
||||
"profile": "Profil bearbeiten",
|
||||
@@ -869,6 +911,7 @@
|
||||
"shareYourScreen": "Bildschirmfreigabe ein-/ausschalten",
|
||||
"shortcuts": "Tastenkombinationen ein-/ausblenden",
|
||||
"show": "Im Vordergrund anzeigen",
|
||||
"silence": "Stille",
|
||||
"speakerStats": "Sprechstatistik ein-/ausblenden",
|
||||
"surprised": "Überrascht",
|
||||
"tileView": "Kachelansicht ein-/ausschalten",
|
||||
@@ -893,6 +936,7 @@
|
||||
"clap": "Klatschen",
|
||||
"closeChat": "Chat schließen",
|
||||
"closeReactionsMenu": "Interationsmenü schließen",
|
||||
"disableReactionSounds": "Sie können die Interaktionstöne für diese Konferenz deaktivieren",
|
||||
"documentClose": "Geteiltes Dokument schließen",
|
||||
"documentOpen": "Geteiltes Dokument öffnen",
|
||||
"download": "Unsere Apps herunterladen",
|
||||
@@ -928,7 +972,6 @@
|
||||
"openChat": "Chat öffnen",
|
||||
"openReactionsMenu": "Interationsmenü öffnen",
|
||||
"participants": "Anwesende",
|
||||
"party": "Konfetti",
|
||||
"pip": "Bild-in-Bild-Modus einschalten",
|
||||
"privateMessage": "Private Nachricht senden",
|
||||
"profile": "Profil bearbeiten",
|
||||
@@ -938,7 +981,7 @@
|
||||
"reactionClap": "Klatschen senden",
|
||||
"reactionLaugh": "Lachen senden",
|
||||
"reactionLike": "Daumen hoch senden",
|
||||
"reactionParty": "Konfetti senden",
|
||||
"reactionSilence": "Stille senden",
|
||||
"reactionSurprised": "Überrascht senden",
|
||||
"security": "Sicherheitsoptionen",
|
||||
"Settings": "Einstellungen",
|
||||
@@ -946,6 +989,7 @@
|
||||
"sharedvideo": "YouTube-Video teilen",
|
||||
"shareRoom": "Person einladen",
|
||||
"shortcuts": "Tastenkürzel anzeigen",
|
||||
"silence": "Stille",
|
||||
"speakerStats": "Sprechstatistik",
|
||||
"startScreenSharing": "Bildschirmfreigabe starten",
|
||||
"startSubtitles": "Untertitel einschalten",
|
||||
@@ -1098,6 +1142,7 @@
|
||||
"enableDialogText": "Mit dem Lobbymodus schützen Sie Ihre Konferenz, damit der Beitritt von Ihnen moderiert werden kann.",
|
||||
"enterPasswordButton": "Konferenzpasswort eingeben",
|
||||
"enterPasswordTitle": "Passwort zum Beitreten benutzen",
|
||||
"errorMissingPassword": "Bitte das Konferenzpasswort eingeben",
|
||||
"invalidPassword": "Ungültiges Passwort",
|
||||
"joiningMessage": "Sie treten der Konferenz bei, sobald jemand Ihre Anfrage annimmt.",
|
||||
"joinWithPasswordMessage": "Beitrittsversuch mit Passwort, bitte warten …",
|
||||
|
||||
@@ -68,10 +68,12 @@
|
||||
"noMessagesMessage": "Δεν υπάρχουν μηνύματα στη συνάντηση ακόμα. Ξεκινήστε μια συζήτηση εδώ!",
|
||||
"nickname": {
|
||||
"popover": "Επιλέξτε ένα ψευδώνυμο",
|
||||
"title": "Εισάγετε ένα ψευδώνυμο για τη χρήση της συνομιλίας"
|
||||
"title": "Εισάγετε ένα ψευδώνυμο για τη χρήση της συνομιλίας",
|
||||
"titleWithPolls": "Εισάγετε ένα ψευδώνυμο για τη χρήση της συνομιλίας"
|
||||
},
|
||||
"privateNotice": "Ιδιωτικό μηνύμα στον / στην {recipient}}",
|
||||
"title": "Συνομιλία",
|
||||
"titleWithPolls": "Συνομιλία",
|
||||
"you": "Εσείς"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
|
||||
@@ -50,9 +50,11 @@
|
||||
"messagebox": "Type a message",
|
||||
"nickname": {
|
||||
"popover": "Choose a nickname",
|
||||
"title": "Enter a nickname to use chat"
|
||||
"title": "Enter a nickname to use chat",
|
||||
"titleWithPolls": "Enter a nickname to use chat"
|
||||
},
|
||||
"title": "Chat",
|
||||
"titleWithPolls": "Chat",
|
||||
"you": "",
|
||||
"privateNotice": "",
|
||||
"noMessagesMessage": "",
|
||||
|
||||
@@ -53,10 +53,12 @@
|
||||
"noMessagesMessage": "Ankoraŭ ne estas mesaĝoj en la kunveno. Komencu konversation ĉi tie!",
|
||||
"nickname": {
|
||||
"popover": "Elektu kaŝnomon",
|
||||
"title": "Elektu kaŝnomon por uzi la babilejon"
|
||||
"title": "Elektu kaŝnomon por uzi la babilejon",
|
||||
"titleWithPolls": "Elektu kaŝnomon por uzi la babilejon"
|
||||
},
|
||||
"privateNotice": "Privata mesaĝo al {{recipient}}",
|
||||
"title": "Babilejo",
|
||||
"titleWithPolls": "Babilejo",
|
||||
"you": "vi"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
@@ -179,7 +181,7 @@
|
||||
"e2eeLabel": "Ŝlosilo",
|
||||
"e2eeTitle": "Tutvoja ĉifrado",
|
||||
"e2eeWarning": "<br /><p><strong>ATENTIGO:</strong> Ne ĉiuj partoprenantoj en ĉi tiu kunveno ŝajnas havi subtenon de tutvoja ĉifrado. Se vi ŝaltos ĝin, ili ne povos vidi aŭ aŭdi vin.</p>",
|
||||
"enterDisplayName": "Please enter your name here",
|
||||
"enterDisplayName": "Enter your name here",
|
||||
"error": "Eraro",
|
||||
"externalInstallationMsg": "Vi devas instali nian ekranvidadan kromprogramon.",
|
||||
"externalInstallationTitle": "Kromprogramo bezonata",
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
"copyInvite": "Copiar la invitación a la reunión",
|
||||
"copyLink": "Copiar el link de la reunión",
|
||||
"copyStream": "Copiar el link de la transmisión en vivo",
|
||||
"contacts": "",
|
||||
"countryNotSupported": "Aún no contamos con soporte a este destino.",
|
||||
"countryReminder": "¿Llamando fuera de los Estados Unidos? ¡Por favor, asegúrese de empezar con el código de país!",
|
||||
"defaultEmail": "Dirección de correo por defecto",
|
||||
@@ -16,18 +17,14 @@
|
||||
"inviteMoreMailSubject": "Unirse a la reunión {{appName}}",
|
||||
"inviteMorePrompt": "Invitar a más personas",
|
||||
"linkCopied": "Link copiado al portapapeles",
|
||||
"loading": "Buscando por contacto y número telefónico",
|
||||
"loadingNumber": "Validando el número telefónico",
|
||||
"loadingPeople": "Buscando contactos a invitar",
|
||||
"noResults": "No se encontraron coincidencias",
|
||||
"noValidNumbers": "Por favor ingrese un número de teléfono",
|
||||
"outlookEmail": "Correo de Outlook",
|
||||
"searchNumbers": "Agregar números telefónicos",
|
||||
"searchPeople": "Buscar personas",
|
||||
"searchPeopleAndNumbers": "Buscar personas o añadir sus números de teléfono",
|
||||
"phoneNumbers": "",
|
||||
"searching": "",
|
||||
"shareInvite": "Compartir la invitación a la reunión",
|
||||
"shareLink": "Compartir el link de la reunion",
|
||||
"shareStream": "Compartir el link de la transmición en vivo",
|
||||
"sipAddresses": "",
|
||||
"telephone": "Teléfono: {{number}}",
|
||||
"title": "Invitar a otras personas a esta reunión",
|
||||
"yahooEmail": "Correo de Yahoo"
|
||||
@@ -61,6 +58,7 @@
|
||||
"today": "Hoy"
|
||||
},
|
||||
"chat": {
|
||||
"enter": "",
|
||||
"error": "Error: su mensaje no se envío. Motivo: {{error}}",
|
||||
"fieldPlaceHolder": "Escriba su mensaje aquí",
|
||||
"messagebox": "Escriba un mensaje",
|
||||
@@ -68,16 +66,27 @@
|
||||
"noMessagesMessage": "No hay mensajes en la reunión. ¡Inicie una conversación!",
|
||||
"nickname": {
|
||||
"popover": "Selecciona un apodo",
|
||||
"title": "Introduce un apodo para usar el chat"
|
||||
"title": "Introduce un apodo para usar el chat",
|
||||
"titleWithPolls": "Introduce un apodo para usar el chat"
|
||||
},
|
||||
"privateNotice": "Mensaje privado para {{recipient}}",
|
||||
"message": "",
|
||||
"messageAccessibleTitle": "",
|
||||
"messageAccessibleTitleMe": "",
|
||||
"smileysPanel": "",
|
||||
"tabs": {
|
||||
"chat": "",
|
||||
"polls": ""
|
||||
},
|
||||
"title": "Chat",
|
||||
"titleWithPolls": "Chat",
|
||||
"you": "usted"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
"installExtensionText": "Instalar la extensión para Google Calendar y la integración con Office 365",
|
||||
"buttonText": "Instalar extensión de Chrome",
|
||||
"dontShowAgain": "No mostrar nuevamente"
|
||||
"dontShowAgain": "No mostrar nuevamente",
|
||||
"close": ""
|
||||
},
|
||||
"connectingOverlay": {
|
||||
"joiningRoom": "Conectándose a su reunión…"
|
||||
@@ -92,7 +101,6 @@
|
||||
"DISCONNECTED": "Desconectado",
|
||||
"DISCONNECTING": "Desconectando",
|
||||
"ERROR": "Error",
|
||||
"RECONNECTING": "Ocurrió un problema en la red. Reconectando...",
|
||||
"FETCH_SESSION_ID": "Obteniendo session-ID…",
|
||||
"GET_SESSION_ID_ERROR": "Obtener session-id error: {{code}}",
|
||||
"GOT_SESSION_ID": "Obteniendo session-ID… Listo",
|
||||
@@ -116,7 +124,6 @@
|
||||
"maxEnabledResolution": "enviar max",
|
||||
"more": "Mostrar más",
|
||||
"packetloss": "Pérdida de paquetes:",
|
||||
"participant_id": "ID participante:",
|
||||
"quality": {
|
||||
"good": "Buena",
|
||||
"inactive": "Inactivo",
|
||||
@@ -128,8 +135,9 @@
|
||||
"remoteaddress_plural": "Direcciones remotas:",
|
||||
"remoteport": "Puerto remoto:",
|
||||
"remoteport_plural": "Puertos remotos:",
|
||||
"savelogs": "Guardar logs",
|
||||
"resolution": "Resolución:",
|
||||
"savelogs": "Guardar logs",
|
||||
"participant_id": "ID participante:",
|
||||
"status": "Calidad:",
|
||||
"transport": "Transporte:",
|
||||
"transport_plural": "Transportes:",
|
||||
@@ -145,11 +153,10 @@
|
||||
"description": "¿No pasó nada? Hemos intentado iniciar la reunión en la aplicación de escritorio {{app}}. Intenta de nuevo o inicia en la aplicación web {{app}}.",
|
||||
"descriptionWithoutWeb": "¿No pasó nada? Intentamos iniciar su reunión en la aplicación de escritorio {{app}}.",
|
||||
"downloadApp": "Descargar la app",
|
||||
"launchWebButton": "Iniciar en el navegador",
|
||||
"ifDoNotHaveApp": "Si aún no tienes la app:",
|
||||
"ifHaveApp": "Si ya tienes la app:",
|
||||
"joinInApp": "Unirse a la reunion usando la app",
|
||||
"openApp": "Continuar a la aplicación",
|
||||
"launchWebButton": "Iniciar en el navegador",
|
||||
"title": "Iniciando la reunión en {{app}}…",
|
||||
"tryAgainButton": "Intentar de nuevo en el escritorio"
|
||||
},
|
||||
@@ -176,12 +183,14 @@
|
||||
"alreadySharedVideoMsg": "Otro participante ya está compartiendo un vídeo. Esta conferencia sólo permite compartir un vídeo a la vez.",
|
||||
"alreadySharedVideoTitle": "Solo se permite un vídeo compartido a la vez",
|
||||
"applicationWindow": "Ventana de aplicación",
|
||||
"authenticationRequired": "",
|
||||
"Back": "Anterior",
|
||||
"cameraConstraintFailedError": "Su cámara no satisface algunos de los requerimientos.",
|
||||
"cameraNotFoundError": "No se encontró la cámara.",
|
||||
"cameraNotSendingData": "No podemos acceder a la cámara. Asegúrate que no haya otra aplicación usándola, selecciona otro dispositivo del menú de configuración o intenta volver a cargar la aplicación.",
|
||||
"cameraNotSendingDataTitle": "No es posible acceder a la cámara",
|
||||
"cameraPermissionDeniedError": "No has otorgado permiso para usar la cámara. Puedes unirte a la conferencia de todos modos, pero los demás asistentes no te podrán ver. Usa el botón de la cámara en la barra de direcciones para solucionar esto.",
|
||||
"cameraTimeoutError": "",
|
||||
"cameraUnknownError": "No se puede usar la cámara por un motivo desconocido.",
|
||||
"cameraUnsupportedResolutionError": "La cámara no admite la resolución de vídeo requerida.",
|
||||
"Cancel": "Cancelar",
|
||||
@@ -196,28 +205,27 @@
|
||||
"connectError": "¡Oops! Algo salió mal y no fue posible conectarnos a la conferencia.",
|
||||
"connectErrorWithMsg": "¡Oops! Algo salió mal y no fue posible conectarnos a la conferencia: {{msg}}",
|
||||
"connecting": "Conectando",
|
||||
"copied": "Copiado",
|
||||
"contactSupport": "Contacta al soporte técnico",
|
||||
"copied": "Copiado",
|
||||
"copy": "Copiar",
|
||||
"dismiss": "Descartar",
|
||||
"displayNameRequired": "¡Hola! ¿Cuál es tu nombre?",
|
||||
"done": "Listo",
|
||||
"e2eeLabel": "Habilitar cifrado Extremo-a-Extremo",
|
||||
"e2eeDescription": "El cifrado de extremo a extremo es actualmente EXPERIMENTAL. Tenga en cuenta que activarlo puede deshabilitar servicios como: grabación, transmisión en vivo y participación telefónica. Además, esta reunión solo funcionará con personas que se unan con un navegador.",
|
||||
"e2eeLabel": "Habilitar cifrado Extremo-a-Extremo",
|
||||
"e2eeDisabledDueToMaxModeDescription": "",
|
||||
"e2eeWarning": "ADVERTENCIA: No todos los participantes de esta reunión soportan el cifrado de extremo a extremo. Si usted habilita esta opción, ellos no podrán verlo ni oírlo.",
|
||||
"e2eeWillDisableDueToMaxModeDescription": "",
|
||||
"enterDisplayName": "Por favor ingresa tu nombre aquí",
|
||||
"embedMeeting": "",
|
||||
"error": "Error",
|
||||
"externalInstallationMsg": "Necesita instalar nuestra extensión para compartir pantalla.",
|
||||
"externalInstallationTitle": "Extensión requerida",
|
||||
"goToStore": "Ir a la tienda web",
|
||||
"gracefulShutdown": "Nuestro servicio se encuentra en mantenimiento. Por favor, intente más tarde.",
|
||||
"grantModeratorDialog": "¿Estas seguro de que quieres convertir a este participante en moderator?",
|
||||
"grantModeratorTitle": "Convertir en moderador",
|
||||
"hideShareAudioHelper": "",
|
||||
"IamHost": "Soy el anfitrión",
|
||||
"incorrectRoomLockPassword": "Contraseña incorrecta",
|
||||
"incorrectPassword": "Nombre de usuario o contraseña incorrecta",
|
||||
"inlineInstallationMsg": "Necesita instalar nuestra extensión para compartir escritorio.",
|
||||
"inlineInstallExtension": "Instalar ahora",
|
||||
"internalError": "¡Oops! Algo salió mal. El siguiente error ocurrió: {{error}}",
|
||||
"internalErrorTitle": "Error interno",
|
||||
"kickMessage": "Puede ponerse en contacto con {{participantDisplayName}} para obtener más detalles.",
|
||||
@@ -225,14 +233,14 @@
|
||||
"kickParticipantDialog": "¿Seguro que quiere expulsar a este participante?",
|
||||
"kickParticipantTitle": "¿Expulsar a este participante?",
|
||||
"kickTitle": "¡Ay! {{participantDisplayName}} te expulsó de la reunión",
|
||||
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "No es posible mientras la grabación este activa",
|
||||
"liveStreaming": "Transmisión en vivo",
|
||||
"liveStreamingDisabledForGuestTooltip": "Los invitados no pueden iniciar la transmisión en vivo.",
|
||||
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "No es posible mientras la grabación este activa",
|
||||
"liveStreamingDisabledTooltip": "Las trasmisiones están deshabilitadas.",
|
||||
"lockMessage": "No se pudo bloquear la conferencia.",
|
||||
"lockRoom": "Agregar $t(lockRoomPasswordUppercase) a la reunión",
|
||||
"lockTitle": "El bloqueo falló",
|
||||
"logoutQuestion": "¿Está seguro que desea salir y detener la conferencia?",
|
||||
"login": "",
|
||||
"logoutTitle": "Cerrar sesión",
|
||||
"maxUsersLimitReached": "El límite máximo de participantes ha sido alcanzado. Por favor contacta al organizador o intenta más tarde.",
|
||||
"maxUsersLimitReachedTitle": "La reunión está llena.",
|
||||
@@ -241,18 +249,34 @@
|
||||
"micNotSendingData": "Vaya a la configuración de su computadora para activar el micrófono y ajustar su nivel",
|
||||
"micNotSendingDataTitle": "Su micrófono está silenciado en la configuración de su sistema",
|
||||
"micPermissionDeniedError": "No ha otorgado permisos para usar su micrófono. Puede unirse a la conferencia, pero no lo podrán escuchar. Utilice el botón en la barra de dirección para solucionar esto.",
|
||||
"micTimeoutError": "",
|
||||
"micUnknownError": "No se puede usar el micrófono por motivos desconocidos.",
|
||||
"moderationAudioLabel": "",
|
||||
"moderationVideoLabel": "",
|
||||
"muteEveryoneElseDialog": "Una vez silenciados, no podrás quitarles el modo silencio, pero ellos podrán hacerlo en cualquier momento.",
|
||||
"muteEveryoneElseTitle": "¿Silenciar a todos excepto a {{whom}}?",
|
||||
"muteEveryoneDialog": "¿Estás seguro que quieres silenciar a todos? No podrás quitarles el silencio, pero ellos pueden quitárselo en cualquier momento.",
|
||||
"muteEveryoneDialogModerationOn": "",
|
||||
"muteEveryoneTitle": "¿Silenciar a todos?",
|
||||
"muteEveryoneElsesVideoDialog": "",
|
||||
"muteEveryoneElsesVideoTitle": "",
|
||||
"muteEveryonesVideoDialog": "",
|
||||
"muteEveryonesVideoDialogModerationOn": "",
|
||||
"muteEveryonesVideoDialogOk": "",
|
||||
"muteEveryonesVideoTitle": "",
|
||||
"muteEveryoneSelf": "ti mismo",
|
||||
"muteEveryoneStartMuted": "Todos inician silenciados desde ahora",
|
||||
"muteParticipantBody": "No podrás quitarles el modo en silencio, pero ellos pueden quitárselo en cualquier momento.",
|
||||
"muteParticipantButton": "Silenciar",
|
||||
"muteParticipantDialog": "¿Seguro que quieres silenciar a este participante? No podrás revertir esta acción, pero el participante podrá hacerlo en cualquier momento",
|
||||
"muteParticipantsVideoDialog": "",
|
||||
"muteParticipantTitle": "¿Silenciar a este participante?",
|
||||
"muteParticipantsVideoButton": "",
|
||||
"muteParticipantsVideoTitle": "",
|
||||
"muteParticipantsVideoBody": "",
|
||||
"noDropboxToken": "",
|
||||
"Ok": "Aceptar",
|
||||
"password": "",
|
||||
"passwordLabel": "$t(lockRoomPasswordUppercase)",
|
||||
"passwordNotSupported": "No se soporta $t(lockRoomPassword) en la reunión",
|
||||
"passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) no es compatible",
|
||||
@@ -265,7 +289,6 @@
|
||||
"readMore": "mas",
|
||||
"recording": "Grabando",
|
||||
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "No es posible mientras la transmisión en vivo este activa",
|
||||
"recordingDisabledForGuestTooltip": "Los invitados no pueden iniciar grabaciones.",
|
||||
"recordingDisabledTooltip": "Inicio de grabación desactivado.",
|
||||
"rejoinNow": "Reunirse ahora",
|
||||
"remoteControlAllowedMessage": "¡{{user}} ha aceptado tu solicitud de control remoto!",
|
||||
@@ -285,10 +308,6 @@
|
||||
"screenSharingAudio": "Compartir audio",
|
||||
"screenSharingFailed": "¡Oops! ¡Algo salio mal, no se pudo iniciar la compartición de su pantalla!",
|
||||
"screenSharingFailedTitle": "¡Fallo al compartir su pantalla!",
|
||||
"screenSharingFailedToInstall": "¡Uy! La extensión de uso compartido de pantalla no se pudo instalar.",
|
||||
"screenSharingFailedToInstallTitle": "La extensión de uso compartido de pantalla no se pudo instalar",
|
||||
"screenSharingFirefoxPermissionDeniedError": "Algo salió mal al compartir pantalla. Asegúrate de habernos dado permiso para hacerlo.",
|
||||
"screenSharingFirefoxPermissionDeniedTitle": "¡Uy! No pudimos iniciar el uso compartido de la pantalla.",
|
||||
"screenSharingPermissionDeniedError": "¡Uy! Algo salió mal con tus permisos de extensión para compartir pantalla. Vuelve a cargar la página e intenta de nuevo.",
|
||||
"sendPrivateMessage": "Acabas de recibir un mensaje privado. ¿Deseas responder en privado o a todos?",
|
||||
"sendPrivateMessageCancel": "Enviar al grupo",
|
||||
@@ -296,15 +315,27 @@
|
||||
"sendPrivateMessageTitle": "¿Enviar en privado?",
|
||||
"serviceUnavailable": "Servicio no disponible",
|
||||
"sessTerminated": "Llamada terminada",
|
||||
"sessionRestarted": "",
|
||||
"Share": "Compartir",
|
||||
"shareAudio": "",
|
||||
"shareAudioTitle": "",
|
||||
"shareAudioWarningTitle": "",
|
||||
"shareAudioWarningH1": "",
|
||||
"shareAudioWarningD1": "",
|
||||
"shareAudioWarningD2": "",
|
||||
"shareMediaWarningGenericH2": "",
|
||||
"shareVideoLinkError": "Proporciona un enlace de YouTube correcto.",
|
||||
"shareVideoTitle": "Compartir un vídeo",
|
||||
"shareYourScreen": "Compartir pantalla",
|
||||
"shareYourScreenDisabled": "Se desactivó la opción para compartir pantalla.",
|
||||
"shareYourScreenDisabledForGuest": "Los invitados no pueden compartir la pantalla.",
|
||||
"startLiveStreaming": "Iniciar transmisión en vivo",
|
||||
"startRecording": "Iniciar grabación",
|
||||
"startRemoteControlErrorMessage": "Se produjo un error al intentar iniciar la sesión de control remoto.",
|
||||
"shareScreenWarningTitle": "",
|
||||
"shareScreenWarningH1": "",
|
||||
"shareScreenWarningD1": "",
|
||||
"shareScreenWarningD2": "",
|
||||
"sharedVideoLinkPlaceholder": "",
|
||||
"stopLiveStreaming": "Detener transmisión en vivo",
|
||||
"stopRecording": "Detener grabación",
|
||||
"stopRecordingWarning": "¿Estás seguro de que deseas detener la grabación?",
|
||||
@@ -317,12 +348,20 @@
|
||||
"tokenAuthFailedTitle": "Error de autenticación",
|
||||
"transcribing": "Transcribiendo",
|
||||
"unlockRoom": "Quitar la $t(lockRoomPassword) de reunión",
|
||||
"user": "",
|
||||
"userIdentifier": "",
|
||||
"userPassword": "contraseña del usuario",
|
||||
"videoLink": "",
|
||||
"viewUpgradeOptions": "",
|
||||
"viewUpgradeOptionsContent": "",
|
||||
"viewUpgradeOptionsTitle": "",
|
||||
"WaitForHostMsg": "La conferencia <b>{{room}}</b> aún no ha comenzado. Si eres el anfitrión, inicia sesión. De lo contrario, espera a que llegue el anfitrión.",
|
||||
"WaitForHostMsgWOk": "La conferencia <b>{{room}}</b> aún no ha comenzado. Si eres el anfitrión, presiona Aceptar para autenticar. De lo contrario, espera a que llegue el anfitrión.",
|
||||
"WaitingForHost": "Esperando al anfitrión…",
|
||||
"WaitingForHostTitle": "",
|
||||
"Yes": "Sí",
|
||||
"yourEntireScreen": "Toda la pantalla"
|
||||
"yourEntireScreen": "Toda la pantalla",
|
||||
"remoteUserControls": "",
|
||||
"localUserControls": ""
|
||||
},
|
||||
"dialOut": {
|
||||
"statusMessage": "está {{status}}"
|
||||
@@ -333,12 +372,32 @@
|
||||
"e2ee": {
|
||||
"labelToolTip": "La comunicación de audio y vídeo en esta reunión está cifrada de extremo a extremo"
|
||||
},
|
||||
"embedMeeting": {
|
||||
"title": "Insertar reunión en sitio web"
|
||||
},
|
||||
"embedMeeting": {
|
||||
"title": "Insertar esta reunión"
|
||||
},
|
||||
"virtualBackground": {
|
||||
"apply": "",
|
||||
"title": "",
|
||||
"blur": "",
|
||||
"slightBlur": "",
|
||||
"removeBackground": "",
|
||||
"addBackground": "",
|
||||
"pleaseWait": "",
|
||||
"none": "",
|
||||
"uploadedImage": "",
|
||||
"deleteImage": "",
|
||||
"image1": "",
|
||||
"image2": "",
|
||||
"image3": "",
|
||||
"image4": "",
|
||||
"image5": "",
|
||||
"image6": "",
|
||||
"image7": "",
|
||||
"desktopShareError": "",
|
||||
"desktopShare": "",
|
||||
"webAssemblyWarning": "",
|
||||
"backgroundEffectError": ""
|
||||
},
|
||||
"feedback": {
|
||||
"average": "Promedio",
|
||||
"bad": "Mala",
|
||||
@@ -346,7 +405,8 @@
|
||||
"good": "Buena",
|
||||
"rateExperience": "¿Cómo estuvo tu experiencia en la reunión?",
|
||||
"veryBad": "Muy mala",
|
||||
"veryGood": "Muy buena"
|
||||
"veryGood": "Muy buena",
|
||||
"star": ""
|
||||
},
|
||||
"incomingCall": {
|
||||
"answer": "Contestar",
|
||||
@@ -363,6 +423,7 @@
|
||||
"country": "País",
|
||||
"dialANumber": "Para unirte a la reunión, marca uno de estos números y, luego introduce el PIN.",
|
||||
"dialInConferenceID": "PIN:",
|
||||
"copyNumber": "",
|
||||
"dialInNotSupported": "Lo sentimos, actualmente no se admite el marcado telefónico a la reunión.",
|
||||
"dialInNumber": "Marcar:",
|
||||
"dialInSummaryError": "Se ha producido un error al capturar la información de marcación. Vuelva a intentarlo más tarde",
|
||||
@@ -371,6 +432,11 @@
|
||||
"inviteLiveStream": "Para ver la transmisión en vivo de esta reunión, haz clic en este enlace: {{url}}",
|
||||
"invitePhone": "También puedes entrar por llamada telefónica: Marca al número {{number}}, y al escuchar la contestadora introduce {{conferenceID}}#\n",
|
||||
"invitePhoneAlternatives": "Si necesitas un número telefónico de otro país, revisa los números disponibles en {{url}}\n\n\nSi además de entrar vía llamada vas a usar otro dispositivo, puedes usar este link para entrar sin audio: {{silentUrl}}",
|
||||
"inviteSipEndpoint": "",
|
||||
"inviteTextiOSPersonal": "",
|
||||
"inviteTextiOSJoinSilent": "",
|
||||
"inviteTextiOSInviteUrl": "",
|
||||
"inviteTextiOSPhone": "",
|
||||
"inviteURLFirstPartGeneral": "Estás invitado a unirte a una reunión.",
|
||||
"inviteURLFirstPartPersonal": "{{name}} te esta invitando a una reunión.\n",
|
||||
"inviteURLSecondPart": "\nLink para unirse a la reunión:\n{{url}}\n",
|
||||
@@ -381,6 +447,7 @@
|
||||
"noRoom": "No se especificó la sala a marcar.",
|
||||
"numbers": "Números para entrar por llamada telefónica:",
|
||||
"password": "$t(lockRoomPasswordUppercase):",
|
||||
"sip": "",
|
||||
"title": "Compartir",
|
||||
"tooltip": "Compartir el enlace y acceso telefónico para esta reunión",
|
||||
"label": "Información de la reunión"
|
||||
@@ -399,6 +466,7 @@
|
||||
"support": "Soporte",
|
||||
"supportMsg": "Si esto sigue ocurriendo, contacta a"
|
||||
},
|
||||
"jitsiHome": "",
|
||||
"keyboardShortcuts": {
|
||||
"focusLocal": "Ver tu cámara",
|
||||
"focusRemote": "Ver la cámara de otras personas",
|
||||
@@ -411,12 +479,14 @@
|
||||
"showSpeakerStats": "Mostrar estadísticas de los hablantes",
|
||||
"toggleChat": "Abrir o cerrar el chat",
|
||||
"toggleFilmstrip": "Mostrar u ocultar miniaturas de vídeo",
|
||||
"toggleParticipantsPane": "",
|
||||
"toggleScreensharing": "Cambiar entre cámara y pantalla compartida",
|
||||
"toggleShortcuts": "Mostrar u ocultar atajos del teclado",
|
||||
"videoMute": "Prender o apagar la cámara",
|
||||
"videoQuality": "Ajustar la calidad de la llamada"
|
||||
"videoMute": "Prender o apagar la cámara"
|
||||
},
|
||||
"liveStreaming": {
|
||||
"limitNotificationDescriptionWeb": "Debido a la alta demanda su transmisión estará limitada a {{limit}} minutos. Puede obtener transmisiones ilimitadas en <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"limitNotificationDescriptionNative": "Su transmisión estará limitada a {{limit}} minutos. Puede obtener transmisiones ilimitadas en {{app}}.",
|
||||
"busy": "Nuestros servidores andan un poco ocupados. Vuelve a intentarlo en unos minutos.",
|
||||
"busyTitle": "Todos los transmisores están ocupados",
|
||||
"changeSignIn": "Cambiar de cuenta.",
|
||||
@@ -428,9 +498,6 @@
|
||||
"errorLiveStreamNotEnabled": "La transmisión en vivo no está activada en {{email}}. Por favor, activa la transmisión en vivo o inicia sesión en una cuenta con la transmisión en vivo activada.",
|
||||
"expandedOff": "La transmisión en vivo se ha detenido",
|
||||
"expandedOn": "La reunión se está transmitiendo a YouTube.",
|
||||
"googlePrivacyPolicy": "Política de Privacidad de Google",
|
||||
"limitNotificationDescriptionWeb": "Debido a la alta demanda su transmisión estará limitada a {{limit}} minutos. Puede obtener transmisiones ilimitadas en <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"limitNotificationDescriptionNative": "Su transmisión estará limitada a {{limit}} minutos. Puede obtener transmisiones ilimitadas en {{app}}.",
|
||||
"expandedPending": "La transmisión en vivo se está iniciando…",
|
||||
"failedToStart": "La transmisión en vivo no se pudo iniciar",
|
||||
"getStreamKeyManually": "No pudimos encontrar tu clave de transmisión. Por favor, obtenla de la página de YouTube y pégala.",
|
||||
@@ -448,7 +515,8 @@
|
||||
"start": "Iniciar una transmisión en vivo",
|
||||
"streamIdHelp": "¿Qué es esto?",
|
||||
"unavailableTitle": "Transmisión en vivo no disponible",
|
||||
"youtubeTerms": "Términos de servicios de YouTube"
|
||||
"youtubeTerms": "Términos de servicios de YouTube",
|
||||
"googlePrivacyPolicy": "Política de Privacidad de Google"
|
||||
},
|
||||
"localRecording": {
|
||||
"clientState": {
|
||||
@@ -483,13 +551,15 @@
|
||||
"lockRoomPasswordUppercase": "Contraseña",
|
||||
"me": "yo",
|
||||
"notify": {
|
||||
"allowAction": "",
|
||||
"allowedUnmute": "",
|
||||
"connectedOneMember": "{{name}} se unió a la reunión",
|
||||
"connectedThreePlusMembers": "{{name}} y {{count}} más se unieron a la reunión",
|
||||
"connectedTwoMembers": "{{first}} y {{second}} se unieron a la reunión",
|
||||
"disconnected": "desconectado",
|
||||
"focus": "Enfocar conferencia",
|
||||
"focusFail": "{{component}} no disponible. Vuelve a intentar en {{ms}} segundos",
|
||||
"grantedTo": "Se otorgaron derechos de moderador a {{to}}.",
|
||||
"hostAskedUnmute": "",
|
||||
"invitedOneMember": "{{name}} ha sido invitado",
|
||||
"invitedThreePlusMembers": "{{name}} y {{count}} más han sido invitados",
|
||||
"invitedTwoMembers": "{{first}} y {{second}} han sido invitados",
|
||||
@@ -500,9 +570,13 @@
|
||||
"mutedTitle": "¡Estás silenciado!",
|
||||
"mutedRemotelyTitle": "¡{{Nombre del participante}} te ha silenciado!",
|
||||
"mutedRemotelyDescription": "Siempre puedes reactivar tu micrófono cuando estés listo para hablar. Vuélvelo a apagar cuando termines de hablar para no hacer ruido.",
|
||||
"videoMutedRemotelyTitle": "",
|
||||
"videoMutedRemotelyDescription": "",
|
||||
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) eliminada por otro participante",
|
||||
"passwordSetRemotely": "$t(lockRoomPasswordUppercase) agregada por otro participante",
|
||||
"raisedHand": "{{name}} quisiera hablar.",
|
||||
"screenShareNoAudio": "",
|
||||
"screenShareNoAudioTitle": "",
|
||||
"somebody": "Alguien",
|
||||
"startSilentTitle": "¡Te uniste sin audio!",
|
||||
"startSilentDescription": "Vuelve a ingresar para activar el audio",
|
||||
@@ -515,13 +589,87 @@
|
||||
"OldElectronAPPTitle": "¡Aplicación obsoleta e insegura!",
|
||||
"oldElectronClientDescription1": "Estás usando una versión vieja de la aplicación de Jitsi Meet que tiene problemas de seguridad. ¡Por favor, actualiza a la ",
|
||||
"oldElectronClientDescription2": "versión más reciente",
|
||||
"oldElectronClientDescription3": " YA!"
|
||||
"oldElectronClientDescription3": " YA!",
|
||||
"moderationInEffectDescription": "",
|
||||
"moderationInEffectCSDescription": "",
|
||||
"moderationInEffectVideoDescription": "",
|
||||
"moderationInEffectTitle": "",
|
||||
"moderationInEffectCSTitle": "",
|
||||
"moderationInEffectVideoTitle": "",
|
||||
"moderationRequestFromModerator": "",
|
||||
"moderationRequestFromParticipant": "",
|
||||
"moderationStartedTitle": "",
|
||||
"moderationStoppedTitle": "",
|
||||
"moderationToggleDescription": "",
|
||||
"raiseHandAction": "",
|
||||
"reactionSounds": "",
|
||||
"groupTitle": ""
|
||||
},
|
||||
"participantsPane": {
|
||||
"close": "",
|
||||
"header": "",
|
||||
"headings": {
|
||||
"lobby": "",
|
||||
"participantsList": "",
|
||||
"waitingLobby": ""
|
||||
},
|
||||
"actions": {
|
||||
"allow": "",
|
||||
"allowVideo": "",
|
||||
"audioModeration": "",
|
||||
"blockEveryoneMicCamera": "",
|
||||
"invite": "",
|
||||
"askUnmute": "",
|
||||
"mute": "",
|
||||
"muteAll": "",
|
||||
"muteEveryoneElse": "",
|
||||
"stopEveryonesVideo": "",
|
||||
"stopVideo": "",
|
||||
"unblockEveryoneMicCamera": "",
|
||||
"videoModeration": ""
|
||||
}
|
||||
},
|
||||
"passwordSetRemotely": "definida por otro participante",
|
||||
"passwordDigitsOnly": "Hasta {{number]] cifras",
|
||||
"polls": {
|
||||
"create": {
|
||||
"addOption": "",
|
||||
"answerPlaceholder": "",
|
||||
"create": "",
|
||||
"cancel": "",
|
||||
"pollOption": "",
|
||||
"pollQuestion": "",
|
||||
"questionPlaceholder": "",
|
||||
"removeOption": "",
|
||||
"send": ""
|
||||
},
|
||||
"answer": {
|
||||
"skip": "",
|
||||
"submit": ""
|
||||
},
|
||||
"results": {
|
||||
"vote": "",
|
||||
"changeVote": "",
|
||||
"empty": "",
|
||||
"hideDetailedResults": "",
|
||||
"showDetailedResults": ""
|
||||
},
|
||||
"notification": {
|
||||
"title": "",
|
||||
"description": ""
|
||||
}
|
||||
},
|
||||
"poweredby": "con tecnología de",
|
||||
"prejoin": {
|
||||
"audioAndVideoError": "Error en audio y vídeo:",
|
||||
"audioDeviceProblem": "Hay un problema con su dispositivo de audio",
|
||||
"audioOnlyError": "Error en audio:",
|
||||
"audioTrackError": "No se pudo crear la pista de audio.",
|
||||
"calling": "Llamando",
|
||||
"callMe": "Llámame",
|
||||
"callMeAtNumber": "Llamame a este número:",
|
||||
"configuringDevices": "Configurando dispositivos...",
|
||||
"connectedWithAudioQ": "¿Estás está conectado con audio?",
|
||||
"connection": {
|
||||
"good": "¡Su conexión a internet es buena!",
|
||||
"nonOptimal": "Su conexión a internet no es óptima",
|
||||
@@ -541,16 +689,6 @@
|
||||
"videoLowQuality": "Prevemos que su video tendrá baja calidad en términos de velocidad de fotogramas y resolución.",
|
||||
"videoTearing": "Prevemos que su video se pixelará o tendrá artefactos visuales."
|
||||
},
|
||||
"errorMissingName": "Ingrese su nombre para unirse a la reunión",
|
||||
"premeeting": "Pre-reunión",
|
||||
"showScreen": "Habilitar pantalla pre-reunión",
|
||||
"audioAndVideoError": "Error en audio y vídeo:",
|
||||
"audioOnlyError": "Error en audio:",
|
||||
"audioTrackError": "No se pudo crear la pista de audio.",
|
||||
"callMe": "Llámame",
|
||||
"callMeAtNumber": "Llamame a este número:",
|
||||
"configuringDevices": "Configurando dispositivos...",
|
||||
"connectedWithAudioQ": "¿Estás está conectado con audio?",
|
||||
"copyAndShare": "Copia y comparte el link de la reuinión",
|
||||
"dialInMeeting": "Entrar con llamada telefónica",
|
||||
"dialInPin": "Marca a la reunión e ingresa el código:",
|
||||
@@ -560,6 +698,8 @@
|
||||
"errorDialOutDisconnected": "No se pudo marcar. Desconectado.",
|
||||
"errorDialOutFailed": "No se pudo marcar. La llamada falló.",
|
||||
"errorDialOutStatus": "Hubo algún error, y no se pudo determinar cuál",
|
||||
"errorMissingName": "Ingrese su nombre para unirse a la reunión",
|
||||
"errorNoPermissions": "",
|
||||
"errorStatusCode": "Error al marcar, código de error {{status}}",
|
||||
"errorValidation": "No se pudo validar el número",
|
||||
"iWantToDialIn": "Quiero entrar por teléfono",
|
||||
@@ -570,7 +710,9 @@
|
||||
"linkCopied": "Se copió el link",
|
||||
"lookGood": "Tu micrófono funciona bien.",
|
||||
"or": "o",
|
||||
"calling": "Llamando",
|
||||
"premeeting": "Pre-reunión",
|
||||
"showScreen": "Habilitar pantalla pre-reunión",
|
||||
"keyboardShortcuts": "",
|
||||
"startWithPhone": "Iniciar con audio de llamada telefónica",
|
||||
"screenSharingError": "Error al compartir pantalla:",
|
||||
"videoOnlyError": "Error con el vídeo:",
|
||||
@@ -592,6 +734,7 @@
|
||||
"ringing": "Timbrando…"
|
||||
},
|
||||
"profile": {
|
||||
"avatar": "",
|
||||
"setDisplayNameLabel": "Configura tu nombre para mostrar",
|
||||
"setEmailInput": "Introducir correo electrónico",
|
||||
"setEmailLabel": "Configurar tu correo electrónico de Gravatar",
|
||||
@@ -599,19 +742,22 @@
|
||||
},
|
||||
"raisedHand": "Desea hablar",
|
||||
"recording": {
|
||||
"limitNotificationDescriptionWeb": "Debido a la alta demanda su grabación estará limitada a {{limit}} minutos. Puede obtener grabaciones ilimitadas en <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"limitNotificationDescriptionNative": "Su grabación estará limitada a {{limit}} minutos. Puede obtener grabaciones ilimitadas en <3>{{app}}</3>.",
|
||||
"authDropboxText": "Subir a Dropbox",
|
||||
"availableSpace": "Espacio disponible: {{spaceLeft}} MB (aproximadamente {{duration}} minutos de grabación)",
|
||||
"beta": "BETA",
|
||||
"busy": "Estamos trabajando para liberar recursos de grabación. Vuelve a intentarlo en unos minutos.",
|
||||
"busyTitle": "Todas las grabadoras están actualmente ocupadas",
|
||||
"copyLink": "",
|
||||
"error": "Error de grabación. Vuelve a intentarlo.",
|
||||
"errorFetchingLink": "",
|
||||
"expandedOff": "Grabación detenida",
|
||||
"expandedOn": "La reunión está siendo grabada.",
|
||||
"expandedPending": "La grabación se está iniciando…",
|
||||
"failedToStart": "No se pudo iniciar la grabación",
|
||||
"fileSharingdescription": "Compartir la grabación con los participantes de la reunión",
|
||||
"limitNotificationDescriptionWeb": "Debido a la alta demanda su grabación estará limitada a {{limit}} minutos. Puede obtener grabaciones ilimitadas en <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"limitNotificationDescriptionNative": "Su grabación estará limitada a {{limit}} minutos. Puede obtener grabaciones ilimitadas en <3>{{app}}</3>.",
|
||||
"linkGenerated": "",
|
||||
"live": "EN VIVO",
|
||||
"loggedIn": "Sesión iniciada como {{userName}}",
|
||||
"off": "Grabación detenida",
|
||||
@@ -621,18 +767,20 @@
|
||||
"pending": "Preparando para grabar la reunión…",
|
||||
"rec": "GRA",
|
||||
"serviceDescription": "El servicio de grabación guardará la grabación",
|
||||
"serviceDescriptionCloud": "",
|
||||
"serviceName": "Servicio de grabación",
|
||||
"signIn": "Iniciar sesión",
|
||||
"signOut": "Cerrar sesión",
|
||||
"unavailable": "¡Uy! {{serviceName}} actualmente no está disponible. Estamos trabajando para resolver el problema. Vuelve a intentarlo más tarde.",
|
||||
"unavailableTitle": "Grabación no disponible"
|
||||
"unavailableTitle": "Grabación no disponible",
|
||||
"uploadToCloud": ""
|
||||
},
|
||||
"sectionList": {
|
||||
"pullToRefresh": "Mueve el dedo para abajo para actualizar."
|
||||
},
|
||||
"security": {
|
||||
"aboutReadOnly": "Los participantes moderadores pueden agregar una $t(lockRoomPassword) a la reunión. Los participantes deberán proporcionar la $t(lockRoomPassword) antes de que se les permita unirse a la reunión.",
|
||||
"about": "Puedes agregar una contraseña a la reunión. Los participantes necesitarán la contraseña para unirse a la reunión.",
|
||||
"aboutReadOnly": "Los participantes moderadores pueden agregar una $t(lockRoomPassword) a la reunión. Los participantes deberán proporcionar la $t(lockRoomPassword) antes de que se les permita unirse a la reunión.",
|
||||
"insecureRoomNameWarning": "El nombre de la sala es inseguro. Participantes no deseados pueden llegar a unirse a la reunión.",
|
||||
"securityOptions": "Opciones de seguridad"
|
||||
},
|
||||
@@ -644,8 +792,13 @@
|
||||
"signedIn": "Actualmente se accede a eventos del calendario para {{email}}. Haz clic en el botón Desconectar más abajo para detener el acceso a eventos del calendario.",
|
||||
"title": "Calendario"
|
||||
},
|
||||
"desktopShareFramerate": "",
|
||||
"desktopShareWarning": "",
|
||||
"desktopShareHighFpsWarning": "",
|
||||
"devices": "Dispositivos",
|
||||
"followMe": "Todos me siguen",
|
||||
"framesPerSecond": "",
|
||||
"incomingMessage": "",
|
||||
"language": "Idioma",
|
||||
"loggedIn": "Sesión iniciada como {{name}}",
|
||||
"microphones": "Micrófono",
|
||||
@@ -653,13 +806,19 @@
|
||||
"more": "Más",
|
||||
"name": "Nombre",
|
||||
"noDevice": "Ninguno",
|
||||
"participantJoined": "",
|
||||
"participantLeft": "",
|
||||
"playSounds": "",
|
||||
"reactions": "",
|
||||
"sameAsSystem": "",
|
||||
"selectAudioOutput": "Salida de audio",
|
||||
"selectCamera": "Cámara",
|
||||
"selectMic": "Micrófono",
|
||||
"speakers": "Altavoces",
|
||||
"sounds": "",
|
||||
"speakers": "Parlantes",
|
||||
"startAudioMuted": "Todos inician silenciados",
|
||||
"startVideoMuted": "Todos inician con cámara desactivada",
|
||||
"speakers": "Parlantes",
|
||||
"talkWhileMuted": "",
|
||||
"title": "Ajustes"
|
||||
},
|
||||
"settingsView": {
|
||||
@@ -672,9 +831,9 @@
|
||||
"conferenceSection": "Conferencia",
|
||||
"disableCallIntegration": "Desactivar la integración nativa de llamadas",
|
||||
"disableP2P": "Desactivar la comunicación directa (\"Peer-To-Peer\")",
|
||||
"displayName": "Nombre a mostrar",
|
||||
"disableCrashReporting": "Desactivar el reporte de crasheos",
|
||||
"disableCrashReportingWarning": "¿Estás seguro que no deseas reportarnos los crasheos? La opción se activará al reiniciar la app.",
|
||||
"displayName": "Nombre a mostrar",
|
||||
"email": "Correo electrónico",
|
||||
"header": "Configuración",
|
||||
"profileSection": "Perfil",
|
||||
@@ -690,6 +849,7 @@
|
||||
},
|
||||
"speaker": "Participante",
|
||||
"speakerStats": {
|
||||
"search": "",
|
||||
"hours": "{{count}} h",
|
||||
"minutes": "{{count}} min",
|
||||
"name": "Nombre",
|
||||
@@ -699,6 +859,7 @@
|
||||
},
|
||||
"startupoverlay": {
|
||||
"policyText": " ",
|
||||
"genericTitle": "",
|
||||
"title": "{{app}} necesita usar el micrófono y la cámara."
|
||||
},
|
||||
"suspendedoverlay": {
|
||||
@@ -710,22 +871,23 @@
|
||||
"accessibilityLabel": {
|
||||
"audioOnly": "Alternar cámaras de los demás",
|
||||
"audioRoute": "Seleccionar el dispositivo de sonido",
|
||||
"boo": "",
|
||||
"callQuality": "Administrar la calidad de vídeo",
|
||||
"cc": "Alternar subtítulos",
|
||||
"chat": "Alternar ventana de chat",
|
||||
"clap": "",
|
||||
"document": "Alternar documento compartido",
|
||||
"embedMeeting": "Insertar reunión",
|
||||
"grantModerator": "Convertir en moderador",
|
||||
"download": "Descargar nuestras aplicaciones",
|
||||
"e2ee": "Cifrado de extremo a extremo",
|
||||
"embedMeeting": "Insertar reunión",
|
||||
"feedback": "Dejar comentarios",
|
||||
"fullScreen": "Alternar pantalla completa",
|
||||
"grantModerator": "Convertir en moderador",
|
||||
"hangup": "Colgar",
|
||||
"help": "Ayuda",
|
||||
"invite": "Invitar personas",
|
||||
"lobbyButtonDisable": "Desactivar sala de espera",
|
||||
"lobbyButtonEnable": "Activar sala de espera",
|
||||
"kick": "Expulsar participante",
|
||||
"laugh": "",
|
||||
"like": "",
|
||||
"lobbyButton": "Activar / desactivar el modo lobby",
|
||||
"localRecording": "Alternar controles de grabación local",
|
||||
"lockRoom": "Alternar contraseña de la reunión",
|
||||
@@ -734,39 +896,57 @@
|
||||
"moreOptions": "Mostrar más opciones",
|
||||
"mute": "Silenciar micrófono",
|
||||
"muteEveryone": "Silenciar a todos",
|
||||
"muteEveryoneElse": "",
|
||||
"muteEveryonesVideo": "",
|
||||
"muteEveryoneElsesVideo": "",
|
||||
"participants": "",
|
||||
"pip": "Alternar modo ventana en miniatura",
|
||||
"privateMessage": "Enviar mensaje privado",
|
||||
"profile": "Editar perfil",
|
||||
"raiseHand": "Levantar o bajar la mano",
|
||||
"reactionsMenu": "",
|
||||
"recording": "Alternar grabación",
|
||||
"remoteMute": "Silenciar participante",
|
||||
"remoteVideoMute": "",
|
||||
"security": "Opciones de seguridad",
|
||||
"Settings": "Alternar configuración",
|
||||
"shareaudio": "",
|
||||
"sharedvideo": "Alternar vídeo compartido de YouTube",
|
||||
"shareRoom": "Invitar a alguien",
|
||||
"shareYourScreen": "Alternar pantalla compartida",
|
||||
"shortcuts": "Alternar accesos directos",
|
||||
"show": "Mostrar en primer",
|
||||
"silence": "",
|
||||
"speakerStats": "Alternar estadísticas del orador",
|
||||
"surprised": "",
|
||||
"tileView": "Alternar vista de mosaico",
|
||||
"toggleCamera": "Alternar cámara",
|
||||
"toggleFilmstrip": "Alternar mosaicos",
|
||||
"videomute": "Alternar vídeo",
|
||||
"videoblur": "Alternar desenfoque de vídeo"
|
||||
"videoblur": "Alternar desenfoque de vídeo",
|
||||
"selectBackground": "",
|
||||
"expand": "",
|
||||
"collapse": ""
|
||||
},
|
||||
"addPeople": "Agregar personas a la llamada",
|
||||
"audioSettings": "",
|
||||
"videoSettings": "",
|
||||
"audioOnlyOff": "Mostrar cámaras de los demás",
|
||||
"audioOnlyOn": "Ocultar cámaras de los demás (para ahorrar datos)",
|
||||
"audioRoute": "Selecciona el dispositivo de sonido",
|
||||
"authenticate": "Autenticar",
|
||||
"boo": "",
|
||||
"callQuality": "Ajustar la calidad de vídeo",
|
||||
"chat": "Abrir o cerrar chat",
|
||||
"clap": "",
|
||||
"closeChat": "Cerrar chat",
|
||||
"closeReactionsMenu": "",
|
||||
"disableReactionSounds": "",
|
||||
"documentClose": "Cerrar documento compartido",
|
||||
"documentOpen": "Abrir documento compartido",
|
||||
"download": "Descarga nuestras aplicaciones",
|
||||
"embedMeeting": "Insertar reunión",
|
||||
"e2ee": "Cifrado de extremo a extremo",
|
||||
"embedMeeting": "Insertar reunión",
|
||||
"enterFullScreen": "Pantalla completa",
|
||||
"enterTileView": "Ver en cuadrícula",
|
||||
"exitFullScreen": "Salir de pantalla completa",
|
||||
@@ -775,6 +955,8 @@
|
||||
"hangup": "Colgar",
|
||||
"help": "Ayuda",
|
||||
"invite": "Invitar personas",
|
||||
"laugh": "",
|
||||
"like": "",
|
||||
"lobbyButtonDisable": "Desactivar el modo lobby",
|
||||
"lobbyButtonEnable": "Activar el modo lobby",
|
||||
"login": "Inicio de sesión",
|
||||
@@ -784,6 +966,7 @@
|
||||
"moreOptions": "Más opciones",
|
||||
"mute": "Activar o silenciar el micrófono",
|
||||
"muteEveryone": "Silenciar a todos",
|
||||
"muteEveryonesVideo": "",
|
||||
"noAudioSignalTitle": "¡No se registra audio de tu micrófono!",
|
||||
"noAudioSignalDesc": "Checa si no está silenciado en tu configuración del sistema o dispositivo, o cambia de micrófono.",
|
||||
"noAudioSignalDescSuggestion": "Si no lo silenciaste a propósito desde la configuración del sistema o el dispositivo, intenta usar este otro micrófono:",
|
||||
@@ -792,28 +975,39 @@
|
||||
"noisyAudioInputTitle": "Tu micrófono parece estar ruidoso",
|
||||
"noisyAudioInputDesc": "Tu micrófono está haciendo ruido, siléncialo, ajusta su volumen en configuración del sistema, o cambia de micrófono.",
|
||||
"openChat": "Abrir chat",
|
||||
"openReactionsMenu": "",
|
||||
"participants": "",
|
||||
"pip": "Mostrar en ventana pequeña",
|
||||
"privateMessage": "Enviar mensaje privado",
|
||||
"profile": "Editar perfil",
|
||||
"raiseHand": "Levantar o bajar la mano",
|
||||
"raiseYourHand": "Levantar la mano",
|
||||
"reactionBoo": "",
|
||||
"reactionClap": "",
|
||||
"reactionLaugh": "",
|
||||
"reactionLike": "",
|
||||
"reactionSilence": "",
|
||||
"reactionSurprised": "",
|
||||
"security": "Opciones de seguridad",
|
||||
"Settings": "Configuración",
|
||||
"shareaudio": "",
|
||||
"sharedvideo": "Compartir un vídeo de YouTube",
|
||||
"shareRoom": "Invitar a alguien",
|
||||
"shortcuts": "Ver atajos del teclado",
|
||||
"silence": "",
|
||||
"speakerStats": "Estadísticas de los hablantes",
|
||||
"startScreenSharing": "Comenzar a compartir pantalla",
|
||||
"startSubtitles": "Iniciar subtítulos",
|
||||
"stopAudioSharing": "",
|
||||
"stopScreenSharing": "Dejar de compartir pantalla",
|
||||
"stopSubtitles": "Detener subtítulos",
|
||||
"stopSharedVideo": "Detener vídeo de YouTube",
|
||||
"surprised": "",
|
||||
"talkWhileMutedPopup": "¿Intentas hablar? Estás silenciado.",
|
||||
"tileViewToggle": "Activar o desactivar vista en cuadrícula",
|
||||
"toggleCamera": "Activar o desactivar cámara",
|
||||
"videomute": "Iniciar o detener cámara",
|
||||
"startvideoblur": "Desenfocar mi fondo",
|
||||
"stopvideoblur": "Desactivar desenfoque del fondo"
|
||||
"selectBackground": ""
|
||||
},
|
||||
"transcribing": {
|
||||
"ccButtonTooltip": "Iniciar o detener subtítulos",
|
||||
@@ -839,6 +1033,7 @@
|
||||
"react-nativeGrantPermissions": "Selecciona <b><i>Permitir</i></b> cuando el navegador solicite permisos.",
|
||||
"safariGrantPermissions": "Selecciona <b><i>Aceptar</i></b> cuando el navegador solicite permisos."
|
||||
},
|
||||
"volumeSlider": "",
|
||||
"videoSIPGW": {
|
||||
"busy": "Estamos trabajando para liberar recursos. Vuelve a intentarlo en unos minutos.",
|
||||
"busyTitle": "El servicio de salas está actualmente ocupado",
|
||||
@@ -861,26 +1056,29 @@
|
||||
"ld": "LD",
|
||||
"ldTooltip": "Viendo vídeo en baja definición",
|
||||
"lowDefinition": "Baja definición",
|
||||
"onlyAudioAvailable": "Solo hay audio disponible",
|
||||
"onlyAudioSupported": "Solo admitimos audio en este navegador.",
|
||||
"sd": "SD",
|
||||
"sdTooltip": "Viendo vídeo en definición estándar",
|
||||
"standardDefinition": "Definición estándar"
|
||||
},
|
||||
"videothumbnail": {
|
||||
"connectionInfo": "",
|
||||
"domute": "Silenciar",
|
||||
"domuteVideo": "",
|
||||
"domuteOthers": "Silenciar a todos",
|
||||
"domuteVideoOfOthers": "",
|
||||
"flip": "Voltear",
|
||||
"grantModerator": "Convertir en moderador",
|
||||
"kick": "Expulsar",
|
||||
"moderator": "Moderador",
|
||||
"mute": "Se silenció el participante",
|
||||
"muted": "Silenciado",
|
||||
"videoMuted": "",
|
||||
"remoteControl": "Control remoto",
|
||||
"show": "Mostrar en primer plano",
|
||||
"videomute": "El participante paró su cámara"
|
||||
},
|
||||
"welcomepage": {
|
||||
"addMeetingName": "",
|
||||
"accessibilityLabel": {
|
||||
"join": "Toca para unirte",
|
||||
"roomname": "Introduce el nombre de la sala"
|
||||
@@ -895,22 +1093,37 @@
|
||||
"connectCalendarText": "Conecta tu calendario para ver todas tus reuniones de {{app}}. Además, agrega reuniones a tu calendario e inícialas con un solo clic.",
|
||||
"enterRoomTitle": "Comenzar una reunión",
|
||||
"getHelp": "Obtener ayuda",
|
||||
"roomNameAllowedChars": "El nombre de la reunión no debe contener ninguno de estos caracteres: ?, &, :, ', \", %, #.",
|
||||
"go": "IR",
|
||||
"goSmall": "IR",
|
||||
"join": "CREAR / UNIRSE",
|
||||
"headerTitle": "",
|
||||
"headerSubtitle": "",
|
||||
"info": "Información",
|
||||
"join": "CREAR / UNIRSE",
|
||||
"jitsiOnMobile": "",
|
||||
"mobileDownLoadLinkIos": "",
|
||||
"mobileDownLoadLinkAndroid": "",
|
||||
"mobileDownLoadLinkFDroid": "",
|
||||
"moderatedMessage": "O <a href=\"{{url}}\" rel=\"noopener noreferrer\" target=\"_blank\">reserve con antelación una URL de reunión</a> en la que usted sea el único moderador.",
|
||||
"privacy": "Privacidad",
|
||||
"recentList": "Reciente",
|
||||
"recentListDelete": "Eliminar",
|
||||
"recentListEmpty": "Tu historial de reuniones está vacío. Reúnete y aparecerán aquí.",
|
||||
"reducedUIText": "¡Bienvenid@ a {{app}}!",
|
||||
"roomNameAllowedChars": "El nombre de la reunión no debe contener ninguno de estos caracteres: ?, &, :, ', \", %, #.",
|
||||
"roomname": "Introduce el nombre de la sala",
|
||||
"roomnameHint": "Introduce el nombre o URL de la sala a la que deseas unirte. Puedes inventar un nombre, simplemente infórmaselo a las personas con las que te reunirás para que introduzcan el mismo nombre.",
|
||||
"sendFeedback": "Enviar sugerencias",
|
||||
"startMeeting": "",
|
||||
"terms": "Términos",
|
||||
"title": "Videoconferencias seguras, con gran variedad de funcionalidades y completamente gratuitas"
|
||||
"title": "Videoconferencias seguras, con gran variedad de funcionalidades y completamente gratuitas",
|
||||
"logo": {
|
||||
"calendar": "",
|
||||
"microsoftLogo": "",
|
||||
"logoDeepLinking": "",
|
||||
"desktopPreviewThumbnail": "",
|
||||
"googleLogo": "",
|
||||
"policyLogo": ""
|
||||
}
|
||||
},
|
||||
"lonelyMeetingExperience": {
|
||||
"button": "Invita a otros",
|
||||
@@ -920,6 +1133,8 @@
|
||||
"header": "Centro de ayuda"
|
||||
},
|
||||
"lobby": {
|
||||
"admit": "",
|
||||
"admitAll": "",
|
||||
"knockingParticipantList": "Participantes que quieren entrar",
|
||||
"allow": "permitir",
|
||||
"backToKnockModeButton": "No hay contraseña, pide permiso para entrar.",
|
||||
@@ -932,6 +1147,7 @@
|
||||
"enableDialogText": "La sala de espera te deja proteger tu reunión, de modo que todas los que entren enviarán una solicitud que deberá ser aprobada por un moderador.",
|
||||
"enterPasswordButton": "Introduce la contraseña de la reunión",
|
||||
"enterPasswordTitle": "Introduce la contraseña para poder entrar",
|
||||
"errorMissingPassword": "",
|
||||
"invalidPassword": "Contraseña inválida",
|
||||
"joiningMessage": "Podrás entrar tan pronto te acepten tu solicitud.",
|
||||
"joinWithPasswordMessage": "Tratando de entrar con contraseña, por favor espera...",
|
||||
@@ -950,6 +1166,7 @@
|
||||
"passwordField": "Introduce la contraseña de la reunión",
|
||||
"passwordJoinButton": "Entrar",
|
||||
"reject": "Rechazar",
|
||||
"rejectAll": "",
|
||||
"toggleLabel": "Activar sala de espera"
|
||||
}
|
||||
}
|
||||
@@ -68,10 +68,12 @@
|
||||
"noMessagesMessage": "No hay mensajes en la reunión. ¡Inicie una conversación!",
|
||||
"nickname": {
|
||||
"popover": "Selecciona un apodo",
|
||||
"title": "Introduce un apodo para usar el chat"
|
||||
"title": "Introduce un apodo para usar el chat",
|
||||
"titleWithPolls": "Introduce un apodo para usar el chat"
|
||||
},
|
||||
"privateNotice": "Mensaje privado para {{recipient}}",
|
||||
"title": "Chat",
|
||||
"titleWithPolls": "Chat",
|
||||
"you": "usted"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
|
||||
@@ -53,10 +53,12 @@
|
||||
"noMessagesMessage": "Kirjavahetust pole veel alustatud. Alusta kirjavahetust siin!",
|
||||
"nickname": {
|
||||
"popover": "Sisesta nimi",
|
||||
"title": "Sisesta nimi, et kõnega alustada"
|
||||
"title": "Sisesta nimi, et kõnega alustada",
|
||||
"titleWithPolls": "Sisesta nimi, et kõnega alustada"
|
||||
},
|
||||
"privateNotice": "Privaatsõnum kasutajale {{recipient}}",
|
||||
"title": "Kõne",
|
||||
"titleWithPolls": "Kõne",
|
||||
"you": "you"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
|
||||
@@ -64,10 +64,12 @@
|
||||
"noMessagesMessage": "Bileran oraindik mezurik ez dago. Hasi elkarrizketa hemen!",
|
||||
"nickname": {
|
||||
"popover": "Aukeratu goitizena",
|
||||
"title": "Sartu goitizena txata erabiltzeko"
|
||||
"title": "Sartu goitizena txata erabiltzeko",
|
||||
"titleWithPolls": "Sartu goitizena txata erabiltzeko"
|
||||
},
|
||||
"privateNotice": "Mezu pribatua {{recipient}}(e)ri",
|
||||
"title": "Txata",
|
||||
"titleWithPolls": "Txata",
|
||||
"you": "zu",
|
||||
"message": "Mezua",
|
||||
"messageAccessibleTitle": "{{user}} partaideak zera dio:",
|
||||
@@ -203,7 +205,6 @@
|
||||
"e2eeLabel": "Aktibatu puntutik punturako zifratzea",
|
||||
"e2eeWarning": "OHARRA: bileraren partaide guztiek ezin dute puntutik punturako zifratzea erabili. Aukera hau aktibatzen baduzu, batzuk ezingo zaituzte ikusi eta entzun.",
|
||||
"enterDisplayName": "Sartu zure izena hemen",
|
||||
"enterDisplayNameToJoin": "Mesedez idatzi zure izena bileran sartzeko",
|
||||
"embedMeeting": "Kapsulatu bilera",
|
||||
"error": "Errorea",
|
||||
"gracefulShutdown": "Zerbitzua ez dago erabilgarri mantentze-lanak direla eta. Saiatu berriro beranduago.",
|
||||
|
||||
@@ -68,10 +68,12 @@
|
||||
"noMessagesMessage": "هیچ گفتگویی در جلسه وجود ندارد، گفتگو را شما آعاز کنید!",
|
||||
"nickname": {
|
||||
"popover": "نام نمایشی خود را وارد نمایید",
|
||||
"title": "نام نمایشی خود را در گفتگو وارد نمایید"
|
||||
"title": "نام نمایشی خود را در گفتگو وارد نمایید",
|
||||
"titleWithPolls": "نام نمایشی خود را در گفتگو وارد نمایید"
|
||||
},
|
||||
"privateNotice": "پیام خصوصی به {{recipient}}",
|
||||
"title": "گفتگو",
|
||||
"titleWithPolls": "گفتگو",
|
||||
"you": "شما"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
|
||||
@@ -49,9 +49,11 @@
|
||||
"messagebox": "Kirjoita viesti",
|
||||
"nickname": {
|
||||
"popover": "Valitse lempinimi",
|
||||
"title": "Anna chatissä käytettävä lempinimi"
|
||||
"title": "Anna chatissä käytettävä lempinimi",
|
||||
"titleWithPolls": "Anna chatissä käytettävä lempinimi"
|
||||
},
|
||||
"title": "Chatti"
|
||||
"title": "Chatti",
|
||||
"titleWithPolls": "Chatti"
|
||||
},
|
||||
"connectingOverlay": {
|
||||
"joiningRoom": "Yhdistetään kokoukseen…"
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
"today": "Aujourd'hui"
|
||||
},
|
||||
"chat": {
|
||||
"enter": "Entrez dans le salon de chat",
|
||||
"enter": "Entrez dans le salon",
|
||||
"error": "Erreur : votre message n'a pas été envoyé. Raison : {{error}}",
|
||||
"fieldPlaceHolder": "Tapez votre message ici",
|
||||
"messagebox": "Saisissez un message",
|
||||
@@ -66,15 +66,21 @@
|
||||
"noMessagesMessage": "Il n'y a pas encore de messages dans cette réunion. Démarrez une conversation ici !",
|
||||
"nickname": {
|
||||
"popover": "Choisissez un pseudonyme",
|
||||
"title": "Entrez un pseudonyme pour utiliser le chat"
|
||||
"title": "Entrez un pseudonyme pour utiliser le chat",
|
||||
"titleWithPolls": "Entrez un pseudonyme pour utiliser le chat et les sondages"
|
||||
},
|
||||
"privateNotice": "Message privé à {{recipient}}",
|
||||
"title": "Chat",
|
||||
"you": "vous",
|
||||
"message": "Message",
|
||||
"messageAccessibleTitle": "{{user}} dit: ",
|
||||
"messageAccessibleTitleMe": "Je dis: ",
|
||||
"smileysPanel": "Panneaux des Émojis"
|
||||
"smileysPanel": "Panneaux des Émojis",
|
||||
"tabs": {
|
||||
"chat": "Chat",
|
||||
"polls": "Sondages"
|
||||
},
|
||||
"title": "Chat",
|
||||
"titleWithPolls": "Chat et Sondages",
|
||||
"you": "vous"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
"installExtensionText": "Installer l'extension pour l'intégration de Google Calendar et Office 365",
|
||||
@@ -209,7 +215,6 @@
|
||||
"e2eeLabel": "Activer le chiffrement de Bout-en-Bout",
|
||||
"e2eeWarning": "ATTENTION : Tous les participants de cette réunion ne semblent pas prendre en charge le chiffrement de Bout-en-Bout. Si vous activez le chiffrement, ils ne pourront ni vous voir, ni vous entendre.",
|
||||
"enterDisplayName": "Merci de saisir votre nom ici",
|
||||
"enterDisplayNameToJoin": "Merci de saisir votre nom pour rejoindre",
|
||||
"embedMeeting": "Intégrer la réunion",
|
||||
"error": "Erreur",
|
||||
"gracefulShutdown": "Notre service est actuellement en maintenance. Veuillez réessayer plus tard.",
|
||||
@@ -243,6 +248,8 @@
|
||||
"micPermissionDeniedError": "Vous n'avez pas autorisé l'utilisation de votre microphone. Vous pouvez toujours participer à la conférence, mais les autres ne vont pas vous entendre. Utilisez le bouton du microphone dans la barre d'adresse pour résoudre ce problème.",
|
||||
"micTimeoutError": "Impossible de démarrer la source audio. Délai dépassé!",
|
||||
"micUnknownError": "Vous ne pouvez pas utiliser le microphone pour une raison inconnue.",
|
||||
"moderationAudioLabel": "Autoriser les participants à réactiver leur micro",
|
||||
"moderationVideoLabel": "Autoriser les participants à démarrer leur vidéo",
|
||||
"muteEveryoneElseDialog": "Une fois leur micro coupé, vous ne pourrez plus le réactiver, mais ils pourront l'activer par eux-mêmes à tout moment.",
|
||||
"muteEveryoneElseTitle": "Couper le micro de tout le monde sauf de {{whom}} ?",
|
||||
"muteEveryoneDialog": "Êtes-vous sûr de vouloir couper les micros de tout le monde ? Vous ne pourrez plus réactiver leur micro, mais ils pourront l'activer par eux-mêmes à tout moment.",
|
||||
@@ -558,16 +565,53 @@
|
||||
"close": "Fermer",
|
||||
"headings": {
|
||||
"lobby": "Salle d'attente ({{count}})",
|
||||
"participantsList": "Participants de la réunion ({{count}})"
|
||||
"participantsList": "Participants de la réunion ({{count}})",
|
||||
"waitingLobby": "Dans la salle d'attente ({{count}})"
|
||||
},
|
||||
"actions": {
|
||||
"allow": "Autoriser les participant à:",
|
||||
"blockEveryoneMicCamera": "Bloquer tous les micros et caméras",
|
||||
"invite": "Inviter quelqu'un",
|
||||
"muteAll": "couper le micro de tout le monde",
|
||||
"stopVideo": "couper la vidéo"
|
||||
"askUnmute": "Demander de réactiver le micro",
|
||||
"mute": "Couper le micro",
|
||||
"muteAll": "Couper le micro de tout le monde",
|
||||
"muteEveryoneElse": "Couper le micro de tous les autres",
|
||||
"startModeration": "Réactiver son micro ou démarrer sa vidéo",
|
||||
"stopEveryonesVideo": "Couper toutes les caméras",
|
||||
"stopVideo": "Couper la vidéo",
|
||||
"unblockEveryoneMicCamera": "Débloquer tous les micros et caméras"
|
||||
}
|
||||
},
|
||||
"passwordSetRemotely": "défini par un autre participant",
|
||||
"passwordDigitsOnly": "Jusqu'à {{number}} chiffres",
|
||||
"polls": {
|
||||
"create": {
|
||||
"addOption": "Ajouter une option",
|
||||
"answerPlaceholder": "Option {{index}}",
|
||||
"create": "Créer un sondage",
|
||||
"cancel": "Annuler",
|
||||
"pollOption" : "Option {{index}}",
|
||||
"pollQuestion" : "Question du sondage",
|
||||
"questionPlaceholder": "Poser une question",
|
||||
"removeOption": "Supprimer l'option",
|
||||
"send": "Envoyer"
|
||||
},
|
||||
"answer": {
|
||||
"skip": "Passer",
|
||||
"submit": "Envoyer"
|
||||
},
|
||||
"results": {
|
||||
"vote": "Voter",
|
||||
"changeVote": "Changer le vote",
|
||||
"empty": "Il n'y a pas encore de sondages dans cette réunion. Démarrez un sondage ici !",
|
||||
"hideDetailedResults": "Cacher les détails",
|
||||
"showDetailedResults": "Montrer les détails"
|
||||
},
|
||||
"notification": {
|
||||
"title": "Un nouveau sondage a été ajouté à la réunion",
|
||||
"description": "Ouvrez l'onget des sondages pour voter"
|
||||
}
|
||||
},
|
||||
"poweredby": "produit par",
|
||||
"prejoin": {
|
||||
"audioAndVideoError": "Erreur audio et video:",
|
||||
|
||||
@@ -53,10 +53,12 @@
|
||||
"noMessagesMessage": "Il n'y a pas encore de messages dans cette réunion. Démarrez une conversation ici !",
|
||||
"nickname": {
|
||||
"popover": "Choisissez un nom d'affichage",
|
||||
"title": "Entrer un nom d'affichage pour utiliser le clavardage"
|
||||
"title": "Entrer un nom d'affichage pour utiliser le clavardage",
|
||||
"titleWithPolls": "Entrer un nom d'affichage pour utiliser le clavardage"
|
||||
},
|
||||
"privateNotice": "Message privé à {{recipient}}",
|
||||
"title": "Clavardage",
|
||||
"titleWithPolls": "Clavardage",
|
||||
"you": "vous"
|
||||
},
|
||||
"connectingOverlay": {
|
||||
|
||||
@@ -53,10 +53,12 @@
|
||||
"noMessagesMessage": "Aínda non hai mensaxes na reunión. Comece unha conversación aquí!",
|
||||
"nickname": {
|
||||
"popover": "Escolla un alcume",
|
||||
"title": "Escriba un alcume para utilizar no chat"
|
||||
"title": "Escriba un alcume para utilizar no chat",
|
||||
"titleWithPolls": "Escriba un alcume para utilizar no chat"
|
||||
},
|
||||
"privateNotice": "Mensaxe privada para {{recipient}}",
|
||||
"title": "Chat",
|
||||
"titleWithPolls": "Chat",
|
||||
"you": "vostede"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
|
||||
@@ -53,10 +53,12 @@
|
||||
"noMessagesMessage": "אין עדיין הודעות בפגישה. התחל שיחה כאן!",
|
||||
"nickname": {
|
||||
"popover": "בחר שם משתמש",
|
||||
"title": "נא להזין שם משתמש בכדי להשתמש בצ'אט"
|
||||
"title": "נא להזין שם משתמש בכדי להשתמש בצ'אט",
|
||||
"titleWithPolls": "נא להזין שם משתמש בכדי להשתמש בצ'אט"
|
||||
},
|
||||
"privateNotice": "הודעה פרטית אל {{recipient}}",
|
||||
"title": "צ'אט",
|
||||
"titleWithPolls": "צ'אט",
|
||||
"you": "אתה"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
|
||||
@@ -70,10 +70,12 @@
|
||||
"noMessagesMessage": "अभी तक मीटिंग में कोई संदेश नहीं आया है। वार्तालाप प्रारंभ करें!",
|
||||
"nickname": {
|
||||
"popover": "एक उपनाम चुनें",
|
||||
"title": "चैट का उपयोग करने के लिए एक उपनाम दर्ज करें"
|
||||
"title": "चैट का उपयोग करने के लिए एक उपनाम दर्ज करें",
|
||||
"titleWithPolls": "चैट का उपयोग करने के लिए एक उपनाम दर्ज करें"
|
||||
},
|
||||
"privateNotice": "{{recipient}} के लिए निजी संदेश",
|
||||
"title": "चैट",
|
||||
"titleWithPolls": "चैट",
|
||||
"you": "आप"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
|
||||
@@ -49,9 +49,11 @@
|
||||
"messagebox": "",
|
||||
"nickname": {
|
||||
"popover": "Odaberite nadimak",
|
||||
"title": "Unesite nadimak za čavrljanje"
|
||||
"title": "Unesite nadimak za čavrljanje",
|
||||
"titleWithPolls": "Unesite nadimak za čavrljanje"
|
||||
},
|
||||
"title": "Čavrljanje"
|
||||
"title": "Čavrljanje",
|
||||
"titleWithPolls": "Čavrljanje"
|
||||
},
|
||||
"connectingOverlay": {
|
||||
"joiningRoom": ""
|
||||
|
||||
@@ -53,10 +53,12 @@
|
||||
"noMessagesMessage": "A találkozón még nincsenek üzenetek. Itt kezdhet beszélgetést!",
|
||||
"nickname": {
|
||||
"popover": "Becenév kiválasztása",
|
||||
"title": "Adjon meg egy becenevet a csevegés számára"
|
||||
"title": "Adjon meg egy becenevet a csevegés számára",
|
||||
"titleWithPolls": "Adjon meg egy becenevet a csevegés számára"
|
||||
},
|
||||
"privateNotice": "Privát üzenet a felhasználónak: {{recipient}}",
|
||||
"title": "Csevegés",
|
||||
"titleWithPolls": "Csevegés",
|
||||
"you": "neked"
|
||||
},
|
||||
"connectingOverlay": {
|
||||
|
||||
@@ -49,9 +49,11 @@
|
||||
"messagebox": "",
|
||||
"nickname": {
|
||||
"popover": "Ընտրեք մականուն",
|
||||
"title": ""
|
||||
"title": "",
|
||||
"titleWithPolls": ""
|
||||
},
|
||||
"title": ""
|
||||
"title": "",
|
||||
"titleWithPolls": ""
|
||||
},
|
||||
"connectingOverlay": {
|
||||
"joiningRoom": ""
|
||||
|
||||
@@ -53,10 +53,12 @@
|
||||
"noMessagesMessage": "There are no messages in the meeting yet. Start a conversation here!",
|
||||
"nickname": {
|
||||
"popover": "Choose a nickname",
|
||||
"title": "Enter a nickname to use chat"
|
||||
"title": "Enter a nickname to use chat",
|
||||
"titleWithPolls": "Enter a nickname to use chat"
|
||||
},
|
||||
"privateNotice": "Private message to {{recipient}}",
|
||||
"title": "Chat",
|
||||
"titleWithPolls": "Chat",
|
||||
"you": "you"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
@@ -175,7 +177,7 @@
|
||||
"dismiss": "Dismiss",
|
||||
"displayNameRequired": "Hi! What’s your name?",
|
||||
"done": "Done",
|
||||
"enterDisplayName": "Please enter your name here",
|
||||
"enterDisplayName": "Enter your name here",
|
||||
"error": "Error",
|
||||
"externalInstallationMsg": "You need to install our desktop sharing extension.",
|
||||
"externalInstallationTitle": "Extension required",
|
||||
|
||||
@@ -53,10 +53,12 @@
|
||||
"noMessagesMessage": "Það eru ennþá engin skilaboð á fundinum. Byrjaðu umræðuna hér!",
|
||||
"nickname": {
|
||||
"popover": "Veldu gælunafn",
|
||||
"title": "Settu inn gælunafn/stuttnefni til að nota við spjall"
|
||||
"title": "Settu inn gælunafn/stuttnefni til að nota við spjall",
|
||||
"titleWithPolls": "Settu inn gælunafn/stuttnefni til að nota við spjall"
|
||||
},
|
||||
"privateNotice": "Einkaskilaboð til {{recipient}}",
|
||||
"title": "Spjall",
|
||||
"titleWithPolls": "Spjall",
|
||||
"you": "þú"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
"copyInvite": "Copia invito alla riunione",
|
||||
"copyLink": "Copia collegamento alla riunione",
|
||||
"copyStream": "Copia collegamento della diretta",
|
||||
"contacts": "contatti",
|
||||
"countryNotSupported": "Non supportiamo ancora questa destinazione.",
|
||||
"countryReminder": "Stai chiamando fuori dagli Stati Uniti? Assicurati d'inserire il prefisso internazionale!",
|
||||
"defaultEmail": "Tua e-mail di default",
|
||||
@@ -16,19 +17,14 @@
|
||||
"inviteMoreMailSubject": "Unisciti alla riunione {{appName}}",
|
||||
"inviteMorePrompt": "Invita altre persone",
|
||||
"linkCopied": "Collegamento copiato negli appunti",
|
||||
"loading": "Sto cercando persone e numeri di telefono",
|
||||
"loadingNumber": "Sto controllando il numero di telefono",
|
||||
"loadingPeople": "Sto cercando le persone da invitare",
|
||||
"noResults": "Nessun risultato corrispondente",
|
||||
"noValidNumbers": "Per favore inserire un numero di telefono",
|
||||
"outlookEmail": "E-mail Outlook",
|
||||
"searchNumbers": "Aggiungi numeri di telefono",
|
||||
"searchPeople": "Cerca persone",
|
||||
"searchPeopleAndNumbers": "Cerca persone o aggiungi i loro numeri di telefono",
|
||||
"phoneNumbers": "numeri di telefono",
|
||||
"searching": "Sto cercando...",
|
||||
"shareInvite": "Condividi invito alla riunione",
|
||||
"shareLink": "Condividi il collegamento alla riunione per invitare altri",
|
||||
"shareStream": "Condividi il collegamento alla diretta",
|
||||
"sip": "SIP: {{address}}",
|
||||
"sipAddresses": "indirizzi SIP",
|
||||
"telephone": "Telefono: {{number}}",
|
||||
"title": "Invita persone a questa riunione",
|
||||
"yahooEmail": "E-mail Yahoo"
|
||||
@@ -70,15 +66,26 @@
|
||||
"noMessagesMessage": "Non ci sono ancora messaggi nella riunione. Comincia una conversazione, qui!",
|
||||
"nickname": {
|
||||
"popover": "Scegli un nickname",
|
||||
"title": "Inserire un nickname per utilizzare la conversazione"
|
||||
"title": "Inserire un nickname per utilizzare la conversazione",
|
||||
"titleWithPolls": "Inserire un nickname per utilizzare la conversazione"
|
||||
},
|
||||
"privateNotice": "Messaggio privato per {{recipient}}",
|
||||
"message": "Messaggio",
|
||||
"messageAccessibleTitle": "{{user}} dice:",
|
||||
"messageAccessibleTitleMe": "io dico:",
|
||||
"smileysPanel": "Pannello emoji",
|
||||
"tabs": {
|
||||
"chat": "Chat",
|
||||
"polls": "Sondaggi"
|
||||
},
|
||||
"title": "Conversazione",
|
||||
"titleWithPolls": "Conversazione",
|
||||
"you": "tu"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
"installExtensionText": "Installa un'estensione per integrare Google Calendar e Office 365",
|
||||
"buttonText": "Installa l'estensione Chrome",
|
||||
"close": "Chiudi",
|
||||
"dontShowAgain": "Non mostrare più questo messaggio"
|
||||
},
|
||||
"connectingOverlay": {
|
||||
@@ -206,12 +213,16 @@
|
||||
"done": "Fatto",
|
||||
"e2eeDescription": "La crittografia punto-a-punto al momento è SPERIMENTALE. Tieni presente che attivandola disabiliterai i servizi svolti dal server, come: la registrazione, la dirette streaming e la partecipazione usando telefoni. Tieni anche presente che la riunione funzionerà solo per chi si collega usando browser che supportano flussi inseribili (insertable streams).",
|
||||
"e2eeLabel": "Attiva la crittografia punto-a-punto",
|
||||
"e2eeDisabledDueToMaxModeDescription": "Impossibile crittografare la sessione, per il numero eccessivo di partecipanti.",
|
||||
"e2eeWarning": "ATTENZIONE: non tutti i partecipanti a questa riunione sembrano supportare le funzionalità di crittografia punto-a-punto. Se la attivi, non potranno sentirti o vederti.",
|
||||
"e2eeWillDisableDueToMaxModeDescription": "WARNING: ATTENZIONE: la crittografia punto-punto verrà disattivata automaticamente, se si aggiungono nuovi partecipanti alla riunione.",
|
||||
"enterDisplayName": "Inserisci qui il tuo nome",
|
||||
"embedMeeting": "Incorpora la riunione",
|
||||
"error": "Errore",
|
||||
"gracefulShutdown": "Il nostro servizio è al momento spento per manutenzione. Si prega di riprovare più tardi.",
|
||||
"grantModeratorDialog": "Sei sicuro di voler rendere moderatore questo partecipante?",
|
||||
"grantModeratorTitle": "Autorizza moderatore",
|
||||
"hideShareAudioHelper": "Non mostrare più questa finestra",
|
||||
"IamHost": "Sono l'organizzatore",
|
||||
"incorrectRoomLockPassword": "Password errata",
|
||||
"incorrectPassword": "Nome utente o password errati",
|
||||
@@ -240,30 +251,39 @@
|
||||
"micPermissionDeniedError": "Non hai concesso il permesso di usare il microfono. Puoi comunque partecipare alla riunione ma gli altri non potranno sentirti. Usa il bottone a forma di telecamera nella barra degli indirizzi per cambiare impostazioni.",
|
||||
"micTimeoutError": "Impossibile avviare la fonte audio. Tempo di attesa scaduto.",
|
||||
"micUnknownError": "Impossibile usare il microfono per un motivo sconosciuto.",
|
||||
"moderationAudioLabel": "Permetti ai partecipenti di accendere il microfono",
|
||||
"moderationVideoLabel": "Permetti ai partecipanti di arrivare la videocamera",
|
||||
"muteEveryoneElseDialog": "Una volta spenti i microfoni non potrai riattivarli, ma loro potranno farlo in qualsiasi momento.",
|
||||
"muteEveryoneElseTitle": "Spengo il microfono a tutti, eccetto a {{whom}}?",
|
||||
"muteEveryoneDialog": "Sei sicuro di voler spegnere il microfono a tutti? Non potrai riattivarli, ma loro potranno farlo in qualsiasi momento.",
|
||||
"muteEveryoneDialogModerationOn": "I partecipanti possono fare richiesta di parlare in ogni momento.",
|
||||
"muteEveryoneTitle": "Spengo i microfoni a tutti?",
|
||||
"muteEveryoneElsesVideoDialog": "Una volta spente le videocamere non potrai riaccenderle, ma ogni partecipante potrà farlo in ogni momento.",
|
||||
"muteEveryoneElsesVideoTitle": "Spengo tutte le videocamere, tranne a {{whom}}?",
|
||||
"muteEveryonesVideoDialog": "Sei sicuro di voler spegnere le videocamere di tutti? Non potrai riaccenderle, ma ogni partecipante potrà farlo in ogni momento.",
|
||||
"muteEveryonesVideoDialog": "Sei sicuro di voler spegnere le videocamere a tutti? Non potrai riaccenderle, ma ogni partecipante potrà farlo in ogni momento.",
|
||||
"muteEveryonesVideoDialogModerationOn": "I partecipanti possono fare richiesta di trasmettere video in ogni momento.",
|
||||
"muteEveryonesVideoDialogOk": "Spegni",
|
||||
"muteEveryonesVideoTitle": "Vuoi spegnere le videocamere di tutti?",
|
||||
"muteEveryoneSelf": "te",
|
||||
"muteEveryoneStartMuted": "Tutti cominciano a microfono spento, d'adesso in avanti",
|
||||
"muteParticipantBody": "Non sarai in grado di riattivare il loro microfono, ma loro potranno riattivarlo in qualsiasi momento.",
|
||||
"muteParticipantButton": "Spegni microfono",
|
||||
"muteParticipantDialog": "Sei sicuro di voler spegnere il microfono a questo partecipante? Sarà lui a doverlo riattivare, per parlare.",
|
||||
"muteParticipantDialog": "Sei sicuro di voler spegnere il microfono di questo partecipante? Lui potrà riattivarlo in ogni momento.",
|
||||
"muteParticipantsVideoDialog": "Sei sicuro di voler spegnere la videocamera di questo partecipante? Lui potrà riattivarla in ogni momento.",
|
||||
"muteParticipantTitle": "Spengo il microfono a questo partecipante?",
|
||||
"muteParticipantsVideoButton": "Spegni videocamera",
|
||||
"muteParticipantsVideoTitle": "Vuoi spegnere la videocamera di questo partecipante?",
|
||||
"muteParticipantsVideoBody": "Una volta spenta la videocamera non potrai riaccenderla, ma lui potrà riattivarla in qualsiasi momento.",
|
||||
"noDropboxToken": "Token Dropbox non valido",
|
||||
"Ok": "OK",
|
||||
"password": "Password",
|
||||
"passwordLabel": "La riunione è stata bloccata da un partecipante. Immetti la $t(lockRoomPassword) per collegarti, per favore.",
|
||||
"passwordNotSupported": "Impostare una $t(lockRoomPassword) non è supportato.",
|
||||
"passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) non supportato",
|
||||
"passwordRequired": "$t(lockRoomPasswordUppercase) richiesta",
|
||||
"permissionErrorTitle": "Autorizzazione richiesta",
|
||||
"permissionCameraRequiredError": "L'autorizzazione all'uso della videcamera deve essere concessa, se si desidera mandare online la propria immagine. Per favore, concedi l'autorizzazione nelle impostazioni",
|
||||
"permissionMicRequiredError": "L'autorizzazione all'uso del microfono deve essere concessa, se si desidera parlare durante la conferenza. Per favore, concedi l'autorizzazione nelle impostazioni",
|
||||
"popupError": "Il tuo browser sta bloccando i pop-up da questo sito. Per favore abilita i pop-up dalle impostazioni di sicurezza del browser e riprova.",
|
||||
"popupErrorTitle": "Pop-up bloccato",
|
||||
"readMore": "continua",
|
||||
@@ -297,14 +317,26 @@
|
||||
"sessTerminated": "Chiamata terminata",
|
||||
"sessionRestarted": "Chiamata riavviata automaticamente",
|
||||
"Share": "Condividi",
|
||||
"shareAudio": "Continue",
|
||||
"shareAudioTitle" : "Come condividere l'audio",
|
||||
"shareAudioWarningTitle": "Ferma la condivisione dello schermo, per condividere l'audio",
|
||||
"shareAudioWarningH1": "Se vuoi condividere solo l'audio:",
|
||||
"shareAudioWarningD1": "devi fermare la condivisione dello schermo, per condividere l'audio.",
|
||||
"shareAudioWarningD2": "devi riavviare la condivisione schermo e spuntare l'opzione \"condividi audio\".",
|
||||
"shareMediaWarningGenericH2": "Se vuoi condividere il tuo schermo e l'audio",
|
||||
"shareVideoLinkError": "Fornire un link youtube corretto.",
|
||||
"shareVideoTitle": "Condividi un video",
|
||||
"shareYourScreen": "Condividi schermo",
|
||||
"shareYourScreenDisabled": "Condivisione schermo disabilitata.",
|
||||
"startLiveStreaming": "Inizia una diretta",
|
||||
"startRecording": "Inizia a registrare",
|
||||
"startRemoteControlErrorMessage": "Si è verificato un errore cercando di avviare la sessione di controllo remoto!",
|
||||
"stopLiveStreaming": "Ferma la diretta",
|
||||
"startRemoteControlErrorMessage": "Si è verificato un errore nel tentativo di avviare la sessione di controllo remoto!",
|
||||
"shareScreenWarningTitle": "Ferma la condivisione audio, per condividere lo schermo",
|
||||
"shareScreenWarningH1": "Se vuoi condividere solo lo schermo:",
|
||||
"shareScreenWarningD1": "devi fermare la condivisione audio, per condividere lo schermo.",
|
||||
"shareScreenWarningD2": "devi fermare la condivisione audio, avvia la condivisione dello schermo e spunta \"condividi audio\" option.",
|
||||
"sharedVideoLinkPlaceholder": "Link YouTube o link video diretto",
|
||||
"stopLiveStreaming": "Ferma la diretta streaming",
|
||||
"stopRecording": "Ferma registrazione",
|
||||
"stopRecordingWarning": "Sei sicuro di voler interrompere la registrazione?",
|
||||
"stopStreamingWarning": "Sei sicuro di voler interrompere la diretta?",
|
||||
@@ -320,11 +352,16 @@
|
||||
"userIdentifier": "Identificatore utente",
|
||||
"userPassword": "Password utente",
|
||||
"videoLink": "Collegamento video",
|
||||
"viewUpgradeOptions": "Vedi le opzioni premium",
|
||||
"viewUpgradeOptionsContent": "Per aver accesso illimitato alle funzionalità premium come la registrazione, trascrizione, lo Streaming RTMP & altri, devi passare ad un abbonamento diverso.",
|
||||
"viewUpgradeOptionsTitle": "Hai scoperto una funzione premium!",
|
||||
"WaitForHostMsg": "La riunione <b>{{room}}</b> non è ancora cominciata. Se sei l'organizzatore, per favore autenticati. Altrimenti, aspetta l'arrivo dell'organizzatore.",
|
||||
"WaitForHostMsgWOk": "La riunione <b>{{room}}</b> non è ancora cominciata. Se sei l'organizzatore, allora premi OK per autenticarti. Altrimenti, aspetta l'arrivo dell'organizzatore.",
|
||||
"WaitingForHost": "In attesa dell'organizzatore...",
|
||||
"Yes": "Sì",
|
||||
"yourEntireScreen": "Schermo intero"
|
||||
"yourEntireScreen": "Schermo intero",
|
||||
"remoteUserControls": "Controlli dell'utente remoto {{username}}",
|
||||
"localUserControls": "Controlli dell'utente locale"
|
||||
},
|
||||
"dialOut": {
|
||||
"statusMessage": "è {{status}}"
|
||||
@@ -339,13 +376,27 @@
|
||||
"title": "Incorpora questa riunione"
|
||||
},
|
||||
"virtualBackground": {
|
||||
"apply": "Applica",
|
||||
"title": "Sfondi",
|
||||
"blur": "Sfuoca",
|
||||
"slightBlur": "Sfuoca leggermente",
|
||||
"removeBackground": "Togli sfondo",
|
||||
"uploadImage": "Carica immagine",
|
||||
"addBackground": "Aggiungi sfondo",
|
||||
"pleaseWait": "Aspetta un momento...",
|
||||
"none": "Nessuno"
|
||||
"none": "Nessuno",
|
||||
"uploadedImage": "Carica immagine {{index}}",
|
||||
"deleteImage": "Cancella immagine",
|
||||
"image1" : "Spiaggia",
|
||||
"image2" : "Parete neutra bianca",
|
||||
"image3" : "Stanza bianca vuota",
|
||||
"image4" : "Lampanda da pavimento nera",
|
||||
"image5" : "Montagna",
|
||||
"image6" : "Foresta",
|
||||
"image7" : "Alba",
|
||||
"desktopShareError": "Impossibile condividere il desktop",
|
||||
"desktopShare":"Condivisione desktop",
|
||||
"webAssemblyWarning": "Il WebAssembly not è supportato",
|
||||
"backgroundEffectError": "L'applicazione dell'effetto allo sfondo è fallita."
|
||||
},
|
||||
"feedback": {
|
||||
"average": "Media",
|
||||
@@ -354,7 +405,8 @@
|
||||
"good": "Buona",
|
||||
"rateExperience": "Valuta la qualità della videoconferenza.",
|
||||
"veryBad": "Pessima",
|
||||
"veryGood": "Ottima"
|
||||
"veryGood": "Ottima",
|
||||
"star": "Stella"
|
||||
},
|
||||
"incomingCall": {
|
||||
"answer": "Rispondi",
|
||||
@@ -371,6 +423,7 @@
|
||||
"country": "Paese",
|
||||
"dialANumber": "Per collegarti telefonicamente al meeting, chiama uno di questi numeri e metti il pin.",
|
||||
"dialInConferenceID": "PIN:",
|
||||
"copyNumber":"Copia numero",
|
||||
"dialInNotSupported": "Spiacenti, la partecipazione solo telefonica non è supportata attualmente",
|
||||
"dialInNumber": "Componi:",
|
||||
"dialInSummaryError": "Errore nella ricerca dei numeri telefonici. Riprova più tardi.",
|
||||
@@ -379,6 +432,11 @@
|
||||
"inviteLiveStream": "Per vedere la diretta di questa riunione, fai click su questo link: {{url}}",
|
||||
"invitePhone": "Per seguire solo telefonicamente, fai click: {{number}},,{{conferenceID}}#",
|
||||
"invitePhoneAlternatives": "Cerchi un numero diverso da chiamare?\nEcco dei numeri telefonici per collegarsi alle riunioni: {{url}}\n\n\nSe entri in riunione anche col computer, entra senza attivare l'audio: {{silentUrl}}",
|
||||
"inviteSipEndpoint": "Per entrare con un indirizzo SIP, immettere questo: {{sipUri}}",
|
||||
"inviteTextiOSPersonal": "{{name}} ti sta invitando ad una riunione.",
|
||||
"inviteTextiOSJoinSilent": "Se stai chiamando da un telefono fisso, usa questo link per entrare in riunione senz'audio: {{silentUrl}}.",
|
||||
"inviteTextiOSInviteUrl": "Clicca il link seguente, per entrare in riunione: {{inviteUrl}}.",
|
||||
"inviteTextiOSPhone": "Per entrare in riunione con un telefono, usa questo numero: {{number}},,{{conferenceID}}#. Se cerchi altri numeri, questa è la lista completa: {{didUrl}}.",
|
||||
"inviteURLFirstPartGeneral": "Invito a connettersi ad una riunione.",
|
||||
"inviteURLFirstPartPersonal": "{{name}} ti sta invitando ad una riunione.\n",
|
||||
"inviteURLSecondPart": "\nPartecipa alla riunione:\n{{url}}\n",
|
||||
@@ -389,6 +447,7 @@
|
||||
"noRoom": "Non è stata specificata nessuna stanza da chiamare.",
|
||||
"numbers": "Numeri da chiamare",
|
||||
"password": "$t(lockRoomPasswordUppercase):",
|
||||
"sip": "SIP address",
|
||||
"title": "Condividi",
|
||||
"tooltip": "Invia il collegamento e i numeri telefonici di questa riunione",
|
||||
"label": "Informazioni riunione"
|
||||
@@ -407,6 +466,7 @@
|
||||
"support": "Supporto",
|
||||
"supportMsg": "Se succede ancora contatta"
|
||||
},
|
||||
"jitsiHome": "{{logo}} Logo, collega alla Homepage",
|
||||
"keyboardShortcuts": {
|
||||
"focusLocal": "Sposta il focus sul tuo video",
|
||||
"focusRemote": "Sposta il focus sul video di un altro partecipante",
|
||||
@@ -491,6 +551,8 @@
|
||||
"lockRoomPasswordUppercase": "Password",
|
||||
"me": "io",
|
||||
"notify": {
|
||||
"allowAction": "Permetti",
|
||||
"allowedUnmute": "Puoi accendere il microfono, avviare la videocamera, o condividere il tuo schermo.",
|
||||
"connectedOneMember": "{{name}} si è connesso",
|
||||
"connectedThreePlusMembers": "{{name}} e altri {{count}} si sono connessi",
|
||||
"connectedTwoMembers": "{{first}} e {{second}} si sono connessi",
|
||||
@@ -527,21 +589,76 @@
|
||||
"OldElectronAPPTitle": "Falla di sicurezza!",
|
||||
"oldElectronClientDescription1": "Sembri stare usando una versione obsoleta del client Jitsi Meet che ha dei problemi di sicurezza noti. Assicurati di aggiornarla presso il nostro ",
|
||||
"oldElectronClientDescription2": "ultima build",
|
||||
"oldElectronClientDescription3": " ora!"
|
||||
"oldElectronClientDescription3": " ora!",
|
||||
"moderationInEffectDescription": "Alza la mano, se vuoi prender la parola, per favore.",
|
||||
"moderationInEffectCSDescription": "Alza la mano, se vuoi condividere lo schermo, per favore.",
|
||||
"moderationInEffectVideoDescription": "Alza la mano, se vuoi avviare la tua videocamera, per favore.",
|
||||
"moderationInEffectTitle": "Il tuo microfono è stato spento dal moderatore",
|
||||
"moderationInEffectCSTitle": "La condivisione schermo è stata bloccata dal moderatore",
|
||||
"moderationInEffectVideoTitle": "La tua videocamera è stata spenta dal moderatore",
|
||||
"moderationRequestFromModerator": "Il moderatore vorrebbe che tu accendessi il microfono",
|
||||
"moderationRequestFromParticipant": "Vuole parlare",
|
||||
"moderationStartedTitle": "Moderazione in corso",
|
||||
"moderationStoppedTitle": "Moderazione interrotta",
|
||||
"moderationToggleDescription": "da {{participantDisplayName}}",
|
||||
"raiseHandAction": "Alza la mano",
|
||||
"reactionSounds": "Disattiva suoni",
|
||||
"groupTitle": "Notifiche"
|
||||
},
|
||||
"participantsPane": {
|
||||
"headings": {
|
||||
"lobby": "({{count}}) in sala d'attesa",
|
||||
"participantsList": "({{count}}) partecipanti"
|
||||
},
|
||||
"close": "Chiudi",
|
||||
"header": "Partecipanti",
|
||||
"headings": {
|
||||
"lobby": "Sala d'attesa ({{count}})",
|
||||
"participantsList": "Partecipanti alla riunione ({{count}})",
|
||||
"waitingLobby": "In attesa ({{count}})"
|
||||
},
|
||||
"actions": {
|
||||
"allow": "Permetti ai partecipanti di:",
|
||||
"allowVideo": "Autorizza video",
|
||||
"audioModeration": "Possono attivare audio",
|
||||
"blockEveryoneMicCamera": "Blocca audio e video a tutti",
|
||||
"invite": "Invita persone",
|
||||
"askUnmute": "Chiedi di attivare audio",
|
||||
"mute": "Silenzia",
|
||||
"muteAll": "Silenzia tutti",
|
||||
"stopVideo": "Ferma il video"
|
||||
"muteEveryoneElse": "Silenzia tutti gli altri",
|
||||
"stopEveryonesVideo": "Ferma il video di tutti",
|
||||
"stopVideo": "Ferma il video",
|
||||
"unblockEveryoneMicCamera": "Sblocca audio e video a tutti",
|
||||
"videoModeration": "Avvia il loro video"
|
||||
}
|
||||
},
|
||||
"passwordSetRemotely": "definita da altro utente",
|
||||
"passwordDigitsOnly": "Fino a {{number}} cifre",
|
||||
"polls": {
|
||||
"create": {
|
||||
"addOption": "Aggiungi risposta",
|
||||
"answerPlaceholder": "Risposta {{index}}",
|
||||
"create": "Crea un sondaggio",
|
||||
"cancel": "Annulla",
|
||||
"pollOption" : "Risposta sondaggio {{index}}",
|
||||
"pollQuestion" : "Domanda Sondaggio",
|
||||
"questionPlaceholder": "Poni una domanda",
|
||||
"removeOption": "Elimina risposta",
|
||||
"send": "Invia"
|
||||
},
|
||||
"answer": {
|
||||
"skip": "Salta",
|
||||
"submit": "Invia"
|
||||
},
|
||||
"results": {
|
||||
"vote": "Vota",
|
||||
"changeVote": "Cambia voto",
|
||||
"empty": "Non ci sono ancora sondaggi in questa riunione. Crea un sondaggi, da qui!",
|
||||
"hideDetailedResults": "Nascondi dettagli",
|
||||
"showDetailedResults": "Mostra dettagli"
|
||||
},
|
||||
"notification": {
|
||||
"title": "Un nuovo sondaggio è stato aggiunto alla riunione",
|
||||
"description": "Apri la scheda sondaggi per votare"
|
||||
}
|
||||
},
|
||||
"poweredby": "offerto da",
|
||||
"prejoin": {
|
||||
"audioAndVideoError": "Errore audio e video:",
|
||||
@@ -582,6 +699,7 @@
|
||||
"errorDialOutFailed": "Impossibile fare la chiamata. Chiamata fallita",
|
||||
"errorDialOutStatus": "Errore nel ricevere lo stato della rete",
|
||||
"errorMissingName": "Inserire il proprio nome, per accedere alla riunione",
|
||||
"errorNoPermissions": "Devi autorizzare l'accesso al microfono e alla videocamera",
|
||||
"errorStatusCode": "Errore nella chiamata, codice: {{status}}",
|
||||
"errorValidation": "Numero inesistente",
|
||||
"iWantToDialIn": "Voglio chiamare il numero",
|
||||
@@ -594,6 +712,7 @@
|
||||
"or": "o",
|
||||
"premeeting": "Attesa riunione",
|
||||
"showScreen": "Avvia la schermata d'attesa della riunione",
|
||||
"keyboardShortcuts" : "Attiva le scorciatoie da tastiera",
|
||||
"startWithPhone": "Avvia usando il telefono, per parlare",
|
||||
"screenSharingError": "Errore di condivisione dello schermo:",
|
||||
"videoOnlyError": "Errore video:",
|
||||
@@ -615,6 +734,7 @@
|
||||
"ringing": "Sta suonando..."
|
||||
},
|
||||
"profile": {
|
||||
"avatar": "avatar",
|
||||
"setDisplayNameLabel": "Imposta il nome da visualizzare",
|
||||
"setEmailInput": "Inserisci e-mail",
|
||||
"setEmailLabel": "Imposta l'e-mail gravatar",
|
||||
@@ -629,12 +749,15 @@
|
||||
"beta": "BETA",
|
||||
"busy": "Stiamo cercando di liberare risorse per la registrazione. Riprova tra qualche minuto.",
|
||||
"busyTitle": "Tutti i registratori sono occupati",
|
||||
"copyLink": "Copia collegamento",
|
||||
"error": "Registrazione fallita. Prova di nuovo.",
|
||||
"errorFetchingLink": "Errore nel collegamento alla tua registrazione.",
|
||||
"expandedOff": "Registrazione interrotta",
|
||||
"expandedOn": "La registrazione della riunione è attiva.",
|
||||
"expandedPending": "La registrazione è in fase di avvio...",
|
||||
"failedToStart": "Non è stato possibile avviare la registrazione",
|
||||
"fileSharingdescription": "Condividi la registrazione con i partecipanti alla riunione",
|
||||
"linkGenerated": "Abbiamo generato un collegamento alla tua registrazione.",
|
||||
"live": "DIRETTA",
|
||||
"loggedIn": "Accesso effettuato come {{userName}}",
|
||||
"off": "Registrazione interrotta",
|
||||
@@ -649,7 +772,8 @@
|
||||
"signIn": "Entra",
|
||||
"signOut": "Esci",
|
||||
"unavailable": "Ops! Il {{serviceName}} non è al momento disponibile. Stiamo lavorando per risolvere il problema. Riprova più tardi.",
|
||||
"unavailableTitle": "Registrazione non disponibile"
|
||||
"unavailableTitle": "Registrazione non disponibile",
|
||||
"uploadToCloud": "Carica in cloud"
|
||||
},
|
||||
"sectionList": {
|
||||
"pullToRefresh": "Trascina per aggiornare"
|
||||
@@ -668,8 +792,13 @@
|
||||
"signedIn": "Sto accedendo agli eventi del calendario per {{email}}. Fai click su «Disconnetti» per interrompere l’accesso agli eventi del calendario.",
|
||||
"title": "Calendario"
|
||||
},
|
||||
"desktopShareFramerate": "Frequenza di aggiornamento condivisone schermo",
|
||||
"desktopShareWarning": "Devi riavviare la condivisione schermo, per attivare le modifiche.",
|
||||
"desktopShareHighFpsWarning": "Una frequenza di aggiornamento più alta può mettere alla prova la tua connessione ad internet, durante la condivisione schermo. Devi riavviare la condivisione schermo, per attivare le modifiche.",
|
||||
"devices": "Dispositivi",
|
||||
"followMe": "Tutti mi seguono",
|
||||
"framesPerSecond": "schermate al secondo",
|
||||
"incomingMessage": "Messaggio in arrivo",
|
||||
"language": "Lingua",
|
||||
"loggedIn": "Connesso come {{name}}",
|
||||
"microphones": "Microfoni",
|
||||
@@ -677,12 +806,19 @@
|
||||
"more": "Altro",
|
||||
"name": "Nome",
|
||||
"noDevice": "Nessuno",
|
||||
"participantJoined": "Partecipante Entrato",
|
||||
"participantLeft": "Partecipante Uscito",
|
||||
"playSounds": "Suoni attivati",
|
||||
"reactions": "Reazioni riunione",
|
||||
"sameAsSystem": "Come nel sistema ({{label}})",
|
||||
"selectAudioOutput": "Uscita audio",
|
||||
"selectCamera": "Videocamera",
|
||||
"selectMic": "Microfono",
|
||||
"sounds": "Suoni",
|
||||
"speakers": "Altoparlanti",
|
||||
"startAudioMuted": "Tutti cominciano con il microfono disattivato",
|
||||
"startVideoMuted": "Tutti cominciano con il video disattivato",
|
||||
"startAudioMuted": "Tutti cominciano a microfono spento",
|
||||
"startVideoMuted": "Tutti cominciano a video disattivato",
|
||||
"talkWhileMuted": "Parla senza microfono",
|
||||
"title": "Impostazioni"
|
||||
},
|
||||
"settingsView": {
|
||||
@@ -713,6 +849,7 @@
|
||||
},
|
||||
"speaker": "Relatore",
|
||||
"speakerStats": {
|
||||
"search": "Cerca",
|
||||
"hours": "{{count}}h",
|
||||
"minutes": "{{count}}m",
|
||||
"name": "Nome",
|
||||
@@ -732,21 +869,25 @@
|
||||
},
|
||||
"toolbar": {
|
||||
"accessibilityLabel": {
|
||||
"audioOnly": "Attiva/disattiva solo audio",
|
||||
"audioOnly": "Spegni/Accendi audio",
|
||||
"audioRoute": "Scegli l'uscita audio",
|
||||
"boo": "Boo",
|
||||
"callQuality": "Imposta qualità della chiamata",
|
||||
"cc": "Attiva/disattiva sottotitoli",
|
||||
"chat": "Attiva/disattiva la conversazione",
|
||||
"document": "Attiva/disattiva documento condiviso",
|
||||
"cc": "Avvia/Ferma sottotitoli",
|
||||
"chat": "Entra/Esci da conversazione",
|
||||
"clap": "Applaudi",
|
||||
"document": "Apri/Chiudi documenti condivisi",
|
||||
"download": "Scarica le nostre app",
|
||||
"embedMeeting": "Incorpora riunione altrove",
|
||||
"feedback": "Lascia un feedback",
|
||||
"fullScreen": "Attiva/disattiva schermo intero",
|
||||
"fullScreen": "Apri/Chiudi schermo intero",
|
||||
"grantModerator": "Autorizza moderatore",
|
||||
"hangup": "Lascia la riunione",
|
||||
"help": "Aiuto",
|
||||
"invite": "Invita persone",
|
||||
"kick": "Espelli partecipante",
|
||||
"laugh": "Ridi",
|
||||
"like": "Mi piace",
|
||||
"lobbyButton": "Attiva/disattiva sala d'attesa",
|
||||
"localRecording": "Abilita/disattiva controlli di registrazione locale",
|
||||
"lockRoom": "Attiva o disattiva password",
|
||||
@@ -762,34 +903,45 @@
|
||||
"pip": "Attiva/disattiva immagine nell’immagine",
|
||||
"privateMessage": "Invia messaggio privato",
|
||||
"profile": "Modifica profilo",
|
||||
"raiseHand": "Attiva/disattiva alzata di mano",
|
||||
"recording": "Attiva/disattiva registrazione",
|
||||
"raiseHand": "Alza/Abbassa la mano",
|
||||
"reactionsMenu": "Apri/chiudi menù delle reaction",
|
||||
"recording": "Avvia/ferma registrazione",
|
||||
"remoteMute": "Spegni microfono al partecipante",
|
||||
"remoteVideoMute": "Spegni videocamera del partecipante",
|
||||
"security": "Impostazioni di sicurezza",
|
||||
"Settings": "Attiva/disattiva impostazioni",
|
||||
"sharedvideo": "Attiva/disattiva condivisione YouTube",
|
||||
"shareaudio": "Condividi audio",
|
||||
"sharedvideo": "Attiva/disattiva condivisione YouTube",
|
||||
"shareRoom": "Invita qualcuno",
|
||||
"shareYourScreen": "Attiva/disattiva condivisione schermo",
|
||||
"shortcuts": "Attiva/disattiva scorciatoie",
|
||||
"show": "Mostra in primo piano",
|
||||
"silence": "Silenzio",
|
||||
"speakerStats": "Attiva/disattiva statistiche relatore",
|
||||
"surprised": "Sorpreso",
|
||||
"tileView": "Vedi tutti i partecipanti insieme, o uno solo",
|
||||
"toggleCamera": "Cambia videocamera",
|
||||
"toggleFilmstrip": "Attiva/disattiva pellicola",
|
||||
"videomute": "Attiva/disattiva videocamera",
|
||||
"selectBackground": "Scegli sfondo"
|
||||
"videoblur": "Sfoca video",
|
||||
"selectBackground": "Scegli sfondo",
|
||||
"expand": "Espandi",
|
||||
"collapse": "Riduci"
|
||||
},
|
||||
"addPeople": "Aggiungi persone alla chiamata",
|
||||
"audioSettings": "Impostazioni audio",
|
||||
"videoSettings": "Impostazioni video",
|
||||
"audioOnlyOff": "Disabilita modalità per banda limitata",
|
||||
"audioOnlyOn": "Abilita modalità per banda limitata",
|
||||
"audioRoute": "Scegli l'uscita audio",
|
||||
"authenticate": "Autenticazione",
|
||||
"boo": "Boo",
|
||||
"callQuality": "Imposta qualità video",
|
||||
"chat": "Apri / Chiudi conversazione",
|
||||
"clap": "Applaudi",
|
||||
"closeChat": "Chiudi conversazione",
|
||||
"closeReactionsMenu": "Chiudi il menù reazioni",
|
||||
"disableReactionSounds": "Puoi disattivare i suoni delle reaction, in questa riunione",
|
||||
"documentClose": "Chiudi documento condiviso",
|
||||
"documentOpen": "Apri documento condiviso",
|
||||
"download": "Scarica le nostre app",
|
||||
@@ -803,6 +955,8 @@
|
||||
"hangup": "Butta giù",
|
||||
"help": "Aiuto",
|
||||
"invite": "Invita persone",
|
||||
"laugh": "Ridi",
|
||||
"like": "Mi piace",
|
||||
"lobbyButtonDisable": "Disabilita sala d'attesa",
|
||||
"lobbyButtonEnable": "Abilita sala d'attesa",
|
||||
"login": "Accedi",
|
||||
@@ -821,24 +975,33 @@
|
||||
"noisyAudioInputTitle": "Il tuo microfono sembra rumoroso!",
|
||||
"noisyAudioInputDesc": "Sembra che il tuo microfono faccia dei rumori, prova a spegnerlo o cambiarlo per favore.",
|
||||
"openChat": "Apri una conversazione",
|
||||
"openReactionsMenu": "Apri il menù reazioni",
|
||||
"participants": "Partecipanti",
|
||||
"pip": "Abilita visualizzazione immagine nell'immagine",
|
||||
"privateMessage": "invia un messaggio privato",
|
||||
"profile": "Modifica profilo",
|
||||
"raiseHand": "Alza / Abbassa la mano",
|
||||
"raiseYourHand": "Alza la mano",
|
||||
"reactionBoo": "Invia boo",
|
||||
"reactionClap": "Invia applauso",
|
||||
"reactionLaugh": "Invia risata",
|
||||
"reactionLike": "Invia mi piace",
|
||||
"reactionSilence": "Invia silenzio",
|
||||
"reactionSurprised": "Invia sorpresa",
|
||||
"security": "Impostazioni di sicurezza",
|
||||
"Settings": "Impostazioni",
|
||||
"shareaudio": "Condividi audio",
|
||||
"sharedvideo": "Condividi un video Youtube",
|
||||
"shareRoom": "Invita partecipante",
|
||||
"shortcuts": "Visualizza scorciatoie",
|
||||
"silence": "Silenzio",
|
||||
"speakerStats": "Statistiche",
|
||||
"startScreenSharing": "Inizia la condivisione dello schermo",
|
||||
"startSubtitles": "Avvia sottotitoli",
|
||||
"stopScreenSharing": "Ferma la condivisione dello schermo",
|
||||
"stopSubtitles": "Ferma sottotitoli",
|
||||
"stopSharedVideo": "Ferma video YouTube",
|
||||
"surprised": "Sopresa",
|
||||
"talkWhileMutedPopup": "Stai provando a parlare? Il microfono è disattivato.",
|
||||
"tileViewToggle": "Vedi tutti i partecipanti insieme, o uno solo",
|
||||
"toggleCamera": "Cambia videocamera",
|
||||
@@ -870,6 +1033,7 @@
|
||||
"react-nativeGrantPermissions": "Seleziona <b><i>consenti</i></b> quando richiesto dal browser.",
|
||||
"safariGrantPermissions": "Seleziona <b><i>OK</i></b> quando richiesto dal browser."
|
||||
},
|
||||
"volumeSlider": "Sbarra volume",
|
||||
"videoSIPGW": {
|
||||
"busy": "Stiamo lavorando per liberare le risorse. Riprova tra qualche minuto.",
|
||||
"busyTitle": "Il servizio Stanza al momento è occupato",
|
||||
@@ -914,6 +1078,7 @@
|
||||
"videomute": "Il partecipante ha la videocamera spenta"
|
||||
},
|
||||
"welcomepage": {
|
||||
"addMeetingName": "Aggiungi Nome riunione",
|
||||
"accessibilityLabel": {
|
||||
"join": "Tocca per accedere",
|
||||
"roomname": "Inserisci nome stanza"
|
||||
@@ -935,6 +1100,9 @@
|
||||
"info": "Informazioni chiamata",
|
||||
"join": "CREA / UNISCITI",
|
||||
"jitsiOnMobile": "Jitsi su mobile – scarica le nostre app e dai inizio ad una riunione dovunque tu sia",
|
||||
"mobileDownLoadLinkIos": "Scarica app per iOS",
|
||||
"mobileDownLoadLinkAndroid": "Scarica app per Android",
|
||||
"mobileDownLoadLinkFDroid": "Scarica app da F-Droid",
|
||||
"moderatedMessage": "O <a href=\"{{url}}\" rel=\"noopener noreferrer\" target=\"_blank\">prepara una URL</a> in anticipo, per le riunioni di cui sei il moderatore.",
|
||||
"privacy": "Riservatezza",
|
||||
"recentList": "Recenti",
|
||||
@@ -947,7 +1115,15 @@
|
||||
"sendFeedback": "Invia feedback",
|
||||
"startMeeting": "Inizia riunione",
|
||||
"terms": "Termini di utilizzo",
|
||||
"title": "Il sistema di videoconferenza sicuro, funzionale e completamente gratuito."
|
||||
"title": "Il sistema di videoconferenza sicuro, funzionale e completamente gratuito.",
|
||||
"logo":{
|
||||
"calendar":"Logo calendario",
|
||||
"microsoftLogo":"Logo Microsoft",
|
||||
"logoDeepLinking":"Logo Jitsi meet",
|
||||
"desktopPreviewThumbnail":"Icona anteprima desktop",
|
||||
"googleLogo":"Logo Google",
|
||||
"policyLogo":"Logo normativa"
|
||||
}
|
||||
},
|
||||
"lonelyMeetingExperience": {
|
||||
"button": "Invita altri",
|
||||
@@ -957,6 +1133,8 @@
|
||||
"header": "Aiuto"
|
||||
},
|
||||
"lobby": {
|
||||
"admit": "Ammetti",
|
||||
"admitAll": "Ammetti tutti",
|
||||
"knockingParticipantList": "Lista dei partecipanti in attesa",
|
||||
"allow": "Autorizza",
|
||||
"backToKnockModeButton": "Nessuna password, richiedi l'accesso",
|
||||
@@ -969,6 +1147,7 @@
|
||||
"enableDialogText": "La sala d'attesa ti permette di proteggere la riunione concedendo l'ingresso solo alle persone autorizzate da un moderatore.",
|
||||
"enterPasswordButton": "Inserisci password riunione",
|
||||
"enterPasswordTitle": "Inserisci la password per entrare nella riunione",
|
||||
"errorMissingPassword": "Per favore, mettere la password della riunione",
|
||||
"invalidPassword": "Password errata",
|
||||
"joiningMessage": "Entrerai nella riunione non appena qualcuno approva la tua richiesta",
|
||||
"joinWithPasswordMessage": "Ho inviato la password per entrare, attendi...",
|
||||
@@ -987,6 +1166,7 @@
|
||||
"passwordField": "Inserisci la password della riunione",
|
||||
"passwordJoinButton": "Entra",
|
||||
"reject": "Respingi",
|
||||
"rejectAll": "Respingi tutti",
|
||||
"toggleLabel": "Attiva sala d'attesa"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,10 +72,12 @@
|
||||
"noMessagesMessage": "このミーティングにはまだメッセージがありません。会話を開始してください!",
|
||||
"nickname": {
|
||||
"popover": "ニックネームを入力",
|
||||
"title": "チャットで使用するニックネームを入力してください"
|
||||
"title": "チャットで使用するニックネームを入力してください",
|
||||
"titleWithPolls": "チャットで使用するニックネームを入力してください"
|
||||
},
|
||||
"privateNotice": "{{recipient}} へのプライベートメッセージ",
|
||||
"title": "チャット",
|
||||
"titleWithPolls": "チャット",
|
||||
"you": "あなた"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
@@ -534,14 +536,25 @@
|
||||
"oldElectronClientDescription3": "に更新してください!"
|
||||
},
|
||||
"participantsPane": {
|
||||
"close": "閉じる",
|
||||
"header": "参加者",
|
||||
"headings": {
|
||||
"lobby": "ロビー ({{count}})",
|
||||
"participantsList": "参加者会議 ({{count}})"
|
||||
"participantsList": "会議参加者 ({{count}})",
|
||||
"waitingLobby": "({{count}}) ロビーで待つ"
|
||||
},
|
||||
"actions": {
|
||||
"allow": "参加者に:",
|
||||
"blockEveryoneMicCamera": "全員の音声と動画をブロックにする",
|
||||
"invite": "参加者招待",
|
||||
"askUnmute": "ミュートを解除するよう依頼する",
|
||||
"mute": "ニューと",
|
||||
"muteAll": "全員音声無効",
|
||||
"stopVideo": "ビデオ停止"
|
||||
"muteEveryoneElse": "他のすべての人をミュートする",
|
||||
"startModeration": "ミュート解除するか、動画を開始する",
|
||||
"stopEveryonesVideo": "全員の動画を無効にする",
|
||||
"stopVideo": "ビデオ停止",
|
||||
"unblockEveryoneMicCamera": "全員の音声と動画のブロックを解除する"
|
||||
}
|
||||
},
|
||||
"passwordSetRemotely": "他の参加者によりセット",
|
||||
|
||||
@@ -63,9 +63,11 @@
|
||||
"messagebox": "Aru izen",
|
||||
"nickname": {
|
||||
"popover": "Fren meffer isem",
|
||||
"title": "Sekcem meffer isem i useqdec n usqerdec"
|
||||
"title": "Sekcem meffer isem i useqdec n usqerdec",
|
||||
"titleWithPolls": "Sekcem meffer isem i useqdec n usqerdec"
|
||||
},
|
||||
"title": "Asqerdec",
|
||||
"titleWithPolls": "Asqerdec",
|
||||
"noMessagesMessage": "Ulac iznan akka tura deg temlilit. Bdu adiwenni da!",
|
||||
"you": "kečč·kemm",
|
||||
"fieldPlaceHolder": "Aru izen-inek·inem da"
|
||||
|
||||
@@ -69,10 +69,12 @@
|
||||
"noMessagesMessage": "아직 회의에 메시지가 없습니다. 여기서 대화를 시작하세요!",
|
||||
"nickname": {
|
||||
"popover": "닉네임을 선택하세요",
|
||||
"title": "채팅에서 사용할 닉네임을 입력하세요"
|
||||
"title": "채팅에서 사용할 닉네임을 입력하세요",
|
||||
"titleWithPolls": "채팅에서 사용할 닉네임을 입력하세요"
|
||||
},
|
||||
"privateNotice": "{{recipient}}에게 보내는 비공개 메시지",
|
||||
"title": "채팅",
|
||||
"titleWithPolls": "채팅",
|
||||
"you": "당신"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
|
||||
@@ -53,10 +53,12 @@
|
||||
"noMessagesMessage": "Susitikime dar nėra pranešimų. Pradėkite pokalbį čia!",
|
||||
"nickname": {
|
||||
"popover": "Pridėkite slapyvardį",
|
||||
"title": "Norėdami naudoti pokalbį, įveskite slapyvardį"
|
||||
"title": "Norėdami naudoti pokalbį, įveskite slapyvardį",
|
||||
"titleWithPolls": "Norėdami naudoti pokalbį, įveskite slapyvardį"
|
||||
},
|
||||
"privateNotice": "Asmeninis pranešimas {{gavėjui}}",
|
||||
"title": "Pokalbis",
|
||||
"titleWithPolls": "Pokalbis",
|
||||
"you": "Jūs"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
|
||||
@@ -53,10 +53,12 @@
|
||||
"noMessagesMessage": "Sapulcē pagaidām nav nevienas ziņas. Uzsāciet saraksti!",
|
||||
"nickname": {
|
||||
"popover": "Izvēlieties vārdu",
|
||||
"title": "Ierakstiet vārdu izmantošanai tērziņā"
|
||||
"title": "Ierakstiet vārdu izmantošanai tērziņā",
|
||||
"titleWithPolls": "Ierakstiet vārdu izmantošanai tērziņā"
|
||||
},
|
||||
"privateNotice": "Privāta ziņa/paziņojums lietotājam {{recipient}}",
|
||||
"title": "Tērzēšana",
|
||||
"titleWithPolls": "Tērzēšana",
|
||||
"you": "mans vārds"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
|
||||
@@ -68,10 +68,12 @@
|
||||
"noMessagesMessage": "മീറ്റിംഗിൽ ഇതുവരെ മെസ്സേജുകളൊന്നുമില്ല. ഇവിടെ ഒരു സംഭാഷണം ആരംഭിക്കുക!",
|
||||
"nickname": {
|
||||
"popover": "ഒരു വിളിപ്പേര് തിരഞ്ഞെടുക്കുക",
|
||||
"title": "ചാറ്റ് ഉപയോഗിക്കുന്നതിന് ഒരു വിളിപ്പേര് നൽകുക"
|
||||
"title": "ചാറ്റ് ഉപയോഗിക്കുന്നതിന് ഒരു വിളിപ്പേര് നൽകുക",
|
||||
"titleWithPolls": "ചാറ്റ് ഉപയോഗിക്കുന്നതിന് ഒരു വിളിപ്പേര് നൽകുക"
|
||||
},
|
||||
"privateNotice": " {{recipient}}-ലേക്കുള്ള സ്വകാര്യ സന്ദേശം",
|
||||
"title": "ചാറ്റ്",
|
||||
"titleWithPolls": "ചാറ്റ്",
|
||||
"you": "നിങ്ങൾ"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
|
||||
@@ -53,10 +53,12 @@
|
||||
"noMessagesMessage": "Энэ хуралд ямар ч зурвас байхгүй. Эндээс зурвасаа эхлүүл!",
|
||||
"nickname": {
|
||||
"popover": "Нэр бичнэ үү",
|
||||
"title": "Нэрээ оруулна уу"
|
||||
"title": "Нэрээ оруулна уу",
|
||||
"titleWithPolls": "Нэрээ оруулна уу"
|
||||
},
|
||||
"privateNotice": "Хувийн зурвас {{recipient}}",
|
||||
"title": "Чат",
|
||||
"titleWithPolls": "Чат",
|
||||
"you": "чи"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
|
||||
@@ -53,10 +53,12 @@
|
||||
"noMessagesMessage": "अद्याप मीटिंगमध्ये कोणतेही संदेश नाहीत. येथे संभाषण सुरू करा!",
|
||||
"nickname": {
|
||||
"popover": "टोपणनाव निवडा",
|
||||
"title": "चॅट वापरण्यासाठी टोपणनाव प्रविष्ट करा"
|
||||
"title": "चॅट वापरण्यासाठी टोपणनाव प्रविष्ट करा",
|
||||
"titleWithPolls": "चॅट वापरण्यासाठी टोपणनाव प्रविष्ट करा"
|
||||
},
|
||||
"privateNotice": "यांना खाजगी संदेश{{recipient}}",
|
||||
"title": "गप्पा",
|
||||
"titleWithPolls": "गप्पा",
|
||||
"you": "आपण"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
|
||||
@@ -46,9 +46,11 @@
|
||||
"messagebox": "Skriv en melding",
|
||||
"nickname": {
|
||||
"popover": "Velg et kallenavn",
|
||||
"title": ""
|
||||
"title": "",
|
||||
"titleWithPolls": ""
|
||||
},
|
||||
"title": "",
|
||||
"titleWithPolls": "",
|
||||
"messageTo": "Privat melding til {{recipient}}",
|
||||
"fieldPlaceHolder": "Skriv inn din melding her"
|
||||
},
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user