Compare commits

...

2097 commits
1.2 ... master

Author SHA1 Message Date
ZianTT
14b59ac281
Update Chinese Translate File (#1025) 2023-01-17 13:33:35 +01:00
Rémai Gábor
83f8c2aae0
Merge pull request #1041 from edumeet/develop
update docs
2022-12-20 16:02:11 +01:00
Rémai Gábor
ca50944c3e update docs 2022-12-20 16:00:37 +01:00
Rémai Gábor
4c2c84dc84
Merge pull request #1040 from edumeet/develop
3.5.5 release
2022-12-20 15:30:38 +01:00
Rémai Gábor
62050c2d34
Merge branch 'master' into develop 2022-12-20 15:30:08 +01:00
Rémai Gábor
9177d56904
Update release number 2022-12-20 15:17:50 +01:00
Rémai Gábor
395b59c77f
Update release number 2022-12-20 15:17:35 +01:00
Rémai Gábor
2e7ba7ce70
Merge pull request #1039 from edumeet/feat-recorderparams
Feat recorderparams
2022-12-20 10:36:04 +01:00
Rémai Gábor
8c3cb932c5 remove default value from testing 2022-12-20 10:34:19 +01:00
Rémai Gábor
8f962dfe64 Add customisable infotooltip to join dialog. 2022-12-20 10:32:44 +01:00
Rémai Gábor
ab667d0d3c add hideSelfView 2022-12-19 15:26:03 +01:00
Rémai Gábor
df33b806e0
Merge pull request #1036 from edumeet/feat-recorderparams
Feat recorderparams
2022-12-13 10:23:04 +01:00
Rémai Gábor
1719aec298 add comment 2022-12-12 14:14:34 +00:00
Rémai Gábor
ff61d4cc37 Add hideNoVideoParticipants,filmstrip,acceptCookie 2022-12-12 14:10:32 +00:00
Rémai Gábor
907ac853cf
add new debian 11 network interface
hot-fix
2022-11-09 14:17:21 +01:00
Rémai Gábor
ac356025a7
fix build when dist folder is empty 2022-11-02 17:09:59 +01:00
Rémai Gábor
4761ab4958
Update package.json 2022-11-02 17:05:26 +01:00
Rémai Gábor
e11fd78abd
Update package.json 2022-11-02 17:05:03 +01:00
Rémai Gábor
272b92919c
Merge pull request #1027 from edumeet/develop
version 3.5.4
2022-11-02 17:03:08 +01:00
Astagor
948c978a64
Update Mediasoup version to fix build errors (#1019) 2022-08-23 12:41:59 +02:00
Rémai Gábor
c542c4b343
add meta keywords 2022-07-09 17:11:22 +02:00
Astagor
6d2047ccc3
Set preffered layers for extra video (#1013) 2022-06-06 08:39:34 +02:00
Rémai Gábor
2555d34141
Merge pull request #1010 from buraksumer/patch-2
Update Dockerfile
2022-05-25 10:15:50 +02:00
buraksumer
770a4240b1
Update Dockerfile 2022-05-25 00:36:38 +03:00
Rémai Gábor
488eb47581
Merge pull request #1005 from edumeet/feat-haproxyconfig-example
Feat haproxyconfig example
2022-05-20 15:02:31 +02:00
Rémai Gábor
0076b6e831
update formating, example, typo 2022-05-20 14:38:03 +02:00
Rémai Gábor
e41501ab5e
fix formating 2022-05-18 15:30:21 +02:00
Rémai Gábor
df35af971c
add haproxy 2.2 installation and cofig guide 2022-05-18 15:28:50 +02:00
Rémai Gábor
31d8255b54
update proxymd location 2022-05-18 15:28:18 +02:00
Astagor
0948035389
Fix frame rate for extra video (#1002) 2022-05-10 23:57:08 +02:00
N7Remus
61db9e3739
Fix crash with paralell localrecording and screenshare 2022-04-01 22:46:08 +02:00
sd4v1d
8a80350b62 Merge branch 'hotfix-3.5.3' into develop 2022-03-10 15:22:24 +01:00
sd4v1d
5de2d1bf99 Merge branch 'hotfix-3.5.3' 2022-03-10 15:12:23 +01:00
sd4v1d
c9e324e201 Update CHANGELOG 2022-03-10 14:45:01 +01:00
sd4v1d
26b81b06aa correcting configuration and github action
- removing options from config.example.js file
- run github action only on master branch
- bump version to 3.5.3
2022-03-10 14:13:55 +01:00
Stefan Otto
dc54dcd7e4
Update issue templates: Added Feature request template 2022-03-10 00:28:56 +01:00
Stefan Otto
8b3bf79c3f
Update issue templates: added custom issue template 2022-03-10 00:28:12 +01:00
Stefan Otto
5d634da11e
Update issue templates 2022-03-10 00:25:41 +01:00
Stefan Otto
64ee2ab74b Merge branch 'release-3.5.2' into develop 2022-03-09 22:45:32 +01:00
Stefan Otto
fc9935ae39 Merge branch 'release-3.5.2' 2022-03-09 22:38:58 +01:00
Stefan Otto
79dd6cce95 updated Changelog 2022-03-09 22:31:40 +01:00
Stefan Otto
bf2c99e56c v3.5.2 2022-03-09 22:25:55 +01:00
Stefan Otto
175e7c2156 v3.5.2 2022-03-09 22:23:36 +01:00
Stefan Otto
a3390b18ca security update for dependencies 2022-03-09 22:22:44 +01:00
Stefan Otto
5d4138fbe0 Merge branch 'master' into develop 2022-03-09 21:38:59 +01:00
Stefan Otto
81e6f3d26f Merge back complete release 3.5.1 from branch 'master' into develop 2022-03-09 21:19:46 +01:00
Saša Davidović
785cf03f43
Merge pull request #973 from sd4v1d/master
Update develop-deb.yml
2022-03-04 00:53:21 +01:00
Saša Davidović
a6bb7e148c
Update develop-deb.yml 2022-03-04 00:43:39 +01:00
Stefan Otto
8f6d06d0a5 Merge branch 'release-3.5.1' into develop 2022-03-03 15:04:53 +01:00
Stefan Otto
20789f8fed Merge branch 'release-3.5.1' 2022-03-03 15:04:13 +01:00
Stefan Otto
cab7eedbe3 updated CHANGELOG.md 2022-03-03 15:02:12 +01:00
Stefan Otto
6c288338e7 Merge branch 'release-3.5.1' into develop 2022-03-03 14:59:17 +01:00
Stefan Otto
a1df5854d4 Merge branch 'release-3.5.1' 2022-03-03 14:58:20 +01:00
Stefan Otto
6847d3e252 v3.5.1 2022-03-03 14:26:59 +01:00
Stefan Otto
6f072641bc v3.5.1 2022-03-03 14:26:48 +01:00
Stefan Otto
5bf83d8b33 Merge branch 'release-3.5.0' into develop 2022-03-03 14:12:47 +01:00
Stefan Otto
770b611805 Merge remote-tracking branch 'origin/release-3.5.0' 2022-03-03 13:50:48 +01:00
Saša Davidović
0a8b8eb2a7
Merge pull request #968 from sd4v1d/release-3.5.0
Set demo certificate as default
2022-02-27 16:21:05 +01:00
sd4v1d
c9b1a71c72 Set demo certificate as default
- change certs default values in config.ts
- update generated documentation
2022-02-27 16:11:43 +01:00
Saša Davidović
970bbea4a5
Merge pull request #967 from sd4v1d/release-3.5.0
New demo certificates and `yarn build` script update
2022-02-27 10:50:10 +01:00
sd4v1d
cec8f4a7fb Update yarn build script
- copy yaml, json and/or toml file during build process
2022-02-27 00:17:26 +01:00
sd4v1d
cbe414f7b6 Generated new certificate.
- new self signed certificate
- updated example configuration files
2022-02-26 23:28:23 +01:00
sd4v1d
320730ab05 Set demo certificates and correct typo in yaml
- set example certificates to demo
- correct configuration typo
- remove outdated github action file
2022-02-26 22:10:37 +01:00
Stefan Otto
5780cf1483 Merge branch 'release-3.5.0' 2022-02-25 16:41:09 +01:00
Stefan Otto
446b87d8ae
Update README.md 2022-02-25 14:49:05 +01:00
Stefan Otto
f5f2d30448
Merge pull request #957 from sd4v1d/release-3.5.0
Updated documentation and Debian packet build github action
2022-02-25 14:43:59 +01:00
sd4v1d
32424b6f02 syntax error in json file 2022-02-25 09:46:41 +01:00
sd4v1d
9631cb0085 Configuration & documentation update
- added toml config template
- app & server README.md files moved under config directories
- documentation update (configuration section)
2022-02-25 09:10:40 +01:00
Saša Davidović
bc4421f642
Update README.md 2022-02-21 20:32:33 +01:00
Saša Davidović
83af38074c
Merge branch 'edumeet:release-3.5.0' into release-3.5.0 2022-02-21 19:41:01 +01:00
sd4v1d
c0168f699f Update translation 2022-02-20 19:23:06 +01:00
Saša Davidović
3a4726cd9d
Update develop-deb.yml 2022-02-20 19:22:24 +01:00
Saša Davidović
ec477cb288
Update develop-deb.yml 2022-02-20 18:44:04 +01:00
Saša Davidović
aafe325bb9
Update develop-deb.yml 2022-02-20 11:37:34 +01:00
Saša Davidović
3c53e4b74a
Update develop-deb.yml 2022-02-20 11:32:54 +01:00
Astagor
4c9fc65a27
Restore video and audio state after automatic reconnect (#963) 2022-02-19 20:34:14 +01:00
Astagor
50ccfdb155
Restore video and audio state after automatic reconnect (#962) 2022-02-19 20:27:44 +01:00
Saša Davidović
259546ab95
Update README.md 2022-02-19 17:39:40 +01:00
Saša Davidović
fee5d0c99c
Merge branch 'edumeet:release-3.5.0' into release-3.5.0 2022-02-18 12:20:46 +01:00
Saša Davidović
190d06a259
Correcting node version in README.md 2022-02-18 12:20:27 +01:00
Rémai Gábor
f68d6b9b15 fix #961 2022-02-17 17:05:32 +00:00
Rémai Gábor
8743328395 update hungarian translations 2022-02-17 17:05:04 +00:00
Saša Davidović
d8cb76540a
minor syntax error 2022-02-17 16:02:47 +01:00
sd4v1d
1daeefb3b0 Documentation update (configuration section)
- escaping dynamically created default values (generated doc)
  - reorganizing configuration section documentation
  - adding yaml and json example files
2022-02-17 13:11:48 +01:00
Saša Davidović
9d4e287432
Merge branch 'edumeet:release-3.5.0' into release-3.5.0 2022-02-15 08:41:09 +01:00
Roman Drozd
5339977e9c Fix broken "yarn gen-config-docs" on node 16.x (by bumping iup "ts-node") 2022-02-14 23:12:29 +01:00
Saša Davidović
f64d8e5ca5
Set default production port to 443 2022-02-13 20:14:13 +01:00
Saša Davidović
5bb2bdd619
Update README.md 2022-02-13 20:12:43 +01:00
Saša Davidović
0491511f00
Update README.md 2022-02-13 20:00:43 +01:00
Saša Davidović
3fa23bc7e2
Update develop-deb.yml 2022-02-13 19:54:35 +01:00
Saša Davidović
01ddf1ff4b
Merge branch 'edumeet:release-3.5.0' into release-3.5.0 2022-02-13 19:48:36 +01:00
Roman Drozd
b047618ae4 Update pl.json - typo 2022-02-13 13:19:40 +01:00
Roman Drozd
3fa7b7b0b4 Update pl.json 2022-02-13 13:11:03 +01:00
Roman Drozd
0d3509ae88 Add missing entries (founded in code by new "upd-translation" yarn script) 2022-02-13 12:26:05 +01:00
Roman Drozd
fe374b85c2 Fix different "defaultMessage" value for the same id 2022-02-13 12:20:26 +01:00
Roman Drozd
215de747ea Change Intl Messages generatdin loop into plain tags 2022-02-13 12:05:26 +01:00
Saša Davidović
b3958d8ed3
Update develop-deb.yml 2022-02-13 10:26:38 +01:00
Saša Davidović
a46c73269b
Update develop-deb.yml 2022-02-13 10:17:09 +01:00
Roman Drozd
d4e82e65c6 Add missing entries (founded in code by new "upd-translation" yarn script) 2022-02-12 19:00:40 +01:00
Roman Drozd
473d471572 Sort alphabetically 2022-02-12 18:31:17 +01:00
Roman Drozd
c47b20ec3e Fix white spaces 2022-02-12 18:07:25 +01:00
Roman Drozd
6b2ea16398 Fix escaped slashes 2022-02-12 18:03:40 +01:00
Stefan Otto
38209465b9
Update SCALING_AND_HARDWARE.md 2022-02-11 20:07:04 +01:00
Stefan Otto
baf4abe443 Fix OIDC
This somehow disappeared in a large evil commit
2022-02-11 19:32:49 +01:00
Stefan Otto
5c3e00ac41 role back 2022-02-11 19:14:08 +01:00
Stefan Otto
475fae0766 Removing RPM because its not working anymore
If somebody wants to CONTRIBUTE and revive fedora/rpm support please just respawn these files and start frome there
2022-02-11 18:54:01 +01:00
Stefan Otto
5a8561587b update doc 2022-02-11 18:17:13 +01:00
Stefan Otto
5dfb62142c rpm version bumb and some obvious updates
But I think rpm will not work yet (WIP - if someone with Fedora can check/fix  this?)
2022-02-11 18:15:28 +01:00
Stefan Otto
82e4ff97a3 typo in en.json 2022-02-11 17:07:21 +01:00
Stefan Otto
6af2579b89 Merge branch 'master' into release-3.5.0 2022-02-11 17:06:48 +01:00
Stefan Otto
d9fadc5e50
Update CHANGELOG.md 2022-02-11 16:01:32 +01:00
Stefan Otto
5057bc2dff
Update CHANGELOG.md 2022-02-10 12:57:28 +01:00
sd4v1d
a7afc1cd8a Set production port to standard 433, and documentation update 2022-02-10 10:47:12 +01:00
Saša Davidović
0fba14a573
Merge pull request #955 from sd4v1d/release-3.5.0
Adding missing path
2022-02-10 07:37:05 +01:00
Saša Davidović
13702cc0a8
Adding missing path 2022-02-10 07:35:10 +01:00
Roman Drozd
9873099cba Remove unnecessary legacy files 2022-02-08 16:58:52 +01:00
Roman Drozd
3c0a720fc8 Remove unnecessary package-lock.json 2022-02-08 16:23:01 +01:00
Roman Drozd
3d651f4b60
Update README.md 2022-02-08 14:02:00 +01:00
Roman Drozd
64fbf34fb9
Merge pull request #954 from edumeet/refactor-intl
Refactor intl dirs  structure
2022-02-08 13:30:55 +01:00
Roman Drozd
6ed72aaee5 Refactor intl dirs structure 2022-02-08 13:26:20 +01:00
Roman Drozd
c3606b4d52 Standarize all translations files (the same order, add missed where needed) based on en.json 2022-02-08 00:19:00 +01:00
Roman Drozd
e34a708e33 Fix different "defaultMessage" value for the same id 2022-02-06 12:19:00 +01:00
develop
24d6c96b9e Croatian & Italian translation update
Corrected indentation in en.json file
Updated Croatian translation
Updated Italian translation (Thanks Lidija J. & Marija E.)
2022-02-05 17:14:09 +01:00
Stefan Otto
22df46a3ea Update caniuse-lite package for browserlist 2022-02-04 18:10:20 +01:00
Stefan Otto
de2ce7824a Update german translation 2022-02-04 18:06:39 +01:00
Stefan Otto
58a1d89135 fix translations 2022-02-04 18:06:14 +01:00
Stefan Otto
b2a110d28d fix en translation file 2022-02-04 17:18:04 +01:00
N7Remus
8f839aae47
Update hungarian translations. 2022-02-04 15:55:35 +01:00
N7Remus
e1ef748d7e
Merge pull request #952 from edumeet/develop
Update translations
2022-02-04 15:45:25 +01:00
Rémai Gábor
772958c9c5 Update translations 2022-02-04 14:42:32 +00:00
Rémai Gábor
4eee6b8fd3 Update inconsistent translations 2022-02-04 14:40:41 +00:00
Astagor
4c40eabc4e
Auto hide controls in new widow and full screen (#753) 2022-02-04 07:55:30 +01:00
N7Remus
a253821bfb
Add turn info, update email address 2022-02-03 18:08:26 +01:00
N7Remus
1fde9819dd
Merge pull request #951 from edumeet/develop
add hungarian translations
2022-02-03 18:03:31 +01:00
N7Remus
da7fbf16e7
Update hungarian translations 2022-02-03 17:52:24 +01:00
N7Remus
c8c3ee8e10
Update hungarian translations 2022-02-03 17:50:12 +01:00
Stefan Otto
880a50c463
bumb version to 3.5.0 2022-02-03 17:39:32 +01:00
Rémai Gábor
7af6f25592 copy yaml file to server dist on build 2022-02-03 15:46:55 +00:00
Rémai Gábor
7381ab28cf update version 2022-02-03 15:11:57 +00:00
Roman Drozd
ad03ce98a8
Update README.md 2022-02-03 05:34:55 +01:00
Roman Drozd
aa6b41c081
Update README.md 2022-02-03 05:32:31 +01:00
Roman Drozd
43e3bfa93a Remove old demo video file 2022-02-03 05:22:41 +01:00
Roman Drozd
ceb9987655
Update README.md 2022-02-03 05:21:32 +01:00
Roman Drozd
f0c5b3d76b
Update README.md demo file 2022-02-03 05:20:43 +01:00
Roman Drozd
7041e9d3d5 Revert "Add new demo video"
This reverts commit 874d5199e1.
2022-02-03 05:19:11 +01:00
Roman Drozd
874d5199e1 Add new demo video 2022-02-03 04:58:37 +01:00
Roman Drozd
cb23a5a1fe
Update README.md 2022-02-03 03:36:36 +01:00
Roman Drozd
abb0bccfe9 Fix not showing mute button when producer doesn't exist 2022-02-03 03:01:44 +01:00
Stefan Otto
2f0d925e8b
Added hint about /?config=true parameter 2022-02-03 01:45:53 +01:00
Roman Drozd
de79923d27
Update README.md
add website address
2022-02-02 22:10:51 +01:00
Roman Drozd
28ce892736 Merge branch 'feat-store-refactoring' into develop 2022-02-02 22:02:25 +01:00
Roman Drozd
fb2d8e0634 rootReducer reordering 2022-02-02 21:32:42 +01:00
Roman Drozd
412b513608 Fix mistake 2022-02-02 21:26:42 +01:00
Roman Drozd
f3f1fd8b25 Rename "recoderReducer" reducer into "recoder" 2022-02-02 21:08:56 +01:00
Roman Drozd
e3c1ccb492
Update README.md
Fix path
2022-02-02 20:58:38 +01:00
Roman Drozd
ea1228e8d2 Move "actions/" into store/ 2022-02-02 20:22:06 +01:00
Roman Drozd
2f056a3dda Move "reducers/" into store/ 2022-02-02 19:52:37 +01:00
Roman Drozd
1ddcc449aa Move "Selectors.js" into store/selectors.js 2022-02-02 19:52:37 +01:00
Roman Drozd
b12f15dca8 Create "store" dir and move "store.js" there 2022-02-02 19:52:37 +01:00
Stefan Otto
8d020df00a
TOC documentation, work in progress 2022-02-02 18:46:11 +01:00
Stefan Otto
43f8fe3b07 Adding central docs folder 2022-02-02 18:34:23 +01:00
Stefan Otto
acb05f2c08 Better nodejs version check 2022-02-02 18:18:26 +01:00
Stefan Otto
cdf64e77d2 Lint shadowing 2022-02-02 17:45:22 +01:00
Roman Drozd
2a4c6d83d0
Update README.md
typo
2022-02-02 17:42:11 +01:00
Roman Drozd
5d1122247f lint code 2022-02-02 16:28:16 +01:00
Stefan Otto
30e2fabc4f
Adding scaling and hardware from wiki to branch, so it's versioned now 2022-02-02 15:29:45 +01:00
N7Remus
31e603cfc7
Merge pull request #946 from edumeet/fix-readme
Update installation and setup steps + format
2022-02-02 15:20:34 +01:00
N7Remus
e8979f726f
Merge pull request #947 from edumeet/fix-readme-v2
Update README.md
2022-02-02 15:20:07 +01:00
N7Remus
61230887aa
Merge pull request #948 from edumeet/fix-readme-v3
Fix readme v3
2022-02-02 15:17:05 +01:00
N7Remus
07e245a691
add logo 2022-02-02 15:03:05 +01:00
N7Remus
5b5666f7b4
remove icons 2022-02-02 14:37:07 +01:00
Stefan Otto
58d35be845 increasing maxIncomingBitrate (typo?) 2022-02-02 14:30:46 +01:00
Stefan Otto
ae879d73d0 reenabling spdy for node.js versions<15 2022-02-02 14:30:00 +01:00
Stefan Otto
2358f38770 upgrading mediasoup since build problems are resolved 2022-02-02 14:28:37 +01:00
N7Remus
9ad9758f25
visual highlighting 2022-02-02 14:24:42 +01:00
N7Remus
330e606286
format add collapsible section 2022-02-02 14:14:45 +01:00
N7Remus
445d1ed07a
Format readme 2022-02-02 13:49:25 +01:00
Roman Drozd
2b91a7138b
Update README.md
A lot of description improvements.
2022-02-01 23:29:11 +01:00
N7Remus
2a66031b33
Update installation and setup steps 2022-02-01 16:19:16 +01:00
Stefan Otto
5a0761c015 downgrading mediasoup because of weird build problems 2022-02-01 14:24:22 +01:00
Stefan Otto
e1ec3ae79a Update to work with node.js v16 LTS
Redis:
- redis-> redis@v3 until v4 is working stable
  ( https://github.com/tj/connect-redis/issues/336 )
- connect-redis -> 6.0.0
- update @types/connect-redis -> ^0.0.18 and removed
  @types/redis since this is not necessary anymore

Corrected edumeet server version

deactivated spdy since it is not working anymore with node.js>15
( https://github.com/spdy-http2/node-spdy/issues/380 )

removed package-lock.json ( just support yarn, use npm at your own risk
2022-02-01 11:37:08 +01:00
Stefan Otto
6711bd1709
added python3-pip to manual install documentation 2022-02-01 01:45:45 +01:00
Stefan Otto
22b18ff3b9
Merge pull request #945 from edumeet/feat-localrecording-disclaimer-v2
Localrecording Disclaimer
2022-01-31 22:42:28 +01:00
Rémai Gábor
79d31b23f1 Add translations for localrecording 2022-01-28 13:43:58 +00:00
Rémai Gábor
bea537f162 yarn gen-config 2022-01-28 13:32:00 +00:00
Rémai Gábor
ffb722bc4c Localrecording Disclaimer 2022-01-26 22:38:17 +01:00
Stefan Otto
8f584b2a7a
Merge pull request #943 from Astagor/fix_prometheus_for_mediasoup_3_9
Map all mediasoup objects using observer and fix prometheus
2022-01-26 16:09:20 +01:00
Saša Davidović
1a5bb5b18d
Update develop-deb.yml 2022-01-22 20:25:20 +01:00
Saša Davidović
ddd79a7071
Update develop-deb.yml 2022-01-22 20:16:31 +01:00
Saša Davidović
cbe30d4aaa
disable automatic Action trigger 2022-01-22 19:30:51 +01:00
Saša Davidović
20780c2a67
Disable automatic run 2022-01-22 19:14:42 +01:00
Saša Davidović
bc36deef34
set "yarn pack" instead "yarn build" 2022-01-22 18:40:15 +01:00
Saša Davidović
0d8af700c6
Set env variable CI to false 2022-01-22 18:17:12 +01:00
Saša Davidović
419e25591a
Update develop-deb.yml 2022-01-22 18:01:33 +01:00
Saša Davidović
aae9b4f776
Create develop-deb.yml
Create Debian package Action for develop branch
2022-01-22 17:49:04 +01:00
astagor
11e67f401f Fix mixing of interators for values and entries 2022-01-18 10:53:12 +01:00
astagor
add1d67555 Map all mediasoup objects using observer and fix prometheus 2022-01-17 17:09:17 +01:00
Saša Davidović
90121d0fb6
Update main.yml 2022-01-14 21:33:59 +01:00
Astagor
463c278388
Fix auto unmute on separate control bar (#940) 2022-01-14 15:12:53 +01:00
Stefan Otto
53f3635015
Merge pull request #937 from Astagor/fix_for_mediasoup_3_9
Fix for mediaSoup 3.9
2022-01-14 15:09:46 +01:00
Stefan Otto
69ed161356
Merge pull request #928 from Astagor/fix_token_session_override
Fix session overwrites
2022-01-14 13:13:45 +01:00
Roman Drozd
66fcc84d8b Fix default prod port 2021-12-22 04:33:06 +01:00
Roman Drozd
9e4daae83c Fix linting/fixing scripts (removing prettier, eslint do the job for all .js/.ts/.jsx/.tsx 2021-12-22 02:49:34 +01:00
Roman Drozd
d7768957ab Generate README.md 2021-12-22 02:14:25 +01:00
Roman Drozd
9182ae66df update yarn.lock 2021-12-22 02:11:59 +01:00
Roman Drozd
c26a0da4c2 Remove unused vars 2021-12-22 02:08:00 +01:00
Roman Drozd
27873ad22c Merge branch 'fix-ui-bugs' into develop 2021-12-22 01:45:43 +01:00
Roman Drozd
d48f2bbec6 Merge branch 'feat-srv-lint' into develop 2021-12-22 01:40:15 +01:00
Roman Drozd
3bd40b4603 Remove unused vars 2021-12-22 01:21:53 +01:00
Roman Drozd
16af62e1a5 Satisfy eslint 2021-12-21 21:10:31 +01:00
Roman Drozd
886c0a4f72 Generate new readme and config template 2021-12-21 16:24:43 +01:00
Roman Drozd
0936500916 Refactor code 2021-12-21 16:06:49 +01:00
Roman Drozd
c420fd80a7 Fix videoInfo sizes 2021-12-21 14:31:39 +01:00
Roman Drozd
95a2ce30a8 Fix meTag & videoInfo logic 2021-12-21 13:56:11 +01:00
Roman Drozd
67bb1eac44 Fix videoInfo size 2021-12-21 04:33:02 +01:00
Roman Drozd
33ec7429c9 Refactor code 2021-12-21 02:24:18 +01:00
Roman Drozd
3c97958c6e Fix tooltip placement 2021-12-20 22:16:10 +01:00
Roman Drozd
f6a450ade1 Fix controls buttons responsiveness 2021-12-20 21:51:16 +01:00
Roman Drozd
a106a489a6 Fix unvisible disabled buttons 2021-12-20 21:43:13 +01:00
Roman Drozd
2076e1658b Adjust responsiveness 2021-12-20 17:05:40 +01:00
Roman Drozd
fc7383eb97 Fix typo 2021-12-20 15:43:44 +01:00
Roman Drozd
6168791b3e Add describing comment 2021-12-20 15:11:45 +01:00
Roman Drozd
3ac38fbfb6 Fix ptt showing 2021-12-20 14:48:53 +01:00
Roman Drozd
93fef4c578 Simplify logic 2021-12-20 14:41:47 +01:00
Roman Drozd
f6333c66c5 Reduce logic 2021-12-20 03:22:46 +01:00
Roman Drozd
adefb80bb6 Put additional styles logic closer to styles 2021-12-20 02:44:47 +01:00
Roman Drozd
170c943b93 Fix meTag & videoInfo sizes 2021-12-20 02:18:21 +01:00
Roman Drozd
453a26434b Adjust videoInfo style 2021-12-20 00:47:27 +01:00
Roman Drozd
95767de97a Adjust styles 2021-12-19 23:25:30 +01:00
Roman Drozd
fe05fb867c Remove unused code 2021-12-19 19:13:11 +01:00
Roman Drozd
b98c13de05 Fix buttons position for smallest container 2021-12-19 17:26:35 +01:00
Roman Drozd
40022c7eb5 Improve PTT responsivness 2021-12-19 17:16:46 +01:00
Roman Drozd
33c1d55c38 Fix PTT and Mic btn indicator responsiveness (10sec->1sec) 2021-12-19 16:52:07 +01:00
astagor
fbb0f599de Check if session peerId equals request peerId for getting token 2021-12-16 14:35:23 +01:00
Astagor
0e42d705c1
Fix chat names (#929)
* Fix chat names

* Start a new chat bubble on name change
2021-12-15 18:25:43 +01:00
Astagor
2783dce8c0
Fix not closing extra video producers od disconnect (#938) 2021-12-15 18:21:58 +01:00
Roman Drozd
0da1ec1ebf Allow creating any additional style for controls depending on container size 2021-12-15 17:01:24 +01:00
astagor
1b3f960682 Fix for mediaSoup 3.9 2021-12-15 16:06:58 +01:00
Roman Drozd
b81665f7e4 Remove style not longer needed 2021-12-15 15:29:24 +01:00
Roman Drozd
3baadb24a4 Improve style 2021-12-15 15:12:22 +01:00
Roman Drozd
eeb9f89aac Move size recognizing from peer/me/speakerPeer into democratic/filmstrip 2021-12-15 14:52:46 +01:00
Roman Drozd
6aaac0ff4f Satisfy eslint 2021-12-15 13:25:12 +01:00
Roman Drozd
5fe36c27e1 Standarize passing style/sizes 2021-12-15 13:22:22 +01:00
Roman Drozd
30a34c6e8a Remove unused import 2021-12-15 03:48:55 +01:00
Roman Drozd
59c530fe72 Remove Peer IconButton buttons (remove a lot of "redundant" code) 2021-12-15 03:07:19 +01:00
Roman Drozd
7d9a5a09eb Update Peer rest logic 2021-12-15 01:40:28 +01:00
Roman Drozd
110371bd6b Update Peer responsivness logic 2021-12-15 01:14:02 +01:00
Roman Drozd
24e78954ab Add non-standard "smallest" size for "Fab" buttons 2021-12-15 01:09:08 +01:00
Roman Drozd
b362aa5610 Adjust Me responsiveness logic 2021-12-15 01:05:01 +01:00
Roman Drozd
2ea668151f Adjust Me responsiveness 2021-12-15 00:58:50 +01:00
Roman Drozd
9d5cfd46ca Remove Me IconButton buttons (remove a lot of "redundant" code) 2021-12-14 23:42:18 +01:00
Roman Drozd
08bcc9e243 Replace Me buttons: IconButton with Fab (with new "smallest" class) 2021-12-14 23:30:14 +01:00
Roman Drozd
41cb721cd6 Add non-standard "smallest" size for "Fab" buttons 2021-12-14 22:43:20 +01:00
Roman Drozd
47c363e704 Fix Peer flatten icon 2021-12-14 20:27:53 +01:00
Roman Drozd
3ec65dfac0 Add missed style 2021-12-14 20:26:18 +01:00
Roman Drozd
65d00379c6 Disable horizontal 2021-12-14 20:25:39 +01:00
Roman Drozd
b935ea1f1e Fix controls buttons sizes 2021-12-14 03:29:03 +01:00
Roman Drozd
2757759501 Fix "Me" control buttons pressing (not worked every time) 2021-12-14 03:00:48 +01:00
Roman Drozd
a76b833778 Fix "Peer" controls buttons (responsiveness) 2021-12-14 02:36:18 +01:00
Roman Drozd
3207107182 Fix "Me" controls buttons (responsiveness) 2021-12-14 02:02:11 +01:00
Roman Drozd
fbb695c90b Add blocks describing comments 2021-12-13 17:35:35 +01:00
Roman Drozd
3182872901 Undo changes from "Standarize colors (8056e9c)" commit 2021-12-13 17:33:41 +01:00
Roman Drozd
cc314ffc14 Hide self view window" must switch on separate media buttons #936 2021-12-12 13:53:21 +01:00
Roman Drozd
fab0b61af9 Change script name 2021-12-07 13:12:42 +01:00
Roman Drozd
f881363224 Fix/improve syntax (reported by eslint) 2021-12-04 18:14:15 +01:00
Roman Drozd
c5b632e4d3 Rm prettier formatter (eslint lints/formats both js & ts files) 2021-12-04 15:53:18 +01:00
Roman Drozd
63fc0d8a85 Add lint fixing script (independent of npm or yarn) 2021-12-04 02:18:24 +01:00
Roman Drozd
4861df5de1 Simplify "lint" script syntax 2021-12-04 02:03:39 +01:00
Roman Drozd
1c2f247cd7 Fix/hiding shell err code after "npm run lint" or "yar lint") 2021-12-04 01:57:57 +01:00
Roman Drozd
c4c958e998 Fix linting script files range checking (server.js was not considered) 2021-12-04 01:48:07 +01:00
Roman Drozd
b14c62c4b6 Fix linting script syntax error 2021-12-04 01:40:40 +01:00
N7Remus
bb46e2d633
Merge pull request #913 from edumeet/fix-localrecording-readme
modify local recording readme
2021-11-19 11:39:11 +01:00
Roman Drozd
9f6b4604e6 Update (generate) srv doc 2021-11-18 02:32:02 +01:00
Roman Drozd
da01d59e21 Update (generate) config template & doc 2021-11-18 02:29:13 +01:00
Roman Drozd
a0d94f138c Undo changes from "Standarize colors (8056e9c)" commit 2021-11-18 02:25:34 +01:00
Roman Drozd
7dac8551be Fix remove duplicated (old) translations entries 2021-11-15 13:34:48 +01:00
Roman Drozd
e53420a374 Fix missed translations values 2021-11-15 13:20:37 +01:00
Saša Davidović
dcb11ad6b6
Merge pull request #921 from sd4v1d/feat-getListenIp
Add automatic IP address detection
2021-11-11 09:46:14 +01:00
astagor
2fca8df246 Fix session overwrites 2021-11-07 17:09:25 +01:00
Stefan Otto
4e5f601371 lint for blamed so010 2021-11-05 10:40:51 +01:00
sd4v1d
d31169e0dc set default IP address to 0.0.0.0
- if network interface is not detected, set to default IP address 0.0.0.0
- interface whitelist expanded
- linting
2021-11-04 23:44:37 +01:00
Roman Drozd
d12620cbe4 lint server side files 2021-11-04 22:15:17 +01:00
Roman Drozd
c14a376124 Fix missed translations values 2021-11-03 15:19:01 +01:00
Roman Drozd
6e9dd67b78 Fix translation label name 2021-11-03 15:06:47 +01:00
Roman Drozd
cfaf9a1aaa Set focus on input field when chat is opened 2021-11-03 13:45:20 +01:00
Roman Drozd
2f5c33d491 Fix leaving buttons on smaller screens 2021-11-03 12:39:02 +01:00
Roman Drozd
7c09d28be1 Fix login button on smaller screens 2021-11-03 02:40:22 +01:00
Roman Drozd
53efafe01e Fix join button on smaller screens 2021-11-03 01:22:30 +01:00
Roman Drozd
500dd2c412 Fix login button on smaller screens 2021-11-03 01:21:46 +01:00
sd4v1d
69ac023827 Add automatic IP address detection
Based on edumeet-docker configuration option (@misi)
2021-10-25 12:17:38 +02:00
Mészáros Mihály
15a9d590df
Add debug config 2021-10-21 16:37:20 +02:00
Stefan Otto
1538f331a7 lint 2021-10-19 21:46:43 +02:00
Stefan Otto
b741d1efc6 New simulcast profiles (please test!) 2021-10-19 21:42:42 +02:00
Stefan Otto
d4be4210e4 some eslint fixes 2021-10-19 21:34:54 +02:00
Stefan Otto
a05969afee Fix 2 double depencies 2021-10-19 21:29:05 +02:00
Stefan Otto
26f133172d Fix if auth calls back with no user name 2021-10-19 19:07:25 +02:00
N7Remus
10f664a926 modify local recording readme 2021-10-15 14:18:21 +02:00
Roman Drozd
95e8d9c9a3 Update dependencies lock files 2021-10-06 01:58:57 +02:00
Astagor
78c0277b9e
Log the reason of disconnect (#910) 2021-10-01 16:07:43 +02:00
Astagor
95fd999a3b
Remove notification when peer returning (#901)
As no comments appeared, I'm merging it. I have used it for almost 2 weeks on my productions servers.
2021-09-28 12:22:06 +02:00
Stefan Otto
eb876383ca
Merge pull request #883 from edumeet/misi/server-update
Misi/server update 
Thx Misi
2021-09-24 15:56:39 +02:00
Roman Drozd
ee0641cb7c Adjust advanced mode styles styles 2021-09-16 04:50:40 +02:00
Roman Drozd
6158a7f3ae Indent properities 2021-09-16 03:49:35 +02:00
Roman Drozd
0942c74914 Adjust audio analyzer styles 2021-09-16 03:47:33 +02:00
Roman Drozd
1276198f0c Move analyzer to the left and adjust styles 2021-09-16 02:47:13 +02:00
Roman Drozd
d18beb2d7b Show advanced menu (analyzer button), on peer view when andvanced mode is on (pressed A) 2021-09-16 01:56:00 +02:00
Roman Drozd
26748e931f Fix hiding Audio analizer when advanced mode is off 2021-09-16 01:52:55 +02:00
Roman Drozd
38e1e8890c Show advanced menu button (audio analyzer) only when andvanced mode is on 2021-09-15 18:08:02 +02:00
Roman Drozd
0914dacb09 Merge branch 'feat-refactor-server-files-structure' into develop 2021-09-14 14:20:57 +02:00
Roman Drozd
431309470c Fix server config file loading pathes 2021-09-14 14:20:05 +02:00
Roman Drozd
4f6202e195 Merge branch 'feat-refactor-builded-dirs' into develop 2021-09-11 15:46:24 +02:00
Roman Drozd
0cce36a32b Remove legacy public path 2021-09-11 15:45:09 +02:00
Roman Drozd
7757776737 Merge branch 'feat-refactor-builded-dirs' into develop 2021-09-11 15:21:46 +02:00
Roman Drozd
9fe263b4cd Fix server/dist/public removing 2021-09-11 15:18:29 +02:00
Roman Drozd
eb856c47f2 Merge branch 'feat-refactor-builded-dirs' into develop 2021-09-11 14:46:03 +02:00
Roman Drozd
7b1636f279 Merge branch 'feat-refactor-server-files-structure' into develop 2021-09-10 23:43:00 +02:00
Roman Drozd
62d08c4ce1 Fix config docs generator path 2021-09-10 17:52:42 +02:00
Roman Drozd
b29d0a1623 Revert "Move config docs generator"
This reverts commit 1dd985a296.
2021-09-10 17:49:32 +02:00
Roman Drozd
1dd985a296 Move config docs generator 2021-09-10 15:29:06 +02:00
Roman Drozd
f26ff81db8 Update import/require' pathes for reorganized server side's files 2021-09-10 13:37:42 +02:00
Roman Drozd
7e9163eb47 Reorganize some server side's files 2021-09-10 13:37:42 +02:00
Astagor
bf2e859e54
Fix no token in session when reconnecting (#896) 2021-08-17 14:13:37 +02:00
Astagor
6a0d5733bc
Fix browser version comparison (#894) 2021-08-06 11:59:59 +02:00
Roman Drozd
295b353f61 Fix installing/building using npm 2021-07-28 02:20:51 +02:00
Roman Drozd
f22ba20efa Fix syntax errors 2021-07-27 14:59:21 +02:00
Roman Drozd
2ee003e0f2 Fix typo 2021-07-27 14:35:17 +02:00
Roman Drozd
4b44b75912 Add a warning to "server/dist" 2021-07-21 15:42:42 +02:00
Roman Drozd
50cd2c373e Move (prev: copy) "app/build" after building to "server/dist/public" (prev: server/public) 2021-07-21 15:14:59 +02:00
Mészáros Mihály
a45c51c457 Remove no more necessary @types/helmet 2021-07-13 19:23:20 +02:00
Mészáros Mihály
09145a522b Security update passport-saml and redis 2021-07-13 19:22:46 +02:00
Mészáros Mihály
11d1907695 Update mediasoup 2021-07-13 19:16:23 +02:00
N7Remus
3e6fb2816b
Merge pull request #878 from hkizilhan/fix-localrecording-saveToDB
fix unreachable 'this' object.
2021-06-25 15:25:16 +02:00
Hakan
d9f3771db3 fix unreachable 'this' object. 2021-06-19 02:22:08 +03:00
N7Remus
684332df7d
Merge pull request #781 from edumeet/feat-localrecording-misi
Local recording feature
2021-06-14 15:06:42 +02:00
remus
92408b6eba remove localrecording button from mobile view 2021-06-14 13:05:38 +00:00
remus
5fe193b311 default mimetype fix (lost in merge) 2021-06-13 20:45:29 +00:00
remus
dc2dcc362d Merge develop into feat-localrecording-misi 2021-06-11 15:44:53 +00:00
remus
42cccaf38a Merge remote-tracking branch 'origin/develop' into feat-localrecording-misi 2021-06-11 15:43:22 +00:00
Vittorio Palmisano
ceeda29138 audio analyzer: stop rendering loop when deleted 2021-06-11 16:28:33 +02:00
Vittorio Palmisano
7d4e24d7c1 remove unsupportedBrowserElement on delete 2021-06-11 16:15:59 +02:00
Vittorio Palmisano
3a1eea7e02 added supportedBrowsers function to audio analyzer; fixed error on Firefox 2021-06-11 16:06:42 +02:00
remus
7721440740 remove emitter and use intl instead 2021-06-11 15:50:13 +02:00
remus
5bd50fdee5 participant's sound is added to audioContext 2021-06-11 15:50:13 +02:00
Gábor Rémai
0f3603c479 test 2021-06-11 15:50:13 +02:00
Gábor Rémai
f79860da2c refactoring alfa 2021-06-11 15:50:13 +02:00
Gábor Rémai
8a06b89142 dev 2021-06-11 15:50:13 +02:00
Gábor Rémai
d2ebb92d40 refactoring alfa 2021-06-11 15:50:13 +02:00
Roman Drozd
3f1b54bdb3 Merge branch 'feat-room-leaving-confirmation' into develop 2021-06-06 03:54:34 +02:00
Roman Drozd
f026491131 fix typo 2021-06-06 03:54:13 +02:00
Roman Drozd
59ad6c919b
Merge pull request #788 from edumeet/feat-room-leaving-confirmation
Add leaving room confirmation Dialog
2021-06-06 03:36:27 +02:00
Roman Drozd
2c525a3250 Update leaving room dialog translations 2021-06-06 03:30:51 +02:00
Roman Drozd
3bbc9f029f Fix closing leaving dialog by Escape key 2021-06-06 02:52:43 +02:00
Roman Drozd
3584a29dd7 Remove blank line 2021-06-06 01:28:54 +02:00
Roman Drozd
2e8d102473 Remove unused import 2021-06-06 01:26:35 +02:00
Roman Drozd
b3c51bc15b Disable "Yes + Save Chat" button when no chat messages 2021-06-06 01:18:54 +02:00
Roman Drozd
b3cacd94c4 Add Enter handling to Room Leaving dialog 2021-06-06 00:46:45 +02:00
Roman Drozd
2576c4f218 Add closing room when leaving with saving Chat 2021-06-05 23:35:19 +02:00
Roman Drozd
7d8fc3a920 Merge branch 'develop' into feat-room-leaving-confirmation 2021-06-05 23:24:24 +02:00
Vittorio Palmisano
b4abfd8b1a updated lock file 2021-06-04 16:06:32 +02:00
Vittorio Palmisano
15bbe5f2d8
Merge pull request #777 from edumeet/feat-advanced-audio-options
Feat advanced audio options
2021-06-04 16:01:59 +02:00
Vittorio Palmisano
c9900156dd Merge branch 'develop' into feat-advanced-audio-options 2021-06-04 14:44:21 +02:00
Vittorio Palmisano
1deab49e75 updated docs 2021-06-04 14:41:06 +02:00
Vittorio Palmisano
c675492ad5 updated default tracker 2021-06-04 14:39:23 +02:00
Stefan Otto
0535c5728e
Update config.example.js
include a working bittorrent-tracker in default config
2021-06-04 14:35:04 +02:00
Vittorio Palmisano
54e4d9c6fd Merge branch 'develop' into feat-advanced-audio-options 2021-06-04 09:33:47 +02:00
Vittorio Palmisano
990bda93d6 updated lockfile 2021-06-04 09:32:30 +02:00
Roman Drozd
208f6cadda Merge branch 'feat-chat-update' into develop 2021-06-03 22:42:47 +02:00
Roman Drozd
8c9860f7d2 Improve Chat Input styles 2021-06-03 22:23:34 +02:00
Roman Drozd
b8a886b658 Add Chat input color background 2021-06-03 22:18:08 +02:00
Roman Drozd
78e5f56ea1 Comment unused code 2021-06-03 21:34:41 +02:00
Roman Drozd
c293e9e0ab Remove usused imports 2021-06-03 21:32:57 +02:00
Roman Drozd
71648dd636 Clean code 2021-06-03 19:43:24 +02:00
Vittorio Palmisano
475351cc95 comment unused vars 2021-06-03 15:05:01 +02:00
Vittorio Palmisano
953dd1bf23 Merge branch 'develop' into feat-advanced-audio-options 2021-06-03 14:12:32 +02:00
Vittorio Palmisano
1f96712503 added comment 2021-06-03 14:11:32 +02:00
Vittorio Palmisano
1f338485b7 handling the case of empty window.config object 2021-06-03 13:21:35 +02:00
Vittorio Palmisano
1720ecf127 typo 2021-06-03 13:11:18 +02:00
Vittorio Palmisano
716f98c381 using a /?config=true query param to show the configuration documentation page 2021-06-03 13:10:49 +02:00
Vittorio Palmisano
93554fa98e merge with the last develop modifications 2021-06-03 12:46:53 +02:00
Vittorio Palmisano
6f899e789b Merge branch 'develop' into feat-advanced-audio-options 2021-06-03 12:30:07 +02:00
Vittorio Palmisano
e703488a90 minors 2021-06-03 12:15:39 +02:00
Vittorio Palmisano
b6f9329ee4 better comments formatting 2021-06-03 12:05:06 +02:00
Vittorio Palmisano
8235f6394c using aspectRatio and aspectRatios config variables; remove unused videoAspectRatio 2021-06-03 11:59:18 +02:00
Vittorio Palmisano
d95cadf551 fixed docs formatting issues 2021-06-03 11:48:54 +02:00
Vittorio Palmisano
2d67aa700f fixed theme params configuration 2021-06-03 11:43:10 +02:00
Vittorio Palmisano
abefdcce72 added missing centralAudioOptions prop; auto-generating the config.example.js file 2021-06-03 11:32:55 +02:00
Vittorio Palmisano
52156c7f6d added link to the config module 2021-05-31 17:31:04 +02:00
Vittorio Palmisano
0d69dd19f9 added docs config generator 2021-05-31 17:22:09 +02:00
Vittorio Palmisano
08ac842799 fixed missing comma and space 2021-05-31 17:15:51 +02:00
Vittorio Palmisano
0a68412587 fixed pending merge 2021-05-31 17:09:05 +02:00
Vittorio Palmisano
0d54c1361e updated docs 2021-05-31 17:06:04 +02:00
Vittorio Palmisano
31a8fa45a4 Merge branch 'develop' into feat-advanced-audio-options 2021-05-31 17:03:27 +02:00
Vittorio Palmisano
ccfd1f7aab replacing window.config refs with the new config module 2021-05-31 16:55:50 +02:00
Vittorio Palmisano
c3e978cd8b fixed incorrect path persmissions in docker build 2021-05-31 13:14:33 +02:00
Vittorio Palmisano
cffc384c8f changed config path resolution and displaying debug infos about path locations 2021-05-31 12:39:04 +02:00
Vittorio Palmisano
167f4fdb8b
Merge pull request #866 from sd4v1d/develop
Update config.example.js
2021-05-30 22:04:53 +02:00
Saša Davidović
f130676e56
Update config.example.js
Not needed with new configuration style
2021-05-30 19:26:31 +02:00
Vittorio Palmisano
ecb1de7ee1 added doc generator for app 2021-05-28 21:22:34 +02:00
Vittorio Palmisano
f607111271 allow to set a generic audioPreset 2021-05-28 19:58:58 +02:00
Vittorio Palmisano
d24cf6e2bf using new config implementation; added an option for enable the advanced opus details 2021-05-28 19:49:57 +02:00
Vittorio Palmisano
29a2edc13c Merge branch 'develop' into feat-advanced-audio-options 2021-05-28 18:29:50 +02:00
Vittorio Palmisano
ff9163cf01 lint fix 2021-05-28 17:54:13 +02:00
Vittorio Palmisano
48f61d6bc9
Merge pull request #801 from edumeet/feat-advanced-configuration-system
New app configuration system
2021-05-28 17:41:57 +02:00
Vittorio Palmisano
8e5444ca22 Merge branch 'develop' into feat-advanced-configuration-system 2021-05-28 17:23:10 +02:00
Roman Drozd
afa8391e11 Undo 05d2e60 commit changes (manually) 2021-05-28 00:23:23 +02:00
Roman Drozd
76badae08e
Merge pull request #863 from edumeet/fix-managing-locale-code
Fix language selection (wrong locale code setting)
2021-05-27 01:03:47 +02:00
Roman Drozd
30d35e02fb Fix language selection (wrong locale code setting) 2021-05-27 00:54:14 +02:00
Roman Drozd
f1b6a93d29 Add "Leave with saving chat" button handler 2021-05-25 19:13:01 +02:00
Roman Drozd
e1c76f2409
Merge pull request #860 from toto6038/develop
Update tw.json
2021-05-25 12:49:23 +02:00
toto6038
8f1330a77d
Update tw.json
The existing version is mostly translated by just swapping the characters from Simplified Chinese to Traditional Chinese, thus results in poor localization quality. This commit is intended to fix that problem.
2021-05-25 14:33:02 +08:00
Roman Drozd
876736d2f2 Add "Leave with saving chat" button 2021-05-21 11:47:10 +02:00
Roman Drozd
22a0e17b42 Fix Chat item avatar spacing 2021-05-20 12:51:58 +02:00
Roman Drozd
8dc30ce50e Remove name from own Chat items (leave only "Me" label) 2021-05-20 11:57:27 +02:00
Roman Drozd
aad2597e2d Remove commented code 2021-05-20 02:45:04 +02:00
Roman Drozd
7b2345a469 Fix Chat items spacing 2021-05-20 02:35:12 +02:00
Roman Drozd
e7166908a9 Fix Chat file item name 2021-05-20 02:00:24 +02:00
Roman Drozd
e954e7a1ac Standarize Chat file item's props with message's ones 2021-05-19 22:19:19 +02:00
Roman Drozd
1b9c0542fb Remove unused code 2021-05-19 22:15:42 +02:00
Roman Drozd
ae6e96d808 Remove unused code 2021-05-19 19:14:02 +02:00
Roman Drozd
58e1506d27 Refactor and clean unused code of Chat message 2021-05-19 19:06:46 +02:00
Roman Drozd
d3c636eb6a Refactor and clean unused code of Chat message 2021-05-19 18:37:09 +02:00
Roman Drozd
e12c26b5b2 Fix setting correct width of combined Chat message when more text is placed 2021-05-19 18:30:43 +02:00
Roman Drozd
11ca2e31f4 Remove unused imported modules 2021-05-17 23:02:51 +02:00
Roman Drozd
b090d82a43 Refactor Chat file message intl waring/errors) 2021-05-17 22:57:24 +02:00
Roman Drozd
d926946b2d Disable Chat saving on mobile (doesn't work on some browsers (i.e Samsung Internet) 2021-05-17 19:01:16 +02:00
Roman Drozd
15b28b1748 Disable Chat messages formating on mobile (bugs in used "draft.js" lib) 2021-05-17 18:57:00 +02:00
Roman Drozd
d7e46ff428 Remove unused hook declaration 2021-05-17 03:01:20 +02:00
Roman Drozd
74bb2c417b Fix Chat file item combined time spacing 2021-05-16 23:12:07 +02:00
Roman Drozd
fddb5c8a6c Clean Chat file item 2021-05-16 17:58:30 +02:00
Roman Drozd
d0ae72371f Fix Chat file spacing 2021-05-16 17:48:06 +02:00
Roman Drozd
47058f1991 Add finger pointer over Chat file item 2021-05-16 17:24:21 +02:00
Roman Drozd
5d61672db0 Clean Chat file item 2021-05-16 17:03:27 +02:00
Roman Drozd
05d2e607fe Fix Chat file progress indicator 2021-05-16 16:50:46 +02:00
Roman Drozd
2014d4340e Fix Chat file item format 2021-05-15 16:53:12 +02:00
Vittorio Palmisano
b6bc72168e adjusted docs 2021-05-14 14:06:07 +02:00
Vittorio Palmisano
a19cc4ad86 adjusted docs 2021-05-14 14:04:45 +02:00
Vittorio Palmisano
086adbd207 updated docs 2021-05-07 13:54:42 +02:00
Vittorio Palmisano
60ae01b58b fixed prometheus expoter classes with linting 2021-05-07 13:53:49 +02:00
Vittorio Palmisano
3e61780394 fixed prometheus expoter classes with linting 2021-05-07 13:52:59 +02:00
Vittorio Palmisano
2f04658213 added staticFilesCachePeriod config param 2021-05-07 12:12:02 +02:00
Vittorio Palmisano
98d8177234 added staticFilesCachePeriod config param 2021-05-07 12:03:55 +02:00
Vittorio Palmisano
f547ccff0e make listeningRedirectPort optional 2021-05-07 11:57:45 +02:00
Vittorio Palmisano
b1c3b74767 changed edge supported version (#803) 2021-05-06 13:40:12 +02:00
Vittorio Palmisano
868ab40c25 re-added user roles to config example 2021-05-06 12:43:13 +02:00
Vittorio Palmisano
5f71f0af8b fixed user roles in config 2021-05-06 12:34:46 +02:00
Vittorio Palmisano
88f484d294 replaced config references 2021-05-06 12:31:25 +02:00
Vittorio Palmisano
44b0a02571 replaced config references 2021-05-06 12:20:05 +02:00
Vittorio Palmisano
ea327d69c6 fixed config import path 2021-05-06 12:15:11 +02:00
Vittorio Palmisano
19fd6d2629 removed unsed vars 2021-05-06 12:13:06 +02:00
Vittorio Palmisano
7eb5921b61 removed unsed vars 2021-05-06 12:12:01 +02:00
Vittorio Palmisano
8578021fb4 Changed: server/README.md
server/lib/config.ts
2021-05-06 12:06:34 +02:00
Vittorio Palmisano
8ad5d1b52c Changed: server/README.md
server/lib/config.ts
2021-05-06 12:03:33 +02:00
Vittorio Palmisano
e202a29138 Changed: server/README.md
server/gen-config-docs.ts
2021-05-06 12:00:34 +02:00
Vittorio Palmisano
249ce992f5 rever default config settings 2021-05-06 11:58:15 +02:00
Vittorio Palmisano
8a2895b83c add default config.js 2021-05-06 11:41:54 +02:00
Vittorio Palmisano
834152ca53 adde more docs 2021-05-06 11:39:22 +02:00
Vittorio Palmisano
1107faa73b using new server config in compose environment 2021-05-06 11:31:16 +02:00
Vittorio Palmisano
d3557b8133 renamed doc file; using links formatting 2021-05-06 10:44:14 +02:00
Vittorio Palmisano
16c4c28fce added doc auto generator 2021-05-06 10:38:49 +02:00
Vittorio Palmisano
639dfe2831 removed example config 2021-05-06 10:11:19 +02:00
Vittorio Palmisano
d0881873df WIP using new config for server 2021-05-05 20:07:28 +02:00
Vittorio Palmisano
7e4f97b22e WIP using new config for server 2021-05-05 20:03:38 +02:00
Vittorio Palmisano
6ce0e1ffc0 handle edge browser on non-windows platform 2021-05-05 15:56:55 +02:00
Vittorio Palmisano
b50c6d2765 lint fixes 2021-05-05 15:46:37 +02:00
Vittorio Palmisano
cfbbbc9a20 Merge branch 'develop' into feat-advanced-configuration-system 2021-05-05 14:27:10 +02:00
Vittorio Palmisano
e819f3a1b3 Changed: app/src/reducers/settings.js 2021-05-05 14:25:59 +02:00
Stefan Otto
3c9b63462d
Merge pull request #804 from edumeet/feat-fix-install-doc
Updating the manual install steps
2021-05-05 13:46:44 +02:00
Vittorio Palmisano
fa09c49f5a
Update README.md 2021-05-05 13:17:32 +02:00
Vittorio Palmisano
01ffcafab4
Update edumeet.service 2021-05-05 13:14:16 +02:00
Vittorio Palmisano
331a236804
Update README.md 2021-05-05 13:03:14 +02:00
Vittorio Palmisano
6cefacf450
Update package.json 2021-05-05 13:02:12 +02:00
Vittorio Palmisano
99de19269b
Update README.md 2021-05-05 12:56:15 +02:00
Vittorio Palmisano
88e571cb03
Update README.md 2021-05-05 12:01:58 +02:00
Vittorio Palmisano
6c19667ce3
Update README.md 2021-05-05 11:58:19 +02:00
Vittorio Palmisano
5c24fe56cb
Updating the manual install steps 2021-05-05 11:39:53 +02:00
Vittorio Palmisano
4a73ca8741 added config error page, fixed browser error display 2021-04-30 17:08:19 +02:00
Vittorio Palmisano
ada75eb979 added note 2021-04-30 15:17:45 +02:00
Vittorio Palmisano
7074bbafb5 added /config-doc page 2021-04-30 12:41:45 +02:00
Vittorio Palmisano
f40c62abd1 fixed warnings 2021-04-30 12:41:15 +02:00
Vittorio Palmisano
a40831e9df fixed type errors 2021-04-29 15:17:42 +02:00
Vittorio Palmisano
956aadd1af added logic for updating the settings in the store when the app config changes 2021-04-29 15:17:33 +02:00
Stefan Otto
f10f1a0f7d
Merge pull request #794 from mi4aux/develop
Update service path to new dist/ folder and fixed access permissions for dist/server
2021-04-29 09:03:45 +02:00
Vittorio Palmisano
da53b3465e adding config docs generator 2021-04-28 18:28:54 +02:00
Vittorio Palmisano
5eadcc6bb7 fixed docker image file and docs 2021-04-28 18:28:31 +02:00
Vittorio Palmisano
822215ddce added more validators 2021-04-27 20:30:40 +02:00
Vittorio Palmisano
eea8a84f03 using new config 2021-04-27 20:30:25 +02:00
Vittorio Palmisano
6b46663276 WIP app config validation 2021-04-27 19:58:07 +02:00
Vittorio Palmisano
1ac1f7ca92 using eslint settings from mediasoup-client 2021-04-27 19:57:36 +02:00
Vittorio Palmisano
741fbdb7e6 removed unused config values 2021-04-23 19:24:06 +02:00
Vittorio Palmisano
5ff3f6ea77 added migration for advanced audio settings 2021-04-23 19:16:02 +02:00
Vittorio Palmisano
14109f54bb reverting store modifications; using hard coded default values 2021-04-23 19:10:56 +02:00
Vittorio Palmisano
e83214ff7b fixed errors in the compose Dockerfile 2021-04-23 17:39:13 +02:00
Vittorio Palmisano
b66f1d2b00 Merge branch 'develop' into feat-advanced-audio-options 2021-04-23 17:18:20 +02:00
Vittorio Palmisano
9ee8c28537 added missing perms 2021-04-23 16:55:16 +02:00
Vittorio Palmisano
b0f0768f50 removed firefox control; added missing preset name 2021-04-23 16:52:39 +02:00
Vittorio Palmisano
ad627d283d code refactoring; parsing all audio headers 2021-04-23 13:16:28 +02:00
Vittorio Palmisano
962c984405 better var naming 2021-04-22 18:46:38 +02:00
Vittorio Palmisano
168ad134a0 show codec config inline with codec name 2021-04-22 18:38:20 +02:00
Vittorio Palmisano
156fcf27a8 added opus config parser 2021-04-22 18:33:01 +02:00
Vittorio Palmisano
3ddc73b2d5 added more config options in selectors 2021-04-22 12:58:12 +02:00
Vittorio Palmisano
9b9c2f5378 better handling the resize event 2021-04-21 17:32:57 +02:00
Roman Drozd
a5664a5790 Remove unused code from Chat 2021-04-21 16:23:43 +02:00
Vittorio Palmisano
9140a90959 fixed scrolling interface 2021-04-21 15:52:34 +02:00
Vittorio Palmisano
16e5e5f723 added video frameRate selector 2021-04-21 15:49:14 +02:00
Vittorio Palmisano
cb613bec1d added additional check 2021-04-21 15:49:04 +02:00
mi4aux
357941c6f6 Fix access permissions for dist/server.js 2021-04-20 21:37:54 +02:00
mi4aux
832831bf4a Update service path to new dist/ folder 2021-04-20 21:36:25 +02:00
Roman Drozd
739f32d63f Adjust Drawer avatar 2021-04-20 21:29:53 +02:00
Mészáros Mihály
5e32f34a50
Merge pull request #793 from mi4aux/develop
Keep avatar as a circle regardless of image aspect ratio
2021-04-20 21:04:09 +02:00
mi4aux
38f74fa28d Keep avatar as a circle regardless of image aspect ratio
Keep avatar as a circle regardless of image aspect ratio.
Otherwise horizontal or vertical images result in a ellipse as avatar.
2021-04-20 20:59:48 +02:00
Vittorio Palmisano
2f736a9293 sliding window monitor 2021-04-20 19:10:00 +02:00
Vittorio Palmisano
28defb8a55 added audio monitor to self view 2021-04-20 19:08:10 +02:00
Vittorio Palmisano
c18afed0df added cleanup function 2021-04-20 16:21:32 +02:00
Vittorio Palmisano
c10369f138 added transparent background 2021-04-20 16:01:47 +02:00
Vittorio Palmisano
d4e401a36b AudioAnalyzer class implementation, replacing the external dep 2021-04-20 15:48:17 +02:00
Roman Drozd
e10197bde1 Add icons to LeaveDialog 2021-04-20 01:10:31 +02:00
Roman Drozd
cc15ef6a6a Remove logo from LeaveDialog 2021-04-20 00:48:27 +02:00
Roman Drozd
8497b8f7a8 Add LeaveDialog component 2021-04-20 00:15:40 +02:00
Vittorio Palmisano
2fe9da0cbe Changed: app/src/components/VideoContainers/VideoView.js 2021-04-19 19:08:10 +02:00
Vittorio Palmisano
cbc3e1f657 ignoring ADD_TRANSPORT_STATS messages 2021-04-19 18:52:43 +02:00
Vittorio Palmisano
fc273300d3 added AudioMotionAnalyzer 2021-04-19 18:52:30 +02:00
Vittorio Palmisano
28adac26cd added opusPtime option 2021-04-19 11:35:28 +02:00
Vittorio Palmisano
9d37b64f8d opus ptime should multiple of 10 2021-04-19 11:27:51 +02:00
Vittorio Palmisano
6ecbd05bbd using node 14 version (lts) and fixed yarn path permissions 2021-04-19 11:27:32 +02:00
Roman Drozd
cf96b88035
Merge pull request #782 from alangecker/fix-server-build
fix for missing public files in the dist/ folder
2021-04-18 21:52:37 +02:00
chandi
6a298c6db0 server: include public files in dist/ 2021-04-18 21:43:16 +02:00
Mészáros Mihály
1d15f2a709 Fix lint issue 2021-04-18 17:20:13 +02:00
Mészáros Mihály
a95ea78b44 Set CLIENT._displayName to allow observeRTC to collect it. 2021-04-18 17:13:32 +02:00
Gábor Rémai
5705a8fec7 Delete previous indexedDB databases 2021-04-17 19:06:20 +02:00
Gábor Rémai
8e025c4d6e fix for muted audio bug 2021-04-17 19:06:20 +02:00
Gábor Rémai
29937225ae FIX for Mic change 2021-04-17 19:06:20 +02:00
Gábor Rémai
9d0d6d4d82 +1 2021-04-17 19:06:20 +02:00
Gábor Rémai
8648ee831a Devcode 2021-04-17 19:06:20 +02:00
vpalmisano
1afa652e25 added advanced audio controls; refactored dialog interface 2021-04-16 20:32:13 +02:00
vpalmisano
2509065227 added close icon 2021-04-16 20:31:52 +02:00
vpalmisano
a0bdd36980 fixed string translation 2021-04-16 20:31:45 +02:00
vpalmisano
f4821247bf fixed warnings 2021-04-16 20:31:37 +02:00
vpalmisano
dc0311d30e fixed warnings 2021-04-16 20:31:16 +02:00
vpalmisano
c39c580470 fixed warnings 2021-04-16 20:31:09 +02:00
vpalmisano
637b17ce30 fixed warnings 2021-04-16 20:30:58 +02:00
vpalmisano
fed18861d5 changed hark interval; getting audio settings from store 2021-04-16 20:30:49 +02:00
vpalmisano
679ab9e333 using config version to trigger store migrations 2021-04-16 20:29:01 +02:00
vpalmisano
4a3ffcb355 added advanced audio presets 2021-04-16 20:28:46 +02:00
vpalmisano
f50dcbc1a3 updated config with audio presets 2021-04-16 20:27:51 +02:00
vpalmisano
e238a7d4d3 update deps 2021-04-16 20:15:54 +02:00
vpalmisano
d10f6fd6f6 update deps 2021-04-16 20:15:47 +02:00
Gábor Rémai
d4ad2be720 safari disable fix 2021-04-16 14:34:59 +02:00
Gábor Rémai
6bf1f3fcc6 disable localrecording for safari 2021-04-16 14:12:06 +02:00
Roman Drozd
d492c89642 Revert "Reorganizing Chat related functions in RoomClient"
This reverts commit 9176cc8965.
2021-04-15 18:19:03 +02:00
vpalmisano
f2bf0a5b6d removed deprecated volume config 2021-04-14 19:19:17 +02:00
vpalmisano
9d870a3e65 sync the compose app config with the default one 2021-04-14 19:05:49 +02:00
vpalmisano
11f9137305 revert latest modification, using node to run the build version 2021-04-13 15:37:08 +02:00
vpalmisano
a39ec35d07 Fixed ts-node usage on server side 2021-04-13 14:06:15 +02:00
Stefan Otto
b87acd0d39
Merge pull request #748 from jmencak/audio-gain
Per-stream, client-side volume control.
2021-04-13 11:48:17 +02:00
Stefan Otto
dc0777cd1a
Merge pull request #758 from alangecker/typescript
Adding Typescript Support
2021-04-13 11:15:28 +02:00
Jiri Mencak
022fb169d8 Per-stream, client-side volume control.
Addresses https://github.com/edumeet/edumeet/issues/505
2021-04-12 07:55:37 +02:00
chandi
a1006c47f7 gitignore: package-lock.json 2021-04-10 22:51:10 +02:00
chandi
5fb5c40a3e typescript: server support 2021-04-10 22:49:27 +02:00
Astagor
74d5e391c0
Update mediasoup client to 3.6.29 (#764) 2021-04-10 12:43:30 +02:00
vpalmisano
291ffd642d added prometheus example for skipping ssl verification 2021-04-09 19:19:01 +02:00
vpalmisano
d34f5d8920 added documentation notes about self-signed certs 2021-04-09 19:12:53 +02:00
vpalmisano
986c3e5fa2 add authorization header option for metrics http endpoint 2021-04-09 19:06:51 +02:00
vpalmisano
a985e0afec add docker images versions 2021-04-09 19:04:55 +02:00
vpalmisano
1a5b0a04ca splitting scrape configuration 2021-04-09 18:20:57 +02:00
vpalmisano
4aed2dd441 mediasoup version upgraded to 3.7.1 2021-04-09 18:03:14 +02:00
vpalmisano
376068d31a copy the encodings object content to avoid side-effects; closes #763 2021-04-09 13:09:09 +02:00
Astagor
4d8a03794a
Feat hide no video participants (#668)
* Add option of hidding of peers without video

* Fix lint

* Remove watching of store

* Remove comment

* Add CS translation
2021-04-09 09:41:15 +02:00
Astagor
a180d15b84
Enable screen sharing with audio for chome-based browsers (#752) 2021-04-09 09:40:47 +02:00
Mészáros Mihály
58fe883e82
Merge pull request #750 from edumeet/feat-dscp
Feat dscp/QoS
2021-04-08 22:09:27 +02:00
Mészáros Mihály
31d87fd27d Add QoS to changelog 2021-04-08 22:08:26 +02:00
Mészáros Mihály
6efe084b54 To avoid error with old config with missing networkPriorities
Thanks to vpalmisano!
2021-04-08 21:32:47 +02:00
Mészáros Mihály
59c78eeaea Fix: For extra video we use the common way
Only add priority to the first encoding to avoid an exception.
Thanks to vpalmisano!
2021-04-08 21:30:57 +02:00
chandi
dee3043405 frontend-typescript: linting and prettier 2021-04-04 13:52:04 +02:00
chandi
9f138b3a08 first typescript file 2021-04-03 23:33:34 +02:00
chandi
55c82e9d21 frontend: typescript support 2021-04-03 23:33:19 +02:00
chandi
68a0d1ae3f frontend: switch to yarn 2021-04-03 23:03:25 +02:00
Astagor
14c7083ad9
Fix drawerOverlayed never set to false from config. Undefined is also FALSE, so need to check it. (#756) 2021-04-01 18:34:12 +02:00
Astagor
7cd82e162c
Pin a peer to be constantly displayed as large peer in filmstrip (#729)
* Make latest pinned peer by constantly displayed as large peer in film strip

* Add peer pinning to filmstrip mode
2021-04-01 15:36:08 +02:00
N7Remus
162f78aea0 Stream saver chages are added. 2021-04-01 11:18:03 +02:00
Vittorio Palmisano
e69c56a62b
fixed encodings selection for screenshare; fixed some lint warnings; (#751) 2021-03-31 12:24:38 +02:00
Mészáros Mihály
11afa7449d Add networkPriority: set the proper QoS/DSCP bits
Resolves: #702
2021-03-31 10:16:32 +02:00
Mészáros Mihály
92ad993355 Tidy in example app config 2021-03-30 22:05:59 +02:00
hkizilhan
7b8bb1a268
Update tr.json (#744) 2021-03-29 08:11:37 +02:00
Vittorio Palmisano
75d3b55fe2
setting width and height explicitly in getUserMedia; fixes #742 (#743) 2021-03-29 08:11:08 +02:00
Roman Drozd
9176cc8965 Reorganizing Chat related functions in RoomClient 2021-03-29 00:25:00 +02:00
Roman Drozd
89e531e6a4 Unify more File Sharing reducer with Chat one 2021-03-28 12:07:14 +02:00
Roman Drozd
8816bcf9ec Refactor Chat Input menu 2021-03-26 22:48:35 +01:00
Roman Drozd
1f1e0cd599 Fix unexpected highlighting all Chat messages when Chat component is refreshing 2021-03-26 17:13:09 +01:00
Roman Drozd
acddb90b7e Fix messages counter, does not work on "goToNewest" button when the Chat sorting is "desc" (always shows "0") 2021-03-26 13:27:39 +01:00
Mészáros Mihály
4aba07c76d recording state moved to peer and other fixes 2021-03-25 21:12:41 +01:00
Roman Drozd
9523c4bec5 Satisfy eslint 2021-03-24 15:25:23 +01:00
Roman Drozd
2898cc3d18 Replace "areNewMessages" method by checking if "countUnread" > 0 2021-03-24 15:21:10 +01:00
Roman Drozd
6942bfd0fa Add "label.chatNewMessages" translation 2021-03-24 15:14:59 +01:00
Stefan Otto
5faf5397ee
Update HAproxy.md 2021-03-23 08:46:09 +01:00
Stefan Otto
707c486ba6
Update HAproxy.md
Increased maxconn option to 2000 because clients seem to hold their connection
2021-03-23 08:44:59 +01:00
Stefan Otto
b27636f14b
Merge pull request #720 from edumeet/feat-local-develop-and-monitoring
Feat local develop and monitoring
2021-03-22 22:30:51 +01:00
Roman Drozd
abad88bfbc Make Chat file item similar to message one 2021-03-22 20:20:17 +01:00
Roman Drozd
88e93e1309 Fix Chat combined messages time margins 2021-03-22 19:21:49 +01:00
Roman Drozd
501a78efe6 Convert Chat File item component structure into Paper 2021-03-22 17:33:55 +01:00
Roman Drozd
76936f4d51 Add Chat File item component block comments 2021-03-22 17:31:30 +01:00
Roman Drozd
8428c1b81e Convert Chat Class File item component into functional one 2021-03-22 17:22:28 +01:00
Roman Drozd
e1e3502677 Remove Chat List unused binding 2021-03-22 16:47:16 +01:00
Stefan Otto
78e9789058 lint 2021-03-22 14:08:10 +01:00
Roman Drozd
8aa30d6808 Standarize Chat styles names 2021-03-22 00:09:42 +01:00
Roman Drozd
63fac75cc9 Remove unused propType check 2021-03-22 00:02:34 +01:00
Roman Drozd
2675076126 Fix round corners of combined messages 2021-03-21 23:49:50 +01:00
Roman Drozd
c8c08ca41a Add time to every part of Chat combined message 2021-03-21 21:20:22 +01:00
Roman Drozd
4b515a75e2 Break spaceless strings longer then chat width 2021-03-21 20:31:10 +01:00
Roman Drozd
71f9dacf96 Hide Drawer pin/unpin button on mobile 2021-03-21 19:30:38 +01:00
Roman Drozd
15c6e04b1c
Merge pull request #732 from Astagor/Fix_hidden_stats_pushes_out_name
Fix hidden advanced media info pushes name out of view by small video…
2021-03-20 21:36:38 +01:00
Piotr Pawałowski
ad9fd1927d Fix hidden advanced media info pushes name out of view by small video boxes 2021-03-20 20:32:13 +01:00
Roman Drozd
46ae4b72f7 Fix Chat input loss of selection after applying some style 2021-03-20 20:01:14 +01:00
Roman Drozd
d0f3f09fc9 Update Chat Input Menu comments 2021-03-20 19:35:03 +01:00
vpalmisano
85cfba3dc8 Merge branch 'develop' into feat-local-develop-and-monitoring 2021-03-19 13:58:07 +01:00
Roman Drozd
c0e14809b9 Update cs transalation 2021-03-19 12:28:19 +01:00
vpalmisano
141b748b29 loggging collectStats elapsed time 2021-03-19 10:45:04 +01:00
Roman Drozd
f89e257be4 Fix Chat Message width number after refresh app 2021-03-18 23:51:48 +01:00
Stefan Otto
3f60c6ee8e lint 2021-03-18 15:49:28 +01:00
Stefan Otto
c4c4fad218 Make link happier 2021-03-18 15:45:49 +01:00
Stefan Otto
ffe8b05724 Fixes: no muted mic after changing mic-device https://github.com/edumeet/edumeet/issues/715 2021-03-18 14:48:37 +01:00
Stefan Otto
6c069cec22 Merge branch 'develop' of https://github.com/edumeet/edumeet into develop 2021-03-18 08:21:47 +01:00
Stefan Otto
ad458d464e Add a headless parameter to URL for non interactive joining 2021-03-18 08:21:42 +01:00
Roman Drozd
a0a0564f8f Fix typo 2021-03-18 01:38:21 +01:00
Roman Drozd
08efaf0c59 Fix Chat Message comments 2021-03-18 01:35:42 +01:00
Roman Drozd
3958110921 Remove leftover after file sharing tab 2021-03-18 01:23:23 +01:00
Roman Drozd
a444f3fdb9 Refactor Chat Message props 2021-03-18 01:08:20 +01:00
Roman Drozd
99e61681bf Refactor Chat Message avatar prop 2021-03-18 01:06:49 +01:00
Roman Drozd
550e80c3fb Refactor Chat Message rendering of html tags 2021-03-18 01:01:59 +01:00
Roman Drozd
5e7653b750 Fix Chat List possible problem with biding "this" 2021-03-18 00:48:20 +01:00
Roman Drozd
6fb8ad1370 Fix Chat message with calculation 2021-03-18 00:45:33 +01:00
Roman Drozd
4cdad07afa Remove "test" expressions 2021-03-17 23:38:10 +01:00
Roman Drozd
f8a8878416 Refactor Chat handle methods 2021-03-17 23:36:44 +01:00
Roman Drozd
b94e775d89 Remove "test" expression 2021-03-17 22:41:19 +01:00
Roman Drozd
314e33346b Hide avatar in Chat combined messages 2021-03-17 22:39:06 +01:00
Roman Drozd
c30c80f038 Remove "test" expression 2021-03-17 22:37:26 +01:00
Roman Drozd
ced279a630 Remove unused packages import 2021-03-17 22:28:53 +01:00
Roman Drozd
4d9f2c703d Combine Chat messages from the same user 2021-03-17 22:24:05 +01:00
Astagor
6ac870b996
Disable simulcast if only 1 encoding profile defined (#722)
* Disable simulcast if only 1 encoding profile defined

* Make sure that encodings is set before checking length

* Fix consumer score race

* Hack to control bandwith for every resolution

* Hack for mediasoup error if 1 encoding defined
2021-03-17 17:41:07 +01:00
Vittorio Palmisano
5846d9c8ae Merge branch 'develop' into feat-local-develop-and-monitoring 2021-03-17 15:37:53 +01:00
Vittorio Palmisano
7403ba2623
Merge pull request #725 from edumeet/feat-server-http-cache-header
Using cache control only for static files - fixed
2021-03-17 15:22:16 +01:00
Vittorio Palmisano
6961c88a9d Changed: compose/config/edumeet-server-config.js 2021-03-17 15:05:40 +01:00
Vittorio Palmisano
89d74ece05 Merge branch 'feat-server-http-cache-header' into feat-local-develop-and-monitoring 2021-03-17 15:03:33 +01:00
Vittorio Palmisano
54084bd6f1 using cache control only for static files 2021-03-17 15:03:03 +01:00
Stefan Otto
8c16b58a7b
Merge pull request #724 from edumeet/feat-server-http-cache-header
Add a cache control header for GET requests
2021-03-17 14:39:54 +01:00
Vittorio Palmisano
7a156ce0f4 added cache option 2021-03-17 14:35:08 +01:00
Vittorio Palmisano
cda5be098e Merge branch 'feat-server-http-cache-header' into feat-local-develop-and-monitoring 2021-03-17 14:34:47 +01:00
Vittorio Palmisano
7699ac614d Merge branch 'develop' into feat-local-develop-and-monitoring 2021-03-17 14:34:21 +01:00
Vittorio Palmisano
874bc6c8a9 fixed comparison 2021-03-17 14:33:51 +01:00
Vittorio Palmisano
d11eccefc0 added cache control header for GET requests 2021-03-17 14:32:14 +01:00
Vittorio Palmisano
6db39c2274 avoid calling collectStats in a timeout loop; set all values to 0 if the collect loop fails for some reason; 2021-03-17 13:03:20 +01:00
Astagor
b2fa2d4226
Fix compile errors (#723) 2021-03-17 00:25:17 +01:00
Stefan Otto
f6da168529
Update settings.js
And finally make autoGainControl = true if not configured at all
2021-03-16 23:59:55 +01:00
Stefan Otto
e89a54bb8d
Update store.js
Make 9c86cafa17 (diff-16944e4ef66a7b1bd89a48867205696991b4e209e9761f33fd52342ccf695392) effective by updating old storage
2021-03-16 23:54:44 +01:00
Stefan Otto
042f851bca
Update config.example.js
Fix comment as well
2021-03-16 22:58:50 +01:00
Stefan Otto
9c86cafa17
Fix: https://github.com/edumeet/edumeet/issues/505 ( A voice in my head said: "Luke everybody knows how to use audio settings" - but reality proved me wrong) 2021-03-16 22:50:14 +01:00
Vittorio Palmisano
380e3b9b3f documenting app rebuild 2021-03-16 18:10:20 +01:00
Vittorio Palmisano
e8a21013a7 added build & dev version 2021-03-16 18:05:36 +01:00
Vittorio Palmisano
876d8e19cc added rooms and peers count stats 2021-03-16 14:54:26 +01:00
Vittorio Palmisano
1583b779c2 added missing metrics arguments 2021-03-16 14:46:05 +01:00
Vittorio Palmisano
06a0a1bdd6 dashboard refactoring 2021-03-16 13:36:41 +01:00
Vittorio Palmisano
4c6a5f1ec4 added scores stats 2021-03-16 13:29:48 +01:00
Vittorio Palmisano
68d580d6bb Merge branch 'develop' into feat-local-develop-and-monitoring 2021-03-16 12:24:56 +01:00
Astagor
066c1ab828
Fix media settings (#721)
* Fix a copy paste mistake in MediaSettings

* Fix lint
2021-03-16 12:21:02 +01:00
Vittorio Palmisano
e2ec99e46d Merge branch 'develop' into feat-local-develop-and-monitoring 2021-03-16 12:13:39 +01:00
Vittorio Palmisano
9916aef6ce added retransmissions and lost packets stats 2021-03-16 12:13:12 +01:00
Stefan Otto
1f75616497
Merge pull request #719 from Astagor/fix_remove_dupliacted_resolution_dropdown
Fix remove duplicated resolution dropdown
2021-03-16 11:56:17 +01:00
Stefan Otto
759d11514b
Merge pull request #717 from Astagor/fix_define_simulcast_encodings_per_resolution
Define simulcast encodings per resolution
2021-03-16 11:53:24 +01:00
Vittorio Palmisano
6ad0938f0e Changed: compose/README.md 2021-03-16 09:57:39 +01:00
Vittorio Palmisano
7519331796 fixed grafana dashboard 2021-03-16 09:57:09 +01:00
Vittorio Palmisano
b5624f0c06 minors 2021-03-16 09:50:28 +01:00
Vittorio Palmisano
e2bb3bf626 Changed: server/lib/metrics/aggregated.js 2021-03-15 19:31:38 +01:00
Vittorio Palmisano
58bba527af fixed default metrics collector 2021-03-15 19:31:04 +01:00
Vittorio Palmisano
7030c7a850 changed prometheus options 2021-03-15 19:29:03 +01:00
Vittorio Palmisano
f8ffaf681f changed prometheus options 2021-03-15 19:27:54 +01:00
Vittorio Palmisano
3551186506 added aggregated metrics and grafana dashboard 2021-03-15 19:26:51 +01:00
Vittorio Palmisano
530c9ffc11 Merge branch 'develop' into feat-local-develop-and-monitoring 2021-03-15 14:09:32 +01:00
Piotr Pawałowski
514462a19a Remove double resolution dropdown in media settings 2021-03-15 12:40:47 +01:00
Piotr Pawałowski
55550d4eb2 Fix scaleResolutionDownBy to be 2^x 2021-03-14 19:31:07 +01:00
Piotr Pawałowski
eda3b968dc Define simulcast encodings per resolution 2021-03-14 13:57:15 +01:00
Roman Drozd
7f71f31c03 Fix counting messages when getting history 2021-03-11 23:47:04 +01:00
Roman Drozd
b80794a0fe Add unread messages info to Chat buttonGoToNewest 2021-03-11 23:03:42 +01:00
Roman Drozd
2b59e83a2f Add to Chat reducer a counting of unread messages 2021-03-11 23:02:26 +01:00
Roman Drozd
4bace60217 Remove console.log statement 2021-03-11 22:59:58 +01:00
Roman Drozd
3ef4ae786a Fix Drawer unread indicator 2021-03-11 22:56:31 +01:00
Vittorio Palmisano
edcfedbd37 upgraded to mediasoup 3.6.34 2021-03-11 21:49:44 +01:00
Roman Drozd
004ba82330 Fix NewMessages highlighting 2021-03-11 21:44:29 +01:00
Vittorio Palmisano
47146463ae enable layer adaptation also on screenshare consumers 2021-03-11 14:44:51 +01:00
Vittorio Palmisano
5d1e2341f6 added missing resolution values when using screenshare 2021-03-11 14:27:46 +01:00
Vittorio Palmisano
1e3adbc1f3 added missing appData values; fixes #714 2021-03-11 14:19:19 +01:00
Roman Drozd
38bd3ba3bf Add Chat messages counting in store 2021-03-11 05:16:37 +01:00
Roman Drozd
df9acf12b7 Refactor Chat message object managing (sending/receiving) 2021-03-11 04:39:53 +01:00
Roman Drozd
988157c620 Refactor/remove createNewMessage in Input 2021-03-11 02:53:46 +01:00
Roman Drozd
c3a8019c96 Change Chat new messages color 2021-03-11 02:21:12 +01:00
Roman Drozd
050a97a69b Refactor Chat buttonGoToNewest asc/desc style 2021-03-11 02:02:30 +01:00
Roman Drozd
f9e6f49ad8 Remove Chat unused prop 2021-03-11 01:26:20 +01:00
Roman Drozd
29fdb71de7 Add to Chat buttonGoToNewest a showing/hiding transition 2021-03-11 01:24:11 +01:00
Vittorio Palmisano
70e1d1eefa upgraded to mediasoup 3.6.33 2021-03-10 13:07:32 +01:00
Vittorio Palmisano
4392138341 using a box shadow to highlight the active speaker box 2021-03-10 13:02:17 +01:00
Vittorio Palmisano
56bf3702cc using a box shadow to highlight the active speaker box 2021-03-10 13:00:23 +01:00
Vittorio Palmisano
abaaa5d717 re-added peer-border for displaying the active speaker 2021-03-10 11:55:07 +01:00
Vittorio Palmisano
59fdb95a58 switched to mediasoup tagged custom version 2021-03-10 11:34:10 +01:00
Stefan Otto
a9afb584cf
Update README.md
Added openssl and pkg-config depencies to manual installation docs
2021-03-10 08:54:30 +01:00
Roman Drozd
d697467b6d Fix bug with setting cursor at the begining after entering first letter 2021-03-10 03:26:21 +01:00
Roman Drozd
057d292b8c Refactor Chat Message date 2021-03-10 02:23:53 +01:00
Roman Drozd
4c140f0742 Highlight new messages 2021-03-10 02:04:28 +01:00
Stefan Otto
5fd0c02230
Adding libssl-dev to depencies - needed for https://github.com/edumeet/edumeet/pull/711 2021-03-09 22:23:09 +01:00
Stefan Otto
e8ceb3e5f0
Restoring https://github.com/edumeet/edumeet/pull/711/commits/721a80ff3e4ef321b36779ce3fce30b740dfe3aa since is had been eaten by https://github.com/edumeet/edumeet/pull/712 2021-03-09 22:11:40 +01:00
Stefan Otto
dc9e1d7c55
Merge pull request #693 from edumeet/fix-mic-button
Added and style mic button to enlarged shared screen view
2021-03-09 22:10:42 +01:00
Stefan Otto
43d1b2064d
Merge pull request #712 from edumeet/feat-display-videos-with-full-aspectratio
Feat display videos with full aspectratio
2021-03-09 22:04:29 +01:00
Vittorio Palmisano
26bd7f0e0b restored changed value 2021-03-09 14:35:31 +01:00
Vittorio Palmisano
34a6dc4c1b Display video at full aspectratio. Show dark borders to fill up the remaining space. 2021-03-09 13:45:44 +01:00
Vittorio Palmisano
721a80ff3e using a custom mediasoup branch with system openssl library build 2021-03-09 13:17:40 +01:00
Vittorio Palmisano
27d20bfc1c removed call to not existent method handleConsumerPreferredLayers 2021-03-08 14:37:24 +01:00
Stefan Otto
83b97059ef
Merge pull request #687 from Astagor/fix-closed-consumers-cleanup
Client removes consumers if server tells that they do not exist anymore
2021-03-08 11:40:25 +01:00
Stefan Otto
a686c9d47b
Merge pull request #703 from edumeet/feat-fix-video-aspect-ratio-settings
using the aspectRatio value contained in redux store
2021-03-08 11:27:14 +01:00
Stefan Otto
a8ebd34cc5
Merge pull request #692 from jmencak/ice-restart-selective
Less aggressive ICE restarts.
2021-03-08 11:19:34 +01:00
Stefan Otto
0d494258d0
Merge pull request #696 from jmencak/enforce-name-entry
Enforce entering participant's name on entry.
2021-03-08 11:12:50 +01:00
Stefan Otto
da67406935
Merge pull request #697 from jmencak/distinct-audio-notifications
Add distinct audio notification with rate-limiting.
2021-03-08 11:11:40 +01:00
Roman Drozd
41660d956a Fix functions name convention 2021-03-07 21:20:08 +01:00
Roman Drozd
366a8beac6 Fix Chat horizonal scrollbar style 2021-03-04 18:02:16 +01:00
Roman Drozd
6014ae8449 Add NewMessages button 2021-03-04 17:23:36 +01:00
Stefan Otto
7b5126d593 Security fixes in depencies. New package-lock ( Run npm install ).
This includes electron update v9 to v12 as well - not tested! I think electron build might not work anymore!
2021-03-04 12:58:29 +01:00
Stefan Otto
e724f2ce99 Make newConsumer request to a notification to the client, so client can trigger all actions by himself and server don't have to wait for it. Thanks @hafvo for the hint. Should solve timeout related issus like https://github.com/edumeet/edumeet/issues/256 2021-03-04 10:27:24 +01:00
Stefan Otto
cffcec4273 Merge branch 'develop' of https://github.com/havfo/multiparty-meeting into develop 2021-03-03 14:34:47 +01:00
Vittorio Palmisano
5c35671e4f
distribute workers port ranges, closes #708 (#709)
* distribute workers port ranges, closes #708

* fixed i index increment
2021-03-03 13:41:26 +01:00
Roman Drozd
4bd870f502 Fix scrolling inconsistency between device/browsers 2021-02-28 23:35:38 +01:00
Jiri Mencak
dcf916e715 Add distinct audio notification with rate-limiting.
Introducing optionally configurable distinct audio notification with an
optional delay between them.  This is configurable in
app/public/config/config.js via the "notificationSounds" object.

Added two sample audio files.
  - notify-chat.mp3: from sound-theme-freedesktop (Debian) package;
    Copyright: Ivica Bukvic; License: CC-BY-SA-3.0
  - notify-hand.mp3: from
    https://samplefocus.com/collections/notification-sounds
    License: Public Domain
2021-02-26 17:58:16 +01:00
Roman Drozd
b84f3da118 Add the missing "draft-js-plugins-editor" package 2021-02-26 13:03:36 +01:00
Roman Drozd
72e7afbc70 Fix Chat list map returning reported by eslint 2021-02-26 12:59:52 +01:00
Roman Drozd
c6f062417e Fix Chat files clearing 2021-02-26 12:47:23 +01:00
Vittorio Palmisano
0df6e8d623 using the aspectRatio value contained in redux store 2021-02-26 12:14:33 +01:00
Vittorio Palmisano
9c87b9c60d
added adaptiveScalingFactor configuration variable (#701)
* added `adaptiveScalingFactor` configuration variable

* adapt consumer layers using viewport width and height
2021-02-25 18:04:45 +01:00
Vittorio Palmisano
a50e0c7ab9 added nginx frontend for local development 2021-02-25 16:45:29 +01:00
Vittorio Palmisano
e489f2fe3c added docker-compose install command and version 2021-02-25 15:30:43 +01:00
Vittorio Palmisano
953036dc3d using the default /metrics path 2021-02-25 13:05:45 +01:00
Vittorio Palmisano
89e7dbbed5 adding docker compose configuration for edumeet / prometheus / grafana 2021-02-25 13:05:27 +01:00
Roman Drozd
2eade1ba1a Improve Chat scrollbar style 2021-02-25 00:20:40 +01:00
Roman Drozd
e23ded6519 Add Chat buttons a pressed style 2021-02-24 16:11:05 +01:00
stefkamarton
128a8234e7 Fix ')' at the end of the file 2021-02-23 23:07:27 +01:00
Stefka Márton
29430e4532
Merge branch 'develop' into fix-mic-button 2021-02-23 22:55:40 +01:00
stefkamarton
17b96e9dd1 Adding autohide feature 2021-02-23 22:52:54 +01:00
Roman Drozd
0386277b49 Add Chat buttons tooltips 2021-02-23 21:04:54 +01:00
Roman Drozd
900bdd6e67 Update Chat aria labels 2021-02-23 20:10:46 +01:00
Roman Drozd
dfeaaaf231 Improve Chat's buttons comments 2021-02-23 19:40:51 +01:00
Roman Drozd
690a1503ee Unify Chat's messages & shared files clearing 2021-02-23 19:03:05 +01:00
Roman Drozd
968985dd79 Fix Chat sending button disabling 2021-02-23 18:42:46 +01:00
Roman Drozd
332c812339 Clean & refactor Chat 2021-02-23 18:34:30 +01:00
Roman Drozd
ca31841078 Add Chat message sending by Enter key 2021-02-23 17:31:03 +01:00
Roman Drozd
3928e7d15d Add Chat sorting of messages 2021-02-23 06:21:43 +01:00
Roman Drozd
794e0bb7c8 Add Chat message formating 2021-02-23 05:26:09 +01:00
Mészáros Mihály
b7f07dcce9
Update promExporter.js
Await metrics data 
Fix docker issue:  UnhandledPromiseRejectionWarning at /opt/edumeet/server/lib/promExporter.js:272:8 
TODO: Maybe we need to add more error handling to make it more robust.
2021-02-22 10:36:22 +01:00
Astagor
89e7d9af06
Merge pull request #698 from edumeet/feat-adaptive-video-layers-develop
Infer missing resolution scalings for adaptive scaling
2021-02-20 15:25:46 +01:00
Vittorio Palmisano
e6a63ecb93 When missing or when using SVC, infer the correct resolution scalings from WebRTC standard 2021-02-20 15:13:50 +01:00
Stefan Otto
fa7c8eeb01
Merge pull request #689 from edumeet/feat-adaptive-video-layers-develop
Adding adaptive video quality switch tracking page size
2021-02-19 23:46:55 +01:00
Jiri Mencak
d20822f791 Enforce entering participant's name on entry. 2021-02-19 18:56:38 +01:00
stefkamarton
47c787a669 Added button other way from buttonControlBar.js 2021-02-19 00:20:20 +01:00
stefkamarton
49e0f0baa4 Style mic button, tooltip 2021-02-15 23:08:31 +01:00
Mészáros Mihály
d4da1cde0e debug server 2021-02-15 18:56:44 +01:00
Mészáros Mihály
1d3d9eb21b development 2021-02-15 18:56:20 +01:00
Jiri Mencak
a7e1701cfc Less aggressive ICE restarts.
Changes:
  - restart send/receive transport selectively; do not
    restart both of them on ICE disconnect/fail of only one of them.
  - wait for 2s on ICE disconnect/fail received from mediasoup-client
    before performing restartIce(); the restart is then cancelled if
    the ICE transport state changes within those 2s.
  - exponential backoff on ICE restart failures.
2021-02-15 14:00:41 +01:00
Mészáros Mihály
2f39ab692c css 2021-02-14 23:04:56 +01:00
stefkamarton
646c1b34f4 added mic btn on fullscreen 2021-02-12 13:51:02 +01:00
Mészáros Mihály
fcb0984dc8
Merge pull request #690 from edumeet/fix-catch-interactive-socket-errors
Avoid crashing the server process when exiting interactive sessions
2021-02-12 13:29:53 +01:00
Vittorio Palmisano
62e2739306
Avoid crashing the server process when exiting interactive socket sessions
When using the interactive socket connection (`socat - UNIX-CONNECT:/tmp/edumeet-server.sock`), closing the command line session throws a not handled exception that crashes the server process.
2021-02-12 12:06:16 +01:00
Vittorio Palmisano
5a558e4e02 estimate the temporal layer using the available screen area 2021-02-11 11:49:37 +01:00
Vittorio Palmisano
9e83c2bac7 WIP adding adaptive video quality switch tracking page size 2021-02-11 10:49:53 +01:00
Mészáros Mihály
05c8e0a298 Fix typo (Thx to Romek!) 2021-02-10 14:42:20 +01:00
Mészáros Mihály
4daafad98c tidy in hungarian translation 2021-02-10 11:23:27 +01:00
Mészáros Mihály
ce67e01fa2 Change recording icon 2021-02-10 10:53:45 +01:00
Mészáros Mihály
e33cb9aaf8 Fix error disableRipple 2021-02-09 22:23:07 +01:00
Mészáros Mihály
71af3ffa24 Set proper proptypes 2021-02-09 22:21:45 +01:00
Mészáros Mihály
08316e4842 Fixes logo on JoinDialog Fixes #684 2021-02-09 22:13:51 +01:00
Mészáros Mihály
46bcf4e52b Fix logo on LoginDialog too Fixes #684 2021-02-09 22:10:54 +01:00
Mészáros Mihály
7abfc553bc Fix if logo is null wirte config.title Fixes #684 2021-02-09 22:02:20 +01:00
Mészáros Mihály
345019012b Add missing package popup-state 2021-02-09 21:45:04 +01:00
Mészáros Mihály
faefdb4c76 Add http proxy option for TURN API (axios) 2021-02-09 21:36:45 +01:00
Mészáros Mihály
304ea514a6 Add http (proxy) options for OIDC 2021-02-09 21:36:45 +01:00
Mészáros Mihály
25b15fa792 Add pause and user notification about recording 2021-02-09 21:36:41 +01:00
Mészáros Mihály
01f0125240 Update persist store handling according to new way 2021-02-09 21:30:52 +01:00
Mészáros Mihály
be89893150 Some possible useful filter match (commented out) 2021-02-09 21:27:38 +01:00
Mészáros Mihály
9d889201b4 Set redux loglevel to info, to be able to filter 2021-02-09 21:27:38 +01:00
Mészáros Mihály
a51837b9a1 Update packges and update axios to higher version 2021-02-09 21:27:38 +01:00
Mészáros Mihály
4737537944 Set Default Local to en 2021-02-09 21:27:38 +01:00
Mészáros Mihály
9381413c52 develop 2021-02-09 21:27:38 +01:00
Mészáros Mihály
549306d1ab Change recording in progress indicator 2021-02-09 21:27:31 +01:00
Mészáros Mihály
f30e84c23c Add local recording and IndexedDB recovery 2021-02-09 21:26:37 +01:00
Mészáros Mihály
0ef8a24c8f Add recording to changelog 2021-02-09 21:26:37 +01:00
Mészáros Mihály
fa01188d95 Add recovery for crashed or abored recordings 2021-02-09 21:26:37 +01:00
Mészáros Mihály
b0f579f796 Remove recotdRTC 2021-02-09 21:26:37 +01:00
Mészáros Mihály
f55ce6bad9 tidy Remove tab from an empty line 2021-02-09 21:26:37 +01:00
Mészáros Mihály
6e3bccfbc8 Refactor and Tidy 2021-02-09 21:26:34 +01:00
Mészáros Mihály
6ac9fe93e4 Add idb for indexDB async 2021-02-09 21:18:12 +01:00
N7Remus
874c395e21 experimental 2021-02-09 21:18:12 +01:00
Gábor Rémai
ceb610b49b changed startRoomRecord to setRoomRecordOpen 2021-02-09 21:18:12 +01:00
Gábor Rémai
95e80c6b85 added translations for RoomRecord 2021-02-09 21:18:08 +01:00
Gábor Rémai
a53c816a1a Modified template to get mime type 2021-02-09 21:04:39 +01:00
Gábor Rémai
28b38718c6 Create roomRecord options template from extravideo 2021-02-09 21:04:39 +01:00
N7Remus
60238edef7 Mic stream is now using the micProducer 2021-02-09 21:04:38 +01:00
Gábor Rémai
c12fe518e7 firefox demo 2021-02-09 21:04:38 +01:00
N7Remus
261d786d61 refactoring 2021-02-09 21:04:38 +01:00
N7Remus
7ce0162ecc Adding button state changes 2021-02-09 21:04:38 +01:00
N7Remus
833c3cb047 removed html2canvas 2021-02-09 21:04:38 +01:00
N7Remus
59c2c2c8e4 Demo alfa 2021-02-09 21:04:38 +01:00
N7Remus
952dff5ba1 Test feature 2021-02-09 21:04:38 +01:00
remus
ebfa37b259 Fixing translation 2021-02-09 21:04:38 +01:00
N7Remus
f8f4b10b15 Adding notifications+translatios 2021-02-09 21:04:34 +01:00
Roman Drozd
1212436091 Change Drawer's LockIcon to PinIcon 2021-02-09 16:01:02 +01:00
Piotr Pawałowski
d31065d663 Client removes consumers if server tells that they do not exist anymore 2021-02-09 01:14:19 +01:00
Stefan Otto
1b1c7fea94
Merge pull request #658 from Astagor/feat-local-picture
Feat local picture
2021-02-08 01:07:55 +01:00
Stefan Otto
499809920d
Merge pull request #682 from edumeet/fix-login
Fix Login Cache Issue
2021-02-08 01:07:28 +01:00
Stefan Otto
7270ca306d
Merge pull request #685 from jmencak/restart-ice
Restart ICE on disconnected/failed connection states.
2021-02-05 10:43:20 +01:00
Stefan Otto
ef0e02fcb9
Merge pull request #686 from edumeet/fix-nodeversion
fix nodejs version in readme
2021-02-05 10:40:49 +01:00
Stefan Otto
0c2190ff64
Merge pull request #683 from MrSnoozles/serverHostname-configuration
Server hostname configuration
2021-02-05 10:39:21 +01:00
N7Remus
1d92112b6c
fix nodejs version in readme
#611
2021-02-04 08:17:47 +01:00
Jiri Mencak
ad32708054 Restart ICE on disconnected/failed connection states.
Resolves issue #656.
2021-02-03 20:39:14 +01:00
MrSnoozles
7614074e6f
Update config.example.js 2021-02-01 16:48:23 +01:00
MrSnoozles
88ab41a1f5
Add example serverHostname configuration 2021-02-01 16:44:43 +01:00
MrSnoozles
221aa4b018
Add optional configuration property "serverHostname" 2021-02-01 15:56:30 +01:00
stefkamarton
85eb8d2d85 Fix Login Cache Issue 2021-01-28 21:04:17 +01:00
Roman Drozd
4001844884 Improve username visibility in brighter video 2021-01-17 19:03:43 +01:00
Roman Drozd
15efcc3ede Bring back a close button to Drawer 2021-01-15 19:48:02 +01:00
Stefan Otto
ed4846fd52
Merge pull request #676 from Astagor/fix-remove-consumer-notify
Add notification of peers on a transportclose event
2021-01-15 12:19:41 +01:00
Roman Drozd
b2457fda57 Disable chat send message button if nothing is typed 2021-01-14 11:55:41 +01:00
Piotr Pawałowski
8c0fa8a4f4 Add notification of peers on a transportclose event 2021-01-14 11:36:58 +01:00
Roman Drozd
c4ae048fad Refactor saveChat method 2021-01-13 16:05:58 +01:00
Roman Drozd
339d092936 Disable chat saving button if no messages 2021-01-13 13:23:09 +01:00
Roman Drozd
a779e759fb Add "No messages" info if no messages on Chat 2021-01-13 13:21:48 +01:00
Roman Drozd
66b788b895 Merge branch 'develop' into feat-chat-saving 2021-01-11 19:35:54 +01:00
Roman Drozd
29337e6e34 Add remove unused tags 2021-01-11 19:26:48 +01:00
Roman Drozd
d993031b83 Refactor code 2021-01-11 19:24:51 +01:00
Roman Drozd
07e4d5a446 Add chat saving functionality 2021-01-11 17:14:54 +01:00
Roman Drozd
5c97f924b5
Merge pull request #673 from edumeet/feat-update-logo
Replace default png logo with svg one (with sizes placed inside svg file)
2021-01-10 04:28:09 +01:00
Roman Drozd
2810fdbbfb Replace default png logo with svg one (with sizes placed inside svg file) 2021-01-10 04:09:41 +01:00
Roman Drozd
7add5b2029 Revert "Replace default png logo with svg one"
This reverts commit d3bb985784.
2021-01-10 03:57:44 +01:00
Roman Drozd
3697c45163
Merge pull request #672 from edumeet/feat-update-logo
Replace default png logo with svg one
2021-01-09 15:42:55 +01:00
Roman Drozd
d3bb985784 Replace default png logo with svg one 2021-01-09 15:35:46 +01:00
Roman Drozd
bb5a249df4 Adjust ButtonControlBar width 2021-01-07 03:43:31 +01:00
Roman Drozd
24399c8ded Don't show Drawer by default 2021-01-06 17:23:20 +01:00
Roman Drozd
cce9615104 Adjust TopBar width 2021-01-06 17:20:17 +01:00
Roman Drozd
4a089ec503 Reduce Drawer width 2021-01-06 17:07:32 +01:00
Roman Drozd
c341a32d68 Show only icons on Drawer tabs when mobile 2021-01-06 16:55:40 +01:00
Roman Drozd
6405405668 Change tabs order in Drawer 2021-01-06 16:32:11 +01:00
Roman Drozd
bca99615ce Improve Chat's file item style 2021-01-06 16:17:03 +01:00
Roman Drozd
196d7d7c8e Add save chat button 2021-01-06 16:14:57 +01:00
Roman Drozd
6b5da1c516 Add icons to drawer's tabs 2021-01-06 16:08:42 +01:00
Roman Drozd
8be4bf8d20 Add drawer's lock icon 2021-01-06 16:00:14 +01:00
Roman Drozd
c6bf772538 Merge branch 'develop' into feat-merge-chat-and-filesharing-tabs 2021-01-06 11:06:00 +01:00
Roman Drozd
1d8477cc46 Fix multi adding the same file 2021-01-06 11:03:13 +01:00
Roman Drozd
b3124c3d8b Hide File Sharing tab (eventually will be deleted) 2021-01-05 21:54:37 +01:00
Roman Drozd
8d0eefa22c Add minor changes: structure, add comments 2021-01-05 09:58:36 +01:00
Roman Drozd
1233894f53 Add button for gallery file sharing into Chat 2021-01-05 09:46:17 +01:00
Roman Drozd
7faac52549 Clean unused code 2021-01-05 09:08:45 +01:00
Roman Drozd
adfb59c9d5 Fix button to attach file (didn't always open a dialog) 2021-01-05 09:05:36 +01:00
Roman Drozd
c39caa6431 Fix sorting files and messages on one chat list 2021-01-05 08:14:43 +01:00
Roman Drozd
346b5b89a0 Rearrange Chat component 2021-01-05 02:42:47 +01:00
Roman Drozd
a61dff7f80 Move File component into Chat 2021-01-05 01:36:27 +01:00
Roman Drozd
33b6bcbfb8 Unify handle method's names 2021-01-05 01:00:44 +01:00
Roman Drozd
5641633eae Add & unify files badge with messages one on chat tab 2021-01-02 09:34:04 +01:00
Roman Drozd
9cc7651b39 Add & unify files moderator's action with messages ones on chat tab 2021-01-02 09:27:06 +01:00
Roman Drozd
8207ff5207 Add file sharing functionality as button to chat tab 2021-01-02 09:16:43 +01:00
Roman Drozd
c5fc27849c Show files and message on the same tab (chat) 2021-01-02 09:15:46 +01:00
Astagor
e865468f23
Merge pull request #665 from Astagor/fix-automutetreshold-bug
Fix autoMuteTreshold bug
2020-12-29 00:42:44 +01:00
Piotr Pawałowski
ba6a232225 Fix autoMuteTreshold bug 2020-12-29 00:35:36 +01:00
N7Remus
c86b6d9187
Merge pull request #642 from jmencak/special-chars-634
Thanks. It works.
2020-12-18 14:51:25 +01:00
Piotr Pawałowski
ec47517660 Enable on server side 2020-12-18 10:51:50 +01:00
Piotr Pawałowski
42afa6f911 Cleanup 2020-12-18 10:19:08 +01:00
Piotr Pawałowski
e9b06ae2c1 Fix lint 2020-12-18 10:15:05 +01:00
Piotr Pawałowski
6ecafd8e17 Added setting of a local picture to display if no video is sent 2020-12-18 10:10:50 +01:00
Stefan Otto
00ee5d7696 Merge branch 'develop' of https://github.com/havfo/multiparty-meeting into develop 2020-12-11 13:29:44 +01:00
Stefan Otto
9fc80419f0
Merge pull request #631 from jmencak/rooms-unlocked
Optionally enforce moderated access to all rooms.
2020-12-07 16:53:36 +01:00
Stefan Otto
1e8687b663 Merge branch 'develop' of https://github.com/havfo/multiparty-meeting into develop 2020-12-07 13:29:13 +01:00
Jiri Mencak
ea31b0018c Partial revert of Special chars sanitization.
540eaff37d
Correctly replaced encodeURI() by encodeURIComponent() in ChooseRoom.js and JoinDialog.js.
However, the new code added in server.js caused an extra issue:
https://github.com/edumeet/edumeet/issues/634

As entering the rooms with special characters (e.g. @) seems to work without issues with just
s/encodeURI/encodeURIComponent/ remove the problematic code.
2020-12-06 10:40:53 +01:00
Roman Drozd
0a3e0da08c Disable temporarily initial JoinDialog asking for media permissions until the problem is fixed 2020-12-04 15:39:25 +01:00
Stefan Otto
d1a39cec70 Merge branch 'develop' of https://github.com/havfo/multiparty-meeting into develop 2020-12-01 12:21:51 +01:00
Roman Drozd
67c5ce1c3f Merge branch 'feat-LocaleSelector-in-JoinDialog' into develop 2020-11-29 01:54:59 +01:00
Jiri Mencak
a31617bc3f Optionally enforce moderated access to all rooms.
Add the ability to optionally lock all rooms apart from those defined in
roomsUnlocked array in server/config/config.js.  The default behaviour is left
unchanged, i.e. users can freely enter any room without having to wait in the
lobby.
2020-11-21 12:59:59 +01:00
Stefan Otto
9f91fd9ea1
Merge pull request #630 from Astagor/audiolevelobserver_per_router
Added a MediaSoup AudioLevelObserver per each Router.
2020-11-19 13:09:11 +01:00
Stefan Otto
b814fc755b
Merge pull request #629 from Astagor/delay_join_all_peers
Add 200 ms delay between peer promotion
2020-11-19 13:08:43 +01:00
Piotr Pawałowski
13f7c69111 Added a MediaSoup AudioLevelObserver per each Router. Added logs in catch. 2020-11-18 11:11:05 +01:00
Piotr Pawałowski
39f27b0e5f Add 200 ms delay between peer promotion, when promoting all peers from lobby 2020-11-18 10:55:24 +01:00
Stefan Otto
9f1e6a7a40 Merge branch 'develop' of https://github.com/havfo/multiparty-meeting into develop 2020-11-18 10:42:19 +01:00
Stefan Otto
815e2ff9fa
Merge pull request #628 from jmencak/config_example-typos
Fix typos and duplicate sections in config.example.js
2020-11-18 10:24:47 +01:00
Jiri Mencak
3fecd00284 Fix typos and duplicate sections in config.example.js
Other changes:
  - Added meet_roles to the local authentication to make it more
    obvious it needs to be configured together with certain userMapping
    examples.
2020-11-17 15:56:57 +01:00
Stefan Otto
4933992463 Merge branch 'develop' of https://github.com/havfo/multiparty-meeting into develop 2020-11-17 14:33:23 +01:00
Stefan Otto
d56b76a504 Typo 2020-11-17 14:33:17 +01:00
Stefan Otto
d71cd5164b
Merge pull request #623 from Astagor/fixes_session_persistance
Maybe fixed session peristance
2020-11-17 14:30:23 +01:00
Stefan Otto
430a4b8014
Merge pull request #626 from jmencak/jm-czech-translation-update
Czech translation update.
2020-11-17 14:29:55 +01:00
Stefan Otto
2a1f2ee64f
Merge pull request #627 from jmencak/jm-contributing
Mention contributing against the develop, not master branch.
2020-11-17 14:28:34 +01:00
Jiri Mencak
4af9a518db Mention contributing against the develop, not master branch. 2020-11-17 14:18:59 +01:00
Jiri Mencak
c8f9a9c9a8 Czech translation update.
Changes:
  - Added Czech translation for missing/null fields in cs.json
  - Reviewed all the previously translated Czech entries
  - Fixed a typo in en.json
2020-11-17 13:55:15 +01:00
Roman Drozd
faa0b33b49 Fix wrong icons colors in theme 2020-11-16 14:53:29 +01:00
Roman Drozd
14e8f5ff4c Fix wrong icons colors in theme 2020-11-16 14:48:37 +01:00
Roman Drozd
4b1ba84a34 Adjust form 2020-11-16 14:03:16 +01:00
Roman Drozd
4af281024b Add LocaleSelector to JoinDialog 2020-11-16 13:21:35 +01:00
Roman Drozd
aae4249d1f Revert "Add LocaleSelector to JoinDialog"
This reverts commit 6199c3e467.
2020-11-16 10:38:51 +01:00
Roman Drozd
6e5b315e87 Revert "Adjust form"
This reverts commit f057d38830.
2020-11-16 10:35:09 +01:00
Roman Drozd
2cb1d37172 Revert "Add setting for showing/hiding JoinDialog's LocaleSelector"
This reverts commit 61ea6f0614.
2020-11-16 10:34:55 +01:00
Roman Drozd
b7fc1ccb3b Revert "Add setting for showing/hiding TopBar's LocaleSelector"
This reverts commit 34c98f112c.
2020-11-16 10:34:28 +01:00
Roman Drozd
5ce510d3b6 Revert "Detect locale if all LocaleSelectors are hidden"
This reverts commit d028af4e5e.
2020-11-16 10:33:37 +01:00
Roman Drozd
8ad6acf30d Revert "Update logo file"
This reverts commit d8956401aa.
2020-11-16 10:20:18 +01:00
Roman Drozd
92a5327045 Revert "Update config: separate settings for JoinDialog and TopBar about logo, title etc"
This reverts commit 39788fce03.
2020-11-16 10:15:23 +01:00
Roman Drozd
39ace1d116 Revert "Update config"
This reverts commit 92e786d809.
2020-11-16 10:15:18 +01:00
Roman Drozd
f9d8191336 Revert "Align LocaleSelector"
This reverts commit b37d564ddf.
2020-11-16 10:15:11 +01:00
Roman Drozd
45910e44c5 Revert "Fix wrong colors on icons in theme"
This reverts commit aba6b2ce4f.
2020-11-16 10:15:00 +01:00
Roman Drozd
26b664a316 Revert "Update default logos"
This reverts commit c49582b199.
2020-11-16 10:14:51 +01:00
Roman Drozd
3338914fb4 Revert "Update logos names"
This reverts commit 1f4e2a2305.
2020-11-16 10:14:43 +01:00
Roman Drozd
2d785d23cb Revert "Update LoginDialog config"
This reverts commit ea177d9470.
2020-11-16 10:14:33 +01:00
Roman Drozd
d5106f0051 Revert "Update AboutDialog config"
This reverts commit d35eca48be.
2020-11-16 10:14:13 +01:00
Roman Drozd
d35eca48be Update AboutDialog config 2020-11-16 09:06:46 +01:00
Roman Drozd
ea177d9470 Update LoginDialog config 2020-11-16 08:37:24 +01:00
Roman Drozd
1f4e2a2305 Update logos names 2020-11-16 08:20:23 +01:00
Roman Drozd
c49582b199 Update default logos 2020-11-16 07:58:46 +01:00
Roman Drozd
aba6b2ce4f Fix wrong colors on icons in theme 2020-11-16 07:19:20 +01:00
Roman Drozd
b37d564ddf Align LocaleSelector 2020-11-16 06:58:58 +01:00
Roman Drozd
92e786d809 Update config 2020-11-16 06:54:35 +01:00
Roman Drozd
39788fce03 Update config: separate settings for JoinDialog and TopBar about logo, title etc 2020-11-16 06:39:25 +01:00
Roman Drozd
d8956401aa Update logo file 2020-11-16 06:20:12 +01:00
Roman Drozd
d028af4e5e Detect locale if all LocaleSelectors are hidden 2020-11-16 03:49:20 +01:00
Roman Drozd
34c98f112c Add setting for showing/hiding TopBar's LocaleSelector 2020-11-16 03:13:22 +01:00
Roman Drozd
61ea6f0614 Add setting for showing/hiding JoinDialog's LocaleSelector 2020-11-16 03:09:53 +01:00
Roman Drozd
f057d38830 Adjust form 2020-11-16 02:27:07 +01:00
Roman Drozd
6199c3e467 Add LocaleSelector to JoinDialog 2020-11-16 02:26:13 +01:00
Roman Drozd
5c9c90cde5 Merge branch 'feat-refactor-LoadingView' into develop 2020-11-15 00:25:19 +01:00
Roman Drozd
78b59d4fd6 Move LoginDialog to "AccessControl" folder 2020-11-15 00:07:08 +01:00
Roman Drozd
c37f313be6 Update import paths 2020-11-14 23:49:08 +01:00
Roman Drozd
e6a127e44f Rename 2020-11-14 23:48:31 +01:00
Roman Drozd
dff06e1ce7 Lint 2020-11-14 23:47:11 +01:00
Roman Drozd
5aa4feb7d8 Delete test style 2020-11-14 23:30:57 +01:00
Roman Drozd
cd638ae358 update import paths 2020-11-14 23:27:51 +01:00
Roman Drozd
6ba2fdf0a2 Move loading stuff to new "Loader" folder 2020-11-14 23:26:59 +01:00
Roman Drozd
a18e8ef3f3 Remove unused styles 2020-11-14 22:50:41 +01:00
Roman Drozd
dbc4e4bfdf Delete styles file no longer needed 2020-11-14 22:26:43 +01:00
Roman Drozd
2b46121afc Compile external styles into component module 2020-11-14 22:24:43 +01:00
Piotr Pawałowski
7a97100419 Maybe fixed session peristance 2020-11-13 15:07:55 +01:00
Stefan Otto
2c24634c2e
Merge pull request #621 from Astagor/fixes_loggedin_button_state
Fixes loggedIn button state
2020-11-12 19:23:43 +01:00
Piotr Pawałowski
9299fe087f Adding login status checking 2020-11-12 12:32:27 +01:00
Stefan Otto
7e850c979b Changing back to 48000Hz because Opus will do max 48000Hz anyway (no resampling-> better audio quality) 2020-11-12 02:04:12 +01:00
Stefan Otto
97c957d381
Merge pull request #619 from Astagor/fixes_store_and_camera_state
Fixes - store and camera button
2020-11-11 22:59:29 +01:00
Piotr Pawałowski
70a3f1a480 Fix - me cannot be persisted. Fix camera button state when changing camera. 2020-11-11 17:33:29 +01:00
Roman Drozd
9a971456a6 lint 2020-11-10 12:11:02 +01:00
Roman Drozd
dfb38deb51
Merge pull request #614 from pioskala/media-buttons
Removed condition that media buttons in JoinDialog are visible only i…
2020-11-10 12:00:50 +01:00
Piotr Skalecki
7de51fd6ea Removed condition that media buttons in JoinDialog are visible only if Login is enabled 2020-11-10 09:46:42 +00:00
Mészáros Mihály
9625e39348 Fix lint 2020-11-07 16:31:39 +01:00
Mészáros Mihály
e1e6c1b2a3 Logout user if authrequired. fixes #600 2020-11-07 16:19:42 +01:00
Stefan Otto
eeebaf0541
Update store.js
typo
2020-11-06 19:09:15 +01:00
Stefan Otto
9f1825b9a1
Update store.js
Added comment for migrations
2020-11-06 19:07:36 +01:00
Mészáros Mihály
0072018bf9 Lint and long lines fix 2020-11-06 07:59:44 +01:00
Mészáros Mihály
f71a214ba4 Fix typo MuIconButton => MuiIconButton 2020-11-06 07:59:18 +01:00
Mészáros Mihály
648fbe847a Add a check after failure redirect.
When query param is empty.
2020-11-05 22:22:29 +01:00
Mészáros Mihály
6a0a35978f Add debug log to auth paths 2020-11-05 22:11:54 +01:00
Mészáros Mihály
067f7345f4 Remove passportjs failureFlash 2020-11-05 21:59:10 +01:00
Mészáros Mihály
4be3a62d41 Fix same typo in log too. 2020-11-05 19:38:22 +01:00
Mészáros Mihály
de2edb1fb4 Fix typo 2020-11-05 19:25:26 +01:00
Mészáros Mihály
7095d6b98e Add session/url param state check in auth/callback 2020-11-05 10:44:40 +01:00
Mészáros Mihály
419a24f9e8 Remove disabling socket io cookie.
It made express and socket io sessions out of sync
2020-11-05 10:19:43 +01:00
AugustoZanoni
6db3c777a0 Update translations for pr-BR language
Some texts couldn't be tested, keept original
2020-11-04 17:19:27 +01:00
Mészáros Mihály
612d919215
Merge pull request #602 from Astagor/german_and_polish_translations
Translation fixes
2020-11-04 16:09:29 +01:00
Mészáros Mihály
f160b88965
Merge branch 'develop' into german_and_polish_translations 2020-11-04 16:09:09 +01:00
Mészáros Mihály
1383443906
Merge pull request #603 from L4ky/develop
Update italian translation
2020-11-04 16:03:16 +01:00
Luca S
3de9f67346 Update italian translation 2020-11-04 15:10:53 +01:00
Mészáros Mihály
494585ea16 Update hungarian translation 2020-11-04 13:33:20 +00:00
Mészáros Mihály
dc20c18c6e Fix typo in english translation 2020-11-04 13:32:49 +00:00
Mészáros Mihály
1f52d95201 English translation tidy: logout, join 2020-11-04 13:32:05 +00:00
Saša Davidović
befb3df144
Update hr.json
Croatian translation update.
2020-11-04 12:50:34 +01:00
Stefan Otto
abe78052d7 Norwegian translation update 2020-11-04 12:34:13 +01:00
Piotr Pawałowski
b27283b67d Translation fixes 2020-11-04 11:14:31 +01:00
Stefan Otto
73e2af077c Merge branch 'release-3.4' into develop 2020-11-04 05:13:32 +01:00
Stefan Otto
a83a27b72c Merge branch 'release-3.4' 2020-11-04 04:39:19 +01:00
Stefan Otto
d2c00649e8 3.4 2020-11-04 04:29:25 +01:00
Roman Drozd
fc50438162 Fix loosing the current language after leaving the room) 2020-11-04 02:31:36 +01:00
Stefan Otto
a4c7cf92e1
Merge pull request #598 from edumeet/extravideoduplication-fix
Extra video duplication fix+hungarian translation
2020-11-04 02:10:44 +01:00
Stefan Otto
1e0194ef6f
Merge branch 'develop' into extravideoduplication-fix 2020-11-04 02:10:07 +01:00
Roman Drozd
3f378b7aae Fix notifications (they were displayed always in English) 2020-11-04 01:46:32 +01:00
Roman Drozd
38645f5e3c Update favicon 2020-11-03 22:20:56 +01:00
Roman Drozd
7fc54841b6 fix translations 2020-11-03 18:58:04 +01:00
Stefan Otto
365d7fdd0d centralAudioOptions in code should have same defaults as in config.example.js 2020-11-03 13:29:01 +01:00
Debian
1b932acdc2 Throw error if new centralAudioOptions is missing 2020-11-03 10:31:46 +00:00
Debian
4e3fc94fa0 Fix typo missing "p" 2020-11-03 10:12:04 +00:00
Mészáros Mihály
f613e24f83 Fixes #600 issue 1 2020-11-03 10:34:17 +01:00
Debian
037299bcff Remove '+' from special chars fixes #597 2020-11-02 10:19:38 +00:00
Stefan Otto
87c6826259 Removed unused 'fragment' from joinDialog 2020-11-02 04:42:08 +01:00
Stefan Otto
129a573aaa updated CHANGELOG 2020-11-02 04:41:19 +01:00
Stefan Otto
e6251e97a2 Comments for audiosettings in config.example 2020-11-02 04:23:04 +01:00
Stefan Otto
3bec1a080d just a comment 2020-11-02 04:05:45 +01:00
Stefan Otto
13a3c7912a Merge branch 'develop' of https://github.com/havfo/multiparty-meeting into develop 2020-11-02 03:56:20 +01:00
Stefan Otto
3387c133ee Possible fix for #582 Crackling sound, Fix for #444 Settings persistence, fixing: Audio settings from config take no effect 2020-11-02 03:56:15 +01:00
Roman Drozd
64312ddcc8 Add new labels, and lint all translation's files 2020-11-01 17:43:23 +01:00
Roman Drozd
3dbd4dc023 Add Labels to "Join" and "Login/Logout" buttons 2020-11-01 17:39:33 +01:00
Roman Drozd
8ffee6b049 Add Labels to media buttons 2020-11-01 17:03:35 +01:00
N7Remus
630665fd5b Extra video duplication fix+hungarian translation 2020-11-01 16:33:09 +01:00
Roman Drozd
9032f527b4 Select text after TextField`s focus 2020-11-01 14:38:24 +01:00
Roman Drozd
5d56d17345 Add ToolTips to media buttons 2020-11-01 14:23:55 +01:00
Roman Drozd
44ec6c430d Remove ChooseRoom 2020-11-01 04:42:17 +01:00
Roman Drozd
f04231b94b Merge branch 'develop' into feat-merge-chat-and-filesharing-tabs 2020-11-01 02:31:26 +01:00
Roman Drozd
80e5a7ccf4 WIP 2020-11-01 02:24:22 +01:00
Roman Drozd
3a627525f8 Improve instruction about adding logo name 2020-11-01 00:48:17 +01:00
Roman Drozd
65b2a5b08c Fix JoinDialog media select/Room enable a/v: after 48baea3c (partly) 2020-10-30 07:20:01 +01:00
Roman Drozd
990fe8e446 Refactor logo/title code 2020-10-30 06:00:56 +01:00
Roman Drozd
a6bcd019a6 Refactor DialogTitle 2020-10-30 05:36:28 +01:00
Roman Drozd
cab58f98fb Add logo and set as default 2020-10-30 05:25:48 +01:00
Roman Drozd
55d988d073 Refactor DialogTitle 2020-10-30 05:10:45 +01:00
Roman Drozd
137dd4ea68 Reduce media buttons size and add group label 2020-10-30 02:59:54 +01:00
Roman Drozd
8056e9cff7 Standarize colors 2020-10-30 02:03:33 +01:00
Mészáros Mihály
8d6565d226 Disable socket.io cookie 2020-10-28 16:20:22 +01:00
Roman Drozd
5689d413f1 comment out an unused function 2020-10-28 04:32:05 +01:00
Roman Drozd
25a024643d Fix join button 2020-10-28 04:10:51 +01:00
Roman Drozd
7cd9854dec Refactor DialogTitle && account button 2020-10-28 03:58:56 +01:00
Roman Drozd
6069c7d7b9 Add missing Join button style 2020-10-28 02:23:54 +01:00
Roman Drozd
871d814bd7 Reflect auth state in whole JoinDialog 2020-10-28 00:32:14 +01:00
Roman Drozd
536247aba3 Add redux-persistent subset filterning and persist "me.loggedIn" 2020-10-28 00:13:52 +01:00
Roman Drozd
8c4858992b Add colors 2020-10-27 23:29:15 +01:00
Roman Drozd
3f33c7fb86 Fix guest join button after auth 2020-10-27 18:56:50 +01:00
Roman Drozd
734a851ac5 Clarify the auth is a step process 2020-10-27 18:49:30 +01:00
Stefan Otto
84642c615c rename for fix typo 2020-10-27 11:14:51 +01:00
Stefan Otto
1e1c812cd7 Fix type 'appearEnce' 2020-10-27 11:11:48 +01:00
Mészáros Mihály
733bf1161f remove trailing space 2020-10-27 09:46:33 +01:00
Mészáros Mihály
1af1f13a5b Format more Changelog 2020-10-27 09:45:45 +01:00
Mészáros Mihály
4264ae6204 Remove 2 only small tidy lines from changelog 2020-10-27 09:44:04 +01:00
Mészáros Mihály
48baea3cf2 Keep A/V mute state during reconnection. fixes 510 2020-10-27 09:31:42 +01:00
Stefan Otto
4dc507453c Prepared Changelog for release 3.4.0 2020-10-27 03:21:26 +01:00
Roman Drozd
849c356c64 Fix close room link 2020-10-26 23:41:20 +01:00
Roman Drozd
15e0e9ee2e Set focus on login field 2020-10-26 22:26:31 +01:00
Roman Drozd
ead4305d8d show auth toggle buttons when logging is enabled 2020-10-26 22:00:17 +01:00
Roman Drozd
2d512b4663 Fix join button after auth 2020-10-26 19:15:13 +01:00
Roman Drozd
a4b79ffc84 Merge branch 'fix-roomId-inserting' into develop 2020-10-26 18:35:25 +01:00
Roman Drozd
ba61478f76 Fix another roomId bug 2020-10-26 18:34:41 +01:00
Roman Drozd
839750af00 Merge branch 'fix-roomId-inserting' into develop 2020-10-26 18:18:00 +01:00
Roman Drozd
2cf0c6d21d fix roomId 2020-10-26 18:15:24 +01:00
Mészáros Mihály
4f664790e0 Until decodedURI will be fixed I revoke it 2020-10-26 18:14:00 +01:00
Mészáros Mihály
345e2629a6 Replace ChooseRoom with JoinDialog 2020-10-26 15:30:26 +01:00
Mészáros Mihály
207881a384 Add back decodedRoomId 2020-10-26 13:52:51 +01:00
Mészáros Mihály
41c881edfd Simplify redirect url 2020-10-26 13:29:46 +01:00
Mészáros Mihály
f506542c85 react-scripts upgrade to avoid security issues 2020-10-26 12:51:31 +01:00
Mészáros Mihály
e3713bd3e0 Tidy: aviod default export of anonymous function 2020-10-26 12:47:30 +01:00
Mészáros Mihály
e2426da1f2 remove code that is problematic and also unused 2020-10-26 12:15:02 +01:00
Mészáros Mihály
652e076858 Tidy: replace obj.entries with obj.values to avoid unused key 2020-10-26 12:13:08 +01:00
Mészáros Mihály
78ab1d8112 Tidy lint 2020-10-26 11:22:38 +01:00
Mészáros Mihály
545632d9a8 Merge branch 'feat-login-dialog' into develop 2020-10-26 11:21:12 +01:00
Roman Drozd
daabc58d38 Merge branch 'feat-join-dialog_update' into develop 2020-10-26 04:07:18 +01:00
Roman Drozd
062582a908 Remove unused elements 2020-10-26 03:57:34 +01:00
Roman Drozd
19e78561e6 Make Semantic Changes 2020-10-26 03:22:11 +01:00
Roman Drozd
7769231671 Standarize Auth button 2020-10-26 03:05:31 +01:00
Roman Drozd
db11865947 Fix permission trigger 2020-10-26 01:10:46 +01:00
Roman Drozd
df31942f13 Add joinAudio capability 2020-10-26 00:28:51 +01:00
Roman Drozd
b25dcde4d3 Update TopBar leave button 2020-10-26 00:26:22 +01:00
Roman Drozd
cd34b01978 Change default component 2020-10-26 00:25:35 +01:00
Roman Drozd
f877604a81 Update JoinDialog 2020-10-26 00:23:44 +01:00
Roman Drozd
790f57c6f1 Mark fields as required 2020-10-21 13:25:32 +02:00
Roman Drozd
d5a3b6e5e6 Update translation 2020-10-21 13:17:17 +02:00
Roman Drozd
2251fedc66 Remove unnecessary elements 2020-10-21 12:29:43 +02:00
Roman Drozd
4310c2d3b1 Remove GET param field 2020-10-21 12:06:21 +02:00
Mészáros Mihály
ea6581140b Typo in previous commit 2020-10-21 09:25:25 +02:00
Mészáros Mihály
2ff7ec3b78 Use session to store state in local auth 2020-10-21 09:23:53 +02:00
Roman Drozd
d166c922a7 Update loginDialog path 2020-10-21 03:00:23 +02:00
Roman Drozd
81e8864d4a Add route for LoginDialog 2020-10-21 02:57:49 +02:00
Roman Drozd
ce4a7d7bae Add LoginDialog component 2020-10-21 02:55:39 +02:00
N7Remus
19867a7dc3
Merge pull request #594 from edumeet/develop-sanitize-redirect
#518 Fix
2020-10-20 23:00:31 +02:00
Mészáros Mihály
6a2fe5101a Formating login form 2020-10-20 12:28:57 +02:00
N7Remus
540eaff37d #518 Fix 2020-10-19 15:52:56 +02:00
Mészáros Mihály
51a6873424 Add bcrypt encrypted passwords for local strategy 2020-10-16 19:51:54 +02:00
Mészáros Mihály
a71e21fffc Tidy lint 2020-10-16 15:05:49 +02:00
Debian
f72ee06315 Upgrade React-scripts 2020-10-16 12:31:13 +00:00
Debian
10605a0015 Add saml state change 2020-10-16 12:30:46 +00:00
Debian
cececfb4ef Use shared cookieparser for web and websocket 2020-10-16 12:30:11 +00:00
Debian
b782d4d17f Add saml attriute mappings 2020-10-16 12:27:03 +00:00
Stefan Otto
d211d45345
Merge pull request #591 from Astagor/improvement_moderator_buttons_layout
Improvement moderator buttons layout
2020-10-15 10:52:59 +02:00
Piotr Pawałowski
badb88d66b Fix lint" 2020-10-13 16:48:54 +02:00
Piotr Pawałowski
9c5d4132f8 Fix moderator buttons layout 2020-10-13 16:46:22 +02:00
Mészáros Mihály
e4e8197b7f Remove duplicated callbackURL 2020-10-12 22:20:37 +02:00
Mészáros Mihály
7898d826e3 Fix saml strategy and metadata 2020-10-12 22:17:23 +02:00
Mészáros Mihály
8417b3d6c5 Comment fs import because only used in saml auth 2020-10-12 14:51:02 +02:00
Mészáros Mihály
a529013b4e Add displayName mapping to usermapping 2020-10-12 14:47:00 +02:00
Mészáros Mihály
7e440d7a33 Fix saml load cert from file 2020-10-12 14:02:13 +02:00
Mészáros Mihály
4890f5c948 Fix local auth 2020-10-12 14:01:53 +02:00
Mészáros Mihály
c38e5bcabb Fix federation pem 2020-10-12 10:17:26 +02:00
Stefan Otto
58e3c29a52
Merge pull request #590 from edumeet/fix-prometheus-config
Lint and add comma to prometheus config code
2020-10-12 09:58:41 +02:00
Mészáros Mihály
6eb67f64ed Add initial support for local and saml auth 2020-10-12 09:14:27 +02:00
Roman Drozd
c7400824a6 Lint and add comma to prometheus config code 2020-10-11 22:16:32 +02:00
Stefan Otto
e33ef97ed2
Merge pull request #589 from Astagor/fix_piping_peers
Fix piping peers
2020-10-08 16:07:49 +02:00
Piotr Pawałowski
d449f44420 Fix piped router count 2020-10-08 15:11:54 +02:00
Stefan Otto
906af423b6
Merge pull request #584 from Astagor/fix_spotlight_race
Fix spotlight race
2020-10-08 12:57:05 +02:00
Stefan Otto
194a49ca08
Merge pull request #588 from pioskala/localization-polish
Localization polish
2020-10-07 11:40:51 +02:00
Stefan Otto
e486a361fd
Merge pull request #493 from edumeet/feat-localization-selection
Add localization selection
2020-10-07 11:32:27 +02:00
Roman Drozd
57b8bc8886 Update locales 2020-10-06 22:47:45 +02:00
Roman Drozd
c0c649c29f Merge branch 'develop' into feat-localization-selection 2020-10-06 22:25:57 +02:00
Roman Drozd
454f85ed7a Delete comments 2020-10-06 21:12:12 +02:00
Piotr Pawałowski
f217170dd5 Fix lint 2020-10-05 23:16:44 +02:00
Piotr Pawałowski
6ddec291aa Fix piping bug when peers returning to router 2020-10-05 22:56:53 +02:00
pioskala
0de5937c18 updated pl.json 2020-10-05 17:23:00 +02:00
pioskala
d5340bdcb3 updated pl.json 2020-10-05 16:59:40 +02:00
Piotr Pawałowski
57be419e91 Fix lint 3 2020-10-03 22:03:38 +02:00
Piotr Pawałowski
bffa3cae5b Fix lint 2 2020-10-03 22:02:05 +02:00
Piotr Pawałowski
b87fbf3731 Fix lint 2020-10-03 21:55:13 +02:00
Piotr Pawałowski
8637fd483a Fix race in spotlights 2020-10-03 21:46:50 +02:00
Stefan Otto
6854a338a9
Merge pull request #562 from edumeet/develop-sanit
Develop sanit
2020-09-29 08:20:09 +02:00
Stefan Otto
e97f7a9624
Merge pull request #576 from Astagor/fix_worker_load_v2
Fix worker load v2
2020-09-29 08:17:54 +02:00
Piotr Pawałowski
5b005899a7 Fix lint 2 2020-09-28 16:28:17 +02:00
Piotr Pawałowski
5505a2906d Fix lint 1 2020-09-28 16:23:45 +02:00
Piotr Pawałowski
da1ecc569e Ver 2 of worker load fix 2020-09-28 16:17:01 +02:00
Mészáros Mihály
1f8bd9a22b Fixes #546 2020-09-27 10:49:06 +02:00
N7Remus
0efc2e7ca0 Removed audio request modification 2020-09-25 22:25:58 +02:00
Stefan Otto
2bddbdef6c
Merge pull request #559 from Astagor/fix_workers_load
New worker load calculation - for Stefan to test
2020-09-24 12:57:58 +02:00
Stefan Otto
76fb3ca45c
Merge pull request #560 from Astagor/fix_promote_all_from_lobby
Promote all peers from lobby when a peer joins with the PROMOTE_PEER …
2020-09-24 12:54:28 +02:00
N7Remus
c432582c3f Request audio and webcam permission at once, when user is requesting video and audio 2020-09-21 19:08:24 +02:00
N7Remus
42aa0d20e0 Fix URL sanitizer bug 2020-09-21 19:01:29 +02:00
Piotr Pawałowski
841514c3e2 Promote all peers from lobby when a peer joins with the PROMOTE_PEER permission and activateOnHostJoin is true in config 2020-09-19 17:19:27 +02:00
Piotr Pawałowski
cec3aa6701 Fixes as havfo suggested 2020-09-19 00:27:38 +02:00
Piotr Pawałowski
e4ebafac74 Fixed null values for peers not yet assigned to a router 2020-09-19 00:09:57 +02:00
Piotr Pawałowski
7bfc707fcb Cleanup on close 2020-09-18 18:23:43 +02:00
Piotr Pawałowski
97a09b0fb8 New worker load calculation 2020-09-18 18:12:15 +02:00
Stefan Otto
642cdaec94
Merge pull request #503 from Astagor/feature_hide_own_videos
Feature hide own videos
2020-09-18 10:30:07 +02:00
Stefan Otto
09d9ae23f5
Merge pull request #457 from Astagor/fix_spolight_maxlastn
Fix spolight maxlastn
2020-09-18 10:29:39 +02:00
Stefan Otto
aa4e7cec6d
Merge pull request #455 from Astagor/feature_dispaly_name_trimming
Feature display name trimming
2020-09-18 10:29:07 +02:00
Mészáros Mihály
67ae1a796d
Replace multiparty-meeting => edumeet in munin 2020-09-11 09:01:25 +02:00
Håvar Aambø Fosstveit
76893cc9d7 Hopefully fix to silent peer issue, ref #256 2020-08-24 13:52:16 +02:00
Mészáros Mihály
d1680b4ba3
Merge pull request #502 from Astagor/feature_mirror_own_video_setting
Feature mirror own video setting
2020-08-10 09:17:41 +02:00
osuleimen
807f4d4fc1 Update kk.json
Some strings shortened
2020-08-08 11:37:24 +02:00
osuleimen
b5e9f2cdc9 Update ru.json
Some strings shortened
2020-08-08 11:37:24 +02:00
Mészáros Mihály
a3f77b676b
Merge pull request #516 from osuleimen/patch-3
Update ru.json
2020-08-08 11:34:35 +02:00
Mészáros Mihály
242d55dcf6
Merge pull request #517 from osuleimen/patch-4
Update kk.json
2020-08-08 11:33:25 +02:00
osuleimen
2efffc72d8
Update kk.json
Some strings shortened
2020-08-08 15:15:50 +06:00
osuleimen
ed8735dc48
Update ru.json
Some strings shortened
2020-08-08 15:10:09 +06:00
Mészáros Mihály
9fa34d9a59 Tidy: Remove trailing spaces 2020-08-06 18:29:43 +02:00
Mészáros Mihály
830ca2594f Add missing keys to ru and kk languages 2020-08-06 18:24:51 +02:00
Mészáros Mihály
da8f351e42 Add Kazakh language 2020-08-06 18:09:47 +02:00
osuleimen
8b1ee8219b Create kz.json
Kazakh language
2020-08-06 18:09:00 +02:00
Mészáros Mihály
6f8044ad04 Add Russian language 2020-08-06 18:08:57 +02:00
osuleimen
4678e2c6cc Create ru.json
Russian language
2020-08-06 18:06:50 +02:00
Mészáros Mihály
7dd731c966 Add Kazakh language 2020-08-06 11:35:20 +02:00
Mészáros Mihály
b054de7ceb Merge branch 'PR512' into PR511 2020-08-06 11:16:35 +02:00
Mészáros Mihály
377b021fc4 Add Russian language 2020-08-06 10:24:43 +02:00
osuleimen
d8dc1b6b71
Create kz.json
Kazakh language
2020-08-06 13:28:13 +06:00
osuleimen
b62e7c0033
Create ru.json
Russian language
2020-08-06 01:07:57 +06:00
remus
22c9f3c1cb #497 translation update 2020-07-21 23:58:26 +02:00
Piotr Pawałowski
5e04e2a2fb Fix lint 5 2020-07-18 18:58:20 +02:00
Piotr Pawałowski
0dd654ff6d Fix lint 4 2020-07-18 18:57:20 +02:00
Piotr Pawałowski
239f09d386 Fix lint 3 2020-07-18 18:54:56 +02:00
Piotr Pawałowski
85a73f8c00 Fix lint 2 2020-07-18 18:51:19 +02:00
Piotr Pawałowski
c8b518f6a4 Fix lint 1 2020-07-18 18:47:43 +02:00
Piotr Pawałowski
f91c016044 Added hidding of own videos 2020-07-18 18:42:46 +02:00
Piotr Pawałowski
6ddcee5e76 Fix lint 3 2020-07-18 18:08:18 +02:00
Piotr Pawałowski
1320ee175c Fix lint 2 2020-07-18 18:07:29 +02:00
Piotr Pawałowski
cad2fa3135 Fix lint 1 2020-07-18 18:04:00 +02:00
Piotr Pawałowski
2eb26c995f Added switching of own video mirror in settings 2020-07-18 17:59:37 +02:00
Mészáros Mihály
3c1c161a7c
Update README.md 2020-07-08 07:42:01 +02:00
Mészáros Mihály
0710ef4a3e Fix express error handler 2020-07-07 21:46:33 +02:00
Håvar Aambø Fosstveit
6cf5067493 Set timeout for TURN API request, fixes #484 2020-07-02 20:44:49 +02:00
Roman Drozd
3479daa0d2 Fix lint 2020-06-26 13:05:57 +02:00
Roman Drozd
e3e1b46c77 Fix the Norwegian region code 2020-06-26 12:47:55 +02:00
Håvar Aambø Fosstveit
dc1ad303cd Some more renaming, ref #492 2020-06-26 12:44:13 +02:00
Roman Drozd
6ac1167031 Fix locale checking state 2020-06-26 12:41:14 +02:00
Håvar Aambø Fosstveit
08c54ee713 Rename to edumeet, ref #492 2020-06-26 12:40:39 +02:00
Håvar Aambø Fosstveit
5a4bd1f4f5 Ability to give roles to users. Make certain roles promotable. 2020-06-25 15:26:16 +02:00
Roman Drozd
eb3dc3d8f2 Add localization full codes 2020-06-24 17:09:00 +02:00
Roman Drozd
93b9f7f818 Add localization selection 2020-06-24 16:09:17 +02:00
Stefan Otto
0ad219d98f
fix wrong config parameter naming (voiceActivatedUnmute) 2020-06-15 12:50:37 +02:00
Mészáros Mihály
d645a0f80e
Merge pull request #479 from covideoin/ind-translations
Hindi Translation Added
2020-06-15 07:32:00 +02:00
Chirag Mewada
0e36ecac75 Hindi Language Added 2020-06-13 12:13:11 -04:00
Håvar Aambø Fosstveit
55e30be8a7 Add room to userMapping. Example of giving moderator if no authenticated users present. 2020-06-08 22:43:51 +02:00
Mészáros Mihály
67a6914f04 sync README to master 2020-06-05 22:00:29 +02:00
Mészáros Mihály
511a7de25b Tidy in README 2020-06-05 21:43:20 +02:00
Mészáros Mihály
602923307e
Merge pull request #436 from mertcelen/master
Deb package installation guide added.
2020-06-05 21:32:47 +02:00
Mészáros Mihály
9cde758c01 Tidy lint 2020-06-05 21:31:21 +02:00
Mészáros Mihály
a4e506d60f
Merge pull request #445 from christian-2/issue-421
ability for Prometheus exporter to listen on localhost
2020-06-05 21:28:35 +02:00
Yevhenii
d207a7c06b Update uk.json
New Ukrainian messages for v.3.3 added
2020-06-05 21:24:55 +02:00
Mészáros Mihály
ac3a7c3cca
Merge pull request #452 from Melkin1968/master
Update uk.json
2020-06-05 20:55:27 +02:00
Håvar Aambø Fosstveit
0cfba2e40e Remove facingMode, will screw up switching of camera when the camera you want to switch to is not facing user. Ref #451 2020-06-03 11:55:02 +02:00
Piotr Pawałowski
699c8adde2 Fix lint 2020-06-03 11:01:31 +02:00
Piotr Pawałowski
f7291f4468 Fix spoltights ignoring maxLastN 2020-06-03 10:59:32 +02:00
Håvar Aambø Fosstveit
4434b84cf0 Add new permission to config 2020-06-02 15:18:12 +02:00
Håvar Aambø Fosstveit
c040b411a9 Fix userRoles check 2020-06-02 15:16:46 +02:00
Håvar Aambø Fosstveit
adf19aafd7 Add functions to client for modifying roles 2020-06-02 15:16:18 +02:00
Håvar Aambø Fosstveit
5a47883db1 Create Room actions for giving and taking roles 2020-06-02 14:44:40 +02:00
Håvar Aambø Fosstveit
cd62287dba New permission to modify peer roles 2020-06-02 14:23:13 +02:00
Håvar Aambø Fosstveit
590a553bbd Extend userRoles and use the new audio, video permissions, ref #437 2020-06-02 14:18:18 +02:00
Håvar Aambø Fosstveit
45946144f1 Propagate userRoles to client state, ref #437 2020-06-02 14:14:31 +02:00
Håvar Aambø Fosstveit
2dbf53e4cb New permissions for audio and video, ref #437 2020-06-02 14:13:35 +02:00
Piotr Pawałowski
de7045cad1 Merge with current develop 2020-06-02 13:42:54 +02:00
Piotr Pawałowski
0e10552cae Fix lint 2020-06-02 13:31:22 +02:00
Piotr Pawałowski
137a3c3b21 Trim displayName inputs. Add random number to Guest displayName. 2020-06-02 13:19:48 +02:00
Yevhenii
5217a6bb0a
Update uk.json
New Ukrainian messages for v.3.3 added
2020-06-01 16:32:06 +03:00
christian2
7afe252b78 fix docu 2020-05-30 06:41:48 +02:00
christian2
b939fc4c0a Merge remote-tracking branch 'upstream/develop' into issue-421 2020-05-30 06:40:02 +02:00
Håvar Aambø Fosstveit
e835a98f37 Correct aspect of new window, fixes #439 2020-05-29 15:56:42 +02:00
Håvar Aambø Fosstveit
a5f6cd6f60 Need to check both dimensions for changes to aspect, ref #439 2020-05-29 15:55:45 +02:00
Håvar Aambø Fosstveit
086ecc8334 Add constraint for user facing camera. Update media devices properly, ref #444 2020-05-29 13:54:45 +02:00
Håvar Aambø Fosstveit
a54dff8204 Make list headers bolder 2020-05-29 13:33:18 +02:00
Mert ÇELEN
48ac47d3b8
Updated node.js version with warning. 2020-05-29 13:34:57 +03:00
christian2
3de7b7fddc resolves #421 2020-05-29 11:30:33 +02:00
christian2
2444bc99af fix docu 2020-05-29 10:04:27 +02:00
Mészáros Mihály
dd09a60880 Add a try catch around lti url parsing 2020-05-29 07:47:44 +02:00
Mészáros Mihály
e39cf08759 Add a try catch around lti url parsing 2020-05-29 07:46:22 +02:00
Håvar Aambø Fosstveit
aa678d03e8 TCP enabled by default, prefer UDP 2020-05-28 23:43:33 +02:00
Håvar Aambø Fosstveit
988b9a9cb1 Lint 2020-05-28 23:43:06 +02:00
Håvar Aambø Fosstveit
afcfa105e7 Add indicator for peers in focus. Ref #360 2020-05-28 23:42:43 +02:00
Håvar Aambø Fosstveit
e01eab3a63 Follow convention on icons 2020-05-28 19:28:09 +02:00
Håvar Aambø Fosstveit
1e1f3bff61 Make 16 : 9 default, ref #439 2020-05-28 19:23:43 +02:00
Stefan Otto
a455c9f521 Merge branch 'develop' of https://github.com/havfo/multiparty-meeting into develop 2020-05-28 16:24:47 +02:00
Stefan Otto
00141760bf Fix (autoMuted) mic too big click area 2020-05-28 16:24:34 +02:00
Håvar Aambø Fosstveit
4efb0a9b0b Merge branch 'develop' of github.com:havfo/multiparty-meeting into develop 2020-05-28 15:20:33 +02:00
Håvar Aambø Fosstveit
3419436ebf Clean up participant list. Remove peer selection for now, will add back later. Ref #360 2020-05-28 15:20:29 +02:00
Stefan Otto
91e2cf9ae0 Fix merge conficts 2020-05-28 15:18:28 +02:00
Stefan Otto
7127e22ac1 Improve autoMute mic-indicators; Improve audio level scaling 2020-05-28 15:03:43 +02:00
Håvar Aambø Fosstveit
105f5055f5 Possible to change aspect ratio. Configure in config and change in settings. Fixes #439 2020-05-28 14:42:51 +02:00
Mészáros Mihály
df17f6e995 Simplify electron screenshare check 2020-05-28 05:41:26 +02:00
Mészáros Mihály
e5ef27437a Add comment to electreon screenshare fix 2020-05-28 05:39:21 +02:00
Mészáros Mihály
7648e0aacc Fix electron with "nodeIntegration: false" 2020-05-28 05:39:21 +02:00
Mészáros Mihály
31c69ecd50 Add comment to electreon screenshare fix 2020-05-28 05:33:55 +02:00
Mert ÇELEN
64fa62a713
Deb package installation guide added. 2020-05-27 14:03:08 +03:00
Mészáros Mihály
d3c16c1156
Merge pull request #418 from havfo/snyk-upgrade-ce187ee0a6aeeb2a0fac355a5e59c2a3
[Snyk] Upgrade webtorrent from 0.107.17 to 0.108.1
2020-05-27 08:18:44 +02:00
Hasan Hüseyin Pay
b2e91e6d2c Fix translations in tr 2020-05-27 08:07:05 +02:00
Mészáros Mihály
ed325b89e6
Merge pull request #431 from hhuseyinpay/develop
Fix translations in tr
2020-05-27 08:05:41 +02:00
Mészáros Mihály
963788ebbe Fix electron with "nodeIntegration: false" 2020-05-27 06:32:29 +02:00
Hasan Hüseyin Pay
86e995e83b
Fix translations in tr 2020-05-27 00:56:51 +03:00
Håvar Aambø Fosstveit
6f44813301 Only firefox handles applyConstraints to audio tracks correctly 2020-05-25 11:50:29 +02:00
Mészáros Mihály
cc544e95bf Add chromium to default supported browsers 2020-05-25 10:39:56 +02:00
Mészáros Mihály
85d7c7f94d Add chromium to default supported browsers 2020-05-25 10:38:56 +02:00
Mészáros Mihály
e3eeabf6b7 Fix privacy url 2020-05-25 02:12:57 +02:00
Mészáros Mihály
9ed18b0cfb Fix missing translations in hu 2020-05-25 02:12:57 +02:00
Mészáros Mihály
97141499b7 Fix privacy url 2020-05-25 02:08:12 +02:00
Mészáros Mihály
fba2102e12 Fix missing translations in hu 2020-05-25 01:36:53 +02:00
Håvar Aambø Fosstveit
969f686967 Make menus more intuitive on mobile 2020-05-23 19:19:20 +02:00
Mészáros Mihály
c153f3061e Upstream changes 2020-05-23 10:04:26 +02:00
snyk-bot
e5c0143780 fix: upgrade webtorrent from 0.107.17 to 0.108.1
Snyk has created this PR to upgrade webtorrent from 0.107.17 to 0.108.1.

See this package in NPM:
https://www.npmjs.com/package/webtorrent

See this project in Snyk:
https://app.snyk.io/org/misi/project/eaf064a2-82f1-458e-8ca0-12b422ad9584?utm_source=github&utm_medium=upgrade-pr
2020-05-23 02:36:22 +02:00
Håvar Aambø Fosstveit
46a2c075f0 Merge branch 'develop' 2020-05-22 22:07:17 +02:00
Håvar Aambø Fosstveit
f703cd6b06 Update CHANGELOG 2020-05-22 21:37:15 +02:00
Håvar Aambø Fosstveit
63f6ba0509 Update dependencies 2020-05-22 21:36:47 +02:00
Håvar Aambø Fosstveit
e1b56d41fd Update privacy.html 2020-05-22 21:35:23 +02:00
Mészáros Mihály
f67b3aef88
Add support and privacy URLs (#414) 2020-05-22 21:26:15 +02:00
Håvar Aambø Fosstveit
f546e22ae1 Remove video frame rate and screen sharing resolution, these are probably not required. Still configurable in app config. Fixes #415 2020-05-22 20:42:22 +02:00
Håvar Aambø Fosstveit
ed0af0cd50 Move the button control bar if drawer is not overlayed, fixes #340 2020-05-22 20:30:29 +02:00
Håvar Aambø Fosstveit
2ca4cef3dc Make button control bar the top element, fixes #417 2020-05-22 20:29:02 +02:00
Håvar Aambø Fosstveit
f064f98fd4 Lint 2020-05-22 20:03:05 +02:00
Håvar Aambø Fosstveit
803858575f Don't promote all peers on unlock, this bypassed roles/permissions, fixes #386 2020-05-22 19:59:43 +02:00
Håvar Aambø Fosstveit
d5e14f8c5b Don't screen sharing icon to mobile, fixes #338 2020-05-22 19:53:26 +02:00
Håvar Aambø Fosstveit
7cb0150816 Screen sharing for opera and chromium, and only desktop 2020-05-22 19:47:51 +02:00
Håvar Aambø Fosstveit
f0ee4de8fc Screensharing on Safari 13+, fixes #318 2020-05-22 19:36:38 +02:00
Håvar Aambø Fosstveit
6426a4d89e Hide advanced video settings by default, ref #415 2020-05-22 19:22:42 +02:00
Håvar Aambø Fosstveit
21f2018e71 Handle device change properly based on paused status. 2020-05-22 16:06:24 +02:00
Håvar Aambø Fosstveit
2e3749cafe Fixes #413 2020-05-22 16:05:44 +02:00
Mészáros Mihály
359bfac450 tidy for the previous commit 2020-05-22 11:47:12 +02:00
Mészáros Mihály
547e95b35c FF don't allows fingerprinting handle empty label 2020-05-22 11:45:14 +02:00
Håvar Aambø Fosstveit
d1ffe6cd43 Adding frame rate option to videos. Make resolution and frame rate of screen sharing configurable. 2020-05-22 00:20:15 +02:00
Håvar Aambø Fosstveit
b3ad0a44c2 Change resolution of extra videos too 2020-05-21 23:14:39 +02:00
Håvar Aambø Fosstveit
1efb1c4a2b Clean up device handling properly. Don't restart track on change in constraints. 2020-05-21 22:53:26 +02:00
Mészáros Mihály
147da7f793 Add chromioum to supportedBrowsers 2020-05-21 14:07:23 +02:00
Mészáros Mihály
fc54ee7ddd Update hu translation 2020-05-21 11:39:49 +02:00
Håvar Aambø Fosstveit
11ec28aa5c Cleanup logging 2020-05-20 23:58:05 +02:00
Håvar Aambø Fosstveit
0654acded8 Cleaning up device handling. Now able to change devices properly when audio/video is disabled. 2020-05-20 23:57:41 +02:00
Håvar Aambø Fosstveit
425fd1a92b Hark cleanup 2020-05-20 23:48:03 +02:00
Håvar Aambø Fosstveit
93cc50ace2 Small fixes and cleanup 2020-05-20 23:44:33 +02:00
Håvar Aambø Fosstveit
a1aec0a8d3 Cleanups 2020-05-20 23:44:11 +02:00
Håvar Aambø Fosstveit
fbd39af210 Update translation 2020-05-20 23:41:45 +02:00
Roman Drozd
1179350759
Fix showing quality indicator on Me (#403) 2020-05-20 21:30:58 +02:00
mi4aux
e0854d8d6b
Language files updates (#402)
* Added missing translation variable "settings.showAdvancedAudio"

Added missing translation variable "settings.showAdvancedAudio" to all translation files. Placed it before echoCancellation to keep logic order by the menu

* Update de.json

fix: SPACE-Taste ... it's LEERTASTE in german
added new translation variables

* Update de.json (typo-fix)

* Update en.json (suggestion)

Remove "Show" ... with the new layout/icon it should be clear for users.
Otherwise switching between "Show" and "Don't show" would be needed.
2020-05-20 21:30:31 +02:00
Håvar Aambø Fosstveit
27eeadbe84
Merge pull request #401 from havfo/feat-network-indicator
Fix crash when extra video is running
2020-05-20 20:17:22 +02:00
Håvar Aambø Fosstveit
d75d2154f2 Proper locale setting, fixes #369 2020-05-20 20:15:56 +02:00
Roman Drozd
e301474906 Add missing isExtraVideo props validation 2020-05-20 19:53:21 +02:00
Roman Drozd
522ecf873e Fix crash when extra video is running 2020-05-20 19:48:31 +02:00
Stefan Otto
28f92d79cf
Delete localAudioAnalyzer.js 2020-05-20 19:27:56 +02:00
Håvar Aambø Fosstveit
21a56f3b40
Merge pull request #349 from havfo/feat-network-indicator
create component "NetworkIndicator"

add to VideoView for Me,
receive data from server / getTransportStats,
estimate of connection/value [wip]
show recv/send bitrate in advanced mode

* Change probe counting from sec to state inc

* Rebuild, fix null error with null

* Store probe from zero

* Add highestBitrate

* Fix eslint errors

* remove graphical indicator, refactor only to statistics

* uninstall "wifi-network-indicator" package

* Remove "netInfo" class

* Change "advanced mode" box info "bitrate" from MB/s to Mb/s

* fix my own fault

* Fix crash when screen sharing is running

* Update transport stats only when advancedMode is on

* Fix/Mute eslint Multiline support info

* Fix lint

* Set VideoView/netInfo prop as not required

* Fix lint

* Set RoomClient/_getTransportStats() as public

Co-authored-by: Stefan Otto <stefan.otto@uninett.no>
2020-05-20 18:02:47 +02:00
Roman Drozd
50a9733af1 Set RoomClient/_getTransportStats() as public 2020-05-20 17:01:42 +02:00
Roman Drozd
81d4b015bc Fix lint 2020-05-20 16:56:53 +02:00
Roman Drozd
ddd8c36c67 Merge branch 'develop' into feat-network-indicator 2020-05-20 16:47:02 +02:00
Roman Drozd
407a7d6991 Set VideoView/netInfo prop as not required 2020-05-20 16:21:07 +02:00
Roman Drozd
ce2e18f01a Fix lint 2020-05-20 15:49:31 +02:00
Roman Drozd
90ef355fbf Fix/Mute eslint Multiline support info 2020-05-20 15:37:31 +02:00
Roman Drozd
3fc8f5683e Update transport stats only when advancedMode is on 2020-05-20 15:14:16 +02:00
Håvar Aambø Fosstveit
ac079d1cd1 Change to Material-UI switch for settings 2020-05-20 14:56:39 +02:00
Stefan Otto
09ebb8f0d9 Merge branch 'develop' of https://github.com/havfo/multiparty-meeting into develop 2020-05-20 14:26:08 +02:00
Stefan Otto
bb63b6304e Fix autoMuteThreshold bug #394 2020-05-20 14:25:13 +02:00
Mészáros Mihály
0b3514ddbc Translation fixes still 2020-05-20 14:17:40 +02:00
Mészáros Mihály
0660c151f9 Fix tranlation mistakes 2020-05-20 14:12:53 +02:00
Mészáros Mihály
5f8e2aaa36 Change value label from off to auto 2020-05-20 14:00:13 +02:00
Mészáros Mihály
4214522767 Change text template 2020-05-20 13:59:23 +02:00
Mészáros Mihály
58f153733d Add translations to autounmute 2020-05-20 13:58:18 +02:00
Stefan Otto
73709639e0 Merge branch 'develop' of https://github.com/havfo/multiparty-meeting into develop 2020-05-20 13:29:55 +02:00
Stefan Otto
ee564e9187 Fix layout and padding for advanced audio settings 2020-05-20 13:29:40 +02:00
Mészáros Mihály
0154c3343c Add configurable, supported brwoser list. 2020-05-20 13:13:32 +02:00
Håvar Aambø Fosstveit
d4a35e9e33 Make settings denser 2020-05-20 12:41:40 +02:00
Håvar Aambø Fosstveit
19c9f484fc Show error for IE users, fixes #393 2020-05-20 09:38:47 +02:00
Stefan Otto
28fb6f4a38 advanced audio settings as collapsed list 2020-05-20 11:21:19 +02:00
Stefan Otto
ad3f7df203 more conservative settings for hark; adjust volume indicators colors to dB scale, improved decay for audio indicators 2020-05-20 11:19:20 +02:00
Stefan Otto
185b3d40bd Added som comments in config.example.js + alternative config for simulcast 2020-05-20 10:14:50 +02:00
Roman Drozd
014c805530 Fix crash when screen sharing is running 2020-05-20 00:09:44 +02:00
Mészáros Mihály
2bb5cd53af Tidy in hu translation 2020-05-19 21:18:00 +02:00
Mészáros Mihály
ad1d4b80fa Remove unused moderator.muteScreenSharing 2020-05-19 21:12:19 +02:00
Håvar Aambø Fosstveit
209b545900 Lint 2020-05-19 15:16:24 +02:00
Mészáros Mihály
a691e82f3e
Merge pull request #344 from havfo/feat-unsupportedbrowser
Detect unsupported browsers, add a dialog
2020-05-19 15:08:23 +02:00
Mészáros Mihály
ee1a691642 Merge branch 'develop' into feat-unsupportedbrowser 2020-05-19 15:07:25 +02:00
Stefan Otto
78bdf80cea Fix initial audio level 2020-05-19 15:06:12 +02:00
Stefan Otto
f17deb2589 lint; clean up; advanced audio settings switch 2020-05-19 15:01:38 +02:00
Mészáros Mihály
a4ccf74bb9 Fix lint trailing spaces 2020-05-19 14:55:13 +02:00
Håvar Aambø Fosstveit
82c1d73698 Disallow trailing white spaces. 2020-05-19 14:53:08 +02:00
Mészáros Mihály
d4759ba7fa Tidy in hu translation 2020-05-19 14:50:36 +02:00
Mészáros Mihály
4cb967664d Add moderator.stopScreenSharing translation 2020-05-19 14:50:36 +02:00
Mészáros Mihály
f682529395 Change order in mobile menu 2020-05-19 14:50:32 +02:00
Mészáros Mihály
c7ba8b2dc9 Remove lobby from mobile menu 2020-05-19 14:48:27 +02:00
Håvar Aambø Fosstveit
d9cce46505 Lint 2020-05-19 14:26:19 +02:00
Håvar Aambø Fosstveit
a0a23109a9 Lint 2020-05-19 14:25:13 +02:00
Håvar Aambø Fosstveit
bb391b1390 Disallow trailing white spaces. 2020-05-19 14:22:03 +02:00
Stefan Otto
a44e799c79 Merge branch 'develop' of https://github.com/havfo/multiparty-meeting into develop 2020-05-19 14:13:24 +02:00
Stefan Otto
384f0cf1e4 More sticky local speaker detection 2020-05-19 14:12:48 +02:00
Stefan Otto
8d55cd5d1a Fix Auto mute indicator error #392 2020-05-19 14:12:03 +02:00
Håvar Aambø Fosstveit
0f184a3a29 Socket request timeout handling, with retries. 2020-05-19 14:09:27 +02:00
Mészáros Mihály
b0e57756cb Fix previous commit, move it to sectionMobile 2020-05-19 13:35:33 +02:00
Mészáros Mihály
28995ad74f Only on mobile add lobbypeers action 2020-05-19 13:25:52 +02:00
Stefan Otto
b430802b76
fix my own fault 2020-05-19 12:04:09 +02:00
Mészáros Mihály
aaa227e957
Merge pull request #389 from havfo/feat-version
Add version to about
2020-05-19 07:51:08 +02:00
Mészáros Mihály
2bd7218379 replace em with theme.spacing 2020-05-19 07:50:01 +02:00
Stefan Otto
a6df51bd27
Merge branch 'develop' into feat-network-indicator 2020-05-19 03:17:02 +02:00
Stefan Otto
6576516091 lint + noiseVolume changes 2020-05-19 02:45:06 +02:00
Mészáros Mihály
868b91a776 Detect unsupported browsers, add a dialog 2020-05-19 01:57:34 +02:00
Stefan Otto
0f053d0282 Merge branch 'feat-audio-settings' into develop 2020-05-19 01:56:24 +02:00
Stefan Otto
0164312f30 lint 2020-05-19 01:51:38 +02:00
Stefan Otto
ea84fc75c6 hark clean up; some state fixes for autoMute; fix remote hark audiolevel 2020-05-19 01:45:09 +02:00
Mészáros Mihály
2a4405fb7f Add version to about 2020-05-19 00:51:31 +02:00
Stefan Otto
6331bb18b4 mic indicator for autoMute with noiseThreshold 2020-05-18 23:38:17 +02:00
Mészáros Mihály
7f16487e45 Fixes in hu translation 2020-05-18 14:15:01 +02:00
Mészáros Mihály
0a860068b2 Merge branch 'moderator-tools' into develop 2020-05-18 13:45:08 +02:00
Mészáros Mihály
4ab7d7c95d Fix and add missing translations 2020-05-18 13:41:32 +02:00
Mészáros Mihály
2877ff2981 Remove end of line spaces 2020-05-18 11:30:23 +02:00
Mészáros Mihály
c38e16f7f9 Merge branch 'PR#355' into moderator-tools 2020-05-18 11:23:33 +02:00
Luca
3a62abb7c3 Moderator: disable screen sharing 2020-05-18 09:58:46 +02:00
Luca
13c38cecfd Moderator: Mute all screen sharing 2020-05-18 09:52:19 +02:00
Luca
e1f5f804b0 Lint fix 2020-05-18 09:52:19 +02:00
Luca
ff096f993d Moderator: disable screen sharing 2020-05-18 09:52:14 +02:00
Mészáros Mihály
651fb4578d Add a lobby tooltip to topbar on mobile 2020-05-18 09:31:54 +02:00
Håvar Aambø Fosstveit
ba6c57b283 Make notification position configurable. 2020-05-15 21:12:30 +02:00
Håvar Aambø Fosstveit
05d7cb571c Fix ptt over elements. FIxes #370 2020-05-15 20:54:48 +02:00
Mészáros Mihály
8ab8d0529f hide PTT Fix: #370 2020-05-15 17:16:12 +02:00
Mészáros Mihály
7373762889
Merge pull request #368 from sd4v1d/develop
Update hr translation and correction in en.json file
2020-05-15 15:25:45 +02:00
Saša Davidović
70ed6de497
Update en.json 2020-05-15 13:31:20 +02:00
Saša Davidović
80ff3a7171
Update hr.json 2020-05-15 13:29:00 +02:00
Saša Davidović
2467ac55da
Update hr.json 2020-05-15 13:24:33 +02:00
Saša Davidović
a4272149f8
Merge pull request #7 from havfo/develop
Sync with upstream Develop
2020-05-15 12:57:58 +02:00
Stefan Otto
75912c71c2 ptt bar styles: same color as FAB-mute, z-index on top of drawer 2020-05-14 22:39:02 +02:00
Mészáros Mihály
87fd238682
Merge pull request #353 from havfo/feat-automutethreshold
Add autoMuteThreshold
2020-05-14 21:56:16 +02:00
Mészáros Mihály
042bc95b3a
Merge pull request #364 from Astagor/browse_passive_users
Browse passive users - fixed for filmstrip
2020-05-14 21:47:07 +02:00
Astagor
daf958d627 Fixed lint 2 2020-05-14 14:27:03 +02:00
Astagor
ceebea6a40 Fixed lint 2020-05-14 14:23:31 +02:00
Astagor
4e80c526a3 Fixed to work on filmstrip. Changed logic, use setSelectedPeer 2020-05-14 14:18:04 +02:00
Mészáros Mihály
aae9e15812 fix: Stop screensharing remove stream properly 2020-05-14 14:01:56 +02:00
Mészáros Mihály
eeb10d9313 Fix #358 set screenshare tooltip state manualy
See: mui-org/material-ui#12299
2020-05-14 09:45:42 +02:00
Mészáros Mihály
b89bb3a513 Fix lint max length 2020-05-14 09:16:42 +02:00
Saša Davidović
77e807143b
Merge pull request #6 from havfo/develop
Sync with upstream Develop
2020-05-14 08:26:02 +02:00
Mészáros Mihály
a1d348eefc fix lint 2020-05-14 08:09:53 +02:00
Stefan Otto
b71731c62e Merge remote-tracking branch 'origin/develop' into feat-audio-settings 2020-05-14 04:13:35 +02:00
Stefan Otto
46174b414f Fix small audiobar to middle 2020-05-14 04:04:11 +02:00
Stefan Otto
534e862573 First working noiseThreshold setting + voiceActivatedUnmute 2020-05-14 04:02:52 +02:00
Luca
1257ce7cdd Translation for "Mute all screen sharing" button 2020-05-13 10:54:52 +02:00
Luca
f54ed84edb Moderator: Mute all screen sharing 2020-05-13 10:42:03 +02:00
Luca
69244bdf12 Lint fix 2020-05-13 10:35:46 +02:00
Luca
cbbfd1b26f Moderator: disable screen sharing 2020-05-13 10:35:46 +02:00
Mészáros Mihály
ba8efb19ff
Merge pull request #291 from Astagor/browse_passive_users
Browse passive participants
2020-05-13 10:11:01 +02:00
Mészáros Mihály
f99ae41eb3
Merge pull request #354 from YiPrograms/zh-hant-translation
Create Chinese(Traditional) translation
2020-05-13 09:41:34 +02:00
Yi Kuo
774532e33e
Create zh-Hant translation 2020-05-13 15:12:21 +08:00
Mészáros Mihály
8d9a045f32 Add autoMuteThreshold 2020-05-13 09:06:06 +02:00
Astagor
e4f6bde164 Added description of arrow keys for browsing passive peers into spotlight 2020-05-13 08:27:21 +02:00
Astagor
122c21a632 Merge remote-tracking branch 'upstream/develop' into browse_passive_users 2020-05-13 07:59:09 +02:00
Mészáros Mihály
41d62cf9b8 Update hungarian translation 2020-05-13 07:57:38 +02:00
Mészáros Mihály
8af09ebf4f
Merge pull request #350 from mi4aux/develop
Different Typofixes / Suggestions
2020-05-13 06:12:59 +02:00
Mészáros Mihály
c237da1f70
Merge pull request #348 from L4ky/translate-moderator-actions
Translate moderator actions
2020-05-13 06:11:04 +02:00
mi4aux
bd06d68742 Typofix variablename 2020-05-12 22:56:46 +02:00
mi4aux
af1dcd6bab Suggestions for better german translation
room.closeMeeting: "Meeting beenden"
or alternatively "Meeting abschließen"

room.about: "Über"
on software often also like "Über multiparty-meeting" or "Info" / "Informationen" in general
"Impressum" is more like "imprint" / "legal info" on a website, ..
but depends on what it's ment to be

label.medium: "Mittel"
better (true) german, "Medium" obtained on quality is german-english mix (or has other meaning)

label.appearence: "Ansicht"
shorter, more often used on software .. alternatively "Aussehen" or "Anzeige"
2020-05-12 22:55:42 +02:00
mi4aux
d84d30e402 Typofix german translation 2020-05-12 22:52:30 +02:00
Roman Drozd
052dabaf8d Change "advanced mode" box info "bitrate" from MB/s to Mb/s 2020-05-12 21:40:47 +02:00
Roman Drozd
7b8ea2c756 Merge branch 'develop' into feat-network-indicator 2020-05-12 21:04:29 +02:00
Mészáros Mihály
b3764a1d64 fixes #343 2020-05-12 20:35:37 +02:00
Roman Drozd
2c9d302d3c Remove "netInfo" class 2020-05-12 20:16:43 +02:00
Roman Drozd
972e74a00a uninstall "wifi-network-indicator" package 2020-05-12 19:53:36 +02:00
Roman Drozd
59d48253a3 remove graphical indicator, refactor only to statistics 2020-05-12 19:42:04 +02:00
Luca
b8c0a8450d Lint fix 2020-05-12 19:31:51 +02:00
Luca
5ea482d01f Moderator: disable screen sharing 2020-05-12 19:04:41 +02:00
Luca
0e40ed7696 Update it translation 2020-05-12 18:17:51 +02:00
Luca
1e5b6680c4 Translate moderator mute actions on peer 2020-05-12 18:09:08 +02:00
Mészáros Mihály
2623ef2eaa Fix lint 2020-05-12 11:10:22 +02:00
Stefan Otto
349ace9fee
Merge pull request #335 from L4ky/italian-translation
Italian translation update
2020-05-11 12:12:56 +02:00
Roman Drozd
2a4f660691 Fix eslint errors 2020-05-11 08:55:05 +02:00
Luca
67ea56b02a Italian translation update 2020-05-11 08:50:34 +02:00
Håvar Aambø Fosstveit
a7557e3e15 Show quality indicator on me view. Fix "Me" text on me view on hover on extra videos and screen sharing. 2020-05-10 23:08:43 +02:00
Håvar Aambø Fosstveit
7ab388a714 Propagate producer score into state. 2020-05-10 20:43:51 +02:00
Saša Davidović
a8af8f0c8d
Merge pull request #5 from havfo/develop
sync with upstream Develop
2020-05-09 16:46:18 +02:00
Stefan Otto
36b40fd795
Added german translations 2020-05-09 12:15:05 +02:00
Håvar Aambø Fosstveit
439eb5cf4a
Merge pull request #326 from havfo/fix-translation-pl 2020-05-09 08:47:18 +02:00
Roman Drozd
2dcecae888 Update pl translation 2020-05-09 01:29:59 +02:00
Håvar Aambø Fosstveit
27ac8e2742 Remove unused function 2020-05-09 00:43:20 +02:00
Håvar Aambø Fosstveit
f468f95cdc Translated media buttons, fixes #309 2020-05-09 00:43:05 +02:00
Håvar Aambø Fosstveit
aa5f75b794 Do things in correct order. 2020-05-09 00:37:47 +02:00
Roman Drozd
1bccc9a985 Update pl translation 2020-05-09 00:29:20 +02:00
Roman Drozd
3624424e0a Add h shortcut for help dialog 2020-05-09 00:27:18 +02:00
Håvar Aambø Fosstveit
13e611e177 Missing tooltip, fixes #324 2020-05-09 00:07:12 +02:00
Håvar Aambø Fosstveit
1690394328 Option to make side drawer push videos to the side and be permanent, fixes #320 2020-05-09 00:03:56 +02:00
Roman Drozd
c5143de647
Fix ptt break layout (#298) 2020-05-08 22:26:45 +02:00
Håvar Aambø Fosstveit
a9e9a1c1fa Cleanup of join logic, and making sure that lobbyPeers are sent to all peers if last peer with PROMOTE_PEER leaves and allowWhenRoleMissing contains PROMOTE_PEER, fixes #303 2020-05-08 22:11:48 +02:00
Håvar Aambø Fosstveit
c73ee5c26b Fix missing picture on peer in lobby. 2020-05-08 22:02:06 +02:00
Håvar Aambø Fosstveit
717c0053e5 Better handling of reconnect. Clear the state properly and handle spotlights. 2020-05-08 22:01:28 +02:00
Håvar Aambø Fosstveit
d09e7f5565 Some error checks 2020-05-08 16:20:15 +02:00
Håvar Aambø Fosstveit
a49258e840 New option for handling permissions in rooms. Set allowWhenRoleMissing to permit actions before a peer with that permission joins. Ref #303 2020-05-08 16:19:55 +02:00
Mészáros Mihály
220d4dd99d fix in lang hu 2020-05-08 14:46:30 +02:00
Mészáros Mihály
0de99d6da8 Update Hungarian language 2020-05-08 13:24:39 +02:00
Mészáros Mihály
fbac155e30 Merge branch 'feat-help-about' into develop 2020-05-08 00:38:42 +02:00
L4ky
2eab32cafa
Moderator: Mute or stop video for a peer globally (#316) 2020-05-08 00:23:16 +02:00
Mészáros Mihály
3b779bd81d Add shotcuts to help and add labels 2020-05-08 00:20:35 +02:00
Håvar Aambø Fosstveit
837aa1ace2 Revert change for now, ref #249 2020-05-08 00:11:39 +02:00
Håvar Aambø Fosstveit
a066a5df2f Revert server change, seems to be a problem with it. Ref #249 2020-05-07 23:22:46 +02:00
Håvar Aambø Fosstveit
16a59f1167 Don't show video mute icon for peer that does not have video visible. Fixes #302 2020-05-07 22:14:48 +02:00
Håvar Aambø Fosstveit
ce8141eed7 Cleanup 2020-05-07 21:03:22 +02:00
Håvar Aambø Fosstveit
2373bf44d8 Allow serving other than root of site, fixes #249 2020-05-07 21:03:07 +02:00
Håvar Aambø Fosstveit
02b6c617c5 Respect hide media buttons setting on button control bar, ref #309 2020-05-07 15:15:44 +02:00
Håvar Aambø Fosstveit
4c6d9291bf Fix regression on advanced mode, ref #309 2020-05-07 14:57:42 +02:00
Håvar Aambø Fosstveit
cfdaceed22 Add posibility to have separate media buttons, fixes #309 2020-05-07 13:35:29 +02:00
Saša Davidović
99a9ec7d1c
Merge pull request #4 from havfo/develop
sync with upstream repo
2020-05-07 12:53:09 +02:00
Håvar Aambø Fosstveit
7e91609276 Have a global try-catch in the server 2020-05-07 12:20:24 +02:00
Roman Drozd
084e5ab665 Add highestBitrate 2020-05-07 03:53:19 +02:00
Roman Drozd
49083376e2 Store probe from zero 2020-05-07 03:07:28 +02:00
Roman Drozd
71562cf57d Rebuild, fix null error with null 2020-05-07 02:39:23 +02:00
Mészáros Mihály
7c13403921 Add help and about modal 2020-05-06 23:39:40 +02:00
Håvar Aambø Fosstveit
457d679382 Setting to disable notifications, fixes #306 2020-05-06 23:08:51 +02:00
Roman Drozd
9a1646a39d Change probe counting from sec to state inc 2020-05-06 23:07:53 +02:00
Håvar Aambø Fosstveit
c1aa62d22c Don't send lobbypeers to client if they don't have PROMOTE_PEER role, fixes #208 2020-05-06 22:22:57 +02:00
Håvar Aambø Fosstveit
1cbf2d5b38 Remove unused imports, fixes #305 2020-05-06 21:05:34 +02:00
Stefan Otto
3f1d102c59 fix my errors in gigantic merge + linting 2020-05-06 18:47:14 +02:00
Stefan Otto
57bb55764f Merge branch 'feat-audio-settings' into develop 2020-05-06 18:30:20 +02:00
Stefan Otto
59d4bd2ce7 Merge branch 'develop' into feat-audio-settings 2020-05-06 18:29:07 +02:00
Håvar Aambø Fosstveit
26874877ba Provide roomId to logout for load balanced scenarios, fixes #275 2020-05-06 14:03:47 +02:00
Håvar Aambø Fosstveit
45a89b9f1a Only keep one self destruct timeout, ref #255 2020-05-06 13:50:29 +02:00
Håvar Aambø Fosstveit
feac3f069d Participant list is now animated on events, fixes #302 2020-05-06 13:30:05 +02:00
Stefan Otto
4f07b973c8 defaultAudio in config 2020-05-06 12:00:54 +02:00
Stefan Otto
aca3499afb merge from develop 2020-05-06 02:33:37 +02:00
Håvar Aambø Fosstveit
136037d83f Simplify participantlist and order participants based on status. Raise hand queue, and moderator can remove raised hand. Fixes #146, #278 2020-05-06 01:40:08 +02:00
Stefan Otto
da6c9d3ecf fix settings.js 2020-05-05 23:41:27 +02:00
Mészáros Mihály
fa5f4f02a6 Use full room and peer object for the statusLogger 2020-05-05 23:24:00 +02:00
Stefan Otto
a2d11121d3 next iteration state + audio settings 2020-05-05 22:28:46 +02:00
Håvar Aambø Fosstveit
ee6409b2b3 Hide quality indicator if the quality has top score. 2020-05-05 22:20:21 +02:00
Mészáros Mihály
2acd35d32b Fixes in hungarian translation 2020-05-05 21:44:21 +02:00
Håvar Aambø Fosstveit
3c7afd2066 Make buttons in AppBar fit on narrow screens, fixes #279 2020-05-05 21:31:21 +02:00
Håvar Aambø Fosstveit
c02c8b1d67 Missing translation string 2020-05-05 21:27:45 +02:00
Håvar Aambø Fosstveit
3710c3b3ac Add tooltips to participant list, fixes #299 2020-05-05 20:08:11 +02:00
Håvar Aambø Fosstveit
6ca73e190f
Merge pull request #300 from sd4v1d/develop
Croatian translation update
2020-05-05 19:50:36 +02:00
Håvar Aambø Fosstveit
458bc44211
Merge pull request #301 from L4ky/develop
Update italian translation
2020-05-05 19:49:41 +02:00
Luca
417788325b Update italian translation 2020-05-05 18:21:18 +02:00
Saša Davidović
22019434cc
Croatian translation update 2020-05-05 18:02:23 +02:00
Saša Davidović
51ff2cb80e
Merge pull request #3 from havfo/develop
sync with Develop upstream
2020-05-05 16:38:08 +02:00
Håvar Aambø Fosstveit
15fe4521b7 Fix bug on resizing filmstrip 2020-05-05 15:15:26 +02:00
Håvar Aambø Fosstveit
e2211b000c Fix button scaling in filmstrip 2020-05-05 15:06:18 +02:00
Håvar Aambø Fosstveit
678abe05d0 Update translations 2020-05-05 15:00:58 +02:00
Håvar Aambø Fosstveit
bf837b3398 Fix color on kick button 2020-05-05 14:31:02 +02:00
Håvar Aambø Fosstveit
2bb64596b0 Fix button sizes and take care not to overflow container in filmstrip, ref #115 2020-05-05 14:29:54 +02:00
Håvar Aambø Fosstveit
3f75a6c506 Fix icon colors 2020-05-05 13:43:32 +02:00
Mészáros Mihály
dd9c0bb897 Update hungarian translation with the missing ones 2020-05-05 13:36:41 +02:00
Håvar Aambø Fosstveit
dd6016e855 Remove unused function 2020-05-05 13:06:16 +02:00
Håvar Aambø Fosstveit
65f47d4b8d Fix screensharing on Edge 2020-05-05 10:31:41 +02:00
Håvar Aambø Fosstveit
7adcef19a3 Change to total number of peers, not just joined. Styling. 2020-05-05 09:56:21 +02:00
Håvar Aambø Fosstveit
e2421f094f Shuffle workers to get routers on random cores. Increase routerScaleSize default to 40. 2020-05-05 09:48:26 +02:00
Håvar Aambø Fosstveit
ee338accc8
Merge pull request #293 from Astagor/room_limit
Added limit for maximum number of users in a single room
2020-05-05 09:25:20 +02:00
Håvar Aambø Fosstveit
24f7bd2a9b
Merge pull request #292 from Astagor/share_photo_from_mobile_gallery
Added share photo from gallery on mobile
2020-05-05 09:22:51 +02:00
Mészáros Mihály
2b3ebe8eec
Merge pull request #281 from havfo/fix-oidc
Fix oidc
2020-05-05 08:55:33 +02:00
Mészáros Mihály
a46de5ff54 eslint disable unused vars for next 2020-05-05 08:53:08 +02:00
Mészáros Mihály
e950ec9dbe Add an error handler to Express to dump OIDC errors with uuid 2020-05-05 08:52:53 +02:00
Astagor
897b99cdbe Fixed lint 2020-05-05 08:31:45 +02:00
Astagor
5b8f2d83a9 Added a div to wrapp buttons in FileSharing 2020-05-05 08:25:33 +02:00
Astagor
9e14cfd924 Merge remote-tracking branch 'upstream/develop' into share_photo_from_mobile_gallery 2020-05-05 08:11:23 +02:00
Astagor
7e6795986e Fixed lint server 2020-05-05 08:08:35 +02:00
Astagor
ab5893dbdf Fixed lint 2020-05-05 08:02:11 +02:00
Astagor
311936d21a Fixed conflict in server/config/config.example.js 2020-05-05 07:49:30 +02:00
Mészáros Mihály
e039423dd5 Fix lint 2020-05-05 00:53:31 +02:00
Håvar Aambø Fosstveit
8c8a00f126 Remove config option that is not used anymore 2020-05-04 23:53:38 +02:00
Håvar Aambø Fosstveit
04c9cb3285 Merge branch 'develop' of github.com:havfo/multiparty-meeting into develop 2020-05-04 23:44:30 +02:00
Håvar Aambø Fosstveit
5af33068b1 Merge branch 'feat-server-scaling' into develop 2020-05-04 23:44:23 +02:00
Håvar Aambø Fosstveit
381f9cd733 All peers enter the same router up to config.routerScaleSize. Then go to the next one, and keep going until all routers are filled up to config.routerScaleSize. After that simple put peers into routers with least peers. 2020-05-04 23:33:51 +02:00
Mészáros Mihály
004fac3d13 Import Latvian translation 2020-05-04 21:48:14 +02:00
Mészáros Mihály
b4b96e6551
Merge pull request #290 from osering/develop
Add Latvian (LV) localization, by Oskars Galanders
2020-05-04 21:35:49 +02:00
Astagor
ac6ee1bfa3 Added limit for maximum number of users in a single room 2020-05-04 19:31:50 +02:00
Astagor
f0b9d3be6a Added share photo from gallery on mobile 2020-05-04 18:59:06 +02:00
Astagor
bad845e195 Browse passive participants 2020-05-04 18:27:50 +02:00
Oskars G
207b92cfb2
Add Latvian (LV) localization, by Oskars Galanders
Gift to Latvian people on the Day of the Restoration of Latvian Independence /from proprietary software/ :)
2020-05-04 17:03:00 +03:00
Håvar Aambø Fosstveit
4acedad987 Propagate raise hand timestamp to clients, ref #278 2020-05-04 15:21:49 +02:00
Håvar Aambø Fosstveit
f70ed01e7e Add timestamps to various peer parameters. 2020-05-04 15:14:47 +02:00
Håvar Aambø Fosstveit
69a988200d
Merge pull request #289 from christian-2/feat-contributing
CONTRIBUTING.md
2020-05-04 15:12:22 +02:00
Håvar Aambø Fosstveit
a1ed79c5db A button to promote all peers from lobby, fixes #287 2020-05-04 15:09:05 +02:00
christian2
ff285b2d87 app as well as server 2020-05-04 14:47:02 +02:00
Håvar Aambø Fosstveit
a00d33ee4b
Merge pull request #272 from christian-2/mm-exporter
Prometheus monitoring
2020-05-04 14:35:08 +02:00
christian2
7282287d93 CONTRIBUTING.md 2020-05-04 14:34:50 +02:00
christian2
3c7dbb2109 Merge remote-tracking branch 'upstream/develop' into mm-exporter 2020-05-04 14:23:44 +02:00
christian2
f6c76f372a satisfy ESLint 2020-05-04 14:22:31 +02:00
Håvar Aambø Fosstveit
b7aad16f65 Clean up CSS, make room for buttons, fixes #283 2020-05-04 13:54:13 +02:00
Håvar Aambø Fosstveit
f4986cc9d7 Make participant list more compact 2020-05-04 11:14:09 +02:00
christian2
84f77f3813 employ config.js 2020-05-04 10:57:24 +02:00
christian2
9adcc807dd bug fixes 2020-05-04 09:47:10 +02:00
christian2
85c9062f86 Merge remote-tracking branch 'upstream/develop' into mm-exporter 2020-05-04 09:32:10 +02:00
Håvar Aambø Fosstveit
e82f86c900
Merge pull request #282 from christian-2/issue-274
LICENSE.md
2020-05-04 08:59:55 +02:00
Mészáros Mihály
e5fcda9fbf Bump version to 3.3.0 for ansible config templates 2020-05-04 08:51:56 +02:00
Håvar Aambø Fosstveit
2ed7c5711c Missing translation in extra video menu item 2020-05-04 08:49:22 +02:00
christian2
5d2634acbe MIT License 2020-05-04 07:49:09 +02:00
christian-2
dd8173081b
MIT License 2020-05-04 07:36:29 +02:00
christian2
29f3c5b036 MIT License 2020-05-04 07:34:01 +02:00
Håvar Aambø Fosstveit
28bad32f69 Add permission for sending extra video, fixes #280 2020-05-04 00:40:39 +02:00
Håvar Aambø Fosstveit
08e2c425c6 Add the ability for a peer to have several video producers in a room. 2020-05-04 00:16:23 +02:00
Håvar Aambø Fosstveit
a0cd4416d8 Until we resolve login issue with service worker, disable it again 2020-05-04 00:07:56 +02:00
Håvar Aambø Fosstveit
b2891090dc Register service worker 2020-05-03 00:13:02 +02:00
Håvar Aambø Fosstveit
dc7b51b38a Make notification sounds configurable 2020-05-02 23:45:08 +02:00
Håvar Aambø Fosstveit
c7c4a76b33 Sound and notification on raise hand, fixes #40 2020-05-02 23:28:03 +02:00
Håvar Aambø Fosstveit
1dcb4eabf2 Adding badge of "unread" raised hands, ref #40 2020-05-02 23:16:16 +02:00
Håvar Aambø Fosstveit
272cef52b4 You are muted message fix when hiding controls, fixes #267 2020-05-02 23:09:23 +02:00
Håvar Aambø Fosstveit
c76c6d548a Make visibility of media controls configurable, fixes #267 2020-05-02 22:33:59 +02:00
Håvar Aambø Fosstveit
c461ee4eb7 Clean up lock code. 2020-05-02 21:58:41 +02:00
Håvar Aambø Fosstveit
130ed19f13 Settings split into tabs. 2020-05-02 21:57:53 +02:00
Håvar Aambø Fosstveit
d76682b6c8 Added raise hand button back to UI, fixes #40 2020-05-02 13:34:19 +02:00
Håvar Aambø Fosstveit
e33c1f7c03 Clean up raised hand naming. Only needs UI now. Ref #40 2020-05-02 10:47:57 +02:00
Håvar Aambø Fosstveit
e061cce53f Add raised hand status to peerInfo. This will give joining peers raise hand status. Ref #40 2020-05-01 23:49:16 +02:00
Håvar Aambø Fosstveit
f28abc9c74 Fix videoview in videowindow 2020-05-01 23:34:29 +02:00
Håvar Aambø Fosstveit
c0507daabc Change in lifecycle method 2020-05-01 23:33:59 +02:00
Håvar Aambø Fosstveit
3e858ae6cd Fix network indicator for fullscreen video. Fixes #218 2020-05-01 23:33:39 +02:00
Håvar Aambø Fosstveit
d6d962e379 Fix filmstrip. Need to fix buttons inside videoview if screen is too small. Fixes #231, ref #115 2020-05-01 23:32:13 +02:00
Håvar Aambø Fosstveit
695d366e59 Fix network status icon for speaker in filmstrip view. 2020-05-01 23:28:42 +02:00
Håvar Aambø Fosstveit
36b7e45f05 Clean up lifecycle methods 2020-05-01 22:04:14 +02:00
Håvar Aambø Fosstveit
87b114fccc Styling and lint 2020-05-01 21:49:40 +02:00
Håvar Aambø Fosstveit
2ad7b45ef6 Fix translations 2020-05-01 21:49:04 +02:00
Håvar Aambø Fosstveit
7ed99c51d0 Add missing peer.picture to lobby peerlist 2020-05-01 21:48:28 +02:00
Håvar Aambø Fosstveit
881eac741a Remove getServerHistory, and use 'join' callback instead. 2020-05-01 21:48:09 +02:00
Håvar Aambø Fosstveit
a8dabf7343 If peer gets role PROMOTE_PEER, notify peer of all peers in lobby, fixes #208 2020-05-01 21:45:16 +02:00
christian2
ebb728f4a8 remove extra identation 2020-05-01 15:37:03 +02:00
christian2
3717e41ac5 MIT License already mentioned in README.md 2020-05-01 11:46:23 +02:00
christian2
00f1ec7929 align coding conventions 2020-05-01 11:41:18 +02:00
Christian Hörtnagl
c61ebc8287 Merge remote-tracking branch 'upstream/develop' into mm-exporter 2020-05-01 07:58:19 +02:00
Håvar Aambø Fosstveit
4d3ebefc92 Change login button based on login status, fixes #183 2020-05-01 00:44:02 +02:00
Håvar Aambø Fosstveit
49a951466f Fix missing roomId in login from joindialog, ref #183 2020-05-01 00:31:07 +02:00
Håvar Aambø Fosstveit
1e5c0eb772 Lint and a small bug 2020-05-01 00:24:19 +02:00
Håvar Aambø Fosstveit
574a86e3ec Don't show lobby, and don't provide events for lobby for peers that don't have PROMOTE_PEER permission, fixes #208 2020-05-01 00:23:38 +02:00
Mészáros Mihály
136a41a7e9 Tidy, add privkey password 2020-05-01 00:09:16 +02:00
Mészáros Mihály
27e6cd8d64 Regression from 71e695b912 2020-05-01 00:04:33 +02:00
Håvar Aambø Fosstveit
ddd93038c4 Make joindialog text bold and bigger, fixes #154 2020-04-30 23:30:47 +02:00
Mészáros Mihály
e574791cf0 Add privacy statement placeholder 2020-04-30 23:07:45 +02:00
Håvar Aambø Fosstveit
3de8555c10 Proper handling of moderator clearing files and sharing same file twice. Fixes #257 2020-04-30 23:06:02 +02:00
Mészáros Mihály
de413fb670 Add eslint-plugin-react to deve dependency 2020-04-30 23:01:12 +02:00
Håvar Aambø Fosstveit
7a3bd327f2 Play audio from video elements, fixes #242 2020-04-30 22:42:47 +02:00
Håvar Aambø Fosstveit
5c4eeb121a Change to a more logical audio mute icon 2020-04-30 13:14:37 +02:00
Håvar Aambø Fosstveit
881164a718 Add option for muting remote videos, fixes #204 2020-04-30 13:10:34 +02:00
Mészáros Mihály
2e552fb07d
Merge pull request #269 from mertcelen/master
Automatic Debian Package
2020-04-30 12:59:42 +02:00
Håvar Aambø Fosstveit
2fced42c42 Cleanups. 2020-04-30 12:50:43 +02:00
Håvar Aambø Fosstveit
1ffa4fdc9a Better handling of default resolution. 2020-04-30 12:50:23 +02:00
Håvar Aambø Fosstveit
2ece8e9975 Make layout configurable in client, fixes #227 2020-04-30 12:48:36 +02:00
Håvar Aambø Fosstveit
a64830a06a Make lastN configurable, max, and lock. Fixes #225 2020-04-30 12:32:43 +02:00
Mészáros Mihály
174a03814f Fixes: #268 2020-04-29 21:39:37 +02:00
Mert ÇELEN
93721aecd4
Create main.yml 2020-04-29 10:11:46 +03:00
Håvar Aambø Fosstveit
c23d635803 ESlint for server 2020-04-28 22:23:15 +02:00
Mészáros Mihály
22d58efc8b Fix: bump version number 2020-04-27 22:24:01 +02:00
Mészáros Mihály
916003e085 clarify more that ip change is mandatory
Move to documentation IP range
2020-04-27 13:39:26 +02:00
Mészáros Mihály
8a3cfb68de clarify more that ip change is mandatory
Move to documentation IP range
2020-04-27 13:38:53 +02:00
Mészáros Mihály
f083a407ea Add turkish translation 2020-04-27 12:03:25 +02:00
Mészáros Mihály
4cb5db91f8
Merge pull request #264 from aliorhun/patch-1
Create turkish language file
2020-04-27 12:02:15 +02:00
Mészáros Mihály
4c8c746011 Add turkish translation 2020-04-27 11:59:38 +02:00
Ali Orhun Akkirman
9376e42d49 Create turkish language file 2020-04-27 11:55:51 +02:00
Mészáros Mihály
aa496239af
Change default requireSignInToAccess : false 2020-04-27 11:52:17 +02:00
Mészáros Mihály
83ff23bd13
fix lint in server config example 2020-04-27 11:49:25 +02:00
Ali Orhun Akkirman
478dc2cbb0
Create turkish language file 2020-04-27 12:00:43 +03:00
Roman Drozd
b73b8c1aa0 create component "NetworkIndicator"
add to VideoView for Me,
receive data from server / getTransportStats,
estimate of connection/value [wip]
show recv/send bitrate in advanced mode
2020-04-27 00:14:29 +02:00
Mészáros Mihály
cb5f4cd48e Only add OIDC request params that's really needed 2020-04-24 21:02:28 +02:00
Christian Hörtnagl
b6d4833b62 Merge remote-tracking branch 'upstream/develop' into mm-exporter 2020-04-24 07:36:38 +02:00
Christian Hörtnagl
53e6ae68c9 documentation (firewall) 2020-04-24 07:36:11 +02:00
Mészáros Mihály
aa096a755f
Merge pull request #253 from havfo/feat-output-select
Feat output select
2020-04-23 23:26:57 +02:00
Mészáros Mihály
1b3be17930 Add to devicechange listener 2020-04-23 23:05:15 +02:00
Mészáros Mihály
e04d3c12bd Use the first audio output device by default
It is the OS default audio output in Chrome.
2020-04-23 22:53:34 +02:00
Mészáros Mihály
d06f44d1d4 Remove redundant browser state, and tidy 2020-04-23 22:51:03 +02:00
Mészáros Mihály
3caa505d08 Fix state mistake 2020-04-23 22:42:25 +02:00
Mészáros Mihály
f0c3b16197 Add new app config audioOutputSupportedBrowsers and tidy 2020-04-22 23:45:13 +02:00
Håvar Aambø Fosstveit
5124e44b5a Merge branch 'develop' of github.com:havfo/multiparty-meeting into develop 2020-04-22 22:15:50 +02:00
Håvar Aambø Fosstveit
fcc37f5d89 Missing null in return, ref #209 2020-04-22 22:15:46 +02:00
Mészáros Mihály
ff0a26a01f
Merge pull request #241 from mi4aux/develop
Typo fix of variable name / Replace static message with interantionalized message
2020-04-22 21:41:58 +02:00
Mészáros Mihály
6acfe57044
Merge branch 'develop' into develop 2020-04-22 21:41:39 +02:00
Mészáros Mihály
9c34ff4d79
Merge pull request #244 from fuero/master
CentOS 8 RPM WIP
2020-04-22 21:37:38 +02:00
Mészáros Mihály
cfe6f55cc1
Merge pull request #245 from stweil/master
Fix some typos in English messages and update German translation
2020-04-22 21:36:12 +02:00
Mészáros Mihály
43dc292231
Merge pull request #250 from bpcurse/patch-1
change directory for turn server conf
2020-04-22 21:33:09 +02:00
bpcurse
27ae6354b0
change directory for turn server conf
It should be app/public/config/config.js
2020-04-22 19:00:48 +02:00
Mészáros Mihály
d07b2a2101 update with new props 2020-04-22 13:09:32 +02:00
Mészáros Mihály
3236a18a0b Limit audio output selection to chrome - whitelist 2020-04-22 13:09:32 +02:00
Mészáros Mihály
58b4aaf6c1 Compare audioOutputDevice states 2020-04-22 13:09:32 +02:00
Mészáros Mihály
1ea330059e Change browser name to lowercase 2020-04-22 13:09:32 +02:00
Mészáros Mihály
5e3f50c052 Merge remote-tracking branch 'origin/develop' into feat-output-select 2020-04-22 13:07:21 +02:00
Christian Hörtnagl
8c7b741dea Merge remote-tracking branch 'upstream/develop' into mm-exporter 2020-04-22 10:49:05 +02:00
Håvar Aambø Fosstveit
cdf899a948 We don't need to change sink manualy. State, and React handles that for us. 2020-04-22 10:41:12 +02:00
Håvar Aambø Fosstveit
37d5fdeefc Proper state handling 2020-04-22 10:30:29 +02:00
Håvar Aambø Fosstveit
0ed9d4db9b Various lint and fixes 2020-04-22 10:26:58 +02:00
Håvar Aambø Fosstveit
66b513cf19 Cleanup 2020-04-22 10:21:49 +02:00
Håvar Aambø Fosstveit
1cef52a3a1 Properly handle wakelock, fixes #237 2020-04-22 10:01:58 +02:00
Håvar Aambø Fosstveit
e28b6cdc5d MODERATE_FILES role can clean all files in a room, fixes #209 2020-04-22 01:07:16 +02:00
Håvar Aambø Fosstveit
7340621b6e Unused CSS 2020-04-22 00:43:04 +02:00
mi4aux
9cc2999694 Added missing npm dependencie "classnames" 2020-04-21 21:10:22 +02:00
mi4aux
665dc235ff Revert "Added missing npm dependencie "classnames""
This reverts commit aa22cde501.
2020-04-21 20:19:15 +02:00
Christian Hörtnagl
60a6a6bc40 Merge remote-tracking branch 'upstream/develop' into mm-exporter 2020-04-21 18:34:45 +02:00
Stefan Weil
65a1d465b4 Fix German translations
Signed-off-by: Stefan Weil <sw@weilnetz.de>
2020-04-21 14:50:29 +02:00
Stefan Weil
7e0cffd0f0 Add missing German translations
Signed-off-by: Stefan Weil <sw@weilnetz.de>
2020-04-21 14:45:56 +02:00
Stefan Weil
ff080cb591 Fix some typos in English messages (found by codespell)
Signed-off-by: Stefan Weil <sw@weilnetz.de>
2020-04-21 14:21:04 +02:00
Robert Führicht
d48eb3b481 adds CentOS 8 RPM WIP 2020-04-21 09:13:38 +02:00
Mészáros Mihály
bf2928efb3 Merge branch 'feat-alt-cellular-icon' into develop 2020-04-21 01:41:28 +02:00
Mészáros Mihály
4d427cef97 Add community list to readme 2020-04-21 01:15:10 +02:00
Mészáros Mihály
7c31205a3b Add community list to readme 2020-04-21 01:14:03 +02:00
Mészáros Mihály
f6cebfba11 Add classnames as dependency 2020-04-21 00:47:08 +02:00
Mészáros Mihály
f3ac236ccb Add classnames as dependency 2020-04-21 00:22:29 +02:00
Håvar Aambø Fosstveit
91a258c273 MODERATE_CHAT role can clear the chat in a room, references issue #209 2020-04-20 23:22:19 +02:00
mi4aux
aa22cde501 Added missing npm dependencie "classnames" 2020-04-20 22:13:40 +02:00
mi4aux
9df750d7aa Replace static message with internationalized message by translation file 2020-04-20 21:09:57 +02:00
mi4aux
b46e608022 Typo fix of variable name
Typo fix of variable name (to have uniform variable naming, same camel case)
2020-04-20 21:08:12 +02:00
Håvar Aambø Fosstveit
df86c8b493
Merge pull request #240 from christian-2/issue-203
fixes #203
2020-04-20 12:58:44 +02:00
Christian Hörtnagl
c0251ad0ce Merge remote-tracking branch 'upstream/develop' into mm-exporter 2020-04-20 12:12:45 +02:00
Christian Hörtnagl
804dd90e42 fixes #203 2020-04-20 11:49:59 +02:00
Mészáros Mihály
566fbb30fb Change Icon to alt cellular 2020-04-20 09:37:17 +02:00
Christian Hörtnagl
ca53e4fb7f Prometheus exporter (initial version) 2020-04-20 06:22:20 +02:00
Mészáros Mihály
3fb24afe11 hu lang fixes 2020-04-19 15:49:06 +02:00
Mészáros Mihály
520f7cb6df Add translations 2020-04-19 15:48:28 +02:00
Mészáros Mihály
944b809c15 AudioPeers and Fixes 2020-04-19 13:52:15 +02:00
Mészáros Mihály
e98d80ed57 Add a not yet complete audio out selection. 2020-04-18 23:20:58 +02:00
Mészáros Mihály
bb9c07de3b Update 3.4.1 2020-04-17 13:34:17 +02:00
Mészáros Mihály
f254440600 Update node version to 13.x 2020-04-17 10:12:01 +02:00
Mészáros Mihály
effdd3005b Lowercase room name in url path 2020-04-16 23:20:34 +02:00
Mészáros Mihály
da429cf1b5 Lowercase room name in url path 2020-04-16 23:06:18 +02:00
Mészáros Mihály
6cb8e1d158 Merge branch 'fix-hardcoded-rest-url' into develop
Fixes #190
2020-04-16 13:51:47 +02:00
Mészáros Mihály
5a9fc063bf Move params to config 2020-04-16 08:18:43 +02:00
Mészáros Mihály
8ac9bf1d9c Fix comment 2020-04-15 11:02:41 +02:00
Andrea Gelmini
f9e3f9b622 Fix typos 2020-04-15 08:33:02 +02:00
Mészáros Mihály
efc721ded7
Merge pull request #206 from verbavolant/master
Update README.md
2020-04-15 08:11:39 +02:00
Mészáros Mihály
ef2fd7648b
Merge pull request #205 from Gelma/typo
Fix typos
2020-04-15 08:07:07 +02:00
Marco Manenti
876b270876
Update README.md
typo in manual installation prerequisites
2020-04-15 07:58:04 +02:00
Mészáros Mihály
da40742fd7 Merge branch 'feat-userinfo' into develop 2020-04-15 06:44:32 +02:00
Mészáros Mihály
14ed627ca3 move lti claims to userinfo 2020-04-15 06:37:35 +02:00
Mészáros Mihály
4a08594532 move tokenset_claims to userinfo 2020-04-15 06:37:35 +02:00
Andrea Gelmini
250679c670 Fix typos 2020-04-14 20:57:09 +02:00
Andrea Gelmini
77245b8fe4 Fix package name
On Debian/Ubuntu it's "build-essential"
2020-04-14 20:55:39 +02:00
Mészáros Mihály
f37bde2429 set in enable AV device constraint to ideal instead of exact 2020-04-13 23:17:37 +02:00
Mészáros Mihály
36fab6c572 set in enable AV device constraint to ideal instead of exact 2020-04-13 23:17:17 +02:00
Andrea Gelmini
3cf0f9d3e7 Fix typos 2020-04-09 22:20:41 +02:00
Mészáros Mihály
113fb208ca
Merge pull request #192 from Gelma/typo
Fix typos
2020-04-09 22:02:57 +02:00
Mészáros Mihály
e39b475330
Merge pull request #194 from sd4v1d/patch-4
Croatian translation update
2020-04-09 22:00:36 +02:00
Saša Davidović
11441ca8ca
Croatian translation update
Terminology and syntax update in development branch
2020-04-09 21:59:44 +02:00
Mészáros Mihály
2f97dc017f
Merge pull request #193 from sd4v1d/patch-3
Croatian translation update
2020-04-09 21:56:39 +02:00
Saša Davidović
88fbe31b01
Croatian translation update
Terminology and syntax update in master branch
2020-04-09 21:55:17 +02:00
Håvar Aambø Fosstveit
6267f808db Lint 2020-04-09 19:09:14 +02:00
Håvar Aambø Fosstveit
0077c459e2 Fix if displayName is null 2020-04-09 18:58:44 +02:00
Stefan Otto
1469f6c5fb cleanup calling hark 2020-04-09 17:59:29 +02:00
Andrea Gelmini
2482041723 Fix typos 2020-04-09 17:33:47 +02:00
Mészáros Mihály
afa27fef44
Merge pull request #181 from sd4v1d/patch-2
Update Croatian translation
2020-04-09 11:49:28 +02:00
Mészáros Mihály
87831ecc82
Merge pull request #182 from sd4v1d/patch-1
Update Croatian translation
2020-04-09 11:49:12 +02:00
Håvar Aambø Fosstveit
403c52339a Enable wakelock only on mobile 2020-04-08 23:41:51 +02:00
Mészáros Mihály
724e5b7e75 Add wakelock for mobile 2020-04-08 16:20:47 +02:00
Mészáros Mihály
1067823ede Fixes: #188 handle if _webcamProducer is null 2020-04-08 09:32:36 +02:00
Mészáros Mihály
d2a6f12aac Add listeningHost fix #179 2020-04-08 07:30:21 +02:00
Håvar Aambø Fosstveit
ee16bf809e Quality indicator on screen sharing missing 2020-04-07 21:38:35 +02:00
Håvar Aambø Fosstveit
7510a5da27 Merge branch 'develop' of github.com:havfo/multiparty-meeting into develop 2020-04-07 19:47:47 +02:00
Håvar Aambø Fosstveit
226b0f6293 Change quality indicator for peers 2020-04-07 19:47:36 +02:00
Saša Davidović
bbc8ec3796
Update Croatian translation
development branch
2020-04-07 15:34:26 +02:00
Saša Davidović
f27a612863
Update Croatian translation 2020-04-07 15:10:39 +02:00
Roman Drozd
be8414212b Fix spacing of close button
Displayed incorrectly for some languages
2020-04-07 12:54:22 +02:00
Håvar Aambø Fosstveit
6f36b4f468 Update CHANGELOG 2020-04-07 10:17:54 +02:00
Mészáros Mihály
7e7f93d484 Update changelog 2020-04-07 10:17:43 +02:00
Håvar Aambø Fosstveit
bac00a87e1 Cleaning 2020-04-07 10:05:01 +02:00
Mészáros Mihály
35c2bc7dd8 Add HAproxy doc 2020-04-07 10:04:36 +02:00
Håvar Aambø Fosstveit
f2f548112d Change to arrow functions 2020-04-07 10:00:34 +02:00
Mészáros Mihály
2a2d61f860 Logout destroy session 2020-04-07 10:00:10 +02:00
Håvar Aambø Fosstveit
c5bfcf3810 Update README 2020-04-07 09:54:32 +02:00
Melkin1968
8f4a5aff4e Update index.js to include Ukrainian localisation file 2020-04-07 09:52:23 +02:00
Melkin1968
ef6e521272 Add uk(Ukraine) localisation file 2020-04-07 09:52:23 +02:00
Mészáros Mihály
a5b6c9a367 Fix cz=>cs iso lang code for Czech translation 2020-04-07 09:51:50 +02:00
Mészáros Mihály
d9659a3935 Import and use Italian translation 2020-04-07 09:26:50 +02:00
Mészáros Mihály
87d7312a37 Add LTI doc 2020-04-07 09:24:57 +02:00
Mészáros Mihály
11b3f65ec9 Add listeningHost fix #179 2020-04-07 09:10:44 +02:00
Håvar Aambø Fosstveit
4d8dd667bc
Merge pull request #176 from havfo/fix-pl-translation
Fix yet another traslation
2020-04-06 17:48:02 +02:00
Roman Drozd
c9b77ec962 Fix yet another traslation 2020-04-06 16:10:18 +02:00
Håvar Aambø Fosstveit
b14ce6964c
Merge pull request #175 from havfo/fix-pl-translation
Fix pl translation
2020-04-06 08:08:17 +02:00
Roman Drozd
b16a7cca6c Fix the translation 2020-04-06 05:07:50 +02:00
Håvar Aambø Fosstveit
938d344bd0 Login status not reflected in login button, fixes #173 2020-04-05 21:47:44 +02:00
Håvar Aambø Fosstveit
8ea875e8d1 Fix bug on rotated videos from mobile devices 2020-04-03 22:49:05 +02:00
Håvar Aambø Fosstveit
97bfca3471 Don't show screen sharing button on mobile 2020-04-03 22:22:33 +02:00
Håvar Aambø Fosstveit
f174583ffd Remove unused variables 2020-04-03 21:29:59 +02:00
Håvar Aambø Fosstveit
77718516e2 Update dependencies 2020-04-03 19:45:20 +02:00
Håvar Aambø Fosstveit
e1bb07bc4e Make tracker configurable, fixes #171 2020-04-03 18:12:31 +02:00
Håvar Aambø Fosstveit
10886e3dc6 Small bugs 2020-04-03 10:17:58 +02:00
Håvar Aambø Fosstveit
8544279425 Remove unused variable 2020-04-03 10:17:32 +02:00
Håvar Aambø Fosstveit
8e85ce51e8 Propagate click correctly 2020-04-03 10:07:20 +02:00
Håvar Aambø Fosstveit
4a273f0cd3 Clean up styling and use ONE set of controls regardless of platform 2020-04-03 10:02:23 +02:00
Mészáros Mihály
1fc173862d
Merge pull request #168 from Melkin1968/master
Add Ukranian localisation
2020-04-02 13:53:15 +02:00
Håvar Aambø Fosstveit
b5754bbf96 Merge branch 'feat-roles-authorization' into develop 2020-04-02 00:32:38 +02:00
Håvar Aambø Fosstveit
a6347dc283 Expand permissions/role system. Clients are now provisioned with their roles when they join and will have features enabled/disabled based on their permissions. 2020-04-02 00:28:05 +02:00
Håvar Aambø Fosstveit
fa032036d7 Give client correct authentication status when joining a room. Fixes #166 2020-04-01 21:58:41 +02:00
Håvar Aambø Fosstveit
b19add7599 Remove unused and duplicate signaling 2020-04-01 21:40:55 +02:00
Håvar Aambø Fosstveit
0d4b1c3916 Sort participant list alphabetically 2020-04-01 21:38:54 +02:00
Melkin1968
042d5f7a28
Update index.js to include Ukrainian localisation file 2020-04-01 18:29:19 +03:00
Melkin1968
506ce10f38
Add uk(Ukraine) localisation file 2020-04-01 18:24:35 +03:00
Håvar Aambø Fosstveit
038aeaff67 Add quality indicator pr peer 2020-04-01 14:13:46 +02:00
Mészáros Mihály
b975b16dac Merge branch '3.2-fixes' 2020-04-01 12:06:11 +02:00
Mészáros Mihály
5e08775bca Fix cz=>cs iso lang code for Czech translation 2020-04-01 11:54:05 +02:00
Håvar Aambø Fosstveit
dd0d092857 Return authentication status to user 2020-04-01 10:17:08 +02:00
Håvar Aambø Fosstveit
12dc5ea28b Handle it correctly if a user tries to share a file that has allready been shared. Closes #142 2020-03-31 22:44:59 +02:00
Håvar Aambø Fosstveit
7ffea7b954 Update CHANGELOG 2020-03-31 22:33:03 +02:00
Håvar Aambø Fosstveit
79681b73bc Update README 2020-03-31 22:24:42 +02:00
Håvar Aambø Fosstveit
f15fe08410 Change to arrow functions 2020-03-31 22:14:15 +02:00
Håvar Aambø Fosstveit
2f6c1ba88f Cleaning 2020-03-31 21:27:21 +02:00
Mészáros Mihály
746a8f8347 Import and use Italian translation 2020-03-31 21:17:19 +02:00
Håvar Aambø Fosstveit
197156e6f6 Handle it correctly if a user tries to share a file that has allready been shared. Closes #142 2020-03-31 20:32:36 +02:00
Håvar Aambø Fosstveit
160a510f8e Merge branch 'hotfix-react-scripts' into develop 2020-03-31 12:39:42 +02:00
Håvar Aambø Fosstveit
8dfd7a905a Merge branch 'hotfix-react-scripts' 2020-03-31 12:37:40 +02:00
Håvar Aambø Fosstveit
e305e7e1a5 Update version 2020-03-31 12:36:08 +02:00
Håvar Aambø Fosstveit
9cbe8b9609 Hotfix for bug in react-scripts 2020-03-31 12:34:49 +02:00
Håvar Aambø Fosstveit
fe53243372 Lint and fix 2020-03-31 01:31:53 +02:00
Håvar Aambø Fosstveit
c0b37e0e1b Merge branch 'develop' of github.com:havfo/multiparty-meeting into develop 2020-03-31 01:29:34 +02:00
Håvar Aambø Fosstveit
a31da9359b Add logging class that receives room and peer events 2020-03-31 01:27:59 +02:00
Mészáros Mihály
3405e793ea Logout destroy session 2020-03-31 00:35:52 +02:00
Mészáros Mihály
3ebef0b974 Update changelog 2020-03-31 00:35:52 +02:00
Roman Drozd
4bc6bf6c3d Fix spacing of close button
Displayed incorrectly for some languages
2020-03-31 00:35:52 +02:00
Mészáros Mihály
7327e9bda7 Add LTI doc 2020-03-31 00:35:46 +02:00
Mészáros Mihály
6c2efc6d04 Add HAproxy doc 2020-03-31 00:22:48 +02:00
Stefan Otto
9442f529f4 clean up; first testing 2020-03-30 22:42:40 +02:00
Stefan Otto
924e78de39
lint 2020-03-30 12:54:56 +02:00
Stefan Otto
773184d41f
Merge pull request #158 from tobias231h/develop
Update de.json
2020-03-30 12:50:19 +02:00
Stefan Otto
d606acf1e4
Merge branch 'develop' into develop 2020-03-30 12:49:46 +02:00
Mészáros Mihály
9065996abd Add trustProxy option to server config 2020-03-29 09:46:54 +02:00
dpakkia
539813b464 Create it.json
Italian translation from a native speaker. Hope this helps!
2020-03-29 09:30:32 +02:00
Mészáros Mihály
a925393522 Add trustProxy option to server config 2020-03-29 08:57:48 +02:00
Mészáros Mihály
97fc02a543 Fix https redirect 2020-03-29 08:57:48 +02:00
Mészáros Mihály
9e39dd3313 Add Czech translation
Thanks to Jan Ruzicka!
2020-03-29 08:57:48 +02:00
Mészáros Mihály
f747a42a61 Fix regression: permanent top bar by default 2020-03-29 08:57:48 +02:00
Mészáros Mihály
12035847af Add some extra checks for video stream and track 2020-03-29 08:57:48 +02:00
Håvar Aambø Fosstveit
9da1afd4af Merge branch 'feat-client-reconnect' into develop 2020-03-28 23:24:18 +01:00
Håvar Aambø Fosstveit
87d4037562 We need jwt to make sure no one can hijack peerId 2020-03-28 23:20:37 +01:00
Håvar Aambø Fosstveit
c521bb9ad1 Firefox relay if turnservers configured, fixes #160 2020-03-28 21:17:59 +01:00
Stefan Otto
43e5769151 linting + effect for ptt 2020-03-28 01:20:26 +01:00
Stefan Otto
eef2c439f0 Merge branch 'feature-ptt' into develop 2020-03-28 00:51:21 +01:00
Stefan Otto
de0cb99656 small layout fixes; enable clientside auto mute for > 4 peers 2020-03-28 00:09:49 +01:00
Håvar Aambø Fosstveit
a1dc652d04 Linting and translations 2020-03-27 22:57:04 +01:00
Håvar Aambø Fosstveit
34cdac8102 Bug in Lobby close() 2020-03-27 21:49:38 +01:00
Håvar Aambø Fosstveit
2e68a7d891 Bug in Room close 2020-03-27 21:17:03 +01:00
Tobias H
5b96e34ea9
Update de.json 2020-03-27 15:56:24 +01:00
Håvar Aambø Fosstveit
1e1f714db5 Always give audio the priority if there is bandwidth problems 2020-03-27 14:23:51 +01:00
Håvar Aambø Fosstveit
76adbf1d69 Update french translation 2020-03-27 12:11:59 +01:00
Stefan Otto
274954b108
Merge pull request #155 from JCBRU/patch-2
Update fr.json
2020-03-27 12:07:20 +01:00
Jean-Christophe Bruneau
3756bfdfeb
Update fr.json 2020-03-27 11:24:51 +01:00
Håvar Aambø Fosstveit
71e695b912 Remove option to configure multiPartyMeeting server, use window.location.hostname 2020-03-27 11:18:49 +01:00
Håvar Aambø Fosstveit
b4ad79d5f9 Merge branch 'develop' of github.com:havfo/multiparty-meeting into develop 2020-03-27 10:46:20 +01:00
Håvar Aambø Fosstveit
9cd6efe761 Merge branch 'feature-ptt' into develop 2020-03-27 10:46:14 +01:00
Håvar Aambø Fosstveit
3043098f0c Remove jwt, not needed 2020-03-27 10:38:51 +01:00
Mészáros Mihály
7d0dde8ada Add Czech translation
Thanks to Jan Ruzicka!
2020-03-27 10:36:44 +01:00
Mészáros Mihály
c42e5f8e9c Fix regression: permanent top bar by default 2020-03-27 10:36:44 +01:00
Stefan Otto
feeec35992 text size ptt; no audio indicator for muted mic 2020-03-27 02:06:17 +01:00
Stefan Otto
0228f1c372 fix: space activates elements in last clicked focus; fix: change muted mic deactivates hark 2020-03-27 01:47:04 +01:00
Håvar Aambø Fosstveit
d20f0c161f Handle client reconnects better 2020-03-27 01:36:11 +01:00
Stefan Otto
e12ff16115 first implementation of PTT; Adjusting Opus parameter for shorter pTime, lower bandwidth (mono) and Forward Error Correction 2020-03-27 01:01:54 +01:00
Håvar Aambø Fosstveit
2b96e0b039 Remove package-lock files 2020-03-26 22:21:27 +01:00
Mészáros Mihály
807b55c2ad Add some extra checks for video stream and track 2020-03-26 22:01:18 +01:00
Mészáros Mihály
62165ea597 Fix https redirect 2020-03-26 22:01:18 +01:00
Håvar Aambø Fosstveit
5071282d40 Merge branch 'feat-user-roles' into develop 2020-03-26 21:31:57 +01:00
Stefan Otto
d83e035cda
Merge pull request #149 from dpakkia/patch-1
Create it.json
2020-03-25 00:00:04 +01:00
dpakkia
4dd274d8e7
Create it.json
Italian translation from a native speaker. Hope this helps!
2020-03-24 23:24:18 +01:00
Håvar Aambø Fosstveit
0600d1207b Temporary fix for Firefox because trouble with TURN tcp 2020-03-24 19:50:56 +01:00
Håvar Aambø Fosstveit
92a0370499 Don't break existing configs 2020-03-24 19:40:09 +01:00
Håvar Aambø Fosstveit
c914cbcb9f Properly close the room on moderator close 2020-03-24 18:35:43 +01:00
Håvar Aambø Fosstveit
0b62856414 Messages that are not translated are now null 2020-03-24 11:04:44 +01:00
Håvar Aambø Fosstveit
253de07d95 Update translations, needs translation 2020-03-24 10:42:55 +01:00
Håvar Aambø Fosstveit
04b2d6d443 Add "close meeting" function for moderator 2020-03-24 01:43:40 +01:00
Håvar Aambø Fosstveit
d756dd4721 Cleanup 2020-03-24 01:23:17 +01:00
Håvar Aambø Fosstveit
4135be9789 Remove duplicate signaling 2020-03-24 00:59:35 +01:00
Håvar Aambø Fosstveit
dd6d07391d Remove login on room chooser 2020-03-24 00:57:14 +01:00
Håvar Aambø Fosstveit
43b218fb3a Remove roles on logout 2020-03-24 00:56:26 +01:00
Håvar Aambø Fosstveit
376ed6d44f Cleanup 2020-03-23 23:56:36 +01:00
Håvar Aambø Fosstveit
9b8853f984 Typo 2020-03-23 23:18:06 +01:00
Håvar Aambø Fosstveit
c1cb0445fb Wrong state handling 2020-03-23 23:06:08 +01:00
Håvar Aambø Fosstveit
013abb15ba Include original peer in socket broadcast 2020-03-23 22:57:18 +01:00
Håvar Aambø Fosstveit
764e02c732 Typos 2020-03-23 22:52:53 +01:00
Håvar Aambø Fosstveit
37f3c8cabd Lint 2020-03-23 21:42:01 +01:00
Håvar Aambø Fosstveit
71b90dfb6c Use REST eduTurn 2020-03-23 21:41:34 +01:00
Håvar Aambø Fosstveit
cc4053ebea Syntax 2020-03-23 20:35:51 +01:00
Håvar Aambø Fosstveit
33ef7746a3 Move audio/video controls out to bottom of screen if on mobile 2020-03-23 15:30:43 +01:00
Håvar Aambø Fosstveit
698a57cb3e Scaling up to new router after this many users connect 2020-03-23 14:59:25 +01:00
Håvar Aambø Fosstveit
002950d708 Fix for authentication data flow 2020-03-23 14:44:12 +01:00
Stefan Otto
ec8c347a23
fix / typo 2020-03-23 14:13:05 +01:00
Håvar Aambø Fosstveit
d446b33695 Room now scales up to total server capacity 2020-03-22 22:41:48 +01:00
Mészáros Mihály
cae50e3f33 Merge branch 'develop' 2020-03-22 20:16:34 +01:00
Håvar Aambø Fosstveit
ed6f256fb3 Various cleanups 2020-03-22 19:55:06 +01:00
Mészáros Mihály
d700a3cfb2 Update changelog 2020-03-22 19:42:34 +01:00
Håvar Aambø Fosstveit
d18d729326 Hotkey for toggling video on/off 2020-03-22 19:16:45 +01:00
Håvar Aambø Fosstveit
e56ff28b91 Fix filesharing 2020-03-22 18:51:20 +01:00
Stefan Otto
742da9af45
Merge pull request #141 from havfo/revert-126-snyk-upgrade-939a1c4d6f32125716f4e696cb5627f0
Revert "[Snyk] Upgrade end-of-stream from 1.4.0 to 1.4.4"
2020-03-22 16:28:06 +01:00
Stefan Otto
a1791ab78e
Revert "[Snyk] Upgrade end-of-stream from 1.4.0 to 1.4.4" 2020-03-22 16:23:06 +01:00
Håvar Aambø Fosstveit
59ca0a2a68 Update translations, understand button is now translatable 2020-03-22 15:51:11 +01:00
Håvar Aambø Fosstveit
603368007a Added roomid to authenitcation data flow to make mapping user info better. 2020-03-22 15:20:49 +01:00
Håvar Aambø Fosstveit
6e00915bfe Update translations 2020-03-22 12:04:49 +01:00
Håvar Aambø Fosstveit
b19e4766be Revert to old simulcast behavior. To use simulcast, enable it in config. 2020-03-22 00:49:37 +01:00
Håvar Aambø Fosstveit
7f2f27b858 Add support for moderating rooms. Kick user, mute all users, stop all videos. 2020-03-22 00:43:47 +01:00
Håvar Aambø Fosstveit
d64247d12d Expose simulcast settings to client config 2020-03-21 21:03:11 +01:00
Stefan Otto
9670e45e7a
some additions, typo 2020-03-21 13:27:25 +01:00
Stefan Otto
7cf62c47bc
typo 2020-03-21 13:18:25 +01:00
Stefan Otto
163307e97d
Some additions 2020-03-21 13:17:45 +01:00
Stefan Otto
a49ac0134c
fix https://github.com/havfo/multiparty-meeting/issues/139 2020-03-21 12:34:23 +01:00
Håvar Aambø Fosstveit
c70740f5c7 Add support for user roles 2020-03-20 21:16:16 +01:00
Håvar Aambø Fosstveit
743b9e4869 Syntax 2020-03-20 21:15:35 +01:00
Håvar Aambø Fosstveit
587f185f09 Small fix for error in room reducer. 2020-03-20 21:14:43 +01:00
Håvar Aambø Fosstveit
e674daaf1a Add user roles for server. 2020-03-20 21:14:08 +01:00
Håvar Aambø Fosstveit
78262b71e1 Space out buttons on top bar, make sure users don't accidentally leave room. Fixes #138 2020-03-20 18:22:29 +01:00
Håvar Aambø Fosstveit
6b469881ef Fix mute buttons in participant list 2020-03-20 12:59:18 +01:00
Håvar Aambø Fosstveit
beab510f46 Fix styling of peer screensharing if sharing is muted. 2020-03-20 12:58:15 +01:00
Mészáros Mihály
368b0d7a92 Tidy in munin readme 2020-03-20 11:49:17 +01:00
Mészáros Mihály
9b8623381f Add munin plugin for monitoring 2020-03-20 11:44:40 +01:00
Håvar Aambø Fosstveit
c95c621f5b Example config for badge color 2020-03-20 00:01:08 +01:00
Håvar Aambø Fosstveit
fb2e7246c4 Remove HiddenPeers, added icon on AppBar 2020-03-19 23:58:14 +01:00
Håvar Aambø Fosstveit
959289594b Fix lastN 2020-03-19 23:27:37 +01:00
Håvar Aambø Fosstveit
ac24d4fc10 Expand server config example 2020-03-19 21:42:50 +01:00
Håvar Aambø Fosstveit
f35119b1d3 Merge branch 'develop' of github.com:havfo/multiparty-meeting into develop 2020-03-19 21:35:17 +01:00
Håvar Aambø Fosstveit
fbe7dec676 Update mediasoup 2020-03-19 21:34:18 +01:00
Mészáros Mihály
1d733ee159
Update README.md 2020-03-19 21:29:11 +01:00
Håvar Aambø Fosstveit
b8305bbb08 Syntax 2020-03-19 21:24:04 +01:00
Håvar Aambø Fosstveit
c424ffc17c Fix simulcast 2020-03-19 21:23:01 +01:00
Håvar Aambø Fosstveit
7a884edcdd Clean up 2020-03-19 21:21:01 +01:00
Håvar Aambø Fosstveit
545beb70ec Make sure the interactive server can never crash server 2020-03-18 15:30:04 +01:00
Håvar Aambø Fosstveit
0f793e1d02 Make resolution configurable, fixes #130 2020-03-18 10:21:46 +01:00
Håvar Aambø Fosstveit
fd58940916 Constrain screensharing in getDisplayMedia 2020-03-18 10:07:15 +01:00
Håvar Aambø Fosstveit
023aac3c21 Don't run interactive 2020-03-18 01:00:32 +01:00
Håvar Aambø Fosstveit
b9f666bc49 Spacebar to mute/unmute 2020-03-18 00:55:38 +01:00
Håvar Aambø Fosstveit
dd49fa3ea6 Add stats output from interactive client 2020-03-18 00:51:36 +01:00
Håvar Aambø Fosstveit
11de9a2dba Sticky App bar for fullscreen 2020-03-18 00:50:50 +01:00
Håvar Aambø Fosstveit
8ba29338d1 Added advanced options for sticky app bar, lastn. Optimized some component rendering. 2020-03-18 00:12:50 +01:00
Håvar Aambø Fosstveit
4975c08c0d Error in torrent handling, fixes #132, #124 2020-03-17 22:09:51 +01:00
Mészáros Mihály
b7ddb09ce5
Merge pull request #126 from havfo/snyk-upgrade-939a1c4d6f32125716f4e696cb5627f0
[Snyk] Upgrade end-of-stream from 1.4.0 to 1.4.4
2020-03-17 21:40:56 +01:00
Mészáros Mihály
f893b0935e
Merge pull request #127 from havfo/snyk-upgrade-9fba95f2255edebc104441d5325b2194
[Snyk] Upgrade marked from 0.7.0 to 0.8.0
2020-03-17 21:40:19 +01:00
Mészáros Mihály
4c7a9d67b4 Add muted url option 2020-03-17 21:20:06 +01:00
Mészáros Mihály
51f23c4396 Fix: iceServers++ sender part 2020-03-16 15:04:45 +01:00
Mészáros Mihály
844924f38e Fix iceServer config in mediasoup-client 2020-03-16 14:40:52 +01:00
Mészáros Mihály
ea316d88e1 Add Croatian translation thx Sasa!! 2020-03-15 22:06:47 +01:00
Mészáros Mihály
c1c831073b
Change httpOnly option value in example config 2020-03-15 16:35:14 +01:00
Mészáros Mihály
8c042c3211 Add extra checks
To be able to change audio device, if the first/default device couldn't start.
2020-03-15 01:42:13 +01:00
Mészáros Mihály
c8dd705530 Add httpOnly mode 2020-03-15 01:41:00 +01:00
Mészáros Mihály
0bd983b10a Fix: displayName LTI regression 2020-03-14 23:08:00 +01:00
Mészáros Mihály
3ae3e3ecd2
Fix typo hu.json 2020-03-09 13:55:50 +01:00
Håvar Aambø Fosstveit
1b710d273c Added an interactive terminal to get info from running server. 2020-02-18 12:38:37 +01:00
snyk-bot
ad34f57217 fix: upgrade marked from 0.7.0 to 0.8.0
Snyk has created this PR to upgrade marked from 0.7.0 to 0.8.0.

See this package in NPM:
https://www.npmjs.com/package/marked

See this project in Snyk:
https://app.snyk.io/org/misi/project/eaf064a2-82f1-458e-8ca0-12b422ad9584?utm_source=github&utm_medium=upgrade-pr
2020-02-13 00:46:16 +00:00
snyk-bot
313d1c0d03 fix: upgrade end-of-stream from 1.4.0 to 1.4.4
Snyk has created this PR to upgrade end-of-stream from 1.4.0 to 1.4.4.

See this package in NPM:
https://www.npmjs.com/package/end-of-stream

See this project in Snyk:
https://app.snyk.io/org/misi/project/eaf064a2-82f1-458e-8ca0-12b422ad9584?utm_source=github&utm_medium=upgrade-pr
2020-02-13 00:46:08 +00:00
Mészáros Mihály
87a6153cd8 Merge branch 'jonahzheng-patch-1' into develop 2020-02-11 14:18:58 +01:00
Mészáros Mihály
660136fd1c Merge branch 'patch-1' of https://github.com/jonahzheng/multiparty-meeting into jonahzheng-patch-1 2020-02-11 14:17:41 +01:00
Mészáros Mihály
18c0b56b2e Fix: Make pulsing hamburger icon clickable.
e.g. During new FileSharing it was not clickable.
2020-02-11 10:19:36 +01:00
Mészáros Mihály
aac6710166 Call tostring() to work properly with node10 2020-02-11 10:17:47 +01:00
Mészáros Mihály
209653dcc0 Merge pull request #118 from havfo/lti1
LTI 1.1 integration
2020-02-10 09:04:07 +01:00
Håvar Aambø Fosstveit
96bdccd52f
Merge pull request #123 from fouber/patch-1
fix Chinese language locale bug
2020-02-10 00:11:15 +01:00
Håvar Aambø Fosstveit
6696f0de45
Merge pull request #122 from fouber/patch-2
fix mobile device maxSpotlights bug for #120
2020-02-10 00:09:36 +01:00
张云龙
589f47be18
fix Chinese language locale bug
According to the definition of [BCP 47](https://www.ietf.org/rfc/bcp/bcp47.txt), the Chinese language version is "zh-*".
2020-02-09 12:02:15 +08:00
张云龙
aa3b36f306 fix mobile device maxSpotlights bug for #120
https://github.com/havfo/multiparty-meeting/issues/120
2020-02-09 11:54:28 +08:00
jonah zheng
22298800de
Update config.example.js 2020-02-07 18:20:12 +08:00
Håvar Aambø Fosstveit
1613cf8703
Merge pull request #119 from sgomez/add-spanish-translation
Added Spanish translation
2020-02-05 10:45:26 +01:00
Sergio Gómez
9a1557366d
Added Spanish translation 2020-02-04 17:33:54 +01:00
Håvar Aambø Fosstveit
894b39585f Fix link opening in new tab from chat. 2020-01-17 08:17:44 +01:00
Håvar Aambø Fosstveit
ac59253213 Fix the chat send button. 2020-01-16 14:07:52 +01:00
Mészáros Mihály
4e0283981c Tidy: change function name to camelCase 2020-01-02 15:58:31 +01:00
Mészáros Mihály
6e7f6b4a0d Fix: warning
* Fix: missing else,
* move out to function already taken path comparison
2020-01-02 15:49:32 +01:00
Mészáros Mihály
c0b6ff6be4 Upgrade react-scripts 2020-01-02 09:52:40 +01:00
Mészáros Mihály
78fd6e1b78 Init displayName according LTI 2020-01-02 09:52:34 +01:00
Mészáros Mihály
e8731a37e5 Add LTI support, and tidy OIDC code 2019-12-17 08:26:19 +01:00
Håvar Aambø Fosstveit
d1039411a4 Add some tests 2019-12-10 15:46:38 +01:00
Håvar Aambø Fosstveit
be20b3ba35 Remove unused parameter to video tag 2019-12-10 15:46:26 +01:00
Håvar Aambø Fosstveit
f252c3ebd1 Do proper check that config is present 2019-12-10 15:46:14 +01:00
Håvar Aambø Fosstveit
11cbeb04ac Add checks in RoomClient for missing parameters 2019-12-10 15:45:13 +01:00
Håvar Aambø Fosstveit
fbc1812ffe Add testing libraries 2019-12-10 15:44:50 +01:00
Håvar Aambø Fosstveit
81d463c992 Check if this is a test 2019-12-10 15:44:36 +01:00
Håvar Aambø Fosstveit
ad4054c108 Activate chinese translation. 2019-12-10 15:40:46 +01:00
Håvar Aambø Fosstveit
aea105297d Better source explorer config. 2019-12-10 13:03:33 +01:00
Håvar Aambø Fosstveit
82dc6a104b Remove greyscale for now, confusing for users. 2019-12-10 10:44:37 +01:00
Mészáros Mihály
9ac6d2e056 Add Chinese translation. Big thanks to Tobias Appel(LRZ)! 2019-12-10 08:37:53 +01:00
Håvar Aambø Fosstveit
0dee1eb1bb Simplify selector. 2019-12-05 13:51:31 +01:00
Håvar Aambø Fosstveit
105e245c7e Error in spotlightselector. 2019-12-05 13:46:16 +01:00
Mészáros Mihály
0be054fc1d Add Portugal translation. Many Thanks to Rui Ribeiro(FCCN)! 2019-12-05 10:28:35 +01:00
Mészáros Mihály
1e413e525a fix in fr transaltion 2019-12-02 14:52:02 +01:00
Mészáros Mihály
ef300a9d09 Updated French translation. Thx to Damien FETIS (RENATER) 2019-12-02 13:23:13 +01:00
Mészáros Mihály
0005b025ae Add Romanian translation 2019-12-02 10:42:23 +01:00
Håvar Aambø Fosstveit
02c2089648 Combine CSS selectors. 2019-11-26 13:32:15 +01:00
Håvar Aambø Fosstveit
6e5300c937 Fix fading of screensharing. 2019-11-26 13:28:28 +01:00
Håvar Aambø Fosstveit
ff549a230d Fade out Me, and increase fade out time. 2019-11-26 13:07:14 +01:00
Håvar Aambø Fosstveit
3f321da30e Merge branch 'feat-static-layout' into develop 2019-11-26 12:50:32 +01:00
Håvar Aambø Fosstveit
b163fd0a72 Update selector and containers. Peers now don't jump around on the screen when active speaker changes. 2019-11-26 12:49:36 +01:00
Håvar Aambø Fosstveit
4c39a48d4e Fade out passive speakers. 2019-11-26 12:48:20 +01:00
Håvar Aambø Fosstveit
12efa3eb2c Fixed sizing of democratic view 2019-11-26 12:44:04 +01:00
Mészáros Mihály
a36022674d Add Greek translation. Big thanks to Dimitris Pantazatos! 2019-11-26 12:43:26 +01:00
Mészáros Mihály
277710bd93 Add French translation Big thanks to Damien Fetis (RENATER) 2019-11-26 08:50:16 +01:00
Mészáros Mihály
11ef7a4ff7 Add Danish tranlations thanks to Bo and Erik 2019-11-22 14:18:02 +01:00
Stefan Otto
5a604376ca
Ugly fix for https://github.com/havfo/multiparty-meeting/issues/107 2019-11-20 14:19:45 +01:00
Mészáros Mihály
6e886b5662 update the hugarian translation 2019-11-15 13:59:12 +01:00
Mészáros Mihály
a0b9b61283 Fix: OIDC username nested assignment 2019-11-15 10:38:30 +01:00
MÉSZÁROS Mihály
a132a529ea Add reddis options 2019-11-14 21:25:33 +01:00
Håvar Aambø Fosstveit
a5b56626f0 Fix simulcast support 2019-11-11 18:32:28 +01:00
Håvar Aambø Fosstveit
6054cde920 Use correct routers based on environment we're in. 2019-11-11 09:57:10 +01:00
Håvar Aambø Fosstveit
1dc19611fb Remove application menu, we don't use it. 2019-11-11 09:56:52 +01:00
Håvar Aambø Fosstveit
39376f133b Need to run --no-sandbox for now because of error on Linux. 2019-11-11 09:56:35 +01:00
Håvar Aambø Fosstveit
99dd6433a6 Merged electron into main code. One unified codebase for both web and native version of client. 2019-11-10 23:57:28 +01:00
Håvar Aambø Fosstveit
aea08b4cbe Fix roomId handling 2019-11-10 23:01:45 +01:00
Håvar Aambø Fosstveit
b2a7599095 Add and activate polish translation 2019-11-10 20:20:12 +01:00
Håvar Aambø Fosstveit
daf661889d Remove static chooseRoom file, and use react-router instead. 2019-11-10 00:01:01 +01:00
Mészáros Mihály
37bac2f650 Add and activate the first version of Hungarian translation 2019-11-08 20:05:56 +01:00
Håvar Aambø Fosstveit
80607dbbf5
Update README.md 2019-11-08 14:31:39 +01:00
Håvar Aambø Fosstveit
60523d406d Demo file 2019-11-08 14:29:56 +01:00
Håvar Aambø Fosstveit
7c3e0ea717 Add support for IPv6 2019-11-08 09:58:51 +01:00
Håvar Aambø Fosstveit
5f967891fa Activate german translation. 2019-11-07 11:26:23 +01:00
Stefan Otto
4ce02edabd
Added german translation 2019-11-07 11:22:17 +01:00
Håvar Aambø Fosstveit
0d705abf11 Merge branch 'develop' 2019-11-07 10:13:25 +01:00
Håvar Aambø Fosstveit
74bf6e1781 Preparing for release. 2019-11-07 10:12:26 +01:00
Håvar Aambø Fosstveit
69677e4972 Remove browser info for users. 2019-11-07 10:01:26 +01:00
Håvar Aambø Fosstveit
5cdf0baac4 syntax 2019-11-07 09:42:20 +01:00
Håvar Aambø Fosstveit
030ae8a24b Move away from marked sanitize, and use dompurify instead. 2019-11-07 08:56:26 +01:00
Håvar Aambø Fosstveit
43aa242b7b Small bug in input values in formatMessage. 2019-11-06 23:20:57 +01:00
Håvar Aambø Fosstveit
c12057e53c Added internationalization support, and translated to nb-NO. 2019-11-06 23:11:42 +01:00
Håvar Aambø Fosstveit
23e02d4865 Add redux state logging to debug build. 2019-11-06 10:12:16 +01:00
Håvar Aambø Fosstveit
0414aa6b7b Move top AppBar to its own component. 2019-11-05 15:27:04 +01:00
Håvar Aambø Fosstveit
99575f330b Remove unused code. 2019-11-05 15:17:56 +01:00
Håvar Aambø Fosstveit
7e3e4cdd67 Fix muting microphone from hotkey. Didn't update UI before. 2019-11-05 14:46:15 +01:00
Håvar Aambø Fosstveit
9b23c3c615 Remove unused file. 2019-11-05 12:35:55 +01:00
Håvar Aambø Fosstveit
8ab1475fea Refactor stateActions for better overview. 2019-11-05 11:53:21 +01:00
Håvar Aambø Fosstveit
a9be34aea7 Unused action. 2019-11-05 09:53:45 +01:00
Håvar Aambø Fosstveit
ac39703874 Syntax. 2019-11-05 09:47:30 +01:00
Håvar Aambø Fosstveit
5ba83fce5f Make sure events are propagated out of lobby. 2019-11-05 09:47:20 +01:00
Håvar Aambø Fosstveit
7a01017832 Change authentication status last. 2019-11-05 09:46:44 +01:00
Håvar Aambø Fosstveit
6d558be11c Remove dependency, 2019-11-05 09:46:12 +01:00
Håvar Aambø Fosstveit
51e4d6664d Merge branch 'feat-lobby' into develop 2019-11-04 23:40:47 +01:00
Håvar Aambø Fosstveit
972662e2b0 Syntax. 2019-11-04 23:38:11 +01:00
Håvar Aambø Fosstveit
4910b2c10d Cleanup of listeners in Lobby if a user is promoted. 2019-11-04 23:38:00 +01:00
Håvar Aambø Fosstveit
cd5055c00e Better state handling. 2019-11-04 23:37:10 +01:00
Håvar Aambø Fosstveit
d45fd32a78 Better scaling of democratic view based on if toolbars are visible. 2019-11-04 23:36:45 +01:00
Håvar Aambø Fosstveit
c7e40598f7 Missing Icon, and added tooltip to icons. 2019-11-04 23:36:03 +01:00
Håvar Aambø Fosstveit
5604ba20bb Move room locking to its own icon. 2019-11-04 23:34:54 +01:00
Håvar Aambø Fosstveit
ce76a28e0e Add tooltip to icon for letting peer into room. 2019-11-04 23:32:30 +01:00
Håvar Aambø Fosstveit
1f60222b75 Remove unused variables. 2019-11-04 23:31:29 +01:00
Håvar Aambø Fosstveit
fd1e53a895 Properly close client on clicking leave. 2019-11-04 23:31:10 +01:00
Håvar Aambø Fosstveit
d9e712ec04 Small fix to join dialog. 2019-11-04 23:30:22 +01:00
Håvar Aambø Fosstveit
98caed6e4a Properly handle login/logout. 2019-11-04 23:29:54 +01:00
Håvar Aambø Fosstveit
d3d3e9626e Remove event emits. Setter handles emitting on change. 2019-11-04 20:37:25 +01:00
Håvar Aambø Fosstveit
b108fbac87 Fix logic for joining rooms. 2019-11-04 15:56:17 +01:00
Håvar Aambø Fosstveit
4b0c17c698 Fix filesharing after code splitting. 2019-11-04 14:43:14 +01:00
Håvar Aambø Fosstveit
673c3f989e Code splitting and lazy loading for faster load times. 2019-11-04 14:34:27 +01:00
Håvar Aambø Fosstveit
8bfdcab709 Fixed socket connection handling. 2019-11-01 14:50:40 +01:00
Håvar Aambø Fosstveit
5d1a38d978 Fixing the join dialog. 2019-11-01 14:22:29 +01:00
Håvar Aambø Fosstveit
10228a9f8c Allow minimum TLSv1.2 and recommended ciphers, fixes #105. 2019-11-01 11:43:34 +01:00
Stefan Otto
aac2e5f918 Fixed update picture / displayName finally (hopefully) 2019-10-31 15:30:20 +01:00
Stefan Otto
87bcd3a895 fix logic for room entry 2019-10-31 05:34:54 +01:00
Stefan Otto
dd19560951 fix peer auth propagation 2019-10-31 05:26:59 +01:00
Stefan Otto
f204ff0222 mostly revert last commit :( 2019-10-31 02:37:45 +01:00
Stefan Otto
d49ef4e65f fix: picture update from Lobby 2019-10-31 01:44:06 +01:00
Stefan Otto
6c07f89ab1 changePicture on signIn 2019-10-31 01:05:11 +01:00
Stefan Otto
59617aa2ad added signInRequired in joinDialog 2019-10-31 00:22:47 +01:00
Håvar Aambø Fosstveit
a8c6169945 Don't throw on not joined. 2019-10-30 22:21:02 +01:00
Håvar Aambø Fosstveit
b30011c81a Checking wrong element in object. 2019-10-30 22:17:48 +01:00
Håvar Aambø Fosstveit
549176b86e Fixed events on server when user logs in. 2019-10-30 22:12:29 +01:00
Stefan Otto
b5dd7f0ee4 Fix:Server does not start with oidc 2nd try 2019-10-30 18:11:52 +01:00
Stefan Otto
cc013f4c4e Fix:Server does not start with oidc. I don't understand this but it works that way now, 2019-10-30 18:01:17 +01:00
Stefan Otto
295a731324 removed Lobby (included in joinDialog now) 2019-10-30 15:02:42 +01:00
Stefan Otto
70913c2219 improved joinDialog 2019-10-30 15:01:28 +01:00
Stefan Otto
879ea37167 Added name for room in state on clientside 2019-10-30 15:00:37 +01:00
Stefan Otto
9256d4c751 fixed displayName error 2019-10-30 14:59:34 +01:00
Håvar Aambø Fosstveit
a003bcdef0 Remove unused file. 2019-10-28 12:11:47 +01:00
Håvar Aambø Fosstveit
c81b377723 Fixed race condition on socket acknowledge callback. Fixed naming on socket methods. Added error handling on socket messages. 2019-10-28 11:45:37 +01:00
Håvar Aambø Fosstveit
bb8cf02c23 Some cleanup. 2019-10-25 23:43:59 +02:00
Håvar Aambø Fosstveit
cacc9abf7c Restructured code. 2019-10-25 16:15:39 +02:00
Håvar Aambø Fosstveit
85d1973a6c Fix for state change of picture. 2019-10-25 15:02:55 +02:00
Håvar Aambø Fosstveit
e17d712ed5 Simplified user info on login. 2019-10-25 14:53:47 +02:00
Håvar Aambø Fosstveit
80c6c441cb Wrong state variable name. 2019-10-25 14:13:58 +02:00
Håvar Aambø Fosstveit
6dc3f537e4 Need to check for undefined. 2019-10-25 13:52:13 +02:00
Håvar Aambø Fosstveit
39c3f7c36d Refactored a bit of code and added a Peer class to the server. 2019-10-25 13:34:28 +02:00
Håvar Aambø Fosstveit
76c6b5121e Removed picture from localstorage. 2019-10-24 12:56:31 +02:00
Håvar Aambø Fosstveit
01ea8b05d5 Fixed display name. 2019-10-24 12:53:44 +02:00
Håvar Aambø Fosstveit
f38c5e38c5 Small fixes and requireSignIn now working. 2019-10-24 12:43:11 +02:00
Håvar Aambø Fosstveit
5adb08e184 Added config for requiring guests to sign in. 2019-10-24 11:01:54 +02:00
Håvar Aambø Fosstveit
7e292b29c1 User can login without joining. 2019-10-24 10:32:28 +02:00
Håvar Aambø Fosstveit
7b65328789 Cleaned up login code. 2019-10-24 10:10:22 +02:00
Håvar Aambø Fosstveit
5247bfe332 Need to stringify. 2019-10-24 09:45:26 +02:00
Håvar Aambø Fosstveit
e148c8d2a0 Mistake. 2019-10-24 09:40:35 +02:00
Håvar Aambø Fosstveit
263cdb7430 Some tests. 2019-10-24 09:26:34 +02:00
Håvar Aambø Fosstveit
bf754d4797 Some tests. 2019-10-24 09:03:30 +02:00
Håvar Aambø Fosstveit
a8149d29d8 Small fixes. 2019-10-24 00:08:49 +02:00
Håvar Aambø Fosstveit
77bbc53124 Merge branch 'feat-lobby' of github.com:havfo/multiparty-meeting into feat-lobby 2019-10-24 00:01:33 +02:00
Håvar Aambø Fosstveit
1be82b45d8 Fixed server security issues. 2019-10-24 00:01:24 +02:00
Stefan Otto
447e674876 Merge branch 'feat-lobby' of https://github.com/havfo/multiparty-meeting into feat-lobby 2019-10-23 23:56:25 +02:00
Stefan Otto
1ee666125d Fix: closing room only if Lobby is empty 2019-10-23 23:56:20 +02:00
Håvar Aambø Fosstveit
6596deda2a Various small changes. 2019-10-23 19:46:44 +02:00
Stefan Otto
dd9f95971d fix: rooms not closed on server after all peers left 2019-10-23 14:37:04 +02:00
Stefan Otto
b99767fad4 Merge branch 'feat-lobby' of https://github.com/havfo/multiparty-meeting into feat-lobby 2019-10-23 13:30:23 +02:00
Stefan Otto
abca024c84 eslint fixes;styling 2019-10-23 13:29:55 +02:00
Håvar Aambø Fosstveit
7b5601562f Small fixes. 2019-10-23 13:11:06 +02:00
Håvar Aambø Fosstveit
79609f3b73 Fixed some eslint stuff. 2019-10-23 13:08:24 +02:00
Håvar Aambø Fosstveit
79ecaf7408 Small cleanups here and there. 2019-10-23 12:15:22 +02:00
Stefan Otto
98b902c5f8 merge and lock dialog 2019-10-23 12:08:26 +02:00
Stefan Otto
e5ddaa458a lock Dialog 2019-10-23 11:47:41 +02:00
Håvar Aambø Fosstveit
12dd85a99d Lifted some logic up a level to clean up code. 2019-10-23 11:29:32 +02:00
Håvar Aambø Fosstveit
223642a44f Update dependencies. 2019-10-22 15:35:46 +02:00
Håvar Aambø Fosstveit
38cf88aa62 Cleanup and handling of events. 2019-10-22 15:30:04 +02:00
Håvar Aambø Fosstveit
0299e5f661 Fixed some small bugs, now sharing session between Express and Socket.io. 2019-10-22 15:04:28 +02:00
Håvar Aambø Fosstveit
4181afd1a3 Further work on sessions and authentication 2019-10-18 14:56:02 +02:00
Håvar Aambø Fosstveit
3495245e37 Updated serverhistory and fixed some bugs. 2019-10-17 10:55:03 +02:00
Håvar Aambø Fosstveit
f51d07285d Added pulsing effect to badge. 2019-10-16 21:41:55 +02:00
Håvar Aambø Fosstveit
513f0efa0b First working version of lobby. 2019-10-16 14:09:29 +02:00
Håvar Aambø Fosstveit
66a2becf63 Inital work on lobby. 2019-10-15 10:52:14 +02:00
Håvar Aambø Fosstveit
937f142c6e Added lobby to server, still missing some signaling. 2019-10-15 08:03:55 +02:00
Håvar Aambø Fosstveit
2e166ca2b2 Created reducer and stateactions for lobby. 2019-10-15 08:03:18 +02:00
Stefan Otto
aa55adbb2d
quick fix for https://github.com/havfo/multiparty-meeting/issues/103 2019-10-09 12:17:56 +02:00
Stefan Otto
b8ba49dd78
Update config.example.js
additional hint, see https://github.com/havfo/multiparty-meeting/issues/103
2019-09-26 10:29:52 +02:00
Stefan Otto
18aa1ac985
Update README.md
additional hint for config.js / see issue https://github.com/havfo/multiparty-meeting/issues/103
2019-09-26 10:02:46 +02:00
Håvar Aambø Fosstveit
a4a7fbe4f7 Merge branch 'develop' 2019-07-01 19:47:54 +02:00
Håvar Aambø Fosstveit
a94cd35676 Prepare for new version 2019-07-01 19:45:09 +02:00
Håvar Aambø Fosstveit
115bcfc62d Cleaned up Peer container 2019-06-25 22:34:18 +02:00
Håvar Aambø Fosstveit
07ef68d62e Fix autocorrect setting for display-name. 2019-06-25 15:18:33 +02:00
Håvar Aambø Fosstveit
1c22fd2c56 Fix bug in locked room. 2019-06-25 15:04:41 +02:00
Håvar Aambø Fosstveit
9d385da30b Fixed flipped video on screen sharing. 2019-06-25 15:00:22 +02:00
Håvar Aambø Fosstveit
bfe6d14b1a Cleanup of CSS. 2019-06-25 14:38:48 +02:00
Håvar Aambø Fosstveit
da3233faf3 Updated API in material-ui. 2019-06-25 13:13:34 +02:00
Håvar Aambø Fosstveit
f79a452341 Updated material-ui and fixed some layout. 2019-06-25 11:38:03 +02:00
Håvar Aambø Fosstveit
9acf0056ac Removed sidebar. Moved buttons to me-view and top-bar. Added text hint on me-view. 2019-06-24 15:23:45 +02:00
Håvar Aambø Fosstveit
66b922d0b3 Cleanup of package.json 2019-06-19 14:33:49 +02:00
Håvar Aambø Fosstveit
e7a2b8bd6d Merge branch 'feat-join-dialog' into develop 2019-06-13 13:57:01 +02:00
Håvar Aambø Fosstveit
2aa6166f6b Fix mute/unmute mic. 2019-06-13 13:56:31 +02:00
Håvar Aambø Fosstveit
819bd64948 Wrap dialog in div with styling. 2019-06-13 13:37:39 +02:00
Håvar Aambø Fosstveit
4f3387b73c Remove unused code. 2019-06-13 13:29:52 +02:00
Håvar Aambø Fosstveit
7d831f4bda Fix media device handling. 2019-06-12 15:53:48 +02:00
Håvar Aambø Fosstveit
27a1bf3821 Don't wait for local media 2019-06-12 15:44:29 +02:00
Håvar Aambø Fosstveit
041a90599d Added dialog before joining room. 2019-06-12 15:33:35 +02:00
Håvar Aambø Fosstveit
c46bcb7bdc Updated film strip. Added it back to settings. 2019-06-06 11:28:36 +02:00
Håvar Aambø Fosstveit
4b3219f614 Remove unused dependencies. Fix handling of missing roomId. 2019-06-05 20:40:59 +02:00
Håvar Aambø Fosstveit
21a1322415 Don't hide controls when there is no video. Fixes #99. 2019-06-05 20:40:19 +02:00
Håvar Aambø Fosstveit
739e7c2d97 Stray log statement. 2019-06-05 15:58:32 +02:00
Håvar Aambø Fosstveit
c530876d0d Film strip view almost working again. 2019-06-05 15:56:54 +02:00
Håvar Aambø Fosstveit
1eb115f547 Cleaned up file sharing. 2019-06-05 10:40:59 +02:00
Håvar Aambø Fosstveit
8a51f3c966 Small fix to tooltips error. 2019-06-05 08:38:23 +02:00
Håvar Aambø Fosstveit
c47dc5a3e4 Removed unused icon. 2019-06-04 13:09:54 +02:00
Håvar Aambø Fosstveit
2af49fcf41 Removed unused case. 2019-06-04 13:08:58 +02:00
Håvar Aambø Fosstveit
149c40e89e Remove domain from config. Unused, fixes #97. 2019-06-04 13:04:00 +02:00
Håvar Aambø Fosstveit
a3013bb716 Removed screensharing extension. Added some small optimization fixes. 2019-06-04 12:58:12 +02:00
Håvar Aambø Fosstveit
0aa0aa08b0 Fixed adding picture from newPeer. 2019-06-04 11:42:14 +02:00
Håvar Aambø Fosstveit
a763d37879 Fixed sending picture to peers if you have it. 2019-06-04 11:29:00 +02:00
Håvar Aambø Fosstveit
38627e485d Fix to hark. Handle consumer close. 2019-06-04 09:42:07 +02:00
Håvar Aambø Fosstveit
f1f6a9ddc3 Merge branch 'feat-mediasoup-v3' into develop 2019-06-03 14:20:54 +02:00
Håvar Aambø Fosstveit
0ceb016d04 Updated consumer audio level state change 2019-06-03 14:14:06 +02:00
Håvar Aambø Fosstveit
8a98f9b841 Fix for auth because of updated signaling 2019-06-03 14:04:15 +02:00
Håvar Aambø Fosstveit
65f320cd48 Stray line removed 2019-06-03 13:19:57 +02:00
Håvar Aambø Fosstveit
bc9deb1200 Updated handling of audio device change 2019-06-03 12:24:07 +02:00
Håvar Aambø Fosstveit
30f42d6ced Mostly working mediasoup v3 2019-06-03 11:55:23 +02:00
Stefan Otto
e9b946ba93
Merge pull request #95 from havfo/feat/spdy
http2
2019-05-15 15:41:14 +02:00
Mészáros Mihály
01967ccffd https to spdy replacment 2019-05-15 10:42:09 +02:00
Mészáros Mihály
393ec15221 extend check of photo 2019-05-14 08:35:39 +02:00
Mészáros Mihály
b209b35113 Tidy: remove not necesary debug info 2019-05-13 14:59:58 +02:00
Mészáros Mihály
a5bc1fc3e7 move secure session cookie secret to config 2019-05-13 14:58:13 +02:00
Mészáros Mihály
28f9e72612 use openid-client with passport 2019-05-13 11:43:06 +02:00
Mészáros Mihály
88386e5697
update Readme: config.js moved into config dir 2019-05-10 21:13:57 +02:00
Mészáros Mihály
26389993a3 change config location 2019-05-06 09:37:01 +02:00
Mészáros Mihály
14d1de60c0 move app config to directory 2019-05-06 09:08:08 +02:00
Mészáros Mihály
76cf549049 Add placeholder file to server/public 2019-04-13 08:19:52 +02:00
Håvar Aambø Fosstveit
d9f51cfd06 Merge branch 'develop' 2019-04-12 09:55:40 +02:00
Håvar Aambø Fosstveit
5570d98ece New version 2019-04-12 09:54:33 +02:00
Håvar Aambø Fosstveit
7f090669cd Moved peer buttons to right side. 2019-04-12 09:16:58 +02:00
Håvar Aambø Fosstveit
091ad77179 Added resolution setting. 2019-04-12 09:10:05 +02:00
Håvar Aambø Fosstveit
b422cd3892 Clean up server example config. 2019-04-11 12:41:13 +02:00
Håvar Aambø Fosstveit
80b44b0722 Fix Issue #86 2019-04-11 12:40:22 +02:00
Håvar Aambø Fosstveit
dd12d76a5d Some small fixes to button disabled on load. 2019-04-05 23:17:43 +02:00
Håvar Aambø Fosstveit
7dc4d62c5b Listen for device changes and update device list. 2019-04-05 22:56:51 +02:00
Håvar Aambø Fosstveit
0cd1909af0 Small fix to microphone access. 2019-04-05 22:11:23 +02:00
Håvar Aambø Fosstveit
19ce7c7a4d Moved state variable. 2019-04-05 21:56:13 +02:00
Håvar Aambø Fosstveit
67b3427485 Persist various things in localstorage. 2019-04-05 21:47:16 +02:00
Håvar Aambø Fosstveit
e5026284fa Bug in state check. 2019-04-05 20:49:48 +02:00
Håvar Aambø Fosstveit
90b2ccd0a9 Fix to state check. Fix to missing display name on missing producer. 2019-04-05 20:44:53 +02:00
Håvar Aambø Fosstveit
9013b40143 Merge branch 'feat-audiocontext' into develop 2019-04-05 14:22:39 +02:00
Håvar Aambø Fosstveit
4bb3c2d200 Fix audiocontext troubles on Safari and Firefox 2019-04-05 14:21:58 +02:00
Håvar Aambø Fosstveit
048cd8758b Merge branch 'feat-device-management' into develop 2019-04-05 13:34:23 +02:00
Håvar Aambø Fosstveit
0b9e1ca7b9 Updated handling of video/audio devices. Save devices to cookie. 2019-04-05 13:32:45 +02:00
Håvar Aambø Fosstveit
5c9ee3a495 Configurable title 2019-04-04 14:31:15 +02:00
Håvar Aambø Fosstveit
be4331714b Merge branch 'feat-lastn-upgrades' into develop 2019-04-04 10:59:25 +02:00
Håvar Aambø Fosstveit
72c25b212c Separate settings for lastN for desktop and mobile 2019-04-04 10:58:41 +02:00
Stefan Otto
abb5b2b231 Merge branch 'develop' of github.com:havfo/multiparty-meeting into develop 2019-04-04 10:31:42 +02:00
Stefan Otto
bbb3095577 Performance improvement: dispatch audiolevel-events only on step changes 1-10 2019-04-04 10:31:25 +02:00
Håvar Aambø Fosstveit
2aed4cd1b8 Updated README 2019-04-04 09:50:47 +02:00
Håvar Aambø Fosstveit
417f7ec3e8 Another fix for Safari AudioContext 2019-04-04 08:32:51 +02:00
Håvar Aambø Fosstveit
2e09cc76d7 Fix for AudioContext not existing in Safari 2019-04-04 08:20:41 +02:00
Håvar Aambø Fosstveit
3fb75a2389 Update deps 2019-04-04 07:52:53 +02:00
Håvar Aambø Fosstveit
abca6645a9 Fixes to performance. Moved volume out to new component to optimize rerenders. 2019-04-04 00:03:57 +02:00
Håvar Aambø Fosstveit
e84af94544 Lots of performance fixes 2019-04-03 16:20:17 +02:00
Håvar Aambø Fosstveit
168affbc57 Added FullView back because of bug in Chrome. 2019-04-03 08:08:16 +02:00
Håvar Aambø Fosstveit
fd1e512a80 Added redux selectors to improve performance. Fixed drawer. Cleaned up code and removed some unused code. 2019-04-03 00:09:27 +02:00
Håvar Aambø Fosstveit
0478a44b74 Fixed room messages for audiocontext and room locked. 2019-04-02 19:58:23 +02:00
Håvar Aambø Fosstveit
8d7f832270 Close button in meeting drawer 2019-04-02 14:38:36 +02:00
Håvar Aambø Fosstveit
f8922887ef Fixed layout in Me container when screen-sharing. Made video object-fit contain for screen-sharing. 2019-04-02 14:07:30 +02:00
Håvar Aambø Fosstveit
2ecda7c7d5 Remove unused code 2019-04-02 13:40:35 +02:00
Håvar Aambø Fosstveit
a40b843848 Cleanup of Me, Peer, PeerView, ScreenView and Democratic 2019-04-02 13:37:13 +02:00
Håvar Aambø Fosstveit
978d49f045 Updated build command in package.json to move build files to server/public 2019-04-02 11:50:16 +02:00
Håvar Aambø Fosstveit
bcedfac3e6 Layout fix for chat in Firefox 2019-04-02 11:44:14 +02:00
Håvar Aambø Fosstveit
829052de87 Deactivate filmstrip in settings for now. 2019-04-02 10:36:34 +02:00
Håvar Aambø Fosstveit
66375ec8cf Fixes to layout and buttons on peers 2019-04-02 09:31:21 +02:00
Håvar Aambø Fosstveit
a33e3df783 Added some tooltips 2019-04-01 15:27:36 +02:00
Håvar Aambø Fosstveit
49ebf5330b Moved Me window into view with other Peer containers. 2019-04-01 15:08:25 +02:00
Håvar Aambø Fosstveit
9b78a81ef0 Added logo and styling options 2019-04-01 10:53:44 +02:00
Håvar Aambø Fosstveit
4d21e7b4e9 Put theme into config 2019-04-01 10:21:14 +02:00
Håvar Aambø Fosstveit
63b13e4e33 Merge branch 'feature-material-webpack' into develop 2019-04-01 09:30:08 +02:00
Håvar Aambø Fosstveit
37ccb6a001 Added autohiding of control elements 2019-04-01 09:28:14 +02:00
Håvar Aambø Fosstveit
513c75adde Fix for chat CSS in Safari 2019-04-01 09:09:26 +02:00
Håvar Aambø Fosstveit
77298b6f2e Lint clean up 2019-03-31 22:22:25 +02:00
Håvar Aambø Fosstveit
2f19746fa9 Updated a lot of components to PureComponents. Better performance. 2019-03-29 23:56:57 +01:00
Håvar Aambø Fosstveit
6a9ac30a8b Added filmstrip and settings back. Still some issues with layout if a peer shares screen in filmstrip. 2019-03-29 15:28:03 +01:00
Håvar Aambø Fosstveit
0449d6ff20 Massive change. Changed to react-scripts (webpack) for building. Changed to material-ui where applicable. Changed to CSS-in-JS. 2019-03-29 14:12:13 +01:00
Håvar Aambø Fosstveit
76e9795d2f Merge branch 'develop' 2018-12-20 11:09:13 +01:00
Håvar Aambø Fosstveit
1d9668fa46 Merge branch 'develop' 2018-12-11 12:32:55 +01:00
371 changed files with 60335 additions and 13085 deletions

40
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View file

@ -0,0 +1,40 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. ...
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Branch/Versions:**
If you are developer, on which branch is this.
If you are reporting as user, on which version or location you experienced the issue.
Version is available under the 3 dots in the topbar under about.
**Server (if available please complete the following information):**
- OS: [e.g. Debian 11]
**Client:**
- Browser [e.g. chrome, safari, firefox, edge, ...]
- Browser version [e.g. 99]
- other [e.g. mobil browser under ios]
**Additional context**
Add any other context about the problem here.

10
.github/ISSUE_TEMPLATE/custom.md vendored Normal file
View file

@ -0,0 +1,10 @@
---
name: Custom issue template
about: Describe this issue template's purpose here.
title: ''
labels: ''
assignees: ''
---

View file

@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

106
.github/workflows/develop-deb.yml vendored Normal file
View file

@ -0,0 +1,106 @@
name: Debian package
on:
push:
branches: [ master ]
# pull_request:
# branches: [ develop ]
jobs:
build:
runs-on: ubuntu-latest
env:
CI: false
strategy:
matrix:
node-version: [16.x]
steps:
- uses: actions/checkout@v2
with:
path: edumeet
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
- name: Get eduMEET version
id: get-version
run: |
echo "::set-output name=VERSION::$(cat edumeet/server/package.json | jq -r '.version')"
- name: Build Debian package
id: build-deb
run: |
cd edumeet
cp server/config/config.example.js server/config/config.js
cp server/config/config.example.yaml server/config/config.yaml
cp app/public/config/config.example.js app/public/config/config.js
cd app
yarn install && yarn build
cd ../server
yarn install && yarn build
cat <<< $(jq '.bundleDependencies += .dependencies' package.json) > package.json
npm pack
VERSION=${{ steps.get-version.outputs.VERSION }}
DATE=$(date)
mkdir -p /home/runner/package
cd /home/runner/package
mkdir DEBIAN
mkdir -p usr/local/src/edumeet/server
mkdir -p etc/systemd/system/
tar -xf /home/runner/work/***/***/***/server/***-server-$VERSION.tgz package/ 1>/dev/null 2>/dev/null || true
mv package/* usr/local/src/edumeet/server/
mv /home/runner/work/***/***/***/*.service etc/systemd/system/
rm -rf package
touch DEBIAN/md5sums
touch DEBIAN/md5sums
touch DEBIAN/control
#find . -type f ! -regex '.*.hg.*' ! -regex '.*?debian-binary.*' ! -regex '.*?DEBIAN.*' -printf '%P ' | xargs md5sum 1>/dev/null 2>/dev/null || true
#
cat > DEBIAN/control <<EOF
Package: edumeet
Version: $VERSION
Maintainer: eduMEET team (${{ github.server_url }}/${{ github.repository }})
Section: admin
Date : $DATE
Architecture: amd64
Priority: optional
Description: eduMMET is multiparty web-meetings based on mediasoup and WebRTC
Packet created from ${{ github.ref_name }} branch, commit:${{ github.sha }}
Visit ${{ github.server_url }}/${{ github.repository }}/tree/${{ github.ref_name }} for details
Depends: nodejs (>= 16), redis
EOF
#
cat > DEBIAN/postinst <<EOF
#!/bin/bash
mkdir -p /etc/edumeet/
ln -s /usr/local/src/edumeet/server/config/config.js /etc/edumeet/server-config.js || true
ln -s /usr/local/src/edumeet/server/dist/config/config.yaml /etc/edumeet/server-config.yaml || true
ln -s /usr/local/src/edumeet/server/public/config/config.js /etc/edumeet/client-config.js || true
systemctl daemon-reload
systemctl enable edumeet
echo "eduMEET multiparty meeting is installed.\n"
echo "\n\nClient and server configuration files are in /etc/edumeet directory\n"
echo "Please visit ${{ github.server_url }}/${{ github.repository }}/tree/${{ github.ref_name }} for configuration details.\n\n"
echo "\n\nAfter configuration, start service with 'sudo systemctl start edumeet' command.\n\n"
EOF
#
chmod 775 DEBIAN/postinst
cd ../
dpkg-deb -Zgzip --build package
mv /home/runner/package.deb /home/runner/edumeet-$VERSION.deb
- name : Upload artifact
uses: actions/upload-artifact@v2
with:
name: edumeet-${{ steps.get-version.outputs.VERSION }}
path: "/home/runner/edumeet-*.deb"
- name: Add to release assets
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ steps.get-version.outputs.VERSION }}
files: "/home/runner/edumeet-*.deb"

13
.gitignore vendored
View file

@ -1,9 +1,16 @@
node_modules/
/app/config/
!/app/config/config.example.js
/app/build/
/app/public/config/config.js
/app/public/images/logo.*
!/app/public/images/logo.edumeet.svg
/server/config/
!/server/config/config.example.js
!/server/config/config.example.*
!/server/config/README.md
/server/public/
/server/certs/
/server/dist/
!/server/certs/mediasoup-demo.localhost.*
.vscode
/app/public/config/*.pem
yarn-error.log

View file

@ -1,15 +1,269 @@
# Changelog
### 1.1
## 3.5.3
Hotfix configuration issue
## 3.5.2
Security update for dependencies
## 3.5.1
* Updated Documentation
## 3.5.0
### Added
* Update build steps
* Update documentations
* Major chat refactoring
* Added chat badge displaying unread messages
* Merged file sharing + chat
* Save chat history (both in leave screen and in chat directly)
* Sorting messages
* Format messages
* Combine messages
* Local recording (chrome, firefox, edge)
* This is still default off in config because of bad UX connected to getUserMedias
* New app configuration system
* New server configuration system
* Add leaving room confirmation dialog
* New audio config with audio profiles
* New translations
* Screen Sharing now supports audio (chrome, edge)
* Add QoS set DSCP bits in IP header according to new option networkPriorities in app config
Our media traffic should get now higher priority where QoS has been implemented.
Routers will add higher priority or put media packets to low latency queue.
If QoS implemented in L2 too, then switches also set the L2 CoS bits according DSCP.
WIFI AP-s that implements QoS, also based on it could activate the multimedia extension MMS.
Hopefully it will help and add little bit more priority lower latency in congested networks.
At the time of this writing it is only implemented in Chrome.
### Improved
* Scalability and performance:
* Improvements for handling simulcast and video container size
* Improved performance for encryption of media (+25% capacity)
* Improved balancing of peers to workers
* CSS for mobile
* UI improvements (bugs fixes) #922
* Improved button layout
* Improved login dialog
* Added bcrypt for local auth strategy
### Fixed
* Fix auto unmute buttons on separate bar
* Fix browser version comparison
* Safari Screen Share Bug Fix
* Fix session overwrites
* Fix loosing the current language after leaving the room)
* Extra video duplication fix
* Fix loosing the current language after leaving the room)
* Fix notifications (they were displayed always in English)
* Translation updates
* A lot of bugs in auth
* Sanitizations for room names
## 3.4.0
### Added
* Multiparty meeting renamed to edumeet
* Merged room selector- and join- dialog - default keyboard focus on login field
* Localization selectable
* Added aspect ratio 16 : 9 and this is default now, ref #439
* New worker load calculation so router selection is based on that and not random anymore
* New permissions and roles:
* Propagate userRoles to client state, ref #437
* Extend userRoles and use the new audio, video permissions, ref #437
* New permission to modify peer roles
* Create room actions for giving and taking roles
* Add functions to client for modifying roles live
* Ability to give roles to users
* Add new permission to config
* Add room to userMapping. Example of giving moderator if there is no authenticated user
* Promote all peers from lobby when a peer joins with the PROMOTE_PEER permission and activateOnHostJoin is true in config
* Make menus more intuitive on mobile
* Simplify electron screenshare check
* Logo support
* Improve autoMute mic-indicators, Improve audio level scaling
* Clean up participant list
* Add indicator for peers in focus. Ref #360
* TCP enabled by default, prefer UDP
* Ability for Prometheus exporter to listen on localhost
* Make list headers bolder
* Trim displayName inputs. Add random number to Guest displayName.
* Removed facingMode from mobile
* Documentation for prometheus exporter
* Added switching of own video mirror in settings
* Added hiding of own videos
* Request audio and webcam permission at once, when user is requesting media
* Add initial support for local and saml auth
* Local login form
* Add bcrypt encrypted passwords for local strategy
* Add displayName mapping to usermapping
* Add saml attriute mappings
* Use shared cookieparser for web and websocket
* Update TopBar leave button
* Add joinAudio capability
* Standardize Auth button
### Migration
from last master version:
* Copy paste defaultAudio and centralAudioOtions from config.example.js to config.js
* Copy paste whole theme from config.example.js to config
* Configure logo in config.js
### Upgrade depencies
* webtorrent from 0.107.17 to 0.108.1 …
* Upgrade React-scripts
### Languages
* Updates translations: hu, tr, no, pl, uk
* Addad translations: Hindi (hi), Russian (ru), Kazakh (ka)
### Bugfixes
* Hopefully fix to silent peer issue, ref #256
* Set timeout for TURN API request, fixes #484
* Possible fix for #582 Crackling sound
* Fix for #444 Settings persistence
* Fix Audio settings from config.js take no effect
* Fix only firefox handles applyConstraints to audio tracks correctly
* Fix (autoMuted) mic too big click area
* Fix userRoles check
* Fix spoltights ignoring maxLastN
* Fix wrong config parameter naming (voiceActivatedUnmute)
* Fix locale checking state
* Fix express error handler
* Add constraint for user facing camera. Update media devices properly
* Cleanup on close
* Fixed null values for peers not yet assigned to a router
* Fix URL sanitizer bug
* Removed audio request modification
* Fix race in spotlights
* Fix piping bug when peers returning to router
* Fix piped router count
* Add comma to prometheus config code
* Removed code that is problematic and also unused
* Remove duplicated callbackURL
* Fix moderator buttons layout
* Fix: Special chars are not sanitized in URL
* Fix another roomId bug
* Tidy: replace obj.entries with obj.values to avoid unused key
* Fix close room link
## 3.3
* Add: Rooms now scale across cores
* Add: Permissions and roles. Users can now have different roles (moderator, admin etc.) that give different permissions.
* Add: TURN API or fallback TURN server
* Add: Configurable room size limit
* Add: Prometheus monitoring support
* Add: Possible to share several videos (ex: 2 webcams)
* Add: Configurable audio settings (echocancellation etc.)
* Add: Configurable audio output device (in supported browsers)
* Add: Audio auto mute/unmute based on volume
* Add: Handle unsupported browsers properly
* Add: Lots of appearance settings
* Add: Side drawer can now stay permanently open
* Add: Move control buttons to separate control bar
* Add: Can now "raise hand"
* Add: Screen sharing in Safari 13+, Opera and Edge
* Add: Extended advanced info about network in client
* Add: Configurable screen sharing frame rate
* Add: Help and About dialogs
* Add: More keyboard shortcuts
* Add: Quality indicator on videos
* Add: More translations
* Fix: Various UI fixes and improvements
* Fix: Better audio/video device handling
* Fix: Update keyboard shortcut handling
* Fix: Authentication for load balanced scenarios
* Fix: Signaling when entering lobby
* Fix: Signaling timeouts and retries
* Fix: Filesharing fixes (sharing same file twice, etc.)
* Fix: Better handling of hark
* Fix: Use applyContraints instead of restarting producers
* Fix: Now handles reconnects properly if client loses connection
* Fix: Rotating devices don't show rotated videos
* Fix: Various fixes to client authentication
## 3.2.1
* Fix: permananent top bar by default
* Fix: `httpOnly` mode https redirect
* Add some extra checks for video stream and track
* Add Italian translation
* Add Czech translation
* Add new server option `trustProxy` for load balancing http only use case
* Add HAproxy load balance example
* Add LTI LMS integration documentation
* Fix spacing of leave button
* Fix for sharing same file multiple times
## 3.2
* Add munin plugin
* Add `muted=true` search param to disable audio by default
* Modify webtorrent tracker
* Add key shortcut `space` for audio mute
* Add key shortcut `v` for video mute
* Add user configurable LastN
* Add option to permananent top bar (permanent by default)
* Update mediasoup server
* Add `simulcast` options to app config (disabled by default)
* Add `stats` option to get counts of rooms and peers
* Add `httpOnly` option for loadbalancer backend setups
* LTI integration for LMS systems like moodle
* Add translations (12+1 languages)
* Add support IPv6
* Many other fixes and refactorings
## 3.1
* Browser session storage
* Virtual lobby for rooms
* Allow minimum TLSv1.2 and recommended ciphers
* Code splitting for faster load times
* Various GUI fixes
* Internationalization support
* Can require sign in for access
## 3.0
* Updated to mediasoup v3
* Replace lib "passport-datporten" with "openid-client" (a general OIDC certified client)
* OpenID Connect discovery
* Auth code flow
* Add spdy http2 support.
* Notice it does not supports node 11.x
* Updated to Material UI v4
## 2.0
* Material UI
* Separate settings for lastN for desktop and mobile
## 1.2
* Add Lock Room feature
* Fix suspended Web Audio context / fixed delayed getUsermedia
* Added support for the new getdisplaymedia API in Chrome 72
## 1.1
* Moved Filesharing code out from React code to RoomClient
* Major cleanup of CSS. Variables for most colors and sizes exposed in :root
* Started using React Context instead of middleware
* Small fixes to buttons and layout
### 1.0
## 1.0
* Fixed toolarea button based on feedback from users
* Added possibility to move video to separate window
* Added SIP gateway
### RC1 1.0
## RC1 1.0
* First stable release?

3
CONTRIBUTING.md Normal file
View file

@ -0,0 +1,3 @@
Source code contributions should pass static code analysis as performed by `npm run lint` in `server` and `app` respectively.
Please contribute by creating your pull requests against the `develop` branch.

21
LICENSE.md Normal file
View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2020 GÉANT Association
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

61
LTI/LTI.md Normal file
View file

@ -0,0 +1,61 @@
# Learning Tools Interoperability (LTI)
## LTI
Read more about IMS Global defined interface for tools like our VideoConference system integration with Learning Management Systems(LMS) (e.g. moodle).
See: [IMS Global Learning Tool Interoperability](https://www.imsglobal.org/activity/learning-tools-interoperability)
We implemented LTI interface version 1.0/1.1
### Server config auth section LTI settings
Set in server configuration a random key and secret
``` json
auth :
{
lti :
{
consumerKey : 'key',
consumerSecret : 'secret'
},
}
```
### Configure your LMS system with secret and key settings above
#### Auth tool URL
Set tool URL to your server with path /auth/lti
``` url
https://mm.example.com/auth/lti
```
#### In moodle find external tool plugin setting and external tool action
See: [moodle external tool settings](https://docs.moodle.org/38/en/External_tool_settings)
#### Add and activity
![Add external tool](lti1.png)
#### Setup Activity
##### Activity setup basic form
Open fully the settings **Click on show more!!**
![Add external tool config](lti2.png)
##### Empty full form
![Opened external tool config](lti3.png)
##### Filled out form
![Filled out external tool config](lti4.png)
## moodle plugin
Alternatively you can use edumeet moodle plugin:
[https://github.com/edumeet/moodle-mod_edumeet](https://github.com/edumeet/moodle-mod_edumeet)

BIN
LTI/lti1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

BIN
LTI/lti2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
LTI/lti3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

BIN
LTI/lti4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

293
README.md
View file

@ -1,118 +1,291 @@
# multiparty-meeting
# ![edumeet logo](/app/public/images/logo.edumeet.svg) **WebRTC meeting service using [mediasoup](https://mediasoup.org).**
Official website: [edumeet.org](https://edumeet.org)
A WebRTC meeting service using [mediasoup](https://mediasoup.org).
https://user-images.githubusercontent.com/37835902/152279867-639db9bc-bf78-430f-b96f-d17733527474.mp4
Try it online at https://letsmeet.no. You can add /roomname to the URL for specifying a room.
Try it online at [letsmeet.no](https://letsmeet.no)
## Features
* Audio/Video
* Chat
* Screen sharing
* File sharing
* Different video layouts
## Main features
There is also a SIP gateway that can be found [here](https://github.com/havfo/multiparty-meeting-sipgw). To try it, call: roomname@letsmeet.no.
| Feature | Description |
| ------------- | ------------- |
| **A/V streaming** | Share your microphone and camera + additional video stream |
| **Video layouts** | Choose between **Democratic** and **Filmstrip** views. More in progress. |
| **Screen sharing** | Share your screen to make some presentation right from your desktop |
| **File sharing** | Share your files with the peers (torrent solution under the hood) |
| **Chat messages** | Text conversation with other participants |
| **Local Recording** | Record window/tab/screen content in browser supported formats with room audio and save them (**disabled by default**) |
| **Authentication** | Supported types: **OIDC**, **SAML**, **local db (text-based)** |
## Docker
If you want the automatic approach, you can find a docker image [here](https://hub.docker.com/r/misi/mm/).
## Manual installation
### Internationalization (22 languages)
<details>
<summary>Help us with translations:exclamation:</summary>
#### How to contribute?
1. Continue to translate existing [language file](/app/src/intl/translations)
2. find the _null_ values
> "settings.language": null,
3. replace them based on the _en.json_ file
> "settings.language": "Select language",
4. If your language is not listed, create a new translation _.json_ file..
> copy en.json to [_"two letter country code"_.json](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) and translate to your languange
5. make a Pull Request, or send us a file by [e-mail](mailto:community@lists.edumeet.org)
Thank you in advance!
</details>
* Clone the project:
### Local Recording
<details>
<summary>See more</summary>
* Local Recording records the browser window video and audio. From the list of media formats that your browser supports you can select your preferred media format in the settings menu advanced video menu setting. MediaRecorder makes small chucks of recording and these recorded blob chunks temporary stored in IndexedDB, if IndexedDB implemented in your browser. Otherwise it stores blobs in memory in an array of blobs.
Local Recording creates a local IndexedDB with the name of the starting timestamp (unix timestamp format) And a storage called chunks. All chunks read in an array and created a final blob that you can download. After blobs array concatenation as a big blob, this big blob saved as file, and finally we delete the temporary local IndexedDB.
* Local recording is **disabled** by default. It could be enabled by setting _localRecordingEnabled_ to true in (./app/public/config/config.js)
* **WARNING**: Take care that local recording will increase cpu, memory and disk space consumption.
**Enough free disk space has to be provided!!!**
Keep in mind that Browsers don't allow to use all the disk free capacity!
See more info about browsers storage limits:
* <https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Browser_storage_limits_and_eviction_criteria#storage_limits>
* <https://chromium.googlesource.com/chromium/src/+/refs/heads/master/storage/browser/quota/quota_settings.cc#68>
</details>
# Installation
See here for [Docker](https://github.com/edumeet/edumeet-docker/) or [Ansible](https://github.com/edumeet/edumeet-ansible/) (based on Docker) installation procedures
## Debian & Ubuntu based operating systems (.deb package)
* Prerequisites: Installed NodeJS (v16.x) as described in [Manual installation](#manual-installation-build) section.
* See [Configuration](#configuration) section for client and server configuration details.
* Download from [releases](https://github.com/edumeet/edumeet/releases) assets, or latest job [artifact](https://github.com/edumeet/edumeet/actions?query=workflow%3ADeployer+branch%3Amaster+is%3Asuccess).
```bash
$ git clone https://github.com/havfo/multiparty-meeting.git
$ cd multiparty-meeting
# Unzip the file
unzip edumeet.zip
# Install the package
sudo apt install edumeet/edumeet.deb
# After package installation, don't forget to edit configuration files.
sudo nano /etc/educonf/client-config.js
sudo nano /etc/educonf/server-config.js
sudo nano /etc/educonf/server-config.yaml
# Finally, start the service by (it's enabled by default)
sudo systemctl start edumeet
```
* Copy `server/config.example.js` to `server/config.js` :
## Manual installation (build)
Installation example is based on Debian/Ubuntu Linux operating system.
1. Install [NodeJS (v16.x)](https://github.com/nodesource/distributions) and [Yarn ](https://classic.yarnpkg.com/en/docs/install#debian-stable) package manager
- NodeJS (v16.x) [Debian/Ubuntu](https://github.com/nodesource/distributions#deb)
```bash
$ cp server/config.example.js server/config.js
# Using Ubuntu
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs
# Using Debian, as root
curl -fsSL https://deb.nodesource.com/setup_16.x | bash -
apt-get install -y nodejs
```
- Yarn package manager:
```bash
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update && sudo apt install yarn
```
2. Install all required dependencies
```bash
sudo apt update && sudo apt install -y curl git python python3-pip build-essential redis openssl libssl-dev pkg-config
```
3. Clone eduMEET git repository
```bash
git clone https://github.com/edumeet/edumeet.git
cd edumeet
```
(switch to the "develop" branch to get the latest features)
```bash
git checkout develop
```
### Configuration
**eduMEET** will start and run normally with just default settings. If there is no configuration files, it will automatically detect your host IP address, and listen on port 443 (https). In order to change default values (e.g. certificates), or activate features (e.g. authentication), use appropriate configuration file (see below for details).
**:warning: Note:** There are separate configuration files for eduMEET application and eduMEET server:
**eduMEET application (app)** for: enabling login, change logo or background, adjust A/V parameters, etc...
Copy [example](/app/public/config/config.example.js) template and edit values (see all available parameters in [./app/public/config/README.md](/app/public/config/README.md))
```bash
cp app/public/config/config.example.js app/public/config/config.js
```
* Copy `app/config.example.js` to `app/config.js` :
**eduMEET server** require **:warning:two** configuration files: **config.js**, and **config.{_json_, _yaml_ or _toml_}** (multiple format supported)
**1. config.js** for setting authentication methods and user roles.
Copy example template and edit values (see additional details in [example](/server/config/config.example.js) file)
```bash
$ cp app/config.example.js app/config.js
cp server/config/config.example.js server/config/config.js
```
* Edit your two `config.js` with appropriate settings (listening IP/port, logging options, **valid** TLS certificate, etc).
**2. config.{_json_, _yaml_ or _toml_}** for configuring: server port, server certificates, [STUN/TURN](#turn-configuration) configuration, monitoring, etc... (See below examples of different configuration styles).
* Set up the browser app:
```bash
$ cd app
$ npm install
$ export NODE_ENV=production
$ gulp dist
[**:point_right: _config.yaml_**](/server/config/config.example.yaml) example:
```yaml
listeningPort: 443
tls:
key: /opt/edumeet/server/certs/privkey.pem
cert: /opt/edumeet/server/certs/cert.pem
```
This will build the client application and copy everythink to `server/public` from where the server can host client code to browser requests.
[**:point_right: _config.json_**](/server/config/config.example.json) example:
```javascript
{
"listeningPort" : "443",
"tls" : {
"cert" : "/opt/edumeet/server/certs/cert.pem",
"key" : "/opt/edumeet/server/certs/privkey.pem"
}
}
```
[**:point_right: _config.toml_**](/server/config/config.example.toml) example:
```toml
listeningPort = "443"
* Globally install `gulp-cli` NPM module (may need `sudo`):
[tls]
cert = "/opt/edumeet/server/certs/cert.pem"
key = "/opt/edumeet/server/certs/privkey.pem"
```
**:red_circle: IMPORTANT:** Use **only one** type for second configuration file (`yaml` file format is highly recommended)
Copy **only one** example template file and edit values (see all available parameters in [./server/config/README.md](/server/config/README.md))
```bash
$ npm install -g gulp-cli
cp server/config/config.example.yaml server/config/config.yaml
OR!!!
cp server/config/config.example.json server/config/config.json
OR!!!
cp server/config/config.example.toml server/config/config.toml
```
* Set up the server:
**:warning: NOTE:** application and server components **has to be rebuild** if configuration parameter is changed ([see build steps](#manual-installation-build)). Rebuild is not necessary for Docker or Debian (.deb) version, just restart container/service.
### Build
**Note:** It is highly recommended to use _yarn_ package manager.
```bash
$ cd ..
$ cd server
$ npm install
cd app
yarn && yarn build
cd ../server
yarn && yarn build
```
### Run
**Run on server** (as root or with sudo)
```bash
# Run the Node.js server application in a terminal:
cd server
sudo yarn start
```
## Run it locally
**Run locally** (for development)
* Run the Node.js server application in a terminal:
* The newest build is always in **develop branch** if you want to make a contribution/pull request use it instead of master branch.
```bash
$ node server.js
```
* test your service in a webRTC enabled browser: `https://yourDomainOrIPAdress:3443/roomname`
# run a live build from app folder:
app$ yarn start
## Deploy it in a server
* Stop your locally running server. Copy systemd-service file `multiparty-meeting.service` to `/etc/systemd/system/` and check location path settings:
```bash
$ cp multiparty-meeting.service /etc/systemd/system/
$ edit /etc/systemd/system/multiparty-meeting.service
# and run server in server folder:
server$ yarn start
```
* reload systemd configuration and start service:
Note: To avoid running server as root, redirects privileged ports with firewall rules:
```bash
$ systemctl daemon-reload
$ systemctl start multiparty-meeting
#adjust ports to your needs
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443
sudo iptables -t nat -A OUTPUT -p tcp --dport 443 -o lo -j REDIRECT --to-port 8443
sudo iptables -t nat -A PREROUTING -p tcp --dport 3443 -j REDIRECT --to-ports 8443
sudo iptables -t nat -A OUTPUT -p tcp --dport 3443 -o lo -j REDIRECT --to-port 8443
# make it persistent
sudo apt install iptables-persistent
sudo iptables-save > /etc/iptables/rules.v4
sudo ip6tables-save > /etc/iptables/rules.v6
```
* Test your service in a webRTC enabled browser: `https://yourDomainOrIPAdress:3443/roomname`
**Run as a service** (systemd)
* if you want to start multiparty-meeting at boot time:
```bash
$ systemctl enable multiparty-meeting
# Stop your locally running server. Copy systemd-service file `edumeet.service` to `/etc/systemd/system/` and check location path settings:
cp edumeet.service /etc/systemd/system/
# modify the install paths, if required
sudo edit /etc/systemd/system/edumeet.service
# Reload systemd configuration and start service:
sudo systemctl daemon-reload
sudo systemctl start edumeet
# If you want to start edumeet at boot time:
sudo systemctl enable edumeet
```
## Ports and firewall
| Port | protocol | description |
| ---- | ----------- | ----------- |
| 443 | tcp | default https webserver and signaling - adjustable in `server/config/config.yaml`) |
| 4443 | tcp | default `yarn start` port for developing with live browser reload, not needed in production environments - adjustable in app/package.json) |
| 40000-49999 | udp, tcp | media ports - adjustable in `server/config/config.yaml` |
* 3443/tcp (default https webserver and signaling - adjustable in `server/config.js`)
* 3000/tcp (default `gulp live` port for developing with live browser reload, not needed in production enviroments - adjustable in app/gulpfile.js)
* 40000-49999/udp/tcp (media ports - adjustable in `server/config.js`)
## Load balanced installation
To deploy this as a load balanced cluster, have a look at [HAproxy](/docs/HAproxy.md).
## Learning management integration
To integrate with an LMS (e.g. Moodle), have a look at [LTI](LTI/LTI.md).
## TURN configuration
* You need an addtional [TURN](https://github.com/coturn/coturn)-server for clients located behind restrictive firewalls! Add your server and credentials to `app/config.js`
If you are part of the GEANT eduGAIN, you can request your turn api key at [https://turn.geant.org/](https://turn.geant.org/)
You need an additional [TURN](https://github.com/coturn/coturn)-server for clients located behind restrictive firewalls!
Add your server and credentials to `server/config/config.yaml`
## Community-driven support
| Type | |
| ----------- | ----------- |
| Open mailing list | community@lists.edumeet.org |
| Subscribe | lists.edumeet.org/sympa/subscribe/community/ |
| Open archive | lists.edumeet.org/sympa/arc/community/ |
## Authors
* Håvar Aambø Fosstveit
* Stefan Otto
* Mészáros Mihály
* Roman Drozd
* Rémai Gábor László
* Piotr Pawałowski
This started as a fork of the [work](https://github.com/versatica/mediasoup-demo) done by:
* Iñaki Baz Castillo [[website](https://inakibaz.me)|[github](https://github.com/ibc/)]
* Iñaki Baz Castillo [[website](https://inakibaz.me)|[github](https://github.com/ibc/)]
## License
MIT
MIT License (see `LICENSE.md`)
Contributions to this work were made on behalf of the GÉANT project, a project that has received funding from the European Unions Horizon 2020 research and innovation programme under Grant Agreement No. 731122 (GN4-2). On behalf of GÉANT project, GÉANT Association is the sole owner of the copyright in all material which was developed by a member of the GÉANT project.
GÉANT Vereniging (Association) is registered with the Chamber of Commerce in Amsterdam with registration number 40535155 and operates in the UK as a branch of GÉANT Vereniging. Registered office: Hoekenrode 3, 1102BR Amsterdam, The Netherlands. UK branch address: City House, 126-130 Hills Road, Cambridge CB2 1PQ, UK.

View file

@ -1,26 +0,0 @@
{
"plugins":
[
"@babel/plugin-proposal-object-rest-spread",
"jsx-control-statements",
"@babel/plugin-proposal-class-properties",
"@babel/plugin-transform-runtime"
],
"presets":
[
[
"@babel/preset-env",
{
"targets": {
"browsers": [
"chrome >= 67",
"edge >= 17",
"firefox >= 60",
"safari >= 12"
]
}
}
],
"@babel/react"
]
}

2
app/.env Normal file
View file

@ -0,0 +1,2 @@
REACT_APP_VERSION=$npm_package_version
REACT_APP_NAME=$npm_package_name

2
app/.eslintignore Normal file
View file

@ -0,0 +1,2 @@
.eslintrc.js
src/react-app-env.d.ts

View file

@ -1,231 +0,0 @@
module.exports =
{
env:
{
browser: true,
es6: true,
node: true
},
plugins:
[
'import',
'react',
'jsx-control-statements'
],
extends:
[
'eslint:recommended',
'plugin:react/recommended',
'plugin:jsx-control-statements/recommended'
],
settings:
{
react:
{
pragma: 'React',
version: '16'
}
},
parser: "babel-eslint",
parserOptions:
{
ecmaVersion: 2018,
sourceType: 'module',
ecmaFeatures:
{
impliedStrict: true,
jsx: true
}
},
rules:
{
'array-bracket-spacing': [ 2, 'always',
{
objectsInArrays: true,
arraysInArrays: true
}],
'arrow-parens': [ 2, 'always' ],
'arrow-spacing': 2,
'block-spacing': [ 2, 'always' ],
'brace-style': [ 2, 'allman', { allowSingleLine: true } ],
'camelcase': 2,
'comma-dangle': 2,
'comma-spacing': [ 2, { before: false, after: true } ],
'comma-style': 2,
'computed-property-spacing': 2,
'constructor-super': 2,
'func-call-spacing': 2,
'generator-star-spacing': 2,
'guard-for-in': 2,
'indent': [ 2, 'tab', { 'SwitchCase': 1 } ],
'key-spacing': [ 2,
{
singleLine:
{
beforeColon: false,
afterColon: true
},
multiLine:
{
beforeColon: true,
afterColon: true,
align: 'colon'
}
}],
'keyword-spacing': 2,
'linebreak-style': [ 2, 'unix' ],
'lines-around-comment': [ 2,
{
allowBlockStart: true,
allowObjectStart: true,
beforeBlockComment: true,
beforeLineComment: false
}],
'max-len': [ 2, 90,
{
tabWidth: 2,
comments: 110,
ignoreUrls: true,
ignoreStrings: true,
ignoreTemplateLiterals: true,
ignoreRegExpLiterals: true
}],
'newline-after-var': 2,
'newline-before-return': 2,
'newline-per-chained-call': 2,
'no-alert': 2,
'no-caller': 2,
'no-case-declarations': 2,
'no-catch-shadow': 2,
'no-class-assign': 2,
'no-confusing-arrow': 2,
'no-console': 2,
'no-const-assign': 2,
'no-debugger': 2,
'no-dupe-args': 2,
'no-dupe-keys': 2,
'no-duplicate-case': 2,
'no-div-regex': 2,
'no-empty': [ 2, { allowEmptyCatch: true } ],
'no-empty-pattern': 2,
'no-else-return': 0,
'no-eval': 2,
'no-extend-native': 2,
'no-ex-assign': 2,
'no-extra-bind': 2,
'no-extra-boolean-cast': 2,
'no-extra-label': 2,
'no-extra-semi': 2,
'no-fallthrough': 2,
'no-func-assign': 2,
'no-global-assign': 2,
'no-implicit-coercion': 2,
'no-implicit-globals': 2,
'no-inner-declarations': 2,
'no-invalid-regexp': 2,
'no-irregular-whitespace': 2,
'no-lonely-if': 2,
'no-mixed-operators': 2,
'no-mixed-spaces-and-tabs': 2,
'no-multi-spaces': 2,
'no-multi-str': 2,
'no-multiple-empty-lines': [ 2, { max: 1, maxEOF: 0, maxBOF: 0 } ],
'no-native-reassign': 2,
'no-negated-in-lhs': 2,
'no-new': 2,
'no-new-func': 2,
'no-new-wrappers': 2,
'no-obj-calls': 2,
'no-proto': 2,
'no-prototype-builtins': 0,
'no-redeclare': 2,
'no-regex-spaces': 2,
'no-restricted-imports': 2,
'no-return-assign': 2,
'no-self-assign': 2,
'no-self-compare': 2,
'no-sequences': 2,
'no-shadow': 2,
'no-shadow-restricted-names': 2,
'no-spaced-func': 2,
'no-sparse-arrays': 2,
'no-this-before-super': 2,
'no-throw-literal': 2,
'no-undef': 2,
'no-unexpected-multiline': 2,
'no-unmodified-loop-condition': 2,
'no-unreachable': 2,
'no-unused-vars': [ 1, { vars: 'all', args: 'after-used' }],
'no-use-before-define': [ 2, { functions: false } ],
'no-useless-call': 2,
'no-useless-computed-key': 2,
'no-useless-concat': 2,
'no-useless-rename': 2,
'no-var': 2,
'no-whitespace-before-property': 2,
'object-curly-newline': 0,
'object-curly-spacing': [ 2, 'always' ],
'object-property-newline': [ 2, { allowMultiplePropertiesPerLine: true } ],
'prefer-const': 2,
'prefer-rest-params': 2,
'prefer-spread': 2,
'prefer-template': 2,
'quotes': [ 2, 'single', { avoidEscape: true } ],
'semi': [ 2, 'always' ],
'semi-spacing': 2,
'space-before-blocks': 2,
'space-before-function-paren': [ 2, { anonymous: 'never', named: 'never', 'asyncArrow': 'always'}],
'space-in-parens': [ 2, 'never' ],
'spaced-comment': [ 2, 'always' ],
'strict': 2,
'valid-typeof': 2,
'eol-last': 0,
'yoda': 2,
// eslint-plugin-import options.
'import/extensions': 2,
'import/no-duplicates': 2,
// eslint-plugin-react options.
'jsx-quotes': [ 2, 'prefer-single' ],
'react/display-name': [ 2, { ignoreTranspilerName: false } ],
'react/forbid-prop-types': 0,
'react/jsx-boolean-value': 2,
'react/jsx-closing-bracket-location': 2,
'react/jsx-curly-spacing': 2,
'react/jsx-equals-spacing': 2,
'react/jsx-handler-names': 2,
'react/jsx-indent-props': [ 2, 'tab' ],
'react/jsx-indent': [ 2, 'tab' ],
'react/jsx-key': 2,
'react/jsx-max-props-per-line': 0,
'react/jsx-no-bind': 0,
'react/jsx-no-duplicate-props': 2,
'react/jsx-no-literals': 0,
'react/jsx-no-undef': 0,
'react/jsx-pascal-case': 2,
'react/jsx-sort-prop-types': 0,
'react/jsx-sort-props': 0,
'react/jsx-uses-react': 2,
'react/jsx-uses-vars': 2,
'react/no-danger': 2,
'react/no-deprecated': 2,
'react/no-did-mount-set-state': 2,
'react/no-did-update-set-state': 2,
'react/no-direct-mutation-state': 2,
'react/no-is-mounted': 2,
'react/no-multi-comp': 0,
'react/no-set-state': 0,
'react/no-string-refs': 0,
'react/no-unknown-property': 2,
'react/prefer-es6-class': 2,
'react/prop-types': [ 2, { skipUndeclared: true } ],
'react/react-in-jsx-scope': 2,
'react/self-closing-comp': 2,
'react/sort-comp': 0,
'react/jsx-wrap-multilines': [ 2,
{
declaration: false,
assignment: false,
return: true
}]
}
};

386
app/.eslintrc.json Normal file
View file

@ -0,0 +1,386 @@
{
"env": {
"browser": true,
"es6": true,
"node": true
},
"overrides": [
{
"files": ["**/*.{ts,tsx}"],
"plugins": ["@typescript-eslint"],
"extends":[
"eslint:recommended",
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended"
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"project": "./tsconfig.json"
},
"settings": {
"import/resolver": {
"typescript": {
"alwaysTryTypes": true
}
}
},
"rules": {
"no-unused-vars" : 0,
"@typescript-eslint/ban-types" : 0,
"@typescript-eslint/ban-ts-comment" : 0,
"@typescript-eslint/ban-ts-ignore" : 0,
"@typescript-eslint/explicit-module-boundary-types" : 0,
"@typescript-eslint/member-delimiter-style" : [ 2,
{
"multiline" : { "delimiter": "semi", "requireLast": true },
"singleline" : { "delimiter": "semi", "requireLast": false }
}
],
"@typescript-eslint/no-explicit-any" : 0,
"@typescript-eslint/no-unused-vars" : [ 2,
{
"vars" : "all",
"args" : "after-used",
"ignoreRestSiblings" : false
}
],
"@typescript-eslint/no-use-before-define" : [ 2, { "functions": false } ],
"@typescript-eslint/no-empty-function" : 0,
"@typescript-eslint/no-non-null-assertion" : 0
}
}
],
"plugins": [
"import",
"react"
],
"extends": [
"eslint:recommended",
"plugin:react/recommended",
"react-app"
],
"settings": {
"react": {
"pragma": "React",
"version": "16"
}
},
"parser": "babel-eslint",
"parserOptions": {
"ecmaVersion": 2018,
"sourceType": "module",
"ecmaFeatures": {
"impliedStrict": true,
"jsx": true
}
},
"rules": {
"array-bracket-spacing": [
2,
"always",
{
"objectsInArrays": true,
"arraysInArrays": true
}
],
"arrow-parens": [
2,
"always"
],
"arrow-spacing": 2,
"block-spacing": [
2,
"always"
],
"brace-style": [
2,
"allman",
{
"allowSingleLine": true
}
],
"camelcase": 2,
"comma-dangle": 2,
"comma-spacing": [
2,
{
"before": false,
"after": true
}
],
"comma-style": 2,
"computed-property-spacing": 2,
"constructor-super": 2,
"func-call-spacing": 2,
"generator-star-spacing": 2,
"guard-for-in": 2,
"indent": [
2,
"tab",
{
"SwitchCase": 1
}
],
"key-spacing": [
2,
{
"singleLine": {
"beforeColon": false,
"afterColon": true
},
"multiLine": {
"beforeColon": true,
"afterColon": true,
"align": "colon"
}
}
],
"keyword-spacing": 2,
"linebreak-style": [
2,
"unix"
],
"lines-around-comment": [
2,
{
"allowBlockStart": true,
"allowObjectStart": true,
"beforeBlockComment": true,
"beforeLineComment": false
}
],
"max-len": [
2,
90,
{
"tabWidth": 2,
"comments": 110,
"ignoreUrls": true,
"ignoreStrings": true,
"ignoreTemplateLiterals": true,
"ignoreRegExpLiterals": true
}
],
"newline-after-var": 2,
"newline-before-return": 2,
"newline-per-chained-call": 2,
"no-alert": 2,
"no-caller": 2,
"no-case-declarations": 2,
"no-catch-shadow": 2,
"no-class-assign": 2,
"no-confusing-arrow": [
"error",
{
"allowParens": true
}
],
"no-console": 2,
"no-const-assign": 2,
"no-debugger": 2,
"no-dupe-args": 2,
"no-dupe-keys": 2,
"no-duplicate-case": 2,
"no-div-regex": 2,
"no-empty": [
2,
{
"allowEmptyCatch": true
}
],
"no-empty-pattern": 2,
"no-else-return": 0,
"no-eval": 2,
"no-extend-native": 2,
"no-ex-assign": 2,
"no-extra-bind": 2,
"no-extra-boolean-cast": 2,
"no-extra-label": 2,
"no-extra-semi": 2,
"no-fallthrough": 2,
"no-func-assign": 2,
"no-global-assign": 2,
"no-implicit-coercion": 2,
"no-implicit-globals": 2,
"no-inner-declarations": 2,
"no-invalid-regexp": 2,
"no-irregular-whitespace": 2,
"no-trailing-spaces": [
"error",
{
"ignoreComments": true
}
],
"no-lonely-if": 2,
"no-mixed-operators": 2,
"no-mixed-spaces-and-tabs": 2,
"no-multi-spaces": 2,
"no-multi-str": 2,
"no-multiple-empty-lines": [
2,
{
"max": 1,
"maxEOF": 0,
"maxBOF": 0
}
],
"no-native-reassign": 2,
"no-negated-in-lhs": 2,
"no-new": 2,
"no-new-func": 2,
"no-new-wrappers": 2,
"no-obj-calls": 2,
"no-proto": 2,
"no-prototype-builtins": 0,
"no-redeclare": 2,
"no-regex-spaces": 2,
"no-restricted-imports": 2,
"no-return-assign": 2,
"no-self-assign": 2,
"no-self-compare": 2,
"no-sequences": 2,
"no-shadow": 2,
"no-shadow-restricted-names": 2,
"no-spaced-func": 2,
"no-sparse-arrays": 2,
"no-this-before-super": 2,
"no-throw-literal": 2,
"no-undef": 2,
"no-unexpected-multiline": 2,
"no-unmodified-loop-condition": 2,
"no-unreachable": 2,
"no-unused-vars": [
1,
{
"vars": "all",
"args": "after-used"
}
],
"no-use-before-define": [
2,
{
"functions": false
}
],
"no-useless-call": 2,
"no-useless-computed-key": 2,
"no-useless-concat": 2,
"no-useless-rename": 2,
"no-var": 2,
"no-whitespace-before-property": 2,
"object-curly-newline": 0,
"object-curly-spacing": [
2,
"always"
],
"object-property-newline": [
2,
{
"allowMultiplePropertiesPerLine": true
}
],
"prefer-const": 2,
"prefer-rest-params": 2,
"prefer-spread": 2,
"prefer-template": 2,
"quotes": [
2,
"single",
{
"avoidEscape": true
}
],
"semi": [
2,
"always"
],
"semi-spacing": 2,
"space-before-blocks": 2,
"space-before-function-paren": [
2,
{
"anonymous": "never",
"named": "never",
"asyncArrow": "always"
}
],
"space-in-parens": [
2,
"never"
],
"spaced-comment": [
2,
"always"
],
"strict": 2,
"valid-typeof": 2,
"eol-last": 0,
"yoda": 2,
"import/extensions": 2,
"import/no-duplicates": 2,
"jsx-quotes": [
2,
"prefer-single"
],
"react/display-name": [
2,
{
"ignoreTranspilerName": false
}
],
"react/forbid-prop-types": 0,
"react/jsx-boolean-value": 2,
"react/jsx-closing-bracket-location": 2,
"react/jsx-curly-spacing": 2,
"react/jsx-equals-spacing": 2,
"react/jsx-handler-names": 2,
"react/jsx-indent-props": [
2,
"tab"
],
"react/jsx-indent": [
2,
"tab"
],
"react/jsx-key": 2,
"react/jsx-max-props-per-line": 0,
"react/jsx-no-bind": 0,
"react/jsx-no-duplicate-props": 2,
"react/jsx-no-literals": 0,
"react/jsx-no-undef": 0,
"react/jsx-pascal-case": 2,
"react/jsx-sort-prop-types": 0,
"react/jsx-sort-props": 0,
"react/jsx-uses-react": 2,
"react/jsx-uses-vars": 2,
"react/no-danger": 2,
"react/no-deprecated": 2,
"react/no-did-mount-set-state": 2,
"react/no-did-update-set-state": 2,
"react/no-direct-mutation-state": 2,
"react/no-is-mounted": 2,
"react/no-multi-comp": 0,
"react/no-set-state": 0,
"react/no-string-refs": 0,
"react/no-unknown-property": 2,
"react/prefer-es6-class": 2,
"react/prop-types": [
2,
{
"skipUndeclared": true
}
],
"react/react-in-jsx-scope": 2,
"react/self-closing-comp": 2,
"react/sort-comp": 0,
"react/jsx-wrap-multilines": [
2,
{
"declaration": false,
"assignment": false,
"return": true
}
]
}
}

View file

@ -1 +0,0 @@
package-lock=false

2
app/Procfile Normal file
View file

@ -0,0 +1,2 @@
react: npm start
electron: node src/electron-wait-react

View file

@ -1,7 +0,0 @@
/*
* <%= pkg.name %> v<%= pkg.version %>
* <%= pkg.description %>
* Copyright: 2017-<%= currentYear %> <%= pkg.author %>
* License: <%= pkg.license %>
*/

View file

@ -1,74 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Multiparty Meeting</title>
</head>
<style>
body{
margin:auto;
padding:0.5vmin;
text-align:center;
position: fixed;
left: 50%;
top: 40%;
width: 90%;
transform: translate(-50%, 0%);
background-image: url('/resources/images/background.svg');
background-attachment: fixed;
background-position: center;
background-size: cover;
background-repeat: repeat;
}
input:hover {opacity:0.9;}
input[type=text]{
font-size: 1.5em;
padding: 1.5vmin;
background-color: rgba(0,0,0,0.3);
border: 0;
color: #fff;
margin: 0.8vmin;
width: 50%;
}
button:hover {background-color: #28bd7b;}
button{
font-size: 1.5em;
padding: 1.5vmin;
margin: 0.8vmin;
background-color: #38cd8b;
border-radius: 1.8vmin;
color: #fff;
border: 0;
}
img{
height: 15vmin;
}
</style>
<body>
<a>
<img src='/resources/images/logo.svg'></img><br>
</a>
<input id="room" type="text" onkeypress="checkEnter(event)" value="" placeholder="your room name">
<button onclick = "start(location.href)">Go to room</button>
</body>
<script>
var room = document.getElementById("room");
var stateObj = { foo: "bar" };
room.addEventListener("input", function(e) {
console.log(e.charCode);
history.replaceState(stateObj, "Multiparty Meeting", "/"+room.value);
},true);
room.focus();
function start(target){
location.href;history.replaceState(stateObj, "Multiparty Meeting", "/");
window.location = target;
}
function checkEnter(event){
var x = event.charCode || event.keyCode;
if (x == 13 ) {
start(location.href);
}
}
</script>
</html>

View file

@ -1,19 +0,0 @@
module.exports =
{
chromeExtension : 'https://chrome.google.com/webstore/detail/fckajcjdaabdgnbdcmhhebdglogjfodi',
loginEnabled : false,
turnServers : [
{
urls : [
'turn:example.com:443?transport=tcp'
],
username : 'example',
credential : 'example'
}
],
requestTimeout : 10000,
transportOptions :
{
tcp : true
}
};

View file

@ -1,299 +0,0 @@
/**
* Tasks:
*
* gulp dist
* Generates the browser app in development mode (unless NODE_ENV is set
* to 'production').
*
* gulp live
* Generates the browser app in development mode (unless NODE_ENV is set
* to 'production'), opens it and watches for changes in the source code.
*
* gulp
* Alias for `gulp live`.
*/
const fs = require('fs');
const path = require('path');
const gulp = require('gulp');
const gulpif = require('gulp-if');
const gutil = require('gulp-util');
const plumber = require('gulp-plumber');
const rename = require('gulp-rename');
const change = require('gulp-change');
const header = require('gulp-header');
const touch = require('gulp-touch-cmd');
const browserify = require('browserify');
const watchify = require('watchify');
const envify = require('envify/custom');
const uglify = require('gulp-uglify-es').default;
const source = require('vinyl-source-stream');
const buffer = require('vinyl-buffer');
const del = require('del');
const mkdirp = require('mkdirp');
const ncp = require('ncp');
const eslint = require('gulp-eslint');
const stylus = require('gulp-stylus');
const cssBase64 = require('gulp-css-base64');
const nib = require('nib');
const browserSync = require('browser-sync');
const PKG = require('./package.json');
const BANNER = fs.readFileSync('banner.txt').toString();
const BANNER_OPTIONS =
{
pkg : PKG,
currentYear : (new Date()).getFullYear()
};
const OUTPUT_DIR = '../server/public';
const appOptions = require('./config/config');
const SERVER_CONFIG = '../server/config/config';
// Set Node 'development' environment (unless externally set).
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
gutil.log(`NODE_ENV: ${process.env.NODE_ENV}`);
function logError(error)
{
gutil.log(gutil.colors.red(error.stack));
}
function bundle(options)
{
options = options || {};
const watch = Boolean(options.watch);
let bundler = browserify(
{
entries : PKG.main,
extensions : [ '.js', '.jsx' ],
// required for sourcemaps (must be false otherwise).
debug : process.env.NODE_ENV === 'development',
// required for watchify.
cache : {},
// required for watchify.
packageCache : {},
// required to be true only for watchify.
fullPaths : watch
})
.transform('babelify')
.transform(envify(
{
NODE_ENV : process.env.NODE_ENV,
_ : 'purge'
}));
if (watch)
{
bundler = watchify(bundler);
bundler.on('update', () =>
{
const start = Date.now();
gutil.log('bundling...');
rebundle();
gutil.log('bundle took %sms', (Date.now() - start));
});
}
function rebundle()
{
return bundler.bundle()
.on('error', logError)
.pipe(plumber())
.pipe(source(`${PKG.name}.js`))
.pipe(buffer())
.pipe(rename(`${PKG.name}.js`))
.pipe(gulpif(process.env.NODE_ENV === 'production',
uglify()
))
.pipe(header(BANNER, BANNER_OPTIONS))
.pipe(gulp.dest(OUTPUT_DIR));
}
return rebundle();
}
function changeHTML(content)
{
return content.replace(/chromeExtension/g, appOptions.chromeExtension);
}
gulp.task('clean', () => del(OUTPUT_DIR, { force: true }));
const LINTING_FILES = [
'gulpfile.js',
'lib/**/*.js',
'lib/**/*.jsx'
];
gulp.task('lint', () =>
{
return gulp.src(LINTING_FILES)
.pipe(plumber())
.pipe(eslint())
.pipe(eslint.format());
});
gulp.task('lint-fix', function()
{
return gulp.src(LINTING_FILES)
.pipe(plumber())
.pipe(eslint({ fix: true }))
.pipe(eslint.format())
.pipe(gulp.dest((file) => file.base));
});
gulp.task('css', () =>
{
return gulp.src('stylus/index.styl')
.pipe(plumber())
.pipe(stylus(
{
use : nib(),
compress : process.env.NODE_ENV === 'production'
}))
.on('error', logError)
.pipe(cssBase64(
{
baseDir : '.',
maxWeightResource : 50000 // So big ttf fonts are not included, nice.
}))
.pipe(rename(`${PKG.name}.css`))
.pipe(gulp.dest(OUTPUT_DIR))
.pipe(touch());
});
gulp.task('html', () =>
{
return gulp.src('*.html')
.pipe(change(changeHTML))
.pipe(gulp.dest(OUTPUT_DIR));
});
gulp.task('resources', (done) =>
{
const dst = path.join(OUTPUT_DIR, 'resources');
mkdirp.sync(dst);
ncp('resources', dst, { stopOnErr: true }, (error) =>
{
if (error && error[0].code !== 'ENOENT')
throw new Error(`resources copy failed: ${error}`);
done();
});
});
gulp.task('bundle', () =>
{
return bundle({ watch: false });
});
gulp.task('bundle:watch', () =>
{
return bundle({ watch: true });
});
gulp.task('livebrowser', (done) =>
{
const config = require(SERVER_CONFIG);
browserSync(
{
open : 'external',
host : config.domain,
port : 3000,
server :
{
baseDir : OUTPUT_DIR
},
https : config.tls,
ghostMode : false,
files : path.join(OUTPUT_DIR, '**', '*')
});
done();
});
gulp.task('browser', (done) =>
{
const config = require(SERVER_CONFIG);
browserSync(
{
open : 'external',
host : config.domain,
port : 3000,
server :
{
baseDir : OUTPUT_DIR
},
https : config.tls,
ghostMode : false
});
done();
});
gulp.task('watch', (done) =>
{
// Watch changes in HTML.
gulp.watch([ '*.html' ], gulp.series(
'html'
));
// Watch changes in Stylus files.
gulp.watch([ 'stylus/**/*.styl' ], gulp.series(
'css'
));
// Watch changes in resources.
gulp.watch([ 'resources/**/*' ], gulp.series(
'resources', 'css'
));
// Watch changes in JS files.
gulp.watch([ 'gulpfile.js', 'lib/**/*.js', 'lib/**/*.jsx' ], gulp.series(
'lint'
));
done();
});
gulp.task('dist', gulp.series(
'clean',
'lint',
'bundle',
'html',
'css',
'resources'
));
gulp.task('dist-watch', gulp.series(
'clean',
'lint',
'bundle:watch',
'html',
'css',
'resources',
'watch',
));
gulp.task('live', gulp.series(
'clean',
'lint',
'bundle:watch',
'html',
'css',
'resources',
'watch',
'livebrowser'
));
gulp.task('open', gulp.series('browser'));
gulp.task('default', gulp.series('live'));

View file

@ -1,30 +0,0 @@
<!doctype html>
<html>
<head>
<title>Multiparty Meeting</title>
<meta charset='UTF-8'>
<meta name='viewport' content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no'>
<meta name='description' content='multiparty meeting - Cutting Edge WebRTC Video Conferencing'>
<link rel='stylesheet' href='/multiparty-meeting.css'>
<link rel="chrome-webstore-item" href="chromeExtension">
<script src='/resources/js/antiglobal.js'></script>
<script>
window.localStorage.setItem('debug', '* -engine* -socket* -RIE* *WARN* *ERROR*');
if (window.antiglobal)
{
window.antiglobal('__multipartyMeetingScreenShareExtensionAvailable__', '___browserSync___oldSocketIo', 'io', '___browserSync___', '__core-js_shared__');
setInterval(window.antiglobal, 180000);
}
</script>
<script async src='/multiparty-meeting.js'></script>
</head>
<body>
<div id='multiparty-meeting'></div>
<div id='multiparty-meeting-media-query-detector'></div>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -1,184 +0,0 @@
import { EventEmitter } from 'events';
import Logger from './Logger';
const logger = new Logger('Spotlight');
export default class Spotlights extends EventEmitter
{
constructor(maxSpotlights, room)
{
super();
this._room = room;
this._maxSpotlights = maxSpotlights;
this._peerList = [];
this._selectedSpotlights = [];
this._currentSpotlights = [];
this._started = false;
}
start()
{
const peers = this._room.peers;
for (const peer of peers)
{
this._handlePeer(peer);
}
this._handleRoom();
this._started = true;
this._spotlightsUpdated();
}
peerInSpotlights(peerName)
{
if (this._started)
{
return this._currentSpotlights.indexOf(peerName) !== -1;
}
else
{
return false;
}
}
setPeerSpotlight(peerName)
{
logger.debug('setPeerSpotlight() [peerName:"%s"]', peerName);
const index = this._selectedSpotlights.indexOf(peerName);
if (index !== -1)
{
this._selectedSpotlights = [];
}
else
{
this._selectedSpotlights = [ peerName ];
}
/*
if (index === -1) // We don't have this peer in the list, adding
{
this._selectedSpotlights.push(peerName);
}
else // We have this peer, remove
{
this._selectedSpotlights.splice(index, 1);
}
*/
if (this._started)
this._spotlightsUpdated();
}
_handleRoom()
{
this._room.on('newpeer', (peer) =>
{
logger.debug(
'room "newpeer" event [name:"%s", peer:%o]', peer.name, peer);
this._handlePeer(peer);
});
}
addSpeakerList(speakerList)
{
this._peerList = [ ...new Set([ ...speakerList, ...this._peerList ]) ];
if (this._started)
this._spotlightsUpdated();
}
_handlePeer(peer)
{
logger.debug('_handlePeer() [peerName:"%s"]', peer.name);
if (this._peerList.indexOf(peer.name) === -1) // We don't have this peer in the list
{
peer.on('close', () =>
{
let index = this._peerList.indexOf(peer.name);
if (index !== -1) // We have this peer in the list, remove
{
this._peerList.splice(index, 1);
}
index = this._selectedSpotlights.indexOf(peer.name);
if (index !== -1) // We have this peer in the list, remove
{
this._selectedSpotlights.splice(index, 1);
}
this._spotlightsUpdated();
});
logger.debug('_handlePeer() | adding peer [peerName:"%s"]', peer.name);
this._peerList.push(peer.name);
this._spotlightsUpdated();
}
}
handleActiveSpeaker(peerName)
{
logger.debug('handleActiveSpeaker() [peerName:"%s"]', peerName);
const index = this._peerList.indexOf(peerName);
if (index > -1)
{
this._peerList.splice(index, 1);
this._peerList = [ peerName ].concat(this._peerList);
this._spotlightsUpdated();
}
}
_spotlightsUpdated()
{
let spotlights;
if (this._selectedSpotlights.length > 0)
{
spotlights = [ ...new Set([ ...this._selectedSpotlights, ...this._peerList ]) ];
}
else
{
spotlights = this._peerList;
}
if (
!this._arraysEqual(
this._currentSpotlights, spotlights.slice(0, this._maxSpotlights)
)
)
{
logger.debug('_spotlightsUpdated() | spotlights updated, emitting');
this._currentSpotlights = spotlights.slice(0, this._maxSpotlights);
this.emit('spotlights-updated', this._currentSpotlights);
}
else
logger.debug('_spotlightsUpdated() | spotlights not updated');
}
_arraysEqual(arr1, arr2)
{
if (arr1.length !== arr2.length)
return false;
for (let i = arr1.length; i--;)
{
if (arr1[i] !== arr2[i])
return false;
}
return true;
}
}

View file

@ -1,78 +0,0 @@
import React, { Component } from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import classnames from 'classnames';
import * as stateActions from '../../redux/stateActions';
class HiddenPeers extends Component
{
constructor(props)
{
super(props);
this.state = { className: '' };
}
componentDidUpdate(prevProps)
{
const { hiddenPeersCount } = this.props;
if (hiddenPeersCount !== prevProps.hiddenPeersCount)
{
// eslint-disable-next-line react/no-did-update-set-state
this.setState({ className: 'pulse' }, () =>
{
if (this.timeout)
{
clearTimeout(this.timeout);
}
this.timeout = setTimeout(() =>
{
this.setState({ className: '' });
}, 500);
});
}
}
render()
{
const {
hiddenPeersCount,
openUsersTab
} = this.props;
return (
<div data-component='HiddenPeers'>
<div className={classnames('view-container', this.state.className)} onClick={() => openUsersTab()}>
<p>+{hiddenPeersCount} <br /> participant
{(hiddenPeersCount === 1) ? null : 's'}
</p>
</div>
</div>
);
}
}
HiddenPeers.propTypes =
{
hiddenPeersCount : PropTypes.number,
openUsersTab : PropTypes.func.isRequired
};
const mapDispatchToProps = (dispatch) =>
{
return {
openUsersTab : () =>
{
dispatch(stateActions.openToolArea());
dispatch(stateActions.setToolTab('users'));
}
};
};
const HiddenPeersContainer = connect(
null,
mapDispatchToProps
)(HiddenPeers);
export default HiddenPeersContainer;

View file

@ -1,240 +0,0 @@
import React from 'react';
import { connect } from 'react-redux';
import ReactTooltip from 'react-tooltip';
import PropTypes from 'prop-types';
import classnames from 'classnames';
import { getDeviceInfo } from 'mediasoup-client';
import * as appPropTypes from '../appPropTypes';
import { withRoomContext } from '../../RoomContext';
import PeerView from '../VideoContainers/PeerView';
import ScreenView from '../VideoContainers/ScreenView';
class Me extends React.Component
{
state = {
controlsVisible : false
};
handleMouseOver = () =>
{
this.setState({
controlsVisible : true
});
};
handleMouseOut = () =>
{
this.setState({
controlsVisible : false
});
};
constructor(props)
{
super(props);
this._mounted = false;
this._rootNode = null;
this._tooltip = true;
// TODO: Issue when using react-tooltip in Edge:
// https://github.com/wwayne/react-tooltip/issues/328
if (getDeviceInfo().flag === 'msedge')
this._tooltip = false;
}
render()
{
const {
roomClient,
connected,
me,
advancedMode,
micProducer,
webcamProducer,
screenProducer
} = this.props;
let micState;
if (!me.canSendMic)
micState = 'unsupported';
else if (!micProducer)
micState = 'unsupported';
else if (!micProducer.locallyPaused && !micProducer.remotelyPaused)
micState = 'on';
else
micState = 'off';
let webcamState;
if (!me.canSendWebcam)
webcamState = 'unsupported';
else if (webcamProducer)
webcamState = 'on';
else
webcamState = 'off';
const videoVisible = (
Boolean(webcamProducer) &&
!webcamProducer.locallyPaused &&
!webcamProducer.remotelyPaused
);
const screenVisible = (
Boolean(screenProducer) &&
!screenProducer.locallyPaused &&
!screenProducer.remotelyPaused
);
let tip;
if (!me.displayNameSet)
tip = 'Click on your name to change it';
return (
<div
data-component='Me'
ref={(node) => (this._rootNode = node)}
data-tip={tip}
data-tip-disable={!tip}
data-type='dark'
onMouseOver={this.handleMouseOver}
onMouseOut={this.handleMouseOut}
>
<div className={classnames('view-container', 'webcam')}>
<If condition={connected}>
<div className={classnames('controls', 'visible')}>
<div
data-tip='keyboard shortcut: &lsquo;m&lsquo;'
data-type='dark'
data-place='bottom'
data-for='me'
className={classnames('button', 'mic', micState, {
disabled : me.audioInProgress,
visible : micState == 'off' || this.state.controlsVisible
})}
onClick={() =>
{
micState === 'on' ?
roomClient.muteMic() :
roomClient.unmuteMic();
}}
/>
<ReactTooltip
id='me'
effect='solid'
/>
<div
className={classnames('button', 'webcam', webcamState, {
disabled : me.webcamInProgress,
visible : webcamState == 'off' || this.state.controlsVisible
})}
onClick={() =>
{
webcamState === 'on' ?
roomClient.disableWebcam() :
roomClient.enableWebcam();
}}
/>
</div>
</If>
<PeerView
isMe
advancedMode={advancedMode}
peer={me}
audioTrack={micProducer ? micProducer.track : null}
volume={micProducer ? micProducer.volume : null}
videoTrack={webcamProducer ? webcamProducer.track : null}
videoVisible={videoVisible}
audioCodec={micProducer ? micProducer.codec : null}
videoCodec={webcamProducer ? webcamProducer.codec : null}
onChangeDisplayName={(displayName) =>
{
roomClient.changeDisplayName(displayName);
}}
/>
</div>
<If condition={screenProducer}>
<div className={classnames('view-container', 'screen')}>
<ScreenView
isMe
advancedMode={advancedMode}
screenTrack={screenProducer ? screenProducer.track : null}
screenVisible={screenVisible}
screenCodec={screenProducer ? screenProducer.codec : null}
/>
</div>
</If>
</div>
);
}
componentDidMount()
{
this._mounted = true;
if (this._tooltip)
{
setTimeout(() =>
{
if (!this._mounted || this.props.me.displayNameSet)
return;
ReactTooltip.show(this._rootNode);
}, 4000);
}
}
componentWillUnmount()
{
this._mounted = false;
}
componentWillReceiveProps(nextProps)
{
if (this._tooltip)
{
if (nextProps.me.displayNameSet)
ReactTooltip.hide(this._rootNode);
}
}
}
Me.propTypes =
{
roomClient : PropTypes.any.isRequired,
connected : PropTypes.bool.isRequired,
advancedMode : PropTypes.bool,
me : appPropTypes.Me.isRequired,
micProducer : appPropTypes.Producer,
webcamProducer : appPropTypes.Producer,
screenProducer : appPropTypes.Producer
};
const mapStateToProps = (state) =>
{
const producersArray = Object.values(state.producers);
const micProducer =
producersArray.find((producer) => producer.source === 'mic');
const webcamProducer =
producersArray.find((producer) => producer.source === 'webcam');
const screenProducer =
producersArray.find((producer) => producer.source === 'screen');
return {
connected : state.room.state === 'connected',
me : state.me,
micProducer : micProducer,
webcamProducer : webcamProducer,
screenProducer : screenProducer
};
};
const MeContainer = withRoomContext(connect(
mapStateToProps
)(Me));
export default MeContainer;

View file

@ -1,266 +0,0 @@
import React, { Component } from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import classnames from 'classnames';
import * as appPropTypes from '../appPropTypes';
import { withRoomContext } from '../../RoomContext';
import * as stateActions from '../../redux/stateActions';
import PeerView from '../VideoContainers/PeerView';
import ScreenView from '../VideoContainers/ScreenView';
class Peer extends Component
{
state = {
controlsVisible : false
};
handleMouseOver = () =>
{
this.setState({
controlsVisible : true
});
};
handleMouseOut = () =>
{
this.setState({
controlsVisible : false
});
};
render()
{
const {
roomClient,
advancedMode,
peer,
micConsumer,
webcamConsumer,
screenConsumer,
toggleConsumerFullscreen,
toggleConsumerWindow,
style,
windowConsumer
} = this.props;
const micEnabled = (
Boolean(micConsumer) &&
!micConsumer.locallyPaused &&
!micConsumer.remotelyPaused
);
const videoVisible = (
Boolean(webcamConsumer) &&
!webcamConsumer.locallyPaused &&
!webcamConsumer.remotelyPaused
);
const screenVisible = (
Boolean(screenConsumer) &&
!screenConsumer.locallyPaused &&
!screenConsumer.remotelyPaused
);
let videoProfile;
if (webcamConsumer)
videoProfile = webcamConsumer.profile;
let screenProfile;
if (screenConsumer)
screenProfile = screenConsumer.profile;
return (
<div
data-component='Peer'
className={classnames({
screen : screenConsumer
})}
onMouseOver={this.handleMouseOver}
onMouseOut={this.handleMouseOut}
>
<If condition={videoVisible && !webcamConsumer.supported}>
<div className='incompatible-video'>
<p>incompatible video</p>
</div>
</If>
<If condition={!videoVisible}>
<div className='paused-video'>
<p>this video is paused</p>
</div>
</If>
<div className={classnames('view-container', 'webcam')} style={style}>
<div className='indicators'>
<If condition={peer.raiseHandState}>
<div className={
classnames(
'icon', 'raise-hand', {
on : peer.raiseHandState,
off : !peer.raiseHandState
}
)
}
/>
</If>
</div>
<div
className={classnames('controls', {
visible : this.state.controlsVisible
})}
>
<div
className={classnames('button', 'mic', {
on : micEnabled,
off : !micEnabled,
disabled : peer.peerAudioInProgress
})}
onClick={(e) =>
{
e.stopPropagation();
micEnabled ?
roomClient.modifyPeerConsumer(peer.name, 'mic', true) :
roomClient.modifyPeerConsumer(peer.name, 'mic', false);
}}
/>
<div
className={classnames('button', 'newwindow', {
disabled : !videoVisible ||
(windowConsumer === webcamConsumer.id)
})}
onClick={(e) =>
{
e.stopPropagation();
toggleConsumerWindow(webcamConsumer);
}}
/>
<div
className={classnames('button', 'fullscreen', {
disabled : !videoVisible
})}
onClick={(e) =>
{
e.stopPropagation();
toggleConsumerFullscreen(webcamConsumer);
}}
/>
</div>
<PeerView
advancedMode={advancedMode}
peer={peer}
volume={micConsumer ? micConsumer.volume : null}
videoTrack={webcamConsumer ? webcamConsumer.track : null}
videoVisible={videoVisible}
videoProfile={videoProfile}
audioCodec={micConsumer ? micConsumer.codec : null}
videoCodec={webcamConsumer ? webcamConsumer.codec : null}
/>
</div>
<If condition={screenConsumer}>
<div className={classnames('view-container', 'screen')} style={style}>
<div
className={classnames('controls', {
visible : this.state.controlsVisible
})}
>
<div
className={classnames('button', 'newwindow', {
disabled : !screenVisible ||
(windowConsumer === screenConsumer.id)
})}
onClick={(e) =>
{
e.stopPropagation();
toggleConsumerWindow(screenConsumer);
}}
/>
<div
className={classnames('button', 'fullscreen', {
disabled : !screenVisible
})}
onClick={(e) =>
{
e.stopPropagation();
toggleConsumerFullscreen(screenConsumer);
}}
/>
</div>
<ScreenView
advancedMode={advancedMode}
screenTrack={screenConsumer ? screenConsumer.track : null}
screenVisible={screenVisible}
screenProfile={screenProfile}
screenCodec={screenConsumer ? screenConsumer.codec : null}
/>
</div>
</If>
</div>
);
}
}
Peer.propTypes =
{
roomClient : PropTypes.any.isRequired,
advancedMode : PropTypes.bool,
peer : appPropTypes.Peer.isRequired,
micConsumer : appPropTypes.Consumer,
webcamConsumer : appPropTypes.Consumer,
screenConsumer : appPropTypes.Consumer,
windowConsumer : PropTypes.number,
streamDimensions : PropTypes.object,
style : PropTypes.object,
toggleConsumerFullscreen : PropTypes.func.isRequired,
toggleConsumerWindow : PropTypes.func.isRequired
};
const mapStateToProps = (state, { name }) =>
{
const peer = state.peers[name];
const consumersArray = peer.consumers
.map((consumerId) => state.consumers[consumerId]);
const micConsumer =
consumersArray.find((consumer) => consumer.source === 'mic');
const webcamConsumer =
consumersArray.find((consumer) => consumer.source === 'webcam');
const screenConsumer =
consumersArray.find((consumer) => consumer.source === 'screen');
return {
peer,
micConsumer,
webcamConsumer,
screenConsumer,
windowConsumer : state.room.windowConsumer
};
};
const mapDispatchToProps = (dispatch) =>
{
return {
toggleConsumerFullscreen : (consumer) =>
{
if (consumer)
dispatch(stateActions.toggleConsumerFullscreen(consumer.id));
},
toggleConsumerWindow : (consumer) =>
{
if (consumer)
dispatch(stateActions.toggleConsumerWindow(consumer.id));
}
};
};
const PeerContainer = withRoomContext(connect(
mapStateToProps,
mapDispatchToProps
)(Peer));
export default PeerContainer;

View file

@ -1,232 +0,0 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import classnames from 'classnames';
import * as appPropTypes from '../appPropTypes';
import { withRoomContext } from '../../RoomContext';
import FullScreen from '../FullScreen';
class Sidebar extends Component
{
constructor(props)
{
super(props);
this.fullscreen = new FullScreen(document);
this.state = {
fullscreen : false
};
}
handleToggleFullscreen = () =>
{
if (this.fullscreen.fullscreenElement)
{
this.fullscreen.exitFullscreen();
}
else
{
this.fullscreen.requestFullscreen(document.documentElement);
}
};
handleFullscreenChange = () =>
{
this.setState({
fullscreen : this.fullscreen.fullscreenElement !== null
});
};
componentDidMount()
{
if (this.fullscreen.fullscreenEnabled)
{
this.fullscreen.addEventListener('fullscreenchange', this.handleFullscreenChange);
}
}
componentWillUnmount()
{
if (this.fullscreen.fullscreenEnabled)
{
this.fullscreen.removeEventListener('fullscreenchange', this.handleFullscreenChange);
}
}
render()
{
const {
roomClient,
toolbarsVisible,
me,
screenProducer,
locked
} = this.props;
let screenState;
let screenTip;
let lockState = 'unlocked';
if (me.needExtension)
{
screenState = 'need-extension';
screenTip = 'Install screen sharing extension';
}
else if (!me.canShareScreen)
{
screenState = 'unsupported';
screenTip = 'Screen sharing not supported';
}
else if (screenProducer)
{
screenState = 'on';
screenTip = 'Stop screen sharing';
}
else
{
screenState = 'off';
screenTip = 'Start screen sharing';
}
if (locked)
{
lockState = 'locked';
}
return (
<div
className={classnames('sidebar room-controls', {
'visible' : toolbarsVisible
})}
data-component='Sidebar'
>
<If condition={this.fullscreen.fullscreenEnabled}>
<div
className={classnames('button', 'fullscreen', {
on : this.state.fullscreen
})}
onClick={this.handleToggleFullscreen}
data-tip='Fullscreen'
data-place='right'
data-type='dark'
/>
</If>
<div
className={classnames('button', 'screen', screenState)}
data-tip={screenTip}
data-place='right'
data-type='dark'
onClick={() =>
{
switch (screenState)
{
case 'on':
{
roomClient.disableScreenSharing();
break;
}
case 'off':
{
roomClient.enableScreenSharing();
break;
}
case 'need-extension':
{
roomClient.installExtension();
break;
}
default:
{
break;
}
}
}}
/>
<If condition={me.loginEnabled}>
<Choose>
<When condition={me.loggedIn}>
<div
className='button logout'
data-tip='Logout'
data-place='right'
data-type='dark'
onClick={() => roomClient.logout()}
>
<img src={me.picture || 'resources/images/avatar-empty.jpeg'} />
</div>
</When>
<Otherwise>
<div
className='button login off'
data-tip='Login'
data-place='right'
data-type='dark'
onClick={() => roomClient.login()}
/>
</Otherwise>
</Choose>
</If>
<div
className={classnames('button', 'lock', lockState, {
on : locked
})}
data-tip={`Room is ${lockState}`}
data-place='right'
data-type='dark'
onClick={() =>
{
if (locked)
{
roomClient.unlockRoom();
}
else
{
roomClient.lockRoom();
}
}}
/>
<div
className={classnames('button', 'raise-hand', {
on : me.raiseHand,
disabled : me.raiseHandInProgress
})}
data-tip='Raise hand'
data-place='right'
data-type='dark'
onClick={() => roomClient.sendRaiseHandState(!me.raiseHand)}
/>
<div
className={classnames('button', 'leave-meeting')}
data-tip='Leave meeting'
data-place='right'
data-type='dark'
onClick={() => roomClient.close()}
/>
</div>
);
}
}
Sidebar.propTypes = {
roomClient : PropTypes.any.isRequired,
toolbarsVisible : PropTypes.bool.isRequired,
me : appPropTypes.Me.isRequired,
screenProducer : appPropTypes.Producer,
locked : PropTypes.bool.isRequired
};
const mapStateToProps = (state) =>
({
toolbarsVisible : state.room.toolbarsVisible,
screenProducer : Object.values(state.producers)
.find((producer) => producer.source === 'screen'),
me : state.me,
locked : state.room.locked
});
export default withRoomContext(connect(
mapStateToProps
)(Sidebar));

View file

@ -1,216 +0,0 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import ResizeObserver from 'resize-observer-polyfill';
import { connect } from 'react-redux';
import debounce from 'lodash/debounce';
import classnames from 'classnames';
import { withRoomContext } from '../../RoomContext';
import Peer from '../Containers/Peer';
import HiddenPeers from '../Containers/HiddenPeers';
class Filmstrip extends Component
{
constructor(props)
{
super(props);
this.activePeerContainer = React.createRef();
}
state = {
lastSpeaker : null,
width : 400
};
// Find the name of the peer which is currently speaking. This is either
// the latest active speaker, or the manually selected peer, or, if no
// person has spoken yet, the first peer in the list of peers.
getActivePeerName = () =>
{
if (this.props.selectedPeerName)
{
return this.props.selectedPeerName;
}
if (this.state.lastSpeaker)
{
return this.state.lastSpeaker;
}
const peerNames = Object.keys(this.props.peers);
if (peerNames.length > 0)
{
return peerNames[0];
}
};
isSharingCamera = (peerName) => this.props.peers[peerName] &&
this.props.peers[peerName].consumers.some((consumer) =>
this.props.consumers[consumer].source === 'screen');
getRatio = () =>
{
let ratio = 4 / 3;
if (this.isSharingCamera(this.getActivePeerName()))
{
ratio *= 2;
}
return ratio;
};
updateDimensions = debounce(() =>
{
const container = this.activePeerContainer.current;
if (container)
{
const ratio = this.getRatio();
let width = container.clientWidth;
if (width / ratio > container.clientHeight)
{
width = container.clientHeight * ratio;
}
this.setState({
width
});
}
}, 200);
componentDidMount()
{
window.addEventListener('resize', this.updateDimensions);
const observer = new ResizeObserver(this.updateDimensions);
observer.observe(this.activePeerContainer.current);
this.updateDimensions();
}
componentWillUnmount()
{
window.removeEventListener('resize', this.updateDimensions);
}
componentDidUpdate(prevProps)
{
if (prevProps !== this.props)
{
this.updateDimensions();
if (this.props.activeSpeakerName !== this.props.myName)
{
// eslint-disable-next-line react/no-did-update-set-state
this.setState({
lastSpeaker : this.props.activeSpeakerName
});
}
}
}
render()
{
const {
roomClient,
peers,
advancedMode,
spotlights,
spotlightsLength
} = this.props;
const activePeerName = this.getActivePeerName();
return (
<div data-component='Filmstrip'>
<div className='active-peer-container' ref={this.activePeerContainer}>
<If condition={peers[activePeerName]}>
<div
className='active-peer'
style={{
width : this.state.width,
height : this.state.width / this.getRatio()
}}
>
<Peer
advancedMode={advancedMode}
name={activePeerName}
/>
</div>
</If>
</div>
<div className='filmstrip'>
<div className='filmstrip-content'>
{ Object.keys(peers).map((peerName) =>
{
if (spotlights.find((spotlightsElement) => spotlightsElement === peerName))
{
return (
<div
key={peerName}
onClick={() => roomClient.setSelectedPeer(peerName)}
className={classnames('film', {
selected : this.props.selectedPeerName === peerName,
active : this.state.lastSpeaker === peerName
})}
>
<div className='film-content'>
<Peer
advancedMode={advancedMode}
name={peerName}
/>
</div>
</div>
);
}
})}
</div>
</div>
<div className='hidden-peer-container'>
<If condition={(spotlightsLength<Object.keys(peers).length)}>
<HiddenPeers
hiddenPeersCount={Object.keys(peers).length-spotlightsLength}
/>
</If>
</div>
</div>
);
}
}
Filmstrip.propTypes = {
roomClient : PropTypes.any.isRequired,
activeSpeakerName : PropTypes.string,
advancedMode : PropTypes.bool,
peers : PropTypes.object.isRequired,
consumers : PropTypes.object.isRequired,
myName : PropTypes.string.isRequired,
selectedPeerName : PropTypes.string,
spotlightsLength : PropTypes.number,
spotlights : PropTypes.array.isRequired
};
const mapStateToProps = (state) =>
{
const spotlightsLength = state.room.spotlights ? state.room.spotlights.length : 0;
return {
activeSpeakerName : state.room.activeSpeakerName,
selectedPeerName : state.room.selectedPeerName,
peers : state.peers,
consumers : state.consumers,
myName : state.me.name,
spotlights : state.room.spotlights,
spotlightsLength
};
};
export default withRoomContext(connect(
mapStateToProps,
undefined
)(Filmstrip));

View file

@ -1,175 +0,0 @@
import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import classnames from 'classnames';
import debounce from 'lodash/debounce';
import { Appear } from '../transitions';
import Peer from '../Containers/Peer';
import HiddenPeers from '../Containers/HiddenPeers';
import ResizeObserver from 'resize-observer-polyfill';
const RATIO = 1.334;
class Peers extends React.Component
{
constructor(props)
{
super(props);
this.state = {
peerWidth : 400,
peerHeight : 300
};
this.peersRef = React.createRef();
}
updateDimensions = debounce(() =>
{
if (!this.peersRef.current)
{
return;
}
const n = this.props.boxes;
if (n === 0)
{
return;
}
const width = this.peersRef.current.clientWidth;
const height = this.peersRef.current.clientHeight;
let x, y, space;
for (let rows = 1; rows < 100; rows = rows + 1)
{
x = width / Math.ceil(n / rows);
y = x / RATIO;
if (height < (y * rows))
{
y = height / rows;
x = RATIO * y;
break;
}
space = height - (y * (rows));
if (space < y)
{
break;
}
}
if (Math.ceil(this.state.peerWidth) !== Math.ceil(0.9 * x))
{
this.setState({
peerWidth : 0.9 * x,
peerHeight : 0.9 * y
});
}
}, 200);
componentDidMount()
{
window.addEventListener('resize', this.updateDimensions);
const observer = new ResizeObserver(this.updateDimensions);
observer.observe(this.peersRef.current);
}
componentWillUnmount()
{
window.removeEventListener('resize', this.updateDimensions);
}
componentDidUpdate()
{
this.updateDimensions();
}
render()
{
const {
advancedMode,
activeSpeakerName,
peers,
spotlights,
spotlightsLength
} = this.props;
const style =
{
'width' : this.state.peerWidth,
'height' : this.state.peerHeight
};
return (
<div data-component='Peers' ref={this.peersRef}>
{ Object.keys(peers).map((peerName) =>
{
if (spotlights.find((spotlightsElement) => spotlightsElement === peerName))
{
return (
<Appear key={peerName} duration={1000}>
<div
className={classnames('peer-container', {
'selected' : this.props.selectedPeerName === peerName,
'active-speaker' : peerName === activeSpeakerName
})}
>
<div className='peer-content'>
<Peer
advancedMode={advancedMode}
name={peerName}
style={style}
/>
</div>
</div>
</Appear>
);
}
})}
<div className='hidden-peer-container'>
<If condition={spotlightsLength < Object.keys(peers).length}>
<HiddenPeers
hiddenPeersCount={Object.keys(peers).length - spotlightsLength}
/>
</If>
</div>
</div>
);
}
}
Peers.propTypes =
{
advancedMode : PropTypes.bool,
peers : PropTypes.object.isRequired,
boxes : PropTypes.number,
activeSpeakerName : PropTypes.string,
selectedPeerName : PropTypes.string,
spotlightsLength : PropTypes.number,
spotlights : PropTypes.array.isRequired
};
const mapStateToProps = (state) =>
{
const spotlights = state.room.spotlights;
const spotlightsLength = spotlights ? state.room.spotlights.length : 0;
const boxes = spotlightsLength + Object.values(state.consumers)
.filter((consumer) => consumer.source === 'screen').length;
return {
peers : state.peers,
boxes,
activeSpeakerName : state.room.activeSpeakerName,
selectedPeerName : state.room.selectedPeerName,
spotlights,
spotlightsLength
};
};
const PeersContainer = connect(
mapStateToProps
)(Peers);
export default PeersContainer;

View file

@ -1,70 +0,0 @@
import React from 'react';
import { connect } from 'react-redux';
import classnames from 'classnames';
import PropTypes from 'prop-types';
import * as appPropTypes from './appPropTypes';
import * as stateActions from '../redux/stateActions';
import { Appear } from './transitions';
const Notifications = ({ notifications, onClick, toolAreaOpen }) =>
{
return (
<div
data-component='Notifications'
className={classnames({
'toolarea-open' : toolAreaOpen
})}
>
{
notifications.map((notification) =>
{
return (
<Appear key={notification.id} duration={250}>
<div
className={classnames('notification', notification.type)}
onClick={() => onClick(notification.id)}
>
<div className='icon' />
<p className='text'>{notification.text}</p>
</div>
</Appear>
);
})
}
</div>
);
};
Notifications.propTypes =
{
notifications : PropTypes.arrayOf(appPropTypes.Notification).isRequired,
onClick : PropTypes.func.isRequired,
toolAreaOpen : PropTypes.bool
};
const mapStateToProps = (state) =>
{
const { notifications } = state;
return {
notifications,
toolAreaOpen : state.toolarea.toolAreaOpen
};
};
const mapDispatchToProps = (dispatch) =>
{
return {
onClick : (notificationId) =>
{
dispatch(stateActions.removeNotification(notificationId));
}
};
};
const NotificationsContainer = connect(
mapStateToProps,
mapDispatchToProps
)(Notifications);
export default NotificationsContainer;

View file

@ -1,39 +0,0 @@
import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import * as appPropTypes from '../appPropTypes';
import PeerAudio from './PeerAudio';
const AudioPeer = ({ micConsumer }) =>
{
return (
<PeerAudio
audioTrack={micConsumer ? micConsumer.track : null}
/>
);
};
AudioPeer.propTypes =
{
micConsumer : appPropTypes.Consumer,
name : PropTypes.string
};
const mapStateToProps = (state, { name }) =>
{
const peer = state.peers[name];
const consumersArray = peer.consumers
.map((consumerId) => state.consumers[consumerId]);
const micConsumer =
consumersArray.find((consumer) => consumer.source === 'mic');
return {
micConsumer
};
};
const AudioPeerContainer = connect(
mapStateToProps
)(AudioPeer);
export default AudioPeerContainer;

View file

@ -1,44 +0,0 @@
import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import * as appPropTypes from '../appPropTypes';
import AudioPeer from './AudioPeer';
const AudioPeers = ({ peers }) =>
{
return (
<div data-component='AudioPeers'>
{
peers.map((peer) =>
{
return (
<AudioPeer
key={peer.name}
name={peer.name}
/>
);
})
}
</div>
);
};
AudioPeers.propTypes =
{
peers : PropTypes.arrayOf(appPropTypes.Peer).isRequired
};
const mapStateToProps = (state) =>
{
const peers = Object.values(state.peers);
return {
peers
};
};
const AudioPeersContainer = connect(
mapStateToProps
)(AudioPeers);
export default AudioPeersContainer;

View file

@ -1,67 +0,0 @@
import React from 'react';
import PropTypes from 'prop-types';
export default class PeerAudio extends React.Component
{
constructor(props)
{
super(props);
// Latest received audio track.
// @type {MediaStreamTrack}
this._audioTrack = null;
}
render()
{
return (
<audio
ref='audio'
autoPlay
/>
);
}
componentDidMount()
{
const { audioTrack } = this.props;
this._setTrack(audioTrack);
}
componentWillReceiveProps(nextProps)
{
const { audioTrack } = nextProps;
this._setTrack(audioTrack);
}
_setTrack(audioTrack)
{
if (this._audioTrack === audioTrack)
return;
this._audioTrack = audioTrack;
const { audio } = this.refs;
if (audioTrack)
{
const stream = new MediaStream;
if (audioTrack)
stream.addTrack(audioTrack);
audio.srcObject = stream;
}
else
{
audio.srcObject = null;
}
}
}
PeerAudio.propTypes =
{
audioTrack : PropTypes.any
};

View file

@ -1,263 +0,0 @@
import React, { Fragment } from 'react';
import { connect } from 'react-redux';
import { withRoomContext } from '../RoomContext';
import ReactTooltip from 'react-tooltip';
import PropTypes from 'prop-types';
import classnames from 'classnames';
import CopyToClipboard from 'react-copy-to-clipboard';
import CookieConsent from 'react-cookie-consent';
import * as appPropTypes from './appPropTypes';
import * as requestActions from '../redux/requestActions';
import * as stateActions from '../redux/stateActions';
import { Appear } from './transitions';
import Me from './Containers/Me';
import Peers from './Layouts/Peers';
import AudioPeers from './PeerAudio/AudioPeers';
import Notifications from './Notifications';
import ToolArea from './ToolArea/ToolArea';
import FullScreenView from './VideoContainers/FullScreenView';
import VideoWindow from './VideoWindow/VideoWindow';
import Draggable from 'react-draggable';
import { idle } from '../utils';
import Sidebar from './Controls/Sidebar';
import Filmstrip from './Layouts/Filmstrip';
// Hide toolbars after 10 seconds of inactivity.
const TIMEOUT = 10 * 1000;
class Room extends React.Component
{
/**
* Hides the different toolbars on the page after a
* given amount of time has passed since the
* last time the cursor was moved.
*/
waitForHide = idle(() =>
{
this.props.setToolbarsVisible(false);
}, TIMEOUT);
handleMovement = () =>
{
// If the toolbars were hidden, show them again when
// the user moves their cursor.
if (!this.props.room.toolbarsVisible)
{
this.props.setToolbarsVisible(true);
}
this.waitForHide();
}
componentDidMount()
{
window.addEventListener('mousemove', this.handleMovement);
window.addEventListener('touchstart', this.handleMovement);
}
componentWillUnmount()
{
window.removeEventListener('mousemove', this.handleMovement);
window.removeEventListener('touchstart', this.handleMovement);
}
render()
{
const {
roomClient,
room,
amActiveSpeaker,
onRoomLinkCopy
} = this.props;
const View = {
filmstrip : Filmstrip,
democratic : Peers
}[room.mode];
if (room.audioSuspended)
{
return (
<Fragment>
<Appear duration={300}>
<div data-component='Room'>
<div className='sound-suspended'>
This webpage required sound and video to play, please click to allow.
<div
onClick={() =>
{
roomClient.notify('Joining.');
roomClient.resumeAudio();
}}
className='button'
>
<span>Allow</span>
</div>
</div>
</div>
</Appear>
</Fragment>
);
}
else if (room.lockedOut)
{
return (
<Fragment>
<Appear duration={300}>
<div data-component='Room'>
<div className='locked-out'>
This room is locked at the moment, try again later.
</div>
</div>
</Appear>
</Fragment>
);
}
else
{
return (
<Fragment>
<Appear duration={300}>
<div data-component='Room'>
<CookieConsent>
This website uses cookies to enhance the user experience.
</CookieConsent>
<FullScreenView advancedMode={room.advancedMode} />
<VideoWindow advancedMode={room.advancedMode} />
<div className='room-wrapper'>
<div data-component='Logo' />
<AudioPeers />
<Notifications />
<If condition={room.advancedMode}>
<div className='state' data-tip='Server status'>
<div className={classnames('icon', room.state)} />
<p className={classnames('text', room.state)}>{room.state}</p>
</div>
</If>
<div
className={classnames('room-link-wrapper room-controls', {
'visible' : this.props.room.toolbarsVisible
})}
>
<div className='room-link'>
<CopyToClipboard
text={room.url}
onCopy={onRoomLinkCopy}
>
<a
className='link'
href={room.url}
target='_blank'
data-tip='Click to copy room link'
rel='noopener noreferrer'
onClick={(event) =>
{
// If this is a 'Open in new window/tab' don't prevent
// click default action.
if (
event.ctrlKey || event.shiftKey || event.metaKey ||
// Middle click (IE > 9 and everyone else).
(event.button && event.button === 1)
)
{
return;
}
event.preventDefault();
}}
>
invitation link
</a>
</CopyToClipboard>
</div>
</div>
<View advancedMode={room.advancedMode} />
<Draggable handle='.me-container' bounds='body' cancel='.display-name'>
<div
className={classnames('me-container', {
'active-speaker' : amActiveSpeaker
})}
>
<Me
advancedMode={room.advancedMode}
/>
</div>
</Draggable>
<Sidebar />
<ReactTooltip
effect='solid'
delayShow={100}
delayHide={100}
/>
</div>
<ToolArea />
</div>
</Appear>
</Fragment>
);
}
}
}
Room.propTypes =
{
roomClient : PropTypes.object.isRequired,
room : appPropTypes.Room.isRequired,
me : appPropTypes.Me.isRequired,
amActiveSpeaker : PropTypes.bool.isRequired,
toolAreaOpen : PropTypes.bool.isRequired,
screenProducer : appPropTypes.Producer,
onRoomLinkCopy : PropTypes.func.isRequired,
setToolbarsVisible : PropTypes.func.isRequired
};
const mapStateToProps = (state) =>
{
const producersArray = Object.values(state.producers);
const screenProducer =
producersArray.find((producer) => producer.source === 'screen');
return {
room : state.room,
me : state.me,
toolAreaOpen : state.toolarea.toolAreaOpen,
amActiveSpeaker : state.me.name === state.room.activeSpeakerName,
screenProducer : screenProducer
};
};
const mapDispatchToProps = (dispatch) =>
{
return {
onRoomLinkCopy : () =>
{
dispatch(requestActions.notify(
{
text : 'Room link copied to the clipboard'
}));
},
setToolbarsVisible : (visible) =>
{
dispatch(stateActions.setToolbarsVisible(visible));
}
};
};
const RoomContainer = withRoomContext(connect(
mapStateToProps,
mapDispatchToProps
)(Room));
export default RoomContainer;

View file

@ -1,97 +0,0 @@
import React, { Component } from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import { withRoomContext } from '../../../RoomContext';
import MessageList from './MessageList';
class Chat extends Component
{
createNewMessage(text, sender, name, picture)
{
return {
type : 'message',
text,
time : Date.now(),
name,
sender,
picture
};
}
render()
{
const {
roomClient,
senderPlaceHolder,
autofocus,
displayName,
picture
} = this.props;
return (
<div data-component='Chat'>
<MessageList />
<form
data-component='Sender'
onSubmit={(e) =>
{
e.preventDefault();
const userInput = e.target.message.value;
if (userInput)
{
const message = this.createNewMessage(userInput, 'response', displayName, picture);
roomClient.sendChatMessage(message);
}
e.target.message.value = '';
}}
>
<input
type='text'
className='new-message'
name='message'
placeholder={senderPlaceHolder}
autoFocus={autofocus}
autoComplete='off'
/>
<input
type='submit'
className='send'
value='Send'
/>
</form>
</div>
);
}
}
Chat.propTypes =
{
roomClient : PropTypes.any.isRequired,
senderPlaceHolder : PropTypes.string,
autofocus : PropTypes.bool,
displayName : PropTypes.string,
picture : PropTypes.string
};
Chat.defaultProps =
{
senderPlaceHolder : 'Type a message...',
autofocus : false,
displayName : null
};
const mapStateToProps = (state) =>
{
return {
displayName : state.me.displayName,
picture : state.me.picture
};
};
const ChatContainer = withRoomContext(connect(
mapStateToProps
)(Chat));
export default ChatContainer;

View file

@ -1,98 +0,0 @@
import React, { Component } from 'react';
import { compose } from 'redux';
import PropTypes from 'prop-types';
import marked from 'marked';
import { connect } from 'react-redux';
import scrollToBottom from '../scrollToBottom';
const linkRenderer = new marked.Renderer();
linkRenderer.link = (href, title, text) =>
{
title = title ? title : href;
text = text ? text : href;
return (`<a target='_blank' href='${ href }' title='${ title }'>${ text }</a>`);
};
class MessageList extends Component
{
getTimeString(time)
{
return `${(time.getHours() < 10 ? '0' : '')}${time.getHours()}:${(time.getMinutes() < 10 ? '0' : '')}${time.getMinutes()}`;
}
render()
{
const {
chatmessages
} = this.props;
return (
<div data-component='MessageList' id='messages'>
<Choose>
<When condition={chatmessages.length > 0}>
{
chatmessages.map((message, i) =>
{
const messageTime = new Date(message.time);
const picture = (message.sender === 'response' ?
message.picture : this.props.myPicture) || 'resources/images/avatar-empty.jpeg';
return (
<div className='message' key={i}>
<div className={message.sender}>
<img className='message-avatar' src={picture} />
<div className='message-content'>
<div
className='message-text'
// eslint-disable-next-line react/no-danger
dangerouslySetInnerHTML={{ __html : marked.parse(
message.text,
{ sanitize: true, renderer: linkRenderer }
) }}
/>
<span className='message-time'>
{message.name} - {this.getTimeString(messageTime)}
</span>
</div>
</div>
</div>
);
})
}
</When>
<Otherwise>
<div className='empty'>
<p>No one has said anything yet...</p>
</div>
</Otherwise>
</Choose>
</div>
);
}
}
MessageList.propTypes =
{
chatmessages : PropTypes.arrayOf(PropTypes.object).isRequired,
myPicture : PropTypes.string
};
const mapStateToProps = (state) =>
{
return {
chatmessages : state.chatmessages,
myPicture : state.me.picture
};
};
const MessageListContainer = compose(
connect(mapStateToProps),
scrollToBottom()
)(MessageList);
export default MessageListContainer;

View file

@ -1,18 +0,0 @@
import React from 'react';
import WebTorrent from 'webtorrent';
import dragDrop from 'drag-drop';
import { shareFiles } from './index';
export const configureDragDrop = () =>
{
if (WebTorrent.WEBRTC_SUPPORT)
{
dragDrop('body', async (files) => await shareFiles(files));
}
};
export const HoldingOverlay = () => (
<div id='holding-overlay'>
Drop files here to share them
</div>
);

View file

@ -1,113 +0,0 @@
import React, { Component, Fragment } from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import { withRoomContext } from '../../../RoomContext';
import magnet from 'magnet-uri';
const DEFAULT_PICTURE = 'resources/images/avatar-empty.jpeg';
class File extends Component
{
render()
{
const {
roomClient,
torrentSupport,
file
} = this.props;
return (
<div className='file-entry'>
<img className='file-avatar' src={file.picture || DEFAULT_PICTURE} />
<div className='file-content'>
<Choose>
<When condition={file.me}>
<p>You shared a file.</p>
</When>
<Otherwise>
<p>{file.displayName} shared a file.</p>
</Otherwise>
</Choose>
<If condition={!file.active && !file.files}>
<div className='file-info'>
<Choose>
<When condition={torrentSupport}>
<span
className='button'
onClick={() =>
{
roomClient.handleDownload(file.magnetUri);
}}
>
<img src='resources/images/download-icon.svg' />
</span>
</When>
<Otherwise>
<p>
Your browser does not support downloading files using WebTorrent.
</p>
</Otherwise>
</Choose>
<p>{magnet.decode(file.magnetUri).dn}</p>
</div>
</If>
<If condition={file.timeout}>
<Fragment>
<p>
If this process takes a long time, there might not be anyone seeding
this torrent. Try asking someone to reupload the file that you want.
</p>
</Fragment>
</If>
<If condition={file.active}>
<progress value={file.progress} />
</If>
<If condition={file.files}>
<Fragment>
<p>File finished downloading.</p>
{file.files.map((sharedFile, i) => (
<div className='file-info' key={i}>
<span
className='button'
onClick={() =>
{
roomClient.saveFile(sharedFile);
}}
>
<img src='resources/images/save-icon.svg' />
</span>
<p>{sharedFile.name}</p>
</div>
))}
</Fragment>
</If>
</div>
</div>
);
}
}
File.propTypes = {
roomClient : PropTypes.object.isRequired,
torrentSupport : PropTypes.bool.isRequired,
file : PropTypes.object.isRequired
};
const mapStateToProps = (state, { magnetUri }) =>
{
return {
file : state.files[magnetUri],
torrentSupport : state.room.torrentSupport
};
};
export default withRoomContext(connect(
mapStateToProps
)(File));

View file

@ -1,40 +0,0 @@
import React, { Component } from 'react';
import { compose } from 'redux';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import scrollToBottom from '../scrollToBottom';
import File from './File';
class FileList extends Component
{
render()
{
const {
files
} = this.props;
return (
<div className='shared-files'>
{ Object.keys(files).map((magnetUri) =>
<File key={magnetUri} magnetUri={magnetUri} />
)}
</div>
);
}
}
FileList.propTypes = {
files : PropTypes.object.isRequired
};
const mapStateToProps = (state) =>
{
return {
files : state.files
};
};
export default compose(
connect(mapStateToProps),
scrollToBottom()
)(FileList);

View file

@ -1,88 +0,0 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import classNames from 'classnames';
import { withRoomContext } from '../../../RoomContext';
import FileList from './FileList';
class FileSharing extends Component
{
constructor(props)
{
super(props);
this._fileInput = React.createRef();
}
handleFileChange = async (event) =>
{
if (event.target.files.length > 0)
{
this.props.roomClient.shareFiles(event.target.files);
}
};
handleClick = () =>
{
if (this.props.torrentSupport)
{
// We want to open the file dialog when we click a button
// instead of actually rendering the input element itself.
this._fileInput.current.click();
}
};
render()
{
const {
torrentSupport
} = this.props;
const buttonDescription = torrentSupport ?
'Share file' : 'File sharing not supported';
return (
<div data-component='FileSharing'>
<div className='sharing-toolbar'>
<input
style={{ display: 'none' }}
ref={this._fileInput}
type='file'
onChange={this.handleFileChange}
multiple
/>
<div
type='button'
onClick={this.handleClick}
className={classNames('share-file', {
disabled : !torrentSupport
})}
>
<span>{buttonDescription}</span>
</div>
</div>
<FileList />
</div>
);
}
}
FileSharing.propTypes = {
roomClient : PropTypes.any.isRequired,
torrentSupport : PropTypes.bool.isRequired,
tabOpen : PropTypes.bool.isRequired
};
const mapStateToProps = (state) =>
{
return {
torrentSupport : state.room.torrentSupport,
tabOpen : state.toolarea.currentToolTab === 'files'
};
};
export default withRoomContext(connect(
mapStateToProps
)(FileSharing));

View file

@ -1,38 +0,0 @@
import React from 'react';
import { connect } from 'react-redux';
import { Me } from '../../appPropTypes';
const ListMe = ({ me }) =>
{
const picture = me.picture || 'resources/images/avatar-empty.jpeg';
return (
<li className='list-item me'>
<div data-component='ListPeer'>
<img className='avatar' src={picture} />
<div className='peer-info'>
{me.displayName}
</div>
<div className='indicators'>
<If condition={me.raisedHand}>
<div className='icon raise-hand on' />
</If>
</div>
</div>
</li>
);
};
ListMe.propTypes = {
me : Me.isRequired
};
const mapStateToProps = (state) => ({
me : state.me
});
export default connect(
mapStateToProps
)(ListMe);

View file

@ -1,124 +0,0 @@
import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import classnames from 'classnames';
import * as appPropTypes from '../../appPropTypes';
import { withRoomContext } from '../../../RoomContext';
const ListPeer = (props) =>
{
const {
roomClient,
peer,
micConsumer,
screenConsumer
} = props;
const micEnabled = (
Boolean(micConsumer) &&
!micConsumer.locallyPaused &&
!micConsumer.remotelyPaused
);
const screenVisible = (
Boolean(screenConsumer) &&
!screenConsumer.locallyPaused &&
!screenConsumer.remotelyPaused
);
const picture = peer.picture || 'resources/images/avatar-empty.jpeg';
return (
<div data-component='ListPeer'>
<img className='avatar' src={picture} />
<div className='peer-info'>
{peer.displayName}
</div>
<div className='indicators'>
<If condition={peer.raiseHandState}>
<div className={
classnames(
'icon', 'raise-hand', {
on : peer.raiseHandState,
off : !peer.raiseHandState
}
)
}
/>
</If>
</div>
<div className='volume-container'>
<div className={classnames('bar', `level${micEnabled && micConsumer ? micConsumer.volume:0}`)} />
</div>
<div className='controls'>
<If condition={screenConsumer}>
<div
className={classnames('button', 'screen', {
on : screenVisible,
off : !screenVisible,
disabled : peer.peerScreenInProgress
})}
onClick={(e) =>
{
e.stopPropagation();
screenVisible ?
roomClient.modifyPeerConsumer(peer.name, 'screen', true) :
roomClient.modifyPeerConsumer(peer.name, 'screen', false);
}}
/>
</If>
<div
className={classnames('button', 'mic', {
on : micEnabled,
off : !micEnabled,
disabled : peer.peerAudioInProgress
})}
onClick={(e) =>
{
e.stopPropagation();
micEnabled ?
roomClient.modifyPeerConsumer(peer.name, 'mic', true) :
roomClient.modifyPeerConsumer(peer.name, 'mic', false);
}}
/>
</div>
</div>
);
};
ListPeer.propTypes =
{
roomClient : PropTypes.any.isRequired,
advancedMode : PropTypes.bool,
peer : appPropTypes.Peer.isRequired,
micConsumer : appPropTypes.Consumer,
webcamConsumer : appPropTypes.Consumer,
screenConsumer : appPropTypes.Consumer
};
const mapStateToProps = (state, { name }) =>
{
const peer = state.peers[name];
const consumersArray = peer.consumers
.map((consumerId) => state.consumers[consumerId]);
const micConsumer =
consumersArray.find((consumer) => consumer.source === 'mic');
const webcamConsumer =
consumersArray.find((consumer) => consumer.source === 'webcam');
const screenConsumer =
consumersArray.find((consumer) => consumer.source === 'screen');
return {
peer,
micConsumer,
webcamConsumer,
screenConsumer
};
};
const ListPeerContainer = withRoomContext(connect(
mapStateToProps
)(ListPeer));
export default ListPeerContainer;

View file

@ -1,89 +0,0 @@
import React from 'react';
import { connect } from 'react-redux';
import classNames from 'classnames';
import * as appPropTypes from '../../appPropTypes';
import { withRoomContext } from '../../../RoomContext';
import PropTypes from 'prop-types';
import ListPeer from './ListPeer';
import ListMe from './ListMe';
const ParticipantList =
({
roomClient,
advancedMode,
peers,
selectedPeerName,
spotlights
}) => (
<div data-component='ParticipantList'>
<ul className='list'>
<li className='list-header'>Me:</li>
<ListMe />
</ul>
<br />
<ul className='list'>
<li className='list-header'>Participants in Spotlight:</li>
{peers.filter((peer) =>
{
return (spotlights.find((spotlight) =>
{ return (spotlight === peer.name); }));
}).map((peer) => (
<li
key={peer.name}
className={classNames('list-item', {
selected : peer.name === selectedPeerName
})}
onClick={() => roomClient.setSelectedPeer(peer.name)}
>
<ListPeer name={peer.name} advancedMode={advancedMode} />
</li>
))}
</ul>
<br />
<ul className='list'>
<li className='list-header'>Passive Participants:</li>
{peers.filter((peer) =>
{
return !(spotlights.find((spotlight) =>
{ return (spotlight === peer.name); }));
}).map((peer) => (
<li
key={peer.name}
className={classNames('list-item', {
selected : peer.name === selectedPeerName
})}
onClick={() => roomClient.setSelectedPeer(peer.name)}
>
<ListPeer name={peer.name} advancedMode={advancedMode} />
</li>
))}
</ul>
</div>
);
ParticipantList.propTypes =
{
roomClient : PropTypes.any.isRequired,
advancedMode : PropTypes.bool,
peers : PropTypes.arrayOf(appPropTypes.Peer).isRequired,
selectedPeerName : PropTypes.string,
spotlights : PropTypes.array.isRequired
};
const mapStateToProps = (state) =>
{
const peersArray = Object.values(state.peers);
return {
peers : peersArray,
selectedPeerName : state.room.selectedPeerName,
spotlights : state.room.spotlights
};
};
const ParticipantListContainer = withRoomContext(connect(
mapStateToProps
)(ParticipantList));
export default ParticipantListContainer;

View file

@ -1,123 +0,0 @@
import React from 'react';
import { connect } from 'react-redux';
import * as appPropTypes from '../../appPropTypes';
import { withRoomContext } from '../../../RoomContext';
import * as stateActions from '../../../redux/stateActions';
import PropTypes from 'prop-types';
import Dropdown from 'react-dropdown';
import ReactTooltip from 'react-tooltip';
const modes = [ {
value : 'democratic',
label : 'Democratic view'
}, {
value : 'filmstrip',
label : 'Filmstrip view'
} ];
const findOption = (options, value) => options.find((option) => option.value === value);
const Settings = ({
roomClient,
room,
me,
onToggleAdvancedMode,
handleChangeMode
}) =>
{
let webcams;
if (me.webcamDevices)
webcams = Array.from(me.webcamDevices.values());
else
webcams = [];
let audioDevices;
let audioDevicesText;
if (me.canChangeAudioDevice)
audioDevicesText = 'Select audio input device';
else
audioDevicesText = 'Unable to select audio input device';
if (me.audioDevices)
audioDevices = Array.from(me.audioDevices.values());
else
audioDevices = [];
return (
<div className='settings'>
<Dropdown
options={webcams}
value={findOption(webcams, me.selectedWebcam)}
onChange={(webcam) => roomClient.changeWebcam(webcam.value)}
placeholder={'Select camera'}
/>
<Dropdown
disabled={!me.canChangeAudioDevice}
options={audioDevices}
value={findOption(audioDevices, me.selectedAudioDevice)}
onChange={(device) => roomClient.changeAudioDevice(device.value)}
placeholder={audioDevicesText}
/>
<ReactTooltip
effect='solid'
/>
<div
data-tip='keyboard shortcut: &lsquo;a&lsquo;'
data-type='dark'
data-place='left'
>
<input
id='room-mode'
type='checkbox'
checked={room.advancedMode}
onChange={onToggleAdvancedMode}
/>
<label htmlFor='room-mode'>Advanced mode</label>
</div>
<div
data-tip='keyboard shortcut: type a digit'
data-type='dark'
data-place='left'
>
<Dropdown
options={modes}
value={findOption(modes, room.mode)}
onChange={(mode) => handleChangeMode(mode.value)}
/>
</div>
</div>
);
};
Settings.propTypes =
{
roomClient : PropTypes.any.isRequired,
me : appPropTypes.Me.isRequired,
room : appPropTypes.Room.isRequired,
onToggleAdvancedMode : PropTypes.func.isRequired,
handleChangeMode : PropTypes.func.isRequired
};
const mapStateToProps = (state) =>
{
return {
me : state.me,
room : state.room
};
};
const mapDispatchToProps = {
onToggleAdvancedMode : stateActions.toggleAdvancedMode,
handleChangeMode : stateActions.setDisplayMode
};
const SettingsContainer = withRoomContext(connect(
mapStateToProps,
mapDispatchToProps
)(Settings));
export default SettingsContainer;

View file

@ -1,41 +0,0 @@
import React from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import classNames from 'classnames';
import * as stateActions from '../../redux/stateActions';
const TabHeader = ({ currentToolTab, setToolTab, id, name, badge }) => (
<div
className={classNames('tab-header', {
checked : currentToolTab === id
})}
onClick={() => setToolTab(id)}
>
{name}
<If condition={badge > 0}>
<span className='badge'>{badge}</span>
</If>
</div>
);
TabHeader.propTypes = {
currentToolTab : PropTypes.string.isRequired,
setToolTab : PropTypes.func.isRequired,
id : PropTypes.string.isRequired,
name : PropTypes.string.isRequired,
badge : PropTypes.number
};
const mapStateToProps = (state) => ({
currentToolTab : state.toolarea.currentToolTab
});
const mapDispatchToProps = {
setToolTab : stateActions.setToolTab
};
export default connect(
mapStateToProps,
mapDispatchToProps
)(TabHeader);

View file

@ -1,134 +0,0 @@
import React, { Fragment } from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import classNames from 'classnames';
import * as stateActions from '../../redux/stateActions';
import ParticipantList from './ParticipantList/ParticipantList';
import Chat from './Chat/Chat';
import Settings from './Settings/Settings';
import FileSharing from './FileSharing/FileSharing';
import TabHeader from './TabHeader';
class ToolArea extends React.Component
{
constructor(props)
{
super(props);
}
render()
{
const {
currentToolTab,
toolAreaOpen,
unreadMessages,
unreadFiles,
toggleToolArea,
unread
} = this.props;
const VisibleTab = {
chat : Chat,
files : FileSharing,
users : ParticipantList,
settings : Settings
}[currentToolTab];
return (
<Fragment>
<div
className={classNames('toolarea-shade', {
open : toolAreaOpen
})}
onClick={toggleToolArea}
/>
<div
data-component='ToolArea'
className={classNames({
open : toolAreaOpen
})}
>
<div
className='toolarea-button'
onClick={toggleToolArea}
>
<span className='content'>
<div
className='toolarea-icon'
/>
<p>Toolbox</p>
</span>
<If condition={!toolAreaOpen && unread > 0}>
<span className={classNames('badge', { long: unread >= 10 })}>
{unread}
</span>
</If>
</div>
<div className='tab-headers'>
<TabHeader
id='chat'
name='Chat'
badge={unreadMessages}
/>
<TabHeader
id='files'
name='Files'
badge={unreadFiles}
/>
<TabHeader
id='users'
name='Users'
/>
<TabHeader
id='settings'
name='Settings'
/>
</div>
<div className='tab'>
<VisibleTab />
</div>
</div>
</Fragment>
);
}
}
ToolArea.propTypes =
{
advancedMode : PropTypes.bool,
currentToolTab : PropTypes.string.isRequired,
setToolTab : PropTypes.func.isRequired,
unreadMessages : PropTypes.number.isRequired,
unreadFiles : PropTypes.number.isRequired,
toolAreaOpen : PropTypes.bool,
toggleToolArea : PropTypes.func.isRequired,
closeToolArea : PropTypes.func.isRequired,
unread : PropTypes.number.isRequired
};
const mapStateToProps = (state) => ({
currentToolTab : state.toolarea.currentToolTab,
unreadMessages : state.toolarea.unreadMessages,
unreadFiles : state.toolarea.unreadFiles,
toolAreaOpen : state.toolarea.toolAreaOpen,
unread : state.toolarea.unreadMessages +
state.toolarea.unreadFiles
});
const mapDispatchToProps = {
setToolTab : stateActions.setToolTab,
toggleToolArea : stateActions.toggleToolArea,
closeToolArea : stateActions.closeToolArea
};
const ToolAreaContainer = connect(
mapStateToProps,
mapDispatchToProps
)(ToolArea);
export default ToolAreaContainer;

View file

@ -1,63 +0,0 @@
import React, { Component } from 'react';
import { findDOMNode } from 'react-dom';
/**
* A higher order component which scrolls the user to the bottom of the
* wrapped component, provided that the user already was at the bottom
* of the wrapped component. Useful for chats and similar use cases.
* @param {number} treshold The required distance from the bottom required.
*/
const scrollToBottom = (treshold = 0) => (WrappedComponent) =>
{
return class AutoScroller extends Component
{
constructor(props)
{
super(props);
this.ref = React.createRef();
}
getSnapshotBeforeUpdate()
{
// Check if the user has scrolled close enough to the bottom for
// us to scroll to the bottom or not.
return this.elem.scrollHeight - this.elem.scrollTop <=
this.elem.clientHeight - treshold;
}
scrollToBottom = () =>
{
// Scroll the user to the bottom of the wrapped element.
this.elem.scrollTop = this.elem.scrollHeight;
};
componentDidMount()
{
// eslint-disable-next-line react/no-find-dom-node
this.elem = findDOMNode(this.ref.current);
this.scrollToBottom();
}
componentDidUpdate(prevProps, prevState, atBottom)
{
if (atBottom)
{
this.scrollToBottom();
}
}
render()
{
return (
<WrappedComponent
ref={this.ref}
{...this.props}
/>
);
}
};
};
export default scrollToBottom;

View file

@ -1,95 +0,0 @@
import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import classnames from 'classnames';
import * as appPropTypes from '../appPropTypes';
import * as stateActions from '../../redux/stateActions';
import FullView from './FullView';
const FullScreenView = (props) =>
{
const {
advancedMode,
consumer,
toggleConsumerFullscreen,
toolbarsVisible
} = props;
if (!consumer)
return null;
const consumerVisible = (
Boolean(consumer) &&
!consumer.locallyPaused &&
!consumer.remotelyPaused
);
let consumerProfile;
if (consumer)
consumerProfile = consumer.profile;
return (
<div data-component='FullScreenView'>
<If condition={consumerVisible && !consumer.supported}>
<div className='incompatible-video'>
<p>incompatible video</p>
</div>
</If>
<div className='controls'>
<div
className={classnames('button', 'exitfullscreen', 'room-controls', {
visible : toolbarsVisible
})}
onClick={(e) =>
{
e.stopPropagation();
toggleConsumerFullscreen(consumer);
}}
/>
</div>
<FullView
advancedMode={advancedMode}
videoTrack={consumer ? consumer.track : null}
videoVisible={consumerVisible}
videoProfile={consumerProfile}
/>
</div>
);
};
FullScreenView.propTypes =
{
advancedMode : PropTypes.bool,
consumer : appPropTypes.Consumer,
toggleConsumerFullscreen : PropTypes.func.isRequired,
toolbarsVisible : PropTypes.bool
};
const mapStateToProps = (state) =>
{
return {
consumer : state.consumers[state.room.fullScreenConsumer],
toolbarsVisible : state.room.toolbarsVisible
};
};
const mapDispatchToProps = (dispatch) =>
{
return {
toggleConsumerFullscreen : (consumer) =>
{
if (consumer)
dispatch(stateActions.toggleConsumerFullscreen(consumer.id));
}
};
};
const FullScreenViewContainer = connect(
mapStateToProps,
mapDispatchToProps
)(FullScreenView);
export default FullScreenViewContainer;

View file

@ -1,83 +0,0 @@
import React from 'react';
import PropTypes from 'prop-types';
import classnames from 'classnames';
export default class FullView extends React.Component
{
constructor(props)
{
super(props);
// Latest received video track.
// @type {MediaStreamTrack}
this._videoTrack = null;
this.video = React.createRef();
}
render()
{
const {
videoVisible,
videoProfile
} = this.props;
return (
<div data-component='FullView'>
<video
ref={this.video}
className={classnames({
hidden : !videoVisible,
loading : videoProfile === 'none'
})}
autoPlay
playsInline
muted={Boolean(true)}
/>
</div>
);
}
componentDidMount()
{
const { videoTrack } = this.props;
this._setTracks(videoTrack);
}
componentDidUpdate()
{
const { videoTrack } = this.props;
this._setTracks(videoTrack);
}
_setTracks(videoTrack)
{
if (this._videoTrack === videoTrack)
return;
this._videoTrack = videoTrack;
const video = this.video.current;
if (videoTrack)
{
const stream = new MediaStream;
stream.addTrack(videoTrack);
video.srcObject = stream;
}
else
{
video.srcObject = null;
}
}
}
FullView.propTypes =
{
videoTrack : PropTypes.any,
videoVisible : PropTypes.bool,
videoProfile : PropTypes.string
};

View file

@ -1,222 +0,0 @@
import React from 'react';
import PropTypes from 'prop-types';
import classnames from 'classnames';
import * as appPropTypes from '../appPropTypes';
import EditableInput from '../Controls/EditableInput';
export default class PeerView extends React.Component
{
constructor(props)
{
super(props);
this.state =
{
volume : 0, // Integer from 0 to 10.,
videoWidth : null,
videoHeight : null
};
// Latest received video track.
// @type {MediaStreamTrack}
this._audioTrack = null;
// Latest received video track.
// @type {MediaStreamTrack}
this._videoTrack = null;
// Periodic timer for showing video resolution.
this._videoResolutionTimer = null;
}
render()
{
const {
isMe,
peer,
volume,
advancedMode,
videoVisible,
videoProfile,
audioCodec,
videoCodec,
onChangeDisplayName
} = this.props;
const {
videoWidth,
videoHeight
} = this.state;
return (
<div data-component='PeerView'>
<div className='info'>
<If condition={advancedMode}>
<div className={classnames('media', { 'is-me': isMe })}>
<div className='box'>
<If condition={audioCodec}>
<p className='codec'>{audioCodec}</p>
</If>
<If condition={videoCodec}>
<p className='codec'>{videoCodec} {videoProfile}</p>
</If>
<If condition={(videoVisible && videoWidth !== null)}>
<p className='resolution'>{videoWidth}x{videoHeight}</p>
</If>
</div>
</div>
</If>
<div className={classnames('peer', { 'is-me': isMe })}>
<Choose>
<When condition={isMe}>
<EditableInput
value={peer.displayName}
propName='displayName'
className='display-name editable'
classLoading='loading'
classInvalid='invalid'
shouldBlockWhileLoading
editProps={{
maxLength : 20,
autoCorrect : false,
spellCheck : false
}}
onChange={({ displayName }) => onChangeDisplayName(displayName)}
/>
</When>
<Otherwise>
<span className='display-name'>
{peer.displayName}
</span>
</Otherwise>
</Choose>
<If condition={advancedMode}>
<div className='row'>
<span
className={classnames('device-icon', peer.device.flag)}
/>
<span className='device-version'>
{peer.device.name} {Math.floor(peer.device.version) || null}
</span>
</div>
</If>
</div>
</div>
<video
ref='video'
className={classnames({
hidden : !videoVisible,
'is-me' : isMe,
loading : videoProfile === 'none'
})}
autoPlay
playsInline
muted={isMe}
/>
<div className='volume-container'>
<div className={classnames('bar', `level${volume}`)} />
</div>
</div>
);
}
componentDidMount()
{
const { audioTrack, videoTrack } = this.props;
this._setTracks(audioTrack, videoTrack);
}
componentWillUnmount()
{
clearInterval(this._videoResolutionTimer);
}
componentWillReceiveProps(nextProps)
{
const { audioTrack, videoTrack } = nextProps;
this._setTracks(audioTrack, videoTrack);
}
_setTracks(audioTrack, videoTrack)
{
if (this._audioTrack === audioTrack && this._videoTrack === videoTrack)
return;
this._audioTrack = audioTrack;
this._videoTrack = videoTrack;
clearInterval(this._videoResolutionTimer);
this._hideVideoResolution();
const { video } = this.refs;
if (audioTrack || videoTrack)
{
const stream = new MediaStream;
if (audioTrack)
stream.addTrack(audioTrack);
if (videoTrack)
stream.addTrack(videoTrack);
video.srcObject = stream;
if (videoTrack)
this._showVideoResolution();
}
else
{
video.srcObject = null;
}
}
_showVideoResolution()
{
this._videoResolutionTimer = setInterval(() =>
{
const { videoWidth, videoHeight } = this.state;
const { video } = this.refs;
// Don't re-render if nothing changed.
if (video.videoWidth === videoWidth && video.videoHeight === videoHeight)
return;
this.setState(
{
videoWidth : video.videoWidth,
videoHeight : video.videoHeight
});
}, 1000);
}
_hideVideoResolution()
{
this.setState({ videoWidth: null, videoHeight: null });
}
}
PeerView.propTypes =
{
isMe : PropTypes.bool,
peer : PropTypes.oneOfType(
[ appPropTypes.Me, appPropTypes.Peer ]).isRequired,
advancedMode : PropTypes.bool,
audioTrack : PropTypes.any,
volume : PropTypes.number,
videoTrack : PropTypes.any,
videoVisible : PropTypes.bool.isRequired,
videoProfile : PropTypes.string,
audioCodec : PropTypes.string,
videoCodec : PropTypes.string,
onChangeDisplayName : PropTypes.func
};

View file

@ -1,157 +0,0 @@
import React from 'react';
import PropTypes from 'prop-types';
import classnames from 'classnames';
export default class ScreenView extends React.Component
{
constructor(props)
{
super(props);
this.state =
{
screenWidth : null,
screenHeight : null
};
// Latest received screen track.
// @type {MediaStreamTrack}
this._screenTrack = null;
// Periodic timer for showing video resolution.
this._screenResolutionTimer = null;
}
render()
{
const {
isMe,
advancedMode,
screenVisible,
screenProfile,
screenCodec
} = this.props;
const {
screenWidth,
screenHeight
} = this.state;
return (
<div data-component='ScreenView'>
<div className='info'>
<If condition={advancedMode}>
<div className={classnames('media', { 'is-me': isMe })}>
<If condition={screenVisible}>
<div className='box'>
<If condition={screenCodec}>
<p className='codec'>{screenCodec} {screenProfile}</p>
</If>
<If condition={(screenVisible && screenWidth !== null)}>
<p className='resolution'>{screenWidth}x{screenHeight}</p>
</If>
</div>
</If>
</div>
</If>
</div>
<video
ref='video'
className={classnames({
hidden : !screenVisible,
'is-me' : isMe,
loading : screenProfile === 'none'
})}
autoPlay
playsInline
muted={Boolean(true)}
/>
</div>
);
}
componentDidMount()
{
const { screenTrack } = this.props;
this._setTracks(screenTrack);
}
componentWillUnmount()
{
clearInterval(this._screenResolutionTimer);
}
componentWillReceiveProps(nextProps)
{
const { screenTrack } = nextProps;
this._setTracks(screenTrack);
}
_setTracks(screenTrack)
{
if (this._screenTrack === screenTrack)
return;
this._screenTrack = screenTrack;
clearInterval(this._screenResolutionTimer);
this._hideScreenResolution();
const { video } = this.refs;
if (screenTrack)
{
const stream = new MediaStream;
if (screenTrack)
stream.addTrack(screenTrack);
video.srcObject = stream;
if (screenTrack)
this._showScreenResolution();
}
else
{
video.srcObject = null;
}
}
_showScreenResolution()
{
this._screenResolutionTimer = setInterval(() =>
{
const { screenWidth, screenHeight } = this.state;
const { video } = this.refs;
// Don't re-render if nothing changed.
if (video.videoWidth === screenWidth && video.videoHeight === screenHeight)
return;
this.setState(
{
screenWidth : video.videoWidth,
screenHeight : video.videoHeight
});
}, 1000);
}
_hideScreenResolution()
{
this.setState({ screenWidth: null, screenHeight: null });
}
}
ScreenView.propTypes =
{
isMe : PropTypes.bool,
advancedMode : PropTypes.bool,
screenTrack : PropTypes.any,
screenVisible : PropTypes.bool,
screenProfile : PropTypes.string,
screenCodec : PropTypes.string
};

View file

@ -1,72 +0,0 @@
import React from 'react';
import { connect } from 'react-redux';
import NewWindow from './NewWindow';
import PropTypes from 'prop-types';
import * as appPropTypes from '../appPropTypes';
import * as stateActions from '../../redux/stateActions';
import FullView from '../VideoContainers/FullView';
const VideoWindow = (props) =>
{
const {
advancedMode,
consumer,
toggleConsumerWindow
} = props;
if (!consumer)
return null;
const consumerVisible = (
Boolean(consumer) &&
!consumer.locallyPaused &&
!consumer.remotelyPaused
);
let consumerProfile;
if (consumer)
consumerProfile = consumer.profile;
return (
<NewWindow onUnload={toggleConsumerWindow}>
<FullView
advancedMode={advancedMode}
videoTrack={consumer ? consumer.track : null}
videoVisible={consumerVisible}
videoProfile={consumerProfile}
/>
</NewWindow>
);
};
VideoWindow.propTypes =
{
advancedMode : PropTypes.bool,
consumer : appPropTypes.Consumer,
toggleConsumerWindow : PropTypes.func.isRequired
};
const mapStateToProps = (state) =>
{
return {
consumer : state.consumers[state.room.windowConsumer]
};
};
const mapDispatchToProps = (dispatch) =>
{
return {
toggleConsumerWindow : () =>
{
dispatch(stateActions.toggleConsumerWindow());
}
};
};
const VideoWindowContainer = connect(
mapStateToProps,
mapDispatchToProps
)(VideoWindow);
export default VideoWindowContainer;

View file

@ -1,91 +0,0 @@
import PropTypes from 'prop-types';
export const Room = PropTypes.shape(
{
url : PropTypes.string.isRequired,
state : PropTypes.oneOf(
[ 'new', 'connecting', 'connected', 'closed' ]).isRequired,
activeSpeakerName : PropTypes.string
});
export const Device = PropTypes.shape(
{
flag : PropTypes.string.isRequired,
name : PropTypes.string.isRequired,
version : PropTypes.string
});
export const Me = PropTypes.shape(
{
name : PropTypes.string.isRequired,
displayName : PropTypes.string,
displayNameSet : PropTypes.bool.isRequired,
device : Device.isRequired,
canSendMic : PropTypes.bool.isRequired,
canSendWebcam : PropTypes.bool.isRequired,
webcamInProgress : PropTypes.bool.isRequired,
audioOnly : PropTypes.bool.isRequired,
audioOnlyInProgress : PropTypes.bool.isRequired,
restartIceInProgress : PropTypes.bool.isRequired
});
export const Producer = PropTypes.shape(
{
id : PropTypes.number.isRequired,
source : PropTypes.oneOf([ 'mic', 'webcam', 'screen' ]).isRequired,
deviceLabel : PropTypes.string,
type : PropTypes.oneOf([ 'front', 'back', 'screen' ]),
locallyPaused : PropTypes.bool.isRequired,
remotelyPaused : PropTypes.bool.isRequired,
track : PropTypes.any,
codec : PropTypes.string.isRequired
});
export const Peer = PropTypes.shape(
{
name : PropTypes.string.isRequired,
displayName : PropTypes.string,
device : Device.isRequired,
consumers : PropTypes.arrayOf(PropTypes.number).isRequired
});
export const Consumer = PropTypes.shape(
{
id : PropTypes.number.isRequired,
peerName : PropTypes.string.isRequired,
source : PropTypes.oneOf([ 'mic', 'webcam', 'screen' ]).isRequired,
supported : PropTypes.bool.isRequired,
locallyPaused : PropTypes.bool.isRequired,
remotelyPaused : PropTypes.bool.isRequired,
profile : PropTypes.oneOf([ 'none', 'default', 'low', 'medium', 'high' ]),
track : PropTypes.any,
codec : PropTypes.string
});
export const Notification = PropTypes.shape(
{
id : PropTypes.string.isRequired,
type : PropTypes.oneOf([ 'info', 'error' ]).isRequired,
timeout : PropTypes.number
});
export const Message = PropTypes.shape(
{
type : PropTypes.string,
component : PropTypes.string,
text : PropTypes.string,
sender : PropTypes.string
});
export const FileEntryProps = PropTypes.shape(
{
data : PropTypes.shape({
name : PropTypes.string.isRequired,
picture : PropTypes.string,
file : PropTypes.shape({
magnet : PropTypes.string.isRequired
}).isRequired,
me : PropTypes.bool
}).isRequired,
notify : PropTypes.func.isRequired
});

View file

@ -1,22 +0,0 @@
import React from 'react';
import PropTypes from 'prop-types';
import { CSSTransition } from 'react-transition-group';
const Appear = ({ duration, children }) => (
<CSSTransition
in
classNames='Appear'
timeout={duration || 1000}
appear
>
{children}
</CSSTransition>
);
Appear.propTypes =
{
duration : PropTypes.number,
children : PropTypes.any
};
export { Appear };

View file

@ -1,34 +0,0 @@
import jsCookie from 'js-cookie';
const USER_COOKIE = 'multiparty-meeting.user';
const DEVICES_COOKIE = 'multiparty-meeting.devices';
export function getUser()
{
return jsCookie.getJSON(USER_COOKIE);
}
export function setUser({ displayName })
{
jsCookie.set(USER_COOKIE, { displayName });
}
export function getDevices()
{
return jsCookie.getJSON(DEVICES_COOKIE);
}
export function setDevices({ webcamEnabled })
{
jsCookie.set(DEVICES_COOKIE, { webcamEnabled });
}
export function setAudioDevice({ audioDeviceId })
{
jsCookie.set(DEVICES_COOKIE, { audioDeviceId });
}
export function setVideoDevice({ videoDeviceId })
{
jsCookie.set(DEVICES_COOKIE, { videoDeviceId });
}

View file

@ -1,157 +0,0 @@
import domready from 'domready';
import UrlParse from 'url-parse';
import React from 'react';
import { render } from 'react-dom';
import { Provider } from 'react-redux';
import { getDeviceInfo } from 'mediasoup-client';
import randomString from 'random-string';
import Logger from './Logger';
import * as utils from './utils';
import RoomClient from './RoomClient';
import RoomContext from './RoomContext';
import * as cookiesManager from './cookiesManager';
import * as stateActions from './redux/stateActions';
import Room from './components/Room';
import { loginEnabled } from '../config/config';
import { store } from './store';
const logger = new Logger();
let roomClient;
RoomClient.init({ store });
domready(() =>
{
logger.debug('DOM ready');
// Load stuff and run
utils.initialize()
.then(run);
});
function run()
{
logger.debug('run() [environment:%s]', process.env.NODE_ENV);
const peerName = randomString({ length: 8 }).toLowerCase();
const urlParser = new UrlParse(window.location.href, true);
let roomId = (urlParser.pathname).substr(1)
? (urlParser.pathname).substr(1).toLowerCase() : urlParser.query.roomId.toLowerCase();
const produce = urlParser.query.produce !== 'false';
let displayName = urlParser.query.displayName;
const isSipEndpoint = urlParser.query.sipEndpoint === 'true';
const useSimulcast = urlParser.query.simulcast === 'true';
if (!roomId)
{
roomId = randomString({ length: 8 }).toLowerCase();
urlParser.query.roomId = roomId;
window.history.pushState('', '', urlParser.toString());
}
// Get the effective/shareable Room URL.
const roomUrlParser = new UrlParse(window.location.href, true);
for (const key of Object.keys(roomUrlParser.query))
{
// Don't keep some custom params.
switch (key)
{
case 'roomId':
case 'simulcast':
break;
default:
delete roomUrlParser.query[key];
}
}
delete roomUrlParser.hash;
const roomUrl = roomUrlParser.toString();
// Get displayName from cookie (if not already given as param).
const userCookie = cookiesManager.getUser() || {};
let displayNameSet;
if (!displayName)
displayName = userCookie.displayName;
if (displayName)
{
displayNameSet = true;
}
else
{
displayName = 'Guest';
displayNameSet = false;
}
// Get current device.
const device = getDeviceInfo();
// If a SIP endpoint mangle device info.
if (isSipEndpoint)
{
device.flag = 'sipendpoint';
device.name = 'SIP Endpoint';
device.version = undefined;
}
store.dispatch(
stateActions.setRoomUrl(roomUrl));
store.dispatch(
stateActions.setMe({ peerName, displayName, displayNameSet, device, loginEnabled }));
roomClient = new RoomClient(
{ roomId, peerName, displayName, device, useSimulcast, produce });
render(
<Provider store={store}>
<RoomContext.Provider value={roomClient}>
<Room />
</RoomContext.Provider>
</Provider>,
document.getElementById('multiparty-meeting')
);
}
// TODO: Debugging stuff.
global.CLIENT = roomClient;
/* setInterval(() =>
{
if (!roomClient._room.peers[0])
{
delete global.CONSUMER;
return;
}
const peer = roomClient._room.peers[0];
global.CONSUMER = peer.consumers[peer.consumers.length - 1];
}, 2000);
*/
global.sendSdp = function()
{
logger.debug('---------- SEND_TRANSPORT LOCAL SDP OFFER:');
logger.debug(
roomClient._sendTransport._handler._pc.localDescription.sdp);
logger.debug('---------- SEND_TRANSPORT REMOTE SDP ANSWER:');
logger.debug(
roomClient._sendTransport._handler._pc.remoteDescription.sdp);
};
global.recvSdp = function()
{
logger.debug('---------- RECV_TRANSPORT REMOTE SDP OFFER:');
logger.debug(
roomClient._recvTransport._handler._pc.remoteDescription.sdp);
logger.debug('---------- RECV_TRANSPORT LOCAL SDP ANSWER:');
logger.debug(
roomClient._recvTransport._handler._pc.localDescription.sdp);
};

View file

@ -1,101 +0,0 @@
# APP STATE
```js
{
peerWidth : 200,
peerHeight : 150,
room :
{
url : 'https://example.io/?&roomId=d0el8y34',
state : 'connected', // new/connecting/connected/closed
activeSpeakerName : 'alice'
},
me :
{
name : 'bob',
displayName : 'Bob McFLower',
displayNameSet : false, // true if got from cookie or manually set.
device : { flag: 'firefox', name: 'Firefox', version: '61' },
canSendMic : true,
canSendWebcam : true,
webcamInProgress : false,
audioOnly : false,
audioOnlyInProgress : false,
restartIceInProgress : false
},
producers :
{
1111 :
{
id : 1111,
source : 'mic', // mic/webcam,
locallyPaused : true,
remotelyPaused : false,
track : MediaStreamTrack,
codec : 'opus'
},
1112 :
{
id : 1112,
source : 'webcam', // mic/webcam
deviceLabel : 'Macbook Webcam',
type : 'front', // front/back
locallyPaused : false,
remotelyPaused : false,
track : MediaStreamTrack,
codec : 'vp8',
}
},
peers :
{
'alice' :
{
name : 'alice',
displayName : 'Alice Thomsom',
raiseHandState : false,
device : { flag: 'chrome', name: 'Chrome', version: '58' },
consumers : [ 5551, 5552 ]
}
},
consumers :
{
5551 :
{
id : 5551,
peerName : 'alice',
source : 'mic', // mic/webcam
supported : true,
locallyPaused : false,
remotelyPaused : false,
profile : 'default',
track : MediaStreamTrack,
codec : 'opus'
},
5552 :
{
id : 5552,
peerName : 'alice',
source : 'webcam',
supported : false,
locallyPaused : false,
remotelyPaused : true,
profile : 'medium',
track : null,
codec : 'h264'
}
},
notifications :
[
{
id : 'qweasdw43we',
type : 'info' // info/error
text : 'You joined the room'
},
{
id : 'j7sdhkjjkcc',
type : 'error'
text : 'Could not add webcam'
}
]
}
```

View file

@ -1,43 +0,0 @@
import
{
createNewMessage
} from './helper';
const chatmessages = (state = [], action) =>
{
switch (action.type)
{
case 'ADD_NEW_USER_MESSAGE':
{
const { text } = action.payload;
const message = createNewMessage(text, 'client', 'Me', undefined);
return [ ...state, message ];
}
case 'ADD_NEW_RESPONSE_MESSAGE':
{
const { message } = action.payload;
return [ ...state, message ];
}
case 'ADD_CHAT_HISTORY':
{
const { chatHistory } = action.payload;
return [ ...state, ...chatHistory ];
}
case 'DROP_MESSAGES':
{
return [];
}
default:
return state;
}
};
export default chatmessages;

View file

@ -1,99 +0,0 @@
const files = (state = {}, action) =>
{
switch (action.type)
{
case 'ADD_FILE':
{
const { file } = action.payload;
const newFile = {
active : false,
progress : 0,
files : null,
me : false,
...file
};
return { ...state, [file.magnetUri]: newFile };
}
case 'ADD_FILE_HISTORY':
{
const { fileHistory } = action.payload;
const newFileHistory = {};
fileHistory.map((file) =>
{
const newFile = {
active : false,
progress : 0,
files : null,
me : false,
...file
};
newFileHistory[file.magnetUri] = newFile;
});
return { ...state, ...newFileHistory };
}
case 'SET_FILE_ACTIVE':
{
const { magnetUri } = action.payload;
const file = state[magnetUri];
const newFile = { ...file, active: true };
return { ...state, [magnetUri]: newFile };
}
case 'SET_FILE_INACTIVE':
{
const { magnetUri } = action.payload;
const file = state[magnetUri];
const newFile = { ...file, active: false };
return { ...state, [magnetUri]: newFile };
}
case 'SET_FILE_PROGRESS':
{
const { magnetUri, progress } = action.payload;
const file = state[magnetUri];
const newFile = { ...file, progress: progress };
return { ...state, [magnetUri]: newFile };
}
case 'SET_FILE_DONE':
{
const { magnetUri, sharedFiles } = action.payload;
const file = state[magnetUri];
const newFile = {
...file,
files : sharedFiles,
progress : 1,
active : false,
timeout : false
};
return { ...state, [magnetUri]: newFile };
}
case 'REMOVE_FILE':
{
const { magnetUri } = action.payload;
return state.filter((file) => file.magnetUri !== magnetUri);
}
default:
return state;
}
};
export default files;

View file

@ -1,11 +0,0 @@
export function createNewMessage(text, sender, name, picture)
{
return {
type : 'message',
text,
time : Date.now(),
name,
sender,
picture
};
}

View file

@ -1,25 +0,0 @@
import { combineReducers } from 'redux';
import room from './room';
import me from './me';
import producers from './producers';
import peers from './peers';
import consumers from './consumers';
import notifications from './notifications';
import chatmessages from './chatmessages';
import toolarea from './toolarea';
import files from './files';
const reducers = combineReducers(
{
room,
me,
producers,
peers,
consumers,
notifications,
chatmessages,
toolarea,
files
});
export default reducers;

View file

@ -1,189 +0,0 @@
const initialState =
{
name : null,
displayName : null,
displayNameSet : false,
device : null,
canSendMic : false,
canSendWebcam : false,
canShareScreen : false,
needExtension : false,
canChangeAudioDevice : false,
audioDevices : null,
canChangeWebcam : false,
webcamDevices : null,
webcamInProgress : false,
audioInProgress : false,
screenShareInProgress : false,
loginEnabled : false,
audioOnly : false,
audioOnlyInProgress : false,
raiseHand : false,
raiseHandInProgress : false,
restartIceInProgress : false,
picture : null,
selectedWebcam : null,
selectedAudioDevice : null,
loggedIn : false
};
const me = (state = initialState, action) =>
{
switch (action.type)
{
case 'SET_ME':
{
const {
peerName,
displayName,
displayNameSet,
device,
loginEnabled
} = action.payload;
return {
...state,
name : peerName,
displayName,
displayNameSet,
device,
loginEnabled
};
}
case 'LOGGED_IN':
return { ...state, loggedIn: true };
case 'USER_LOGOUT':
return { ...state, loggedIn: false };
case 'CHANGE_WEBCAM':
{
return { ...state, selectedWebcam: action.payload.deviceId };
}
case 'CHANGE_AUDIO_DEVICE':
{
return { ...state, selectedAudioDevice: action.payload.deviceId };
}
case 'SET_MEDIA_CAPABILITIES':
{
const { canSendMic, canSendWebcam } = action.payload;
return { ...state, canSendMic, canSendWebcam };
}
case 'SET_SCREEN_CAPABILITIES':
{
const { canShareScreen, needExtension } = action.payload;
return { ...state, canShareScreen, needExtension };
}
case 'SET_CAN_CHANGE_AUDIO_DEVICE':
{
const canChangeAudioDevice = action.payload;
return { ...state, canChangeAudioDevice };
}
case 'SET_AUDIO_DEVICES':
{
const { devices } = action.payload;
return { ...state, audioDevices: devices };
}
case 'SET_CAN_CHANGE_WEBCAM':
{
const canChangeWebcam = action.payload;
return { ...state, canChangeWebcam };
}
case 'SET_WEBCAM_DEVICES':
{
const { devices } = action.payload;
return { ...state, webcamDevices: devices };
}
case 'SET_AUDIO_IN_PROGRESS':
{
const { flag } = action.payload;
return { ...state, audioInProgress: flag };
}
case 'SET_WEBCAM_IN_PROGRESS':
{
const { flag } = action.payload;
return { ...state, webcamInProgress: flag };
}
case 'SET_SCREEN_SHARE_IN_PROGRESS':
{
const { flag } = action.payload;
return { ...state, screenShareInProgress: flag };
}
case 'SET_DISPLAY_NAME':
{
let { displayName } = action.payload;
// Be ready for undefined displayName (so keep previous one).
if (!displayName)
displayName = state.displayName;
return { ...state, displayName, displayNameSet: true };
}
case 'SET_AUDIO_ONLY_STATE':
{
const { enabled } = action.payload;
return { ...state, audioOnly: enabled };
}
case 'SET_AUDIO_ONLY_IN_PROGRESS':
{
const { flag } = action.payload;
return { ...state, audioOnlyInProgress: flag };
}
case 'SET_MY_RAISE_HAND_STATE':
{
const { flag } = action.payload;
return { ...state, raiseHand: flag };
}
case 'SET_MY_RAISE_HAND_STATE_IN_PROGRESS':
{
const { flag } = action.payload;
return { ...state, raiseHandInProgress: flag };
}
case 'SET_RESTART_ICE_IN_PROGRESS':
{
const { flag } = action.payload;
return { ...state, restartIceInProgress: flag };
}
case 'SET_PICTURE':
{
return { ...state, picture: action.payload.picture };
}
default:
return state;
}
};
export default me;

View file

@ -1,98 +0,0 @@
import omit from 'lodash/omit';
const peer = (state = {}, action) =>
{
switch (action.type)
{
case 'ADD_PEER':
return action.payload.peer;
case 'SET_PEER_DISPLAY_NAME':
return { ...state, displayName: action.payload.displayName };
case 'SET_PEER_VIDEO_IN_PROGRESS':
return { ...state, peerVideoInProgress: action.payload.flag };
case 'SET_PEER_AUDIO_IN_PROGRESS':
return { ...state, peerAudioInProgress: action.payload.flag };
case 'SET_PEER_SCREEN_IN_PROGRESS':
return { ...state, peerScreenInProgress: action.payload.flag };
case 'SET_PEER_RAISE_HAND_STATE':
return { ...state, raiseHandState: action.payload.raiseHandState };
case 'ADD_CONSUMER':
{
const consumers = [ ...state.consumers, action.payload.consumer.id ];
return { ...state, consumers };
}
case 'REMOVE_CONSUMER':
{
const consumers = state.consumers.filter((consumer) =>
consumer !== action.payload.consumerId);
return { ...state, consumers };
}
case 'SET_PEER_PICTURE':
{
return { ...state, picture: action.payload.picture };
}
default:
return state;
}
};
const peers = (state = {}, action) =>
{
switch (action.type)
{
case 'ADD_PEER':
{
return { ...state, [action.payload.peer.name]: peer(undefined, action) };
}
case 'REMOVE_PEER':
{
return omit(state, [ action.payload.peerName ]);
}
case 'SET_PEER_DISPLAY_NAME':
case 'SET_PEER_VIDEO_IN_PROGRESS':
case 'SET_PEER_AUDIO_IN_PROGRESS':
case 'SET_PEER_SCREEN_IN_PROGRESS':
case 'SET_PEER_RAISE_HAND_STATE':
case 'SET_PEER_PICTURE':
case 'ADD_CONSUMER':
{
const oldPeer = state[action.payload.peerName];
if (!oldPeer)
{
throw new Error('no Peer found');
}
return { ...state, [oldPeer.name]: peer(oldPeer, action) };
}
case 'REMOVE_CONSUMER':
{
const oldPeer = state[action.payload.peerName];
// NOTE: This means that the Peer was closed before, so it's ok.
if (!oldPeer)
return state;
return { ...state, [oldPeer.name]: peer(oldPeer, action) };
}
default:
return state;
}
};
export default peers;

View file

@ -1,144 +0,0 @@
const initialState =
{
url : null,
state : 'new', // new/connecting/connected/disconnected/closed,
locked : false,
lockedOut : false,
audioSuspended : false,
activeSpeakerName : null,
torrentSupport : false,
showSettings : false,
advancedMode : false,
fullScreenConsumer : null, // ConsumerID
windowConsumer : null, // ConsumerID
toolbarsVisible : true,
mode : 'democratic',
selectedPeerName : null,
spotlights : []
};
const room = (state = initialState, action) =>
{
switch (action.type)
{
case 'SET_ROOM_URL':
{
const { url } = action.payload;
return { ...state, url };
}
case 'SET_ROOM_STATE':
{
const roomState = action.payload.state;
if (roomState == 'connected')
return { ...state, state: roomState };
else
return { ...state, state: roomState, activeSpeakerName: null };
}
case 'SET_ROOM_LOCKED':
{
return { ...state, locked: true };
}
case 'SET_ROOM_UNLOCKED':
{
return { ...state, locked: false };
}
case 'SET_ROOM_LOCKED_OUT':
{
return { ...state, lockedOut: true };
}
case 'SET_AUDIO_SUSPENDED':
{
const { audioSuspended } = action.payload;
return { ...state, audioSuspended };
}
case 'SET_ROOM_ACTIVE_SPEAKER':
{
const { peerName } = action.payload;
return { ...state, activeSpeakerName: peerName };
}
case 'FILE_SHARING_SUPPORTED':
{
const { supported } = action.payload;
return { ...state, torrentSupport: supported };
}
case 'TOGGLE_SETTINGS':
{
const showSettings = !state.showSettings;
return { ...state, showSettings };
}
case 'TOGGLE_ADVANCED_MODE':
{
const advancedMode = !state.advancedMode;
return { ...state, advancedMode };
}
case 'TOGGLE_FULLSCREEN_CONSUMER':
{
const { consumerId } = action.payload;
const currentConsumer = state.fullScreenConsumer;
return { ...state, fullScreenConsumer: currentConsumer ? null : consumerId };
}
case 'TOGGLE_WINDOW_CONSUMER':
{
const { consumerId } = action.payload;
const currentConsumer = state.windowConsumer;
if (currentConsumer === consumerId)
return { ...state, windowConsumer: null };
else
return { ...state, windowConsumer: consumerId };
}
case 'SET_TOOLBARS_VISIBLE':
{
const { toolbarsVisible } = action.payload;
return { ...state, toolbarsVisible };
}
case 'SET_DISPLAY_MODE':
return { ...state, mode: action.payload.mode };
case 'SET_SELECTED_PEER':
{
const { selectedPeerName } = action.payload;
return {
...state,
selectedPeerName : state.selectedPeerName === selectedPeerName ?
null : selectedPeerName
};
}
case 'SET_SPOTLIGHTS':
{
const { spotlights } = action.payload;
return { ...state, spotlights };
}
default:
return state;
}
};
export default room;

View file

@ -1,570 +0,0 @@
export const setRoomUrl = (url) =>
{
return {
type : 'SET_ROOM_URL',
payload : { url }
};
};
export const setRoomState = (state) =>
{
return {
type : 'SET_ROOM_STATE',
payload : { state }
};
};
export const setRoomActiveSpeaker = (peerName) =>
{
return {
type : 'SET_ROOM_ACTIVE_SPEAKER',
payload : { peerName }
};
};
export const setRoomLocked = () =>
{
return {
type : 'SET_ROOM_LOCKED'
};
};
export const setRoomUnLocked = () =>
{
return {
type : 'SET_ROOM_UNLOCKED'
};
};
export const setRoomLockedOut = () =>
{
return {
type : 'SET_ROOM_LOCKED_OUT'
};
};
export const setAudioSuspended = ({ audioSuspended }) =>
{
return {
type : 'SET_AUDIO_SUSPENDED',
payload : { audioSuspended }
};
};
export const setMe = ({ peerName, displayName, displayNameSet, device, loginEnabled }) =>
{
return {
type : 'SET_ME',
payload : { peerName, displayName, displayNameSet, device, loginEnabled }
};
};
export const setMediaCapabilities = ({ canSendMic, canSendWebcam }) =>
{
return {
type : 'SET_MEDIA_CAPABILITIES',
payload : { canSendMic, canSendWebcam }
};
};
export const setScreenCapabilities = ({ canShareScreen, needExtension }) =>
{
return {
type : 'SET_SCREEN_CAPABILITIES',
payload : { canShareScreen, needExtension }
};
};
export const setCanChangeAudioDevice = (flag) =>
{
return {
type : 'SET_CAN_CHANGE_AUDIO_DEVICE',
payload : flag
};
};
export const setAudioDevices = (devices) =>
{
return {
type : 'SET_AUDIO_DEVICES',
payload : { devices }
};
};
export const setWebcamDevices = (devices) =>
{
return {
type : 'SET_WEBCAM_DEVICES',
payload : { devices }
};
};
export const setFileSharingSupported = (supported) =>
{
return {
type : 'FILE_SHARING_SUPPORTED',
payload : { supported }
};
};
export const setDisplayName = (displayName) =>
{
return {
type : 'SET_DISPLAY_NAME',
payload : { displayName }
};
};
export const toggleAdvancedMode = () =>
{
return {
type : 'TOGGLE_ADVANCED_MODE'
};
};
export const setDisplayMode = (mode) =>
({
type : 'SET_DISPLAY_MODE',
payload : { mode }
});
export const setAudioOnlyState = (enabled) =>
{
return {
type : 'SET_AUDIO_ONLY_STATE',
payload : { enabled }
};
};
export const setAudioOnlyInProgress = (flag) =>
{
return {
type : 'SET_AUDIO_ONLY_IN_PROGRESS',
payload : { flag }
};
};
export const setPeerVideoInProgress = (peerName, flag) =>
{
return {
type : 'SET_PEER_VIDEO_IN_PROGRESS',
payload : { peerName, flag }
};
};
export const setPeerAudioInProgress = (peerName, flag) =>
{
return {
type : 'SET_PEER_AUDIO_IN_PROGRESS',
payload : { peerName, flag }
};
};
export const setPeerScreenInProgress = (peerName, flag) =>
{
return {
type : 'SET_PEER_SCREEN_IN_PROGRESS',
payload : { peerName, flag }
};
};
export const setMyRaiseHandState = (flag) =>
{
return {
type : 'SET_MY_RAISE_HAND_STATE',
payload : { flag }
};
};
export const toggleSettings = () =>
{
return {
type : 'TOGGLE_SETTINGS'
};
};
export const toggleToolArea = () =>
{
return {
type : 'TOGGLE_TOOL_AREA'
};
};
export const openToolArea = () =>
{
return {
type : 'OPEN_TOOL_AREA'
};
};
export const closeToolArea = () =>
{
return {
type : 'CLOSE_TOOL_AREA'
};
};
export const setToolTab = (toolTab) =>
{
return {
type : 'SET_TOOL_TAB',
payload : { toolTab }
};
};
export const setMyRaiseHandStateInProgress = (flag) =>
{
return {
type : 'SET_MY_RAISE_HAND_STATE_IN_PROGRESS',
payload : { flag }
};
};
export const setPeerRaiseHandState = (peerName, raiseHandState) =>
{
return {
type : 'SET_PEER_RAISE_HAND_STATE',
payload : { peerName, raiseHandState }
};
};
export const setRestartIceInProgress = (flag) =>
{
return {
type : 'SET_RESTART_ICE_IN_PROGRESS',
payload : { flag }
};
};
export const addProducer = (producer) =>
{
return {
type : 'ADD_PRODUCER',
payload : { producer }
};
};
export const removeProducer = (producerId) =>
{
return {
type : 'REMOVE_PRODUCER',
payload : { producerId }
};
};
export const setProducerPaused = (producerId, originator) =>
{
return {
type : 'SET_PRODUCER_PAUSED',
payload : { producerId, originator }
};
};
export const setProducerResumed = (producerId, originator) =>
{
return {
type : 'SET_PRODUCER_RESUMED',
payload : { producerId, originator }
};
};
export const setProducerTrack = (producerId, track) =>
{
return {
type : 'SET_PRODUCER_TRACK',
payload : { producerId, track }
};
};
export const setAudioInProgress = (flag) =>
{
return {
type : 'SET_AUDIO_IN_PROGRESS',
payload : { flag }
};
};
export const setWebcamInProgress = (flag) =>
{
return {
type : 'SET_WEBCAM_IN_PROGRESS',
payload : { flag }
};
};
export const setScreenShareInProgress = (flag) =>
{
return {
type : 'SET_SCREEN_SHARE_IN_PROGRESS',
payload : { flag }
};
};
export const addPeer = (peer) =>
{
return {
type : 'ADD_PEER',
payload : { peer }
};
};
export const removePeer = (peerName) =>
{
return {
type : 'REMOVE_PEER',
payload : { peerName }
};
};
export const setPeerDisplayName = (displayName, peerName) =>
{
return {
type : 'SET_PEER_DISPLAY_NAME',
payload : { displayName, peerName }
};
};
export const addConsumer = (consumer, peerName) =>
{
return {
type : 'ADD_CONSUMER',
payload : { consumer, peerName }
};
};
export const removeConsumer = (consumerId, peerName) =>
{
return {
type : 'REMOVE_CONSUMER',
payload : { consumerId, peerName }
};
};
export const setConsumerPaused = (consumerId, originator) =>
{
return {
type : 'SET_CONSUMER_PAUSED',
payload : { consumerId, originator }
};
};
export const setConsumerResumed = (consumerId, originator) =>
{
return {
type : 'SET_CONSUMER_RESUMED',
payload : { consumerId, originator }
};
};
export const setConsumerEffectiveProfile = (consumerId, profile) =>
{
return {
type : 'SET_CONSUMER_EFFECTIVE_PROFILE',
payload : { consumerId, profile }
};
};
export const setConsumerTrack = (consumerId, track) =>
{
return {
type : 'SET_CONSUMER_TRACK',
payload : { consumerId, track }
};
};
export const setConsumerVolume = (consumerId, volume) =>
{
return {
type : 'SET_CONSUMER_VOLUME',
payload : { consumerId, volume }
};
};
export const setProducerVolume = (producerId, volume) =>
{
return {
type : 'SET_PRODUCER_VOLUME',
payload : { producerId, volume }
};
};
export const addNotification = (notification) =>
{
return {
type : 'ADD_NOTIFICATION',
payload : { notification }
};
};
export const removeNotification = (notificationId) =>
{
return {
type : 'REMOVE_NOTIFICATION',
payload : { notificationId }
};
};
export const removeAllNotifications = () =>
{
return {
type : 'REMOVE_ALL_NOTIFICATIONS'
};
};
export const toggleChat = () =>
{
return {
type : 'TOGGLE_CHAT'
};
};
export const toggleConsumerFullscreen = (consumerId) =>
{
return {
type : 'TOGGLE_FULLSCREEN_CONSUMER',
payload : { consumerId }
};
};
export const toggleConsumerWindow = (consumerId) =>
{
return {
type : 'TOGGLE_WINDOW_CONSUMER',
payload : { consumerId }
};
};
export const setToolbarsVisible = (toolbarsVisible) => ({
type : 'SET_TOOLBARS_VISIBLE',
payload : { toolbarsVisible }
});
export const increaseBadge = () =>
{
return {
type : 'INCREASE_BADGE'
};
};
export const toggleInputDisabled = () =>
{
return {
type : 'TOGGLE_INPUT_DISABLED'
};
};
export const addUserMessage = (text) =>
{
return {
type : 'ADD_NEW_USER_MESSAGE',
payload : { text }
};
};
export const addUserFile = (file) =>
{
return {
type : 'ADD_NEW_USER_FILE',
payload : { file }
};
};
export const addResponseMessage = (message) =>
{
return {
type : 'ADD_NEW_RESPONSE_MESSAGE',
payload : { message }
};
};
export const addChatHistory = (chatHistory) =>
{
return {
type : 'ADD_CHAT_HISTORY',
payload : { chatHistory }
};
};
export const dropMessages = () =>
{
return {
type : 'DROP_MESSAGES'
};
};
export const addFile = (file) =>
{
return {
type : 'ADD_FILE',
payload : { file }
};
};
export const addFileHistory = (fileHistory) =>
{
return {
type : 'ADD_FILE_HISTORY',
payload : { fileHistory }
};
};
export const setFileActive = (magnetUri) =>
{
return {
type : 'SET_FILE_ACTIVE',
payload : { magnetUri }
};
};
export const setFileInActive = (magnetUri) =>
{
return {
type : 'SET_FILE_INACTIVE',
payload : { magnetUri }
};
};
export const setFileProgress = (magnetUri, progress) =>
{
return {
type : 'SET_FILE_PROGRESS',
payload : { magnetUri, progress }
};
};
export const setFileDone = (magnetUri, sharedFiles) =>
{
return {
type : 'SET_FILE_DONE',
payload : { magnetUri, sharedFiles }
};
};
export const setPicture = (picture) =>
({
type : 'SET_PICTURE',
payload : { picture }
});
export const setPeerPicture = (peerName, picture) =>
({
type : 'SET_PEER_PICTURE',
payload : { peerName, picture }
});
export const loggedIn = () =>
({
type : 'LOGGED_IN'
});
export const setSelectedPeer = (selectedPeerName) =>
({
type : 'SET_SELECTED_PEER',
payload : { selectedPeerName }
});
export const setSpotlights = (spotlights) =>
({
type : 'SET_SPOTLIGHTS',
payload : { spotlights }
});

View file

@ -1,47 +0,0 @@
import {
applyMiddleware,
createStore,
compose
} from 'redux';
import thunk from 'redux-thunk';
import { createLogger } from 'redux-logger';
import reducers from './redux/reducers';
const reduxMiddlewares =
[
thunk
];
if (process.env.NODE_ENV === 'development')
{
const reduxLogger = createLogger(
{
// filter VOLUME level actions from log
predicate : (getState, action) => ! (action.type == 'SET_PRODUCER_VOLUME'
|| action.type == 'SET_CONSUMER_VOLUME'),
duration : true,
timestamp : false,
level : 'log',
logErrors : true
});
reduxMiddlewares.push(reduxLogger);
}
const composeEnhancers =
typeof window === 'object' &&
window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ?
window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({
// Specify extensions options like name, actionsBlacklist, actionsCreators, serialize...
}) : compose;
const enhancer = composeEnhancers(
applyMiddleware(...reduxMiddlewares)
// other store enhancers if any
);
export const store = createStore(
reducers,
undefined,
enhancer
);

View file

@ -1,8 +0,0 @@
export function getSignalingUrl(peerName, roomId)
{
const hostname = window.location.hostname;
const port = window.location.port;
const url = `wss://${hostname}:${port}/?peerName=${peerName}&roomId=${roomId}`;
return url;
}

View file

@ -1,40 +0,0 @@
let mediaQueryDetectorElem;
export function initialize()
{
// Media query detector stuff.
mediaQueryDetectorElem =
document.getElementById('multiparty-meeting-media-query-detector');
return Promise.resolve();
}
export function isDesktop()
{
return Boolean(mediaQueryDetectorElem.offsetParent);
}
export function isMobile()
{
return !mediaQueryDetectorElem.offsetParent;
}
/**
* Create a function which will call the callback function
* after the given amount of milliseconds has passed since
* the last time the callback function was called.
*/
export const idle = (callback, delay) =>
{
let handle;
return () =>
{
if (handle)
{
clearTimeout(handle);
}
handle = setTimeout(callback, delay);
};
};

View file

@ -1,82 +1,116 @@
{
"name": "multiparty-meeting",
"version": "1.1.0",
"private": true,
"description": "multiparty meeting service",
"author": "Håvar Aambø Fosstveit <h@fosstveit.net>",
"license": "MIT",
"main": "lib/index.jsx",
"dependencies": {
"@babel/runtime": "^7.1.2",
"classnames": "^2.2.6",
"create-torrent": "^3.32.1",
"debug": "^4.1.0",
"domready": "^1.0.8",
"drag-drop": "^4.2.0",
"file-saver": "^1.3.8",
"hark": "^1.2.2",
"js-cookie": "^2.2.0",
"magnet-uri": "^5.2.3",
"marked": "^0.5.1",
"mediasoup-client": "^2.4.9",
"prop-types": "^15.6.2",
"random-string": "^0.2.0",
"react": "^16.5.2",
"react-cookie-consent": "^1.9.0",
"react-copy-to-clipboard": "^5.0.1",
"react-dom": "^16.5.2",
"react-draggable": "^3.0.5",
"react-dropdown": "^1.5.0",
"react-redux": "^5.0.7",
"react-spinner": "^0.2.7",
"react-tooltip": "^3.9.0",
"react-transition-group": "^2.5.0",
"redux": "^4.0.1",
"redux-logger": "^3.0.6",
"redux-thunk": "^2.3.0",
"resize-observer-polyfill": "^1.5.0",
"riek": "^1.1.0",
"socket.io-client": "^2.1.1",
"url-parse": "^1.4.3",
"webtorrent": "^0.102.4"
},
"devDependencies": {
"@babel/core": "^7.1.2",
"@babel/plugin-proposal-class-properties": "^7.1.0",
"@babel/plugin-proposal-object-rest-spread": "^7.0.0",
"@babel/plugin-transform-runtime": "^7.1.0",
"@babel/preset-env": "^7.1.0",
"@babel/preset-react": "^7.0.0",
"babel-plugin-jsx-control-statements": "^3.2.8",
"babel-eslint": "^10.0.1",
"babelify": "^10.0.0",
"browser-sync": "^2.26.3",
"browserify": "^16.2.3",
"del": "^3.0.0",
"envify": "^4.1.0",
"eslint": "^5.7.0",
"eslint-plugin-import": "^2.14.0",
"eslint-plugin-jsx-control-statements": "^2.2.1",
"eslint-plugin-react": "^7.11.1",
"gulp": "^4.0.0",
"gulp-change": "^1.0.0",
"gulp-css-base64": "^1.3.4",
"gulp-eslint": "^5.0.0",
"gulp-header": "^2.0.5",
"gulp-if": "^2.0.2",
"gulp-plumber": "^1.2.0",
"gulp-rename": "^1.4.0",
"gulp-stylus": "^2.7.0",
"gulp-touch-cmd": "0.0.1",
"gulp-uglify-es": "^1.0.4",
"gulp-util": "^3.0.8",
"lodash": "^4.17.10",
"mkdirp": "^0.5.1",
"ncp": "^2.0.0",
"nib": "^1.1.2",
"supports-color": "^5.5.0",
"vinyl-buffer": "^1.0.1",
"vinyl-source-stream": "^2.0.0",
"watchify": "^3.11.0"
}
"name": "edumeet",
"version": "3.5.5",
"private": true,
"description": "edumeet meeting service",
"author": "Håvar Aambø Fosstveit <h@fosstveit.net>",
"contributors": [
"Stefan Otto",
"Mészáros Mihály",
"Roman Drozd",
"Rémai Gábor László",
"Piotr Pawałowski"
],
"license": "MIT",
"homepage": "./",
"main": "src/electron-starter.js",
"type": "module",
"dependencies": {
"@material-ui/core": "^4.11.3",
"@material-ui/icons": "^4.11.2",
"@material-ui/lab": "^4.0.0-alpha.57",
"@react-hook/window-size": "^3.0.7",
"@types/node": "^14.14.37",
"@types/react": "^17.0.3",
"@types/react-dom": "^17.0.3",
"bowser": "^2.7.0",
"chroma-js": "^2.1.1",
"classnames": "^2.2.6",
"convict": "^6.0.1",
"convict-format-with-validator": "^6.0.1",
"create-torrent": "^4.4.1",
"deep-object-diff": "^1.1.0",
"dompurify": "^2.0.7",
"domready": "^1.0.8",
"draft-js": "^0.11.7",
"draft-js-export-html": "^1.4.1",
"draft-js-plugins-editor": "^3.0.0",
"draft-js-single-line-plugin": "^2.0.5",
"end-of-stream": "1.4.1",
"file-saver": "^2.0.2",
"hark": "^1.2.3",
"idb": "^6.0.0",
"is-electron": "^2.2.0",
"marked": "^0.8.0",
"material-ui-popup-state": "^1.8.0",
"mediasoup-client": "^3.6.55",
"notistack": "^0.9.5",
"prop-types": "^15.7.2",
"random-string": "^0.2.0",
"react": "^16.10.2",
"react-cookie-consent": "^2.5.0",
"react-dom": "^16.10.2",
"react-flip-toolkit": "^7.0.9",
"react-image-file-resizer": "^0.3.8",
"react-images-upload": "^1.2.0",
"react-intl": "^3.4.0",
"react-intl-redux": "^2.2.0",
"react-redux": "^7.2.3",
"react-router-dom": "^5.1.2",
"react-scripts": "^4.0.3",
"react-wakelock-react16": "0.0.7",
"redux": "^4.0.4",
"redux-logger": "^3.0.6",
"redux-persist": "^6.0.0",
"redux-persist-transform-filter": "0.0.20",
"redux-thunk": "^2.3.0",
"reselect": "^4.0.0",
"riek": "^1.1.0",
"socket.io-client": "^2.4.0",
"source-map-explorer": "^2.1.0",
"streamsaver": "^2.0.5",
"typescript": "^4.2.4",
"universal-cookie": "4.0.4",
"web-streams-polyfill": "^3.0.2",
"webtorrent": "^0.108.1"
},
"scripts": {
"analyze": "source-map-explorer build/static/js/*",
"start": "HTTPS=true PORT=4443 react-scripts start",
"build": "react-scripts build && rm -rf ../server/public && DEST='../server/dist/public' && rm -rf $DEST && mkdir -p $DEST && mv -T build/ $DEST",
"test": "react-scripts test",
"eject": "react-scripts eject",
"electron": "electron --no-sandbox .",
"dev": "nf start -p 3000",
"lint": "eslint ./ --ext .js,.jsx,.ts,.tsx; exit 0",
"lint-fix": "eslint ./ --fix --ext .js,.jsx,.ts,.tsx; exit 0",
"gen-config-docs": "node --loader ts-node/esm src/config.ts && eslint -c .eslintrc.json public/config/config.example.js --fix"
},
"browserslist": [
">0.2%",
"not dead",
"not ie > 0",
"not op_mini all"
],
"devDependencies": {
"@types/chroma-js": "^2.1.3",
"@types/convict": "^6.0.1",
"@types/convict-format-with-validator": "^6.0.2",
"@typescript-eslint/eslint-plugin": "^4.20.0",
"@typescript-eslint/parser": "^4.20.0",
"babel-eslint": "^10.1.0",
"electron": "^12.0.0",
"eslint-config-react-app": "^6.0.0",
"eslint-import-resolver-typescript": "^2.4.0",
"eslint-plugin-flowtype": "^5.4.0",
"eslint-plugin-import": "^2.22.1",
"eslint-plugin-jest": "^24.3.3",
"eslint-plugin-jsx-a11y": "^6.4.1",
"eslint-plugin-react": "^7.23.1",
"eslint-plugin-react-hooks": "^4.2.0",
"eslint-webpack-plugin": "^2.5.3",
"foreman": "^3.0.1",
"redux-mock-store": "^1.5.3",
"ts-node": "^10.9.1"
}
}

View file

@ -0,0 +1,65 @@
# ![edumeet logo](/app/public/images/logo.edumeet.svg) App Configuration properties list:
| Name | Description | Format | Default value |
| :--- | :---------- | :----- | :------------ |
| loginEnabled | If the login is enabled. | `"boolean"` | ``false`` |
| developmentPort | The development server listening port. | `"port"` | ``3443`` |
| productionPort | The production server listening port. | `"port"` | ``443`` |
| serverHostname | If the server component runs on a different host than the app you can specify the host name. | `"string"` | ``""`` |
| supportedBrowsers | Supported browsers version in bowser satisfy format. | `"object"` | ``{ "windows": { "internet explorer": ">12", "microsoft edge": ">18" }, "microsoft edge": ">18", "safari": ">12", "firefox": ">=60", "chrome": ">=74", "chromium": ">=74", "opera": ">=62", "samsung internet for android": ">=11.1.1.52"}`` |
| networkPriorities | Network priorities. | `"object"` | ``{ "audio": "high", "mainVideo": "high", "additionalVideos": "medium", "screenShare": "medium"}`` |
| aspectRatio | The aspect ratio of the videos as shown on the screen. This value must match exactly one of the values defined in aspectRatios. | `"float"` | ``1.777`` |
| aspectRatios | The selectable aspect ratios in the user settings. | `"array"` | ``[ { "value": 1.333, "label": "4 : 3" }, { "value": 1.777, "label": "16 : 9" }]`` |
| resolution | The default video camera capture resolution. | `[ "low", "medium", "high", "veryhigh", "ultra"]` | ``"medium"`` |
| frameRate | The default video camera capture framerate. | `"nat"` | ``15`` |
| screenResolution | The default screen sharing resolution. | `[ "low", "medium", "high", "veryhigh", "ultra"]` | ``"veryhigh"`` |
| screenSharingFrameRate | The default screen sharing framerate. | `"nat"` | ``5`` |
| simulcast | Enable or disable simulcast for webcam video. | `"boolean"` | ``true`` |
| simulcastSharing | Enable or disable simulcast for screen sharing video. | `"boolean"` | ``false`` |
| simulcastProfiles | Define different encodings for various resolutions of the video. | `"object"` | ``{ "320": [ { "scaleResolutionDownBy": 1, "maxBitRate": 150000 } ], "640": [ { "scaleResolutionDownBy": 2, "maxBitRate": 150000 }, { "scaleResolutionDownBy": 1, "maxBitRate": 500000 } ], "1280": [ { "scaleResolutionDownBy": 4, "maxBitRate": 150000 }, { "scaleResolutionDownBy": 2, "maxBitRate": 500000 }, { "scaleResolutionDownBy": 1, "maxBitRate": 1200000 } ], "1920": [ { "scaleResolutionDownBy": 6, "maxBitRate": 150000 }, { "scaleResolutionDownBy": 3, "maxBitRate": 500000 }, { "scaleResolutionDownBy": 1, "maxBitRate": 3500000 } ], "3840": [ { "scaleResolutionDownBy": 12, "maxBitRate": 150000 }, { "scaleResolutionDownBy": 6, "maxBitRate": 500000 }, { "scaleResolutionDownBy": 1, "maxBitRate": 10000000 } ]}`` |
| adaptiveScalingFactor | The adaptive spatial layer selection scaling factor in the range [0.5, 1.0]. | | ``0.75`` |
| localRecordingEnabled | If set to true Local Recording feature will be enabled. | `"boolean"` | ``false`` |
| audioOutputSupportedBrowsers | White listing browsers that support audio output device selection. | `"array"` | ``[ "chrome", "opera"]`` |
| requestTimeout | The Socket.io request timeout. | `"nat"` | ``20000`` |
| requestRetries | The Socket.io request maximum retries. | `"nat"` | ``3`` |
| transportOptions | The Mediasoup transport options. | `"object"` | ``{ "tcp": true}`` |
| autoGainControl | Auto gain control enabled. | `"boolean"` | ``true`` |
| echoCancellation | Echo cancellation enabled. | `"boolean"` | ``true`` |
| noiseSuppression | Noise suppression enabled. | `"boolean"` | ``true`` |
| voiceActivatedUnmute | Automatically unmute speaking above noiseThreshold. | `"boolean"` | ``false`` |
| noiseThreshold | This is only for voiceActivatedUnmute and audio-indicator. | `"int"` | ``-60`` |
| sampleRate | The audio sample rate. | `[ 8000, 16000, 24000, 44100, 48000]` | ``48000`` |
| channelCount | The audio channels count. | `[ 1, 2]` | ``1`` |
| sampleSize | The audio sample size count. | `[ 8, 16, 24, 32]` | ``16`` |
| opusStereo | If OPUS FEC stereo be enabled. | `"boolean"` | ``false`` |
| opusDtx | If OPUS DTX should be enabled. | `"boolean"` | ``true`` |
| opusFec | If OPUS FEC should be enabled. | `"boolean"` | ``true`` |
| opusPtime | The OPUS packet time. | `[ 3, 5, 10, 20, 30, 40, 50, 60]` | ``20`` |
| opusMaxPlaybackRate | The OPUS playback rate. | `[ 8000, 16000, 24000, 44100, 48000]` | ``48000`` |
| audioPreset | The audio preset | `"string"` | ``"conference"`` |
| audioPresets | The audio presets. | `"object"` | ``{ "conference": { "name": "Conference audio", "autoGainControl": true, "echoCancellation": true, "noiseSuppression": true, "voiceActivatedUnmute": false, "noiseThreshold": -60, "sampleRate": 48000, "channelCount": 1, "sampleSize": 16, "opusStereo": false, "opusDtx": true, "opusFec": true, "opusPtime": 20, "opusMaxPlaybackRate": 48000 }, "hifi": { "name": "HiFi streaming", "autoGainControl": false, "echoCancellation": false, "noiseSuppression": false, "voiceActivatedUnmute": false, "noiseThreshold": -60, "sampleRate": 48000, "channelCount": 2, "sampleSize": 16, "opusStereo": true, "opusDtx": false, "opusFec": true, "opusPtime": 60, "opusMaxPlaybackRate": 48000 }}`` |
| autoMuteThreshold | It sets the maximum number of participants in one room that can join unmuted. The next participant will join automatically muted. Set it to 0 to auto mute all. Set it to negative (-1) to never automatically auto mute but use it with caution, full mesh audio strongly decrease room capacity! | `"nat"` | ``4`` |
| background | The page background image URL | `"string"` | ``"images/background.jpg"`` |
| defaultLayout | The default layout. | `[ "democratic", "filmstrip"]` | ``"democratic"`` |
| buttonControlBar | If true, the media control buttons will be shown in separate control bar, not in the ME container. | `"boolean"` | ``false`` |
| drawerOverlayed | If false, will push videos away to make room for side drawer. If true, will overlay side drawer over videos. | `"boolean"` | ``true`` |
| notificationPosition | The position of the notifications. | `[ "left", "right"]` | ``"right"`` |
| notificationSounds | It sets the notifications sounds. Valid keys are: 'parkedPeer', 'parkedPeers', 'raisedHand', 'chatMessage', 'sendFile', 'newPeer' and 'default'. Not defining a key is equivalent to using the default notification sound. Setting 'play' to null disables the sound notification. | `"object"` | ``{ "chatMessage": { "play": "/sounds/notify-chat.mp3" }, "raisedHand": { "play": "/sounds/notify-hand.mp3" }, "default": { "delay": 5000, "play": "/sounds/notify.mp3" }}`` |
| hideTimeout | Timeout for auto hiding the topbar and the buttons control bar. | `"int"` | ``3000`` |
| lastN | The maximum number of participants that will be visible in as speaker. | `"nat"` | ``4`` |
| mobileLastN | The maximum number of participants that will be visible in as speaker for mobile users. | `"nat"` | ``1`` |
| maxLastN | The highest number of lastN the user can select manually in the user interface. | `"nat"` | ``5`` |
| lockLastN | If true, the users can not change the number of visible speakers. | `"boolean"` | ``false`` |
| logo | If not null, it shows the logo loaded from the specified URL, otherwise it shows the title. | `"url"` | ``"images/logo.edumeet.svg"`` |
| title | The title to show if the logo is not specified. | `"string"` | ``"edumeet"`` |
| infoTooltipText | Informative text on the join page. If empty hidden. | `"string"` | ``""`` |
| infoTooltipLink | Informative text link site on the join page. If empty hidden. | `"string"` | ``""`` |
| infoTooltipDesc | Informative text description on the join page. If empty hidden. | `"string"` | ``""`` |
| supportUrl | The service & Support URL; if `null`, it will be not displayed on the about dialogs. | `"url"` | ``"https://support.example.com"`` |
| privacyUrl | The privacy and data protection external URL or local HTML path. | `"string"` | ``"privacy/privacy.html"`` |
| theme | UI theme elements colors. | `"object"` | ``{ "palette": { "primary": { "main": "#313131" } }, "overrides": { "MuiAppBar": { "colorPrimary": { "backgroundColor": "#313131" } }, "MuiButton": { "containedPrimary": { "backgroundColor": "#5F9B2D", "&:hover": { "backgroundColor": "#5F9B2D" } }, "containedSecondary": { "backgroundColor": "#f50057", "&:hover": { "backgroundColor": "#f50057" } } }, "MuiFab": { "primary": { "backgroundColor": "#518029", "&:hover": { "backgroundColor": "#518029" }, "&:disabled": { "color": "#999898", "backgroundColor": "#323131" } }, "secondary": { "backgroundColor": "#f50057", "&:hover": { "backgroundColor": "#f50057" }, "&:disabled": { "color": "#999898", "backgroundColor": "#323131" } } }, "MuiBadge": { "colorPrimary": { "backgroundColor": "#5F9B2D", "&:hover": { "backgroundColor": "#518029" } } } }, "typography": { "useNextVariants": true }}`` |
---
*Document generated with:* `yarn gen-config-docs` *from:* [config.ts](src/config.ts).

View file

@ -0,0 +1,386 @@
/**
* Edumeet App Configuration
*
* The configuration documentation is available also:
* - in the app/README.md file in the source tree
* - visiting the /?config=true page in a running instance
*/
// eslint-disable-next-line
var config = {
// If the login is enabled.
loginEnabled : false,
// The development server listening port.
developmentPort : 3443,
// The production server listening port.
productionPort : 443,
// If the server component runs on a different host than the app you can specify the host name.
serverHostname : '',
// Supported browsers version in bowser satisfy format.
supportedBrowsers : {
'windows' : {
'internet explorer' : '>12',
'microsoft edge' : '>18'
},
'microsoft edge' : '>18',
'safari' : '>12',
'firefox' : '>=60',
'chrome' : '>=74',
'chromium' : '>=74',
'opera' : '>=62',
'samsung internet for android' : '>=11.1.1.52'
},
// Network priorities.
networkPriorities : {
'audio' : 'high',
'mainVideo' : 'high',
'additionalVideos' : 'medium',
'screenShare' : 'medium'
},
// The aspect ratio of the videos as shown on the screen.
// This value must match exactly one of the values defined in aspectRatios.
aspectRatio : 1.777,
// The selectable aspect ratios in the user settings.
aspectRatios : [
{
'value' : 1.333,
'label' : '4 : 3'
},
{
'value' : 1.777,
'label' : '16 : 9'
}
],
// The default video camera capture resolution.
resolution : 'medium',
// The default video camera capture framerate.
frameRate : 15,
// The default screen sharing resolution.
screenResolution : 'veryhigh',
// The default screen sharing framerate.
screenSharingFrameRate : 5,
// Enable or disable simulcast for webcam video.
simulcast : true,
// Enable or disable simulcast for screen sharing video.
simulcastSharing : false,
// Define different encodings for various resolutions of the video.
simulcastProfiles : {
'320' : [
{
'scaleResolutionDownBy' : 1,
'maxBitRate' : 150000
}
],
'640' : [
{
'scaleResolutionDownBy' : 2,
'maxBitRate' : 150000
},
{
'scaleResolutionDownBy' : 1,
'maxBitRate' : 500000
}
],
'1280' : [
{
'scaleResolutionDownBy' : 4,
'maxBitRate' : 150000
},
{
'scaleResolutionDownBy' : 2,
'maxBitRate' : 500000
},
{
'scaleResolutionDownBy' : 1,
'maxBitRate' : 1200000
}
],
'1920' : [
{
'scaleResolutionDownBy' : 6,
'maxBitRate' : 150000
},
{
'scaleResolutionDownBy' : 3,
'maxBitRate' : 500000
},
{
'scaleResolutionDownBy' : 1,
'maxBitRate' : 3500000
}
],
'3840' : [
{
'scaleResolutionDownBy' : 12,
'maxBitRate' : 150000
},
{
'scaleResolutionDownBy' : 6,
'maxBitRate' : 500000
},
{
'scaleResolutionDownBy' : 1,
'maxBitRate' : 10000000
}
]
},
// The adaptive spatial layer selection scaling factor in the range [0.5, 1.0].
adaptiveScalingFactor : 0.75,
// If set to true Local Recording feature will be enabled.
localRecordingEnabled : false,
// White listing browsers that support audio output device selection.
audioOutputSupportedBrowsers : [
'chrome',
'opera'
],
// The Socket.io request timeout.
requestTimeout : 20000,
// The Socket.io request maximum retries.
requestRetries : 3,
// The Mediasoup transport options.
transportOptions : {
'tcp' : true
},
// Auto gain control enabled.
autoGainControl : true,
// Echo cancellation enabled.
echoCancellation : true,
// Noise suppression enabled.
noiseSuppression : true,
// Automatically unmute speaking above noiseThreshold.
voiceActivatedUnmute : false,
// This is only for voiceActivatedUnmute and audio-indicator.
noiseThreshold : -60,
// The audio sample rate.
sampleRate : 48000,
// The audio channels count.
channelCount : 1,
// The audio sample size count.
sampleSize : 16,
// If OPUS FEC stereo be enabled.
opusStereo : false,
// If OPUS DTX should be enabled.
opusDtx : true,
// If OPUS FEC should be enabled.
opusFec : true,
// The OPUS packet time.
opusPtime : 20,
// The OPUS playback rate.
opusMaxPlaybackRate : 48000,
// The audio preset
audioPreset : 'conference',
// The audio presets.
audioPresets : {
'conference' : {
'name' : 'Conference audio',
'autoGainControl' : true,
'echoCancellation' : true,
'noiseSuppression' : true,
'voiceActivatedUnmute' : false,
'noiseThreshold' : -60,
'sampleRate' : 48000,
'channelCount' : 1,
'sampleSize' : 16,
'opusStereo' : false,
'opusDtx' : true,
'opusFec' : true,
'opusPtime' : 20,
'opusMaxPlaybackRate' : 48000
},
'hifi' : {
'name' : 'HiFi streaming',
'autoGainControl' : false,
'echoCancellation' : false,
'noiseSuppression' : false,
'voiceActivatedUnmute' : false,
'noiseThreshold' : -60,
'sampleRate' : 48000,
'channelCount' : 2,
'sampleSize' : 16,
'opusStereo' : true,
'opusDtx' : false,
'opusFec' : true,
'opusPtime' : 60,
'opusMaxPlaybackRate' : 48000
}
},
// It sets the maximum number of participants in one room that can join unmuted.
// The next participant will join automatically muted.
// Set it to 0 to auto mute all.
// Set it to negative (-1) to never automatically auto mute but use it with caution,
// full mesh audio strongly decrease room capacity!
autoMuteThreshold : 4,
// The page background image URL
background : 'images/background.jpg',
// The default layout.
defaultLayout : 'democratic',
// If true, the media control buttons will be shown in separate control bar, not in the ME container.
buttonControlBar : false,
// If false, will push videos away to make room for side drawer.
// If true, will overlay side drawer over videos.
drawerOverlayed : true,
// The position of the notifications.
notificationPosition : 'right',
// It sets the notifications sounds.
// Valid keys are: 'parkedPeer', 'parkedPeers', 'raisedHand',
// 'chatMessage', 'sendFile', 'newPeer' and 'default'.
// Not defining a key is equivalent to using the default notification sound.
// Setting 'play' to null disables the sound notification.
//
notificationSounds : {
'chatMessage' : {
'play' : '/sounds/notify-chat.mp3'
},
'raisedHand' : {
'play' : '/sounds/notify-hand.mp3'
},
'default' : {
'delay' : 5000,
'play' : '/sounds/notify.mp3'
}
},
// Timeout for auto hiding the topbar and the buttons control bar.
hideTimeout : 3000,
// The maximum number of participants that will be visible in as speaker.
lastN : 4,
// The maximum number of participants that will be visible in as speaker for mobile users.
mobileLastN : 1,
// The highest number of lastN the user can select manually in the user interface.
maxLastN : 5,
// If true, the users can not change the number of visible speakers.
lockLastN : false,
// If not null, it shows the logo loaded from the specified URL, otherwise it shows the title.
logo : 'images/logo.edumeet.svg',
// The title to show if the logo is not specified.
title : 'edumeet',
// Informative text on the join page. If empty hidden.
infoTooltipText : '',
// Informative text link site on the join page. If empty hidden.
infoTooltipLink : '',
// Informative text description on the join page. If empty hidden.
infoTooltipDesc : '',
// The service & Support URL; if `null`, it will be not displayed on the about dialogs.
supportUrl : 'https://support.example.com',
// The privacy and data protection external URL or local HTML path.
privacyUrl : 'privacy/privacy.html',
// UI theme elements colors.
theme : {
'palette' : {
'primary' : {
'main' : '#313131'
}
},
'overrides' : {
'MuiAppBar' : {
'colorPrimary' : {
'backgroundColor' : '#313131'
}
},
'MuiButton' : {
'containedPrimary' : {
'backgroundColor' : '#5F9B2D',
'&:hover' : {
'backgroundColor' : '#5F9B2D'
}
},
'containedSecondary' : {
'backgroundColor' : '#f50057',
'&:hover' : {
'backgroundColor' : '#f50057'
}
}
},
'MuiFab' : {
'primary' : {
'backgroundColor' : '#518029',
'&:hover' : {
'backgroundColor' : '#518029'
},
'&:disabled' : {
'color' : '#999898',
'backgroundColor' : '#323131'
}
},
'secondary' : {
'backgroundColor' : '#f50057',
'&:hover' : {
'backgroundColor' : '#f50057'
},
'&:disabled' : {
'color' : '#999898',
'backgroundColor' : '#323131'
}
}
},
'MuiBadge' : {
'colorPrimary' : {
'backgroundColor' : '#5F9B2D',
'&:hover' : {
'backgroundColor' : '#518029'
}
}
}
},
'typography' : {
'useNextVariants' : true
}
}
};
// Generated with: `yarn gen-config-docs` from app/src/config.ts

BIN
app/public/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

View file

@ -0,0 +1,88 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg2"
xml:space="preserve"
width="139"
height="30"
viewBox="0 0 799.66669 172.29333"
sodipodi:docname="edumeet_logo.eps"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"><metadata
id="metadata8"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs6" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1916"
inkscape:window-height="1014"
id="namedview4"
showgrid="false"
inkscape:zoom="0.53772404"
inkscape:cx="399.83334"
inkscape:cy="86.146667"
inkscape:window-x="0"
inkscape:window-y="32"
inkscape:window-maximized="1"
inkscape:current-layer="g10" /><g
id="g10"
inkscape:groupmode="layer"
inkscape:label="ink_ext_XXXXXX"
transform="matrix(1.3333333,0,0,-1.3333333,0,172.29333)"><g
id="g12"
transform="scale(0.1)"><path
d="m 1667.64,373.02 c 0,0 -193.65,11.343 -394.11,119.109 72.23,293.047 -69.56,605.841 -353.264,738.851 C 597.211,1382.37 212.637,1243.22 61.2031,920.25 -90.1719,597.238 48.9063,212.57 371.965,61.1602 659.195,-73.4609 995.113,21.8086 1172.46,271.719 c 248.85,5.543 495.18,101.301 495.18,101.301"
style="fill:#3871c1;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path14"
inkscape:connector-curvature="0" /><path
d="m 2241.9,497.863 c 1.02,45.887 -19.37,121.34 -102.98,121.34 -77.5,0 -110.14,-70.355 -115.23,-121.34 z m -218.21,-87.687 c 3.06,-89.742 73.42,-128.485 152.96,-128.485 58.12,0 99.91,8.161 137.64,22.434 l 18.37,-86.676 c -42.83,-17.34 -101.98,-30.59 -173.35,-30.59 -161.11,0 -255.95,98.922 -255.95,250.844 0,137.652 83.62,267.16 242.68,267.16 161.12,0 214.15,-132.562 214.15,-241.672 0,-23.453 -2.05,-41.8 -4.09,-53.015 h -332.41"
style="fill:#004d7b;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path16"
inkscape:connector-curvature="0" /><path
d="m 2793.57,486.648 c 0,10.196 -1.01,22.434 -3.06,32.629 -11.2,48.946 -50.97,88.711 -108.08,88.711 -80.55,0 -125.42,-71.375 -125.42,-164.168 0,-90.75 44.87,-157.031 124.41,-157.031 50.98,0 95.85,34.672 108.08,88.715 3.06,11.215 4.07,23.449 4.07,36.703 z m 125.42,434.379 V 336.754 c 0,-50.973 2.05,-106.043 4.09,-139.703 h -112.17 l -5.1,78.527 h -2.05 c -29.55,-55.066 -89.71,-89.738 -162.11,-89.738 -118.29,0 -212.1,100.949 -212.1,253.898 -1.01,166.211 102.98,265.125 222.29,265.125 68.32,0 117.27,-28.554 139.69,-65.261 h 2.04 v 281.425 h 125.42"
style="fill:#004d7b;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path18"
inkscape:connector-curvature="0" /><path
d="m 3498.2,345.93 c 0,-59.141 2.04,-108.078 4.09,-148.879 h -110.13 l -6.12,75.461 h -2.05 c -21.4,-35.684 -70.36,-86.672 -159.06,-86.672 -90.75,0 -173.35,54.051 -173.35,216.172 V 693.641 H 3177 V 423.422 c 0,-82.586 26.52,-135.613 92.79,-135.613 49.98,0 82.6,35.691 95.85,67.3 4.09,11.211 7.14,24.469 7.14,38.746 V 693.641 H 3498.2 V 345.93"
style="fill:#004d7b;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path20"
inkscape:connector-curvature="0" /><path
d="m 4219.13,477.465 c -4.09,88.715 -9.19,195.781 -8.15,288.57 h -3.06 c -22.44,-83.609 -51,-176.398 -81.58,-263.07 l -99.93,-297.754 h -96.87 l -91.78,293.672 c -26.5,87.687 -50.97,181.5 -69.34,267.152 h -2.02 c -3.08,-89.726 -7.14,-198.836 -12.24,-292.648 L 3738.87,197.051 H 3621.6 l 45.88,687.273 h 165.19 l 89.73,-276.336 c 24.48,-80.558 45.88,-162.129 63.23,-238.609 h 3.04 c 18.37,74.441 41.82,159.07 68.32,239.629 l 94.84,275.316 h 163.14 l 39.78,-687.273 h -122.38 l -13.24,280.414"
style="fill:#3871c1;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path22"
inkscape:connector-curvature="0" /><path
d="M 4866.67,501.941 H 4607.68 V 300.043 h 289.58 V 197.051 h -415 v 687.273 h 399.7 V 781.336 H 4607.68 V 603.91 h 258.99 V 501.941"
style="fill:#3871c1;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path24"
inkscape:connector-curvature="0" /><path
d="m 5391.83,501.941 h -259 V 300.043 h 289.59 V 197.051 h -415.01 v 687.273 h 399.71 V 781.336 H 5132.83 V 603.91 h 259 V 501.941"
style="fill:#3871c1;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path26"
inkscape:connector-curvature="0" /><path
d="m 5674.31,779.297 h -195.78 v 105.027 h 519.02 V 779.297 H 5799.73 V 197.051 h -125.42 v 582.246"
style="fill:#3871c1;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path28"
inkscape:connector-curvature="0" /><path
d="m 804.438,984.711 c -187.032,87.649 -409.68,7.086 -497.36,-179.902 -55.531,-118.496 -43.469,-251.282 20.344,-355 -108.164,-67.911 -203.207,-92.024 -203.207,-92.024 0,0 143.82,-26.316 302.43,-14.781 18.66,-13.457 38.761,-25.453 60.351,-35.578 186.984,-87.625 409.707,-7.102 497.359,179.906 87.675,187.047 7.114,409.691 -179.917,497.379"
style="fill:#f9a72b;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path30"
inkscape:connector-curvature="0" /><path
d="M 831.895,558.988 C 783.809,456.395 661.621,412.215 559.043,460.293 456.438,508.387 412.262,630.559 460.344,733.152 c 48.094,102.582 170.242,146.778 272.847,98.696 102.61,-48.106 146.797,-170.246 98.704,-272.86"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path32"
inkscape:connector-curvature="0" /></g></g></svg>

After

Width:  |  Height:  |  Size: 6.2 KiB

63
app/public/index.html Normal file
View file

@ -0,0 +1,63 @@
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8' />
<meta
name='viewport'
content='width=device-width, initial-scale=1, shrink-to-fit=no'
/>
<meta name='description' content='edumeet - Simple web meetings'>
<meta name="keywords" content="edumeet,letsmeet,multiparty,videoconference,meet,WebRTC,room,rooms,geant,video conferencing, video conference, online meetings, web meeting, video meeting, cloud meeting, cloud video, group video call, group video chat, screen share, application share, mobility, mobile collaboration, desktop share, video collaboration">
<meta name='theme-color' content='#000000' />
<link rel='preconnect' href='https://fonts.googleapis.com/css?family=Roboto' rel='stylesheet'>
<link rel='shortcut icon' href='%PUBLIC_URL%/favicon.png' />
<link rel='manifest' href='%PUBLIC_URL%/manifest.json' />
<title>edumeet</title>
<script src='%PUBLIC_URL%/config/config.js' type='text/javascript'></script>
<!-- Show an error page to IE browsers -->
<script type='text/javascript'>
var fallback = '<style type="text/css">body{margin:40px auto;max-width:650px;line-height:1.6;font-size:18px;color:#444;padding:0 10px}h1,h2,h3{line-height:1.2}</style><header><h1>Your browser is not supported</h1><aside>You need to change to a different browser.</aside></header><h3>Supported browsers</h3><ul><li>Google Chrome/Chromium 55 +</li><li>Microsoft Edge 18 +</li><li>Mozilla Firefox 60 +</li><li>Apple Safari 12 +</li><li>Opera 62 +</li><li>Samsung Internet 11.1.1.52 +</li></ul>';
var fallbackCall = function() {
document.body.innerHTML = fallback;
};
if(navigator.userAgent.indexOf('MSIE') !== -1)
{
document.attachEvent('onreadystatechange', function() {
if (document.readyState === 'complete')
{
document.detachEvent('onreadystatechange', arguments.callee);
fallbackCall();
}
});
}
if (navigator.appVersion.indexOf('Trident/') > -1)
{
if (
document.readyState === 'complete' ||
(document.readyState !== 'loading' && !document.documentElement.doScroll)
)
{
document.removeEventListener('DOMContentLoaded', fallbackCall);
fallbackCall();
}
else
{
document.addEventListener('DOMContentLoaded', fallbackCall);
}
}
</script>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id='edumeet'></div>
</body>
</html>

15
app/public/manifest.json Normal file
View file

@ -0,0 +1,15 @@
{
"short_name": "edumeet",
"name": "edumeet - Simple web meetings",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='UTF-8'>
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
<title>Placeholder for Privacy Statement / Policy, AUP</title>
<style type='text/css'>body{margin:40px auto;max-width:650px;line-height:1.6;font-size:18px;color:#444;padding:0 10px}h1,h2,h3{line-height:1.2}</style>
</head>
<body>
<header><h1>Privacy Statement</h1></header>
<h2>Privacy Policy</h2>
<ul>
<li>User consent</li>
<li>Data deletion</li>
</ul>
<h2>Acceptable use policy (AUP)</h2>
</body>
</html>

3
app/public/robots.txt Normal file
View file

@ -0,0 +1,3 @@
# Allow crawling of all content
User-agent: *
Disallow:

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1 +0,0 @@
<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable-background="new 0 0 256 256" height="256px" id="Layer_1" version="1.1" viewBox="0 0 256 256" width="256px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M76.8,217.6c0-1.637,0.625-3.274,1.875-4.524L163.75,128L78.675,42.925c-2.5-2.5-2.5-6.55,0-9.05s6.55-2.5,9.05,0 l89.601,89.6c2.5,2.5,2.5,6.551,0,9.051l-89.601,89.6c-2.5,2.5-6.55,2.5-9.05,0C77.425,220.875,76.8,219.237,76.8,217.6z"/></svg>

Before

Width:  |  Height:  |  Size: 585 B

View file

@ -1,76 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.2" width="67.32mm" height="67.32mm" viewBox="4682 4809 6732 6732" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve">
<defs class="ClipPathGroup">
<clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse">
<rect x="4682" y="4809" width="6732" height="6732"/>
</clipPath>
<clipPath id="presentation_clip_path_shrink" clipPathUnits="userSpaceOnUse">
<rect x="4688" y="4815" width="6719" height="6719"/>
</clipPath>
</defs>
<defs class="TextShapeIndex">
<g ooo:slide="id1" ooo:id-list="id3 id4 id5"/>
</defs>
<defs class="EmbeddedBulletChars">
<g id="bullet-char-template(57356)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/>
</g>
<g id="bullet-char-template(57354)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/>
</g>
<g id="bullet-char-template(10146)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/>
</g>
<g id="bullet-char-template(10132)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/>
</g>
<g id="bullet-char-template(10007)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/>
</g>
<g id="bullet-char-template(10004)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/>
</g>
<g id="bullet-char-template(9679)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/>
</g>
<g id="bullet-char-template(8226)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/>
</g>
<g id="bullet-char-template(8211)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/>
</g>
<g id="bullet-char-template(61548)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/>
</g>
</defs>
<defs class="TextEmbeddedBitmaps"/>
<g class="SlideGroup">
<g>
<g id="container-id1">
<g id="id1" class="Slide" clip-path="url(#presentation_clip_path)">
<g class="Page">
<g class="com.sun.star.drawing.LineShape">
<g id="id3">
<rect class="BoundingBox" stroke="none" fill="none" x="6253" y="6380" width="3525" height="3525"/>
<path fill="none" stroke="rgb(204,0,0)" stroke-width="1016" stroke-linejoin="round" stroke-linecap="round" d="M 6761,9395 L 9268,6888"/>
</g>
</g>
<g class="com.sun.star.drawing.LineShape">
<g id="id4">
<rect class="BoundingBox" stroke="none" fill="none" x="6253" y="6398" width="3525" height="3526"/>
<path fill="none" stroke="rgb(204,0,0)" stroke-width="1016" stroke-linejoin="round" stroke-linecap="round" d="M 9269,9414 L 6762,6907"/>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
<g id="id5">
<rect class="BoundingBox" stroke="none" fill="none" x="4681" y="4808" width="6734" height="6734"/>
<path fill="none" stroke="rgb(204,0,0)" stroke-width="508" stroke-linejoin="round" d="M 8047,5063 C 9811,5063 11159,6410 11159,8174 11159,9938 9811,11286 8047,11286 6283,11286 4936,9938 4936,8174 4936,6410 6283,5063 8047,5063 Z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.1 KiB

View file

@ -1,37 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Capa_1" x="0px" y="0px" width="512px" height="512px" viewBox="0 0 511.626 511.626" style="enable-background:new 0 0 511.626 511.626;" xml:space="preserve">
<g>
<path d="M477.371,127.44c-22.843-28.074-53.871-50.249-93.076-66.523c-39.204-16.272-82.035-24.41-128.478-24.41 c-34.643,0-67.762,4.805-99.357,14.417c-31.595,9.611-58.812,22.602-81.653,38.97c-22.845,16.37-41.018,35.832-54.534,58.385 C6.757,170.833,0,194.484,0,219.228c0,28.549,8.61,55.3,25.837,80.234c17.227,24.931,40.778,45.871,70.664,62.811 c-2.096,7.611-4.57,14.846-7.426,21.693c-2.855,6.852-5.424,12.474-7.708,16.851c-2.286,4.377-5.376,9.233-9.281,14.562 c-3.899,5.328-6.849,9.089-8.848,11.275c-1.997,2.19-5.28,5.812-9.851,10.849c-4.565,5.048-7.517,8.329-8.848,9.855 c-0.193,0.089-0.953,0.952-2.285,2.567c-1.331,1.615-1.999,2.423-1.999,2.423l-1.713,2.566c-0.953,1.431-1.381,2.334-1.287,2.707 c0.096,0.373-0.094,1.331-0.57,2.851c-0.477,1.526-0.428,2.669,0.142,3.433v0.284c0.765,3.429,2.43,6.187,4.998,8.277 c2.568,2.092,5.474,2.95,8.708,2.563c12.375-1.522,23.223-3.606,32.548-6.276c49.87-12.758,93.649-35.782,131.334-69.097 c14.272,1.522,28.072,2.286,41.396,2.286c46.442,0,89.271-8.138,128.479-24.417c39.208-16.272,70.233-38.448,93.072-66.517 c22.843-28.062,34.263-58.663,34.263-91.781C511.626,186.108,500.207,155.509,477.371,127.44z" fill="#FFFFFF"/>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -1,4 +0,0 @@
<svg fill="#FFFFFF" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
<path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>
<path d="M0 0h24v24H0z" fill="none"/>
</svg>

Before

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 861 B

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