Compare commits

...

185 Commits

Author SHA1 Message Date
Vlad Piersec
e278703c58 fix(context-menus) Don't show volume slider on iOS web 2021-09-16 14:56:55 +03:00
Jaya Allamsetty
042a2cb447 fix(filmstrip) Fix filmstrip on RN when thumbnail reordering is disabled. 2021-09-15 11:29:46 -05:00
Saúl Ibarra Corretgé
a8f281a43e feat((rn,config) add a/b test flag to enable XMPP WebSockets on mobile 2021-09-15 15:26:25 +02:00
paweldomas
663752be2c feat(rn,connection) enable XMPP WebSocket on mobile
Co-authored-by: Saúl Ibarra Corretgé <saghul@jitsi.org>
2021-09-15 15:26:25 +02:00
Vlad Piersec
380ef3da0b fix(feedback): Scroll to the top when opening feedback dialog 2021-09-15 15:21:56 +03:00
Saúl Ibarra Corretgé
07da5940a5 fix(rn,conference) show underlay when tapping navbar buttons 2021-09-15 13:35:33 +02:00
robertpin
ab366b9d94 fix(av-moderation) Advanced moderation improvements (#9935)
* Update moderation in effect notifications

Only display one notification for each media type. Display notification for keyboard shortcuts as well

* Update muted remotely notification

Display name of moderator in the notification

* Fix indentation on moderation menu

* Update text for video moderation

* Added moderator label in participant pane

* Update microphone icon in participant list

For participants that speak, or are noisy, but aren't dominant speaker, the icon in the participant list will look the same as the dominant speaker icon but will not change their position in the list

* Added sound for asked to unmute notification

* Code review changes

* Code review changes

Use simple var instead of function for audio media state

* Move constants to constants file

* Moved constants from notifications to av-moderation
2021-09-15 11:28:44 +03:00
Pawel Domas
bba1917820 fix(conference.js): add tracks to the conference 2021-09-14 18:24:45 -04:00
Saúl Ibarra Corretgé
0833f8c867 feat(rn,conference) show invite button on the top navbar 2021-09-14 15:03:24 +02:00
Saúl Ibarra Corretgé
3bf9c41f08 fix(rn,conference) count fake participants when checking if lonely meeting
A shared video participant counts, so the lonely meeting invite options can
disappear.
2021-09-14 12:50:22 +02:00
Saúl Ibarra Corretgé
0b54e005d7 fix(rn,shared-video) validate URLs to avoid crashes on the native side 2021-09-14 12:50:22 +02:00
Saúl Ibarra Corretgé
b92c1f52d5 fix(shared-video) make placeholder translatable
Also fix capitalization.
2021-09-14 12:50:22 +02:00
tmoldovan8x8
8eaf99586e fix(rn) disable pip while authorising dropbox 2021-09-14 12:37:08 +03:00
tmoldovan8x8
c7ad5b5b26 feat(android) expose channels ids 2021-09-14 12:35:25 +03:00
robertpin
61c3613de0 Show reactions buttons at all times
Don't send reactions via the channel if there's only one participant in the meeting
2021-09-14 12:26:50 +03:00
Horatiu Muresan
b801e0115d fix(context-menus) Fix participant context menus/toolbar overflow menu
- on ipads, long touch open dialog now opens the context menu to the left of the thumbnail as expected
- on ipads, now we close context menus on tap out
- fix case when participant context menu's height > tileview videos' height causing scroll on videos pane
- keep toolbox open while the overflow menu is shown
- keep remote participant video thumbnail in filmstrip visible even if toolbox is hidden, if context menu is opened
- Fix bug where toolbox could be completely disabled
2021-09-14 10:43:52 +03:00
Horatiu Muresan
1add438a1f feat(toolbar-buttons): Add event for notify overwritten toolbar buttons 2021-09-14 10:07:20 +03:00
Hristo Terezov
aadbe59d00 chore(deps) lib-jitsi-meet@latest
* fix(replaceTrack):  Don't wrap Error in Error.

64cdf69ffb...fbf85bdcec
2021-09-13 17:50:56 -05:00
Дамян Минков
350f0fbb27 feat: Whitelists enableUnifiedOnChrome.
Whitelists it, so we can run tests by setting it to false.
2021-09-13 15:23:53 -05:00
Paweł Domas
1db52354fb Use redux for local tracks instead of conference.js (#9920)
* do not use this.local video

* move tracks initialized flag around

* do not use this.localAudio

* untangle use audio/video stream methods

It should be safe to call setVideoMuteStatus and
setAudioMuteStatus regardless of the prejoin page
visibility state.

* add NO-OP to use track methods and fix crash
in _setLocalAudioVideoStreams on not a promise

* use allSettled
2021-09-13 12:33:04 -05:00
Jaya Allamsetty
6711801c3b chore(deps) lib-jitsi-meet@latest
* ref(JitsiConference): don't crash on wrong oldTrack (#1709)

ad1f06d768...64cdf69ffb
2021-09-13 11:49:53 -04:00
csett86
e2443f8d01 lang: update German translation (#9921)
Signed-off-by: Christoph Settgast <csett86@web.de>
2021-09-11 10:58:15 -05:00
dimitardelchev93
11a86a9383 fix: Add different text when disablePolls is enabled/disabled (#9900)
* Add different text when disablePolls is enabled/disabled #9890

* Add different text when disablePolls is enabled/disabled v2 #9890
2021-09-10 13:57:36 -05:00
Jaya Allamsetty
40a485ec6c Thumbnail reordering and participant pane enhancements.
* fix(participant-pane) Use the sorted participant list from redux instead of sorting it on every render making it better performant. Match the participant order with that of the order in the filmstrip. Also move the participants with raised hand to the top of the list.

* ref(filmstrip) Move enableThumbnailReordering flag to testing section.

* fix(participants) Add new selectors for getting sorted participants.
2021-09-10 13:37:05 -04:00
Horatiu Muresan
535bd81d61 fix(context-menu) Hide toolbars when participant context menu opened (#9842)
- hide toolbars only when in tile view
- fix community issue: https://github.com/jitsi/jitsi-meet/issues/9818
2021-09-10 15:17:57 +03:00
robertpin
1dc8bfa631 feat(av-moderation) Updated Advanced moderation (#9875)
Co-authored-by: Vlad Piersec <vlad.piersec@8x8.com>
2021-09-10 14:05:16 +03:00
Saúl Ibarra Corretgé
f2e2d52cfd fix(rn,shared-video,invite-dialog) fix placehoolder text color to be visible 2021-09-10 12:45:04 +02:00
Vlad Piersec
0db2dd0546 fix(prejoin): Change avatar color to match in-meeting one 2021-09-10 10:48:22 +03:00
Izak Glasencnik
6673d12cec feat(external_api): Command to set participant volume 2021-09-09 18:34:34 -05:00
dimitardelchev93
5e152b4a42 feat: Additional setting to order participants in speaker stats (#9751)
* Additional setting to order participants in speaker stats #9742

* Setting to order speaker stats optimisations #9742

* Lint fixes #9742

* Replace APP references #9742

* Lint fixes #9742

* Setting to order speaker stats optimisations 2 #9742

* Lint fixes #9742

* Remove unnecessary param #9742

* Add more speaker-stats reducer _updateStats docs  #9742
2021-09-09 17:46:41 -05:00
dimitardelchev93
db473dfef5 feat: Add configuration to disable chat emoticons #9889 (#9899) 2021-09-09 17:46:28 -05:00
dimitardelchev93
0bad0d9ecf feat: Add configuration to disable removing raised hand on dominant speaker (#9641)
* Add configuration to disable removing raised hand on dominant speaker change

* Fix lint problem

* Avoid dispatching unnecessary action

* Fix lint problem
2021-09-09 16:53:25 -05:00
Jaya Allamsetty
f1bf8e5f9a fix(settings) Disable mic/camera selection on mobile safari.
Creating a preview of the same audio/video track kills the tracks that is already being shared in the conference. Therefore, disable camera/mic selection in the settings dialog while the user is in the call. The devices are selectable from the prejoin screen settings dialog.
2021-09-09 16:28:24 -04:00
Jaya Allamsetty
131d2476ae chore(deps) lib-jitsi-meet@latest
* fix(RTCUtils) Return false for device change checks on mobile Safari.

735943b32d...ad1f06d768
2021-09-09 16:28:01 -04:00
Andrei Gavrilescu
34c55b4eb2 additional bcp47 languages 2021-09-09 14:44:55 -05:00
José Luís Andrade
d83d822818 lang: Complete translation to Portuguese (#9871)
* Complete translation to Portuguese

* "reactions" and "connectedThreePlusMembers" fix
2021-09-09 14:36:21 -05:00
ashiqhassan95
5857620d81 fix(notifications): Added user join notification keys 2021-09-09 13:56:18 -05:00
scott boone
b7cb0a44f2 feat: new prosody module to report census of all rooms (#9901)
* new prosody module to report census of all rooms

* changed to use util to check if it's a test room

* improved docs

* more doc improvements

* updated to use muc_domain_prefix

* facepalm
2021-09-09 13:24:04 -05:00
Saúl Ibarra Corretgé
3bf1a1774f fix(rn,polyfills) fix Performance polyfill
We need to re-override now() to avoid a recursion error. Also I missed the
default export.
2021-09-09 16:41:44 +02:00
Saúl Ibarra Corretgé
d21eb59f24 feat(doc) revamp README 2021-09-09 16:37:32 +02:00
Horatiu Muresan
9a16733950 feat(config) Add config for disabled sound id's
- unify naming for sound id values
2021-09-09 17:18:26 +03:00
Vlad Piersec
d96246dea8 fix(config): Add separate entries for the e2ee labels 2021-09-09 16:16:08 +03:00
abora8x8
a5fc75ed35 feat: Dynamically limit the number of participants in a room (#9880)
* Dynamically limit the number of participants in a room

* Remove log
2021-09-09 08:15:14 -05:00
vp8x8
07d023968a feat(responsive-ui): Keep aspect ratio for filmstrip self view on mobile web (#9848)
* feat(responsive-ui): Keep aspect ratio for filmstrip self view on mobile web

Right now filmstrip displays self view in landscape mode.
With these changes the aspect ratio of the self view will be maintained
so on portrait mode the thumbnail will be displayed vertically.
Of course this makes sense only on mobile web.

* Code review

* Fix height
2021-09-09 16:14:09 +03:00
Tudor D. Pop
d95d52843f feat(config) add connection indicators flags 2021-09-09 14:50:22 +02:00
Saúl Ibarra Corretgé
49be96799a feat(rn) add polyfill for the performance API
Implements: https://developer.mozilla.org/en-US/docs/Web/API/Performance
Ref: https://github.com/oblador/react-native-performance
2021-09-09 10:07:52 +02:00
Jaya Allamsetty
2008c90359 feat: Turn on enableLayerSuspension option by default. (#9894)
* fix(config) Add more info about enableLayerSuspension option.

* chore(deps) lib-jitsi-meet@latest

* Update config.js

Co-authored-by: Saúl Ibarra Corretgé <s@saghul.net>

Co-authored-by: Saúl Ibarra Corretgé <s@saghul.net>
2021-09-08 09:24:37 -05:00
hmuresan
0f01772625 fix(prejoin) Fix buttons positioning for 3rd party 2021-09-08 16:44:04 +03:00
Vlad Piersec
f5dee99131 feat(config): Add config option for e2ee label 2021-09-08 12:33:22 +03:00
Jaya Allamsetty
909c397664 chore(deps) lib-jitsi-meet@latest
* fix(LocalSdpMunger): do not fake video sdp when screen sharing
* fix(JitsiConference) avoid extra processing if the room was left
* fix(moderator) remove unneeded log

b0d27fa8da...28a5355356
2021-09-07 18:16:23 -04:00
Andrei Gavrilescu
f51e65d129 feat(rtcstats): send dominant speaker stats (#9883)
* send dominant speaker stats

* fix lint
2021-09-07 16:20:50 +03:00
Vlad Piersec
56c0edc896 fix(toolbox): Show dominant speaker name only when in conference 2021-09-07 10:22:24 +02:00
Cross
add8265ab9 chore(config) fix spacing
Removed a redundant space under maxBitratesVideo.
2021-09-07 09:40:46 +02:00
tmoldovan8x8
527b96fe00 task(android): updates sdk version 2021-09-06 12:49:09 +03:00
tmoldovan8x8
452b1b7e2e fix(android): renames amplitudereactnative project to use react-native- pattern 2021-09-06 12:29:58 +03:00
hmuresan
a0c3a00e59 chore(config): Whitelist disableRecordAudioNotification config 2021-09-06 11:40:02 +03:00
hmuresan
00b5ce71e0 fix(external-api): Avoid naming event 'error'
- EventEmmitter treats 'error' as a special case and throws error.
2021-09-02 19:37:23 +03:00
Saúl Ibarra Corretgé
9a8b67a0a4 feat(notifications) skip join notifications when meetings grow large 2021-09-02 16:49:04 +02:00
Saúl Ibarra Corretgé
c730676ce6 fix(lang,notifications) make join notification text more generic 2021-09-02 16:49:04 +02:00
Saúl Ibarra Corretgé
76a53b039f fix(notifications) throttle join notifications for 2 seconds 2021-09-02 16:49:04 +02:00
phict
5713b381c4 lang: Update main-sv.json (#9862) 2021-09-02 09:45:20 -05:00
Mejans
1e83bdef6c lang: Update i18n Occitan (#9853)
Some update.
Been up to line 253 at the moment
2021-09-02 09:45:01 -05:00
chagai95
531ec79e13 lang: Added and edited translations for vi (#9850)
Co-authored-by: cfriedlander <chagai.friedlander@aarenet.com>
2021-09-02 09:44:36 -05:00
José Luís Andrade
772e7b0121 lang: Update portuguese translation (#9836)
* Update portuguese translation

Translate "dialog”, "virtualBackground”, "info” and "settings" sections

* fix "you" translation

* revert "you" translation to original
2021-09-02 09:44:14 -05:00
Alex Bumbu
5bd329acb9 feat(ios) update dropbox authentication to PKCE flow 2021-09-02 14:17:08 +02:00
Hristo Terezov
dfd53f4041 fix(rn,ParticipantPane) optimize
Use a FlatList to avoid loading all participants at once.
2021-09-02 14:13:32 +02:00
Saúl Ibarra Corretgé
221cf67d0a fix(sounds) fix reaction sound names
- Remove unicode charcters from filenames
- Simplify code for copying them to the iOS SDK
2021-09-02 12:21:53 +02:00
Saúl Ibarra Corretgé
20a1833c6c fix(rn,filmstrip) simplify code
viewableItems always comes in order and indexes are always ascending. In
addition, if the array comes empty (I saw it happen on Android at least, when
scrolling like a maniac) we'd calculate the right value, instead of Infinity.
2021-09-01 23:35:44 +02:00
Saúl Ibarra Corretgé
36f604aab8 fix(rn,filmstrip) avoid fast scroll trigggering visibility notifications
An item won't be considered visible until it has been visible for 500ms.
2021-09-01 23:35:44 +02:00
Saúl Ibarra Corretgé
8db6e783f1 fix(rn,external_api) skip participant notifications when not in a meeting 2021-09-01 23:35:06 +02:00
Saúl Ibarra Corretgé
7b4a426ad2 fix(rn,logging) skip some logs on mobile 2021-09-01 23:35:06 +02:00
Saúl Ibarra Corretgé
a687907105 fix(lastn) debounce updating last N
When joining a large meeting every participant join would trigger an attempt of
an update. Try to minimize the amount of calls.
2021-09-01 23:35:06 +02:00
Saúl Ibarra Corretgé
5dc03f56f6 fix(notifications) skip participant joined notifications before we join 2021-09-01 20:12:44 +02:00
tmoldovan8x8
83a1ee1182 task(rn, android): update dropbox logic to retrieve refresh token 2021-09-01 15:21:03 +03:00
Saúl Ibarra Corretgé
0a6872733e fix(video-layout) fix getMaxColumnCount on mobile
interfaceConfig does not exist.
2021-09-01 14:13:30 +02:00
Saúl Ibarra Corretgé
5249998ec5 fix(rn,humbnail) add key prop to array items
Fixes a React warning
2021-09-01 14:12:13 +02:00
Saúl Ibarra Corretgé
18e2232e9e fix(toolbox) fix warning due to missing key prop 2021-09-01 13:41:43 +02:00
Дамян Минков
5c299bcd46 feat: Prints an error log for errors in child components render methods. 2021-08-31 23:31:00 -05:00
Jaya Allamsetty
b9866e3464 fix(tracks) Fix mobile safari issue with startMuted.
On mobile Safari, when a user joins both audio and video muted, browser doesn't playout the remote audio because of a webkit bug. As a workaround, always add the audio track to peerconnection and then mute the track if needed.
2021-08-31 17:04:08 -04:00
Jaya Allamsetty
e5041202dc chore(deps) lib-jitsi-meet@latest
* fix(browser-support): Add audio track to pc always on mobile Safari. On mobile Safari, if a user joins audio and video muted, the browser doesn't decode the incoming audio. Workaround is to always add the audio track to pc and mute it if needed.
* feat: JSON encoded sources. (#1695)

2820d649ea...b0d27fa8da
2021-08-31 17:03:53 -04:00
hmuresan
bec9920c79 chore(dropbox-web) Accommodate short-lived access token 2021-08-31 16:25:29 +03:00
robertpin
5367d43c26 fix(reactions) fix reactions bugs
* Fix: removed web actions from common middlewares

* Fixed raise hand sound

Fix sound to play on raise not lower and work on keyboard shortcut as well

* Fixed reaction keyboard shortcuts

Register shortcuts only when there's more than one participant

* Enforce reactions feature flag on reaction received

* Disable reactions by default on native

* Enable reactions on native by default

* Sort props alphabetically

* Created isreactionsEnabled function

* Remove unused imports

* Fix. No longer show toolbox on reactions and jibri

On message received don't show toolbox for jibri

* Fix isReactionsEnabled function for native

On native check for flag and config option as well
2021-08-31 13:00:27 +02:00
Saúl Ibarra Corretgé
aa06e89807 chore(rn,deps) react-native-webrtc@1.92.1
Fixes several Android crashes.
2021-08-31 12:42:31 +02:00
hmuresan
74026e743c fix(toolbar-buttons) Hide/show invite button based on toolbarButtons 2021-08-31 12:18:10 +03:00
Nathan Beck
eb4fff773b fix(config): add av-moderation notifications to config whitelist (#9774)
* fix(config): add av-moderation notifications to config whitelist

* fix(config): lint fixes
2021-08-30 13:38:19 -05:00
Jaya Allamsetty
5d402b2039 chore(deps) lib-jitsi-meet@latest
* log: Log a task's stack trace when it throws. (#1701)
* deps: update sdp-interop. (#1700)
* fix(replace-track) Add not null check for newTrack (#1698)

53c9c0c9cd...2820d649ea
2021-08-30 14:00:07 -04:00
Hristo Terezov
a2bac9c3ac fix(filmstrip): sort alphabetically. 2021-08-30 11:32:16 -05:00
Hristo Terezov
aff976d53d fix(mobile-pagination):incorrect number of columns 2021-08-30 11:32:16 -05:00
Hristo Terezov
c2ffcdc67e fix(mobile-pagination): Disable bounce effect. 2021-08-30 11:32:16 -05:00
Hristo Terezov
bb670fd90d Apply suggestions from code review
Co-authored-by: Saúl Ibarra Corretgé <saghul@jitsi.org>
2021-08-30 11:32:16 -05:00
Hristo Terezov
b31ed40309 fix(mobile-pagination): address PR review comments 2021-08-30 11:32:16 -05:00
Hristo Terezov
7dd43d93b6 feat(filmstrip-pagination): mobile support. 2021-08-30 11:32:16 -05:00
Saúl Ibarra Corretgé
37acce3764 fix(config) add enableReactions to whitelist 2021-08-30 15:32:58 +02:00
phict
4716bdd380 Update main-sv.json
Add lobby translation and some linguistic improvments.
2021-08-27 10:03:27 -05:00
Дамян Минков
7c93a130ca fix: Fixes default values in speakerstats and conf duration modules. 2021-08-27 08:42:59 -05:00
Werner Fleischer
3c18117101 fix(prosody): av_moderation_component default val 2021-08-27 07:58:36 -05:00
Jaya Allamsetty
9013b01df6 fix(filmstrip): Always sort the participants alphabetically.
Reorder the sub-groups (shares, speakers and rest of the participants) always on dominant speaker changes and when participants join or leave.
2021-08-26 18:28:10 -04:00
Jaya Allamsetty
7827c3d1ad fix(filmstrip): Move thumbnails reordering behind a config.js flag.
enableThumbnailReordering flag (enabled by default) will be used to check if the thumbnails needs to be reodred in the UI.
2021-08-26 18:28:10 -04:00
Jaya Allamsetty
751d9a9b8e fix(KeyboardShortcut): pin the correct participants when number keys are used. 2021-08-26 18:28:10 -04:00
Дамян Минков
bafe6fa895 chore(deps) lib-jitsi-meet@latest
* fix: Updates shard value in XmppConnection on new value from xmpp. (#1699)
* fix(docs): copy&paste error for setIsReplaced

61c977f70a...53c9c0c9cd
2021-08-26 17:15:54 -05:00
Дамян Минков
1edf8ab9f0 feat: Drops old prosody dependency (0.10...).
Many features work only with 0.11+ prosody versions and there are instructions in the handbook how to install it before installing jitsi-meet.
2021-08-26 17:15:43 -05:00
Saúl Ibarra Corretgé
c03fb61c5f fix(rn,reactions) fix copying sounds to app bundles 2021-08-26 17:32:34 +02:00
Saúl Ibarra Corretgé
7d6365c5e0 fix(android) avoid exception in onHostPause
YOLO.
2021-08-26 16:34:53 +02:00
Tudor D. Pop
eb4aefbca1 fix(virtual-background) upload bkg image on poor connection 2021-08-26 15:33:43 +02:00
hmuresan
6c40329f6a feat(branding) Add premeeting background image overwrite 2021-08-26 15:14:57 +03:00
Michał Orman
b14e571d5c fix(lang) update Polish translations 2021-08-26 14:02:09 +02:00
adam j hartz
70b369a1af feat(VideoContainer) add option to avoid cropping focused video 2021-08-26 11:23:19 +02:00
alittriutari
cf6d6f8a12 fix(lang) update Japanese translations 2021-08-26 09:34:47 +02:00
Saúl Ibarra Corretgé
b15f1d190d fix(chat) avoid emojifying URLs
Fixes: https://github.com/jitsi/jitsi-meet/issues/9661
2021-08-25 11:43:20 -05:00
Saúl Ibarra Corretgé
e67db2381e Update setup.web.js 2021-08-25 17:22:50 +02:00
Saúl Ibarra Corretgé
11382cfda6 fix(local-storage) use local storage on WebKit when not in an iframe
There should be no need to use the workaround when visiting the site normally.
2021-08-25 17:22:50 +02:00
Saúl Ibarra Corretgé
248865ad3f fix(rn) enable reactions by default 2021-08-25 16:38:20 +02:00
Horatiu Muresan
7966c8f88f feat(errors) Expose errors through Iframe API (#9801) 2021-08-25 15:23:40 +03:00
José Luís Andrade
6537447d7c fix(lang) update Portuguese translation 2021-08-25 14:09:23 +02:00
hmuresan
a892d5fed1 fix(pre-meeting) Hide invite button for JaaS 2021-08-25 11:09:56 +03:00
Saúl Ibarra Corretgé
4acafebe5f chore(deps) lib-jitsi-meet@latest
* feat(e2ee) add support for WebRTC Encoded Transform
* fix(JitsiConference) skip AudioOutputProblemDetector on disableAudioLevels
* feat(xmpp) remove clientNode config option
* Workaround for Chrome ice connection failure detection (#1685)

c23abfa2bc...61c977f70a
2021-08-25 09:53:07 +02:00
Hristo Terezov
88a11b9f3e fix(TileView): not showing all participants. 2021-08-24 15:40:29 -05:00
Дамян Минков
bcc326c150 fix: Fixes undefined errors in MeetingParticipant - Item and ContextMenu. 2021-08-24 14:38:54 -05:00
Дамян Минков
e348270099 Revert "fix: Fixes reloads after enabling AV moderation."
This reverts commit 38f9c97f40.
2021-08-24 14:38:54 -05:00
Дамян Минков
fc59cdbdbe fix: Fixes showing awaiting AV moderation after grant moderator. 2021-08-24 14:38:54 -05:00
Saúl Ibarra Corretgé
59ef5c4789 feat(e2ee) add support for WebRTC Encoded Transform
An alternative to Insertable Streams, currently implemented in Safarii / WebKit.

https://w3c.github.io/webrtc-encoded-transform/

It's currently behind a config flag, both in Safari and here.

Fixes: https://github.com/jitsi/jitsi-meet/issues/9585
2021-08-24 17:43:20 +02:00
hmuresan
b6b943e7de feat(lobby) Add sound for participant knocking 2021-08-24 18:01:10 +03:00
Дамян Минков
48efa4ac61 feat: Updates i18n-iso-countries to latest. Fixes #9792. 2021-08-24 09:19:29 -05:00
Christoph Settgast
2f1105e6d2 chore(deps) @matrix-org/olm@latest
Bugfixes since 3.2.1, see https://gitlab.matrix.org/matrix-org/olm/-/blob/master/CHANGELOG.rst
In 3.2.2 the package name changed to @matrix-org/olm, thus
updating in Makefile & imports

Signed-off-by: Christoph Settgast <csett86@web.de>
2021-08-24 15:40:18 +02:00
Calin Chitu
9d5024cc5d fix(authentication) fixed close on cancel click 2021-08-24 15:39:56 +02:00
hmuresan
8b23265a50 fix(notifications) Add timeout for video/audio lost notifs 2021-08-24 16:30:02 +03:00
Saúl Ibarra Corretgé
5bc424459f fix(iframe) don't register service worker when in an iframe
Fixes: https://github.com/jitsi/jitsi-meet/issues/9712
2021-08-24 11:58:43 +02:00
robertpin
605ce9db62 Added default state to persistance 2021-08-24 10:07:44 +03:00
Дамян Минков
e2f760c7f1 fix: Fixes AV moderation used in tenants. 2021-08-23 09:43:53 -05:00
Дамян Минков
e63b3016c9 feat: Allow AV moderation for p2p users. 2021-08-23 09:43:53 -05:00
Дамян Минков
4d07d4ae76 feat: Always show AV moderation. 2021-08-23 09:43:53 -05:00
Дамян Минков
2616e126fb feat: Show footer context menu in p2p. 2021-08-23 09:43:53 -05:00
Дамян Минков
38f9c97f40 fix: Fixes reloads after enabling AV moderation. 2021-08-23 09:43:53 -05:00
robertpin
c7a91e1974 feat(reaction-sounds) Added sounds for reactions (#9775)
* Added sounds for reactions

* Updated reactions list

* Added reactions to sound settings

* Added support for multiple sounds

* Added feature flag for sounds

* Updated sound settings

Moved reactions toggle at the top of the list

* Added disable reaction sounds notification

* Added reaction button zoom for burst intensity

* Fixed raise hand sound

* Fixed register sounds for reactions

* Changed boo emoji

* Updated sounds

* Fixed lint errors

* Fixed reaction sounds file names

* Fix raise hand sound

Play sound only on raise hand not on lower hand

* Fixed types for sound constants

* Fixed type for raise hand sound constant
2021-08-23 12:57:56 +03:00
hmuresan
fe41eef398 fix(drawer-menu) Allow scroll on drawer menu items 2021-08-20 16:35:24 +03:00
Saúl Ibarra Corretgé
08177af182 fix(rn,amplitude) update Amplitude SDK on RN
Amplitude has gone back to having a separate package for RN, so switch to it.
2021-08-20 15:24:34 +02:00
José Luís Andrade
229520f74f fix(lang) update Portuguese translation 2021-08-20 14:39:57 +02:00
Saúl Ibarra Corretgé
0d9af05a4b chore(rn,versions) bump app and sdk versions 2021-08-20 11:51:03 +02:00
Avram Tudor
1ad9046a38 Improve premeeting screens ux (#9726)
* feat(prejoin) move invite to toolbar section

* feat(premeeting) redesign prejoin and lobby screens

* code review changes

* fix prejoin flicker and avatar id

* fix password error message and native lobby dialog close position
2021-08-20 11:53:11 +03:00
Avram Tudor
49a73ac446 fix(jaas) do not redirect to plan limit page on auth errors (#9746) 2021-08-20 11:36:09 +03:00
Avram Tudor
8e4a22bdbf fix(moderation) fix ui styles for advanced moderation context menu (#9758) 2021-08-20 11:23:37 +03:00
Saúl Ibarra Corretgé
ddbf334930 fix(e2ee) fix showing not supported warning when alone 2021-08-19 17:19:00 +02:00
Saúl Ibarra Corretgé
cd5f2b483f fix(e2ee) show entire content at all times 2021-08-19 17:19:00 +02:00
Saúl Ibarra Corretgé
cf34b0a783 fix(e2ee) update E2EE warning message 2021-08-19 17:19:00 +02:00
Saúl Ibarra Corretgé
10cc3b2b31 fix(ios) fix conference failing when proximity sensor is near
React Native links timers to the display, so they cannot run when the display is
not running. Builtin timers already take being in the background into account,
but not the proximity sensor.

Credits: https://github.com/react-native-webrtc/react-native-callkeep/issues/143

Fixes: https://github.com/jitsi/jitsi-meet/issues/9619
2021-08-19 13:55:35 +02:00
Saúl Ibarra Corretgé
27e4e862fd feat(xmpp) remove clientNode config option 2021-08-19 13:28:58 +02:00
Avram Tudor
4b3d92dcbd fix(moderation) highlight dominant speaker (#9750) 2021-08-19 14:08:30 +03:00
Saúl Ibarra Corretgé
5c1e2b4bd2 fix(AudioRoutePickerDialog) add proper margin 2021-08-19 10:47:53 +02:00
Saúl Ibarra Corretgé
a4d516ca86 fix(ios) fix deadlock when selecting audio device
In WebRTC M92 the RTCAudioSession lock changed from a recursive one to a regular
mutex one, so make sure we don't attempt to lock it  while already holding the
lock.
2021-08-19 10:47:53 +02:00
Avram Tudor
d41c597446 fix(moderation) hide status icons on hover (#9747) 2021-08-19 11:32:36 +03:00
José Luís Andrade
4788720edd fix(lang) update portuguese translation 2021-08-19 09:56:20 +02:00
Jaya Allamsetty
40099e97ec feat(Filmstrip): Reorder the visible participants in the filmstrip. (#9707)
* feat(Filmstrip): Reorder the visible participants in the filmstrip.
The participants are ordered alphabetically and the endpoints with screenshares, shared-videos and dominant speakers (in that order) are bumped to the top of the list. The local participant is also moved to the top left corner as opposed to the bottom right corner.

* squash: Implement review comments.

* squash: store alphabetically sorted list in redux and move shared videos to top.

* squash: Use the DEFAULT_REMOTE_DISPLAY_NAME from interfaceConfig for users without a display name.
2021-08-18 18:34:01 -04:00
Дамян Минков
a7a44902ec fix: Fixes dot shown left of logo.
Empty list with border is showing 2px dot.
2021-08-18 17:18:39 -05:00
Scott Boone
7af23f35ba added comment for future proofing 2021-08-18 14:01:11 -05:00
Calin Chitu
cf49af1a9f fix(participants-pane) fixed participants pane button toggled state 2021-08-18 12:39:27 -05:00
Saúl Ibarra Corretgé
186125607f fix(prosody) fix username not being set in mod_auth_jitsi-anonymous
If the session was not resumed the plugin must generate a random username, just
like the regular anonymous authentication plugin does.
2021-08-18 15:16:53 +02:00
Saúl Ibarra Corretgé
508decc3f3 fix(prosody) fix typo in filename 2021-08-18 15:16:53 +02:00
Avram Tudor
6d3a4b920b fix(moderation) display green mic icon only for active speaker (#9744) 2021-08-18 15:10:16 +03:00
Avram Tudor
595df524b0 fix(participants) sort participants alphabetically (#9741) 2021-08-18 14:29:41 +03:00
Avram Tudor
9914a5d14a fix(share-video) fix links not being trimmed (#9740) 2021-08-18 12:09:04 +03:00
Дамян Минков
fbf9d489f0 fix: Fixes an error with configuration without analytics.
Fixes an error `Cannot convert undefined or null to object` on load.
2021-08-17 12:54:29 -05:00
AJ-عجائب البرمجة
8106fb06e4 fix(rn,sidebar) fix not appearing on RTL languages 2021-08-17 13:15:22 +02:00
Calin Chitu
036ef0f387 fix(video-menu) fixed position for horizontal filmstrip view 2021-08-17 13:54:54 +03:00
Calinteodor
307699a34c feat(toolbox) added android screen share flag
Fixes issue #9435
2021-08-17 13:42:29 +03:00
tmoldovan8x8
c23375793e fix(rn): import React from react package 2021-08-17 13:14:20 +03:00
hmuresan
4dc642fb4d feat(callstats) Add callStatsConfigParams config 2021-08-16 13:15:44 +03:00
Andrei Gavrilescu
d47e67c28c fix(screen-share): never mute audio screen share track #9725 2021-08-16 12:24:01 +03:00
hmuresan
db0b861353 chore(deps) lib-jitsi-meet@latest
6eaffc4b11...c23abfa2bc
2021-08-16 12:12:03 +03:00
Calinteodor
e40d4a48b8 feat(av-moderation) id and aria-label updates for av-moderation test (#9592)
* feat(av-moderation) raised hand ask to unmute aria-label

* feat(av-moderation) fixed test

* feat(av-moderation) added id for notification buttons

* feat(av-moderation) fixed lint error

* feat(av-moderation) added id for non raised hand participant

* feat(av-moderation) added extra id naming for ask to unmute button and participant items

* feat(av-moderation) fixed lint errors

* feat(av-moderation) changed id to participantID

* feat(av-moderation) removed semicolon

* squash: Drop unused id for participantItem.

* squash: Drop unused fields for raisedHand.

Co-authored-by: Дамян Минков <damencho@jitsi.org>
2021-08-15 00:27:18 -05:00
Jade Guiton
8c82c0f56e feat(polls) Ability to create polls inside Jitsi (#9166)
* feat(polls) Added boilerplate code for polls feature

* feat(polls) Implemented simple poll creation and answer modals in web app

feat(polls) Added button to create a poll in toolbar
feat(polls) Added Modal to answer an incoming poll
feat(polls) Implemented basic client-side sending and reception of polls
feat(polls): linked Poll creation to poll answering
fix(polls) Linted code
feat(polls.create) Added fields for question and answers (#3)
* feat(polls.create) Added fields for question and answers + keyboard navigation
* feat(polls.create) Minor changes, added some comments
feat(PollAnswer Component): Component to display modal to answer poll #1 (#2)
* fix(polls) removing necessity of current_poll_id variable
* fix(polls) linting, polls are now updated when an answer is sent
* feat(polls answer) added translation
* fix(polls answer) remove extra comments, fixed typo
* improvement (polls answer) use useSelector instead of mapStateToProps. cleaner code
* fix (polls create) renamed sender to senderId
* fix (polls answer) turned arrow function into useCallBack
feat(PollResults Component): Component to display poll results (#1)
* feat(PollResults Component): fist version of the component
* feat(detailed votes): Display the detailed results of a poll
* feat(Poll results): Use display name instead of ids in detailed results mode
* fix(Poll): change title to question
* fix(Poll type): import Poll type from types.js
* fix(Poll): change title to question
* fix(Poll): get participants out of the map
* fix(Poll): replace filter with find
feat(polls.create) Added "+" and "x" buttons in poll creation form + improved keyboard navigation a bit
feat (polls) Answer modal now display results in real time after validation or skip
feat(polls.create) Minor improvements to poll creation form
feat(poll result) Added default message when trying to display no answer
fix (polls) result windows is now small by default
fix (polls) sanitizes imports to allow startup on react native

* feat(polls.native) Implemented native toolbar button & poll create modal

feat( poll native) added poll creation button in native toolbar
improvement(polls) only one file used for PollCreateButton
feat (polls native) added an example dialog
feat (polls native) added possibility to create and delete options in poll creation
improvement (polls) better styling for PollCreateDialog

* feat(polls) Added ability to drag&drop answers in web poll creation form

* feat(polls) Added native poll answer modal + chat integration, refactored components

Merge branch 'polls-native' of https://github.com/jade-guiton/jitsi-meet into polls-native
improvement (poll) Better styling for poll answer, now uses icons
feat(poll.PollResults): Add native version of PollResults
feat(poll.PollResults): Post results in chat in Native
fix(poll.PollResults): Fix linter error in ChatMessage
feat(polls.native) Improved styling for native poll answer dialog (required some internal changes)

* fix(polls) Heavily refactored and added bars to poll results, other minor changes

fix(poll.create): Move title to Dialog title
feat(poll.create) Minor changes to poll creation / answer dialogs
fix(poll.create) Refactored and improved translations
feat(poll) Improved CSS for modals in web version
fix(poll.pollcreate): Fix button size in native
fix(polls) Refactored poll results component and other minor changes
fix (polls) remove double import
refactor(poll) Heavily refactored poll results (native + web)
feat(polls.results) Added percentage bars and vote counts in web poll results, minor changes to mobile poll results

* fix(polls) Fixes and linting

fix(polls) Reformatted and fixed some linter and Flow errors
fix(polls.results) Fixed voter list border appearing with 0 voters

* feat(polls): Add modal with detailed votes that can be open from the result summary in the chat

* fix(polls) Fixes, refactorings, and minor design changes

feat(polls.results): Refactored poll chat message and improved design in web app
feat(polls.results) Same as last commit, but for mobile version
refactor(polls.results) Refactored PollResultsMessage and removed unnecessary prop in PollResults
fix(polls.results) Fixed all remaining linter and Flow errors
improvement(polls) removed console logs, added comments
fix (polls) linting
fix(polls.results) Fixed bug with poll chat message displaying the wrong name
feat(polls.results) Minor improvement on poll results display (web)
fix(poll.results): Use getParticipantDisplayName to get participant name and avoid empty string as name

* Feat(poll.results): Remember voters names to display after they left the conference (#10)

* feat(poll.results): Add the sender name in Poll object to remember names if participants leave the conference. Names are also updated if changed
* refactor(poll.results): Refactor the memorization of the names of voters to use the same logic as in  the chat
* refactor(poll.results): use Map instead of Array.From(
* refactor(poll.answer): change the way names are stored in poll answers to persist if participant left the call
* Update react/features/polls/components/AbstractPollAnswerDialog.js
* Update react/features/polls/components/AbstractPollCreateDialog.js
* refactor(poll.answer): use voterName instead of senderName to avoid confusion with senderId the id of the sender of the poll
* improvement(polls) Simplified poll answer voter name logic

Co-authored-by: Fabien Zucchet <fabien.zucchet@student-cs.fr>
Co-authored-by: Jade Guiton <guiton.jade@gmail.com>

* fix(poll.native): Fix UI overflow when asking long questions & long options in the mobile app (#11)

Co-authored-by: Fabien Zucchet <fabien.zucchet@student-cs.fr>

* fix(polls) Fixed close button behavior in answer and results dialog (#12)

* fix(polls) Fixed close button behavior in answer and results dialog
* fix(polls) Fixed linter error

* fix(polls) Added a poll queue to avoid overwriting open modals (#13)

* fix(polls) Added a poll queue to avoid overwriting open modals
* fix(polls) Updated documentation for action RECEIVE_POLL

* Refactor(poll.chatresults): Add message in chat with hidden results until the participant has answered (#14)

* refactor(poll.chat): Display poll results in chat when the poll is created instead of when the participant has ansered
* refactor(poll.chat): Hide results until the participant has answered, skipped or canceled a responde to the poll
* Use getParticipantDisplayName instead of only getStore()
* Hide results also in native
* fix(polls) Fixed previous merge

Co-authored-by: Fabien Zucchet <fabien.zucchet@student-cs.fr>
Co-authored-by: Jade Guiton <jade.guiton@centralesupelec.fr>

* minor improvements (polls)

refactor (polls) uniformized string for command names
refactor (polls) changed pollId type to number everywhere

* feat(polls) Added persistence to polls using sendMessage instead of sendCommandOnce (#16)

* feat(polls) Using sendMessage instead of sendCommandOnce, switched poll IDs to string, and ability to receive old polls from backend
* improvement(polls) Linted everything, fixed Flow errors, and added Prosody plugin for polls
* improvement(polls) Historic polls are now displayed in chronological order

* (polls) Minor improvements (#17)

* renaming (polls) Renaming senderId -> voterID for voters
* improvement (polls) sender's name is now provided with poll
* comments (polls) updated comments for senderName types
* fix(polls) Finished merging with json-messages feature
* fix(polls) Fixed incorrect json-message sent with 0 polls

Co-authored-by: Jade Guiton <guiton.jade@gmail.com>

* Move polls to tab (#23)

* Draft(polls): Move polls to polls-pane ; first version for web
* Draft(polls): Move polls to polls-pane ; clean styled.js and remove Participant objects
* fix missing newline at the end of file
* Change behaviour to allow answer poll later
* Fix(polls): change pollId type from number to string for consistency
* feat(polls-pane): Ability to answer to a poll in polls-pane
* feat(polls-pane): Ability to create to a poll in polls-pane
* feat (polls.pane) display a notification when a new poll arrives
* refactor(polls-pane): Update CSS to have a design closer to the mockups
* fix(poll.vote count): Fix votes counting when computing percentage
* fix(poll.vote count): Fix votes counting when computing percentage
* refresh fork with jitsi/jitsi-meet
* design (polls) Better look for poll creation
* refactor(polls pane): Move polls-pane as a chat tab
* Remove the first version of the polls-pane and the button to open it
* Fix notifications and typo
* Translate new polls tab in chat
* Change polls_pane to polls-pane
* Remove unless functions
* Remove usage of styled.js
* Improve responsiveness
* Separate web and native logic
* Remove Create a Poll button in web toolbox
* improvement (polls) added auto scrolling to bottom when a new poll arrives
* Add tabs to swicth between polls and chat in native
* Add AbstractPollsPane
* Add AbstractPollCreate
* Add AbstractPollAnswer
* Add PollAnswer, PollItem and PollList for native
* Add PollCreate for native
* Remove dialogs in web and native
* Remove dialog queue
* Remove useless files
* Move _polls.scss outside dialog folder
* Add possibility to skip answer
* Add (useless for now) see details link
* Add possibility to show detailed results for a poll
* Resize progress bar to make details display
* refactor, design (polls) better style to native design chat
* fix (polls) Removed unecessary files
* translate (polls) added french translation to empty polls
* design fix (polls.native) 'show details' now correctly switch between progress bar and voters mode
* Change See detailed results for Show details and add cursor: pointer
* Fix progress bars not aligned with text
* fix (polls.native) added autoselection of newly created option
* Remove poll answer
* improvement(polls.create) Improved web poll creation form marginally
* improvement(polls.change) Simplified answer removal by reusing poll-answer command
* fix linter
* Fix(translation): update translation

Co-authored-by: Fabien Zucchet <fabien.zucchet@student-cs.fr>
Co-authored-by: spineki <marras.antoine@gmail.com>
Co-authored-by: Fabien Zucchet <fabien.zucchet@viarezo.fr>

* Merge pull request #22 from jade-guiton/polls-with-notification

feat (polls) chat notification badge now display the sum of unread  messages and unread polls
fix(translation): Fix missing translation
Fix flow error

* Cleaned up, fixed, and uniformized translations

* Small improvements to PollAnswer and PollResult + Much refactoring

Specifically:
- "Change vote" button now says "Vote" if voting was skipped
- Clicking on "Change vote" resets the voting form to the last submitted answers instead of a blank slate

- The "answered" field of Polls was replaced by "showResults" and "lastVote"
- The "setAnsweredStatus" action was replaced by "registerVote" and "retractVote"
- Some newly unreachable/useless code was removed
- "showDetails" state is now handled by AbstractPollResults instead of PollItem

* fix(polls tab): change tab underline color to #525252

* fix(poll create): Enforce at least two options to create a poll

* fix(poll create): change 'remove option' color to #E04757

* fix(poll create): Update Poll create CSS to adapt to design

* fix(poll answer): Adapt CSS to make poll answer closer to mockup

* fix(poll result): Udpdate poll result CSS to match mockups

* fix(poll result): Udpdate poll result CSS to match mockups

* fix(poll create): Display 'remove option' only when there is at least 3 options

* fix(polls button): Add hover, active, focus and disabled state to polls buttons

* Last improvements for web

* Native design fixes

* Fix rebase issue in land/main.json

* Fix french translation after rebase

* Fixmobile behaviour

* Fixed keyboard navigation in web poll creation form

* Fixed Flow error related to "no polls" icon in PollsList

* fix(polls): Enabled polls Prosody module in Debian config files

* doc(polls) Added comments to the Prosody module code

* fix(polls): Switched from using an internal LJM event to ones from the public API

* Capitalize I of setIsPollsTabFocused

* extract the 2 button modes into a const

* remove extra new lines

* Rename CLOSE_POLL_TAB for POLL_TAB_CLOSED for clarity

* Rename answers2 for answersParsed for clarity

* use switch instead of if/else chain

* improve syntax for localId fetching

* Refactor: Use BUTTON_MODE.CONTAINED variable instead of 'contained'

* Disable send poll button if not enough data is provided in the form (#30)

* Feat: Add notification badge on chat and poll tabs (#31)

* Feat: Add notification badge on chat and poll tabs

* Add badge equivalent for native

* Update displayNameForm text to mention polls (#34)

* Disable polls UI with a config in config.js (#33)

* Change remove option text color from red to grey (#32)

Co-authored-by: spineki <marras.antoine@gmail.com>
Co-authored-by: Fabien Zucchet <fabien.zucchet@student-cs.fr>
Co-authored-by: Fabien Zucchet <80532941+fabienzucchet@users.noreply.github.com>
Co-authored-by: Fabien Zucchet <fabien.zucchet@viarezo.fr>
2021-08-14 08:29:42 -05:00
dimitardelchev93
c123ff9e15 feat: Add search to speaker stats (#9510)
* Additional setting to add search to speaker stats

* Add translation for speaker stats search placeholder

* Unset speaker stats search input autocomplete

* Fix lint errors for speaker stats search

* Change setting to disableSpeakerStatsSearch

* Better Object.prototype.hasOwnProperty.call alternative

* Make SpeakerStatsSearch a functional component

* Align header with input and use material-ui styles instead of scss and remove SpeakerStats header and fix dialog close

* Resolve code style remark in SpeakerStats constructor

* Resolve component empty return value remark in SpeakerStatsSearch

* Resolve get config property in outside function remark in SpeakerStatsSearch

* Resolve unnecessary anonymous function remark in SpeakerStatsSearch
2021-08-13 11:10:05 -05:00
tmoldovan8x8
ae33755913 feat(rn,sdk) add setConfigOverride to JitsiMeetConferenceOptions
Allows for overriding any (overridable, of course) config option.
2021-08-13 12:03:41 +02:00
BlackXixo
bcc870daa7 fix(lang) update Spanish translation 2021-08-13 11:31:37 +02:00
dependabot[bot]
a6a95ad13b chore(deps): bump path-parse from 1.0.6 to 1.0.7 in /resources/load-test
Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-13 08:23:15 +02:00
Saúl Ibarra Corretgé
195508ea60 chore(deps) lib-jitsi-meet@latest
* fix(ProxyConnection) add new required stubs
* fix(tpc) fix extracting ssrc map when using single stream
* fix(transcribing): send transcripton_language only when necessary (#1677)

97ff597425...6eaffc4b11
2021-08-12 16:26:45 -05:00
José Luís Andrade
5ce4b82c2c update portuguese translation (#9703)
* update portuguese translation

"participantsPane" section

* Update main-pt.json

add "security" translation

* Update main-pt.json

add "lobby" translation
2021-08-12 14:42:23 -05:00
Mauro José da Silva
ab1c016108 fix(lang) update Brazilian Portuguese translations 2021-08-11 09:53:35 +02:00
Дамян Минков
29dd0cf726 fix: Adds a null check in mod_limits_exceptions.
It is failing on prosody 0.11.4 with mod_limits_exception.lua:29: attempt to call method 'set_stanza_size_limit' (a nil value). That prosody misses set_stanza_size_limit.
2021-08-10 14:34:20 -05:00
durduman
1e0c25d816 fix(ios) remove exitPictureInPicture() call from resetBounds(bounds:) 2021-08-10 15:49:31 +02:00
José Luís Andrade
dfd28c501b fix(lang) update portuguese translation 2021-08-10 07:51:04 +02:00
Дамян Минков
ed98eca326 feat: Rises the stanza limit for unlimited jids (jicofo).
c5c4449fbc/doc/debian/jitsi-meet-prosody/prosody.cfg.lua-jvb.example (L24)
2021-08-09 11:33:40 -05:00
Andrei Gavrilescu
c5c4449fbc chore(deps) lib-jitsi-meet@latest (#9686)
* feat(transcribing): configurable transcription language

40fd6bdeaa...97ff597425
2021-08-09 13:46:38 +03:00
Andrei Gavrilescu
e45cab9a80 feat(transcribing): configurable transcription language (#9684)
* configurable transcription language

* merge conflict

* set default config value

* fix lint
2021-08-09 12:29:50 +03:00
Дамян Минков
6f44368647 fix(av-moderation): Fixes approving and dismissing the notification.
When participants panel is open and we approve a participant to unmute, the notification was not hidden as we were not correctly updating the state. We were expecting a participant object, but an id of the participant was used.
2021-08-06 15:04:26 -05:00
Jaya Allamsetty
a31a10ba38 fix(logging): Set the log level to debug again.
Plan is to make the Strophe logs more restrictive.
Revert "fix(logging) reduce overly vebose logging"

This reverts commit 09af88088d.
2021-08-06 12:46:29 -04:00
461 changed files with 13524 additions and 4625 deletions

View File

@@ -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
View File

@@ -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 | [![release](https://img.shields.io/badge/release-latest-green.svg)](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>

View File

@@ -25,5 +25,5 @@ android.enableDexingArtifactTransform.desugaring=false
android.useAndroidX=true
android.enableJetifier=true
appVersion=21.3.0
sdkVersion=3.8.0
appVersion=21.4.0
sdkVersion=3.9.1

View File

@@ -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")
}

View File

@@ -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;
}
}
}

View File

@@ -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");
}
}
}

View File

@@ -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,12 @@ 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 +313,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 +360,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

View File

@@ -0,0 +1,11 @@
package org.jitsi.meet.sdk;
import java.util.ArrayList;
import java.util.List;
public class NotificationChannels {
static final String ONGOING_CONFERENCE_CHANNEL_ID = "JitsiOngoingConferenceChannel";
static final String ONGOING_CONFERNCE_CHANNEL_NAME = "Ongoing Conference Notifications";
public static List<String> allIds = new ArrayList<String>() {{ add(ONGOING_CONFERENCE_CHANNEL_ID); }};
}

View File

@@ -16,6 +16,9 @@
package org.jitsi.meet.sdk;
import static org.jitsi.meet.sdk.NotificationChannels.ONGOING_CONFERENCE_CHANNEL_ID;
import static org.jitsi.meet.sdk.NotificationChannels.ONGOING_CONFERNCE_CHANNEL_NAME;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
@@ -39,9 +42,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 +60,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, ONGOING_CONFERNCE_CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT);
channel.enableLights(false);
channel.enableVibration(false);
channel.setShowBadge(false);
@@ -84,7 +84,7 @@ class OngoingNotification {
Intent notificationIntent = new Intent(context, context.getClass());
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
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();

View File

@@ -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();

View File

@@ -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
View File

@@ -2,7 +2,7 @@
import 'jquery';
import 'olm';
import '@matrix-org/olm';
import 'focus-visible';

View File

@@ -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,7 +122,7 @@ 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 {
@@ -453,27 +457,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 +716,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;
@@ -834,7 +821,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);
@@ -880,13 +873,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 +904,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 +960,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 +1013,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 +1329,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 +1349,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 +1358,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 +1389,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 +1452,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)
@@ -1539,7 +1538,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;
@@ -1765,7 +1766,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 +1796,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 +1804,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 +1819,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 +1875,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 +2063,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 +2110,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 +2265,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 +2308,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 +2316,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 +2325,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 +2338,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 +2424,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();
})
@@ -2489,9 +2498,6 @@ export default {
JitsiMediaDevicesEvents.DEVICE_LIST_CHANGED,
this.deviceChangeListener);
}
this.localVideo = null;
this.localAudio = null;
},
/**
@@ -2554,10 +2560,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 +2582,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 +2600,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 +2609,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 +2633,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 +2718,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 +2767,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 +2787,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 +2812,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) {

173
config.js
View File

@@ -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
@@ -73,6 +77,9 @@ var config = {
// Enables reactions feature.
// enableReactions: false,
// Disables polls feature.
// disablePolls: false,
// Disables ICE/UDP by filtering out local and remote UDP candidates in
// signalling.
// webrtcIceUdpDisable: false,
@@ -144,6 +151,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 +186,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 +251,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 +271,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 +347,7 @@ var config = {
// VP9: {
// low: 100000,
// standard: 300000,
// high: 1200000
// high: 1200000
// }
// },
//
@@ -371,6 +412,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 +542,47 @@ var config = {
// '__end'
// ],
// 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 +600,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 +692,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 +738,39 @@ 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'
// - '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,7 +884,11 @@ 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: '',
@@ -807,6 +949,7 @@ var config = {
disableRemoteControl
displayJids
externalConnectUrl
e2eeLabels
firefox_fake_device
googleApiApplicationClientID
iAmRecorder
@@ -886,11 +1029,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 +1050,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 +1069,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'

View File

@@ -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}`;

View File

@@ -51,8 +51,10 @@ body {
}
}
.jitsi-icon svg {
fill: white;
.jitsi-icon {
&-default svg {
fill: white;
}
}
.disabled .jitsi-icon svg {

View File

@@ -574,3 +574,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;
}

View File

@@ -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%;

View File

@@ -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 {

View File

@@ -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;
}
}

View File

@@ -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
View 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;
}
}

View File

@@ -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;
}
}
}

View File

@@ -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);
}
}
}
}

View File

@@ -334,7 +334,7 @@
border-radius: 0;
display: flex;
justify-content: space-evenly;
padding: 6px 0;
padding: 8px 0;
width: 100%;
}

View File

@@ -264,3 +264,9 @@ $chromeExtensionBannerRightInMeeeting: 10px;
*/
$smallScreen: 700px;
$verySmallScreen: 500px;
/**
* Prejoin / premeeting screen
*/
$prejoinDefaultContentWidth: 336px;

View File

@@ -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 */

View 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;
}
}
}

View File

@@ -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: 8px 12px;
}
&-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;

View File

@@ -0,0 +1,35 @@
.device {
&-status {
align-items: center;
align-self: stretch;
color: #fff;
display: flex;
font-size: 14px;
font-weight: 400;
justify-content: center;
line-height: 20px;
margin-top: 8px;
padding: 6px;
text-align: center;
}
&-icon {
background-position: center;
background-repeat: no-repeat;
display: inline-block;
height: 16px;
margin-right: 10px;
width: 16px;
&--warning {
svg path {
fill: rgba(241, 173, 51, 1);
}
}
&--ok {
svg path {
fill: #189b55;
}
}
}
}

View File

@@ -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;

View 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';

View 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;
}
}
}

View File

@@ -0,0 +1,73 @@
.prejoin {
&-input-area {
width: 100%;
}
&-checkbox-container {
margin-bottom: 16px;
width: 100%;
text-align: center;
}
&-error {
color: white;
background-color: #E04757;
border-radius: 6px;
padding: 4px;
box-sizing: border-box;
margin-bottom: 16px;
margin-top: -8px;
font-size: 12px;
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%;
}
}
}

View File

@@ -1,47 +1,27 @@
/**
* 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%);
background: #292929;
bottom: 0;
display: flex;
flex-direction: column;
font-size: 1.3em;
left: 0;
position: absolute;
right: 0;
top: 0;
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;
border-radius: 6px;
box-sizing: border-box;
color: #fff;
cursor: pointer;
display: inline-block;
font-size: 15px;
font-size: 14px;
line-height: 24px;
margin-bottom: 16px;
padding: 7px 16px;
position: relative;
text-align: center;
width: 320px;
@include adjust-for-max-width(320px, 8px);
width: 100%;
&.primary {
background: #0376DA;
@@ -49,8 +29,8 @@
}
&.secondary {
background: transparent;
border: 1px solid #5E6D7A;
background: #3D3D3D;
border: 1px solid transparent;
}
&.text {
@@ -96,130 +76,148 @@
.content {
align-items: center;
box-sizing: border-box;
display: flex;
flex: 1;
flex-direction: column;
justify-content: flex-end;
padding-bottom: 24px;
flex-shrink: 0;
height: 100%;
margin: 0 110px;
padding: 24px 0 16px;
position: relative;
width: $prejoinDefaultContentWidth;
z-index: $toolbarZ + 2;
.title {
color: #fff;
font-size: 24px;
line-height: 32px;
margin-bottom: 16px;
}
.copy-meeting {
&-controls {
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;
margin: auto;
width: 100%;
.url {
background: rgba(28, 32, 37, 0.5);
border-radius: 4px;
display: flex;
padding: 8px 10px;
transition: background 0.16s ease-out;
.title {
color: #fff;
font-size: 28px;
font-weight: 600;
letter-spacing: -0.015;
line-height: 36px;
margin-bottom: 32px;
text-align: center;
}
&:hover {
background: #1C2025;
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;
}
&.done {
background: #31B76A;
}
.jitsi-icon {
margin-left: 10px;
&.focused {
box-shadow: 0px 0px 1px 1.5px black, 0px 0px 1.3px 4px white;
}
}
.copy-button{
width: 298px;
}
.copy-meeting-text {
width: 266px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
#new-toolbox {
bottom: 0;
margin-bottom: 16px;
position: relative;
transition: none;
&: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;
.toolbox-content,
.toolbox-content-wrapper,
.toolbox-content-items {
box-sizing: border-box;
width: 100%;
}
}
}
}
.media-btn-container {
display: flex;
justify-content: center;
margin: 24px 0 16px 0;
width: 100%;
@media (max-width: 1000px) {
flex-direction: column-reverse;
&> div {
margin: 0 12px;
.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%;
.title {
font-size: 20px;
line-height: 28px;
letter-spacing: -0.012;
margin-bottom: 24px;
}
}
.con-status {
margin: 16px;
width: calc(100% - 32px);
}
input.field {
font-size: 16px;
padding: 14px 16px;
}
.action-btn {
font-size: 16px;
padding: 11px 16px;
}
.toolbox-content-items {
border-radius: 0;
display: flex;
justify-content: space-evenly;
padding: 8px 0;
}
}
input::placeholder {
color: #040404;
}
}
#preview {
background: #040404;
display: flex;
align-items: center;
justify-content: center;
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;
text {
fill: white;
font-size: 26px;
font-weight: 400;
}
}
video {
height: 100%;
object-fit: cover;
position: absolute;
width: 100%;
}
}
@@ -241,16 +239,14 @@
}
.toggle-button {
border-radius: 3px;
border-radius: 6px;
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 {

2
debian/control vendored
View File

@@ -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

View File

@@ -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" }

0
eslint Normal file
View File

View File

@@ -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

View File

@@ -25,31 +25,11 @@ 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,
// Connection indicators (
// CONNECTION_INDICATOR_AUTO_HIDE_ENABLED,
// CONNECTION_INDICATOR_AUTO_HIDE_TIMEOUT,
// CONNECTION_INDICATOR_DISABLED) got moved to config.js.
DEFAULT_BACKGROUND: '#474747',
DEFAULT_LOCAL_DISPLAY_NAME: 'me',
@@ -185,10 +165,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,
@@ -224,7 +204,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',
/**

View File

@@ -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

View File

@@ -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.1):
- 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: 77b969fe6bc5b7c93b455f93a13698812fb8bb4e
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: e830b1b5a46d340e22689b146b55dcf24664c6f1
COCOAPODS: 1.10.1

View File

@@ -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;

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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 */

View File

@@ -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.

View File

@@ -15,7 +15,7 @@
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>3.8.0</string>
<string>3.9.0</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>NSPrincipalClass</key>

View File

@@ -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;

View File

@@ -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;

View File

@@ -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 {

View File

@@ -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

View File

@@ -49,9 +49,11 @@
"messagebox": "",
"nickname": {
"popover": "Kies n bynaam",
"title": ""
"title": "",
"titleWithPolls": ""
},
"title": ""
"title": "",
"titleWithPolls": ""
},
"connectingOverlay": {
"joiningRoom": ""

View File

@@ -68,10 +68,12 @@
"noMessagesMessage": "لا يوجد أي رسالة في الاجتماع بعد. ابدأ محادثة هنا.",
"nickname": {
"popover": "اختر لقبًا",
"title": "اكتب لقبًا لاعتماده في المحادثة"
"title": "اكتب لقبًا لاعتماده في المحادثة",
"titleWithPolls": "اكتب لقبًا لاعتماده في المحادثة"
},
"privateNotice": "أرسل رسالة خاصة إلى {{recipient}}",
"title": "محادثة",
"titleWithPolls": "محادثة",
"you": "أنت"
},
"chromeExtensionBanner": {

View File

@@ -53,10 +53,12 @@
"noMessagesMessage": "У канферэнцыі пакуль няма ніякіх паведамленняў. Пачніце размову!",
"nickname": {
"popover": "Калі ласка, пазначце імя",
"title": "Калі ласка, увядзіце імя для выкарыстання чата"
"title": "Калі ласка, увядзіце імя для выкарыстання чата",
"titleWithPolls": "Калі ласка, увядзіце імя для выкарыстання чата"
},
"privateNotice": "Асабістае паведамленне карыстальнiку {{recipient}}",
"title": "Чат",
"titleWithPolls": "Чат",
"you": "Вы"
},
"chromeExtensionBanner": {

View File

@@ -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": "Име",

View File

@@ -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": {

View File

@@ -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": {

View File

@@ -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": {

View File

@@ -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 …",

View File

@@ -68,10 +68,12 @@
"noMessagesMessage": "Δεν υπάρχουν μηνύματα στη συνάντηση ακόμα. Ξεκινήστε μια συζήτηση εδώ!",
"nickname": {
"popover": "Επιλέξτε ένα ψευδώνυμο",
"title": "Εισάγετε ένα ψευδώνυμο για τη χρήση της συνομιλίας"
"title": "Εισάγετε ένα ψευδώνυμο για τη χρήση της συνομιλίας",
"titleWithPolls": "Εισάγετε ένα ψευδώνυμο για τη χρήση της συνομιλίας"
},
"privateNotice": "Ιδιωτικό μηνύμα στον / στην {recipient}}",
"title": "Συνομιλία",
"titleWithPolls": "Συνομιλία",
"you": "Εσείς"
},
"chromeExtensionBanner": {

View File

@@ -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": "",

View File

@@ -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",

View File

@@ -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": {
@@ -206,6 +208,7 @@
"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.",
"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.",
"enterDisplayName": "Por favor ingresa tu nombre aquí",
"enterDisplayNameToJoin": "Por favor ingresa tu nombre para unirte",
"error": "Error",
"externalInstallationMsg": "Necesita instalar nuestra extensión para compartir pantalla.",
"externalInstallationTitle": "Extensión requerida",
@@ -952,4 +955,4 @@
"reject": "Rechazar",
"toggleLabel": "Activar sala de espera"
}
}
}

View File

@@ -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": {

View File

@@ -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": {

View File

@@ -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.",

View File

@@ -68,10 +68,12 @@
"noMessagesMessage": "هیچ گفتگویی در جلسه وجود ندارد، گفتگو را شما آعاز کنید!",
"nickname": {
"popover": "نام نمایشی خود را وارد نمایید",
"title": "نام نمایشی خود را در گفتگو وارد نمایید"
"title": "نام نمایشی خود را در گفتگو وارد نمایید",
"titleWithPolls": "نام نمایشی خود را در گفتگو وارد نمایید"
},
"privateNotice": "پیام خصوصی به {{recipient}}",
"title": "گفتگو",
"titleWithPolls": "گفتگو",
"you": "شما"
},
"chromeExtensionBanner": {

View File

@@ -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…"

View File

@@ -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.",
@@ -568,6 +573,34 @@
},
"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:",

View File

@@ -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": {

View File

@@ -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": {

View File

@@ -53,10 +53,12 @@
"noMessagesMessage": "אין עדיין הודעות בפגישה. התחל שיחה כאן!",
"nickname": {
"popover": "בחר שם משתמש",
"title": "נא להזין שם משתמש בכדי להשתמש בצ'אט"
"title": "נא להזין שם משתמש בכדי להשתמש בצ'אט",
"titleWithPolls": "נא להזין שם משתמש בכדי להשתמש בצ'אט"
},
"privateNotice": "הודעה פרטית אל {{recipient}}",
"title": "צ'אט",
"titleWithPolls": "צ'אט",
"you": "אתה"
},
"chromeExtensionBanner": {

View File

@@ -70,10 +70,12 @@
"noMessagesMessage": "अभी तक मीटिंग में कोई संदेश नहीं आया है। वार्तालाप प्रारंभ करें!",
"nickname": {
"popover": "एक उपनाम चुनें",
"title": "चैट का उपयोग करने के लिए एक उपनाम दर्ज करें"
"title": "चैट का उपयोग करने के लिए एक उपनाम दर्ज करें",
"titleWithPolls": "चैट का उपयोग करने के लिए एक उपनाम दर्ज करें"
},
"privateNotice": "{{recipient}} के लिए निजी संदेश",
"title": "चैट",
"titleWithPolls": "चैट",
"you": "आप"
},
"chromeExtensionBanner": {

View File

@@ -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": ""

View File

@@ -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": {

View File

@@ -49,9 +49,11 @@
"messagebox": "",
"nickname": {
"popover": "Ընտրեք մականուն",
"title": ""
"title": "",
"titleWithPolls": ""
},
"title": ""
"title": "",
"titleWithPolls": ""
},
"connectingOverlay": {
"joiningRoom": ""

View File

@@ -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! Whats 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",

View File

@@ -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": {

View File

@@ -70,10 +70,12 @@
"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}}",
"title": "Conversazione",
"titleWithPolls": "Conversazione",
"you": "tu"
},
"chromeExtensionBanner": {

View File

@@ -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": "他の参加者によりセット",

View File

@@ -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"

View File

@@ -69,10 +69,12 @@
"noMessagesMessage": "아직 회의에 메시지가 없습니다. 여기서 대화를 시작하세요!",
"nickname": {
"popover": "닉네임을 선택하세요",
"title": "채팅에서 사용할 닉네임을 입력하세요"
"title": "채팅에서 사용할 닉네임을 입력하세요",
"titleWithPolls": "채팅에서 사용할 닉네임을 입력하세요"
},
"privateNotice": "{{recipient}}에게 보내는 비공개 메시지",
"title": "채팅",
"titleWithPolls": "채팅",
"you": "당신"
},
"chromeExtensionBanner": {

View File

@@ -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": {

View File

@@ -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": {

View File

@@ -68,10 +68,12 @@
"noMessagesMessage": "മീറ്റിംഗിൽ ഇതുവരെ മെസ്സേജുകളൊന്നുമില്ല. ഇവിടെ ഒരു സംഭാഷണം ആരംഭിക്കുക!",
"nickname": {
"popover": "ഒരു വിളിപ്പേര് തിരഞ്ഞെടുക്കുക",
"title": "ചാറ്റ് ഉപയോഗിക്കുന്നതിന് ഒരു വിളിപ്പേര് നൽകുക"
"title": "ചാറ്റ് ഉപയോഗിക്കുന്നതിന് ഒരു വിളിപ്പേര് നൽകുക",
"titleWithPolls": "ചാറ്റ് ഉപയോഗിക്കുന്നതിന് ഒരു വിളിപ്പേര് നൽകുക"
},
"privateNotice": " {{recipient}}-ലേക്കുള്ള സ്വകാര്യ സന്ദേശം",
"title": "ചാറ്റ്",
"titleWithPolls": "ചാറ്റ്",
"you": "നിങ്ങൾ"
},
"chromeExtensionBanner": {

View File

@@ -53,10 +53,12 @@
"noMessagesMessage": "Энэ хуралд ямар ч зурвас байхгүй. Эндээс зурвасаа эхлүүл!",
"nickname": {
"popover": "Нэр бичнэ үү",
"title": "Нэрээ оруулна уу"
"title": "Нэрээ оруулна уу",
"titleWithPolls": "Нэрээ оруулна уу"
},
"privateNotice": "Хувийн зурвас {{recipient}}",
"title": "Чат",
"titleWithPolls": "Чат",
"you": "чи"
},
"chromeExtensionBanner": {

View File

@@ -53,10 +53,12 @@
"noMessagesMessage": "अद्याप मीटिंगमध्ये कोणतेही संदेश नाहीत. येथे संभाषण सुरू करा!",
"nickname": {
"popover": "टोपणनाव निवडा",
"title": "चॅट वापरण्यासाठी टोपणनाव प्रविष्ट करा"
"title": "चॅट वापरण्यासाठी टोपणनाव प्रविष्ट करा",
"titleWithPolls": "चॅट वापरण्यासाठी टोपणनाव प्रविष्ट करा"
},
"privateNotice": "यांना खाजगी संदेश{{recipient}}",
"title": "गप्पा",
"titleWithPolls": "गप्पा",
"you": "आपण"
},
"chromeExtensionBanner": {

View File

@@ -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"
},

View File

@@ -69,10 +69,12 @@
"noMessagesMessage": "Er zijn nog geen berichten in de vergadering. Begin hier een gesprek!",
"nickname": {
"popover": "Kies een bijnaam",
"title": "Voer een bijnaam in om chat te gebruiken"
"title": "Voer een bijnaam in om chat te gebruiken",
"titleWithPolls": "Voer een bijnaam in om chat te gebruiken"
},
"privateNotice": "Privébericht aan {{recipient}}",
"title": "Chat",
"titleWithPolls": "Chat",
"you": "u"
},
"chromeExtensionBanner": {

File diff suppressed because it is too large Load Diff

View File

@@ -5,9 +5,10 @@
"copyInvite": "Kopiuj zaproszenie na spotkanie",
"copyLink": "Kopiuj link spotkania",
"copyStream": "Kopiuj link transmisji na żywo",
"contacts": "kontakty",
"countryNotSupported": "Nie obsługujemy jeszcze tej lokalizacji.",
"countryReminder": "Dzwonisz spoza USA? Upewnij się, że zaczynasz od kodu kraju!",
"defaultEmail": "Domyślna poczta",
"defaultEmail": "Domyślna poczta",
"disabled": "Nie możesz zapraszać ludzi.",
"failedToAdd": "Błąd dodawania uczestników",
"footerText": "Wybieranie numeru jest wyłączone.",
@@ -16,18 +17,14 @@
"inviteMoreMailSubject": "Dołącz do spotkania {{appName}}",
"inviteMorePrompt": "Zaproś innych uczestników",
"linkCopied": "Link skopiowany do schowka",
"loading": "Szukaj ludzi i numerów telefonów",
"loadingNumber": "Weryfikacja numeru telefonu",
"loadingPeople": "Wyszukiwanie osób do zaproszenia",
"noResults": "Brak pasujących wyników wyszukiwania",
"noValidNumbers": "Proszę wpisać numer telefonu",
"outlookEmail": "Poczta Outlook",
"searchNumbers": "Dodaj numery telefonów",
"searchPeople": "Szukaj ludzi",
"searchPeopleAndNumbers": "Wyszukaj osoby i dodaj ich numery telefonu",
"phoneNumbers": "numery telefonów",
"searching": "Wyszukiwanie...",
"shareInvite": "Udostępnij zaproszenie na spotkanie",
"shareLink": "Udostępnij link do spotkania, aby zaprosić innych uczestników",
"shareStream": "Udostępnij link transmisji na żywo",
"sipAddresses": "adresy SIP",
"telephone": "Telefon: {{number}}",
"title": "Zaproś uczestników na to spotkanie",
"yahooEmail": "Poczta Yahoo"
@@ -61,6 +58,7 @@
"today": "Dzisiaj"
},
"chat": {
"enter": "Wejdź do pokoju",
"error": "Błąd: Twoja wiadomość nie została wysłana. Powód: {{error}}",
"fieldPlaceHolder": "Wpisz wiadomość tutaj",
"messagebox": "Wpisz wiadomość",
@@ -68,18 +66,29 @@
"noMessagesMessage": "Aktualnie brak wiadomości w tym spotkaniu. Rozpocznij konwersację!",
"nickname": {
"popover": "Wybierz swój nick",
"title": "Wpisz swoją nazwę, aby użyć rozmowy"
"title": "Wpisz swoją nazwę, aby użyć rozmowy",
"titleWithPolls": "Wpisz swoją nazwę, aby użyć rozmowy"
},
"privateNotice": "Prywatna wiadomość do {{recipient}}",
"message": "Wiadomość",
"messageAccessibleTitle": "{{user}} mówi:",
"messageAccessibleTitleMe": "mówię:",
"smileysPanel": "Panel emoji",
"tabs": {
"chat": "Chat",
"polls": "Ankiety"
},
"title": "Rozmowa",
"titleWithPolls": "Rozmowa",
"you": "Ty"
},
"chromeExtensionBanner": {
"chromeExtensionBanner": {
"installExtensionText": "Zainstaluj rozszerzenie integrujące Kalendarz Google i Office 365",
"buttonText": "Zainstaluj rozszerzenie Chrome",
"dontShowAgain": "Nie pokazuj ponownie"
"dontShowAgain": "Nie pokazuj ponownie",
"close": "Zamknij"
},
"connectingOverlay": {
"connectingOverlay": {
"joiningRoom": "Łączenie ze spotkaniem…"
},
"connection": {
@@ -99,9 +108,11 @@
},
"connectionindicator": {
"address": "Adres:",
"audio_ssrc": "Audio SSRC:",
"bandwidth": "Szacowana przepustowość:",
"bitrate": "Szybkość transmisji:",
"bridgeCount": "Liczba serwerów: ",
"codecs": "Kodeki (A/V): ",
"connectedTo": "Podłączone do:",
"e2e_rtt": "E2E RTT:",
"framerate": "Klatek na sekundę:",
@@ -125,9 +136,12 @@
"remoteport": "Port zdalny:",
"remoteport_plural": "Porty zdalne:",
"resolution": "Rozdzielczość:",
"savelogs": "Zapisz logi",
"participant_id": "ID uczestnika:",
"status": "Połączenie:",
"transport": "Transport:",
"transport_plural": "Transporty:"
"transport_plural": "Transporty:",
"video_ssrc": "Video SSRC:"
},
"dateUtils": {
"earlier": "Wcześniej",
@@ -169,12 +183,14 @@
"alreadySharedVideoMsg": "Inny użytkownik już prezentuje wideo. Ta konferencja pozwala tylko na prezentację jednego wideo w tym samym czasie.",
"alreadySharedVideoTitle": "Tylko jedna prezentacja wideo jest dozwolona w tym samym czasie",
"applicationWindow": "Okno aplikacji",
"authenticationRequired": "Wymagane uwierzytelnienie",
"Back": "Wstecz",
"cameraConstraintFailedError": "Twoja kamera nie spełnia niektórych obowiązkowych wymagań.",
"cameraNotFoundError": "Kamera nie znaleziona.",
"cameraNotSendingData": "Nie możemy połączyć się z Twoją kamerą. Sprawdź, czy inna aplikacja nie używa tego urządzenia, wybierz inne urządzenie z menu ustawień lub spróbuj zrestartować aplikację.",
"cameraNotSendingDataTitle": "Brak dostępu do kamery",
"cameraPermissionDeniedError": "Nie udzieliłeś pozwolenia na użycie swojej kamery. Nadal możesz dołączyć do konferencji, ale inni nie będą Cię widzieć. Naciśnij przycisk kamery na pasku adresu, aby to poprawić.",
"cameraTimeoutError": "Nie udało się uruchomić źródła obrazu. Przekroczono limit czasu",
"cameraUnknownError": "Z nieznanej przyczyny nie można użyć kamery.",
"cameraUnsupportedResolutionError": "Twoja kamera nie obsługuje wymaganej rozdzielczości.",
"Cancel": "Anuluj",
@@ -197,15 +213,14 @@
"done": "Zrobione",
"e2eeDescription": "Szyfrowanie End-to-End jest aktualnie w fazie EKSPERYMENTALNEJ. Proszę mieć na uwadze fakt, że szyfrowanie end-to-end wyłączy oferowane przez serwer usługi takie jak: nagrywanie, streaming na żywo i dołączanie uczestników przez telefon. Proszę mieć również na uwadze fakt, że takie spotkanie zadziałą tylko dla uczestników korzystających z przeglądarek wspierających wstawiane strumienie.",
"e2eeLabel": "Klucz E2EE",
"e2eeNoKey": "brak",
"e2eeToggleSet": "Ustaw klucz",
"e2eeSet": "Ustaw",
"e2eeWarning": "UWAGA: Niektórzy uczestnicy tego spotkania nie mają włączonej obsługi szyfrowania E2EE. Jeśli włączysz tą funkcję ci uczestnicy nie będą mieli z tobą kontaktu.",
"enterDisplayName": "Wpisz tutaj swoje imię",
"embedMeeting": "Osadź spotkanie",
"error": "Błąd",
"gracefulShutdown": "Usługa aktualnie jest niedostępna. Prosze spróbować później.",
"grantModeratorDialog": "Czy na pewno chcesz przyznać temu uczestnikowi prawa moderatora?",
"grantModeratorTitle": "Przyznaj prawa moderatora",
"hideShareAudioHelper": "Nie pokazuj więcej",
"IamHost": "Jestem gospodarzem",
"incorrectRoomLockPassword": "Hasło nieprawidłowe",
"incorrectPassword": "Niepoprawna nazwa użytkownika lub hasło",
@@ -218,12 +233,12 @@
"kickTitle": "Ups! {{participantDisplayName}} usunął Cię z tego spotkania",
"liveStreaming": "Strumień na żywo",
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Nie możliwe podczas aktywnego nagrywania",
"liveStreamingDisabledForGuestTooltip": "Goście nie mogą używać transmisji na żywo.",
"liveStreamingDisabledTooltip": "Rozpoczęcie transmisji na żywo jest wyłączone.",
"lockMessage": "Zabezpieczenie konferencji nie powiodło się.",
"lockRoom": "Dodaj spotkanie $t(lockRoomPasswordUppercase)",
"lockTitle": "Nie powiodło się zabezpieczenie konferencji",
"logoutQuestion": "Na pewno chcesz się wylogować i zakończyć konferencję?",
"login": "Zaloguj",
"logoutTitle": "Wyloguj",
"maxUsersLimitReached": "Osiągnięto limit maksymalnej liczby uczestników. Konferencja jest zapełniona. Skontaktuj się z właścicielem spotkania lub spróbuj ponownie później!",
"maxUsersLimitReachedTitle": "Osiągnięto maksymalną liczbę uczestników",
@@ -232,29 +247,43 @@
"micNotSendingData": "Wejdź w ustawienia komputera, aby wyłączyć wyciszenie i dostosować poziom głośności",
"micNotSendingDataTitle": "Twój mikrofon jest wyciszony przez ustawienia systemowe",
"micPermissionDeniedError": "Nie udzieliłeś pozwolenia na użycie twojego mikrofonu. Nadal możesz uczestniczyc w konferencji ale inni nie będą cię słyszeli. Użyj przycisku kamera aby to naprawić.",
"micTimeoutError": "Nie udało się uruchomić źródła dźwięku. Przekroczono limit czasu",
"micUnknownError": "Z nieznanej przyczyny nie można użyć mikrofonu.",
"muteEveryoneElseDialog": "Gdy wyciszysz wszystkich nie będziesz miał możliwości wyłączyć ich wyciszenia, ale oni będą mogli samodzielnie wyłączyć wyciszenie w dowolnym momencie.",
"muteEveryoneElseTitle": "Wyciszyć wszystkich za wyjątkiem {{whom}}?",
"muteEveryoneElsesVideoDialog": "Po dezaktywacji kamery nie można jej ponownie aktywować, ale uczestnicy mogą to zmienić samodzielnie w dowolnym momencie.",
"muteEveryoneElsesVideoTitle": "Wyłączyć kamerę wszystkim oprócz {{whom}}?",
"muteEveryonesVideoDialog": "Czy na pewno chcesz wyłączyć kamery wszystkich uczestników? Nie możesz ponownie włączyć kamer, ale uczestnicy mogą to zmienić samodzielnie w dowolnym momencie.",
"muteEveryonesVideoDialogOk": "Wyłącz",
"muteEveryonesVideoTitle": "Wyłączyć kamery pozostałych uczestników?",
"muteEveryoneDialog": "Czy na pewno wyciszyć wszystkich? Nie będziesz miał możliwości wyłączyć ich wyciszenia, ale oni będą mogli samodzielnie wyłączyć wyciszenie w dowolnym momencie.",
"muteEveryoneTitle": "Wyciszyć wszystkich?",
"muteEveryoneSelf": "siebie",
"muteEveryoneStartMuted": "Od tego momentu wszyscy są wyciszeni",
"muteParticipantBody": "Nie możesz wyłączyć ich wyciszenia, ale oni mogą samodzielnie wyłączyć wyciszenie w dowolnym momencie.",
"muteParticipantButton": "Wyciszenie",
"muteParticipantButton": "Wycisz",
"muteParticipantDialog": "Czy na pewno wyciszyć tego uczestnika? Nie będziesz mógł wyłączyć wyciszenia uczestników, ale oni mogą samodzielnie wyłączyć wyciszenie w dowolnym momencie.",
"muteParticipantsVideoDialog": "Czy na pewno chcesz wyłączyć kamerę tego uczestnika? Nie będziesz mógł ponownie włączyć jego kamery, ale będzie on mógł samodzielnie włączyć kamerę w dowolnym momencie.",
"muteParticipantTitle": "Wyciszyć tego uczestnika?",
"muteParticipantsVideoButton": "Wyłącz kamerę",
"muteParticipantsVideoTitle": "Wyłączyć kamerę tego uczestnika?",
"muteParticipantsVideoBody": "Nie będziesz mógł włączyć jego kamery ponownie, ale uczestnik samodzielnie może włączyć kamerę w dowolnym momencie.",
"noDropboxToken": "Brak poprawnego tokenu Dropbox",
"Ok": "OK",
"passwordLabel": "$t(lockRoomPasswordUppercase)",
"password": "$t(lockRoomPasswordUppercase)",
"passwordLabel": "Spotkanie zostało zabezpieczone przez innego uczestnika. Wprowadź $t(lockRoomPassword), aby dołączyć.",
"passwordNotSupported": "Ustanowienie spotkania $t(lockRoomPassword) nie jest obsługiwane.",
"passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) nie jest obsługiwane",
"passwordRequired": "$t(lockRoomPasswordUppercase) jest wymagane",
"permissionErrorTitle": "Wymagana autoryzacja",
"permissionCameraRequiredError": "Dostęp do kamery jest wymagany do udziału w konferencjach z obrazem. Udziel dostępu do kamery w ustawieniach",
"permissionMicRequiredError": "Dostęp do mikrofonu jest wymagany do udziału w konferencjach z dźwiękiem. Udziel dostępu do mikrofonu w ustawieniach",
"popupError": "Twoja przeglądarka blokuje wyskakujące okienka pochodzące z tej witryny. Włącz wyświetlanie wyskakujących okienek w ustawieniach bezpieczeństwa Twojej przeglądarki i spróbuj ponownie.",
"popupErrorTitle": "Wyskakujące okienko zostało zablokowane",
"readMore": "więcej",
"recording": "Nagrywanie",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Nie możliwe podczas aktywnej transmisji na żywo",
"recordingDisabledForGuestTooltip": "Goście nie mogą uruchamiać nagrywania.",
"recordingDisabledTooltip": "Start recording disabled.",
"recordingDisabledTooltip": "Nagrywanie wyłączone.",
"rejoinNow": "Połącz ponownie teraz",
"remoteControlAllowedMessage": "{{user}} zaakceptował Twoją prośbę o kontrolę zdalną!",
"remoteControlDeniedMessage": "{{user}} odrzucił Twoją prośbę o kontrolę zdalną!",
@@ -280,15 +309,26 @@
"sendPrivateMessageTitle": "Wysłać prywatnie?",
"serviceUnavailable": "Usługa jest niedostępna",
"sessTerminated": "Połączenie przerwane",
"sessionRestarted": "Konferencja została wznowiona",
"Share": "Udostępnij",
"shareAudio": "Kontynuuj",
"shareAudioTitle": "Jak można udostępnić dźwięk?",
"shareAudioWarningTitle": "Aby udostępniać dźwięk, musisz wyłączyć udostępnianie ekranu",
"shareAudioWarningH1": "Jeśli chcesz udostępniać wyłącznie dźwięk:",
"shareAudioWarningD1": "musisz wyłączyć udostępnianie ekranu, zanim będziesz mógł udostępniać dźwięk.",
"shareAudioWarningD2": "musisz ponownie uruchomić udostępnianie ekranu i wybrać opcję \"udostępnij dźwiękś\".",
"shareMediaWarningGenericH2": "Jeżeli chcesz udostępniać ekran i dźwięk",
"shareVideoLinkError": "Podaj proszę prawidłowy link youtube.",
"shareVideoTitle": "Udostępnij wideo",
"shareYourScreen": "Włącz udostępnianie ekranu",
"shareYourScreenDisabled": "Udostępnianie ekranu wyłączone.",
"shareYourScreenDisabledForGuest": "Goście nie mogą współdzielić ekranu.",
"startLiveStreaming": "Rozpocznij transmisję na żywo",
"startRecording": "Rozpocznij nagrywanie",
"startRemoteControlErrorMessage": "Wystąpił błąd podczas próby rozpoczęcie sesji zdalnej kontroli!",
"shareScreenWarningTitle": "Aby udostępnić ekran, musisz zatrzymać udostępnianie dźwięku",
"shareScreenWarningH1": "Kiedy chcesz udostępniać wyłącznie swój ekran:",
"shareScreenWarningD1": "musisz zatrzymać udostępnianie dźwięku przed udostępnieniem ekranu.",
"shareScreenWarningD2": "musisz zatrzymać udostępnianie dźwięku, rozpocząć udostępnianie ekranu i zaznaczyć opcję \"udostępnij dźwięk\".",
"stopLiveStreaming": "Zatrzymaj transmisję na żywo",
"stopRecording": "Zatrzymaj nagrywanie",
"stopRecordingWarning": "Naprawdę chcesz zatrzymać nagrywanie?",
@@ -301,12 +341,20 @@
"tokenAuthFailedTitle": "Uwierzytelnianie nie powiodło się",
"transcribing": "Transkrypcja",
"unlockRoom": "Usuń spotkanie $t(lockRoomPassword)",
"user": "Użytkownik",
"userIdentifier": "Nazwa użytkownika",
"userPassword": "hasło użytkownika",
"videoLink": "Link do video",
"viewUpgradeOptions": "Pokaż opcje aktualizacji",
"viewUpgradeOptionsContent": "Musisz uaktualnić swój plan, aby korzystać z funkcji premium, takich jak nagrywanie, transkrypcja, przesyłanie strumieniowe RTMP i nie tylko.",
"viewUpgradeOptionsTitle": "Odkryłeś funkcję premium!",
"WaitForHostMsg": "Spotkanie <b>{{room}}</b> jeszcze się nie rozpoczęło. Jeśli jesteś gospodarzem, prosimy o uwierzytelnienie. Jeśli nie, prosimy czekać na przybycie gospodarza.",
"WaitForHostMsgWOk": "Spotkanie <b>{{room}}</b> jeszcze się nie rozoczęło. Jeśli jesteś jej gospodarzem, wybierz Ok, aby się uwierzytelnić. Jeśli nie, prosimy czekać na przybycie gospodarza.",
"WaitingForHost": "Oczekiwanie na gospodarza",
"WaitingForHostTitle": "Oczekiwanie na gospodarza...",
"Yes": "Tak",
"yourEntireScreen": "Cały Twój ekran"
"yourEntireScreen": "Cały Twój ekran",
"remoteUserControls": "Zdalna kontrola użytkownika {{username}}",
"localUserControls": "Lokalna kontrola użytkownika"
},
"dialOut": {
"statusMessage": "jest teraz {{status}}"
@@ -320,6 +368,28 @@
"embedMeeting": {
"title": "Osadź to spotkanie"
},
"virtualBackground": {
"apply": "Zastosuj",
"title": "Tła",
"blur": "Rozmycie",
"slightBlur": "Lekkie rozmycie",
"removeBackground": "Usuń tło",
"addBackground": "Dodaj tło",
"pleaseWait": "Proszę czekać...",
"none": "Żadne",
"uploadedImage": "Przesłany obraz {{index}}",
"deleteImage": "Usuń obraz",
"image1": "Plaża",
"image2": "Biała ściana",
"image3": "Biały pusty pokój",
"image4": "Czarna lampa",
"image5": "Góra",
"image6": "Las",
"image7": "Wschód słońca",
"desktopShareError": "Nie można udostępnić pulpitu",
"desktopShare": "Udostępnianie pulpitu",
"webAssemblyWarning": "WebAssembly nie jest obsługiwany"
},
"feedback": {
"average": "Średnio",
"bad": "Źle",
@@ -327,7 +397,8 @@
"good": "Dobrze",
"rateExperience": "Jak oceniasz tę konferencję?",
"veryBad": "Bardzo źle",
"veryGood": "Bardzo dobrze"
"veryGood": "Bardzo dobrze",
"star": "Gwiazda"
},
"incomingCall": {
"answer": "Odbierz",
@@ -344,6 +415,7 @@
"country": "Kraj",
"dialANumber": "Aby dołączyć do spotkania, wprowadź jeden z tych numerów i podaj pin.",
"dialInConferenceID": "PIN:",
"copyNumber": "Skopiuj numer",
"dialInNotSupported": "Przepraszamy, aktualnie wybieranie nie jest obsługiwane.",
"dialInNumber": "Wdzwoń się:",
"dialInSummaryError": "Błąd podczas przetwarzania danych do wdzwonienia. Spróbuj ponownie później.",
@@ -352,6 +424,11 @@
"inviteLiveStream": "Aby obejrzeć transmisję na żywo z tego spotkania, kliknij ten odnośnik: {{url}}",
"invitePhone": "Aby skorzystać z połączenia telefonicznego, wprowadź: {{number}},,{{conferenceID}}#\n",
"invitePhoneAlternatives": "Poszukujesz innego numeru do wdzwonienia?\nZobacz listę numerów: {{url}}\n\n\nJeśli wdzwaniasz się z telefonu pokojowego, połącz się bez dźwięku: {{silentUrl}}",
"inviteSipEndpoint": "Aby dołączyć używając SIP użyj tego adresu: {{sipUri}}",
"inviteTextiOSPersonal": "{{name}} zaprasza Cię do spotkania.",
"inviteTextiOSJoinSilent": "Jeżeli wdzwaniasz się za pomocą telefonu konferencyjnego użyj tego linku, aby dołączyć bez dźwięku: {{silentUrl}}.",
"inviteTextiOSInviteUrl": "Kliknij w link, aby dołączyć: {{inviteUrl}}.",
"inviteTextiOSPhone": "Aby dołączyć z telefonu użyj numeru: {{number}},,{{conferenceID}}#. Pełna lista numerów telefonów: {{didUrl}}.",
"inviteURLFirstPartGeneral": "Zostałeś zaproszony do dołączenia do spotkania.",
"inviteURLFirstPartPersonal": "{{name}} zaprasza Cię na spotkanie.\n",
"inviteURLSecondPart": "\nDołącz do spotkania:\n{{url}}\n",
@@ -362,6 +439,7 @@
"noRoom": "Nie podano pokoju do wdzwonienia.",
"numbers": "Numery do wdzwonienia",
"password": "$t(lockRoomPasswordUppercase):",
"sip": "Adres SIP",
"title": "Udostępnij",
"tooltip": "Udostępnij odnośnik i informacje do wdzwonienia się na to spotkanie",
"label": "Poinformuj o spotkaniu"
@@ -380,6 +458,7 @@
"support": "Wsparcie",
"supportMsg": "Jeśli to się powtarza, skontaktuj się z nami przez"
},
"jitsiHome": "{{logo}} Logo, link do strony głównej",
"keyboardShortcuts": {
"focusLocal": "Powiększ wideo",
"focusRemote": "Skup na obrazie innej osoby",
@@ -392,10 +471,10 @@
"showSpeakerStats": "Pokaż statystyki mówcy",
"toggleChat": "Otwórz lub zamknij czat",
"toggleFilmstrip": "Wyświetl lub ukryj miniaturki video",
"toggleParticipantsPane": "Pokaż lub ukryj listę uczestników",
"toggleScreensharing": "Przełącz pomiędzy kamerą i wspóldzieleniem ekranu",
"toggleShortcuts": "Wyświetl lub ukryj skróty klawiaturowe",
"videoMute": "Uruchom lub zatrzymaj kamerę",
"videoQuality": "Zarządzanie jakością połączeń"
"videoMute": "Uruchom lub zatrzymaj kamerę"
},
"liveStreaming": {
"limitNotificationDescriptionWeb": "Ze względu na duże zapotrzebowanie twoje strumieniowanie będzie ograniczone do {{limit}} minut. Aby strumieniować bez ograniczeń wybróbuj <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
@@ -428,7 +507,7 @@
"start": "Rozpocznij transmisję na żywo",
"streamIdHelp": "Co to jest?",
"unavailableTitle": "Transmisja na żywo jest niedostępna",
"youtubeTerms": "Warunki użytkowania YouTube",
"youtubeTerms": "Warunki użytkowania YouTube",
"googlePrivacyPolicy": "Polityka prywatności Google"
},
"localRecording": {
@@ -471,6 +550,7 @@
"focus": "Fokus konferencji",
"focusFail": "{{component}} jest niedostępny - ponowienie w ciągu {{ms}} sec",
"grantedTo": "Prawa moderatora przyznane dla {{to}}!",
"hostAskedUnmute": "Gospodarz prosi Cię o wyłączenie wyciszenia",
"invitedOneMember": "{{name}} został zaproszony",
"invitedThreePlusMembers": "{{name}} i {{count}} innych osób zostało zaproszone",
"invitedTwoMembers": "{{first}} i {{second}} zostali zaproszeni",
@@ -481,9 +561,13 @@
"mutedTitle": "Jesteś wyciszony!",
"mutedRemotelyTitle": "Zostałeś wyciszony przez {{participantDisplayName}}!",
"mutedRemotelyDescription": "Zawsze możesz wyłączyć wyciszenie, gdy będziesz gotowy do mówienia. Wycisz, gdy skończysz, aby nie hałasować podczas spotkania.",
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) usunięty przez innego uczestnika",
"videoMutedRemotelyTitle": "Twoja kamera została wyłączona przez {{participantDisplayName}}!",
"videoMutedRemotelyDescription": "Możesz ją włączyć ponownie w dowolnym momencie.",
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) usunięte przez innego uczestnika",
"passwordSetRemotely": "$t(lockRoomPasswordUppercase) ustawiony przez innego uczestnika",
"raisedHand": "{{name}} chce mówić.",
"screenShareNoAudio": "Opcja \"Udostępnij dźwięk\" nie została zaznaczona podczas wyboru okna.",
"screenShareNoAudioTitle": "Nie można udostępnić dźwięku",
"somebody": "Ktoś",
"startSilentTitle": "Dołączyłeś bez wyjścia dźwiękowego!",
"startSilentDescription": "Ponownie dołącz do spotkania, aby włączyć dźwięk",
@@ -496,13 +580,78 @@
"OldElectronAPPTitle": "Luka bezpieczeństwa!",
"oldElectronClientDescription1": "Najprawdopodobniej używasz starej wersji klienta Jitsi Meet, który jest podatny na luki bezpieczeństwa. Proszę zaktualizować do ",
"oldElectronClientDescription2": "najnowszej wersji",
"oldElectronClientDescription3": " teraz!"
"oldElectronClientDescription3": " teraz!",
"moderationInEffectDescription": "Podnieś rękę, jeżeli chcesz mówić",
"moderationInEffectCSDescription": "Podnieś rękę, aby udostępniać obraz",
"moderationInEffectVideoDescription": "Podnieś rękę, aby włączyć kamerę",
"moderationInEffectTitle": "Mikrofon jest wyciszony przez moderatora",
"moderationInEffectCSTitle": "Udostępnianie jest wyłaczone przez moderatora",
"moderationInEffectVideoTitle": "Kamera jest wyłączona przez moderatora",
"moderationRequestFromModerator": "Moderator prosi Cię o włączenie mikrofonu",
"moderationRequestFromParticipant": "chce mówić",
"moderationStartedTitle": "Rozpoczęto moderację",
"moderationStoppedTitle": "Moderacja zatrzymana",
"moderationToggleDescription": "przez {{participantDisplayName}}",
"raiseHandAction": "Podnieś rękę",
"reactionSounds": "Wyłącz dźwięki",
"groupTitle": "Powiadomienia"
},
"participantsPane": {
"close": "Zamknij",
"header": "Uczestnicy",
"headings": {
"lobby": "Lobby ({{count}})",
"participantsList": "Obecnych ({{count}})",
"waitingLobby": "Oczekujących ({{count}})"
},
"actions": {
"allow": "Zezwól uczestnikom na:",
"blockEveryoneMicCamera": "Zablokuj wszystkim kamerę i mikrofon",
"invite": "Zaproś",
"askUnmute": "Poproś o wyłączenie wyciszenia",
"mute": "Wycisz",
"muteAll": "Wycisz wszystkich",
"muteEveryoneElse": "Wycisz pozostałych",
"startModeration": "Wyłącz wyciszenie lub rozpocznij wideo",
"stopEveryonesVideo": "Wyłącz wszystkie kamery",
"stopVideo": "Wyłącz kamerę",
"unblockEveryoneMicCamera": "Odblokuj wszystkim kamerę i mikrofon"
}
},
"passwordSetRemotely": "wybrane przez innego uczestnika",
"passwordDigitsOnly": "Do {{number}} cyfr",
"polls": {
"create": {
"addOption": "Dodaj opcję",
"answerPlaceholder": "Opcja {{index}}",
"create": "Stwórz ankietę",
"cancel": "Anuluj",
"pollOption": "Opcja {{index}}",
"pollQuestion": "Pytanie",
"questionPlaceholder": "Zadaj pytanie",
"removeOption": "Usuń opcję",
"send": "Wyślij"
},
"answer": {
"skip": "Pomiń",
"submit": "Wyślij"
},
"results": {
"vote": "Głosuj",
"changeVote": "Zmień głos",
"empty": "Nie ma aktywnych ankiet. Rozpocznij ankietę tutaj!",
"hideDetailedResults": "Ukryj szczegóły",
"showDetailedResults": "Pokaż szczegóły"
},
"notification": {
"title": "Utworzono nową ankietę do tego spotkania",
"description": "Otwórz kartę ankiet, aby zagłosować"
}
},
"poweredby": "napędzane dzięki",
"prejoin": {
"audioAndVideoError": "Błąd audio i wideo:",
"audioDeviceProblem": "Wystąpił problem z urządzeniem audio.",
"audioOnlyError": "Błąd audio:",
"audioTrackError": "Nie można utworzyć ścieżki audio.",
"calling": "Wybieranie",
@@ -510,6 +659,25 @@
"callMeAtNumber": "Zadzwoń do mnie pod ten numer:",
"configuringDevices": "Konfigurowanie urządzeń...",
"connectedWithAudioQ": "Jesteś połączony głosowo?",
"connection": {
"good": "Twoje połączenie internetowe wygląda dobrze!",
"nonOptimal": "Twoje połączenie internetowe nie jest optymalne.",
"poor": "Masz złe połączenie internetowe."
},
"connectionDetails": {
"audioClipping": "Twój dźwięk będzie się przycinał.",
"audioHighQuality": "Twój dźwięk będzie miał doskonałą jakość.",
"audioLowNoVideo": "Twój dźwięk prawdopodobnie będzie zły i nie będzie wideo.",
"goodQuality": "Świetnie! Jakość obrazu i dźwięku powinna być bardzo dobra.",
"noMediaConnectivity": "Nie można nawiązać połączenia z mediami. Jest to zwykle wywoływane przez zaporę sieciową lub NAT.",
"noVideo": "Twój obraz będzie słabej jakości.",
"undetectable": "Jeśli podczas spotkania nadal będziesz mieć problemy z przeglądarką, sprawdź połączenie oraz działanie głośników, mikrofonu i kamery. Upewnij się również, że Twoja przeglądarka ma niezbędne uprawnienia dostępu do mikrofonu i kamery oraz że masz zainstalowaną najnowszą wersję przeglądarki. Jeśli nadal masz problemy, skontaktuj się z obsługą aplikacji.",
"veryPoorConnection": "Twoja jakość konferencji będzie prawdopodobnie bardzo słaba.",
"videoFreezing": "Twój obraz będzie się przycinał, stanie się czarny i będzie miał niską rozdzielczość.",
"videoHighQuality": "Twój obraz będzie dobrej jakości.",
"videoLowQuality": "Twój obraz będzie miał niską rozdzielczość oraz liczbę klatek na sekundę.",
"videoTearing": "Twój obraz będzie miał niską rozdzielczość, a na ekranie pojawią się nieporządane artefakty."
},
"copyAndShare": "Kopiuj i udostępnij link spotkania",
"dialInMeeting": "Wdzwoń się na spotkanie",
"dialInPin": "Wdzwoń się na spotkanie i wprowadź kod PIN:",
@@ -519,6 +687,7 @@
"errorDialOutDisconnected": "Nie udało się wybrać numeru. Rozłączono",
"errorDialOutFailed": "Nie udało się wybrać numeru. Połączenie nieudane",
"errorDialOutStatus": "Błąd podczas uzyskiwania stanu połączenia",
"errorMissingName": "Podaj imię, aby dołączyć do spotkania",
"errorStatusCode": "Błąd wybierania, kod statusu: {{status}}",
"errorValidation": "Weryfikacja numeru zakończona niepowodzeniem",
"iWantToDialIn": "Chcę się wdzwonić",
@@ -531,6 +700,7 @@
"or": "lub",
"premeeting": "Przed spotkaniem",
"showScreen": "Włącz ekran Przed spotkaniem",
"keyboardShortcuts": "Włącz skróty klawiszowe",
"startWithPhone": "Uruchom przez telefon",
"screenSharingError": "Błąd udostępniania ekranu:",
"videoOnlyError": "Błąd wideo:",
@@ -539,25 +709,26 @@
},
"presenceStatus": {
"busy": "Zajęte",
"calling": "Dzwonienie…",
"calling": "Dzwonię...",
"connected": "Połączono",
"connecting": "Łączenie…",
"connecting2": "Łączenie*...",
"connecting": "Łączę...",
"connecting2": "Łączę*...",
"disconnected": "Rozłączony",
"expired": "Wygasłe",
"expired": "Wygasły",
"ignored": "Zignorowane",
"initializingCall": "Inicjalizacja połączenia",
"initializingCall": "Inicjalizacja połączenia...",
"invited": "Zaproszony",
"rejected": "Odrzucony",
"ringing": "Dzwonek"
"ringing": "Dzwonek..."
},
"profile": {
"avatar": "awatar",
"setDisplayNameLabel": "Podaj swoją wyświetlaną nazwę",
"setEmailInput": "Wprowadź adres e-mail",
"setEmailLabel": "Ustaw adres poczty elektronicznej swojego Gravatara",
"title": "Profil"
},
"raisedHand": "Chcesz się odezwać ?",
"raisedHand": "Chcę coś powiedzieć",
"recording": {
"limitNotificationDescriptionWeb": "Ze względu na duże zapotrzebowanie twoje nagrywanie będzie ograniczone do {{limit}} minut. Aby strumieniować bez ograniczeń wybróbuj <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
"limitNotificationDescriptionNative": "Ze względu na duże zapotrzebowanie twoje nagrywanie będzie ograniczone do {{limit}} minut. Aby strumieniować bez ograniczeń wybróbuj <3>{{app}}</3>.",
@@ -566,12 +737,15 @@
"beta": "BETA",
"busy": "Pracujemy nad uwolnieniem zasobów nagrywania. Proszę spróbować ponownie za kilka minut.",
"busyTitle": "Wszystkie urządzenia nagrywania są obecnie zajete",
"copyLink": "Skopiuj link",
"error": "Nagranie się nie powiodło. Proszę spróbować ponownie.",
"errorFetchingLink": "Nie udało się wczytać linku do nagrania.",
"expandedOff": "Nagrywanie zostało zatrzymane",
"expandedOn": "Spotkanie jest obecnie nagrywane.",
"expandedPending": "Nagrywanie się rozpoczyna…",
"failedToStart": "Nagrywanie nie jest możliwe",
"fileSharingdescription": "Udostępnij nagranie uczestnikom spotkania",
"linkGenerated": "Wygenerowano link do nagrania.",
"live": "NA ŻYWO",
"loggedIn": "Zalogowano jako {{userName}}",
"off": "Nagrywanie zatrzymane",
@@ -581,11 +755,13 @@
"pending": "Przygotowanie do nagrania spotkania…",
"rec": "NAGRYWANIE",
"serviceDescription": "Twoje nagranie zostanie zapisane przez usługę nagrywania",
"serviceDescriptionCloud": "Nagrywanie w chmurze",
"serviceName": "Usługa nagrywania",
"signIn": "Zaloguj się",
"signOut": "Wyloguj się",
"unavailable": "Ups! {{serviceName}} w tej chwili niedostępny. Próbujemy rozwiązać ten problem. Spróbuj ponownie później.",
"unavailableTitle": "Nagrywanie niedostępne"
"unavailableTitle": "Nagrywanie niedostępne",
"uploadToCloud": "Prześlij do chmury"
},
"sectionList": {
"pullToRefresh": "Przeciągnij, aby odświeżyć"
@@ -604,27 +780,39 @@
"signedIn": "Dostęp do wydarzeń kalendarza dla {{email}}. Kliknij poniższy przycisk Rozłącz aby zatrzymać dostęp do wydarzeń kalendarza.",
"title": "Kalendarz"
},
"desktopShareFramerate": "Liczba klatek na sekundę dla udostępniania ekranu",
"desktopShareWarning": "Wymagane ponowne włączenie udostępniania ekranu, aby zastosować nowe ustawienia.",
"desktopShareHighFpsWarning": "Wyższa liczba klatek może wpłynąć na szybkość transmisji danych. Aby ustawienie zaczęło obowiązywać, musisz ponownie uruchomić udostępnianie ekranu.",
"devices": "Urządzenia",
"followMe": "Wszyscy widzą mnie",
"framesPerSecond": "klatek na sekundę",
"incomingMessage": "Przychodząca wiadomość",
"language": "Język",
"loggedIn": "Zalogowano jako {{name}}",
"microphones": "Mikrofony",
"sounds": "Dźwięki",
"moderator": "Moderacja",
"more": "Więcej",
"name": "Nazwa",
"noDevice": "Brak",
"participantJoined": "Dołączył nowy uczestnik",
"participantLeft": "Uczestnik opuścił spotkanie",
"playSounds": "Włącz dźwięki",
"reactions": "Reakcje",
"sameAsSystem": "Jak system ({{label}})",
"selectAudioOutput": "Wyjście audio",
"selectCamera": "Kamera",
"selectMic": "Mikrofon",
"speakers": "Głośniki",
"speakers": "Głośniki",
"startAudioMuted": "Wycisz wszystkich dołączających",
"startVideoMuted": "Ukryj wszystkich dołączających",
"talkWhileMuted": "Jesteś wyciszony",
"title": "Ustawienia"
},
"settingsView": {
"advanced": "Zaawansowane",
"alertOk": "OK",
"alertCancel": "Anuluj",
"alertCancel": "Anuluj",
"alertTitle": "Uwaga",
"alertURLText": "Wprowadzony adres URL serwera jest nieprawidłowy",
"buildInfoSection": "Informacja o kompilacji",
@@ -649,6 +837,7 @@
},
"speaker": "Mówca",
"speakerStats": {
"search": "Wyszukaj",
"hours": "{{count}} godz.",
"minutes": "{{count}} min.",
"name": "Nazwa",
@@ -658,7 +847,8 @@
},
"startupoverlay": {
"policyText": " ",
"title": "{{app}} potrzebuje używać Twój mikrofon i kamerę."
"genericTitle": "Spotkanie potrzebuje używać Twojego mikrofonu i kiamery.",
"title": "{{app}} potrzebuje używać Twojego mikrofonu i kiamery."
},
"suspendedoverlay": {
"rejoinKeyTitle": "Dołącz ponownie",
@@ -669,13 +859,14 @@
"accessibilityLabel": {
"audioOnly": "Przełączanie tylko audio",
"audioRoute": "Wybierz urządzenie dźwiękowe",
"boo": "Buczenie",
"callQuality": "Zarządzanie jakością obrazu",
"cc": "Przełączanie napisów",
"chat": "Przełączanie okna rozmowy",
"clap": "Klaskanie",
"document": "Przełączanie wspólnego dokumentu",
"download": "Pobierz nasze aplikacje",
"embedMeeting": "Osadź spotkanie",
"e2ee": "Szyfrowanie End-to-End",
"feedback": "Zostaw swoją opinię",
"fullScreen": "Przełączanie trybu pełnoekranowego",
"grantModerator": "Przyznaj prawa moderowania",
@@ -683,6 +874,8 @@
"help": "Pomoc",
"invite": "Zaproś uczestników",
"kick": "Usuń uczestnika",
"laugh": "Śmiech",
"like": "Kciuk w górę",
"lobbyButton": "Włącz/wyłącz tryb lobby",
"localRecording": "Przełączanie lokalnych urządzeń sterujących zapisem danych",
"lockRoom": "Przełączenie hasła spotkania",
@@ -691,34 +884,52 @@
"moreOptions": "Pokaż więcej opcji",
"mute": "Uruchamianie wyciszonego audycji",
"muteEveryone": "Wycisz wszystkich",
"muteEveryoneElse": "Wycisz pozostałych",
"muteEveryonesVideo": "Wyłącz wszystkim kamery",
"muteEveryoneElsesVideo": "Wyłącz kamery pozostałym",
"participants": "Uczestnicy",
"pip": "Tryb przełączania obrazu-w-obrazie",
"privateMessage": "Wyślij wiadomość prywatną",
"profile": "Edytuj swój profil",
"raiseHand": "Przełączyć rękę w górę",
"reactionsMenu": "Otwórz / Zamknij reakcje",
"recording": "Przełączanie nagrywania",
"remoteMute": "Wycisz uczestnika",
"remoteVideoMute": "Wyłącz kamerę uczestnika",
"security": "Opcje zabezpieczeń",
"Settings": "Ustawienia przełączania",
"shareaudio": "Udostępnij audio",
"sharedvideo": "Przełącz udostępnianie obrazu na YouTube",
"shareRoom": "Zaproś kogoś",
"shareYourScreen": "Przełączanie podziału ekranu",
"shortcuts": "Przełączanie skrótów klawiszowych",
"show": "Pokaż na scenie",
"silence": "Cisza",
"speakerStats": "Przełączanie statystyk dotyczących mówców",
"surprised": "Zaskoczony",
"tileView": "Przełącz widok kafelkowy",
"toggleCamera": "Przełączanie kamery",
"toggleFilmstrip": "Przełącz filmstrip",
"videomute": "Przełączanie wyciszonego filmu wideo",
"videoblur": "Przełącz rozmazanie obrazu"
"videoblur": "Przełącz rozmazanie obrazu",
"selectBackground": "Wybierz tło",
"expand": "Rozwiń",
"collapse": "Zwiń"
},
"addPeople": "Dodaj ludzi do swojej rozmowy",
"audioSettings": "Ustawienia audio",
"videoSettings": "Ustawienia video",
"audioOnlyOff": "Wyłącz tryb słabego łącza",
"audioOnlyOn": "Włącz tryb słabego łącza",
"audioRoute": "Wybierz urządzenie dźwiękowe",
"authenticate": "Uwierzytelnianie",
"boo": "Buczenie",
"callQuality": "Zarządzanie jakością obrazu",
"chat": "Otwórz / Zamknij okno czatu",
"clap": "Klaskanie",
"closeChat": "Zamknij czat",
"closeReactionsMenu": "Zamknij reakcje",
"disableReactionSounds": "Wyłącz dźwięki reakcji dla tego spotkania",
"documentClose": "Zamknij udostępniony dokument",
"documentOpen": "Otwarty udostępniony dokument",
"download": "Pobierz nasze aplikacje",
@@ -732,6 +943,8 @@
"hangup": "Opuść spotkanie",
"help": "Pomoc",
"invite": "Zaproś uczestników",
"laugh": "Śmiech",
"like": "Kciuk w górę",
"lobbyButtonDisable": "Wyłącz tryb lobby",
"lobbyButtonEnable": "Włącz tryb lobby",
"login": "Zaloguj",
@@ -741,6 +954,7 @@
"moreOptions": "Więcej opcji",
"mute": "Włącz / Wyłącz mikrofon",
"muteEveryone": "Wycisz wszystkich",
"muteEveryonesVideo": "Wyłącz wszystkim kamery",
"noAudioSignalTitle": "Brak sygnału audio!",
"noAudioSignalDesc": "Jeżeli celowo nie wyciszyłeś mikrofonu w ustawieniach systemowych spróbuj innego urządzenia.",
"noAudioSignalDescSuggestion": "Jeżeli celowo nie wyciszyłeś mikrofonu w ustawieniach systemowych spróbuj sugerowanego urządzenia.",
@@ -749,28 +963,39 @@
"noisyAudioInputTitle": "Twój mikrofon powoduje zakłócenia!",
"noisyAudioInputDesc": "Wygląda na to, że Twój mikrofon powoduje zakłócenia.",
"openChat": "Otwórz czat",
"openReactionsMenu": "Otwórz reakcje",
"participants": "Uczestnicy",
"pip": "Wprowadź tryb obrazu w obrazie",
"privateMessage": "Wyślij wiadomość prywatną",
"profile": "Edytuj swój profil",
"raiseHand": "Podnieś / Opuść rękę",
"raiseYourHand": "Podnieś rękę",
"reactionBoo": "Wyślij buczenie",
"reactionClap": "Wyślij klaskanie",
"reactionLaugh": "Wyślij śmiech",
"reactionLike": "Wyślij kciuk w górę",
"reactionSilence": "Wyślij cisza",
"reactionSurprised": "Wyślij zaskoczony",
"security": "Opcje zabezpieczeń",
"Settings": "Ustawienia",
"shareaudio": "Udostępnij audio",
"sharedvideo": "Udostępnij wideo z Youtube",
"shareRoom": "Zaproś kogoś",
"shortcuts": "Wyświetl skróty",
"silence": "Cisza",
"speakerStats": "Statystyki mówców",
"startScreenSharing": "Zacznij współdzielenie ekranu",
"startSubtitles": "Uruchom napisy",
"stopScreenSharing": "Zatrzymaj współdzielenie ekranu",
"stopAudioSharing": "Zakończ udostępnianie audio",
"stopScreenSharing": "Zakończ współdzielenie ekranu",
"stopSubtitles": "Zatrzymaj napisy",
"stopSharedVideo": "Zatrzymaj wideo z YouTube",
"surprised": "Zaskoczony",
"talkWhileMutedPopup": "Próbujesz mówić? Jesteś wyciszony.",
"tileViewToggle": "Przełączanie kafelkowego widoku",
"toggleCamera": "Przełączanie kamery",
"videomute": "Włącz / Wyłącz kamerę",
"startvideoblur": "Rozmaż moje tło",
"stopvideoblur": "Wyłącz rozmazanie tła"
"selectBackground": "Wybierz tło"
},
"transcribing": {
"ccButtonTooltip": "Uruchom / Zatrzymaj napisy",
@@ -796,6 +1021,7 @@
"react-nativeGrantPermissions": "Wybierz <b><i>Pozwól</i></b>, gdy przeglądarka zapyta o pozwolenie.",
"safariGrantPermissions": "Wybierz <b><i>OK</i></b>, gdy przegladarka zapyta o pozwolenie."
},
"volumeSlider": "Kontrola głośności",
"videoSIPGW": {
"busy": "Pracujemy nad uwolnieniem zasobów. Prosimy spróbować za kilka minut.",
"busyTitle": "Usługa pokoju jest obecnie zajęta",
@@ -818,15 +1044,16 @@
"ld": "LD",
"ldTooltip": "Podgląd obrazu w niskiej rozdzielczości",
"lowDefinition": "Niska rozdzielczość",
"onlyAudioAvailable": "Dostępny jest tylko dźwięk",
"onlyAudioSupported": "Obsługujemy tylko dźwięk w tej przeglądarce.",
"sd": "SD",
"sdTooltip": "Podgląd obrazu w standardowej rozdzielczości",
"standardDefinition": "Standardowa rozdzielczość"
},
"videothumbnail": {
"connectionInfo": "Informacje o połączeniu",
"domute": "Wyciszenie",
"domuteVideo": "Wyłącz kamerę",
"domuteOthers": "Wycisz pozostałych",
"domuteVideoOfOthers": "Wyłącz kamerę pozostałym",
"flip": "Odwrócenie",
"grantModerator": "Przyznaj prawa moderatora",
"kick": "Wyrzuć",
@@ -835,9 +1062,11 @@
"muted": "Wyciszony",
"remoteControl": "Kontrola zdalna",
"show": "Pokaż na scenie",
"videomute": "Uczestnik zatrzymał kamerę"
"videomute": "Uczestnik zatrzymał kamerę",
"videoMuted": "Kamera wyłączona"
},
"welcomepage": {
"addMeetingName": "Dodaj nazwę spotkania",
"accessibilityLabel": {
"join": "Stuknij aby dołączyć",
"roomname": "Podaj nazwę sali konferencyjnej"
@@ -854,8 +1083,14 @@
"getHelp": "Pomoc",
"go": "Dalej",
"goSmall": "Dalej",
"headerTitle": "Jitsi Meet",
"headerSubtitle": "Bezpieczne i wysokiej jakości spotkania",
"info": "Informacje",
"join": "Utwórz / Dołącz",
"jitsiOnMobile": "Jitsi mobile pobierz appkę i rozpocznij spotkanie z dowolnego miejsca",
"mobileDownLoadLinkIos": "Pobierz appkę dla systemu iOS",
"mobileDownLoadLinkAndroid": "Pobierz appkę dla systemu Android",
"mobileDownLoadLinkFDroid": "Pobierz appkę dla systemu F-Droid",
"moderatedMessage": "lub <a href=\"{{url}}\" rel=\"noopener noreferrer\" target=\"_blank\">zarezerwuj adres spotkania</a> jeśli jesteś jedynym moderatorem.",
"privacy": "Polityka prywatności",
"recentList": "Niedawno",
@@ -866,9 +1101,18 @@
"roomname": "Podaj nazwę sali konferencyjnej",
"roomnameHint": "Wprowadź nazwę lub adres URL pokoju, do którego chcesz dołączyć. Możesz wymyślić nazwę, po prostu pozwól, aby osoby, z którymi się spotykasz, znały ją tak, aby wpisały tę samą nazwę.",
"sendFeedback": "Wyślij opinię",
"startMeeting": "Rozpocznij spotkanie",
"terms": "Warunki korzystania",
"title": "Bezpieczna, w pełni funkcjonalna i całkowicie bezpłatna wideokonferencja"
},
"title": "Bezpieczna, w pełni funkcjonalna i całkowicie bezpłatna wideokonferencja",
"logo": {
"calendar": "Logo kalendarza",
"microsoftLogo": "Logo Microsoftu",
"logoDeepLinking": "Logo Jitsi meet",
"desktopPreviewThumbnail": "Miniatura podglądu pulpitu",
"googleLogo": "Logo Google",
"policyLogo": "Logo polityki"
}
},
"lonelyMeetingExperience": {
"button": "Zaproś innych uczestników",
"youAreAlone": "Tylko ty uczestniczysz w tym spotkaniu"
@@ -877,6 +1121,8 @@
"header": "Centrum pomocy"
},
"lobby": {
"admit": "Pozwól",
"admitAll": "Pozwól wszystkim",
"knockingParticipantList": "Oczekujący uczestnicy",
"allow": "Zezwól",
"backToKnockModeButton": "Brak hasła, poproś o dołączenie",
@@ -889,6 +1135,7 @@
"enableDialogText": "Lobby umożliwia zabezpieczenie spotkania przed dostępem niechcianych osób. Uczestnik może dołączyć do spotkania tylko po zaakceptowaniu przez moderatora.",
"enterPasswordButton": "Hasło spotkania",
"enterPasswordTitle": "Wprowadź hasło aby dołączyć",
"errorMissingPassword": "Proszę wprowadź hasło do spotkania",
"invalidPassword": "Nieprawidłowe hasło",
"joiningMessage": "Dołączysz do spotkania po zaakceptowaniu Twojej prośby",
"joinWithPasswordMessage": "Dołączanie z hasłem, proszę czekać...",
@@ -907,6 +1154,7 @@
"passwordField": "Wprowadź hasło",
"passwordJoinButton": "Dołącz",
"reject": "Odrzuć",
"rejectAll": "Odrzuć wszystkich",
"toggleLabel": "Włącz / Wyłącz lobby"
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -5,6 +5,7 @@
"copyInvite": "Copiar convite da reunião",
"copyLink": "Copiar link da reunião",
"copyStream": "Copiar link da transmissão ao vivo",
"contacts": "contatos",
"countryNotSupported": "Ainda não suportamos este destino.",
"countryReminder": "Ligando de fora dos EUA? Por favor, certifique-se de começar com o código do país!",
"defaultEmail": "Seu email padrão",
@@ -16,18 +17,14 @@
"inviteMoreMailSubject": "Entre na reunião {{appName}}",
"inviteMorePrompt": "Convide mais pessoas",
"linkCopied": "Link copiado para a área de transferência",
"loading": "Procurando por pessoas e números de telefone",
"loadingNumber": "Validando o número de telefone",
"loadingPeople": "Procurando por pessoas para convidar",
"noResults": "Nenhum resultado de busca correspondente",
"noValidNumbers": "Por favor, digite um número de telefone",
"outlookEmail": "E-mail Outlook ",
"searchNumbers": "Adicionar números de telefone",
"searchPeople": "Pesquisar pessoas",
"searchPeopleAndNumbers": "Pesquisar por pessoas ou adicionar seus números de telefone",
"phoneNumbers": "números de telefone",
"searching": "Procurando...",
"shareInvite": "Compartilhar convite da reunião",
"shareLink": "Compartilhando o link da reunião",
"shareStream": "Compartilhar o link da transmissão ao vivo",
"sipAddresses": "endereços SIP",
"telephone": "Telefone: {{number}}",
"title": "Convide pessoas para sua reunião",
"yahooEmail": "E-mail Yahoo"
@@ -61,6 +58,7 @@
"today": "Hoje"
},
"chat": {
"enter": "Entrar no bate-papo",
"error": "Erro: sua mensagem não foi enviada. Motivo: {{error}}",
"fieldPlaceHolder": "Digite sua mensagem aqui",
"messagebox": "Digite uma mensagem",
@@ -68,16 +66,23 @@
"noMessagesMessage": "Não há mensagens na reunião ainda. Inicie uma conversa aqui!",
"nickname": {
"popover": "Escolha um apelido",
"title": "Digite um apelido para usar o bate-papo"
"title": "Digite um apelido para usar o bate-papo",
"titleWithPolls": "Digite um apelido para usar o bate-papo"
},
"privateNotice": "Mensagem privada para {{recipient}}",
"title": "Bate-papo",
"you": "você"
"titleWithPolls": "Bate-papo",
"you": "você",
"message": "Mensagem",
"messageAccessibleTitle": "{{user}} disse:",
"messageAccessibleTitleMe": "Você disse:",
"smileysPanel": "Painel de Emojis"
},
"chromeExtensionBanner": {
"installExtensionText": "Instale a extensão para integrar com Google Calendar e Office 365",
"buttonText": "Instalar extensão do Chrome",
"dontShowAgain": "Não me mostre isso de novo"
"dontShowAgain": "Não me mostre isso de novo",
"close": "Fechar"
},
"connectingOverlay": {
"joiningRoom": "Conectando você à reunião…"
@@ -174,12 +179,14 @@
"alreadySharedVideoMsg": "Outro participante já está compartilhando um vídeo. Esta conferência permite apenas um vídeo compartilhado por vez.",
"alreadySharedVideoTitle": "Somente um vídeo compartilhado é permitido por vez",
"applicationWindow": "Janela de aplicativo",
"authenticationRequired": "Autenticação requerida",
"Back": "Voltar",
"cameraConstraintFailedError": "Sua câmera não satisfaz algumas condições necessárias.",
"cameraNotFoundError": "A câmera não foi encontrada.",
"cameraNotSendingData": "Estamos incapazes de acessar sua câmera. Verifique se outra aplicação está usando este dispositivo, selecione outro dispositivo do menu de configurações ou recarregue a aplicação.",
"cameraNotSendingDataTitle": "Incapaz de acessar a câmera",
"cameraPermissionDeniedError": "Não foi permitido acessar a sua câmera. Você ainda pode entrar na conferência, mas sem exibir o seu vídeo. Clique no botão da câmera para tentar reparar.",
"cameraTimeoutError": "Não foi possível iniciar fonte de vídeo. Tempo esgotado!",
"cameraUnknownError": "Não pode usar a câmera por uma razão desconhecida.",
"cameraUnsupportedResolutionError": "Sua câmera não suporta a resolução de vídeo requerida.",
"Cancel": "Cancelar",
@@ -194,7 +201,7 @@
"connectError": "Oops! Alguma coisa está errada e nós não pudemos conectar à conferência.",
"connectErrorWithMsg": "Oops! Alguma coisa está errada e não podemos conectar à conferência: {{msg}}",
"connecting": "Conectando",
"contactSupport": "Contate o suporte",
"contactSupport": "Entrar em contato com o suporte",
"copied": "Copiado",
"copy": "Copiar",
"dismiss": "Dispensar",
@@ -204,28 +211,30 @@
"e2eeLabel": "Enable End-to-End Encryption",
"e2eeWarning": "WARNING: Not all participants in this meeting seem to have support for End-to-End encryption. If you enable it they won't be able to see nor hear you.",
"enterDisplayName": "Digite seu nome aqui",
"embedMeeting": "Reunião em formato compacto",
"error": "Erro",
"gracefulShutdown": "Nosso serviço está em manutenção. Tente novamente mais tarde.",
"grantModeratorDialog": "Tem certeza que quer participar como moderador da reunião?",
"grantModeratorTitle": "Permitir moderador",
"hideShareAudioHelper": "Não mostre este diálogo novamente",
"IamHost": "Eu sou o anfitrião",
"incorrectRoomLockPassword": "Senha incorreta",
"incorrectPassword": "Usuário ou senha incorretos",
"internalError": "Oops! Alguma coisa está errada. O seguinte erro ocorreu: {{error}}",
"internalErrorTitle": "Erro interno",
"kickMessage": "Você pode contatar com {{participantDisplayName}} para obter mais detalhes.",
"kickMessage": "Você pode entrar em contato com {{participantDisplayName}} para obter mais detalhes.",
"kickParticipantButton": "Remover",
"kickParticipantDialog": "Tem certeza de que deseja remover este participante?",
"kickParticipantTitle": "Chutar este participante?",
"kickTitle": "Ai! {{participantDisplayName}} expulsou você da reunião",
"kickParticipantTitle": "Remover este participante?",
"kickTitle": "{{participantDisplayName}} removeu você da reunião",
"liveStreaming": "Transmissão ao Vivo",
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Não é possível transmitir enquanto a gravação está ativa",
"liveStreamingDisabledForGuestTooltip": "Visitantes não podem iniciar transmissão ao vivo.",
"liveStreamingDisabledTooltip": "Iniciar transmissão ao vivo desativada.",
"lockMessage": "Falha ao travar a conferência.",
"lockMessage": "Falha ao bloquear a conferência.",
"lockRoom": "Adicionar reunião $t(lockRoomPasswordUppercase)",
"lockTitle": "Bloqueio falhou",
"logoutQuestion": "Deseja encerrar a sessão e finalizar a conferência?",
"login": "Entrar",
"logoutTitle": "Encerrar sessão",
"maxUsersLimitReached": "O limite para o número máximo de participantes foi atingido. A conferência está cheia. Entre em contato com o proprietário da reunião ou tente novamente mais tarde!",
"maxUsersLimitReachedTitle": "Limite máximo de participantes atingido",
@@ -234,28 +243,42 @@
"micNotSendingData": "Vá para as configurações do seu computador para ativar o som do microfone e ajustar seu nível",
"micNotSendingDataTitle": "Seu microfone está mudo pelas configurações do sistema",
"micPermissionDeniedError": "Não foi permitido acessar o seu microfone. Você ainda pode entrar na conferência, mas sem enviar áudio. Clique no botão do microfone para tentar reparar.",
"micTimeoutError": "Não foi possível iniciar fonte de áudio. Tempo esgotado!",
"micUnknownError": "Não pode usar o microfone por uma razão desconhecida.",
"muteEveryoneElseDialog": "Uma vez silenciados, você não poderá reativar o som deles, mas eles poderão reativar o som a qualquer momento.",
"muteEveryoneElseTitle": "Silenciar todo mundo exceto {{whom}}?",
"muteEveryoneDialog": "Tem certeza que deseja silenciar todos? Você não poderá ativar o som deles, mas eles podem ativar o som eles mesmo a qualquer momento.",
"muteEveryoneTitle": "Silenciar todos?",
"muteEveryoneElsesVideoDialog": "Você não poderá reativar posteriormente, mas cada participante pode ativar sua própria câmera a qualquer momento.",
"muteEveryoneElsesVideoTitle": "Desativar a câmera de todos exceto {{whom}}?",
"muteEveryonesVideoDialog": "Tem certeza que deseja desativar a câmera de todos? Você não poderá reativar posteriormente, mas cada participante pode ativar sua própria câmera a qualquer momento.",
"muteEveryonesVideoDialogOk": "Desabilitar",
"muteEveryonesVideoTitle": "Desativar a câmera de todos?",
"muteEveryoneSelf": "a si próprio",
"muteEveryoneStartMuted": "Todos iniciam silenciados daqui para frente",
"muteParticipantBody": "Você não está habilitado para tirar o mudo deles, mas eles podem tirar o mudo deles mesmos a qualquer tempo.",
"muteParticipantButton": "Mudo",
"muteParticipantDialog": "Tem certeza de que deseja silenciar este participante? Você não poderá desfazer isso, mas o participante pode reabilitar o áudio a qualquer momento.",
"muteParticipantsVideoDialog": "Tem certeza de que deseja desativar a câmera deste participante? Você não poderá reativar posteriormente, mas o participante pode ativar sua própria câmera a qualquer momento.",
"muteParticipantTitle": "Deixar mudo este participante?",
"Ok": "Ok",
"passwordLabel": "A reunião foi travada por um participante. Por favor, insira a $t(lockRoomPassword) para entrar.",
"muteParticipantsVideoButton": "Desativar a câmera",
"muteParticipantsVideoTitle": "Desativar a câmera deste participante?",
"muteParticipantsVideoBody": "Você não poderá reativar posteriormente, mas o participante pode ativar sua própria câmera a qualquer momento.",
"noDropboxToken": "Nenhum token do Dropbox válido",
"Ok": "OK",
"password": "Senha",
"passwordLabel": "A reunião foi bloqueada por um participante. Por favor, insira a $t(lockRoomPassword) para entrar.",
"passwordNotSupported": "A configuração de uma reunião $t(lockRoomPassword) não é suportada.",
"passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) não suportado",
"passwordRequired": "$t(lockRoomPasswordUppercase) requerido",
"permissionErrorTitle": "Permissão necessária",
"permissionCameraRequiredError": "É necessário permitir acesso à câmera para participar de reuniões com vídeo. Ative a permissão nas configurações",
"permissionMicRequiredError": "É necessário permitir acesso ao microfone para participar de reuniões com áudio. Ative a permissão nas configurações",
"popupError": "Seu navegador está bloqueando janelas popup deste site. Habilite os popups nas configurações de segurança no seu navegador e tente novamente.",
"popupErrorTitle": "Popup bloqueado",
"readMore": "mais...",
"recording": "Gravando",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Não é possível transmitir enquanto a gravação está ativa",
"recordingDisabledForGuestTooltip": "Visitantes não podem iniciar gravações.",
"recordingDisabledTooltip": "Iniciar gravação desativada.",
"rejoinNow": "Reconectar agora",
"remoteControlAllowedMessage": "{{user}} aceitou sua requisição de controle remoto!",
@@ -272,7 +295,7 @@
"reservationError": "Erro de sistema de reserva",
"reservationErrorMsg": "Código do erro: {{code}}, mensagem: {{msg}}",
"retry": "Tentar novamente",
"screenSharingAudio": "Compartilha áudio",
"screenSharingAudio": "Compartilhar áudio",
"screenSharingFailed": "Oops! Alguma coisa de errado aconteceu, não é possível habilitar o compartilhamento de tela!",
"screenSharingFailedTitle": "Falha ao compartilhar a tela!",
"screenSharingPermissionDeniedError": "Oops! Alguma coisa está errada com suas permissões de compartilhamento de tela. Recarregue e tente de novo.",
@@ -282,15 +305,26 @@
"sendPrivateMessageTitle": "Enviar em privado?",
"serviceUnavailable": "Serviço indisponível",
"sessTerminated": "Chamada terminada",
"sessionRestarted": "Chamada reiniciada pelo bridge",
"Share": "Compartilhar",
"shareAudio": "Continuar",
"shareAudioTitle": "Como compartilhar áudio",
"shareAudioWarningTitle": "Você precisa parar o compartilhamento de tela antes de compartilhar seu áudio",
"shareAudioWarningH1": "Se você quiser compartilhar apenas seu áudio:",
"shareAudioWarningD1": "você precisa parar o compartilhamento de tela antes de compartilhar seu áudio.",
"shareAudioWarningD2": "você precisa reiniciar o compartilhamento de tela e selecionar a opção \"compartilhar áudio\".",
"shareMediaWarningGenericH2": "Se você quiser compartilhar sua tela e seu áudio",
"shareVideoLinkError": "Por favor, forneça um link do youtube correto.",
"shareVideoTitle": "Compartilhar um vídeo",
"shareYourScreen": "Compartilhar sua tela",
"shareYourScreenDisabled": "Compartilhamento de tela desativada.",
"shareYourScreenDisabledForGuest": "Visitantes não podem compartilhar tela.",
"startLiveStreaming": "Iniciar transmissão ao vivo",
"startRecording": "Iniciar gravação",
"startRemoteControlErrorMessage": "Um erro ocorreu enquanto tentava iniciar uma sessão de controle remoto!",
"shareScreenWarningTitle": "Você precisa parar o compartilhamento de áudio antes de compartilhar sua tela",
"shareScreenWarningH1": "Se você quiser compartilhar apenas sua tela:",
"shareScreenWarningD1": "você precisa parar o compartilhamento de áudio antes de compartilhar sua tela.",
"shareScreenWarningD2": "você precisa parar o compartilhamento de áudio, iniciar o compartilhamento de tela e selecionar a opção \"compartilhar áudio\".",
"stopLiveStreaming": "Parar transmissão ao vivo",
"stopRecording": "Parar a gravação",
"stopRecordingWarning": "Tem certeza que deseja parar a gravação?",
@@ -303,13 +337,20 @@
"tokenAuthFailedTitle": "Falha de autenticação",
"transcribing": "Transcrevendo",
"unlockRoom": "Remove a reunião $t(lockRoomPassword)",
"user": "Usuário",
"userIdentifier": "identificação do usuário",
"userPassword": "senha do usuário",
"videoLink": "Link do vídeo",
"viewUpgradeOptions": "Ver opções de atualização",
"viewUpgradeOptionsContent": "Para obter acesso ilimitado a recursos premium tais como gravação, transcrição, streaming RTMP e muito mais, você precisa atualizar seu plano.",
"viewUpgradeOptionsTitle": "Você descobriu um recurso premium!",
"WaitForHostMsg": "A conferência <b>{{room}}</b> ainda não começou. Se você é o anfitrião, faça a autenticação. Do contrário, aguarde a chegada do anfitrião.",
"WaitForHostMsgWOk": "A conferência <b>{{room}}</b> ainda não começou. Se você é o anfitrião, pressione Ok para autenticar. Do contrário, aguarde a chegada do anfitrião.",
"WaitingForHost": "Esperando o anfitrião...",
"WaitForHostMsgWOk": "A conferência <b>{{room}}</b> ainda não começou. Se você é o anfitrião, pressione OK para autenticar. Do contrário, aguarde a chegada do anfitrião.",
"WaitingForHostTitle": "Esperando o anfitrião...",
"Yes": "Sim",
"yourEntireScreen": "Toda sua tela"
"yourEntireScreen": "Toda sua tela",
"remoteUserControls": "Controles de usuários remotos de {{username}}",
"localUserControls": "Controles de usuários locais"
},
"dialOut": {
"statusMessage": "está agora {{status}}"
@@ -323,27 +364,27 @@
"embedMeeting": {
"title": "Reunião em formato compacto"
},
"virtualBackground": {
"apply": "Aplicar",
"title": "Fundos virtuais",
"blur": "Desfoque",
"slightBlur": "Desfoque suave",
"removeBackground": "Remover fundo",
"addBackground": "Adicionar novo fundo",
"pleaseWait": "Aguarde...",
"none": "Nenhum",
"uploadedImage": "Imagem enviada {{index}}",
"deleteImage": "Excluir imagem",
"image1" : "Praia",
"image2" : "Parede branca neutra",
"image3" : "Quarto branco vazio",
"image4" : "Luminária preta",
"image5" : "Montanha",
"image6" : "Floresta",
"image7" : "Alvorada",
"desktopShareError": "Não foi possível compartilhar o desktop",
"desktopShare":"Compartilhar desktop",
"webAssemblyWarning": "Não há suporte para WebAssembly"
"virtualBackground": {
"apply": "Aplicar",
"title": "Fundos virtuais",
"blur": "Desfoque",
"slightBlur": "Desfoque suave",
"removeBackground": "Remover fundo",
"addBackground": "Adicionar novo fundo",
"pleaseWait": "Aguarde...",
"none": "Nenhum",
"uploadedImage": "Imagem enviada {{index}}",
"deleteImage": "Excluir imagem",
"image1": "Praia",
"image2": "Parede branca neutra",
"image3": "Quarto branco vazio",
"image4": "Luminária preta",
"image5": "Montanha",
"image6": "Floresta",
"image7": "Alvorada",
"desktopShareError": "Não foi possível compartilhar o desktop",
"desktopShare": "Compartilhar desktop",
"webAssemblyWarning": "Não há suporte para WebAssembly"
},
"feedback": {
"average": "Média",
@@ -352,7 +393,8 @@
"good": "Boa",
"rateExperience": "Avalie sua experiência na reunião",
"veryBad": "Muito ruim",
"veryGood": "Muito boa"
"veryGood": "Muito boa",
"star": "Estrela"
},
"incomingCall": {
"answer": "Responder",
@@ -369,6 +411,7 @@
"country": "País",
"dialANumber": "Para entrar na reunião, disque um desses números e depois insira o PIN.",
"dialInConferenceID": "PIN:",
"copyNumber": "Copiar número",
"dialInNotSupported": "Desculpe, a discagem não é atualmente suportada.",
"dialInNumber": "Discar:",
"dialInSummaryError": "Ocorreu um erro ao buscar a informação de discagem. Tente novamente mais tarde.",
@@ -377,6 +420,11 @@
"inviteLiveStream": "Para ver a transmissão ao vivo da reunião, clique no link: {{url}}",
"invitePhone": "Para participar por telefone, toque aqui: {{number}},,{{conferenceID}}#\n",
"invitePhoneAlternatives": "Procurando um número de discagem diferente?\nVeja os números de discagem da reunião: {{url}} \n\n\nSe você também estiver discando através de um telefone da sala, participe sem conectar-se ao áudio: {{silentUrl}}",
"inviteSipEndpoint": "Para participar usando o endereço SIP, insira isto: {{sipUri}}",
"inviteTextiOSPersonal": "{{name}} está convidando você para uma reunião.",
"inviteTextiOSJoinSilent": "Se você estiver discando através de um telefone da sala, use este link para participar sem conectar-se ao áudio: {{silentUrl}}.",
"inviteTextiOSInviteUrl": "Clique no seguinte link para entrar: {{inviteUrl}}.",
"inviteTextiOSPhone": "Para participar por telefone, use este número: {{number}},,{{conferenceID}}#. Se você estiver procurando um número diferente, esta é a lista completa: {{didUrl}}.",
"inviteURLFirstPartGeneral": "Você foi convidado para uma reunião.",
"inviteURLFirstPartPersonal": "{{name}} está convidando você para uma reunião.\n",
"inviteURLSecondPart": "\nEntre na reunião:\n{{url}}\n",
@@ -387,6 +435,7 @@
"noRoom": "Nenhuma sala foi especificada para entrar.",
"numbers": "Números de discagem",
"password": "$t(lockRoomPasswordUppercase):",
"sip": "endereço SIP",
"title": "Compartilhar",
"tooltip": "Compartilhar link e discagem para esta reunião",
"label": "Informações da reunião"
@@ -405,6 +454,7 @@
"support": "Suporte",
"supportMsg": "Se isso continuar acontecendo, chegar a"
},
"jitsiHome": "Logo de {{logo}} (direciona para página inicial)",
"keyboardShortcuts": {
"focusLocal": "Focar no seu vídeo",
"focusRemote": "Focar no vídeo de outro participante",
@@ -417,10 +467,10 @@
"showSpeakerStats": "Exibir estatísticas do alto falante",
"toggleChat": "Abrir ou fechar o painel de bate-papo",
"toggleFilmstrip": "Mostrar ou ocultar miniaturas de vídeo",
"toggleParticipantsPane": "Exibir ou ocultar o quadro de participantes",
"toggleScreensharing": "Trocar entre câmera e compartilhamento de tela",
"toggleShortcuts": "Mostrar ou ocultar atalhos de teclado",
"videoMute": "Iniciar ou parar sua câmera",
"videoQuality": "Gerenciar qualidade da chamada"
"videoMute": "Iniciar ou parar sua câmera"
},
"liveStreaming": {
"limitNotificationDescriptionWeb": "Devido a alta demanda sua transmissão será limitada a {{limit}} minutos. Para transmissão ilimitada tente <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
@@ -496,19 +546,24 @@
"focus": "Foco da conferência",
"focusFail": "{{component}} não disponível - tente em {{ms}} seg",
"grantedTo": "Direitos de moderador concedido para {{to}}!",
"hostAskedUnmute": "O anfitrião deseja que você ative o som",
"invitedOneMember": "{{name}} foi convidado(a)",
"invitedThreePlusMembers": "{{name}} e {{count}} outros foram convidados",
"invitedTwoMembers": "{{first}} e {{second}} foram convidados",
"kickParticipant": "{{kicked}} foi chutado por {{kicker}}",
"kickParticipant": "{{kicked}} foi removido por {{kicker}}",
"me": "Eu",
"moderator": "Direitos de moderador concedidos!",
"muted": "Você iniciou uma conversa em mudo.",
"mutedTitle": "Você está mudo!",
"mutedRemotelyTitle": "Você foi silenciado por {{participantDisplayName}}!",
"mutedRemotelyDescription": "Você sempre pode ativar o som quando estiver pronto para falar. Retire o som quando terminar para manter o ruído longe da reunião.",
"videoMutedRemotelyTitle": "Sua câmera foi desativada por {{participantDisplayName}}!",
"videoMutedRemotelyDescription": "Você pode ativar sua câmera a qualquer momento.",
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) removido por outro participante",
"passwordSetRemotely": "$t(lockRoomPasswordUppercase) definido por outro participante",
"raisedHand": "{{name}} gostaria de falar.",
"screenShareNoAudio": "O compartilhamento de áudio não foi selecionado na tela de escolha de janela.",
"screenShareNoAudioTitle": "Compartilhamento de áudio não selecionado",
"somebody": "Alguém",
"startSilentTitle": "Você entrou sem saída de áudio!",
"startSilentDescription": "Volte à reunião para habilitar o áudio",
@@ -521,18 +576,41 @@
"OldElectronAPPTitle": "Vulnerabilidade de segurança!",
"oldElectronClientDescription1": "Você está usando um versão antiga do cliente Jitsi Meet que possui uma conhecida vulnerabilidade de segurança. Por favor tenha certeza de atulizar para a nossa ",
"oldElectronClientDescription2": "última versão",
"oldElectronClientDescription3": " agora!"
"oldElectronClientDescription3": " agora!",
"moderationInEffectDescription": "Levante a mão se quiser falar",
"moderationInEffectCSDescription": "Levante a mão se quiser compartilhar seu vídeo",
"moderationInEffectVideoDescription": "Levante a mão se quiser que seu vídeo fique visível",
"moderationInEffectTitle": "O microfone foi silenciado pelo moderador",
"moderationInEffectCSTitle": "O compartilhamento de conteúdo foi desativado pelo moderador",
"moderationInEffectVideoTitle": "O vídeo foi desativado pelo moderador",
"moderationRequestFromModerator": "O anfitrião deseja que você ative o som",
"moderationRequestFromParticipant": "Quer falar",
"moderationStartedTitle": "Moderação iniciada",
"moderationStoppedTitle": "Moderação encerrada",
"moderationToggleDescription": "por {{participantDisplayName}}",
"raiseHandAction": "Levantar a mão",
"groupTitle": "Notificações"
},
"participantsPane": {
"close": "Fechar",
"headings": {
"lobby": "Sala de espera ({{count}})",
"participantsList": "Participantes da reunião ({{count}})"
},
"actions": {
"invite": "Convidar alguém",
"muteAll": "Silenciar todos",
"stopVideo": "Parar vídeo"
"participantsPane": {
"close": "Fechar",
"header": "Participantes",
"headings": {
"lobby": "Sala de espera ({{count}})",
"participantsList": "Participantes da reunião ({{count}})",
"waitingLobby": "Aguardando na sala de espera ({{count}})"
},
"actions": {
"allow": "Permitir aos participantes:",
"blockEveryoneMicCamera": "Bloquear microfone e câmera de todos",
"invite": "Convidar alguém",
"askUnmute": "Pedir para ativar som",
"mute": "Silenciar",
"muteAll": "Silenciar todos",
"muteEveryoneElse": "Silenciar todos os demais",
"startModeration": "Ativar som eles mesmos ou iniciar vídeo",
"stopEveryonesVideo": "Parar vídeo de todos",
"stopVideo": "Parar vídeo",
"unblockEveryoneMicCamera": "Desbloquear microfone e câmera de todos"
}
},
"passwordSetRemotely": "Definido por outro participante",
@@ -588,7 +666,8 @@
"lookGood": "Seu microfone está funcionando corretamente",
"or": "ou",
"premeeting": "Pré-reunião",
"showScreen": "Habiltar tela pré-reunião",
"showScreen": "Habilitar tela pré-reunião",
"keyboardShortcuts": "Habilitar atalhos de teclado",
"startWithPhone": "Iniciar com o áudio da ligação",
"screenSharingError": "Erro de compartilhamento de tela:",
"videoOnlyError": "Erro de vídeo:",
@@ -610,6 +689,7 @@
"ringing": "Tocando..."
},
"profile": {
"avatar": "avatar",
"setDisplayNameLabel": "Definir seu nome de exibição",
"setEmailInput": "Digite e-mail",
"setEmailLabel": "Definir seu e-mail de Gravatar",
@@ -624,12 +704,15 @@
"beta": "BETA",
"busy": "Estamos trabalhando para liberar recursos de gravação. Tente novamente em alguns minutos.",
"busyTitle": "Todas as gravações estão atualmente ocupadas",
"copyLink": "Copiar Link",
"error": "A gravação falhou. Tente novamente.",
"errorFetchingLink": "Erro ao buscar link da gravação.",
"expandedOff": "Gravação finalizada",
"expandedOn": "A reunião está sendo gravada.",
"expandedPending": "Iniciando gravação...",
"failedToStart": "Falha ao iniciar a gravação",
"fileSharingdescription": "Compartilhar gravação com participantes da reunião",
"linkGenerated": "Geramos um link para sua gravação.",
"live": "AOVIVO",
"loggedIn": "Conectado como {{userName}}",
"off": "Gravação parada",
@@ -639,11 +722,13 @@
"pending": "Preparando para gravar a reunião...",
"rec": "REC",
"serviceDescription": "Sua gravação será salva pelo serviço de gravação",
"serviceDescriptionCloud": "Gravação na nuvem",
"serviceName": "Serviço de gravação",
"signIn": "Entrar",
"signOut": "Sair",
"unavailable": "Oops! O {{serviceName}} está indisponível. Estamos trabalhando para resolver o problema. Por favor, tente mais tarde.",
"unavailableTitle": "Gravação indisponível"
"unavailableTitle": "Gravação indisponível",
"uploadToCloud": "Enviar para a nuvem"
},
"sectionList": {
"pullToRefresh": "Puxe para atualizar"
@@ -662,8 +747,13 @@
"signedIn": "Atualmente acessando eventos do calendário para {{email}}. Clique no botão Desconectar abaixo para parar de acessar os eventos da agenda.",
"title": "Calendário"
},
"desktopShareFramerate": "Taxa de quadros do compartilhamento de desktop",
"desktopShareWarning": "Você precisa reiniciar o compartilhamento de tela para que as novas configurações tenham efeito.",
"desktopShareHighFpsWarning": "Uma taxa de quadros mais alta para compartilhamento de desktop pode afetar sua largura de banda. Você precisa reiniciar o compartilhamento de tela para que as novas configurações tenham efeito.",
"devices": "Dispositivos",
"followMe": "Todos me seguem",
"framesPerSecond": "quadros por segundo",
"incomingMessage": "Mensagem recebida",
"language": "Idioma",
"loggedIn": "Conectado como {{name}}",
"microphones": "Microfones",
@@ -671,12 +761,18 @@
"more": "Mais",
"name": "Nome",
"noDevice": "Nenhum",
"participantJoined": "Participante Entrou",
"participantLeft": "Participante Saiu",
"playSounds": "Tocar sons",
"sameAsSystem": "Igual ao sistema ({{label}})",
"selectAudioOutput": "Saída de áudio",
"selectCamera": "Câmera",
"selectMic": "Microfone",
"sounds": "Sons",
"speakers": "Alto-faltantes",
"startAudioMuted": "Todos iniciam mudos",
"startVideoMuted": "Todos iniciam ocultos",
"talkWhileMuted": "Falar mesmo silenciado",
"title": "Configurações"
},
"settingsView": {
@@ -716,6 +812,7 @@
},
"startupoverlay": {
"policyText": " ",
"genericTitle": "A reunião precisa usar seu microfone e câmera.",
"title": "O {{app}} precisa usar seu microfone e câmera."
},
"suspendedoverlay": {
@@ -727,12 +824,14 @@
"accessibilityLabel": {
"audioOnly": "Alternar para apenas áudio",
"audioRoute": "Selecionar o dispositivo de som",
"boo": "Vaia",
"callQuality": "Gerenciar qualidade do vídeo",
"cc": "Alternar legendas",
"chat": "Alternar para janela de chat",
"clap": "Aplauso",
"document": "Alternar para documento compartilhado",
"download": "Baixe nossos aplicativos",
"embedMeeting": "Reunião em modo compacto",
"embedMeeting": "Reunião em formato compacto",
"feedback": "Deixar feedback",
"fullScreen": "Alternar para tela cheia",
"grantModerator": "Atribuir Moderador",
@@ -740,6 +839,8 @@
"help": "Ajuda",
"invite": "Convidar pessoas",
"kick": "Remover participante",
"laugh": "Risada",
"like": "Gostei",
"lobbyButton": "Habilitar/desabilitar sala de espera",
"localRecording": "Alternar controles de gravação local",
"lockRoom": "Ativar/desativar senha de reunião",
@@ -748,36 +849,51 @@
"moreOptions": "Mostrar mais opções",
"mute": "Alternar mudo do áudio",
"muteEveryone": "Silenciar todos",
"muteEveryoneElse": "Silenciar todos os demais",
"muteEveryonesVideo": "Desativar a câmera de todos",
"muteEveryoneElsesVideo": "Desativar a câmera de todos os demais",
"participants": "Participantes",
"party": "Festa",
"pip": "Alternar modo Picture-in-Picture",
"privateMessage": "Enviar mensagem privada",
"profile": "Editar seu perfil",
"raiseHand": "Alternar levantar a mão",
"reactionsMenu": "Abrir / fechar menu de reações",
"recording": "Alternar gravação",
"remoteMute": "Silenciar participante",
"remoteVideoMute": "Desativar a câmera do participante",
"security": "Opções de segurança",
"Settings": "Alternar configurações",
"shareaudio": "Compartilhar áudio",
"sharedvideo": "Alternar compartilhamento de vídeo do YouTube",
"shareRoom": "Convidar alguém",
"shareYourScreen": "Alternar compartilhamento de tela",
"shortcuts": "Alternar atalhos",
"show": "Mostrar no palco",
"speakerStats": "Alternar estatísticas do apresentador",
"surprised": "Surpresa",
"tileView": "Alternar visualização em blocos",
"toggleCamera": "Alternar câmera",
"toggleFilmstrip": "Alterar tira de filme",
"videomute": "Alternar mudo do vídeo",
"videoblur": "Alternar desfoque de vídeo"
"videoblur": "Alternar desfoque de vídeo",
"selectBackground": "Selecionar Fundo",
"expand": "Expandir",
"collapse": "Recolher"
},
"addPeople": "Adicionar pessoas à sua chamada",
"audioSettings": "Configurações de áudio",
"videoSettings": "Configurações de vídeo",
"audioOnlyOff": "Desabilitar modo de largura de banda baixa",
"audioOnlyOn": "Habilitar modo de largura de banda baixa",
"audioRoute": "Selecionar o dispositivo de som",
"authenticate": "Autenticar",
"boo": "Vaia",
"callQuality": "Gerenciar qualidade do vídeo",
"chat": "Abrir ou fechar o bate-papo",
"clap": "Aplauso",
"closeChat": "Fechar chat",
"closeReactionsMenu": "Fechar menu de reações",
"documentClose": "Fechar documento compartilhado",
"documentOpen": "Abrir documento compartilhado",
"download": "Baixe nossos aplicativos",
@@ -791,6 +907,8 @@
"hangup": "Sair",
"help": "Ajuda",
"invite": "Convidar pessoas",
"laugh": "Risada",
"like": "Gostei",
"lobbyButtonDisable": "Desabilitar sala de espera",
"lobbyButtonEnable": "Habilitar sala de espera",
"login": "Iniciar sessão",
@@ -800,6 +918,7 @@
"moreOptions": "Mais opções",
"mute": "Mudo / Não mudo",
"muteEveryone": "Silenciar todos",
"muteEveryonesVideo": "Desativar a câmera de todos",
"noAudioSignalTitle": "Não há entrada de áudio vindo do seu microfone!",
"noAudioSignalDesc": "Se você não o desativou propositalmente das configurações do sistema ou do hardware, considere trocar o dispositivo.",
"noAudioSignalDescSuggestion": "Se você não o desativou propositalmente das configurações do sistema ou do hardware, considere trocar para o dispositivo sugerido.",
@@ -808,28 +927,38 @@
"noisyAudioInputTitle": "O seu microfone parece estar barulhento!",
"noisyAudioInputDesc": "Parece que o microfone está fazendo barulho, considere silenciar ou alterar o dispositivo.",
"openChat": "Abrir chat",
"openReactionsMenu": "Abrir menu de reações",
"participants": "Participantes",
"party": "Festa",
"pip": "Entrar em modo Quadro-a-Quadro",
"privateMessage": "Enviar mensagem privada",
"profile": "Editar seu perfil",
"raiseHand": "Erguer / Baixar sua mão",
"raiseYourHand": "Levantar a mão",
"reactionBoo": "Enviar reação de vaia",
"reactionClap": "Enviar reação de aplauso",
"reactionLaugh": "Enviar reação de risada",
"reactionLike": "Enviar reação de gostei",
"reactionParty": "Enviar reação de festa",
"reactionSurprised": "Enviar reação de surpresa",
"security": "Opções de segurança",
"Settings": "Configurações",
"shareaudio": "Compartilhar áudio",
"sharedvideo": "Compartilhar um vídeo do YouTube",
"shareRoom": "Convidar alguém",
"shortcuts": "Ver atalhos",
"speakerStats": "Estatísticas do Apresentador",
"startScreenSharing": "Iniciar compart. de tela",
"startSubtitles": "Iniciar legendas",
"stopAudioSharing": "Parar compart. de áudio",
"stopScreenSharing": "Parar compart. de tela",
"stopSubtitles": "Parar legendas",
"stopSharedVideo": "Parar vídeo do YouTube",
"surprised": "Surpresa",
"talkWhileMutedPopup": "Tentando falar? Você está em mudo.",
"tileViewToggle": "Alternar visualização em blocos",
"toggleCamera": "Alternar câmera",
"videomute": "Iniciar ou parar a câmera",
"startvideoblur": "Desfocar meu plano de fundo",
"stopvideoblur": "Desativar desfoque de fundo",
"selectBackground": "Selecionar fundo"
},
"transcribing": {
@@ -856,6 +985,7 @@
"react-nativeGrantPermissions": "Selecione <b><i>Permitir</i></b> quando seu navegador perguntar pelas permissões.",
"safariGrantPermissions": "Selecione <b><i>OK</i></b> quando seu navegador perguntar pelas permissões."
},
"volumeSlider": "Controle de volume",
"videoSIPGW": {
"busy": "Estamos trabalhando para liberar recursos. Por favor, tente novamente em alguns minutos.",
"busyTitle": "O serviço da sala está ocupado",
@@ -878,26 +1008,29 @@
"ld": "LD",
"ldTooltip": "Ver vídeo em baixa definição",
"lowDefinition": "Baixa definição (LD)",
"onlyAudioAvailable": "Somente áudio disponível",
"onlyAudioSupported": "Suportamos somente áudio neste navegador.",
"sd": "SD",
"sdTooltip": "Ver vídeo em definição padrão",
"standardDefinition": "Definição padrão"
},
"videothumbnail": {
"connectionInfo": "Informações da Conexão",
"domute": "Mudo",
"domuteVideo": "Desativar a câmera",
"domuteOthers": "Silenciar todos os demais",
"domuteVideoOfOthers": "Desativar a câmera de todos os demais",
"flip": "Inverter",
"grantModerator": "Atribuir Moderador",
"kick": "Expulsar",
"kick": "Remover",
"moderator": "Moderador",
"mute": "Participante está mudo",
"muted": "Mudo",
"videoMuted": "Câmera desativada",
"remoteControl": "Controle remoto",
"show": "Mostrar no palco",
"videomute": "O participante parou a câmera"
},
"welcomepage": {
"addMeetingName": "Adicionar nome da reunião",
"accessibilityLabel": {
"join": "Toque para entrar",
"roomname": "Digite o nome da sala"
@@ -914,8 +1047,14 @@
"getHelp": "Obter ajuda",
"go": "IR",
"goSmall": "IR",
"join": "CRIAR / ENTRAR",
"headerTitle": "Jitsi Meet",
"headerSubtitle": "Reuniões com segurança e alta qualidade",
"info": "Informações",
"join": "CRIAR / ENTRAR",
"jitsiOnMobile": "Jitsi em dispositivos móveis baixe nossos aplicativos e inicie uma reunião em qualquer lugar",
"mobileDownLoadLinkIos": "Baixar aplicativo móvel para iOS",
"mobileDownLoadLinkAndroid": "Baixar aplicativo móvel para Android",
"mobileDownLoadLinkFDroid": "Baixar aplicativo móvel para F-Droid",
"moderatedMessage": "Ou <a href=\"{{url}}\" rel=\"noopener noreferrer\" target=\"_blank\">agende uma URL de reunião</a> antes, onde você é o único moderador.",
"privacy": "Política de Privacidade",
"recentList": "Recente",
@@ -926,27 +1065,38 @@
"roomname": "Digite o nome da sala",
"roomnameHint": "Digite o nome ou a URL da sala que você deseja entrar. Você pode digitar um nome, e apenas deixe para as pessoas que você quer se reunir digitem o mesmo nome.",
"sendFeedback": "Enviar comentários",
"startMeeting": "Iniciar reunião",
"terms": "Termos",
"title": "Videoconferências mais seguras, flexíveis e totalmente gratuitas"
"title": "Videoconferências mais seguras, flexíveis e totalmente gratuitas",
"logo": {
"calendar": "Logo do Calendário",
"microsoftLogo": "Logo da Microsoft",
"logoDeepLinking": "Logo do Jitsi Meet",
"desktopPreviewThumbnail": "Miniatura de Visualização do Desktop",
"googleLogo": "Logo do Google",
"policyLogo": "Logo da Política de Privacidade"
}
},
"lonelyMeetingExperience": {
"youAreAlone": "Você é o único na reunião",
"button": "Convidar outros"
"button": "Convidar outros",
"youAreAlone": "Você é o único na reunião"
},
"helpView": {
"header": "Centro de ajuda"
},
"lobby": {
"admit": "Aceitar",
"admitAll": "Aceitar todos",
"knockingParticipantList": "Remover lista de participantes",
"allow": "Permitir",
"backToKnockModeButton": "Sem senha, peça para se juntar",
"dialogTitle": "modo Lobby",
"disableDialogContent": "O modo Lobby está habilitado. Este recurso evita que particpantes não convidados juntem-se à sua conferência. Deseja desabilitar?",
"dialogTitle": "Modo sala de espera",
"disableDialogContent": "O modo sala de espera está habilitado. Este recurso evita que particpantes não convidados juntem-se à sua conferência. Deseja desabilitar?",
"disableDialogSubmit": "Desabilitar",
"emailField": "Informe seu email",
"enableDialogPasswordField": "Definir senha (opcional)",
"enableDialogSubmit": "Habilitar",
"enableDialogText": "O modo Lobby protege a sua conferência, permitindo a entrada de participantes apenas após a aprovação formal do moderador.",
"enableDialogText": "O modo sala de espera protege a sua conferência, permitindo a entrada de participantes apenas após a aprovação formal do moderador.",
"enterPasswordButton": "Informe a senha da conferência",
"enterPasswordTitle": "Informe a senha para se juntar à conferência",
"invalidPassword": "Senha inválida",
@@ -961,12 +1111,13 @@
"nameField": "Informe seu nome",
"notificationLobbyAccessDenied": "{{targetParticipantName}} foi rejeitado por {{originParticipantName}}",
"notificationLobbyAccessGranted": "{{targetParticipantName}} foi aceito por {{originParticipantName}}",
"notificationLobbyDisabled": "Sala de Espera foi desabilitada por {{originParticipantName}}",
"notificationLobbyEnabled": "Sala de Espera foi habilitada por {{originParticipantName}}",
"notificationLobbyDisabled": "Sala de espera foi desabilitada por {{originParticipantName}}",
"notificationLobbyEnabled": "Sala de espera foi habilitada por {{originParticipantName}}",
"notificationTitle": "Sala de espera",
"passwordField": "Informe a senha da conferência",
"passwordJoinButton": "Solicitar",
"reject": "Rejeitar",
"toggleLabel": "Habilitar lobby"
"rejectAll": "Rejeitar todos",
"toggleLabel": "Habilitar sala de espera"
}
}

View File

@@ -50,9 +50,11 @@
"messagebox": "Scrieți mesajul",
"nickname": {
"popover": "Alegeți un pseudonim",
"title": "Introduceți un pseudonim pentru a conversa"
"title": "Introduceți un pseudonim pentru a conversa",
"titleWithPolls": "Introduceți un pseudonim pentru a conversa"
},
"title": "Apel video",
"titleWithPolls": "Apel video",
"you": "",
"privateNotice": "",
"noMessagesMessage": "",

View File

@@ -67,11 +67,13 @@
"messagebox": "Введите сообщение",
"nickname": {
"popover": "Выберите имя",
"title": "Введите имя для использования чата"
"title": "Введите имя для использования чата",
"titleWithPolls": "Введите имя для использования чата"
},
"noMessagesMessage": "В конференции пока нет никаких сообщений. Начните разговор!",
"privateNotice": "Личное сообщение пользователю {{recipient}}",
"title": "Чат",
"titleWithPolls": "Чат",
"you": "вы"
},
"chromeExtensionBanner": {

View File

@@ -53,10 +53,12 @@
"noMessagesMessage": "Perunu messàgiu ancora in sa riunione. Cumintza una tzarrada inoghe!",
"nickname": {
"popover": "Sèbera unu nòmine",
"title": "Inserta su nòmine pro impreare sa tzarrada"
"title": "Inserta su nòmine pro impreare sa tzarrada",
"titleWithPolls": "Inserta su nòmine pro impreare sa tzarrada"
},
"privateNotice": "Messàgiu privadu a {{recipient}}",
"title": "Tzarrada",
"titleWithPolls": "Tzarrada",
"you": "tue"
},
"chromeExtensionBanner": {

Some files were not shown because too many files have changed in this diff Show More