From b8daf0a9f9716949673e6aab8b421168f8ce339a Mon Sep 17 00:00:00 2001 From: Nik Date: Thu, 26 Jul 2018 18:33:40 +0200 Subject: [PATCH] [WEB] add UI for transcription (#3213) * [WEB] add UI for transcription * add analytics event for button, do not use global APP object * use props instead of state, use local conference to kick participant * put imports in alphabetical order * add translation for TranscribingLabel * fix merge conflict * add closed caption button * purge OverFlowMenuItem which starts and stops Transcription * readd closed caption icon and fix small issues due to purge * delete unused icon in _font.scss --- conference.js | 10 +- config.js | 4 + css/_font.scss | 4 + fonts/jitsi.eot | Bin 12176 -> 12352 bytes fonts/jitsi.svg | 1 + fonts/jitsi.ttf | Bin 12020 -> 12196 bytes fonts/jitsi.woff | Bin 12096 -> 12272 bytes fonts/selection.json | 331 ++++++++++-------- interface_config.js | 8 +- lang/main.json | 14 +- react/features/base/font-icons/jitsi.json | 331 ++++++++++-------- .../features/base/participants/actionTypes.js | 22 ++ react/features/base/participants/actions.js | 38 ++ .../large-video/components/AbstractLabels.js | 13 + .../large-video/components/Labels.web.js | 5 + .../toolbox/components/web/Toolbox.js | 24 +- react/features/transcribing/actionTypes.js | 78 +++++ react/features/transcribing/actions.js | 189 ++++++++++ .../components/ClosedCaptionButton.native.js | 0 .../components/ClosedCaptionButton.web.js | 131 +++++++ .../components/TranscribingLabel.native.js | 0 .../components/TranscribingLabel.web.js | 75 ++++ .../features/transcribing/components/index.js | 2 + react/features/transcribing/index.js | 5 + react/features/transcribing/middleware.js | 100 ++++++ react/features/transcribing/reducer.js | 115 ++++++ 26 files changed, 1191 insertions(+), 309 deletions(-) create mode 100644 react/features/transcribing/actionTypes.js create mode 100644 react/features/transcribing/actions.js create mode 100644 react/features/transcribing/components/ClosedCaptionButton.native.js create mode 100644 react/features/transcribing/components/ClosedCaptionButton.web.js create mode 100644 react/features/transcribing/components/TranscribingLabel.native.js create mode 100644 react/features/transcribing/components/TranscribingLabel.web.js create mode 100644 react/features/transcribing/components/index.js create mode 100644 react/features/transcribing/index.js create mode 100644 react/features/transcribing/middleware.js create mode 100644 react/features/transcribing/reducer.js diff --git a/conference.js b/conference.js index ccbab629107..abf9223fe92 100644 --- a/conference.js +++ b/conference.js @@ -72,6 +72,8 @@ import { getAvatarURLByParticipantId, getLocalParticipant, getParticipantById, + hiddenParticipantJoined, + hiddenParticipantLeft, localParticipantConnectionStatusChanged, localParticipantRoleChanged, MAX_DISPLAY_NAME_LENGTH, @@ -1654,10 +1656,13 @@ export default { room.on(JitsiConferenceEvents.PARTCIPANT_FEATURES_CHANGED, user => APP.UI.onUserFeaturesChanged(user)); room.on(JitsiConferenceEvents.USER_JOINED, (id, user) => { + const displayName = user.getDisplayName(); + if (user.isHidden()) { + APP.store.dispatch(hiddenParticipantJoined(id, displayName)); + return; } - const displayName = user.getDisplayName(); APP.store.dispatch(participantJoined({ botType: user.getBotType(), @@ -1682,8 +1687,11 @@ export default { room.on(JitsiConferenceEvents.USER_LEFT, (id, user) => { if (user.isHidden()) { + APP.store.dispatch(hiddenParticipantLeft(id)); + return; } + APP.store.dispatch(participantLeft(id, room)); logger.log('USER %s LEFT', id, user); APP.API.notifyUserLeft(id); diff --git a/config.js b/config.js index 7298c7283ca..916c3bdd6c3 100644 --- a/config.js +++ b/config.js @@ -175,6 +175,10 @@ var config = { // Whether to enable live streaming or not. // liveStreamingEnabled: false, + // Transcription (in interface_config, + // subtitles and buttons can be configured) + transcribingEnabled: false, + // Misc // Default value for the channel "last N" attribute. -1 for unlimited. diff --git a/css/_font.scss b/css/_font.scss index cbff4d7fd88..2a116977fdf 100644 --- a/css/_font.scss +++ b/css/_font.scss @@ -24,6 +24,7 @@ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } + .icon-arrow_back:before { content: "\e5c4"; } @@ -216,3 +217,6 @@ .icon-tiles-one:before { content: "\e92f"; } +.icon-closed_caption:before { + content: "\e930"; +} diff --git a/fonts/jitsi.eot b/fonts/jitsi.eot index 3a552231b7589a7752279dbcefb35ddc63781c96..eb3b84adcf43eae388fc050ee53c3e6f28ccbf72 100755 GIT binary patch delta 441 zcmbObe;|R)!GM8biT*@3GZx|4q!kk#^7-#EFfi-^;)LYf!~&u36Zgs0+udT@&A`9} z6x4i@k(!ty)Tlm_fkFETP{1q$D8P}zvY&xLM+V4O$;d6Kkkpc`2l5>l7#J0D@{?XJF710jkd{$S*EoU9Gw8cd$Un9FFenTzSXW<4`Q1H&rj2IepZaRz+`d!Rm36E$r{B{o?`5ix5< zBQsk@Wl?2QV<5&Z&S)eiDk#FHtf-`BDrjP6%*-Gm)F31!1tcUK!opsG8DJqGk8z5U ziLvtEH7Z6%Dok2BLJ~d_LTiL1B!qOt8pMEHBp#!VvGP9#ka8v<33M0G3qZUgDONb1 z-{va=Hw(yT4A<)m{bBUvKicMu9-B>cWEfe1vJI01bSH?2d;&^?GNo48M|{>rtrPZ$`O zfP$Jf8L5dWLRo?L85p!}fC6S2Kmm>vmVH2e36QUnky}zBswMLu$e+Q$z$lZGpPc9% z@3(`2L1zn4enM_yMFB$)!(j#nT^AruOesKu{Gf;*>?+Qqs zfth7;G@}Ef{^U7~xs3XoxtPvtDl-CQfOuWqf!Xo=HeVUISwI>Xu9vVC!RX0Lbj%su lH{a2bVVwL&cY**&J%c;LK?W|63I?Xhg-pVmH|zB>0sxn+MT-Cc diff --git a/fonts/jitsi.svg b/fonts/jitsi.svg index a41f5e24c31..c1a0e280618 100755 --- a/fonts/jitsi.svg +++ b/fonts/jitsi.svg @@ -74,4 +74,5 @@ + \ No newline at end of file diff --git a/fonts/jitsi.ttf b/fonts/jitsi.ttf index 48edd49102c9c41f6f02568c7c6fe170f3a05129..bfe9c206b21ab218e90f28d446d2ff5cecf78356 100755 GIT binary patch delta 446 zcmewoyClAzfsuiMft#U$ftkU;KUm+0?;_hhpvWE|PDsv8ED-uGu$zH_Q3lArlb%>y z0Hg(g{2xG?BR!`w&F&T(P@W0M)qIkXnwTQgs6LZ{LHh|%z$^nOz>&hTpMgOKq+cZ? zx1>T+OST@!cL189kdvQmnHUl1w}XK}Hvy<%Qf^{J0YfmuVIcntkgt%Jn45ZcLhW(} z20am=hP;CO;u4@kfk3}y;tqF4gGr3Jj0T(Y7|(0gGXwpwin)O~j6s}1pTQoe+|)!( zn^B2PmQh5^n$gJ2mQh($+0+<_v5PYriHQn|uqi7lshJ9zm>DxONC-6uNl5_-35T$- zS6~KM2*_icqGV#M{CACtk&z0MmX45wkA%<~Aqfc~9kB*6AQy?psAH`Bj{&5d2}lCn z1#~_TuSkj&j_0@e%D~M6@({!I`a*vgJvl+!oY7pvWE|PDsv8ED-u8u$zH_Q3lArlb%>y z0Hg(g{2xG?BR!`w?aH;aPZ$`OfLu+RjMT&wp{&6B3=G;fKmoH1pa4e-%RV5#1jtv( z$StW5)sp!SkZw i30o12p3I?R&gj0`K}Uvha)RyzHn88_H~-RI#RvdKVnc=i diff --git a/fonts/jitsi.woff b/fonts/jitsi.woff index ffd9ee36e0c03b4ee84830c52cb724c2c4bb2926..54d641c804913125485c11744dbc0a019ecfba02 100755 GIT binary patch delta 495 zcmX>Q_aR=a+~3WOfsp|S^gl3ggXtvT_AEc-KZODce3JwSUDKv+^swmv668K}-qcMSsr!z2)n2=v>Ln^*y~SkD2-R{-N+ zhQoP@xv4<01fa$|5WYL1c6mX5aS6~r7bgDkXEd1X!4E8|vrY36Ij7n^>j3Q#zj7Da*jLM?Qrp7>wU7XQKOjJ;WO<7S%%~a6D%$S)$ zLa0GVN(x9wIE0100yDruKpx{1B@<)iziU*Cj8vGkbc7^)B!t!oNk|Ckh&6}-xkx-l z9b@Hx3?Su9KoaOKp!a}yMN+JAJipCX25uIh00YDI`a*vgJ$a3`IittsC)zTMEI`?Y gNxBn6L_Ps!L3%wH4l;0oR5CCDqf&VDX5C&!0NL7S3IG5A delta 318 zcmewme;`h*+~3WOfsp|S^c@(uLA2f%2FA&XOkxvtgzN7n=Oz{~Ffe8S#qWTy&^LkI z>50WaF(wxvp96{o(sL@)fMPxj44O6|eC68OCmE@UDGUtS9Y8f^AS{#>cs~Ou2oyU2 z?!fGL zew(ih+$=x=28Qb;Y(+47a)^#OqxSYjh_FfWyX};UEJSSSb@QWP~>->-91M E0I6q65C8xG diff --git a/fonts/selection.json b/fonts/selection.json index 4745427630d..9a1953f4a4f 100755 --- a/fonts/selection.json +++ b/fonts/selection.json @@ -1,6 +1,35 @@ { "IcoMoonType": "selection", "icons": [ + { + "icon": { + "paths": [ + "M768 470v-44c0-24-18-42-42-42h-128c-24 0-44 18-44 42v172c0 24 20 42 44 42h128c24 0 42-18 42-42v-44h-64v22h-86v-128h86v22h64zM470 470v-44c0-24-20-42-44-42h-128c-24 0-42 18-42 42v172c0 24 18 42 42 42h128c24 0 44-18 44-42v-44h-64v22h-86v-128h86v22h64zM810 170c46 0 86 40 86 86v512c0 46-40 86-86 86h-596c-48 0-86-40-86-86v-512c0-46 38-86 86-86h596z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "closed_caption" + ], + "grid": 24 + }, + "attrs": [ + {} + ], + "properties": { + "order": 1, + "id": 0, + "prevSize": 24, + "code": 59696, + "name": "closed_caption" + }, + "setIdx": 0, + "setId": 2, + "iconIdx": 0 + }, { "icon": { "paths": [ @@ -23,10 +52,10 @@ "order": 1377, "id": 1065, "name": "tiles-many", - "prevSize": 32, + "prevSize": 24, "code": 59694 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, "iconIdx": 0 }, @@ -52,10 +81,10 @@ "order": 1378, "id": 1064, "name": "tiles-one", - "prevSize": 32, + "prevSize": 24, "code": 59695 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, "iconIdx": 1 }, @@ -78,13 +107,13 @@ "ligatures": "clear, close", "id": 157, "order": 1313, - "prevSize": 32, + "prevSize": 24, "code": 58829, "name": "close" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 50 + "iconIdx": 2 }, { "icon": { @@ -105,13 +134,13 @@ "ligatures": "launch, open_in_new", "id": 1047, "order": 1314, - "prevSize": 32, + "prevSize": 24, "name": "open_in_new", "code": 59550 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 51 + "iconIdx": 3 }, { "icon": { @@ -132,13 +161,13 @@ "ligatures": "history, restore", "id": 1048, "order": 1315, - "prevSize": 32, + "prevSize": 24, "code": 59571, "name": "restore" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 52 + "iconIdx": 4 }, { "icon": { @@ -159,13 +188,13 @@ "ligatures": "chevron_right, navigate_next", "id": 1049, "order": 1316, - "prevSize": 32, + "prevSize": 24, "code": 58377, "name": "navigate_next" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 53 + "iconIdx": 5 }, { "icon": { @@ -186,13 +215,13 @@ "ligatures": "menu", "id": 1050, "order": 1317, - "prevSize": 32, + "prevSize": 24, "code": 58834, "name": "menu" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 54 + "iconIdx": 6 }, { "icon": { @@ -213,13 +242,13 @@ "ligatures": "arrow_back", "id": 1051, "order": 1318, - "prevSize": 32, + "prevSize": 24, "code": 58820, "name": "arrow_back" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 55 + "iconIdx": 7 }, { "icon": { @@ -240,13 +269,13 @@ "ligatures": "chevron_left, navigate_before", "id": 1052, "order": 1319, - "prevSize": 32, + "prevSize": 24, "code": 58376, "name": "navigate_before" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 56 + "iconIdx": 8 }, { "icon": { @@ -267,13 +296,13 @@ "ligatures": "public", "id": 1053, "order": 1320, - "prevSize": 32, + "prevSize": 24, "code": 59403, "name": "public" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 57 + "iconIdx": 9 }, { "icon": { @@ -294,13 +323,13 @@ "ligatures": "event_note", "id": 1054, "order": 1321, - "prevSize": 32, + "prevSize": 24, "code": 58902, "name": "event_note" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 58 + "iconIdx": 10 }, { "icon": { @@ -321,13 +350,13 @@ "ligatures": "timer", "id": 1055, "order": 1322, - "prevSize": 32, + "prevSize": 24, "code": 58405, "name": "timer" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 59 + "iconIdx": 11 }, { "icon": { @@ -348,13 +377,13 @@ "ligatures": "bluetooth_audio, bluetooth_searching", "id": 1056, "order": 1323, - "prevSize": 32, + "prevSize": 24, "code": 57770, "name": "bluetooth" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 60 + "iconIdx": 12 }, { "icon": { @@ -375,13 +404,13 @@ "ligatures": "headset", "id": 1057, "order": 1324, - "prevSize": 32, + "prevSize": 24, "code": 58128, "name": "headset" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 61 + "iconIdx": 13 }, { "icon": { @@ -402,13 +431,13 @@ "ligatures": "phone_in_talk", "id": 1058, "order": 1325, - "prevSize": 32, + "prevSize": 24, "code": 58909, "name": "phone-talk" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 62 + "iconIdx": 14 }, { "icon": { @@ -429,13 +458,13 @@ "ligatures": "more_vert", "id": 1059, "order": 1326, - "prevSize": 32, + "prevSize": 24, "code": 58836, "name": "thumb-menu" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 63 + "iconIdx": 15 }, { "icon": { @@ -459,12 +488,12 @@ "order": 1327, "id": 1060, "name": "ninja", - "prevSize": 32, + "prevSize": 24, "code": 59657 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 64 + "iconIdx": 16 }, { "icon": { @@ -485,13 +514,13 @@ "ligatures": "call, local_phone, phone", "id": 1061, "order": 1328, - "prevSize": 32, + "prevSize": 24, "code": 57549, "name": "phone" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 65 + "iconIdx": 17 }, { "icon": { @@ -512,13 +541,13 @@ "ligatures": "add", "id": 1062, "order": 1329, - "prevSize": 32, + "prevSize": 24, "code": 57669, "name": "add" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 66 + "iconIdx": 18 }, { "icon": { @@ -545,9 +574,9 @@ "prevSize": 32, "code": 59693 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 2 + "iconIdx": 19 }, { "icon": { @@ -574,9 +603,9 @@ "prevSize": 32, "code": 59692 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 3 + "iconIdx": 20 }, { "icon": { @@ -603,9 +632,9 @@ "prevSize": 32, "code": 59691 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 4 + "iconIdx": 21 }, { "icon": { @@ -635,9 +664,9 @@ "prevSize": 32, "code": 59690 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 5 + "iconIdx": 22 }, { "icon": { @@ -664,9 +693,9 @@ "prevSize": 32, "code": 59648 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 6 + "iconIdx": 23 }, { "icon": { @@ -693,9 +722,9 @@ "prevSize": 32, "code": 59687 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 7 + "iconIdx": 24 }, { "icon": { @@ -722,9 +751,9 @@ "prevSize": 32, "code": 59688 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 8 + "iconIdx": 25 }, { "icon": { @@ -751,9 +780,9 @@ "prevSize": 32, "code": 59689 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 9 + "iconIdx": 26 }, { "icon": { @@ -780,9 +809,9 @@ "prevSize": 32, "code": 59686 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 10 + "iconIdx": 27 }, { "icon": { @@ -809,9 +838,9 @@ "prevSize": 32, "code": 59682 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 11 + "iconIdx": 28 }, { "icon": { @@ -838,9 +867,9 @@ "prevSize": 32, "code": 59651 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 12 + "iconIdx": 29 }, { "icon": { @@ -867,9 +896,9 @@ "prevSize": 32, "code": 59677 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 13 + "iconIdx": 30 }, { "icon": { @@ -896,9 +925,9 @@ "prevSize": 32, "code": 59676 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 14 + "iconIdx": 31 }, { "icon": { @@ -922,9 +951,9 @@ "code": 59649, "name": "avatar" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 15 + "iconIdx": 32 }, { "icon": { @@ -948,9 +977,9 @@ "code": 59653, "name": "hangup" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 16 + "iconIdx": 33 }, { "icon": { @@ -974,9 +1003,9 @@ "code": 59654, "name": "chat" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 17 + "iconIdx": 34 }, { "icon": { @@ -1000,9 +1029,9 @@ "code": 59650, "name": "download" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 18 + "iconIdx": 35 }, { "icon": { @@ -1026,9 +1055,9 @@ "code": 59655, "name": "edit" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 19 + "iconIdx": 36 }, { "icon": { @@ -1052,9 +1081,9 @@ "code": 59656, "name": "share-doc" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 20 + "iconIdx": 37 }, { "icon": { @@ -1078,9 +1107,9 @@ "code": 59652, "name": "kick" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 21 + "iconIdx": 38 }, { "icon": { @@ -1104,9 +1133,9 @@ "code": 59679, "name": "menu-up" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 22 + "iconIdx": 39 }, { "icon": { @@ -1130,9 +1159,9 @@ "code": 59680, "name": "menu-down" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 23 + "iconIdx": 40 }, { "icon": { @@ -1156,9 +1185,9 @@ "code": 59659, "name": "full-screen" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 24 + "iconIdx": 41 }, { "icon": { @@ -1182,9 +1211,9 @@ "code": 59660, "name": "exit-full-screen" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 25 + "iconIdx": 42 }, { "icon": { @@ -1208,9 +1237,9 @@ "code": 59658, "name": "star-full" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 26 + "iconIdx": 43 }, { "icon": { @@ -1234,9 +1263,9 @@ "code": 59661, "name": "security" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 27 + "iconIdx": 44 }, { "icon": { @@ -1260,9 +1289,9 @@ "code": 59662, "name": "security-locked" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 28 + "iconIdx": 45 }, { "icon": { @@ -1286,9 +1315,9 @@ "code": 59663, "name": "reload" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 29 + "iconIdx": 46 }, { "icon": { @@ -1312,9 +1341,9 @@ "code": 59664, "name": "microphone" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 30 + "iconIdx": 47 }, { "icon": { @@ -1338,9 +1367,9 @@ "code": 59665, "name": "mic-empty" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 31 + "iconIdx": 48 }, { "icon": { @@ -1364,9 +1393,9 @@ "code": 59666, "name": "mic-disabled" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 32 + "iconIdx": 49 }, { "icon": { @@ -1390,9 +1419,9 @@ "code": 59678, "name": "raised-hand" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 33 + "iconIdx": 50 }, { "icon": { @@ -1416,9 +1445,9 @@ "code": 59675, "name": "contactList" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 34 + "iconIdx": 51 }, { "icon": { @@ -1442,9 +1471,9 @@ "code": 59667, "name": "link" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 35 + "iconIdx": 52 }, { "icon": { @@ -1468,9 +1497,9 @@ "code": 59668, "name": "shared-video" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 36 + "iconIdx": 53 }, { "icon": { @@ -1494,9 +1523,9 @@ "code": 59669, "name": "settings" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 37 + "iconIdx": 54 }, { "icon": { @@ -1520,9 +1549,9 @@ "code": 59670, "name": "star" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 38 + "iconIdx": 55 }, { "icon": { @@ -1546,9 +1575,9 @@ "code": 59681, "name": "switch-camera" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 39 + "iconIdx": 56 }, { "icon": { @@ -1572,9 +1601,9 @@ "code": 59671, "name": "share-desktop" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 40 + "iconIdx": 57 }, { "icon": { @@ -1598,9 +1627,9 @@ "code": 59672, "name": "camera" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 41 + "iconIdx": 58 }, { "icon": { @@ -1624,9 +1653,9 @@ "code": 59673, "name": "camera-disabled" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 42 + "iconIdx": 59 }, { "icon": { @@ -1650,9 +1679,9 @@ "code": 59674, "name": "volume" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 43 + "iconIdx": 60 }, { "icon": { @@ -1679,9 +1708,9 @@ "name": "recDisable", "ligatures": "" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 44 + "iconIdx": 61 }, { "icon": { @@ -1709,9 +1738,9 @@ "name": "recEnable", "ligatures": "" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 45 + "iconIdx": 62 }, { "icon": { @@ -1739,9 +1768,9 @@ "name": "presentation", "ligatures": "" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 46 + "iconIdx": 63 }, { "icon": { @@ -1765,9 +1794,9 @@ "code": 59685, "name": "dialpad" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 47 + "iconIdx": 64 }, { "icon": { @@ -1791,9 +1820,9 @@ "code": 59683, "name": "visibility" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 48 + "iconIdx": 65 }, { "icon": { @@ -1817,9 +1846,9 @@ "code": 59684, "name": "visibility-off" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 49 + "iconIdx": 66 } ], "height": 1024, diff --git a/interface_config.js b/interface_config.js index 2ac95586ead..a7617a4b7dc 100644 --- a/interface_config.js +++ b/interface_config.js @@ -45,10 +45,10 @@ var interfaceConfig = { * jwt. */ TOOLBAR_BUTTONS: [ - 'microphone', 'camera', 'desktop', 'fullscreen', 'fodeviceselection', 'hangup', - 'profile', 'info', 'chat', 'recording', 'livestreaming', 'etherpad', - 'sharedvideo', 'settings', 'raisehand', 'videoquality', 'filmstrip', - 'invite', 'feedback', 'stats', 'shortcuts' + 'microphone', 'camera', 'closedcaptions', 'desktop', 'fullscreen', + 'fodeviceselection', 'hangup', 'profile', 'info', 'chat', 'recording', + 'livestreaming', 'etherpad', 'sharedvideo', 'settings', 'raisehand', + 'videoquality', 'filmstrip', 'invite', 'feedback', 'stats', 'shortcuts' ], SETTINGS_SECTIONS: [ 'devices', 'language', 'moderator', 'profile' ], diff --git a/lang/main.json b/lang/main.json index d8fef9abb04..60d2f4ff430 100644 --- a/lang/main.json +++ b/lang/main.json @@ -81,6 +81,7 @@ "audioRoute": "Select the sound device", "callQuality": "Manage call quality", "chat": "Toggle chat window", + "cc": "Toggle subtitles", "document": "Toggle shared document", "feedback": "Leave feedback", "fullScreen": "Toggle full screen", @@ -381,7 +382,8 @@ "shareYourScreenDisabled": "Screen sharing disabled.", "shareYourScreenDisabledForGuest": "Guests can't screen share.", "yourEntireScreen": "Your entire screen", - "applicationWindow": "Application window" + "applicationWindow": "Application window", + "transcribing": "Transcribing" }, "email": { @@ -448,6 +450,16 @@ "unavailable": "Oops! The __serviceName__ is currently unavailable. We're working on resolving the issue. Please try again later.", "unavailableTitle": "Recording unavailable" }, + "transcribing": + { + "pending" : "Preparing to transcribe the meeting...", + "off" : "Transcribing stopped", + "error": "Transcribing failed. Please try again.", + "failedToStart": "Transcribing failed to start", + "tr": "TR", + "labelToolTip": "The meeting is being transcribed", + "ccButtonTooltip": "Start / Stop showing subtitles" + }, "liveStreaming": { "busy": "We're working on freeing streaming resources. Please try again in a few minutes.", diff --git a/react/features/base/font-icons/jitsi.json b/react/features/base/font-icons/jitsi.json index 4745427630d..9a1953f4a4f 100755 --- a/react/features/base/font-icons/jitsi.json +++ b/react/features/base/font-icons/jitsi.json @@ -1,6 +1,35 @@ { "IcoMoonType": "selection", "icons": [ + { + "icon": { + "paths": [ + "M768 470v-44c0-24-18-42-42-42h-128c-24 0-44 18-44 42v172c0 24 20 42 44 42h128c24 0 42-18 42-42v-44h-64v22h-86v-128h86v22h64zM470 470v-44c0-24-20-42-44-42h-128c-24 0-42 18-42 42v172c0 24 18 42 42 42h128c24 0 44-18 44-42v-44h-64v22h-86v-128h86v22h64zM810 170c46 0 86 40 86 86v512c0 46-40 86-86 86h-596c-48 0-86-40-86-86v-512c0-46 38-86 86-86h596z" + ], + "attrs": [ + {} + ], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "closed_caption" + ], + "grid": 24 + }, + "attrs": [ + {} + ], + "properties": { + "order": 1, + "id": 0, + "prevSize": 24, + "code": 59696, + "name": "closed_caption" + }, + "setIdx": 0, + "setId": 2, + "iconIdx": 0 + }, { "icon": { "paths": [ @@ -23,10 +52,10 @@ "order": 1377, "id": 1065, "name": "tiles-many", - "prevSize": 32, + "prevSize": 24, "code": 59694 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, "iconIdx": 0 }, @@ -52,10 +81,10 @@ "order": 1378, "id": 1064, "name": "tiles-one", - "prevSize": 32, + "prevSize": 24, "code": 59695 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, "iconIdx": 1 }, @@ -78,13 +107,13 @@ "ligatures": "clear, close", "id": 157, "order": 1313, - "prevSize": 32, + "prevSize": 24, "code": 58829, "name": "close" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 50 + "iconIdx": 2 }, { "icon": { @@ -105,13 +134,13 @@ "ligatures": "launch, open_in_new", "id": 1047, "order": 1314, - "prevSize": 32, + "prevSize": 24, "name": "open_in_new", "code": 59550 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 51 + "iconIdx": 3 }, { "icon": { @@ -132,13 +161,13 @@ "ligatures": "history, restore", "id": 1048, "order": 1315, - "prevSize": 32, + "prevSize": 24, "code": 59571, "name": "restore" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 52 + "iconIdx": 4 }, { "icon": { @@ -159,13 +188,13 @@ "ligatures": "chevron_right, navigate_next", "id": 1049, "order": 1316, - "prevSize": 32, + "prevSize": 24, "code": 58377, "name": "navigate_next" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 53 + "iconIdx": 5 }, { "icon": { @@ -186,13 +215,13 @@ "ligatures": "menu", "id": 1050, "order": 1317, - "prevSize": 32, + "prevSize": 24, "code": 58834, "name": "menu" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 54 + "iconIdx": 6 }, { "icon": { @@ -213,13 +242,13 @@ "ligatures": "arrow_back", "id": 1051, "order": 1318, - "prevSize": 32, + "prevSize": 24, "code": 58820, "name": "arrow_back" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 55 + "iconIdx": 7 }, { "icon": { @@ -240,13 +269,13 @@ "ligatures": "chevron_left, navigate_before", "id": 1052, "order": 1319, - "prevSize": 32, + "prevSize": 24, "code": 58376, "name": "navigate_before" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 56 + "iconIdx": 8 }, { "icon": { @@ -267,13 +296,13 @@ "ligatures": "public", "id": 1053, "order": 1320, - "prevSize": 32, + "prevSize": 24, "code": 59403, "name": "public" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 57 + "iconIdx": 9 }, { "icon": { @@ -294,13 +323,13 @@ "ligatures": "event_note", "id": 1054, "order": 1321, - "prevSize": 32, + "prevSize": 24, "code": 58902, "name": "event_note" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 58 + "iconIdx": 10 }, { "icon": { @@ -321,13 +350,13 @@ "ligatures": "timer", "id": 1055, "order": 1322, - "prevSize": 32, + "prevSize": 24, "code": 58405, "name": "timer" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 59 + "iconIdx": 11 }, { "icon": { @@ -348,13 +377,13 @@ "ligatures": "bluetooth_audio, bluetooth_searching", "id": 1056, "order": 1323, - "prevSize": 32, + "prevSize": 24, "code": 57770, "name": "bluetooth" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 60 + "iconIdx": 12 }, { "icon": { @@ -375,13 +404,13 @@ "ligatures": "headset", "id": 1057, "order": 1324, - "prevSize": 32, + "prevSize": 24, "code": 58128, "name": "headset" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 61 + "iconIdx": 13 }, { "icon": { @@ -402,13 +431,13 @@ "ligatures": "phone_in_talk", "id": 1058, "order": 1325, - "prevSize": 32, + "prevSize": 24, "code": 58909, "name": "phone-talk" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 62 + "iconIdx": 14 }, { "icon": { @@ -429,13 +458,13 @@ "ligatures": "more_vert", "id": 1059, "order": 1326, - "prevSize": 32, + "prevSize": 24, "code": 58836, "name": "thumb-menu" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 63 + "iconIdx": 15 }, { "icon": { @@ -459,12 +488,12 @@ "order": 1327, "id": 1060, "name": "ninja", - "prevSize": 32, + "prevSize": 24, "code": 59657 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 64 + "iconIdx": 16 }, { "icon": { @@ -485,13 +514,13 @@ "ligatures": "call, local_phone, phone", "id": 1061, "order": 1328, - "prevSize": 32, + "prevSize": 24, "code": 57549, "name": "phone" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 65 + "iconIdx": 17 }, { "icon": { @@ -512,13 +541,13 @@ "ligatures": "add", "id": 1062, "order": 1329, - "prevSize": 32, + "prevSize": 24, "code": 57669, "name": "add" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 66 + "iconIdx": 18 }, { "icon": { @@ -545,9 +574,9 @@ "prevSize": 32, "code": 59693 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 2 + "iconIdx": 19 }, { "icon": { @@ -574,9 +603,9 @@ "prevSize": 32, "code": 59692 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 3 + "iconIdx": 20 }, { "icon": { @@ -603,9 +632,9 @@ "prevSize": 32, "code": 59691 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 4 + "iconIdx": 21 }, { "icon": { @@ -635,9 +664,9 @@ "prevSize": 32, "code": 59690 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 5 + "iconIdx": 22 }, { "icon": { @@ -664,9 +693,9 @@ "prevSize": 32, "code": 59648 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 6 + "iconIdx": 23 }, { "icon": { @@ -693,9 +722,9 @@ "prevSize": 32, "code": 59687 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 7 + "iconIdx": 24 }, { "icon": { @@ -722,9 +751,9 @@ "prevSize": 32, "code": 59688 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 8 + "iconIdx": 25 }, { "icon": { @@ -751,9 +780,9 @@ "prevSize": 32, "code": 59689 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 9 + "iconIdx": 26 }, { "icon": { @@ -780,9 +809,9 @@ "prevSize": 32, "code": 59686 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 10 + "iconIdx": 27 }, { "icon": { @@ -809,9 +838,9 @@ "prevSize": 32, "code": 59682 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 11 + "iconIdx": 28 }, { "icon": { @@ -838,9 +867,9 @@ "prevSize": 32, "code": 59651 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 12 + "iconIdx": 29 }, { "icon": { @@ -867,9 +896,9 @@ "prevSize": 32, "code": 59677 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 13 + "iconIdx": 30 }, { "icon": { @@ -896,9 +925,9 @@ "prevSize": 32, "code": 59676 }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 14 + "iconIdx": 31 }, { "icon": { @@ -922,9 +951,9 @@ "code": 59649, "name": "avatar" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 15 + "iconIdx": 32 }, { "icon": { @@ -948,9 +977,9 @@ "code": 59653, "name": "hangup" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 16 + "iconIdx": 33 }, { "icon": { @@ -974,9 +1003,9 @@ "code": 59654, "name": "chat" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 17 + "iconIdx": 34 }, { "icon": { @@ -1000,9 +1029,9 @@ "code": 59650, "name": "download" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 18 + "iconIdx": 35 }, { "icon": { @@ -1026,9 +1055,9 @@ "code": 59655, "name": "edit" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 19 + "iconIdx": 36 }, { "icon": { @@ -1052,9 +1081,9 @@ "code": 59656, "name": "share-doc" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 20 + "iconIdx": 37 }, { "icon": { @@ -1078,9 +1107,9 @@ "code": 59652, "name": "kick" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 21 + "iconIdx": 38 }, { "icon": { @@ -1104,9 +1133,9 @@ "code": 59679, "name": "menu-up" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 22 + "iconIdx": 39 }, { "icon": { @@ -1130,9 +1159,9 @@ "code": 59680, "name": "menu-down" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 23 + "iconIdx": 40 }, { "icon": { @@ -1156,9 +1185,9 @@ "code": 59659, "name": "full-screen" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 24 + "iconIdx": 41 }, { "icon": { @@ -1182,9 +1211,9 @@ "code": 59660, "name": "exit-full-screen" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 25 + "iconIdx": 42 }, { "icon": { @@ -1208,9 +1237,9 @@ "code": 59658, "name": "star-full" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 26 + "iconIdx": 43 }, { "icon": { @@ -1234,9 +1263,9 @@ "code": 59661, "name": "security" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 27 + "iconIdx": 44 }, { "icon": { @@ -1260,9 +1289,9 @@ "code": 59662, "name": "security-locked" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 28 + "iconIdx": 45 }, { "icon": { @@ -1286,9 +1315,9 @@ "code": 59663, "name": "reload" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 29 + "iconIdx": 46 }, { "icon": { @@ -1312,9 +1341,9 @@ "code": 59664, "name": "microphone" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 30 + "iconIdx": 47 }, { "icon": { @@ -1338,9 +1367,9 @@ "code": 59665, "name": "mic-empty" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 31 + "iconIdx": 48 }, { "icon": { @@ -1364,9 +1393,9 @@ "code": 59666, "name": "mic-disabled" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 32 + "iconIdx": 49 }, { "icon": { @@ -1390,9 +1419,9 @@ "code": 59678, "name": "raised-hand" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 33 + "iconIdx": 50 }, { "icon": { @@ -1416,9 +1445,9 @@ "code": 59675, "name": "contactList" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 34 + "iconIdx": 51 }, { "icon": { @@ -1442,9 +1471,9 @@ "code": 59667, "name": "link" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 35 + "iconIdx": 52 }, { "icon": { @@ -1468,9 +1497,9 @@ "code": 59668, "name": "shared-video" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 36 + "iconIdx": 53 }, { "icon": { @@ -1494,9 +1523,9 @@ "code": 59669, "name": "settings" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 37 + "iconIdx": 54 }, { "icon": { @@ -1520,9 +1549,9 @@ "code": 59670, "name": "star" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 38 + "iconIdx": 55 }, { "icon": { @@ -1546,9 +1575,9 @@ "code": 59681, "name": "switch-camera" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 39 + "iconIdx": 56 }, { "icon": { @@ -1572,9 +1601,9 @@ "code": 59671, "name": "share-desktop" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 40 + "iconIdx": 57 }, { "icon": { @@ -1598,9 +1627,9 @@ "code": 59672, "name": "camera" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 41 + "iconIdx": 58 }, { "icon": { @@ -1624,9 +1653,9 @@ "code": 59673, "name": "camera-disabled" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 42 + "iconIdx": 59 }, { "icon": { @@ -1650,9 +1679,9 @@ "code": 59674, "name": "volume" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 43 + "iconIdx": 60 }, { "icon": { @@ -1679,9 +1708,9 @@ "name": "recDisable", "ligatures": "" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 44 + "iconIdx": 61 }, { "icon": { @@ -1709,9 +1738,9 @@ "name": "recEnable", "ligatures": "" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 45 + "iconIdx": 62 }, { "icon": { @@ -1739,9 +1768,9 @@ "name": "presentation", "ligatures": "" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 46 + "iconIdx": 63 }, { "icon": { @@ -1765,9 +1794,9 @@ "code": 59685, "name": "dialpad" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 47 + "iconIdx": 64 }, { "icon": { @@ -1791,9 +1820,9 @@ "code": 59683, "name": "visibility" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 48 + "iconIdx": 65 }, { "icon": { @@ -1817,9 +1846,9 @@ "code": 59684, "name": "visibility-off" }, - "setIdx": 0, + "setIdx": 1, "setId": 1, - "iconIdx": 49 + "iconIdx": 66 } ], "height": 1024, diff --git a/react/features/base/participants/actionTypes.js b/react/features/base/participants/actionTypes.js index 533727c5123..8675231c9ff 100644 --- a/react/features/base/participants/actionTypes.js +++ b/react/features/base/participants/actionTypes.js @@ -98,3 +98,25 @@ export const PARTICIPANT_UPDATED = Symbol('PARTICIPANT_UPDATED'); * } */ export const PIN_PARTICIPANT = Symbol('PIN_PARTICIPANT'); + +/** + * Action to signal that a hidden participant has joined. + * + * { + * type: HIDDEN_PARTICIPANT_JOINED, + * participant: Participant + * } + */ +export const HIDDEN_PARTICIPANT_JOINED = Symbol('HIDDEN_PARTICIPANT_JOINED'); + +/** + * Action to handle case when hidden participant leaves. + * + * { + * type: PARTICIPANT_LEFT, + * participant: { + * id: string + * } + * } + */ +export const HIDDEN_PARTICIPANT_LEFT = Symbol('HIDDEN_PARTICIPANT_LEFT'); diff --git a/react/features/base/participants/actions.js b/react/features/base/participants/actions.js index 137a4646dc5..3d96fe98357 100644 --- a/react/features/base/participants/actions.js +++ b/react/features/base/participants/actions.js @@ -7,6 +7,8 @@ import { showNotification } from '../../notifications'; import { DOMINANT_SPEAKER_CHANGED, + HIDDEN_PARTICIPANT_JOINED, + HIDDEN_PARTICIPANT_LEFT, KICK_PARTICIPANT, MUTE_REMOTE_PARTICIPANT, PARTICIPANT_DISPLAY_NAME_CHANGED, @@ -276,6 +278,42 @@ export function participantJoined(participant) { }; } +/** + * Action to signal that a hidden participant has joined the conference. + * + * @param {string} id - The id of the participant. + * @param {string} displayName - The display name, or undefined when + * unknown. + * @returns {{ + * type: HIDDEN_PARTICIPANT_JOINED, + * displayName: string, + * id: string + * }} + */ +export function hiddenParticipantJoined(id, displayName) { + return { + type: HIDDEN_PARTICIPANT_JOINED, + id, + displayName + }; +} + +/** + * Action to signal that a hidden participant has left the conference. + * + * @param {string} id - The id of the participant. + * @returns {{ + * type: HIDDEN_PARTICIPANT_LEFT, + * id: string + * }} + */ +export function hiddenParticipantLeft(id) { + return { + type: HIDDEN_PARTICIPANT_LEFT, + id + }; +} + /** * Action to signal that a participant has left. * diff --git a/react/features/large-video/components/AbstractLabels.js b/react/features/large-video/components/AbstractLabels.js index 206d7bb3ff3..a7a7e0ce893 100644 --- a/react/features/large-video/components/AbstractLabels.js +++ b/react/features/large-video/components/AbstractLabels.js @@ -5,6 +5,7 @@ import React, { Component } from 'react'; import { isFilmstripVisible } from '../../filmstrip'; import { RecordingLabel } from '../../recording'; import { VideoQualityLabel } from '../../video-quality'; +import { TranscribingLabel } from '../../transcribing/'; /** * The type of the React {@code Component} props of {@link AbstractLabels}. @@ -50,6 +51,18 @@ export default class AbstractLabels extends Component { ); } + + /** + * Renders the {@code TranscribingLabel}. + * + * @returns {React$Element} + * @protected + */ + _renderTranscribingLabel() { + return ( + + ); + } } /** diff --git a/react/features/large-video/components/Labels.web.js b/react/features/large-video/components/Labels.web.js index 6649c3767f3..c5e5c534312 100644 --- a/react/features/large-video/components/Labels.web.js +++ b/react/features/large-video/components/Labels.web.js @@ -85,6 +85,9 @@ class Labels extends AbstractLabels { this._renderRecordingLabel( JitsiRecordingConstants.mode.STREAM) } + { + this._renderTranscribingLabel() + } { this._renderVideoQualityLabel() } @@ -95,6 +98,8 @@ class Labels extends AbstractLabels { _renderRecordingLabel: string => React$Element<*> _renderVideoQualityLabel: () => React$Element<*> + + _renderTranscribingLabel: () => React$Element<*> } export default connect(_mapStateToProps)(Labels); diff --git a/react/features/toolbox/components/web/Toolbox.js b/react/features/toolbox/components/web/Toolbox.js index 9a3f0668a75..f2678a563fd 100644 --- a/react/features/toolbox/components/web/Toolbox.js +++ b/react/features/toolbox/components/web/Toolbox.js @@ -14,7 +14,8 @@ import { translate } from '../../../base/i18n'; import { getLocalParticipant, getParticipants, - participantUpdated + participantUpdated, + isLocalParticipantModerator } from '../../../base/participants'; import { getLocalVideoTrack, toggleScreensharing } from '../../../base/tracks'; import { ChatCounter } from '../../../chat'; @@ -56,6 +57,9 @@ import OverflowMenuItem from './OverflowMenuItem'; import OverflowMenuProfileItem from './OverflowMenuProfileItem'; import ToolbarButton from './ToolbarButton'; import VideoMuteButton from '../VideoMuteButton'; +import { + ClosedCaptionButton +} from '../../../transcribing'; /** * The type of the React {@code Component} props of {@link Toolbox}. @@ -144,6 +148,11 @@ type Props = { */ _sharingVideo: boolean, + /** + * Whether or not transcribing is enabled. + */ + _transcribingEnabled: boolean, + /** * Flag showing whether toolbar is visible. */ @@ -302,6 +311,7 @@ class Toolbox extends Component { _chatOpen, _hideInviteButton, _overflowMenuVisible, + _transcribingEnabled, _raisedHand, _visible, _visibleButtons, @@ -344,6 +354,11 @@ class Toolbox extends Component { tooltip = { t('toolbar.chat') } /> } + { + _transcribingEnabled + && this._shouldShowButton('closedcaptions') + && + }