Compare commits

...

253 Commits

Author SHA1 Message Date
RiotRobot
1f543994d4 v1.6.8 2020-07-03 13:33:15 +01:00
RiotRobot
8e81ee071f Prepare changelog for v1.6.8 2020-07-03 13:33:14 +01:00
RiotRobot
7815810cf8 Upgrade matrix-react-sdk to 2.9.0 2020-07-03 13:31:26 +01:00
RiotRobot
14fc25e635 Upgrade matrix-js-sdk to 7.1.0 2020-07-03 13:30:52 +01:00
RiotRobot
1726615b8a v1.6.8-rc.1 2020-07-01 14:43:57 +01:00
RiotRobot
82f599714f Prepare changelog for v1.6.8-rc.1 2020-07-01 14:43:56 +01:00
RiotRobot
a14cff6539 Upgrade matrix-react-sdk to 2.9.0-rc.1 2020-07-01 14:37:15 +01:00
RiotRobot
003a2942fe Upgrade matrix-js-sdk to 7.1.0-rc.1 2020-07-01 14:34:47 +01:00
J. Ryan Stinnett
63a2caa091 Merge pull request #14282 from RiotTranslateBot/weblate-riot-web-riot-web
Update from Weblate
2020-07-01 14:05:54 +01:00
Szimszon
0dc9cdadf9 Translated using Weblate (Hungarian)
Currently translated at 100.0% (35 of 35 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/hu/
2020-07-01 13:03:51 +00:00
XoseM
2c0fef92ef Translated using Weblate (Galician)
Currently translated at 100.0% (35 of 35 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/gl/
2020-07-01 13:03:50 +00:00
Kévin C
f58c59553f Translated using Weblate (French)
Currently translated at 100.0% (35 of 35 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/fr/
2020-07-01 13:03:50 +00:00
Jeff Huang
935914e572 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (35 of 35 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/zh_Hant/
2020-07-01 13:03:50 +00:00
Besnik Bleta
58c8ac05b9 Translated using Weblate (Albanian)
Currently translated at 100.0% (35 of 35 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/sq/
2020-07-01 13:03:49 +00:00
Weblate
4bbfdaa818 Merge branch 'origin/develop' into Weblate. 2020-06-30 19:28:49 +00:00
Michael Telatynski
e0ab2bb96e Merge pull request #14248 from vector-im/t3chguy/download_toast
Show a download completed toast in electron
2020-06-30 20:28:40 +01:00
Weblate
0b63f04b4b Merge branch 'origin/develop' into Weblate. 2020-06-29 15:24:47 +00:00
ButterflyOfFire
d6cb83eb7a Translated using Weblate (Kabyle)
Currently translated at 100.0% (33 of 33 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/kab/
2020-06-29 15:24:47 +00:00
RiotRobot
af349a7ac5 Reset matrix-react-sdk back to develop branch 2020-06-29 16:23:35 +01:00
RiotRobot
d4fa099877 Reset matrix-js-sdk back to develop branch 2020-06-29 16:23:22 +01:00
RiotRobot
98f1536d45 Merge branch 'master' into develop 2020-06-29 16:22:44 +01:00
RiotRobot
70e981f588 v1.6.7 2020-06-29 16:18:15 +01:00
RiotRobot
d193c0909f Prepare changelog for v1.6.7 2020-06-29 16:18:14 +01:00
RiotRobot
ec49f4555b Upgrade matrix-react-sdk to 2.8.1 2020-06-29 16:15:21 +01:00
Michael Telatynski
7a7abc74d9 i18n
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-06-29 15:59:37 +01:00
Michael Telatynski
87527d7b16 Show expiring toast on completed downloads
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-06-29 11:41:18 +01:00
Erik Lindström
6413c3c2fa Translated using Weblate (Swedish)
Currently translated at 100.0% (33 of 33 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/sv/
2020-06-27 20:26:34 +00:00
pebles
4b49fb49ad Translated using Weblate (Spanish)
Currently translated at 100.0% (33 of 33 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/es/
2020-06-27 20:26:34 +00:00
aWeinzierl
9d39a3aea7 Translated using Weblate (Spanish)
Currently translated at 100.0% (33 of 33 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/es/
2020-06-27 20:26:34 +00:00
XoseM
628409d75e Translated using Weblate (Galician)
Currently translated at 100.0% (33 of 33 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/gl/
2020-06-27 20:26:34 +00:00
Michael Telatynski
69f72e330a Merge pull request #14213 from vector-im/anoa/new_spinner
Add the new spinner feature labs flag
2020-06-26 11:05:56 +01:00
Andrew Morgan
993155d56a Add the new spinner feature 2020-06-26 11:02:55 +01:00
Michael Telatynski
3500bbe53d Merge pull request #14212 from vector-im/t3chguy/hf1
Fix loading-test for SSO plaf changes
2020-06-26 09:09:41 +01:00
Michael Telatynski
06852436e6 Fix loading-test for SSO plaf changes
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-06-25 23:59:08 +01:00
J. Ryan Stinnett
c8c99d7ded Merge pull request #14199 from vector-im/jryans/fix-load-spelling
Fix spelling on startup error page
2020-06-25 13:53:54 +01:00
J. Ryan Stinnett
92eb687a75 Fix spelling on startup error page 2020-06-25 12:16:32 +01:00
Bruno Windels
76c93c8bf7 Merge pull request #14175 from vector-im/bwindels/custom-theme-font
Document fonts in custom theme
2020-06-24 13:23:21 +00:00
Bruno Windels
fe0ed2b4f3 Update docs/theming.md
Co-authored-by: J. Ryan Stinnett <jryans@gmail.com>
2020-06-24 13:15:59 +00:00
Bruno Windels
2ce448943b add documentation for fonts in custom theme 2020-06-24 14:55:57 +02:00
RiotRobot
2000f420bd Reset matrix-react-sdk back to develop branch 2020-06-23 15:31:49 +01:00
RiotRobot
979ce51208 Reset matrix-js-sdk back to develop branch 2020-06-23 15:31:35 +01:00
RiotRobot
9be380fdaf Merge branch 'master' into develop 2020-06-23 15:30:51 +01:00
RiotRobot
42c6a26e9f v1.6.6 2020-06-23 15:26:55 +01:00
RiotRobot
abc4f42f83 Prepare changelog for v1.6.6 2020-06-23 15:26:55 +01:00
RiotRobot
b1c106e8b2 Upgrade matrix-react-sdk to 2.8.0 2020-06-23 15:20:43 +01:00
RiotRobot
ae7f354811 Upgrade matrix-js-sdk to 7.0.0 2020-06-23 15:20:24 +01:00
David Baker
f3ef2aba2b Merge pull request #14129 from RiotTranslateBot/weblate-riot-web-riot-web
Update from Weblate
2020-06-22 09:49:15 +01:00
ziriSut
429bd17906 Translated using Weblate (Kabyle)
Currently translated at 100.0% (33 of 33 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/kab/
2020-06-22 08:39:08 +00:00
take100yen
01881f5ef4 Translated using Weblate (Japanese)
Currently translated at 69.7% (23 of 33 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/ja/
2020-06-22 08:39:07 +00:00
Slimane Selyan AMIRI
42bbf4c517 Translated using Weblate (Kabyle)
Currently translated at 36.4% (12 of 33 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/kab/
2020-06-20 20:52:49 +00:00
Weblate
931ca6e3bd Merge branch 'origin/develop' into Weblate. 2020-06-19 08:51:03 +00:00
Damir Jelić
cfee2a43fb Merge branch 'poljar/eventindex-user-version' into develop 2020-06-19 09:53:43 +02:00
Damir Jelić
1b1608c56d Merge remote-tracking branch 'origin/poljar/eventindex-newly-encrypted-room' into develop 2020-06-19 09:53:34 +02:00
Weblate
7fef41f3a7 Merge branch 'origin/develop' into Weblate. 2020-06-18 21:59:39 +00:00
Travis Ralston
5e834a50a9 Merge pull request #14102 from vector-im/travis/room-list/mvp
Mark the new room list as ready for general testing
2020-06-18 15:59:33 -06:00
Travis Ralston
cbf35a6060 Mark the new room list as ready for general testing 2020-06-18 15:46:04 -06:00
Lmath Alpha
a128961d03 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (33 of 33 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/zh_Hans/
2020-06-18 17:02:36 +00:00
RiotRobot
d12f33fb58 v1.6.6-rc.1 2020-06-17 21:52:14 +01:00
RiotRobot
b954292e06 Prepare changelog for v1.6.6-rc.1 2020-06-17 21:52:13 +01:00
RiotRobot
d587a8e910 Upgrade matrix-react-sdk to 2.8.0-rc.1 2020-06-17 21:49:25 +01:00
RiotRobot
2c227f68d4 Upgrade matrix-js-sdk to 7.0.0-rc.1 2020-06-17 21:49:00 +01:00
Damir Jelić
55c1f01f4c ElectronPlatform: Add support to set and get the index user version. 2020-06-17 17:18:44 +02:00
J. Ryan Stinnett
098984dd26 Merge pull request #14067 from RiotTranslateBot/weblate-riot-web-riot-web
Update from Weblate
2020-06-17 15:54:35 +01:00
GardeniaFair
ad1d4cba43 Translated using Weblate (Spanish)
Currently translated at 100.0% (33 of 33 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/es/
2020-06-17 14:52:40 +00:00
Priit Jõerüüt
36851a2aa3 Translated using Weblate (Estonian)
Currently translated at 100.0% (33 of 33 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/et/
2020-06-16 19:26:15 +00:00
RiotRobot
59d37ec94b Reset matrix-react-sdk back to develop branch 2020-06-16 12:01:07 +01:00
RiotRobot
6558d6d828 Reset matrix-js-sdk back to develop branch 2020-06-16 12:00:53 +01:00
RiotRobot
754d849055 Merge branch 'master' into develop 2020-06-16 12:00:14 +01:00
RiotRobot
d75045e852 v1.6.5 2020-06-16 11:53:53 +01:00
RiotRobot
fdec64f59c Prepare changelog for v1.6.5 2020-06-16 11:53:53 +01:00
RiotRobot
9ed7c96df6 Upgrade matrix-react-sdk to 2.7.2 2020-06-16 11:51:28 +01:00
RiotRobot
93da1f192b Upgrade matrix-js-sdk to 6.2.2 2020-06-16 11:51:11 +01:00
David Baker
657fa847c6 Merge pull request #14032 from RiotTranslateBot/weblate-riot-web-riot-web
Update from Weblate
2020-06-15 09:37:51 +01:00
Weblate
7a237e7045 Merge branch 'origin/develop' into Weblate. 2020-06-11 17:25:49 +00:00
Michael Telatynski
5900c7090f Merge pull request #13987 from vector-im/t3chguy/fix-decoder-ring
Attempt to fix decoder ring for relative hosted riots
2020-06-11 18:25:41 +01:00
Michael Telatynski
c32d3efd52 Add Base URL field to decoder-ring to make it more flexible
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-06-11 01:37:31 +01:00
Michael Telatynski
2419db5195 Attempt to fix decoder ring for relative hosted riots
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-06-11 01:24:26 +01:00
Nils Haugen
428f49bb7a Translated using Weblate (Norwegian Nynorsk)
Currently translated at 54.5% (18 of 33 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/nn/
2020-06-09 20:29:25 +00:00
Slimane Selyan AMIRI
b9560c8cfc Translated using Weblate (Kabyle)
Currently translated at 18.2% (6 of 33 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/kab/
2020-06-09 20:29:25 +00:00
Damir Jelić
a968389c85 ElectronPlatform: Implement the isRoomIndexed method. 2020-06-08 16:41:55 +02:00
Nils Haugen
5b63be6a57 Translated using Weblate (Norwegian Nynorsk)
Currently translated at 54.5% (18 of 33 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/nn/
2020-06-08 13:29:22 +00:00
J. Ryan Stinnett
bf174e3f0f Merge pull request #13952 from vector-im/jryans/upgrade-deps-2020-06-05
Upgrade deps
2020-06-08 10:58:46 +01:00
J. Ryan Stinnett
7d800f9f38 Upgrade deps 2020-06-08 10:16:33 +01:00
Michael Telatynski
3bc6b08cad Merge pull request #13946 from vector-im/t3chguy/remember-updates
Fix riot-desktop manual update check getting stuck on Downloading...
2020-06-08 09:44:22 +01:00
Michael Telatynski
34dab73150 Fix riot-desktop manual update check getting stuck on Downloading...
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-06-07 13:19:29 +01:00
Travis Ralston
59cefb6ac8 Merge pull request #13943 from vector-im/dependabot/npm_and_yarn/websocket-extensions-0.1.4
Bump websocket-extensions from 0.1.3 to 0.1.4
2020-06-06 10:50:48 -06:00
dependabot[bot]
e8ebf886e4 Bump websocket-extensions from 0.1.3 to 0.1.4
Bumps [websocket-extensions](https://github.com/faye/websocket-extensions-node) from 0.1.3 to 0.1.4.
- [Release notes](https://github.com/faye/websocket-extensions-node/releases)
- [Changelog](https://github.com/faye/websocket-extensions-node/blob/master/CHANGELOG.md)
- [Commits](https://github.com/faye/websocket-extensions-node/compare/0.1.3...0.1.4)

Signed-off-by: dependabot[bot] <support@github.com>
2020-06-06 13:56:59 +00:00
RiotRobot
6875ffe0d5 Reset matrix-react-sdk back to develop branch 2020-06-05 16:03:24 +01:00
RiotRobot
befc7589cd Reset matrix-js-sdk back to develop branch 2020-06-05 16:03:09 +01:00
RiotRobot
ca632fd2da Merge branch 'master' into develop 2020-06-05 16:02:34 +01:00
RiotRobot
3b28ebecef v1.6.4 2020-06-05 15:57:45 +01:00
RiotRobot
758e2d6bfd Prepare changelog for v1.6.4 2020-06-05 15:57:45 +01:00
RiotRobot
21dd4c99f3 Upgrade matrix-react-sdk to 2.7.1 2020-06-05 15:53:38 +01:00
RiotRobot
45fb8adc5d Upgrade matrix-js-sdk to 6.2.1 2020-06-05 15:52:31 +01:00
RiotRobot
4cf86fd50a Reset matrix-react-sdk back to develop branch 2020-06-04 15:39:07 +01:00
RiotRobot
88bb5a49ed Reset matrix-js-sdk back to develop branch 2020-06-04 15:38:53 +01:00
RiotRobot
5c5e7caacf Merge branch 'master' into develop 2020-06-04 15:38:19 +01:00
RiotRobot
97f45723a3 v1.6.3 2020-06-04 15:34:58 +01:00
RiotRobot
1942cad1f6 Prepare changelog for v1.6.3 2020-06-04 15:34:57 +01:00
RiotRobot
451138617b Upgrade matrix-react-sdk to 2.7.0 2020-06-04 15:23:38 +01:00
RiotRobot
a0ea1bfda8 Upgrade matrix-js-sdk to 6.2.0 2020-06-04 15:23:02 +01:00
Michael Telatynski
bf35dd2b46 Merge pull request #13914 from vector-im/t3chguy/e2eedefault
Add e2ee-default:false docs
2020-06-04 13:12:22 +01:00
Michael Telatynski
bce0bf1b1d Apply suggestions from code review
Co-authored-by: J. Ryan Stinnett <jryans@gmail.com>
2020-06-04 12:38:45 +01:00
Michael Telatynski
a607dc6822 Merge pull request #13915 from vector-im/t3chguy/sso-query
Fix login loop where the sso flow returns to `#/login` to release
2020-06-04 01:09:32 +01:00
Michael Telatynski
cd829d3c1c Merge branches 'develop' and 't3chguy/e2eedefault' of github.com:vector-im/riot-web into t3chguy/e2eedefault 2020-06-03 22:19:03 +01:00
Michael Telatynski
1b7accddfd fix loading test for new sso pattern
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-06-03 22:14:44 +01:00
Michael Telatynski
ddf3d92d43 Fix login loop where the sso flow returns to #/login
due to fragmentAfterLogin going back to `#/login`
and https://github.com/vector-im/riot-web/issues/11643

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-06-03 22:14:44 +01:00
Michael Telatynski
faca8799db Add e2ee-default:false docs
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-06-03 22:10:48 +01:00
Hubert Chathi
d86fd9e753 Merge pull request #13846 from vector-im/uhoreg/keytar
make IPC calls to get pickle key
2020-06-03 16:54:40 -04:00
Michael Telatynski
c75e888c90 Merge pull request #13913 from vector-im/t3chguy/sso-query
fix loading test for new sso pattern
2020-06-03 20:42:24 +01:00
Michael Telatynski
19ff8dde1f fix loading test for new sso pattern
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-06-03 20:35:56 +01:00
Michael Telatynski
801946782b Merge pull request #13889 from vector-im/t3chguy/sso-query
Fix login loop where the sso flow returns to `#/login`
2020-06-03 20:28:04 +01:00
Travis Ralston
5a77025dec Merge pull request #13905 from arthurlogilab/patch-1
Fix typo in docs
2020-06-03 07:47:00 -06:00
Arthur Lutz
d0413f0d15 [docs/config.md] typo fix 2020-06-03 14:59:34 +02:00
Michael Telatynski
d41fee06a1 Merge pull request #13904 from vector-im/t3chguy/remove_cross_signing
Remove cross-signing from labs
2020-06-03 13:42:01 +01:00
Michael Telatynski
bbe9a73266 Merge pull request #13890 from vector-im/t3chguy/pwa-platform
Add PWA Platform with PWA-specific badge controls
2020-06-03 11:19:45 +01:00
Michael Telatynski
c29dc0bad8 Remove cross-signing from labs
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-06-03 10:44:42 +01:00
Michael Telatynski
41738c322a Add PWA Platform with PWA-specific badge controls
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-06-02 16:58:05 +01:00
Michael Telatynski
d18b0f87d4 Fix login loop where the sso flow returns to #/login
due to fragmentAfterLogin going back to `#/login`
and https://github.com/vector-im/riot-web/issues/11643

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-06-02 16:26:08 +01:00
RiotRobot
765927203d v1.6.3-rc.1 2020-06-02 15:55:48 +01:00
RiotRobot
403fddcb99 Prepare changelog for v1.6.3-rc.1 2020-06-02 15:55:47 +01:00
RiotRobot
f8dad68958 Add flux types as a dev dependency
This is not the right thing to do, since we don't directly use Flux at this
layer, but for the moment we need it to get distribution builds working.
2020-06-02 15:53:11 +01:00
RiotRobot
e37680b6c1 Upgrade matrix-react-sdk to 2.7.0-rc.2 2020-06-02 14:41:44 +01:00
RiotRobot
94fee233a8 Upgrade matrix-js-sdk to 6.2.0-rc.1 2020-06-02 14:40:00 +01:00
Michael Telatynski
e1f264c481 Merge pull request #13888 from vector-im/t3chguy/riotbot
Get rid of welcome.html's Chat with Riot Bot button to release
2020-06-02 14:29:56 +01:00
Michael Telatynski
3869a4d22e Merge pull request #13842 from vector-im/t3chguy/riotbot
Get rid of welcome.html's Chat with Riot Bot button
2020-06-02 13:58:49 +01:00
Michael Telatynski
d0679efe5d Merge pull request #13828 from vector-im/t3chguy/modernizr-subtleCrypto
Modernizr check for subtle crypto as we require it all over the place
2020-06-02 13:46:05 +01:00
J. Ryan Stinnett
9e36e7f966 Merge pull request #13886 from RiotTranslateBot/weblate-riot-web-riot-web
Update from Weblate
2020-06-02 13:34:24 +01:00
Weblate
5c6efa4316 Merge branch 'origin/develop' into Weblate. 2020-05-30 12:02:08 +00:00
Michael Telatynski
afd0d69ab5 Merge pull request #13864 from vector-im/t3chguy/toasts6_1
Allow deferring of Update Toast until the next morning
2020-05-30 13:02:03 +01:00
Weblate
8a971e59b9 Merge branch 'origin/develop' into Weblate. 2020-05-30 11:54:32 +00:00
Michael Telatynski
e368007274 Merge pull request #13862 from vector-im/t3chguy/toasts6
Give contextual feedback for manual update check instead of banner
2020-05-30 12:54:27 +01:00
Michael Telatynski
c6688f0245 make button margin equal all around
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-05-30 12:52:21 +01:00
Weblate
d60f1553b1 Merge branch 'origin/develop' into Weblate. 2020-05-29 19:40:47 +00:00
Michael Telatynski
cb48eb4933 Merge pull request #13834 from vector-im/t3chguy/docs
Add app-load doc
2020-05-29 20:40:43 +01:00
Weblate
a944262bb5 Merge branch 'origin/develop' into Weblate. 2020-05-29 19:16:23 +00:00
Michael Telatynski
06cc1c45bf Merge pull request #13777 from vector-im/t3chguy/modular-utm
Update Modular hosting link
2020-05-29 20:16:18 +01:00
Michael Telatynski
66272fc226 Allow deferring of Update Toast until the next morning
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-05-29 19:59:48 +01:00
Michael Telatynski
1fd74f22c8 Give contextual feedback for manual update check instead of banner
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-05-29 18:24:45 +01:00
Hubert Chathi
fb62f6dfb4 make IPC calls to get pickle key 2020-05-28 14:44:38 -04:00
Michael Telatynski
bc4254574d i18n
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-05-28 19:08:03 +01:00
Michael Telatynski
a6683cec67 Get rid of welcome.html's Chat with Riot Bot button
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-05-28 18:49:36 +01:00
Weblate
4252735db0 Merge branch 'origin/develop' into Weblate. 2020-05-28 17:30:36 +00:00
Michael Telatynski
c68f35060a Merge pull request #13776 from vector-im/t3chguy/toasts3_2
Replace New Version Bar with a Toast
2020-05-28 18:30:31 +01:00
Weblate
ec995fb151 Merge branch 'origin/develop' into Weblate. 2020-05-28 16:05:51 +00:00
MamasLT
154586f452 Translated using Weblate (Lithuanian)
Currently translated at 100.0% (36 of 36 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/lt/
2020-05-28 16:05:50 +00:00
XoseM
40cf610986 Translated using Weblate (Galician)
Currently translated at 100.0% (36 of 36 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/gl/
2020-05-28 16:05:50 +00:00
Travis Ralston
0f087f7a5a Merge pull request #13814 from vector-im/travis/cleanup-lockfile
Remove webpack-build-notifier from lockfile
2020-05-28 10:05:44 -06:00
Michael Telatynski
af8fb33b83 add line
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-05-28 14:28:14 +01:00
Michael Telatynski
361cc4ab5c Add app-load doc
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-05-28 14:26:51 +01:00
Michael Telatynski
57d2026a40 Modernizr check for subtle crypto as we require it all over the place
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-05-28 00:31:22 +01:00
Weblate
7185ae17b1 Merge branch 'origin/develop' into Weblate. 2020-05-27 15:04:17 +00:00
Travis Ralston
332be9b4e1 Merge pull request #13818 from TitanNano/9814
Add media queries and mobile viewport (#12142)
2020-05-27 09:04:10 -06:00
Jovan Gerodetti
061619929e Integrate requested changes from #12142 2020-05-27 16:50:35 +02:00
Dale Harvey
74f798157f Add media queries and mobile viewport 2020-05-27 16:50:35 +02:00
yuuki-san
e7d22fa086 Translated using Weblate (Slovak)
Currently translated at 100.0% (36 of 36 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/sk/
2020-05-27 09:43:52 +00:00
Microtus62
a2914cff94 Translated using Weblate (Slovak)
Currently translated at 100.0% (36 of 36 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/sk/
2020-05-27 09:43:52 +00:00
Michael Telatynski
c17bcda1ba Merge branches 'develop' and 't3chguy/toasts3_2' of github.com:vector-im/riot-web into t3chguy/toasts3_2 2020-05-27 09:58:08 +01:00
Travis Ralston
b9794ea6e4 Remove webpack-build-notifier from lockfile 2020-05-26 13:50:31 -06:00
Jorik Schellekens
492dd42f4d Merge pull request #13809 from JorikSchellekens/develop
Fix @types/react conflict in matrix-react-sdk
2020-05-26 16:12:46 +01:00
Michael Telatynski
29ff40eee5 Merge pull request #13808 from vector-im/t3chguy/arrow-funcs-super
Fix manual update checking, super in arrow funcs doesn't work
2020-05-26 10:13:02 +01:00
Michael Telatynski
3ad3c3ca0a Fix super in arrow funcs
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-05-26 10:04:49 +01:00
David Baker
6723e71eb2 Merge pull request #13806 from RiotTranslateBot/weblate-riot-web-riot-web
Update from Weblate
2020-05-26 09:43:28 +01:00
Jorik Schellekens
43c0148123 Fix @types/react conflict in matrix-react-sdk 2020-05-25 18:37:30 +01:00
Michael Telatynski
f546d8bc15 Update Modular hosting link
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-05-23 08:48:30 +01:00
Michael Telatynski
48a618264a Replace New Version Bar with a Toast
discards the `new_version` dispatch

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-05-22 23:08:46 +01:00
Weblate
19a19cde2f Merge branch 'origin/develop' into Weblate. 2020-05-22 15:36:04 +00:00
Osoitz
733e38cab1 Translated using Weblate (Basque)
Currently translated at 100.0% (36 of 36 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/eu/
2020-05-22 15:36:04 +00:00
Michael Telatynski
b4284b4c68 Merge pull request #13756 from vector-im/t3chguy/toasts2
Convert platforms to Typescript
2020-05-22 16:35:57 +01:00
Weblate
34e92adf05 Merge branch 'origin/develop' into Weblate. 2020-05-22 13:36:55 +00:00
RiotRobot
ef60265bb6 Reset matrix-react-sdk back to develop branch 2020-05-22 14:36:23 +01:00
RiotRobot
aed4568882 Reset matrix-js-sdk back to develop branch 2020-05-22 14:36:11 +01:00
Weblate
7d517053b1 Merge branch 'origin/develop' into Weblate. 2020-05-22 13:35:49 +00:00
RiotRobot
b9ea0af44c Merge branch 'master' into develop 2020-05-22 14:35:27 +01:00
RiotRobot
075299a7eb v1.6.2 2020-05-22 14:21:24 +01:00
RiotRobot
55cba2caa3 Prepare changelog for v1.6.2 2020-05-22 14:21:23 +01:00
RiotRobot
9e88a7d1c0 Upgrade matrix-react-sdk to 2.6.1 2020-05-22 14:17:58 +01:00
Weblate
b7db59eeb2 Merge branch 'origin/develop' into Weblate. 2020-05-22 13:03:35 +00:00
Michael Telatynski
6c92b26875 Merge pull request #13764 from vector-im/t3chguy/toasts3
Fix EventEmitter typescript signature in node typings
2020-05-22 14:03:29 +01:00
Michael Telatynski
3bbd3e246a Fix EventEmitter typescript signature in node typings
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-05-22 13:52:40 +01:00
Weblate
26c5cdf2c5 Merge branch 'origin/develop' into Weblate. 2020-05-21 19:30:41 +00:00
yuuki-san
af76675552 Translated using Weblate (Slovak)
Currently translated at 94.4% (34 of 36 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/sk/
2020-05-21 19:30:41 +00:00
MamasLT
134833c7d4 Translated using Weblate (Lithuanian)
Currently translated at 100.0% (36 of 36 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/lt/
2020-05-21 19:30:41 +00:00
Travis Ralston
42a2f83603 Merge pull request #13675 from vector-im/travis/room-list-2
Add docs and labs flag for new room list implementation
2020-05-21 13:30:35 -06:00
Travis Ralston
6f7570d877 Merge branch 'develop' into travis/room-list-2 2020-05-21 13:29:20 -06:00
Michael Telatynski
d7ee8e13cc make ts happy
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-05-21 18:25:52 +01:00
Michael Telatynski
cb0e3bba38 mark VectorBasePlatform as an abstract class
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-05-21 18:07:01 +01:00
Michael Telatynski
706972eff2 tidy
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-05-20 20:01:51 +01:00
Michael Telatynski
6ec613c2c2 Convert various things to Typescript
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-05-20 19:56:54 +01:00
Weblate
9874c2c455 Merge branch 'origin/develop' into Weblate. 2020-05-20 16:05:35 +00:00
MamasLT
1412d11d67 Translated using Weblate (Lithuanian)
Currently translated at 100.0% (36 of 36 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/lt/
2020-05-20 16:05:35 +00:00
Xose M
cbbb53cc90 Translated using Weblate (Galician)
Currently translated at 100.0% (36 of 36 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/gl/
2020-05-20 16:05:34 +00:00
Travis Ralston
03414d92d0 Merge pull request #13352 from vector-im/revert-13351-revert-13199-joriks/font-sclaing-slider
Add font scaling labs setting.
2020-05-20 10:05:28 -06:00
Weblate
199139efff Merge branch 'origin/develop' into Weblate. 2020-05-19 20:53:06 +00:00
Travis Ralston
aae5e4c234 Merge pull request #13350 from JorikSchellekens/joriks/font-sclaing-slider
Add labs flag for alternate message layouts
2020-05-19 14:53:01 -06:00
Jorik Schellekens
3a7578b7ee Remove avatar flag 2020-05-19 18:30:30 +01:00
yuuki-san
18b5fbaa6e Translated using Weblate (Slovak)
Currently translated at 88.9% (32 of 36 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/sk/
2020-05-19 17:28:48 +00:00
Weblate
72513697af Merge branch 'origin/develop' into Weblate. 2020-05-19 10:36:26 +00:00
RiotRobot
16ecc007d6 Reset matrix-react-sdk back to develop branch 2020-05-19 11:36:17 +01:00
RiotRobot
92b94af9ed Reset matrix-js-sdk back to develop branch 2020-05-19 11:36:07 +01:00
Weblate
4addf64551 Merge branch 'origin/develop' into Weblate. 2020-05-19 10:35:50 +00:00
RiotRobot
ef0076bd83 Merge branch 'master' into develop 2020-05-19 11:34:45 +01:00
RiotRobot
482d6a7fb3 v1.6.1 2020-05-19 11:31:35 +01:00
RiotRobot
02784379f8 Prepare changelog for v1.6.1 2020-05-19 11:31:35 +01:00
RiotRobot
a9fbc190bf Upgrade matrix-react-sdk to 2.6.0 2020-05-19 11:28:08 +01:00
RiotRobot
f35ec09b54 Upgrade matrix-js-sdk to 6.1.0 2020-05-19 11:27:41 +01:00
Weblate
81db5900f0 Merge branch 'origin/develop' into Weblate. 2020-05-19 05:22:41 +00:00
Travis Ralston
6d99c08e59 Merge pull request #13666 from vector-im/travis/dispatcher-types
Move dispatcher references in support of TypeScript conversion
2020-05-18 23:22:35 -06:00
Weblate
b513cafc98 Merge branch 'origin/develop' into Weblate. 2020-05-18 09:23:51 +00:00
David Baker
1f1c1279ea Merge pull request #13704 from RiotTranslateBot/weblate-riot-web-riot-web
Update from Weblate
2020-05-18 10:23:46 +01:00
Weblate
8be2fdf99c Merge branch 'origin/develop' into Weblate. 2020-05-18 09:19:29 +00:00
Michael Telatynski
c565af1ade Merge pull request #13649 from vector-im/t3chguy/favico
Replace favico.js dependency with simplified variant grown from it
2020-05-18 10:19:23 +01:00
Weblate
4e92d09cca Merge branch 'origin/develop' into Weblate. 2020-05-17 21:45:07 +00:00
Xose M
c442a89253 Translated using Weblate (Galician)
Currently translated at 100.0% (36 of 36 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/gl/
2020-05-17 21:45:07 +00:00
J. Ryan Stinnett
96a550b88a Merge pull request #13688 from vector-im/jryans/rm-electron-scripts
Remove Electron packaging scripts
2020-05-17 22:45:00 +01:00
Reinis Mednis
0da3534ef5 Translated using Weblate (Latvian)
Currently translated at 86.1% (31 of 36 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/lv/
2020-05-16 07:22:11 +00:00
Tuomas Hietala
7a17172f50 Translated using Weblate (Finnish)
Currently translated at 97.2% (35 of 36 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/fi/
2020-05-16 07:22:05 +00:00
Besnik Bleta
343f19f3b0 Translated using Weblate (Albanian)
Currently translated at 100.0% (36 of 36 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/sq/
2020-05-16 07:22:01 +00:00
J. Ryan Stinnett
40f40251f1 Remove Electron packaging scripts
These tasks are handled by riot-desktop now.
2020-05-15 17:56:23 +01:00
Travis Ralston
429494aad4 Enable room list labs flag
For the intrepid testers who don't care about losing room list features.
2020-05-14 14:26:09 -06:00
Travis Ralston
81010a4f2f Add docs for room list labs flag 2020-05-14 14:24:34 -06:00
Travis Ralston
e3f2e97b9f Merge branch 'travis/dispatcher-types' into travis/room-list-2 2020-05-14 14:21:43 -06:00
Michael Telatynski
5feadbc18e Merge branch 'develop' of github.com:vector-im/riot-web into t3chguy/favico 2020-05-14 21:20:04 +01:00
Michael Telatynski
4532ddbb2d Add support for badge override opts
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-05-14 21:19:54 +01:00
Michael Telatynski
5b59c67012 Merge pull request #13674 from vector-im/t3chguy/progress_colour
Fix postcss order to allow mixin variables to work
2020-05-14 20:37:49 +01:00
Michael Telatynski
99df2d3126 Fix postcss order to allow mixin variables to work
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-05-14 18:46:16 +01:00
Michael Telatynski
7246d9f2d6 Merge pull request #13650 from vector-im/t3chguy/sso_hash
Pass screenAfterLogin through SSO in the callback url
2020-05-14 17:30:32 +01:00
RiotRobot
f56ee6df34 v1.6.1-rc.1 2020-05-14 16:53:00 +01:00
RiotRobot
475e7d0f31 Prepare changelog for v1.6.1-rc.1 2020-05-14 16:53:00 +01:00
RiotRobot
8bf9635fc8 Remove Electron steps from release script 2020-05-14 16:40:25 +01:00
RiotRobot
fe32590e30 Upgrade matrix-react-sdk to 2.6.0-rc.1 2020-05-14 16:35:02 +01:00
RiotRobot
710dc18f2c Upgrade matrix-js-sdk to 6.1.0-rc.1 2020-05-14 16:33:28 +01:00
J. Ryan Stinnett
4682b093a9 Merge pull request #13673 from RiotTranslateBot/weblate-riot-web-riot-web
Update from Weblate
2020-05-14 16:00:08 +01:00
Weblate
747a7dbe8e Merge branch 'origin/develop' into Weblate. 2020-05-14 14:49:33 +00:00
David Baker
7368983a30 Merge pull request #13669 from vector-im/dbkr/notranslate
Add notranslate class to matrixchat to prevent translation by Google Translate
2020-05-14 15:49:27 +01:00
blakhawk23
d4c9da4d8b Translated using Weblate (Romanian)
Currently translated at 63.9% (23 of 36 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/ro/
2020-05-14 10:28:39 +00:00
langdev4u
ac5ab3d1d3 Translated using Weblate (Dutch)
Currently translated at 100.0% (36 of 36 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/nl/
2020-05-14 10:28:38 +00:00
David Baker
50c4e44a14 Add notranslate class to matrixchat to prevent translation by Google Translate
Google Translate manipulates the DOM which is fundamentally incomaptible with
React and causes exceptions to be thrown when React tries to manipulate the DOM
based on its VDOM and the DOM methods throw exceptions because the DOM structure
is not what React thinks it is.

Riot has an i18n system, although it doesn't cover all strings and all languages.

Fixes https://github.com/vector-im/riot-web/issues/13557
2020-05-14 10:37:44 +01:00
Travis Ralston
a21d6e651f Move dispatcher references in support of TypeScript conversion
See https://github.com/matrix-org/matrix-react-sdk/pull/4593
2020-05-13 21:15:30 -06:00
Michael Telatynski
6348b17e23 Pass screenAfterLogin through SSO in the callback url
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-05-13 06:24:05 +01:00
Michael Telatynski
0d1b4afde8 tidy comments
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-05-13 05:23:43 +01:00
Michael Telatynski
911bd2e469 Replace favico.js dependency with simplified variant grown from it
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-05-13 05:19:08 +01:00
Weblate
9cab70d1e9 Merge branch 'origin/develop' into Weblate. 2020-05-12 12:55:30 +00:00
Weblate
9ba398f415 Merge branch 'origin/develop' into Weblate. 2020-05-12 08:43:04 +00:00
Iria_kuro
cba4ed3aa2 Translated using Weblate (Korean)
Currently translated at 94.4% (34 of 36 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/ko/
2020-05-12 08:43:04 +00:00
Weblate
57bf935300 Merge branch 'origin/develop' into Weblate. 2020-05-11 10:36:22 +00:00
Iria_kuro
059fa6d437 Translated using Weblate (Korean)
Currently translated at 61.1% (22 of 36 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/ko/
2020-05-11 10:36:22 +00:00
Mine_My
9ea25160a1 Translated using Weblate (Korean)
Currently translated at 58.3% (21 of 36 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/ko/
2020-05-11 10:27:17 +00:00
Jorik Schellekens
585cfbbaf9 Update docs 2020-05-07 16:18:11 +01:00
Jorik Schellekens
4ec952f1f1 Move irc layout to labs 2020-05-07 14:12:35 +01:00
Jorik Schellekens
6d19d1b346 Change setting location. 2020-04-28 16:56:23 +01:00
Travis Ralston
58bf82186c Revert "Revert "Add font scaling labs setting."" 2020-04-23 13:17:20 -06:00
Jorik Schellekens
4f7081fc2b Add labs flag for alternate message layouts 2020-04-23 19:12:10 +01:00
53 changed files with 2476 additions and 1835 deletions

View File

@@ -29,6 +29,7 @@
"test/url/urlsearchparams",
"test/cors",
"test/crypto",
"test/iframe/sandbox",
"test/json",
"test/network/fetch",

View File

@@ -1,3 +1,242 @@
Changes in [1.6.8](https://github.com/vector-im/riot-web/releases/tag/v1.6.8) (2020-07-03)
==========================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.8-rc.1...v1.6.8)
* Upgrade to JS SDK 7.1.0 and React SDK 2.9.0
Changes in [1.6.8-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.6.8-rc.1) (2020-07-01)
====================================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.7...v1.6.8-rc.1)
* Upgrade to JS SDK 7.1.0-rc.1 and React SDK 2.9.0-rc.1
* Update from Weblate
[\#14282](https://github.com/vector-im/riot-web/pull/14282)
* Show a download completed toast in electron
[\#14248](https://github.com/vector-im/riot-web/pull/14248)
* Add the new spinner feature labs flag
[\#14213](https://github.com/vector-im/riot-web/pull/14213)
* Fix loading-test for SSO plaf changes
[\#14212](https://github.com/vector-im/riot-web/pull/14212)
* Fix spelling on startup error page
[\#14199](https://github.com/vector-im/riot-web/pull/14199)
* Document fonts in custom theme
[\#14175](https://github.com/vector-im/riot-web/pull/14175)
* Update from Weblate
[\#14129](https://github.com/vector-im/riot-web/pull/14129)
* ElectronPlatform: Implement the isRoomIndexed method.
[\#13957](https://github.com/vector-im/riot-web/pull/13957)
* ElectronPlatform: Add support to set and get the index user version.
[\#14080](https://github.com/vector-im/riot-web/pull/14080)
* Mark the new room list as ready for general testing
[\#14102](https://github.com/vector-im/riot-web/pull/14102)
Changes in [1.6.7](https://github.com/vector-im/riot-web/releases/tag/v1.6.7) (2020-06-29)
==========================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.6...v1.6.7)
* Upgrade to React SDK 2.8.1
Changes in [1.6.6](https://github.com/vector-im/riot-web/releases/tag/v1.6.6) (2020-06-23)
==========================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.6-rc.1...v1.6.6)
* Upgrade to JS SDK 7.0.0 and React SDK 2.8.0
Changes in [1.6.6-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.6.6-rc.1) (2020-06-17)
====================================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.5...v1.6.6-rc.1)
* Upgrade to JS SDK 7.0.0-rc.1 and React SDK 2.8.0-rc.1
* Update from Weblate
[\#14067](https://github.com/vector-im/riot-web/pull/14067)
* Update from Weblate
[\#14032](https://github.com/vector-im/riot-web/pull/14032)
* Attempt to fix decoder ring for relative hosted riots
[\#13987](https://github.com/vector-im/riot-web/pull/13987)
* Upgrade deps
[\#13952](https://github.com/vector-im/riot-web/pull/13952)
* Fix riot-desktop manual update check getting stuck on Downloading...
[\#13946](https://github.com/vector-im/riot-web/pull/13946)
* Bump websocket-extensions from 0.1.3 to 0.1.4
[\#13943](https://github.com/vector-im/riot-web/pull/13943)
* Add e2ee-default:false docs
[\#13914](https://github.com/vector-im/riot-web/pull/13914)
* make IPC calls to get pickle key
[\#13846](https://github.com/vector-im/riot-web/pull/13846)
* fix loading test for new sso pattern
[\#13913](https://github.com/vector-im/riot-web/pull/13913)
* Fix login loop where the sso flow returns to `#/login`
[\#13889](https://github.com/vector-im/riot-web/pull/13889)
* Fix typo in docs
[\#13905](https://github.com/vector-im/riot-web/pull/13905)
* Remove cross-signing from labs
[\#13904](https://github.com/vector-im/riot-web/pull/13904)
* Add PWA Platform with PWA-specific badge controls
[\#13890](https://github.com/vector-im/riot-web/pull/13890)
* Modernizr check for subtle crypto as we require it all over the place
[\#13828](https://github.com/vector-im/riot-web/pull/13828)
Changes in [1.6.5](https://github.com/vector-im/riot-web/releases/tag/v1.6.5) (2020-06-16)
==========================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.4...v1.6.5)
* Upgrade to JS SDK 6.2.2 and React SDK 2.7.2
Changes in [1.6.4](https://github.com/vector-im/riot-web/releases/tag/v1.6.4) (2020-06-05)
==========================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.3...v1.6.4)
* Upgrade to JS SDK 6.2.1 and React SDK 2.7.1
Changes in [1.6.3](https://github.com/vector-im/riot-web/releases/tag/v1.6.3) (2020-06-04)
==========================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.3-rc.1...v1.6.3)
## Security notice
Riot Web 1.6.3 fixes a vulnerability in single sign-on (SSO) deployments where Riot Web could be confused into sending authentication details to an attacker-controlled server. Thanks to Quentin Gliech for responsibly disclosing this via Matrix's Security Disclosure Policy.
## All changes
* Fix login loop where the sso flow returns to `#/login` to release
[\#13915](https://github.com/vector-im/riot-web/pull/13915)
Changes in [1.6.3-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.6.3-rc.1) (2020-06-02)
====================================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.2...v1.6.3-rc.1)
* Upgrade to JS SDK 6.2.0-rc.1 and React SDK 2.7.0-rc.2
* Get rid of welcome.html's Chat with Riot Bot button
[\#13842](https://github.com/vector-im/riot-web/pull/13842)
* Update from Weblate
[\#13886](https://github.com/vector-im/riot-web/pull/13886)
* Allow deferring of Update Toast until the next morning
[\#13864](https://github.com/vector-im/riot-web/pull/13864)
* Give contextual feedback for manual update check instead of banner
[\#13862](https://github.com/vector-im/riot-web/pull/13862)
* Add app-load doc
[\#13834](https://github.com/vector-im/riot-web/pull/13834)
* Update Modular hosting link
[\#13777](https://github.com/vector-im/riot-web/pull/13777)
* Replace New Version Bar with a Toast
[\#13776](https://github.com/vector-im/riot-web/pull/13776)
* Remove webpack-build-notifier from lockfile
[\#13814](https://github.com/vector-im/riot-web/pull/13814)
* Add media queries and mobile viewport (#12142)
[\#13818](https://github.com/vector-im/riot-web/pull/13818)
* Fix @types/react conflict in matrix-react-sdk
[\#13809](https://github.com/vector-im/riot-web/pull/13809)
* Fix manual update checking, super in arrow funcs doesn't work
[\#13808](https://github.com/vector-im/riot-web/pull/13808)
* Update from Weblate
[\#13806](https://github.com/vector-im/riot-web/pull/13806)
* Convert platforms to Typescript
[\#13756](https://github.com/vector-im/riot-web/pull/13756)
* Fix EventEmitter typescript signature in node typings
[\#13764](https://github.com/vector-im/riot-web/pull/13764)
* Add docs and labs flag for new room list implementation
[\#13675](https://github.com/vector-im/riot-web/pull/13675)
* Add font scaling labs setting.
[\#13352](https://github.com/vector-im/riot-web/pull/13352)
* Add labs flag for alternate message layouts
[\#13350](https://github.com/vector-im/riot-web/pull/13350)
* Move dispatcher references in support of TypeScript conversion
[\#13666](https://github.com/vector-im/riot-web/pull/13666)
* Update from Weblate
[\#13704](https://github.com/vector-im/riot-web/pull/13704)
* Replace favico.js dependency with simplified variant grown from it
[\#13649](https://github.com/vector-im/riot-web/pull/13649)
* Remove Electron packaging scripts
[\#13688](https://github.com/vector-im/riot-web/pull/13688)
* Fix postcss order to allow mixin variables to work
[\#13674](https://github.com/vector-im/riot-web/pull/13674)
* Pass screenAfterLogin through SSO in the callback url
[\#13650](https://github.com/vector-im/riot-web/pull/13650)
Changes in [1.6.2](https://github.com/vector-im/riot-web/releases/tag/v1.6.2) (2020-05-22)
==========================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.1...v1.6.2)
* Upgrade to React SDK 2.6.1
Changes in [1.6.1](https://github.com/vector-im/riot-web/releases/tag/v1.6.1) (2020-05-19)
==========================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.1-rc.1...v1.6.1)
* Upgrade to React SDK 2.6.0 and JS SDK 6.1.0
Changes in [1.6.1-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.6.1-rc.1) (2020-05-14)
====================================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0...v1.6.1-rc.1)
* Upgrade to React SDK 2.6.0-rc.1 and JS SDK 6.1.0-rc.1
* Update from Weblate
[\#13673](https://github.com/vector-im/riot-web/pull/13673)
* Add notranslate class to matrixchat to prevent translation by Google
Translate
[\#13669](https://github.com/vector-im/riot-web/pull/13669)
* Added Anchor Link to the development of matrix sdk
[\#13638](https://github.com/vector-im/riot-web/pull/13638)
* Prefetch the formatting button mask svg images
[\#13631](https://github.com/vector-im/riot-web/pull/13631)
* use a different image in previews
[\#13488](https://github.com/vector-im/riot-web/pull/13488)
* Update from Weblate
[\#13625](https://github.com/vector-im/riot-web/pull/13625)
* Remove electron_app as we now have riot-desktop repo
[\#13544](https://github.com/vector-im/riot-web/pull/13544)
* add new images for PWA icons
[\#13556](https://github.com/vector-im/riot-web/pull/13556)
* Remove unused feature flag from config
[\#13504](https://github.com/vector-im/riot-web/pull/13504)
* Update from Weblate
[\#13486](https://github.com/vector-im/riot-web/pull/13486)
* Developer tool: convert rageshake error locations back to sourcecode
locations
[\#13357](https://github.com/vector-im/riot-web/pull/13357)
* App load tweaks, improve error pages
[\#13329](https://github.com/vector-im/riot-web/pull/13329)
* Tweak default device name to be more compact
[\#13465](https://github.com/vector-im/riot-web/pull/13465)
* Tweak default device name on macOS
[\#13460](https://github.com/vector-im/riot-web/pull/13460)
* Update docs with custom theming changes
[\#13406](https://github.com/vector-im/riot-web/pull/13406)
* Update from Weblate
[\#13395](https://github.com/vector-im/riot-web/pull/13395)
* Remove docs and config for invite only padlocks
[\#13374](https://github.com/vector-im/riot-web/pull/13374)
* Revert "Add font scaling labs setting."
[\#13351](https://github.com/vector-im/riot-web/pull/13351)
* Expand feature flag docs to cover additional release channels
[\#13341](https://github.com/vector-im/riot-web/pull/13341)
* Optimized image assets by recompressing without affecting quality.
[\#13034](https://github.com/vector-im/riot-web/pull/13034)
* Add font scaling labs setting.
[\#13199](https://github.com/vector-im/riot-web/pull/13199)
* Remove encrypted message search feature flag
[\#13325](https://github.com/vector-im/riot-web/pull/13325)
* Fix `default_federate` settting description
[\#13312](https://github.com/vector-im/riot-web/pull/13312)
* Clarify that the .well-known method for Jitsi isn't available yet
[\#13314](https://github.com/vector-im/riot-web/pull/13314)
* add config option to tsc resolveJsonModule
[\#13296](https://github.com/vector-im/riot-web/pull/13296)
* Fix dispatcher import to be extension agnostic
[\#13297](https://github.com/vector-im/riot-web/pull/13297)
* Document more config options in config.md (fixes #13089)
[\#13260](https://github.com/vector-im/riot-web/pull/13260)
* Fix tests post-js-sdk-filters change
[\#13295](https://github.com/vector-im/riot-web/pull/13295)
* Make Jitsi download script a JS script
[\#13227](https://github.com/vector-im/riot-web/pull/13227)
* Use matrix-react-sdk type extensions as a base
[\#13271](https://github.com/vector-im/riot-web/pull/13271)
* Allow Riot Web to randomly pick welcome backgrounds
[\#13235](https://github.com/vector-im/riot-web/pull/13235)
* Update cross-signing feature docs and document fallback procedures
[\#13224](https://github.com/vector-im/riot-web/pull/13224)
Changes in [1.6.0](https://github.com/vector-im/riot-web/releases/tag/v1.6.0) (2020-05-05)
==========================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0-rc.6...v1.6.0)

View File

@@ -26,10 +26,13 @@
"defaultCountryCode": "GB",
"showLabsSettings": false,
"features": {
"feature_new_spinner": "labs",
"feature_font_scaling": "labs",
"feature_pinning": "labs",
"feature_custom_status": "labs",
"feature_custom_tags": "labs",
"feature_state_counters": "labs"
"feature_state_counters": "labs",
"feature_irc_ui": "labs"
},
"default_federate": true,
"default_theme": "light",

81
docs/app-load.md Normal file
View File

@@ -0,0 +1,81 @@
# App load order
Old slow flow:
![image](https://user-images.githubusercontent.com/2403652/73848963-00a2a080-4821-11ea-97d4-1200fc2638f3.png)
Current more parallel flow:
![image](https://user-images.githubusercontent.com/2403652/83146440-303a2900-a0ee-11ea-806b-4f53f039b957.png)
<details><summary>Code</summary>
<p>
<pre><code>
digraph G {
node [shape=box];
subgraph cluster_0 {
color=orange;
node [style=filled];
label = "index.ts";
entrypoint, s0, ready [shape=point];
rageshake, config, i18n, theme, skin, olm [shape=parallelogram];
mobile [shape=diamond, label="mobile"];
modernizr [shape=diamond];
redirect, incompatible [shape=egg];
entrypoint -> rageshake;
rageshake -> mobile [color=blue];
mobile -> s0 [label="No"];
mobile -> redirect [label="Yes"];
s0 -> platform;
s0 -> olm;
platform -> config;
config -> i18n [color=blue];
config -> theme [color=blue];
config -> skin [color=blue];
i18n -> modernizr [color=blue];
theme -> modernizr [color=blue];
skin -> modernizr [color=blue];
modernizr -> ready [label="Yes"];
modernizr -> incompatible [label="No"];
incompatible -> ready [label="user ignore"];
olm -> ready [color=red];
config -> ready [color=red];
skin -> ready [color=red];
theme -> ready [color=red];
i18n -> ready [color=red];
}
subgraph cluster_1 {
color = green;
node [style=filled];
label = "init.tsx";
ready -> loadApp;
loadApp -> matrixchat;
}
}
</code></pre>
</p>
</details>
Key:
+ Parallelogram: async/await task
+ Box: sync task
+ Diamond: conditional branch
+ Egg: user interaction
+ Blue arrow: async task is allowed to settle but allowed to fail
+ Red arrow: async task success is asserted
Notes:
+ A task begins when all its dependencies (arrows going into it) are fulfilled.
+ The success of setting up rageshake is never asserted, riot-web has a fallback path for running without IDB (and thus rageshake).
+ Everything is awaited to be settled before the Modernizr check, to allow it to make use of things like i18n if they are successful.
Underlying dependencies:
![image](https://user-images.githubusercontent.com/2403652/73848977-08624500-4821-11ea-9830-bb0317c41086.png)

View File

@@ -91,7 +91,7 @@ For a good example, see https://riot.im/develop/config.json.
call buttons - integration managers may use a different domain.
1. `enable_presence_by_hs_url`: The property key should be the URL of the homeserver
and its value defines whether to enable/disable the presence status display
from that homeserver. If no options are configurd, presence is shown for all
from that homeserver. If no options are configured, presence is shown for all
homeservers.
1. `disable_guests`: Disables guest access tokens and auto-guest registrations.
Defaults to false (guests are allowed).

16
docs/e2ee.md Normal file
View File

@@ -0,0 +1,16 @@
# End to end encryption by default
By default, Riot will create encrypted DM rooms if the user you are chatting with has keys uploaded on their account.
For private room creation, Riot will default to encryption on but give you the choice to opt-out.
## Disabling encryption by default
Set the following on your homeserver's
`/.well-known/matrix/client` config:
```json
{
"im.vector.riot.e2ee": {
"default": false
}
}
```

View File

@@ -7,6 +7,15 @@ to `Settings->Labs`. This list is non-exhaustive and subject to change, chat in
**Be warned! Labs features are not finalised, they may be fragile, they may change, they may be
dropped. Ask in the room if you are unclear about any details here.**
## New spinner design (`feature_new_spinner`)
Replaces the old spinner image with a new, svg-based one featuring a sleeker design.
## Font scaling (`feature_font_scaling`)
Enables font scaling options for accessibility. To alter the scale check the
appearance tab in settings.
## Message pinning (`feature_pinning`)
Allows you to pin messages in the room. To pin a message, use the 3 dots to the right of the message
@@ -67,22 +76,6 @@ An implementation of [MSC2241](https://github.com/matrix-org/matrix-doc/pull/224
This also includes a new implementation of the user & member info panel, designed to share more code between showing community members & room members. Built on top of this new panel is also a new UX for verification from the member panel.
## Cross-signing
Cross-signing ([MSC1756](https://github.com/matrix-org/matrix-doc/pull/1756))
improves the device verification experience by allowing you to verify a user
instead of verifying each of their devices.
The feature is enabled by default and does not follow a traditional labs flag
at the moment. If something goes wrong, add this to your config to disable it:
```json
{
"settingDefaults": {
"feature_cross_signing": false
}
}
```
The setting will be removed in a future release, enabling it non-optionally for
all users.
@@ -106,3 +99,14 @@ adds an ability for end users to add themes themselves by using a URL to the JSO
theme definition.
For some sample themes, check out [aaronraimist/riot-web-themes](https://github.com/aaronraimist/riot-web-themes).
## New room list (`feature_new_room_list`)
A complete rewrite of the room list is underway to increase performance, stability,
and general usability. This is still rapidly changing, but feel free to give it a test.
## IRC message layout (`feature_irc_ui`)
Adds an option to change the message layout to an IRC style ` timestamp | avatar
| name | message `

View File

@@ -41,6 +41,16 @@ eg. in config.json:
{
"name": "Electric Blue",
"is_dark": false,
"fonts": {
"faces": [
{
"font-family": "Inter",
"src": [{"url": "/fonts/Inter.ttf", "format": "ttf"}]
}
],
"general": "Inter, sans",
"monospace": "'Courier New'"
},
"colors": {
"accent-color": "#3596fc",
"primary-color": "#368bd6",
@@ -84,3 +94,5 @@ eg. in config.json:
`username-colors` is expected to contain 8 colors. `avatar-background-colors` is expected to contain 3 colors. Both values are optional and have fallbacks from the built-in theme.
These are exposed as `--username-colors_0`, ... and `--avatar-background-colors_0`, ... respectively in CSS.
All properties in `fonts` are optional, and will default to the standard Riot fonts.

View File

@@ -1,7 +1,7 @@
{
"name": "riot-web",
"productName": "Riot",
"version": "1.6.0",
"version": "1.6.8",
"description": "A feature-rich client for Matrix.org",
"author": "New Vector Ltd.",
"repository": {
@@ -58,11 +58,10 @@
},
"dependencies": {
"browser-request": "^0.3.3",
"favico.js": "^0.3.10",
"gfm.css": "^1.1.2",
"highlight.js": "^9.13.1",
"matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop",
"matrix-react-sdk": "github:matrix-org/matrix-react-sdk#develop",
"matrix-js-sdk": "7.1.0",
"matrix-react-sdk": "2.9.0",
"olm": "https://packages.matrix.org/npm/olm/olm-3.1.4.tgz",
"postcss-easings": "^2.0.0",
"prop-types": "^15.7.2",
@@ -89,7 +88,9 @@
"@babel/preset-typescript": "^7.7.4",
"@babel/register": "^7.7.4",
"@babel/runtime": "^7.7.6",
"@types/flux": "^3.1.9",
"@types/modernizr": "^3.5.3",
"@types/node": "^12.12.41",
"@types/react": "16.9",
"@types/react-dom": "^16.9.4",
"autoprefixer": "^9.7.3",

View File

@@ -45,6 +45,8 @@ do
fi
done
./node_modules/matrix-js-sdk/release.sh -u vector-im -z "$orig_args"
release="${1#v}"
tag="v${release}"
prerelease=0
@@ -54,16 +56,6 @@ prerelease=0
# with a hyphen is a prerelease.
echo $release | grep -q '-' && prerelease=1
# bump Electron's package.json first
echo "electron yarn version"
cd electron_app
yarn version --no-git-tag-version --new-version "$release"
git commit package.json -m "$tag"
cd ..
./node_modules/matrix-js-sdk/release.sh -u vector-im -z "$orig_args"
if [ $prerelease -eq 0 ]
then
# For a release, reset SDK deps back to the `develop` branch.

View File

@@ -4,8 +4,8 @@ class StartupError extends Error {}
* We need to know the bundle path before we can fetch the sourcemap files. In a production environment, we can guess
* it using this.
*/
async function getBundleName() {
const res = await fetch("../index.html");
async function getBundleName(baseUrl) {
const res = await fetch(new URL("index.html", baseUrl).toString());
if (!res.ok) {
throw new StartupError(`Couldn't fetch index.html to prefill bundle; ${res.status} ${res.statusText}`);
}
@@ -25,7 +25,7 @@ function validateBundle(value) {
* The purpose of this is just to validate that the user entered a real bundle, and provide feedback.
*/
const bundleCache = new Map();
function bundleSubject(bundle) {
function bundleSubject(baseUrl, bundle) {
if (!bundle.match(/^[0-9a-f]{20}$/)) throw new Error("Bad input");
if (bundleCache.has(bundle)) {
return bundleCache.get(bundle);
@@ -33,7 +33,7 @@ function bundleSubject(bundle) {
const fetcher = new rxjs.BehaviorSubject(Pending.of());
bundleCache.set(bundle, fetcher);
fetch(`/bundles/${bundle}/bundle.js.map`).then((res) => {
fetch(new URL(`bundles/${bundle}/bundle.js.map`, baseUrl).toString()).then((res) => {
res.body.cancel(); /* Bail on the download immediately - it could be big! */
const status = res.ok;
if (status) {
@@ -145,6 +145,7 @@ function ProgressBar({ fetchStatus }) {
* The main component.
*/
function BundlePicker() {
const [baseUrl, setBaseUrl] = React.useState(new URL("..", window.location).toString());
const [bundle, setBundle] = React.useState("");
const [file, setFile] = React.useState("");
const [line, setLine] = React.useState("1");
@@ -153,19 +154,25 @@ function BundlePicker() {
const [bundleFetchStatus, setBundleFetchStatus] = React.useState(None);
const [fileFetchStatus, setFileFetchStatus] = React.useState(None);
/* At startup, try to fill in the bundle name for the user */
/* On baseUrl change, try to fill in the bundle name for the user */
React.useEffect(() => {
getBundleName().then((name) => {
console.log("DEBUG", baseUrl);
getBundleName(baseUrl).then((name) => {
console.log("DEBUG", name);
if (bundle === "" && validateBundle(name) !== None) {
setBundle(name);
}
}, console.log.bind(console));
}, []);
}, [baseUrl]);
/* ------------------------- */
/* Follow user state changes */
/* ------------------------- */
const onBaseUrlChange = React.useCallback((event) => {
const value = event.target.value;
setBaseUrl(value);
}, []);
const onBundleChange = React.useCallback((event) => {
const value = event.target.value;
setBundle(value);
@@ -195,14 +202,14 @@ function BundlePicker() {
React.useEffect(() =>
validateBundle(bundle).fold({
some: (value) => {
const subscription = bundleSubject(value)
const subscription = bundleSubject(baseUrl, value)
.pipe(rxjs.operators.map(Some.of))
.subscribe(setBundleFetchStatus);
return () => subscription.unsubscribe();
},
none: () => setBundleFetchStatus(None),
}),
[bundle]);
[baseUrl, bundle]);
/* Whenever a valid javascript file is input, see if it corresponds to a sourcemap file and initiate a fetch
* if so. */
@@ -211,7 +218,7 @@ function BundlePicker() {
setFileFetchStatus(None);
return;
}
const observable = fetchAsSubject(`/bundles/${bundle}/${file}.map`)
const observable = fetchAsSubject(new URL(`bundles/${bundle}/${file}.map`, baseUrl).toString())
.pipe(
rxjs.operators.map((fetchStatus) => fetchStatus.flatMap(value => {
try {
@@ -224,7 +231,7 @@ function BundlePicker() {
);
const subscription = observable.subscribe(setFileFetchStatus);
return () => subscription.unsubscribe();
}, [bundle, file]);
}, [baseUrl, bundle, file]);
/*
* Whenever we have a valid fetched sourcemap, and a valid line, attempt to find the original position from the
@@ -255,6 +262,16 @@ function BundlePicker() {
/* ------ */
return e('div', {},
e('div', { className: 'inputs' },
e('div', { className: 'baseUrl' },
e('label', { htmlFor: 'baseUrl'}, 'Base URL'),
e('input', {
name: 'baseUrl',
required: true,
pattern: ".+",
onChange: onBaseUrlChange,
value: baseUrl,
}),
),
e('div', { className: 'bundle' },
e('label', { htmlFor: 'bundle'}, 'Bundle'),
e('input', {

View File

@@ -96,19 +96,10 @@ h1::after {
color: #2e2f32 !important;
}
.mx_ButtonHeadline {
margin-bottom: 14px;
}
.mx_ButtonLabel {
margin-left: 20px;
}
.mx_ButtonWrapperText {
font-size: 13px;
margin-bottom: 10px;
}
.mx_Header_title {
font-size: 24px;
font-weight: 600;
@@ -158,6 +149,23 @@ we don't have an account and should hide them. No account == no guest account ei
display: none;
}
.mx_ButtonRow.mx_WelcomePage_guestFunctions {
margin-top: 20px;
}
.mx_ButtonRow.mx_WelcomePage_guestFunctions > div {
margin: 0 auto;
}
@media only screen and (max-width: 480px) {
.mx_ButtonRow {
flex-direction: column;
}
.mx_ButtonRow > * {
margin: 0 0 10px 0;
}
}
</style>
<div class="mx_Parent">
@@ -182,15 +190,8 @@ we don't have an account and should hide them. No account == no guest account ei
<!-- BEGIN Ansible: Remove these lines when guest access is disabled -->
<div class="mx_ButtonRow mx_WelcomePage_guestFunctions">
<div>
<div class="mx_ButtonWrapperText">_t("Need help?")</div>
<a href="#/user/@riot-bot:matrix.org?action=chat" class="mx_ButtonParent mx_SecondaryButton mx_Button_iconHelp">
<div class="mx_ButtonLabel">_t("Chat with Riot Bot")</div>
</a>
</div>
<div>
<div class="mx_ButtonWrapperText">_t("Explore rooms")</div>
<a href="#/directory" class="mx_ButtonParent mx_SecondaryButton mx_Button_iconRoomDirectory">
<div class="mx_ButtonLabel">_t("Room Directory")</div>
<div class="mx_ButtonLabel">_t("Explore rooms")</div>
</a>
</div>
</div>

View File

@@ -10,7 +10,7 @@
"https://scalar-staging.vector.im/api",
"https://scalar-staging.riot.im/scalar/api"
],
"hosting_signup_link": "https://modular.im/?utm_source=riot-web&utm_medium=web",
"hosting_signup_link": "https://modular.im/services/matrix-hosting-riot?utm_source=riot-web&utm_medium=web",
"bug_report_endpoint_url": "https://riot.im/bugreports/submit",
"features": {
},

View File

@@ -10,9 +10,11 @@
"https://scalar-staging.vector.im/api",
"https://scalar-staging.riot.im/scalar/api"
],
"hosting_signup_link": "https://modular.im/?utm_source=riot-web&utm_medium=web",
"hosting_signup_link": "https://modular.im/services/matrix-hosting-riot?utm_source=riot-web&utm_medium=web",
"bug_report_endpoint_url": "https://riot.im/bugreports/submit",
"features": {
"feature_new_spinner": "labs",
"feature_font_scaling": "labs",
"feature_pinning": "labs",
"feature_custom_status": "labs",
"feature_custom_tags": "labs",
@@ -22,7 +24,9 @@
"feature_dm_verification": "labs",
"feature_bridge_state": "labs",
"feature_presence_in_room_list": "labs",
"feature_custom_themes": "labs"
"feature_custom_themes": "labs",
"feature_new_room_list": "labs",
"feature_irc_ui": "labs"
},
"piwik": {
"url": "https://piwik.riot.im/",

View File

@@ -1,170 +0,0 @@
#!/bin/bash
usage() {
echo "Usage: $0 -v <version> -d <config directory> [-n]"
echo
echo "version: commit-ish to check out and build"
echo "config directory: a path to a directory containing"
echo "config.json, a json config file to ship with the build"
echo "and env.sh, a file to source environment variables"
echo "from."
echo "-n: build with no config file."
echo
echo "The update_base_url value from config.json is used to set up auto-update."
echo
echo "Environment variables:"
echo " OSSLSIGNCODE_SIGNARGS: Arguments to pass to osslsigncode when signing"
echo " NOTARIZE_APPLE_ID: Apple ID to use for notarisation. The password for"
echo " this account must be set in NOTARIZE_CREDS in the keychain."
}
confdir=
version=
skipcfg=0
while getopts "d:v:n" opt; do
case $opt in
d)
confdir=$OPTARG
;;
v)
version=$OPTARG
;;
n)
skipcfg=1
;;
\?)
echo "Invalid option: -$OPTARG" >&2
usage
exit
;;
esac
done
if [ -z "$version" ]; then
echo "No version supplied"
usage
exit
fi
conffile="$confdir/config.json"
if [ -z "$conffile" ] && [ "$skipcfg" = 0 ]; then
echo "No config file given. Use -c to supply a config file or"
echo "-n to build with no config file (and no auto update)."
exit
fi
if [ -n "$conffile" ]; then
update_base_url=`jq -r .update_base_url $conffile`
if [ -z "$update_base_url" ]; then
echo "No update URL supplied. Use update_base_url: null if you really"
echo "want a build with no auto-update."
usage
exit
fi
# Make sure the base URL ends in a slash if it doesn't already
update_base_url=`echo $update_base_url | sed -e 's#\([^\/]\)$#\1\/#'`
fi
if [ ! -f package.json ]; then
echo "No package.json found. This script must be run from"
echo "the riot-web directory."
exit
fi
[ -f "$confdir/env.sh" ] && . "$confdir/env.sh"
if [ -z "$NOTARIZE_APPLE_ID" ]; then
echo "NOTARIZE_APPLE_ID is not set"
exit
fi
osslsigncode -h 2> /dev/null
if [ $? -ne 255 ]; then # osslsigncode exits with 255 after printing usage...
echo "osslsigncode not found"
exit
fi
# Test that altool can get its credentials for notarising the mac app
xcrun altool -u "$NOTARIZE_APPLE_ID" -p '@keychain:NOTARIZE_CREDS' --list-apps || exit
# Get the token password: we'll need it later, but get it now so we fail early if it's not there
token_password=`security find-generic-password -s riot_signing_token -w`
if [ $? -ne 0 ]; then
echo "riot_signing_token not found in keychain"
exit
fi
set -e
echo "Building $version using Update base URL $update_base_url"
projdir=`pwd`
builddir=`mktemp -d 2>/dev/null || mktemp -d -t 'buildtmp'`
pushd "$builddir"
git clone "$projdir" .
git checkout "$version"
# Figure out what version we're building
vername=`jq -r .version package.json`
if [ -n "$conffile" ]; then
popd
cp "$conffile" "$builddir/"
pushd "$builddir"
fi
# We use Git branch / commit dependencies for some packages, and Yarn seems
# to have a hard time getting that right. See also
# https://github.com/yarnpkg/yarn/issues/4734. As a workaround, we clean the
# global cache here to ensure we get the right thing.
yarn cache clean
yarn install
yarn build:electron
popd
distdir="$builddir/electron_app/dist"
pubdir="$projdir/electron_app/pub"
rm -r "$pubdir" || true
mkdir -p "$pubdir"
rm -r "$projdir/electron_app/dist" || true
mkdir -p "$projdir/electron_app/dist"
# Install packages: what the user downloads the first time,
# (DMGs for mac, exe installer for windows)
mkdir -p "$pubdir/install/macos"
cp $distdir/*.dmg "$pubdir/install/macos/"
mkdir -p "$pubdir/install/win32/ia32/"
cp $distdir/squirrel-windows-ia32/*.exe "$pubdir/install/win32/ia32/"
mkdir -p "$pubdir/install/win32/x64/"
cp $distdir/squirrel-windows/*.exe "$pubdir/install/win32/x64/"
# Packages for auto-update
mkdir -p "$pubdir/update/macos"
cp $distdir/*-mac.zip "$pubdir/update/macos/"
echo "$vername" > "$pubdir/update/macos/latest"
mkdir -p "$pubdir/update/win32/ia32/"
cp $distdir/squirrel-windows-ia32/*.nupkg "$pubdir/update/win32/ia32/"
cp $distdir/squirrel-windows-ia32/RELEASES "$pubdir/update/win32/ia32/"
mkdir -p "$pubdir/update/win32/x64/"
cp $distdir/squirrel-windows/*.nupkg "$pubdir/update/win32/x64/"
cp $distdir/squirrel-windows/RELEASES "$pubdir/update/win32/x64/"
# Move the deb to the main project dir's dist folder
# (just the 64 bit one - the 32 bit one still gets built because
# it's one arch argument for all platforms and we still want 32 bit
# windows, but 32 bit linux is unsupported as of electron 4 and no
# longer appears to work).
cp $distdir/*_amd64.deb "$projdir/electron_app/dist/"
rm -rf "$builddir"
echo "$pubdir can now be hosted on your web server."
echo "deb archives are in electron_app/dist/ - these should be added into your debian repository"

View File

@@ -1,30 +0,0 @@
const { notarize } = require('electron-notarize');
exports.default = async function(context) {
const { electronPlatformName, appOutDir } = context;
if (electronPlatformName === 'darwin') {
const appName = context.packager.appInfo.productFilename;
// We get the password from keychain. The keychain stores
// user IDs too, but apparently altool can't get the user ID
// from the keychain, so we need to get it from the environment.
const userId = process.env.NOTARIZE_APPLE_ID;
if (userId === undefined) {
console.warn(
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" +
"! Skipping macOS notarisation. !\n" +
"! User ID not found, set NOTARIZE_APPLE_ID. !\n" +
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",
);
return;
}
console.log("Notarising macOS app. This may be some time.");
return await notarize({
appBundleId: 'im.riot.app',
appPath: `${appOutDir}/${appName}.app`,
appleId: userId,
appleIdPassword: '@keychain:NOTARIZE_CREDS',
});
}
};

View File

@@ -1,77 +0,0 @@
const { exec, execFile } = require('child_process');
const fs = require('fs');
const path = require('path');
const shellescape = require('shell-escape');
exports.default = async function(options) {
const inPath = options.path;
const appOutDir = path.dirname(inPath);
// get the token passphrase from the keychain
let tokenPassphrase;
try {
tokenPassphrase = await new Promise((resolve, reject) => {
execFile(
'security',
['find-generic-password', '-s', 'riot_signing_token', '-w'],
{},
(err, stdout) => {
if (err) {
reject(err);
} else {
resolve(stdout.trim());
}
},
);
});
} catch (err) {
console.warn(
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" +
"! Skipping Windows signing. !\n" +
"! Signing token not found in keychain. !\n" +
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",
);
return;
}
return new Promise((resolve, reject) => {
let cmdLine = 'osslsigncode sign ';
if (process.env.OSSLSIGNCODE_SIGNARGS) {
cmdLine += process.env.OSSLSIGNCODE_SIGNARGS + ' ';
}
const tmpFile = path.join(
appOutDir,
'tmp_' + Math.random().toString(36).substring(2, 15) + '.exe',
);
const args = [
'-h', options.hash,
'-pass', tokenPassphrase,
'-in', inPath,
'-out', tmpFile,
];
if (options.isNest) args.push('-nest');
cmdLine += shellescape(args);
let signStdout;
const signproc = exec(cmdLine, {}, (error, stdout) => {
signStdout = stdout;
});
signproc.on('exit', (code) => {
if (code !== 0) {
console.log("Running", cmdLine);
console.log(signStdout);
console.error("osslsigncode failed with code " + code);
reject("osslsigncode failed with code " + code);
return;
}
fs.rename(tmpFile, inPath, (err) => {
if (err) {
console.error("Error renaming file", err);
reject(err);
} else {
resolve();
}
});
});
});
};

View File

@@ -24,5 +24,24 @@ declare global {
// electron-only
ipcRenderer: any;
// opera-only
opera: any;
// https://developer.mozilla.org/en-US/docs/Web/API/InstallTrigger
InstallTrigger: any;
}
interface Navigator {
// PWA badging extensions https://w3c.github.io/badging/
setAppBadge?(count: number): Promise<void>;
clearAppBadge?(): Promise<void>;
}
}
// add method which is missing from the node typing
declare module "url" {
interface Url {
format(): string;
}
}

255
src/favicon.ts Normal file
View File

@@ -0,0 +1,255 @@
/*
Copyright 2020 New Vector Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
interface IParams {
// colour parameters
bgColor: string;
textColor: string;
// font styling parameters
fontFamily: string;
fontWeight: "normal" | "italic" | "bold" | "bolder" | "lighter" | number;
// positioning parameters
isUp: boolean;
isLeft: boolean;
}
const defaults: IParams = {
bgColor: "#d00",
textColor: "#fff",
fontFamily: "sans-serif", // Arial,Verdana,Times New Roman,serif,sans-serif,...
fontWeight: "bold", // normal,italic,oblique,bold,bolder,lighter,100,200,300,400,500,600,700,800,900
isUp: false,
isLeft: false,
};
// Allows dynamic rendering of a circular badge atop the loaded favicon
// supports colour, font and basic positioning parameters.
// Based upon https://github.com/ejci/favico.js/blob/master/favico.js [MIT license]
export default class Favicon {
private readonly browser = {
ff: typeof window.InstallTrigger !== "undefined",
opera: !!window.opera || navigator.userAgent.includes("Opera"),
};
private readonly params: IParams;
private readonly canvas: HTMLCanvasElement;
private readonly baseImage: HTMLImageElement;
private context: CanvasRenderingContext2D;
private icons: HTMLLinkElement[];
private isReady: boolean = false;
// callback to run once isReady is asserted, allows for a badge to be queued for when it can be shown
private readyCb = () => {};
constructor(params: Partial<IParams> = {}) {
this.params = {...defaults, ...params};
this.icons = Favicon.getIcons();
// create work canvas
this.canvas = document.createElement("canvas");
// create clone of favicon as a base
this.baseImage = document.createElement("img");
const lastIcon = this.icons[this.icons.length - 1];
if (lastIcon.hasAttribute("href")) {
this.baseImage.setAttribute("crossOrigin", "anonymous");
this.baseImage.onload = () => {
// get height and width of the favicon
this.canvas.height = (this.baseImage.height > 0) ? this.baseImage.height : 32;
this.canvas.width = (this.baseImage.width > 0) ? this.baseImage.width : 32;
this.context = this.canvas.getContext("2d");
this.ready();
};
this.baseImage.setAttribute("src", lastIcon.getAttribute("href"));
} else {
this.canvas.height = this.baseImage.height = 32;
this.canvas.width = this.baseImage.width = 32;
this.context = this.canvas.getContext("2d");
this.ready();
}
}
private reset() {
this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
this.context.drawImage(this.baseImage, 0, 0, this.canvas.width, this.canvas.height);
}
private options(n: number | string, params: IParams) {
const opt = {
n: ((typeof n) === "number") ? Math.abs(n as number | 0) : n,
len: ("" + n).length,
// badge positioning constants as percentages
x: 0.4,
y: 0.4,
w: 0.6,
h: 0.6,
};
// apply positional transformations
if (params.isUp) {
if (opt.y < 0.6) {
opt.y = opt.y - 0.4;
} else {
opt.y = opt.y - 2 * opt.y + (1 - opt.w);
}
}
if (params.isLeft) {
if (opt.x < 0.6) {
opt.x = opt.x - 0.4;
} else {
opt.x = opt.x - 2 * opt.x + (1 - opt.h);
}
}
// scale the position to the canvas
opt.x = this.canvas.width * opt.x;
opt.y = this.canvas.height * opt.y;
opt.w = this.canvas.width * opt.w;
opt.h = this.canvas.height * opt.h;
return opt;
}
private circle(n: number | string, opts?: Partial<IParams>) {
const params = {...this.params, ...opts};
const opt = this.options(n, params);
let more = false;
if (opt.len === 2) {
opt.x = opt.x - opt.w * 0.4;
opt.w = opt.w * 1.4;
more = true;
} else if (opt.len >= 3) {
opt.x = opt.x - opt.w * 0.65;
opt.w = opt.w * 1.65;
more = true;
}
this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
this.context.drawImage(this.baseImage, 0, 0, this.canvas.width, this.canvas.height);
this.context.beginPath();
const fontSize = Math.floor(opt.h * (opt.n > 99 ? 0.85 : 1)) + "px";
this.context.font = `${params.fontWeight} ${fontSize} ${params.fontFamily}`;
this.context.textAlign = "center";
if (more) {
this.context.moveTo(opt.x + opt.w / 2, opt.y);
this.context.lineTo(opt.x + opt.w - opt.h / 2, opt.y);
this.context.quadraticCurveTo(opt.x + opt.w, opt.y, opt.x + opt.w, opt.y + opt.h / 2);
this.context.lineTo(opt.x + opt.w, opt.y + opt.h - opt.h / 2);
this.context.quadraticCurveTo(opt.x + opt.w, opt.y + opt.h, opt.x + opt.w - opt.h / 2, opt.y + opt.h);
this.context.lineTo(opt.x + opt.h / 2, opt.y + opt.h);
this.context.quadraticCurveTo(opt.x, opt.y + opt.h, opt.x, opt.y + opt.h - opt.h / 2);
this.context.lineTo(opt.x, opt.y + opt.h / 2);
this.context.quadraticCurveTo(opt.x, opt.y, opt.x + opt.h / 2, opt.y);
} else {
this.context.arc(opt.x + opt.w / 2, opt.y + opt.h / 2, opt.h / 2, 0, 2 * Math.PI);
}
this.context.fillStyle = params.bgColor;
this.context.fill();
this.context.closePath();
this.context.beginPath();
this.context.stroke();
this.context.fillStyle = params.textColor;
if ((typeof opt.n) === "number" && opt.n > 999) {
const count = ((opt.n > 9999) ? 9 : Math.floor(opt.n as number / 1000)) + "k+";
this.context.fillText(count, Math.floor(opt.x + opt.w / 2), Math.floor(opt.y + opt.h - opt.h * 0.2));
} else {
this.context.fillText("" + opt.n, Math.floor(opt.x + opt.w / 2), Math.floor(opt.y + opt.h - opt.h * 0.15));
}
this.context.closePath();
}
private ready() {
if (this.isReady) return;
this.isReady = true;
this.readyCb();
}
private setIcon(canvas) {
setImmediate(() => {
this.setIconSrc(canvas.toDataURL("image/png"));
});
}
private setIconSrc(url) {
// if is attached to fav icon
if (this.browser.ff || this.browser.opera) {
// for FF we need to "recreate" element, attach to dom and remove old <link>
const old = this.icons[this.icons.length - 1];
const newIcon = window.document.createElement("link");
this.icons = [newIcon];
newIcon.setAttribute("rel", "icon");
newIcon.setAttribute("type", "image/png");
window.document.getElementsByTagName("head")[0].appendChild(newIcon);
newIcon.setAttribute("href", url);
if (old.parentNode) {
old.parentNode.removeChild(old);
}
} else {
this.icons.forEach(icon => {
icon.setAttribute("href", url);
});
}
}
public badge(content: number | string, opts?: Partial<IParams>) {
if (!this.isReady) {
this.readyCb = () => {
this.badge(content, opts);
}
return;
}
if (typeof content === "string" || content > 0) {
this.circle(content, opts);
} else {
this.reset();
}
this.setIcon(this.canvas);
}
private static getLinks() {
const icons: HTMLLinkElement[] = [];
const links = window.document.getElementsByTagName("head")[0].getElementsByTagName("link");
for (let i = 0; i < links.length; i++) {
if ((/(^|\s)icon(\s|$)/i).test(links[i].getAttribute("rel"))) {
icons.push(links[i]);
}
}
return icons;
}
private static getIcons() {
// get favicon link elements
let elms = Favicon.getLinks();
if (elms.length === 0) {
elms = [window.document.createElement("link")];
elms[0].setAttribute("rel", "icon");
window.document.getElementsByTagName("head")[0].appendChild(elms[0]);
}
elms.forEach(item => {
item.setAttribute("type", "image/png");
});
return elms;
}
}

View File

@@ -8,6 +8,9 @@
"Invalid JSON": "Invalid JSON",
"Unable to load config file: please refresh the page to try again.": "Unable to load config file: please refresh the page to try again.",
"Unexpected error preparing the app. See console for details.": "Unexpected error preparing the app. See console for details.",
"Download Completed": "Download Completed",
"Open": "Open",
"Dismiss": "Dismiss",
"Open user settings": "Open user settings",
"Previous/next recently visited room or community": "Previous/next recently visited room or community",
"Riot Desktop (%(platformName)s)": "Riot Desktop (%(platformName)s)",
@@ -18,7 +21,6 @@
"powered by Matrix": "powered by Matrix",
"Custom Server Options": "Custom Server Options",
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.",
"Dismiss": "Dismiss",
"Unsupported browser": "Unsupported browser",
"Your browser can't run Riot": "Your browser can't run Riot",
"Riot uses advanced browser features which aren't supported by your current browser.": "Riot uses advanced browser features which aren't supported by your current browser.",
@@ -31,8 +33,5 @@
"Decentralised, encrypted chat &amp; collaboration powered by [matrix]": "Decentralised, encrypted chat &amp; collaboration powered by [matrix]",
"Sign In": "Sign In",
"Create Account": "Create Account",
"Need help?": "Need help?",
"Chat with Riot Bot": "Chat with Riot Bot",
"Explore rooms": "Explore rooms",
"Room Directory": "Room Directory"
"Explore rooms": "Explore rooms"
}

View File

@@ -9,14 +9,14 @@
"Welcome to Riot.im": "Bienvenido a Riot.im",
"Decentralised, encrypted chat &amp; collaboration powered by [matrix]": "Conversaciones cifradas y descentralizadas y colaboración con el poder de [matrix]",
"Chat with Riot Bot": "Hablar con Riot Bot",
"Sign In": "Registrarse",
"Sign In": "Iniciar sesión",
"Create Account": "Crear cuenta",
"Need help?": "Necesitas ayuda?",
"Explore rooms": "Explorar salas",
"Room Directory": "Directorio de salas",
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Puedes usar las opciones personalizadas del servidor para iniciar sesión en otros servidores Matrix, especificando la dirección URL del servidor. Esto te permite usar una cuenta Matrix en un servidor diferente.",
"Unexpected error preparing the app. See console for details.": "Error inesperado preparando la aplicación. Vea la consola para más detalles.",
"Your Riot is misconfigured": "Riot tiene un error de configuración",
"Your Riot is misconfigured": "Tu Riot tiene un error de configuración",
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuración errónea: sólo puede especificar uno de default_server_config, default_server_name, o default_hs_url.",
"Invalid configuration: no default server specified.": "Configuración errónea: no se ha especificado servidor.",
"Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Tu configuración de Riot contiene JSON inválido. Por favor corrige el error y recarga la página.",

View File

@@ -2,7 +2,7 @@
"Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Sinu Rioti seadetes on vigane JSON. Palun, tee see korda ja laadi leht uuesti.",
"The message from the parser is: %(message)s": "Sõnum parserist on: %(message)s",
"Invalid JSON": "Vigane JSON",
"Your Riot is misconfigured": "Sinu Riot on valesti seadistatud",
"Your Riot is misconfigured": "Sinu Riot'i seadistused on paigast ära",
"Unknown device": "Tundmatu seade",
"Invalid configuration: no default server specified.": "Vigane seadistus: vaikimisi server on määramata.",
"Unable to load config file: please refresh the page to try again.": "Seadistuste faili laadimine ei õnnestunud: uuesti proovimiseks palun lae leht uuesti.",

View File

@@ -26,5 +26,15 @@
"Open user settings": "Ireki erabiltzailearen ezarpenak",
"Missing indexeddb worker script!": "indexeddb langile scripta falta da!",
"Unable to load config file: please refresh the page to try again.": "Ezin izan da konfigurazio fitxategia kargatu: Saiatu orria birkargatzen.",
"Previous/next recently visited room or community": "Berriki bisitatutako aurreko/hurrengo gela edo komunitatea"
"Previous/next recently visited room or community": "Berriki bisitatutako aurreko/hurrengo gela edo komunitatea",
"Riot Desktop (%(platformName)s)": "Riot Desktop (%(platformName)s)",
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
"Unsupported browser": "Onartu gabeko nabigatzailea",
"Your browser can't run Riot": "Zure nabigatzaileak ezin du Riot abiatu",
"Riot uses advanced browser features which aren't supported by your current browser.": "Riotek zure oraingo nabigatzailean erabilgarri ez dauden ezaugarri aurreratuak erabiltzen ditu .",
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Instalatu <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, edo <safariLink>Safari</safariLink> esperientzia hobe baterako.",
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Zure oraingo nabigatzailea erabiltzen jarraitu dezakezu, baina ezaugarri batzuk agian ez dute funtzionatuko eta itxura desegokia izan daiteke.",
"I understand the risks and wish to continue": "Arriskuak ulertzen ditut eta jarraitu nahi dut",
"Go to Riot.im": "Joan Riot.im gunera",
"Failed to start": "Huts egin du abiatzean"
}

View File

@@ -1,7 +1,7 @@
{
"Dismiss": "Hylkää",
"Unknown device": "Tuntematon laite",
"Welcome to Riot.im": "Tervetuloa Riot.im-palveluun",
"Welcome to Riot.im": "Tervetuloa Riot.im-sovellukseen",
"Custom Server Options": "Palvelinasetukset",
"Riot Desktop on %(platformName)s": "Riot Desktop, %(platformName)s",
"You need to be using HTTPS to place a screen-sharing call.": "Sinun täytyy käyttää HTTPS-yhteyttä, jotta voit jakaa ruudun puhelussa.",
@@ -22,5 +22,18 @@
"Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Riot-asetuksissasi on virheellistä JSONia. Korjaa ongelma ja lataa sivu uudelleen.",
"The message from the parser is: %(message)s": "Viesti jäsentimeltä: %(message)s",
"Invalid JSON": "Virheellinen JSON",
"Missing indexeddb worker script!": "Indexeddb-suorittajan skripti puuttuu!"
"Missing indexeddb worker script!": "Indexeddb-suorittajan skripti puuttuu!",
"Unable to load config file: please refresh the page to try again.": "Asetustiedostoa ei voi ladata. Yritä uudelleen lataamalla sivu uudelleen.",
"Open user settings": "Avaa käyttäjäasetukset",
"Previous/next recently visited room or community": "Edellinen/seuraava hiljattain vierailtu huone tai yhteisö",
"Riot Desktop (%(platformName)s)": "Riot Desktop (%(platformName)s)",
"Go to your browser to complete Sign In": "Tee kirjautuminen loppuun selaimessasi",
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
"Unsupported browser": "Selainta ei tueta",
"Your browser can't run Riot": "Riot ei toimi selaimellasi",
"Riot uses advanced browser features which aren't supported by your current browser.": "Riot käyttää edistyneitä selaimen ominaisuuksia, joita nykyinen selaimesi ei tue.",
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Asenna <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink> tai <safariLink>Safari</safariLink>, jotta kaikki toimii parhaiten.",
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Voit käyttää edelleen nykyistä selaintasi, mutta jotkut tai kaikki ominaisuudet eivät ehkä toimi ja sovelluksen ulkoasu voi olla virheellinen.",
"I understand the risks and wish to continue": "Ymmärrän riskit ja haluan jatkaa",
"Failed to start": "Käynnistys ei onnistunut"
}

View File

@@ -36,5 +36,7 @@
"I understand the risks and wish to continue": "Je comprends les risques et souhaite continuer",
"Go to Riot.im": "Aller vers Riot.im",
"Failed to start": "Échec au démarrage",
"Riot Desktop (%(platformName)s)": "Riot pour bureau (%(platformName)s)"
"Riot Desktop (%(platformName)s)": "Riot pour bureau (%(platformName)s)",
"Download Completed": "Téléchargement terminé",
"Open": "Ouvrir"
}

View File

@@ -10,7 +10,7 @@
"Decentralised, encrypted chat &amp; collaboration powered by [matrix]": "Conversas e colaboración descentralizada e cifrada grazas a [matrix]",
"Chat with Riot Bot": "Conversa co bot de Riot",
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Podes usar as opcións de servidor personalizado para iniciar sesión en outros servidores Matrix especificando unha dirección diferente de servidor doméstico. Con esto podes usar Riot cunha conta Matrix existente noutro servidor doméstico.",
"Sign In": "Entrar",
"Sign In": "Conectar",
"Create Account": "Crear conta",
"Need help?": "¿Precisas axuda?",
"Explore rooms": "Explorar salas",
@@ -18,8 +18,25 @@
"Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "A configuración de Riot contén JSON non válido. Corrixe o problema e recarga a páxina.",
"The message from the parser is: %(message)s": "A mensaxe desde o intérprete é: %(message)s",
"Invalid JSON": "JSON non válido",
"Your Riot is misconfigured": "Riot está mal configurado",
"Your Riot is misconfigured": "O teu Riot está mal configurado",
"Unexpected error preparing the app. See console for details.": "Fallo non agardado ao preparar a app. Detalles na consola.",
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuración non válida: só se pode indicar un de default_server_config, default_server_name, ou default_hs_url.",
"Invalid configuration: no default server specified.": "Configuración non válida: non se indicou servidor por omisión."
"Invalid configuration: no default server specified.": "Configuración non válida: non se indicou servidor por omisión.",
"Missing indexeddb worker script!": "Falta o script indexeddb!",
"Unable to load config file: please refresh the page to try again.": "Non se cargou o ficheiro de configuración: actualiza a páxina para reintentalo.",
"Open user settings": "Abrir axustes da usuaria",
"Previous/next recently visited room or community": "Anterior/seguinte sala ou comunidade recentes",
"Riot Desktop (%(platformName)s)": "Riot Desktop (%(platformName)s)",
"Go to your browser to complete Sign In": "Abre o navegador para realizar a Conexión",
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
"Unsupported browser": "Navegador non soportado",
"Your browser can't run Riot": "O teu navegador non pode executar Riot",
"Riot uses advanced browser features which aren't supported by your current browser.": "Riot utiliza funcións avanzadas dos navegadores que o teu actual non soporta.",
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Instala <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, ou <safariLink>Safari</safariLink> para ter unha mellor experiencia.",
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Podes continuar co teu navegador, pero algunhas características poderían non funcionar e o aspecto da aplicación podería non ser o correcto.",
"I understand the risks and wish to continue": "Entendo os riscos e desexo continuar",
"Go to Riot.im": "Ir a Riot.im",
"Failed to start": "Fallou o inicio",
"Download Completed": "Descarga realizada",
"Open": "Abrir"
}

View File

@@ -36,5 +36,7 @@
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Folytathatod a jelenlegi böngésződdel, de néhány vagy az összes funkció használhatatlan lehet, vagy hibák lehetnek az alkalmazás kinézetében és viselkedésében.",
"I understand the risks and wish to continue": "Megértettem a kockázatot és folytatom",
"Go to Riot.im": "Irány a Riot.im",
"Failed to start": "Az indítás sikertelen"
"Failed to start": "Az indítás sikertelen",
"Download Completed": "A letöltés befejeződött",
"Open": "Megnyitás"
}

View File

@@ -21,5 +21,10 @@
"The message from the parser is: %(message)s": "パーザーのメッセージ: %(message)s",
"Invalid JSON": "妥当でないJSON",
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "無効な設定: default_server_config、default_server_name、または default_hs_urlのいずれか一つのみが指定できます。",
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "サーバーのカスタムオプションに別のホームサーバーURLを指定することで他のMatrixサーバーにサインインすることができます。これにより別のホームサーバー上で既にあるMatrixのアカウントでRiotを使うことができます。"
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "サーバーのカスタムオプションに別のホームサーバーURLを指定することで他のMatrixサーバーにサインインすることができます。これにより別のホームサーバー上で既にあるMatrixのアカウントでRiotを使うことができます。",
"Your browser can't run Riot": "このブラウザでは Riot を実行できません",
"Riot uses advanced browser features which aren't supported by your current browser.": "Riot ではこのブラウザでサポートされていない高度な機能を利用しています。",
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "最高のユーザー体験を得るためには、<chromeLink>Chrome</chromeLink>や<firefoxLink>Firefox</firefoxLink>、もしくは<safariLink>Safari</safariLink>をインストールしてください。",
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "現在のブラウザを使い続けることもできますが、いくつか (もしくは全ての) 機能が動作しない可能性や、外観が崩れる可能性があります。",
"I understand the risks and wish to continue": "リスクを理解したうえで続行する"
}

View File

@@ -1 +1,35 @@
{}
{
"Invalid JSON": "JSON armeɣtu",
"Open user settings": "Ldi iɣewwaṛen n useqdac",
"Riot Desktop (%(platformName)s)": "Riot n tnarit (%(platformName)s)",
"Go to your browser to complete Sign In": "Ddu ɣer iminig akken ad tkemleḍ ajerred",
"Unknown device": "Ibenk arussin",
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
"Create Account": "Rnu amiḍan",
"powered by Matrix": "s lmendad n Matrix",
"Custom Server Options": "Iɣewwaren n uqeddac udmawan",
"Dismiss": "Agwi",
"Sign In": "Kcem",
"Explore rooms": "Snirem tixxamin",
"Missing indexeddb worker script!": "Asekript n uxeddam Indexeddb ulac-it!",
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Tawila d tarmeɣtut: mudd-d kan yiwen seg default_server_config, default_server_name, neɣ default_hs_url.",
"Invalid configuration: no default server specified.": "Tawila d tarmeɣtut: ulac aqeddac amezwer i d-yettwafernen.",
"Your Riot is misconfigured": "Riot inek(inem) ur ittusbadu ara",
"Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Tawila-inek n Riot yesεa JSON armeɣtu. Ma ulac aɣilif, seɣti ugur syen smiren asebter.",
"The message from the parser is: %(message)s": "Izen n umaslaḍ d: %(message)s",
"Unable to load config file: please refresh the page to try again.": "Yegguma ad d-yali ufaylu n twila: ma ulac aɣilif smiren asebter akken ad tεerḍeḍ tikkelt-nniḍen.",
"Unexpected error preparing the app. See console for details.": "Tella-d tuccḍa lawan n uheyyi n usnas: Wali tadiwent i wugar telqeyt.",
"Previous/next recently visited room or community": "Taxxamt neɣ tamɣiwent wuɣur kecmen imerza send/seld",
"You need to be using HTTPS to place a screen-sharing call.": "Ilaq-ak(am) ad tesqedceḍ HTTPs akken ad tesεeddiḍ asiwel s beṭṭu n ugdil.",
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Tzemreḍ ad tesqedceḍ tixtiṛiyin n uqeddac udmawan akken ad teqqneḍ ɣer iqeddacen-nniḍenn Matrix s ufran n URL n uqeddac agejdan-nniḍen. Ayagi ad ak-yeǧǧ ad tesqedceḍ Riot s umiḍan Matrix yellan ɣef uqeddac agejdan-nniḍen.",
"Unsupported browser": "Ur yettusefrak ara yiminig",
"Your browser can't run Riot": "Iminig-ik(im) ur isedday ara Riot",
"Riot uses advanced browser features which aren't supported by your current browser.": "Riot isseqdac timahilin n yiminig leqqayen ur nettusefrak ara d yiminig-ik(im) amiran.",
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Ma ulac aɣilif, sebded <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, neɣ<safariLink>Safari</safariLink> i tirmit igerrzen.",
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Tzemreḍ ad tkemmleḍ deg useqdec n yiminig-ik(im) amiran, maca kra n tmahilin neɣ akk zemrent ur nteddu ara, rnu arwes n usnas yezmer ad d-iban d armeɣtu.",
"I understand the risks and wish to continue": "Gziɣ ayen ara d-yeḍrun maca bɣiɣ ad kemmleɣ",
"Go to Riot.im": "Ṛuḥ ɣer Riot.im",
"Failed to start": "Asenker ur yeddi ara",
"Welcome to Riot.im": "Ansuf ɣer Riot.im",
"Decentralised, encrypted chat &amp; collaboration powered by [matrix]": "Adiwenni &amp; attekki araslemmas d uwgelhan s lmendad n [matrix]"
}

View File

@@ -21,5 +21,19 @@
"Create Account": "계정 만들기",
"Need help?": "도움이 필요합니까?",
"Explore rooms": "방 검색",
"Room Directory": "방 목록"
"Room Directory": "방 목록",
"Unable to load config file: please refresh the page to try again.": "설정 파일을 불러오는 데 실패: 페이지를 새로고침한 후에 다시 시도해 주십시오.",
"Open user settings": "사용자 설정 열기",
"Previous/next recently visited room or community": "최근에 방문한 이전/다음 방 또는 커뮤니티",
"Riot Desktop (%(platformName)s)": "Riot 데스크탑 (%(platformName)s)",
"Go to your browser to complete Sign In": "로그인을 완료하려면 브라우저로 이동해주세요",
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
"Unsupported browser": "지원되지 않는 브라우저",
"Your browser can't run Riot": "사용중이신 브라우저는 Riot을 실행할 수 없습니다",
"Riot uses advanced browser features which aren't supported by your current browser.": "Riot은 현재 사용중이신 브라우저에서는 지원하지 않는 고급 브라우저 기능을 사용합니다.",
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "최상의 경험을 위해 <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, 또는 <safariLink>Safari</safariLink>를 설치해주세요.",
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "현재 사용중이신 브라우저를 계속 사용하셔도 됩니다, 다만 일부 기능들이 작동하지 않을 수 있으며 애플리케이션이 잘못돼 보일 수 있습니다.",
"I understand the risks and wish to continue": "위험하다는 것을 이해했으며 계속하고 싶습니다",
"Go to Riot.im": "Riot.im으로 가기",
"Failed to start": "시작 실패"
}

View File

@@ -10,7 +10,7 @@
"Dismiss": "Atmesti",
"Decentralised, encrypted chat &amp; collaboration powered by [matrix]": "Decentralizuoti, šifruoti pokalbiai ir bendradarbiavimas, veikiantis su [matrix]",
"Sign In": "Prisijungti",
"Create Account": "Sukurti paskyrą",
"Create Account": "Sukurti Paskyrą",
"Need help?": "Reikia pagalbos?",
"Explore rooms": "Žvalgyti kambarius",
"Room Directory": "Kambarių katalogas",
@@ -21,7 +21,20 @@
"Unexpected error preparing the app. See console for details.": "Netikėta klaida ruošiant programą. Norėdami sužinoti daugiau detalių, žiūrėkite konsolę.",
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Klaidinga konfigūracija: galima nurodyti tik vieną iš default_server_config, default_server_name, arba default_hs_url.",
"Invalid configuration: no default server specified.": "Klaidinga konfigūracija: nenurodytas numatytasis serveris.",
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Jūs galite naudoti pasirinktinius serverio nustatymus, kad prisijungtumėte prie kitų Matrix serverių, nurodydami kito serverio URL. Tai leidžia jums naudotis Riot su esama Matrix paskyra kitame serveryje.",
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Jūs galite naudoti pasirinktinius serverio nustatymus, kad prisijungtumėte prie kitų Matrix serverių, nurodydami kito serverio URL. Tai leidžia jums naudotis Riot su kitame serveryje esančia Matrix paskyra.",
"Go to your browser to complete Sign In": "Norėdami užbaigti prisijungimą, eikite į naršyklę",
"Open user settings": "Atverti vartotojo nustatymus"
"Open user settings": "Atverti vartotojo nustatymus",
"Missing indexeddb worker script!": "Trūksta indexeddb worker skripto!",
"Unable to load config file: please refresh the page to try again.": "Nepavyko įkelti konfigūracijos failo: iš naujo užkraukite puslapį ir bandykite dar kartą.",
"Previous/next recently visited room or community": "Ankstesnis/sekantis neseniai lankytas kambarys ar bendruomenė",
"Riot Desktop (%(platformName)s)": "Riot Kompiuteriui (%(platformName)s)",
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
"Unsupported browser": "Nepalaikoma naršyklė",
"Your browser can't run Riot": "Jūsų naršyklė negali paleisti Riot",
"Riot uses advanced browser features which aren't supported by your current browser.": "Riot naudoja išplėstines funkcijas, kurių jūsų dabartinė naršyklė nepalaiko.",
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Riot geriausiai veikia su <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, arba <safariLink>Safari</safariLink> naršyklėmis.",
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Jūs galite toliau naudotis savo dabartine naršykle, bet kai kurios arba visos funkcijos gali neveikti ir programos išvaizda bei sąsaja gali būti neteisingai rodoma.",
"I understand the risks and wish to continue": "Suprantu šią riziką ir noriu tęsti",
"Go to Riot.im": "Eiti į Riot.im",
"Failed to start": "Nepavyko paleisti"
}

View File

@@ -21,5 +21,16 @@
"Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Jūsu Riot konfigurācijā ir nederīgs JSON. Lūdzu, izlabojiet problēmu un ielādējiet lapu atkārtoti.",
"The message from the parser is: %(message)s": "Ziņojums no parsētāja ir: %(message)s",
"Invalid JSON": "Nederīgs JSON",
"Your Riot is misconfigured": "Jūsu Riot ir nepareizi konfigurēts"
"Your Riot is misconfigured": "Jūsu Riot ir nepareizi konfigurēts",
"Unable to load config file: please refresh the page to try again.": "Neizdevās ielādēt config datni: lūdzu pārlādē lapu lai mēģinātu vēlreiz.",
"Open user settings": "Atver lietotāja iestatījumus",
"Go to your browser to complete Sign In": "Aizej uz savu pārlūku lai pabeigtu Piekļuvi",
"Unsupported browser": "Neatbalstīts pārlūks",
"Your browser can't run Riot": "Tavs pārlūks nevar palaist Riot",
"Riot uses advanced browser features which aren't supported by your current browser.": "",
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Lūdzu instalē <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, vai <safariLink>Safari</safariLink> priekš labākās pieredzes.",
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Tu vari turpināt izmantot savu pašreizējo pārlūku, bet dažas vai visas funkcijas nestrādās, un lietotnes izskats var būt nepareizs.",
"I understand the risks and wish to continue": "Es pieņemu riskus un vēlos turpināt",
"Go to Riot.im": "Ej uz Riot.im",
"Failed to start": "Neizdevās palaist"
}

View File

@@ -17,8 +17,8 @@
"Room Directory": "Gesprekscatalogus",
"Unexpected error preparing the app. See console for details.": "Er is een onverwachte fout opgetreden bij het voorbereiden van de app. Zie de console voor details.",
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuratiefout: kan slechts één van default_server_config, default_server_name, of default_hs_url opgeven.",
"Invalid configuration: no default server specified.": "Configuratiefout: geen standaardserver opgegeven.",
"Your Riot is misconfigured": "Uw Riot is onjuist geconfigureerd",
"Invalid configuration: no default server specified.": "Configuratie ongeldig: geen standaardserver opgegeven.",
"Your Riot is misconfigured": "Uw Riot is verkeerd geconfigureerd",
"Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Uw Riot-configuratie bevat ongeldige JSON. Corrigeer het probleem en herlaad de pagina.",
"The message from the parser is: %(message)s": "De ontleder meldt: %(message)s",
"Invalid JSON": "Ongeldige JSON",

View File

@@ -15,11 +15,11 @@
"Need help?": "Treng du hjelp?",
"Explore rooms": "Utforsk romma",
"Room Directory": "Romkatalog",
"Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Riot-konfigurasjonen din har ugyldig JSON-kode. Korriger dette og last inn sida på nytt.",
"Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Riot-oppsettet ditt inneheld ugyldig JSON-kode. Korriger dette og last inn sida på nytt.",
"The message from the parser is: %(message)s": "Meldinga frå kodetolkaren er: %(message)s",
"Invalid JSON": "Ugyldig JSON",
"Your Riot is misconfigured": "Riot-klienten din er feilkonfiguert",
"Your Riot is misconfigured": "Riot-klienten din er sett opp feil",
"Unexpected error preparing the app. See console for details.": "Uventa feil under lasting av programmet. Sjå konsollen for detaljar.",
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ugyldig konfigurasjon: berre muleg å berre spesifiere ein av default_server_config, default_server_name eller default_hs_url.",
"Invalid configuration: no default server specified.": "Ugyldig konfigurasjon: \"default server\" er ikkje spesifisert."
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ugyldig oppsett: berre muleg å berre spesifiere ein av default_server_config, default_server_name eller default_hs_url.",
"Invalid configuration: no default server specified.": "Ugyldig oppsett: ingen \"default server\" er spesifisert."
}

View File

@@ -14,5 +14,16 @@
"Create Account": "Înregistare",
"Need help?": "Ai nevoie de ajutor?",
"Explore rooms": "Explorează camerele",
"Room Directory": "Lista de camere"
"Room Directory": "Lista de camere",
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuratie invalida: se poate specifica doar una dintre default_server_config, default_server_name, or default_hs_url.",
"Your Riot is misconfigured": "Aplicatia ta Riot e gresit configurata",
"Invalid JSON": "JSON invalid",
"Riot Desktop (%(platformName)s)": "Riot Desktop (%(platformName)s)",
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
"Unsupported browser": "Acest browser nu este suportat",
"Your browser can't run Riot": "Browserul tau nu poate rula Riot",
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Instalati va rog <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> pentru o experienta mai buna.",
"I understand the risks and wish to continue": "Inteleg riscul si doresc sa continui",
"Go to Riot.im": "Acceseaza Riot.im",
"Failed to start": "Nu reuseste sa porneasca"
}

View File

@@ -26,5 +26,15 @@
"Unable to load config file: please refresh the page to try again.": "Nemožno načítať konfiguračný súbor: prosím, obnovte stránku a skúste to znova.",
"Open user settings": "Otvoriť používateľské nastavenia",
"Previous/next recently visited room or community": "Predchádzajúca/ďalšia nedávno navštívená miestnosť alebo komunita",
"Go to your browser to complete Sign In": "Prejdite do prehliadača a dokončite prihlásenie"
"Go to your browser to complete Sign In": "Prejdite do prehliadača a dokončite prihlásenie",
"Riot Desktop (%(platformName)s)": "Riot Desktop (%(platformName)s)",
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
"Unsupported browser": "Nepodporovaný prehliadač",
"Your browser can't run Riot": "Váš prehliadač nerozbehne Riot",
"Riot uses advanced browser features which aren't supported by your current browser.": "Riot používa komplexnejšie funkcie prehliadača, ktoré nie sú podporované vo vašom prehliadači.",
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Prosím, nainštalujte si <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink> alebo <safariLink>Safari</safariLink> pre najlepší zážitok.",
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Môžete naďalej používať váš súčasný prehliadač, ale niektoré alebo všetky funkcie nemusia fungovať a zážitok z aplikácie nemusí byť optimálny.",
"I understand the risks and wish to continue": "Rozumiem riziku a chcem pokračovať",
"Go to Riot.im": "Prejsť na Riot.im",
"Failed to start": "Zapnutie zlyhalo"
}

View File

@@ -35,5 +35,8 @@
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Mund të vazhdoni të përdorni shfletuesin tuaj të tanishëm, por disa ose krejt veçoritë mund të mos funksionojnë dhe pamja dhe ndjesitë prej aplikacionit të mos jenë të sakta.",
"I understand the risks and wish to continue": "I kuptoj rreziqet dhe dëshiroj të vazhdoj",
"Go to Riot.im": "Shko te Riot.im",
"Failed to start": "Su arrit të nisej"
"Failed to start": "Su arrit të nisej",
"Missing indexeddb worker script!": "Mungon programth worker-i indexeddb-je!",
"Download Completed": "Shkarkim i Plotësuar",
"Open": "Hape"
}

View File

@@ -15,7 +15,7 @@
"Need help?": "Behöver du hjälp?",
"Explore rooms": "Utforska rum",
"Room Directory": "Rumslista",
"Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Dina Riot-inställningar innhåller ogiltig JSON. Vänligen uppdatera inställningarna och ladda om sidan.",
"Your Riot configuration contains invalid JSON. Please correct the problem and reload the page.": "Dina Riot-inställningar innehåller ogiltig JSON. Vänligen uppdatera inställningarna och ladda om sidan.",
"The message from the parser is: %(message)s": "Medelandet från parsern är: %(message)s",
"Invalid JSON": "Ogiltig JSON",
"Your Riot is misconfigured": "Riot är felkonfigurerat",
@@ -23,5 +23,18 @@
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ogilitiga inställningar: enbart möjligt att specificera en default_config, default_server, eller default_hs_url.",
"Invalid configuration: no default server specified.": "Ogilitiga inställningar: ingen standardserver specificerad.",
"Open user settings": "Öppna användarinställningar",
"Go to your browser to complete Sign In": "Gå till din webbläsare för att slutföra inloggningen"
"Go to your browser to complete Sign In": "Gå till din webbläsare för att slutföra inloggningen",
"Missing indexeddb worker script!": "Saknar indexeddb worker skript!",
"Unable to load config file: please refresh the page to try again.": "Kan inte ladda konfigurationsfilen: var god ladda om sidan för att försöka igen.",
"Previous/next recently visited room or community": "Föregående/nästa nyligen besökt rum eller community",
"Riot Desktop (%(platformName)s)": "Riot Desktop (%(platformName)s)",
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
"Unsupported browser": "Webbläsaren stöds ej",
"Your browser can't run Riot": "Din webbläsare kan inte köra Riot",
"Riot uses advanced browser features which aren't supported by your current browser.": "Riot användare avancerade webbläsarfunktioner som inte stöds av din nuvarande webbläsare.",
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Installera <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, eller <safariLink>Safari</safariLink> för den bästa upplevelsen.",
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Du kan fortsätta använda din nuvarande webbläsare, men vissa eller alla funktioner kanske inte fungerar och uteseendet samt känslan av applikationen kan var felaktig.",
"I understand the risks and wish to continue": "Jag förstår riskerna och vill fortsätta",
"Go to Riot.im": "Gå till Riot.im",
"Failed to start": "Misslyckade att starta"
}

View File

@@ -21,5 +21,20 @@
"Your Riot is misconfigured": "您的 Riot 配置有错误",
"Unexpected error preparing the app. See console for details.": "软件准备时出错,详细信息请查看控制台。",
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "无效的配置:只能设置 default_server_configdefault_server_name或 default_hs_url 中的一个。",
"Invalid configuration: no default server specified.": "无效的配置:没有设置默认服务器。"
"Invalid configuration: no default server specified.": "无效的配置:没有设置默认服务器。",
"Missing indexeddb worker script!": "缺少 IndexedDB 辅助脚本!",
"Unable to load config file: please refresh the page to try again.": "无法加载配置文件:请再次刷新页面。",
"Open user settings": "打开用户设置",
"Previous/next recently visited room or community": "上一个 / 下一个最近访问的聊天室或社区",
"Riot Desktop (%(platformName)s)": "Riot 桌面版 (%(platformName)s)",
"Go to your browser to complete Sign In": "去您的浏览器完成登录",
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
"Unsupported browser": "不支持的浏览器",
"Your browser can't run Riot": "您的浏览器无法运行 Riot",
"Riot uses advanced browser features which aren't supported by your current browser.": "Riot 使用了不被您目前的浏览器支持的高级功能。",
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "请安装 <chromeLink>Chrome</chromeLink>、<firefoxLink>Firefox</firefoxLink> 或 <safariLink>Safari</safariLink> 以获得最佳体验。",
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "您可以继续使用您目前的浏览器,但部分或全部的功能可能无法正常工作,应用程序的外观可能也看起来不正确。",
"I understand the risks and wish to continue": "我了解风险并希望继续",
"Go to Riot.im": "去 Riot.im",
"Failed to start": "启动失败"
}

View File

@@ -36,5 +36,7 @@
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "您可以繼續使用您目前的瀏覽器,但部份或全部的功能可能會無法運作,而應用程式的外觀與感覺可能也會不正確。",
"I understand the risks and wish to continue": "我了解風險並希望繼續",
"Go to Riot.im": "到 Riot.im",
"Failed to start": "啟動失敗"
"Failed to start": "啟動失敗",
"Download Completed": "下載完成",
"Open": "開啟"
}

View File

@@ -15,6 +15,7 @@
<link rel="manifest" href="manifest.json">
<meta name="referrer" content="no-referrer">
<link rel="shortcut icon" href="<%= require('../../res/vector-icons/favicon.ico') %>">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="apple-mobile-web-app-title" content="Riot">
<meta name="application-name" content="Riot">
<meta name="msapplication-TileColor" content="#da532c">
@@ -51,7 +52,7 @@
</head>
<body style="height: 100%; margin: 0;" data-vector-indexeddb-worker-script="<%= htmlWebpackPlugin.files.chunks['indexeddb-worker'].entry %>">
<noscript>Sorry, Riot requires JavaScript to be enabled.</noscript> <!-- TODO: Translate this? -->
<section id="matrixchat" style="height: 100%; overflow: auto;"></section>
<section id="matrixchat" style="height: 100%; overflow: auto;" class="notranslate"></section>
<script src="<%= htmlWebpackPlugin.files.chunks['bundle'].entry %>"></script>
<!-- Legacy supporting Prefetch images -->

View File

@@ -26,6 +26,7 @@ import * as React from "react";
import * as languageHandler from "matrix-react-sdk/src/languageHandler";
import SettingsStore from "matrix-react-sdk/src/settings/SettingsStore";
import ElectronPlatform from "./platform/ElectronPlatform";
import PWAPlatform from "./platform/PWAPlatform";
import WebPlatform from "./platform/WebPlatform";
import PlatformPeg from "matrix-react-sdk/src/PlatformPeg";
import SdkConfig from "matrix-react-sdk/src/SdkConfig";
@@ -39,8 +40,10 @@ export const rageshakePromise = initRageshake();
export function preparePlatform() {
if (window.ipcRenderer) {
console.log("Using Electron platform");
const plaf = new ElectronPlatform();
PlatformPeg.set(plaf);
PlatformPeg.set(new ElectronPlatform());
} else if (window.matchMedia('(display-mode: standalone)').matches) {
console.log("Using PWA platform");
PlatformPeg.set(new PWAPlatform());
} else {
console.log("Using Web platform");
PlatformPeg.set(new WebPlatform());

File diff suppressed because one or more lines are too long

View File

@@ -1,5 +1,3 @@
// @flow
/*
Copyright 2016 Aviral Dasgupta
Copyright 2016 OpenMarket Ltd
@@ -20,12 +18,22 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import VectorBasePlatform, {updateCheckStatusEnum} from './VectorBasePlatform';
import BaseEventIndexManager from 'matrix-react-sdk/src/indexing/BaseEventIndexManager';
import dis from 'matrix-react-sdk/src/dispatcher';
import { _t, _td } from 'matrix-react-sdk/src/languageHandler';
import VectorBasePlatform from './VectorBasePlatform';
import {UpdateCheckStatus} from "matrix-react-sdk/src/BasePlatform";
import BaseEventIndexManager, {
CrawlerCheckpoint,
EventAndProfile,
IndexStats,
MatrixEvent,
MatrixProfile,
SearchArgs,
SearchResult
} from 'matrix-react-sdk/src/indexing/BaseEventIndexManager';
import dis from 'matrix-react-sdk/src/dispatcher/dispatcher';
import {_t, _td} from 'matrix-react-sdk/src/languageHandler';
import * as rageshake from 'matrix-react-sdk/src/rageshake/rageshake';
import {MatrixClient} from "matrix-js-sdk";
import {MatrixClient} from "matrix-js-sdk/src/client";
import {Room} from "matrix-js-sdk/src/models/room";
import Modal from "matrix-react-sdk/src/Modal";
import InfoDialog from "matrix-react-sdk/src/components/views/dialogs/InfoDialog";
import Spinner from "matrix-react-sdk/src/components/views/elements/Spinner";
@@ -33,6 +41,12 @@ import {Categories, Modifiers, registerShortcut} from "matrix-react-sdk/src/acce
import {Key} from "matrix-react-sdk/src/Keyboard";
import React from "react";
import {randomString} from "matrix-js-sdk/src/randomstring";
import {Action} from "matrix-react-sdk/src/dispatcher/actions";
import {ActionPayload} from "matrix-react-sdk/src/dispatcher/payloads";
import {showToast as showUpdateToast} from "matrix-react-sdk/src/toasts/UpdateToast";
import {CheckUpdatesPayload} from "matrix-react-sdk/src/dispatcher/payloads/CheckUpdatesPayload";
import ToastStore from "matrix-react-sdk/src/stores/ToastStore";
import GenericExpiringToast from "matrix-react-sdk/src/components/views/toasts/GenericExpiringToast";
const ipcRenderer = window.ipcRenderer;
const isMac = navigator.platform.toUpperCase().includes('MAC');
@@ -56,73 +70,80 @@ function platformFriendlyName(): string {
}
}
function _onAction(payload: Object) {
function _onAction(payload: ActionPayload) {
// Whitelist payload actions, no point sending most across
if (['call_state'].includes(payload.action)) {
ipcRenderer.send('app_onAction', payload);
}
}
function getUpdateCheckStatus(status) {
function getUpdateCheckStatus(status: boolean | string) {
if (status === true) {
return { status: updateCheckStatusEnum.DOWNLOADING };
return { status: UpdateCheckStatus.Downloading };
} else if (status === false) {
return { status: updateCheckStatusEnum.NOTAVAILABLE };
return { status: UpdateCheckStatus.NotAvailable };
} else {
return {
status: updateCheckStatusEnum.ERROR,
status: UpdateCheckStatus.Error,
detail: status,
};
}
}
interface IPCPayload {
id?: number;
error?: string;
reply?: any;
}
class SeshatIndexManager extends BaseEventIndexManager {
private pendingIpcCalls: Record<number, { resolve, reject }> = {};
private nextIpcCallId: number = 0;
constructor() {
super();
this._pendingIpcCalls = {};
this._nextIpcCallId = 0;
ipcRenderer.on('seshatReply', this._onIpcReply.bind(this));
ipcRenderer.on('seshatReply', this._onIpcReply);
}
async _ipcCall(name: string, ...args: []): Promise<{}> {
async _ipcCall(name: string, ...args: any[]): Promise<any> {
// TODO this should be moved into the preload.js file.
const ipcCallId = ++this._nextIpcCallId;
const ipcCallId = ++this.nextIpcCallId;
return new Promise((resolve, reject) => {
this._pendingIpcCalls[ipcCallId] = {resolve, reject};
this.pendingIpcCalls[ipcCallId] = {resolve, reject};
window.ipcRenderer.send('seshat', {id: ipcCallId, name, args});
});
}
_onIpcReply(ev: {}, payload: {}) {
_onIpcReply = (ev: {}, payload: IPCPayload) => {
if (payload.id === undefined) {
console.warn("Ignoring IPC reply with no ID");
return;
}
if (this._pendingIpcCalls[payload.id] === undefined) {
if (this.pendingIpcCalls[payload.id] === undefined) {
console.warn("Unknown IPC payload ID: " + payload.id);
return;
}
const callbacks = this._pendingIpcCalls[payload.id];
delete this._pendingIpcCalls[payload.id];
const callbacks = this.pendingIpcCalls[payload.id];
delete this.pendingIpcCalls[payload.id];
if (payload.error) {
callbacks.reject(payload.error);
} else {
callbacks.resolve(payload.reply);
}
}
};
async supportsEventIndexing(): Promise<boolean> {
return this._ipcCall('supportsEventIndexing');
}
async initEventIndex(): Promise<> {
async initEventIndex(): Promise<void> {
return this._ipcCall('initEventIndex');
}
async addEventToIndex(ev: MatrixEvent, profile: MatrixProfile): Promise<> {
async addEventToIndex(ev: MatrixEvent, profile: MatrixProfile): Promise<void> {
return this._ipcCall('addEventToIndex', ev, profile);
}
@@ -134,27 +155,31 @@ class SeshatIndexManager extends BaseEventIndexManager {
return this._ipcCall('isEventIndexEmpty');
}
async commitLiveEvents(): Promise<> {
async isRoomIndexed(roomId: string): Promise<boolean> {
return this._ipcCall('isRoomIndexed', roomId);
}
async commitLiveEvents(): Promise<void> {
return this._ipcCall('commitLiveEvents');
}
async searchEventIndex(searchConfig: SearchConfig): Promise<SearchResult> {
async searchEventIndex(searchConfig: SearchArgs): Promise<SearchResult> {
return this._ipcCall('searchEventIndex', searchConfig);
}
async addHistoricEvents(
events: [HistoricEvent],
events: [EventAndProfile],
checkpoint: CrawlerCheckpoint | null,
oldCheckpoint: CrawlerCheckpoint | null,
): Promise<> {
): Promise<boolean> {
return this._ipcCall('addHistoricEvents', events, checkpoint, oldCheckpoint);
}
async addCrawlerCheckpoint(checkpoint: CrawlerCheckpoint): Promise<> {
async addCrawlerCheckpoint(checkpoint: CrawlerCheckpoint): Promise<void> {
return this._ipcCall('addCrawlerCheckpoint', checkpoint);
}
async removeCrawlerCheckpoint(checkpoint: CrawlerCheckpoint): Promise<> {
async removeCrawlerCheckpoint(checkpoint: CrawlerCheckpoint): Promise<void> {
return this._ipcCall('removeCrawlerCheckpoint', checkpoint);
}
@@ -166,27 +191,37 @@ class SeshatIndexManager extends BaseEventIndexManager {
return this._ipcCall('loadCheckpoints');
}
async closeEventIndex(): Promise<> {
async closeEventIndex(): Promise<void> {
return this._ipcCall('closeEventIndex');
}
async getStats(): Promise<> {
async getStats(): Promise<IndexStats> {
return this._ipcCall('getStats');
}
async deleteEventIndex(): Promise<> {
async getUserVersion(): Promise<number> {
return this._ipcCall('getUserVersion');
}
async setUserVersion(version: number): Promise<void> {
return this._ipcCall('setUserVersion', version);
}
async deleteEventIndex(): Promise<void> {
return this._ipcCall('deleteEventIndex');
}
}
export default class ElectronPlatform extends VectorBasePlatform {
private eventIndexManager: BaseEventIndexManager = new SeshatIndexManager();
private pendingIpcCalls: Record<number, { resolve, reject }> = {};
private nextIpcCallId: number = 0;
// this is the opaque token we pass to the HS which when we get it in our callback we can resolve to a profile
private ssoID: string = randomString(32);
constructor() {
super();
this._pendingIpcCalls = {};
this._nextIpcCallId = 0;
this.eventIndexManager = new SeshatIndexManager();
dis.register(_onAction);
/*
IPC Call `check_updates` returns:
@@ -195,12 +230,10 @@ export default class ElectronPlatform extends VectorBasePlatform {
or the error if one is encountered
*/
ipcRenderer.on('check_updates', (event, status) => {
if (!this.showUpdateCheck) return;
dis.dispatch({
action: 'check_updates',
value: getUpdateCheckStatus(status),
dis.dispatch<CheckUpdatesPayload>({
action: Action.CheckUpdates,
...getUpdateCheckStatus(status),
});
this.showUpdateCheck = false;
});
// try to flush the rageshake logs to indexeddb before quit.
@@ -209,15 +242,32 @@ export default class ElectronPlatform extends VectorBasePlatform {
rageshake.flush();
});
ipcRenderer.on('ipcReply', this._onIpcReply.bind(this));
ipcRenderer.on('update-downloaded', this.onUpdateDownloaded.bind(this));
ipcRenderer.on('ipcReply', this._onIpcReply);
ipcRenderer.on('update-downloaded', this.onUpdateDownloaded);
ipcRenderer.on('preferences', () => {
dis.dispatch({ action: 'view_user_settings' });
dis.fire(Action.ViewUserSettings);
});
this.startUpdateCheck = this.startUpdateCheck.bind(this);
this.stopUpdateCheck = this.stopUpdateCheck.bind(this);
ipcRenderer.on('userDownloadCompleted', (ev, {path, name}) => {
const onAccept = () => {
ipcRenderer.send('userDownloadOpen', {path});
};
ToastStore.sharedInstance().addOrReplaceToast({
key: `DOWNLOAD_TOAST_${path}`,
title: _t("Download Completed"),
props: {
description: name,
acceptLabel: _t("Open"),
onAccept,
dismissLabel: _t("Dismiss"),
numSeconds: 10,
},
component: GenericExpiringToast,
priority: 99,
});
});
// register OS-specific shortcuts
if (isMac) {
@@ -252,8 +302,6 @@ export default class ElectronPlatform extends VectorBasePlatform {
});
}
// this is the opaque token we pass to the HS which when we get it in our callback we can resolve to a profile
this.ssoID = randomString(32);
this._ipcCall("startSSOFlow", this.ssoID);
}
@@ -261,14 +309,15 @@ export default class ElectronPlatform extends VectorBasePlatform {
return this._ipcCall('getConfig');
}
async onUpdateDownloaded(ev, updateInfo) {
dis.dispatch({
action: 'new_version',
currentVersion: await this.getAppVersion(),
newVersion: updateInfo,
releaseNotes: updateInfo.releaseNotes,
onUpdateDownloaded = async (ev, {releaseNotes, releaseName}) => {
dis.dispatch<CheckUpdatesPayload>({
action: Action.CheckUpdates,
status: UpdateCheckStatus.Ready,
});
}
if (this.shouldShowUpdate(releaseName)) {
showUpdateToast(await this.getAppVersion(), releaseName, releaseNotes);
}
};
getHumanReadableName(): string {
return 'Electron Platform'; // no translation required: only used for analytics
@@ -289,7 +338,7 @@ export default class ElectronPlatform extends VectorBasePlatform {
return true;
}
displayNotification(title: string, msg: string, avatarUrl: string, room: Object): Notification {
displayNotification(title: string, msg: string, avatarUrl: string, room: Room): Notification {
// GNOME notification spec parses HTML tags for styling...
// Electron Docs state all supported linux notification systems follow this markup spec
// https://github.com/electron/electron/blob/master/docs/tutorial/desktop-environment-integration.md#linux
@@ -306,14 +355,14 @@ export default class ElectronPlatform extends VectorBasePlatform {
silent: true, // we play our own sounds
};
if (avatarUrl) notifBody['icon'] = avatarUrl;
const notification = new global.Notification(title, notifBody);
const notification = new window.Notification(title, notifBody);
notification.onclick = () => {
dis.dispatch({
action: 'view_room',
room_id: room.roomId,
});
global.focus();
window.focus();
this._ipcCall('focusWindow');
};
@@ -336,11 +385,11 @@ export default class ElectronPlatform extends VectorBasePlatform {
return true;
}
async getAutoLaunchEnabled(): boolean {
async getAutoLaunchEnabled(): Promise<boolean> {
return this._ipcCall('getAutoLaunchEnabled');
}
async setAutoLaunchEnabled(enabled: boolean): void {
async setAutoLaunchEnabled(enabled: boolean): Promise<void> {
return this._ipcCall('setAutoLaunchEnabled', enabled);
}
@@ -349,11 +398,11 @@ export default class ElectronPlatform extends VectorBasePlatform {
return !isMac;
}
async getAutoHideMenuBarEnabled(): boolean {
async getAutoHideMenuBarEnabled(): Promise<boolean> {
return this._ipcCall('getAutoHideMenuBarEnabled');
}
async setAutoHideMenuBarEnabled(enabled: boolean): void {
async setAutoHideMenuBarEnabled(enabled: boolean): Promise<void> {
return this._ipcCall('setAutoHideMenuBarEnabled', enabled);
}
@@ -362,23 +411,21 @@ export default class ElectronPlatform extends VectorBasePlatform {
return !isMac;
}
async getMinimizeToTrayEnabled(): boolean {
async getMinimizeToTrayEnabled(): Promise<boolean> {
return this._ipcCall('getMinimizeToTrayEnabled');
}
async setMinimizeToTrayEnabled(enabled: boolean): void {
async setMinimizeToTrayEnabled(enabled: boolean): Promise<void> {
return this._ipcCall('setMinimizeToTrayEnabled', enabled);
}
async canSelfUpdate(): boolean {
async canSelfUpdate(): Promise<boolean> {
const feedUrl = await this._ipcCall('getUpdateFeedUrl');
return Boolean(feedUrl);
}
startUpdateCheck() {
if (this.showUpdateCheck) return;
super.startUpdateCheck();
ipcRenderer.send('check_updates');
}
@@ -393,7 +440,7 @@ export default class ElectronPlatform extends VectorBasePlatform {
return _t('Riot Desktop (%(platformName)s)', { platformName: platformFriendlyName() });
}
screenCaptureErrorString(): ?string {
screenCaptureErrorString(): string | null {
return null;
}
@@ -408,34 +455,34 @@ export default class ElectronPlatform extends VectorBasePlatform {
window.location.reload(false);
}
async _ipcCall(name, ...args) {
const ipcCallId = ++this._nextIpcCallId;
async _ipcCall(name: string, ...args: any[]): Promise<any> {
const ipcCallId = ++this.nextIpcCallId;
return new Promise((resolve, reject) => {
this._pendingIpcCalls[ipcCallId] = {resolve, reject};
this.pendingIpcCalls[ipcCallId] = {resolve, reject};
window.ipcRenderer.send('ipcCall', {id: ipcCallId, name, args});
// Maybe add a timeout to these? Probably not necessary.
});
}
_onIpcReply(ev, payload) {
_onIpcReply = (ev, payload) => {
if (payload.id === undefined) {
console.warn("Ignoring IPC reply with no ID");
return;
}
if (this._pendingIpcCalls[payload.id] === undefined) {
if (this.pendingIpcCalls[payload.id] === undefined) {
console.warn("Unknown IPC payload ID: " + payload.id);
return;
}
const callbacks = this._pendingIpcCalls[payload.id];
delete this._pendingIpcCalls[payload.id];
const callbacks = this.pendingIpcCalls[payload.id];
delete this.pendingIpcCalls[payload.id];
if (payload.error) {
callbacks.reject(payload.error);
} else {
callbacks.resolve(payload.reply);
}
}
};
getEventIndexingManager(): BaseEventIndexManager | null {
return this.eventIndexManager;
@@ -448,15 +495,16 @@ export default class ElectronPlatform extends VectorBasePlatform {
});
}
getSSOCallbackUrl(hsUrl: string, isUrl: string): URL {
const url = super.getSSOCallbackUrl(hsUrl, isUrl);
getSSOCallbackUrl(fragmentAfterLogin: string): URL {
const url = super.getSSOCallbackUrl(fragmentAfterLogin);
url.protocol = "riot";
url.searchParams.set("riot-desktop-ssoid", this.ssoID);
return url;
}
startSingleSignOn(mxClient: MatrixClient, loginType: "sso" | "cas") {
super.startSingleSignOn(mxClient, loginType); // this will get intercepted by electron-main will-navigate
startSingleSignOn(mxClient: MatrixClient, loginType: "sso" | "cas", fragmentAfterLogin: string) {
// this will get intercepted by electron-main will-navigate
super.startSingleSignOn(mxClient, loginType, fragmentAfterLogin);
Modal.createTrackedDialog('Electron', 'SSO', InfoDialog, {
title: _t("Go to your browser to complete Sign In"),
description: <Spinner />,
@@ -490,4 +538,30 @@ export default class ElectronPlatform extends VectorBasePlatform {
return handled;
}
async getPickleKey(userId: string, deviceId: string): Promise<string | null> {
try {
return await this._ipcCall('getPickleKey', userId, deviceId);
} catch (e) {
// if we can't connect to the password storage, assume there's no
// pickle key
return null;
}
}
async createPickleKey(userId: string, deviceId: string): Promise<string | null> {
try {
return await this._ipcCall('createPickleKey', userId, deviceId);
} catch (e) {
// if we can't connect to the password storage, assume there's no
// pickle key
return null;
}
}
async destroyPickleKey(userId: string, deviceId: string): Promise<void> {
try {
await this._ipcCall('destroyPickleKey', userId, deviceId);
} catch (e) {}
}
}

View File

@@ -0,0 +1,29 @@
/*
Copyright 2020 New Vector Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import WebPlatform from "./WebPlatform";
export default class PWAPlatform extends WebPlatform {
setNotificationCount(count: number) {
if (!navigator.setAppBadge) return super.setNotificationCount(count);
if (this.notificationCount === count) return;
this.notificationCount = count;
navigator.setAppBadge(count).catch(e => {
console.error("Failed to update PWA app badge", e);
});
}
}

View File

@@ -1,176 +0,0 @@
// @flow
/*
Copyright 2016 Aviral Dasgupta
Copyright 2016 OpenMarket Ltd
Copyright 2018 New Vector Ltd
Copyright 2019 Michael Telatynski <7t3chguy@gmail.com>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import BasePlatform from 'matrix-react-sdk/src/BasePlatform';
import { _t } from 'matrix-react-sdk/src/languageHandler';
import dis from 'matrix-react-sdk/src/dispatcher';
import {getVectorConfig} from "../getconfig";
import Favico from 'favico.js';
export const updateCheckStatusEnum = {
CHECKING: 'CHECKING',
ERROR: 'ERROR',
NOTAVAILABLE: 'NOTAVAILABLE',
DOWNLOADING: 'DOWNLOADING',
READY: 'READY',
};
/**
* Vector-specific extensions to the BasePlatform template
*/
export default class VectorBasePlatform extends BasePlatform {
constructor() {
super();
this.showUpdateCheck = false;
this.startUpdateCheck = this.startUpdateCheck.bind(this);
this.stopUpdateCheck = this.stopUpdateCheck.bind(this);
}
async getConfig(): Promise<{}> {
return getVectorConfig();
}
getHumanReadableName(): string {
return 'Vector Base Platform'; // no translation required: only used for analytics
}
/**
* Delay creating the `Favico` instance until first use (on the first notification) as
* it uses canvas, which can trigger a permission prompt in Firefox's resist
* fingerprinting mode.
* See https://github.com/vector-im/riot-web/issues/9605.
*/
get favicon() {
if (this._favicon) {
return this._favicon;
}
// The 'animations' are really low framerate and look terrible.
// Also it re-starts the animation every time you set the badge,
// and we set the state each time, even if the value hasn't changed,
// so we'd need to fix that if enabling the animation.
this._favicon = new Favico({ animation: 'none' });
return this._favicon;
}
_updateFavicon() {
try {
// This needs to be in in a try block as it will throw
// if there are more than 100 badge count changes in
// its internal queue
let bgColor = "#d00";
let notif = this.notificationCount;
if (this.errorDidOccur) {
notif = notif || "×";
bgColor = "#f00";
}
const doUpdate = () => {
this.favicon.badge(notif, {
bgColor: bgColor,
});
};
doUpdate();
// HACK: Workaround for Chrome 78+ and dependency incompatibility.
// The library we use doesn't appear to work in Chrome 78, likely due to their
// changes surrounding tab behaviour. Tabs went through a bit of a redesign and
// restructuring in Chrome 78, so it's not terribly surprising that the library
// doesn't work correctly. The library we use hasn't been updated in years and
// does not look easy to fix/fork ourselves - we might as well write our own that
// doesn't include animation/webcam/etc support. However, that's a bit difficult
// so for now we'll just trigger the update twice.
//
// Note that trying to reproduce the problem in isolation doesn't seem to work:
// see https://gist.github.com/turt2live/5ab87919918adbfd7cfb8f1ad10f2409 for
// an example (you'll need your own web server to host that).
if (window.chrome) {
doUpdate();
}
} catch (e) {
console.warn(`Failed to set badge count: ${e.message}`);
}
}
setNotificationCount(count: number) {
if (this.notificationCount === count) return;
super.setNotificationCount(count);
this._updateFavicon();
}
setErrorStatus(errorDidOccur: boolean) {
if (this.errorDidOccur === errorDidOccur) return;
super.setErrorStatus(errorDidOccur);
this._updateFavicon();
}
/**
* Begin update polling, if applicable
*/
startUpdater() {
}
/**
* Whether we can call checkForUpdate on this platform build
*/
async canSelfUpdate(): boolean {
return false;
}
startUpdateCheck() {
this.showUpdateCheck = true;
dis.dispatch({
action: 'check_updates',
value: { status: updateCheckStatusEnum.CHECKING },
});
}
stopUpdateCheck() {
this.showUpdateCheck = false;
dis.dispatch({
action: 'check_updates',
value: false,
});
}
getUpdateCheckStatusEnum() {
return updateCheckStatusEnum;
}
/**
* Update the currently running app to the latest available
* version and replace this instance of the app with the
* new version.
*/
installUpdate() {
}
/**
* Get a sensible default display name for the
* device Vector is running on
*/
getDefaultDeviceDisplayName(): string {
return _t("Unknown device");
}
}

View File

@@ -0,0 +1,97 @@
/*
Copyright 2016 Aviral Dasgupta
Copyright 2016 OpenMarket Ltd
Copyright 2018, 2020 New Vector Ltd
Copyright 2019 Michael Telatynski <7t3chguy@gmail.com>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import BasePlatform from 'matrix-react-sdk/src/BasePlatform';
import {_t} from 'matrix-react-sdk/src/languageHandler';
import {getVectorConfig} from "../getconfig";
import Favicon from "../../favicon";
export const updateCheckStatusEnum = {
CHECKING: 'CHECKING',
ERROR: 'ERROR',
NOTAVAILABLE: 'NOTAVAILABLE',
DOWNLOADING: 'DOWNLOADING',
READY: 'READY',
};
/**
* Vector-specific extensions to the BasePlatform template
*/
export default abstract class VectorBasePlatform extends BasePlatform {
protected _favicon: Favicon;
async getConfig(): Promise<{}> {
return getVectorConfig();
}
getHumanReadableName(): string {
return 'Vector Base Platform'; // no translation required: only used for analytics
}
/**
* Delay creating the `Favicon` instance until first use (on the first notification) as
* it uses canvas, which can trigger a permission prompt in Firefox's resist fingerprinting mode.
* See https://github.com/vector-im/riot-web/issues/9605.
*/
get favicon() {
if (this._favicon) {
return this._favicon;
}
return this._favicon = new Favicon();
}
_updateFavicon() {
let bgColor = "#d00";
let notif: string | number = this.notificationCount;
if (this.errorDidOccur) {
notif = notif || "×";
bgColor = "#f00";
}
this.favicon.badge(notif, { bgColor });
}
setNotificationCount(count: number) {
if (this.notificationCount === count) return;
super.setNotificationCount(count);
this._updateFavicon();
}
setErrorStatus(errorDidOccur: boolean) {
if (this.errorDidOccur === errorDidOccur) return;
super.setErrorStatus(errorDidOccur);
this._updateFavicon();
}
/**
* Begin update polling, if applicable
*/
startUpdater() {
}
/**
* Get a sensible default display name for the
* device Vector is running on
*/
getDefaultDeviceDisplayName(): string {
return _t("Unknown device");
}
}

View File

@@ -1,5 +1,3 @@
// @flow
/*
Copyright 2016 Aviral Dasgupta
Copyright 2016 OpenMarket Ltd
@@ -18,10 +16,15 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import VectorBasePlatform, {updateCheckStatusEnum} from './VectorBasePlatform';
import VectorBasePlatform from './VectorBasePlatform';
import {UpdateCheckStatus} from "matrix-react-sdk/src/BasePlatform";
import request from 'browser-request';
import dis from 'matrix-react-sdk/src/dispatcher';
import { _t } from 'matrix-react-sdk/src/languageHandler';
import dis from 'matrix-react-sdk/src/dispatcher/dispatcher';
import {_t} from 'matrix-react-sdk/src/languageHandler';
import {Room} from "matrix-js-sdk/src/models/room";
import {hideToast as hideUpdateToast, showToast as showUpdateToast} from "matrix-react-sdk/src/toasts/UpdateToast";
import {Action} from "matrix-react-sdk/src/dispatcher/actions";
import { CheckUpdatesPayload } from 'matrix-react-sdk/src/dispatcher/payloads/CheckUpdatesPayload';
import url from 'url';
import UAParser from 'ua-parser-js';
@@ -29,13 +32,7 @@ import UAParser from 'ua-parser-js';
const POKE_RATE_MS = 10 * 60 * 1000; // 10 min
export default class WebPlatform extends VectorBasePlatform {
constructor() {
super();
this.runningVersion = null;
this.startUpdateCheck = this.startUpdateCheck.bind(this);
this.stopUpdateCheck = this.stopUpdateCheck.bind(this);
}
private runningVersion: string = null;
getHumanReadableName(): string {
return 'Web Platform'; // no translation required: only used for analytics
@@ -46,7 +43,7 @@ export default class WebPlatform extends VectorBasePlatform {
* notifications, otherwise false.
*/
supportsNotifications(): boolean {
return Boolean(global.Notification);
return Boolean(window.Notification);
}
/**
@@ -54,7 +51,7 @@ export default class WebPlatform extends VectorBasePlatform {
* to display notifications. Otherwise false.
*/
maySendNotifications(): boolean {
return global.Notification.permission === 'granted';
return window.Notification.permission === 'granted';
}
/**
@@ -69,27 +66,27 @@ export default class WebPlatform extends VectorBasePlatform {
// promise, but this is only supported in Chrome 46
// and Firefox 47, so adapt the callback API.
return new Promise(function(resolve, reject) {
global.Notification.requestPermission((result) => {
window.Notification.requestPermission((result) => {
resolve(result);
});
});
}
displayNotification(title: string, msg: string, avatarUrl: string, room: Object) {
displayNotification(title: string, msg: string, avatarUrl: string, room: Room) {
const notifBody = {
body: msg,
tag: "vector",
silent: true, // we play our own sounds
};
if (avatarUrl) notifBody['icon'] = avatarUrl;
const notification = new global.Notification(title, notifBody);
const notification = new window.Notification(title, notifBody);
notification.onclick = function() {
dis.dispatch({
action: 'view_room',
room_id: room.roomId,
});
global.focus();
window.focus();
notification.close();
};
}
@@ -131,45 +128,42 @@ export default class WebPlatform extends VectorBasePlatform {
startUpdater() {
this.pollForUpdate();
setInterval(this.pollForUpdate.bind(this), POKE_RATE_MS);
setInterval(this.pollForUpdate, POKE_RATE_MS);
}
async canSelfUpdate(): boolean {
async canSelfUpdate(): Promise<boolean> {
return true;
}
pollForUpdate() {
pollForUpdate = () => {
return this._getVersion().then((ver) => {
if (this.runningVersion === null) {
this.runningVersion = ver;
} else if (this.runningVersion !== ver) {
dis.dispatch({
action: 'new_version',
currentVersion: this.runningVersion,
newVersion: ver,
});
// Return to skip a MatrixChat state update
return;
if (this.shouldShowUpdate(ver)) {
showUpdateToast(this.runningVersion, ver);
}
return { status: UpdateCheckStatus.Ready };
} else {
hideUpdateToast();
}
return { status: updateCheckStatusEnum.NOTAVAILABLE };
return { status: UpdateCheckStatus.NotAvailable };
}, (err) => {
console.error("Failed to poll for update", err);
return {
status: updateCheckStatusEnum.ERROR,
status: UpdateCheckStatus.Error,
detail: err.message || err.status ? err.status.toString() : 'Unknown Error',
};
});
}
};
startUpdateCheck() {
if (this.showUpdateCheck) return;
super.startUpdateCheck();
this.pollForUpdate().then((updateState) => {
if (!this.showUpdateCheck) return;
if (!updateState) return;
dis.dispatch({
action: 'check_updates',
value: updateState,
dis.dispatch<CheckUpdatesPayload>({
action: Action.CheckUpdates,
...updateState,
});
});
}
@@ -204,9 +198,9 @@ export default class WebPlatform extends VectorBasePlatform {
});
}
screenCaptureErrorString(): ?string {
screenCaptureErrorString(): string | null {
// it won't work at all if you're not on HTTPS so whine whine whine
if (!global.window || global.window.location.protocol !== "https:") {
if (window.location.protocol !== "https:") {
return _t("You need to be using HTTPS to place a screen-sharing call.");
}
return null;

View File

@@ -183,7 +183,7 @@
<div class="mx_HomePage_row">
<div>
<h2 id="step1_heading">Riot can't load</h2>
<p>Something went wrong and riot was unable to load.</p>
<p>Something went wrong and Riot was unable to load.</p>
</div>
</div>
</div>

View File

@@ -29,7 +29,7 @@ import * as jssdk from 'matrix-js-sdk';
import * as sdk from 'matrix-react-sdk';
import {MatrixClientPeg} from 'matrix-react-sdk/src/MatrixClientPeg';
import {Views} from 'matrix-react-sdk/src/components/structures/MatrixChat';
import dis from 'matrix-react-sdk/src/dispatcher';
import dis from 'matrix-react-sdk/src/dispatcher/dispatcher';
import * as test_utils from '../test-utils';
import MockHttpBackend from 'matrix-mock-request';
import {parseQs, parseQsFromFragment} from '../../src/vector/url_utils';
@@ -589,8 +589,10 @@ describe('loading:', function() {
describe('Token login:', function() {
it('logs in successfully', function() {
localStorage.setItem("mx_sso_hs_url", "https://homeserver");
localStorage.setItem("mx_sso_is_url", "https://idserver");
loadApp({
queryString: "?loginToken=secretToken&homeserver=https%3A%2F%2Fhomeserver&identityServer=https%3A%2F%2Fidserver",
queryString: "?loginToken=secretToken",
});
return sleep(1).then(() => {

View File

@@ -14,7 +14,8 @@
"jsx": "react",
"types": [
"node",
"react"
"react",
"flux"
]
},
"include": [

View File

@@ -216,10 +216,10 @@ module.exports = (env, argv) => {
// Note that we use slightly different plugins for SCSS.
require('postcss-import')(),
require("postcss-mixins")(),
require("postcss-simple-vars")(),
require("postcss-extend")(),
require("postcss-nested")(),
require("postcss-mixins")(),
require("postcss-easings")(),
require("postcss-strip-inline-comments")(),
require("postcss-hexrgba")(),

2374
yarn.lock

File diff suppressed because it is too large Load Diff