Compare commits

..

349 Commits

Author SHA1 Message Date
Arnfried Griesert
5760c2bc53 Merge branch 'release/v2.8.0' 2023-08-10 17:03:54 +02:00
Arnfried Griesert
c96bf054a9 Changed podfile sdk version to v0.26.12_bwi 2023-08-09 09:14:52 +02:00
JanNiklas Grabowski
eee4b4c9a2 Merge branch 'feature/enable_notification_times' into 'develop'
Feature/enable notification times

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!171
2023-08-08 11:13:16 +00:00
Arnfried Griesert
276fe9a6b6 Feature/enable notification times 2023-08-08 11:13:15 +00:00
Arnfried Griesert
68def4090b Merge branch 'feature/5022_app_config' into 'develop'
MESSENGER-5022 added hash

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!170
2023-08-08 11:11:08 +00:00
Arnfried Griesert
2d6867941b MESSENGER-5022 added hash 2023-08-08 11:11:07 +00:00
JanNiklas Grabowski
98b19a5e49 Merge branch 'feature/minor_release_changes' into 'develop'
feature/minor_release_changes

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!169
2023-08-07 16:18:59 +00:00
Arnfried Griesert
1db4e3b1b8 feature/minor_release_changes 2023-08-07 16:18:58 +00:00
Arnfried Griesert
debd83dd19 Merge branch 'feature/release_preparation' into 'develop'
Final changes before release branch

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!168
2023-08-04 12:02:44 +00:00
Arnfried Griesert
e213313374 Final changes before release branch 2023-08-04 12:02:43 +00:00
Arnfried Griesert
c6305b0ed4 Merge branch 'feature/4905_add_migration_progress_information' into 'develop'
Feature/4905 add migration progress information

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!165
2023-07-26 14:30:33 +00:00
JanNiklas Grabowski
345a73ae15 Feature/4905 add migration progress information 2023-07-26 14:30:33 +00:00
Arnfried Griesert
937432c995 Merge branch 'feature/4295_maintenance_with_additional_information' into 'develop'
MESSENGER-4295 add additional information for maintenance

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!166
2023-07-26 13:07:22 +00:00
JanNiklas Grabowski
e5f822c556 MESSENGER-4295 add additional information for maintenance 2023-07-26 13:07:22 +00:00
Arnfried Griesert
44a6360469 Merge branch 'feature/wrong_color_poll_history' into 'develop'
Color change

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!164
2023-07-26 11:30:23 +00:00
Arnfried Griesert
769a902330 Merge branch 'feature/fixed_notification_times_button_color' into 'develop'
Changed colors for notification times buttons

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!167
2023-07-26 11:29:33 +00:00
Arnfried Griesert
c0efc956f3 Changed colors for notification times buttons 2023-07-26 11:29:33 +00:00
Arnfried Griesert
aa2d6143d5 Color change 2023-07-21 09:34:41 +02:00
Frank Rotermund
f69d9d8433 Merge branch 'feature/4484_poi_participants_history' into 'develop'
MESSENGER-4484 poi participants in history

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!159
2023-07-18 11:44:35 +00:00
Frank Rotermund
dc5198f5d9 MESSENGER-4484 poi participants in history 2023-07-18 11:44:35 +00:00
JanNiklas Grabowski
b386e7c812 Merge branch 'feature/4889_fix_build_problems' into 'develop'
fix build problems

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!162
2023-07-17 12:08:24 +00:00
JanNiklas Grabowski
6afd9cb223 fix build problems 2023-07-17 13:56:08 +02:00
JanNiklas Grabowski
1c7dfa8098 Merge branch 'feature/4889_revert_deactivate_rust_for_prod' into 'develop'
revert '5bc3255dfe7b0a56aa3ce4b8056015b438653fed' 4889_deactivate_rust_for_prod

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!160
2023-07-17 08:54:43 +00:00
JanNiklas Grabowski
485f944c6c revert '5bc3255dfe7b0a56aa3ce4b8056015b438653fed' 4889_deactivate_rust_for_prod 2023-07-17 08:54:43 +00:00
Arnfried Griesert
db1787303c Merge branch 'feature/3580_additional_notification_times_bugfixes' into 'develop'
MESSENGER-3580 Several bugfixes to notification times

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!161
2023-07-17 07:57:49 +00:00
Arnfried Griesert
fd7c694c8a MESSENGER-3580 Several bugfixes to notification times 2023-07-17 07:57:49 +00:00
Frank Rotermund
6a2101c858 Merge branch 'feature/3580_test_ruhezeiten' into 'develop'
Enable notification filtering

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!158
2023-07-13 06:36:37 +00:00
Arnfried Griesert
dba6707074 Enable notification filtering 2023-07-12 15:18:16 +02:00
JanNiklas Grabowski
7db295ed18 merge branch 'release/v2.7.0' into develop 2023-07-11 18:41:08 +02:00
JanNiklas Grabowski
347112eabb Merge branch 'release/v2.7.0' 2023-07-11 18:33:04 +02:00
JanNiklas Grabowski
a1ba3a8c9b MESSENGER-4883 fix update room avatar 2023-07-10 18:12:31 +02:00
JanNiklas Grabowski
7f190db24e MESSENGER-4883 add color changes and manual app store upload for beta 2023-07-10 17:08:37 +02:00
JanNiklas Grabowski
cb68c4e9f1 MESSENGER-4819 change icon 2023-07-10 12:36:40 +02:00
JanNiklas Grabowski
b6af17ab7b change color on allchatsvc 2023-07-05 16:56:35 +02:00
JanNiklas Grabowski
1eb66fd37e MESSENGER-4882 changelog and fixes 2023-07-04 15:16:20 +02:00
Frank Rotermund
7fa1742f40 MESSENGER-4884 update build files 2023-07-04 08:24:45 +02:00
Frank Rotermund
242e35fdc7 Merge commit 'ab5f501c2daf60d26f41b1a15d7e97bfe5679228' into feature/4884_merge_foss_1.10.14
# Conflicts:
#	Config/AppVersion.xcconfig
#	Podfile.lock
#	Riot/Modules/Home/AllChats/AllChatsCoordinator.swift
#	fastlane/.env.default
#	fastlane/Fastfile
2023-07-04 08:24:05 +02:00
JanNiklas Grabowski
df66eda9fa MESSENGER-4929 show participant votes button when user has voted 2023-07-03 15:27:36 +02:00
JanNiklas Grabowski
232f526dd8 MESSENGER-4882 refactor delete avatar 2023-06-30 16:28:35 +02:00
Frank Rotermund
d49c0d59ad MESSENGER fix for broad casts 2023-06-30 14:55:04 +02:00
JanNiklas Grabowski
153d2a72f6 Update Appversion at sprint start 2023-06-29 18:16:38 +02:00
JanNiklas Grabowski
ebdd064e66 MESSENGER-4772 change font size 2023-06-29 12:18:10 +02:00
Frank Rotermund
531667ec5a Merge branch 'feature/4819_fix_logo_when_app_moved_to_background' into 'develop'
MESSENGER-4819

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!157
2023-06-28 12:15:49 +00:00
JanNiklas Grabowski
37f08fc886 MESSENGER-4819 2023-06-28 13:30:26 +02:00
Frank Rotermund
42c9520a20 Merge branch 'feature/4889_deactivate_rust_for_prod' into 'develop'
Feature/4889 deactivate rust for prod

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!156
2023-06-28 05:59:03 +00:00
JanNiklas Grabowski
a22c234e82 Feature/4889 deactivate rust for prod 2023-06-28 05:59:03 +00:00
Frank Rotermund
fe6f9c5fb7 Merge branch 'feature/4753_bum_test_app' into 'develop'
Feature/4753 bum test app

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!155
2023-06-26 12:22:45 +00:00
JanNiklas Grabowski
e56f1d2a4e Feature/4753 bum test app 2023-06-26 12:22:44 +00:00
Frank Rotermund
abd7f01602 Merge branch 'feature/4390_fix_forwarding_for_private_rooms' into 'develop'
MESSENGER-4390 fix message forwarding and disable permalinks for messages in private rooms

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!152
2023-06-26 11:09:37 +00:00
Frank Rotermund
8f45ada0f0 Merge branch 'feature/4795_add_matomo_event_names' into 'develop'
MESSENGER-4795 add matomo event names

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!154
2023-06-26 11:08:42 +00:00
JanNiklas Grabowski
ab75b9aba0 MESSENGER-4795 add matomo event names 2023-06-26 12:19:39 +02:00
Frank Rotermund
137d6f878f Merge branch 'feature/4897_new_hashes' into 'develop'
MESSENGER-4897 new hashes

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!153
2023-06-26 08:40:05 +00:00
Juergen Wischer
9dde39af77 MESSENGER-4897 new hashes 2023-06-26 08:37:46 +00:00
JanNiklas Grabowski
eeb0fd900f activate lab setting voice broadcast and enable session manager by default 2023-06-23 10:48:24 +02:00
JanNiklas Grabowski
84a02dbbf8 Merge branch 'feature/4682_imprint_from_wellknown' into 'develop'
MESSENGER-4682 imprint from wellknown (and fix lab feature list)

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!151
2023-06-22 09:48:24 +00:00
Frank Rotermund
f70e354f75 MESSENGER-4682 imprint from wellknown (and fix lab feature list) 2023-06-22 09:48:24 +00:00
JanNiklas Grabowski
9e381a804f MESSENGER-4390 fix message forwarding and disable permalinks for messages in private rooms 2023-06-22 10:33:41 +02:00
Doug
fda01a1869 Merge branch 'release/1.10.14/master' 2023-06-21 14:02:44 +01:00
Doug
abc5f95016 finish version++ 2023-06-21 14:02:43 +01:00
Doug
e5fbedde76 Merge pull request #7605 from vector-im/release/1.10.14/release
Release 1.10.14
2023-06-21 14:02:10 +01:00
Doug
49b12f01ef version++ 2023-06-21 12:01:26 +01:00
Doug
2ac75a81bb changelog.d: Upgrade MatrixSDK version ([v0.26.12](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.26.12)). 2023-06-21 12:01:25 +01:00
JanNiklas Grabowski
c9296cc3a9 Merge branch 'feature/4710_manual_verification' into 'develop'
MESSENGER-4710 remove any possibility to self verifiy with old device manager

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!147
2023-06-21 09:36:53 +00:00
Frank Rotermund
249fa0f3f9 Merge branch 'feature/4795_feature_tracking_matomo' into 'develop'
Feature/4795 feature tracking matomo

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!150
2023-06-21 06:24:46 +00:00
JanNiklas Grabowski
27723fa953 Feature/4795 feature tracking matomo 2023-06-21 06:24:46 +00:00
JanNiklas Grabowski
22e19449a9 Merge branch 'feature/4573_reset_room_filter_on_logout' into 'develop'
MESSENGER-4573 reset room filter on logout

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!148
2023-06-20 13:26:11 +00:00
Frank Rotermund
013047191e Merge branch 'feature/4743_fix_remove_room_avatar' into 'develop'
MESSENGER-4743 fix removing room avatar

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!149
2023-06-20 11:56:21 +00:00
Frank Rotermund
9704872dc7 Merge branch 'feature/4742_fix_permalink_info_when_room_not_available' into 'develop'
MESSENGER-4742 fix permalink info when room is not available

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!146
2023-06-20 11:33:37 +00:00
Frank Rotermund
ccffb9dfb2 Merge branch 'feature/4769_color_changes_II' into 'develop'
MESSENGER-4769 color changes part 2

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!145
2023-06-20 11:32:09 +00:00
Arnfried Griesert
6d38c5fe24 MESSENGER-4769 color changes part 2 2023-06-20 11:32:09 +00:00
JanNiklas Grabowski
6da2e871d0 MESSENGER-4743 fix removing room avatar 2023-06-20 12:19:28 +02:00
Frank Rotermund
d5c5afbfc9 MESSENGER-4573 reset room filter on logout 2023-06-20 11:14:01 +02:00
Frank Rotermund
0b9ce524ab MESSENGER-4710 remove any possibility to self verifiy with old device manager 2023-06-19 16:10:12 +02:00
Frank Rotermund
bbbe3f4e5b Merge branch 'feature/4390_fix_private_room_sharing' into 'develop'
MESSENGER-4390 fix private room sharing

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!144
2023-06-19 05:52:11 +00:00
JanNiklas Grabowski
d0d0e45bdc MESSENGER-4742 fix permalink info when room is not available 2023-06-16 17:01:12 +02:00
JanNiklas Grabowski
00b63f43c6 Merge branch 'feature/3539_logout_airplane_mode' into 'develop'
MESSENGER-3539 prevent logout and error popup when logging out

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!143
2023-06-15 09:16:51 +00:00
JanNiklas Grabowski
6bf886499d MESSENGER-4390 fix private room sharing 2023-06-15 10:21:50 +02:00
Frank Rotermund
c02589aaaf MESSENGER-3539 prevent logout and error popup when logging out 2023-06-15 07:40:58 +02:00
Frank Rotermund
33b943d31f Merge branch 'feature/4744_remove_black_theme' into 'develop'
MESSENGER-4744 Removed black theme and map already set black theme to dark

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!141
2023-06-14 06:28:28 +00:00
Arnfried Griesert
b5f628c650 MESSENGER-4744 Removed black theme and map already set black theme to dark 2023-06-14 06:28:28 +00:00
Frank Rotermund
6709839148 Merge branch 'feature/4748_fix_permalik_qr_code' into 'develop'
MESSENGER-4748 fix permalink qr code scan

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!139
2023-06-14 06:14:54 +00:00
Frank Rotermund
67d118f1cc Merge branch 'feature/4772_add_accessibility_declaration' into 'develop'
Feature/4772 add accessibility declaration

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!138
2023-06-14 06:14:17 +00:00
JanNiklas Grabowski
f8348a66d0 Feature/4772 add accessibility declaration 2023-06-14 06:14:17 +00:00
Frank Rotermund
42214cad99 Merge branch 'feature/4736_creating_dm_text_changes' into 'develop'
MESSENGER-4736 text changes

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!140
2023-06-14 05:54:29 +00:00
JanNiklas Grabowski
986b086e33 MESSENGER-4736 text changes 2023-06-14 05:54:29 +00:00
Frank Rotermund
c41d7417f0 Merge branch 'feature/4483_poll_details_fixes' into 'develop'
MESSENGER-4383 fix for undisclosed button visibility and small UI fixes

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!142
2023-06-14 05:47:10 +00:00
Frank Rotermund
5d1dd60c24 MESSENGER-4383 fix for undisclosed button visibility and small UI fixes 2023-06-14 07:45:18 +02:00
Mauro Romito
18ed1025dd Prepare for new sprint 2023-06-13 16:54:24 +02:00
Mauro Romito
5082439bed Merge branch 'master' into develop 2023-06-13 16:54:22 +02:00
Mauro Romito
1a86141ab4 Merge branch 'release/1.10.13/master' 2023-06-13 16:54:16 +02:00
Mauro Romito
9f56d983c5 finish version++ 2023-06-13 16:54:16 +02:00
Mauro
e72c8ee5f8 Merge pull request #7596 from vector-im/release/1.10.13/release
Release 1.10.13
2023-06-13 16:53:37 +02:00
Mauro Romito
497cf23f23 version++ 2023-06-13 14:01:37 +02:00
Mauro Romito
08d0caef86 changelog.d: Upgrade MatrixSDK version ([v0.26.11](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.26.11)). 2023-06-13 14:01:36 +02:00
Mauro
ba75fadad5 Merge pull request #7595 from vector-im/mauroromito/update_translations_for_release_1.10.13
Weblate translations for release 1.10.13
2023-06-13 11:51:04 +02:00
Mauro Romito
4c00975c2f Merge branch 'weblate-riot-ios-riot-ios-dialogs' into mauroromito/update_translations_for_release_1.10.13 2023-06-13 10:36:32 +02:00
Mauro Romito
9e0d883a13 Merge branch 'weblate-riot-ios-riot-ios' into mauroromito/update_translations_for_release_1.10.13 2023-06-13 10:36:23 +02:00
LinAGKar
7181b526bf Translated using Weblate (Swedish)
Currently translated at 99.1% (2386 of 2406 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/sv/
2023-06-13 08:28:06 +00:00
Peter Chen
e1c04a6f74 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (2406 of 2406 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/zh_Hant/
2023-06-12 13:03:17 +00:00
raspin0
57f89a677e Translated using Weblate (Polish)
Currently translated at 100.0% (2406 of 2406 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pl/
2023-06-12 13:03:17 +00:00
phardyle
b6d38a02f5 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (2406 of 2406 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/zh_Hant/
2023-06-12 13:03:17 +00:00
phardyle
0828ba131e Translated using Weblate (Chinese (Simplified))
Currently translated at 84.2% (2026 of 2406 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/zh_Hans/
2023-06-12 13:03:17 +00:00
raspin0
3516bdd1de Translated using Weblate (Polish)
Currently translated at 100.0% (2406 of 2406 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pl/
2023-06-12 13:03:17 +00:00
LinAGKar
e293c7a009 Translated using Weblate (Swedish)
Currently translated at 98.6% (2374 of 2406 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/sv/
2023-06-12 13:03:17 +00:00
许煜恒
60177010df Translated using Weblate (Chinese (Simplified))
Currently translated at 84.2% (2026 of 2406 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/zh_Hans/
2023-06-12 13:03:17 +00:00
raspin0
6e9107dd1d Translated using Weblate (Polish)
Currently translated at 100.0% (2406 of 2406 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pl/
2023-06-12 13:03:17 +00:00
raspin0
05938fa086 Translated using Weblate (Polish)
Currently translated at 100.0% (2406 of 2406 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pl/
2023-06-12 13:03:17 +00:00
raspin0
f2a47022ec Translated using Weblate (Polish)
Currently translated at 100.0% (2406 of 2406 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pl/
2023-06-12 13:03:17 +00:00
Open Culture Foundation
188b0ef9bc Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (2406 of 2406 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/zh_Hant/
2023-06-12 13:03:17 +00:00
raspin0
ab5e24c0be Translated using Weblate (Polish)
Currently translated at 100.0% (2406 of 2406 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pl/
2023-06-12 13:03:17 +00:00
GabrielBoraschi
0afef6d320 Translated using Weblate (Portuguese (Brazil))
Currently translated at 97.1% (2338 of 2406 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pt_BR/
2023-06-12 13:03:17 +00:00
raspin0
1121359356 Translated using Weblate (Polish)
Currently translated at 100.0% (2406 of 2406 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pl/
2023-06-12 13:03:17 +00:00
Open Culture Foundation
a3be7d5b45 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (2406 of 2406 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/zh_Hant/
2023-06-12 13:03:17 +00:00
Vri
da383030bc Translated using Weblate (German)
Currently translated at 100.0% (2406 of 2406 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/
2023-06-12 13:03:17 +00:00
raspin0
55c1632d02 Translated using Weblate (Polish)
Currently translated at 99.6% (2397 of 2406 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pl/
2023-06-12 13:03:17 +00:00
Thor Arne Johansen
33fd4f4e73 Translated using Weblate (Norwegian Bokmål (nb))
Currently translated at 100.0% (8 of 8 strings)

Translation: Element iOS/Element iOS (Dialogs)
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios-dialogs/nb/
2023-06-12 13:03:16 +00:00
raspin0
c28b7f3a88 Translated using Weblate (Polish)
Currently translated at 100.0% (50 of 50 strings)

Translation: Element iOS/Element iOS (Push)
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios-push/pl/
2023-06-12 13:03:16 +00:00
raspin0
afcbf6a49a Translated using Weblate (Polish)
Currently translated at 90.1% (2170 of 2406 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pl/
2023-06-12 13:03:16 +00:00
random
2dea47ec78 Translated using Weblate (Italian)
Currently translated at 100.0% (2406 of 2406 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/
2023-06-12 13:03:16 +00:00
Jozef Gaal
27c97250da Translated using Weblate (Slovak)
Currently translated at 100.0% (2406 of 2406 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/sk/
2023-06-12 13:03:16 +00:00
Linerly
6f2edfd454 Translated using Weblate (Indonesian)
Currently translated at 100.0% (2406 of 2406 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/id/
2023-06-12 13:03:16 +00:00
Priit Jõerüüt
c436f08d35 Translated using Weblate (Estonian)
Currently translated at 100.0% (2406 of 2406 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/et/
2023-06-12 13:03:16 +00:00
Ihor Hordiichuk
57f1237887 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (2406 of 2406 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/uk/
2023-06-12 13:03:16 +00:00
Vri
03e8b6a772 Translated using Weblate (German)
Currently translated at 99.9% (2405 of 2406 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/
2023-06-12 13:03:16 +00:00
Ihor Hordiichuk
277c8430db Translated using Weblate (Ukrainian)
Currently translated at 100.0% (2405 of 2405 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/uk/
2023-06-12 13:03:16 +00:00
random
59a242fa56 Translated using Weblate (Italian)
Currently translated at 100.0% (2405 of 2405 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/
2023-06-12 13:03:16 +00:00
Linerly
492f41d964 Translated using Weblate (Indonesian)
Currently translated at 100.0% (2405 of 2405 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/id/
2023-06-12 13:03:16 +00:00
Besnik Bleta
b67c24e82d Translated using Weblate (Albanian)
Currently translated at 99.6% (2396 of 2405 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/sq/
2023-06-12 13:03:16 +00:00
Vri
ebe2aac055 Translated using Weblate (German)
Currently translated at 99.9% (2404 of 2405 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/
2023-06-12 13:03:16 +00:00
Jozef Gaal
fbac563550 Translated using Weblate (Slovak)
Currently translated at 100.0% (2404 of 2404 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/sk/
2023-06-12 13:03:16 +00:00
Linerly
12dd391188 Translated using Weblate (Indonesian)
Currently translated at 100.0% (2404 of 2404 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/id/
2023-06-12 13:03:16 +00:00
Priit Jõerüüt
ffe8b41a37 Translated using Weblate (Estonian)
Currently translated at 100.0% (2404 of 2404 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/et/
2023-06-12 13:03:16 +00:00
Ihor Hordiichuk
13134293a6 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (2404 of 2404 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/uk/
2023-06-12 13:03:16 +00:00
random
d52b12e48e Translated using Weblate (Italian)
Currently translated at 100.0% (2404 of 2404 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/
2023-06-12 13:03:16 +00:00
Open Culture Foundation
9f2d82c30d Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (2404 of 2404 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/zh_Hant/
2023-06-12 13:03:16 +00:00
Vri
c8391867ee Translated using Weblate (German)
Currently translated at 99.9% (2403 of 2404 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/
2023-06-12 13:03:16 +00:00
Juho Hölsä
d175cc5883 Translated using Weblate (Finnish)
Currently translated at 7.7% (186 of 2391 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/fi/
2023-06-12 13:03:16 +00:00
SmallJinn
e140c45549 Translated using Weblate (Russian)
Currently translated at 83.5% (1999 of 2394 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/ru/
2023-06-12 13:03:16 +00:00
aringenbach
b8fd33c2bf Merge pull request #7590 from vector-im/aringenbach/7570_fix_reconciliate_after_multiple_newlines
Fix RTE sometimes inserting characters in wrong locations after multiple new lines
2023-06-12 15:02:57 +02:00
JanNiklas Grabowski
8ddb9f9f41 MESSENGER-4748 fix permalink qr code scan 2023-06-12 14:14:30 +02:00
aringenbach
89696d909c Fix a crash when creating a new direct chat with RTE 2023-06-12 12:20:36 +02:00
Arnfried Griesert
7ed6d52ef7 Changed sdk version in Podfile2 2023-06-12 06:48:41 +02:00
Arnfried Griesert
81832c15b7 Removed CryptoSdk lab feature file 2023-06-12 06:10:31 +02:00
Arnfried Griesert
b4f6992e56 Fixed additional merge issues 2023-06-12 06:08:33 +02:00
aringenbach
6c496f3330 Fix RTE sometimes inserting characters in wrong locations after multiple new lines 2023-06-09 16:20:07 +02:00
Mauro
f6d2dfe058 Merge pull request #7584 from toshanmugaraj/Audio-call-crash
crash for audio call , updated protocol signature for jmcallkitlistener
2023-06-08 09:57:00 +02:00
Nicolas Mauri
6a6b38fa1a Merge pull request #7587 from vector-im/nimau/PSB268_avatar_disappears 2023-06-07 19:17:51 +02:00
Nicolas Mauri
fa8f992710 Fix: Prevents UserAvatarView from disappearing due to incorrect width. 2023-06-07 17:00:08 +02:00
Arnfried Griesert
1c0ef0ca52 merged element 1.10.12 into bum 2023-06-07 15:45:59 +02:00
Johannes Marbach
69415ecfce Merge pull request #7582 from vector-im/johannes/vm-length 2023-06-07 14:03:17 +02:00
Nicolas Mauri
51be469be2 Merge pull request #7585 from vector-im/nimau/7576_msc3987_push_actions_cleanup 2023-06-07 13:48:50 +02:00
Shunmugaraj
16fa3e6b99 updated protocol signature for jmcallkitlistener 2023-06-07 12:07:12 +03:00
Johannes Marbach
1b05b80619 Increase max. length of voice message recordings to 5m 2023-06-07 09:45:14 +02:00
Nicolas Mauri
c53d4961c9 Implement MSC3987: Push actions clean-up 2023-06-07 09:31:42 +02:00
Stefan Ceriu
e8294f727c Merge pull request #7581 from vector-im/stefan/7579
Fix crashes when mentioning users without display names
2023-06-07 10:08:07 +03:00
Stefan Ceriu
ac072f261c Fix crashes when mentioning users without display names 2023-06-06 19:53:01 +03:00
Nicolas Mauri
3ee5cb3772 Merge pull request #7571 from vector-im/nimau/7558_create_dm_unrecognized_matrixid 2023-06-06 10:57:28 +02:00
Nicolas Mauri
f3c79973cc Fix: renamed parameter for code clarity 2023-06-06 09:55:33 +02:00
Nicolas Mauri
e30901b6d1 Prompt the user when the invited MatrixId is not recognized 2023-06-02 14:21:00 +02:00
Mauro
2711b4328d Merge pull request #7566 from vector-im/mauroromito/broadcast_extension
Broadcast Upload Extension
2023-06-01 15:33:44 +02:00
Mauro Romito
8ddf0d5323 adding the license to the files 2023-06-01 12:31:14 +02:00
Mauro Romito
43d36592a9 setupLogger 2023-06-01 11:23:50 +02:00
Mauro Romito
0071c4ec12 updated the identifier 2023-05-31 19:43:42 +02:00
Mauro Romito
f64e386562 added logging 2023-05-31 19:26:40 +02:00
Mauro
10ebf63b67 Apply suggestions from code review
Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>
2023-05-31 18:55:47 +02:00
Mauro Romito
f6a2c678ca rmeovijng unused comment 2023-05-31 17:17:11 +02:00
Mauro Romito
f3e32fa94a app identifiers variants for alpha updated 2023-05-31 16:44:37 +02:00
Mauro Romito
d064ce4dbe updated the env defaults for the alpha variant 2023-05-31 16:36:12 +02:00
Arnfried Griesert
110dc72b77 Merge branch 'feature/4383_poll_participants_details' into 'develop'
Feature/4383 poll participants details

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!136
2023-05-31 14:31:07 +00:00
Frank Rotermund
9bd569dac0 Feature/4383 poll participants details 2023-05-31 14:31:07 +00:00
Mauro Romito
2a4bc2e33b updated the env defaults 2023-05-31 15:50:22 +02:00
Mauro Romito
38bc3f317f setting up the build process for the broadcast upload extension 2023-05-31 15:21:46 +02:00
JanNiklas Grabowski
f48f3edf31 MESSENGER-4699 update element version string 2023-05-31 13:53:21 +02:00
Mauro Romito
763b3db768 entitlements and app group identifier 2023-05-30 19:56:34 +02:00
Mauro Romito
54fa906b40 set up the target for the broadcast extension 2023-05-30 19:04:40 +02:00
Mauro Romito
9a83aa69bd enabling ff 2023-05-30 16:06:04 +02:00
Alfonso Grillo
0a6100fd39 Merge pull request #7562 from vector-im/alfogrillo/dm_no_internet_status
Fix offline state issue in user sessions overview
2023-05-30 11:45:20 +02:00
Stefan Ceriu
9fd92ae35a Merge pull request #7560 from vector-im/stefan/fixDiawi
Switch the diawi fastlane plugin to another source after original rem…
2023-05-30 11:37:43 +03:00
Alfonso Grillo
810a0134e7 Fix UTs 2023-05-29 16:48:46 +02:00
Alfonso Grillo
8b0300c711 Add changelog.d file 2023-05-29 15:23:02 +02:00
Alfonso Grillo
955d9ef1f2 Fix initial state 2023-05-29 15:19:55 +02:00
Alfonso Grillo
235f324eaa Handle offline issue in UserSessionsDataProvider 2023-05-29 14:52:38 +02:00
Stefan Ceriu
adfbce05d3 Switch the diawi fastlane plugin to another source after original removal, update gems 2023-05-26 14:50:51 +03:00
Frank Rotermund
00286183f6 Merge branch 'feature/1678_add_webview_navigation_policy' into 'develop'
MESSENGER-1678 add webview navigation policy

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!120
2023-05-25 14:32:54 +00:00
JanNiklas Grabowski
99d75ecf01 MESSENGER-1678 add webview navigation policy 2023-05-25 14:32:54 +00:00
JanNiklas Grabowski
c5aad96ddc Merge branch 'feature/4393_poll_with_visible_participant_p1' into 'develop'
Feature/4393 poll with visible participant p1

See merge request bwmessenger/bundesmessenger/bundesmessenger-ios!135
2023-05-25 13:52:30 +00:00
Frank Rotermund
902b529245 Feature/4393 poll with visible participant p1 2023-05-25 13:52:30 +00:00
Mauro
7906fe33bc Merge pull request #7555 from mgcm/fix/room-creation-intro-theme-update
RoomCreationIntroCell now conforms to Themable protocol
2023-05-24 10:04:55 +02:00
mgcm
13ed253bcd adding changelog entry content 2023-05-23 15:17:57 +00:00
mgcm
a76bfc8d37 added changelog entry 2023-05-23 15:05:10 +00:00
mgcm
e0fdcf14ef RoomCreationIntroCell now conforms to Themable protocol, making this cell type able to be updated when the system changes from light to dark theme and vice-versa 2023-05-23 14:54:10 +00:00
JanNiklas Grabowski
b76b4e0803 Merge branch 'feature/4699_basis_update_element' into develop
# Conflicts:
#	Podfile
#	Riot/Modules/MatrixKit/Utils/MXKTools.m
#	Riot/Modules/Pills/PillType.swift
2023-05-23 14:51:49 +02:00
Frank Rotermund
deac79fb49 Merge branch 'hotfix/v2.6.0.1' into develop 2023-05-16 16:14:20 +02:00
Element CI
074562ef1c Prepare for new sprint 2023-05-16 16:26:18 +03:00
Element CI
255e77d23e Merge branch 'master' into develop 2023-05-16 16:26:15 +03:00
Element CI
a3048b3125 Merge branch 'release/1.10.12/master' 2023-05-16 16:26:10 +03:00
Element CI
617c978437 finish version++ 2023-05-16 16:26:10 +03:00
Stefan Ceriu
ac00445ef6 Merge pull request #7549 from vector-im/release/1.10.12/release
Release 1.10.12
2023-05-16 16:24:23 +03:00
Element CI
49254e6b89 version++ 2023-05-16 15:46:02 +03:00
Element CI
3006c3ae5c changelog.d: Upgrade MatrixSDK version ([v0.26.10](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.26.10)). 2023-05-16 15:46:01 +03:00
Frank Rotermund
2d454dc971 Merge branch 'release/v2.6.0' into develop 2023-05-16 07:39:06 +02:00
Nicolas Mauri
c2c6cf69e5 Merge pull request #7545 from vector-im/nimau/PSB307_last_event_description_color 2023-05-15 09:03:45 +02:00
aringenbach
23d7c0b849 Merge pull request #7546 from vector-im/aringenbach/7322_fix_pills_in_thread_list
Fix mention pills display in thread list
2023-05-15 08:03:42 +02:00
aringenbach
49edce4ead Merge pull request #7547 from vector-im/aringenbach/disable_removing_trigger_text_in_rte_mode
Disable removing mention/command text trigger with RTE enabled
2023-05-15 08:03:33 +02:00
aringenbach
f6f172c5f2 Fix mention pills display in thread list 2023-05-12 18:41:19 +02:00
aringenbach
401d6a59cf Disable removing mention/command text trigger with RTE enabled 2023-05-12 18:30:20 +02:00
Nicolas Mauri
c843eafe84 Fix: text color of the last event description was incorrect. 2023-05-12 17:15:20 +02:00
Nicolas Mauri
16340a18a6 Merge pull request #7541 from vector-im/nimau/PSB349_force_hs_selection
Feat: add a build setting flag to always show the server selection screen in login/registration flow.
2023-05-11 14:57:07 +02:00
JanNiklas Grabowski
519aae1469 MESSENGER-4699 update sdk version 2023-05-11 13:39:05 +02:00
JanNiklas Grabowski
97243bc063 Merge commit '7d18f34a75d1f41cc3bc8b6a36c0ab82ff93f0e4' into feature/4699_basis_update_element
* commit '7d18f34a75d1f41cc3bc8b6a36c0ab82ff93f0e4': (59 commits)
  finish version++
  Tidy up event formatter issues.
  version++
  changelog.d: Upgrade MatrixSDK version ([v0.26.9](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.26.9)).
  Translated using Weblate (Russian)
  Translated using Weblate (Chinese (Traditional))
  Translated using Weblate (Albanian)
  Translated using Weblate (Hungarian)
  Translated using Weblate (Chinese (Traditional))
  Translated using Weblate (Chinese (Traditional))
  Translated using Weblate (Chinese (Traditional))
  Translated using Weblate (German)
  Translated using Weblate (Slovak)
  Translated using Weblate (Chinese (Traditional))
  Translated using Weblate (Indonesian)
  Translated using Weblate (Estonian)
  Translated using Weblate (Ukrainian)
  Translated using Weblate (Italian)
  Translated using Weblate (Chinese (Traditional))
  Translated using Weblate (German)
  ...

# Conflicts:
#	Config/AppVersion.xcconfig
#	Riot/Utils/EventFormatter.m
#	fastlane/Fastfile
2023-05-11 13:19:24 +02:00
Nicolas Mauri
40c57f7968 Fix: apply the changes requested in the PR review 2023-05-11 09:45:04 +02:00
Doug
7d3efda5ef Fix voiceover order of room creation header and message composer. 2023-05-10 16:15:00 +01:00
Nicolas Mauri
68029d6b89 Feat: add a flag in the build settings to force the user to define a homeserver. 2023-05-10 15:46:34 +02:00
Doug
05f89f1160 Use the app's language for accessibility. 2023-05-10 10:15:41 +01:00
Frank Rotermund
5d77413746 MESSENGER-4697 set app version to 2.7.0 2023-05-09 09:02:36 +02:00
Nicolas Mauri
3011b4b639 Merge pull request #7537 from vector-im/nimau/PSB_268_avatar_disappears
Add logs to track a problem with the top left avatar disappearing
2023-05-05 17:17:58 +02:00
Nicolas Mauri
fc59290a34 Add logs to track a problem with the top left avatar disappearing 2023-05-05 17:14:53 +02:00
Nicolas Mauri
bb374c67a8 Merge pull request #7404 from vector-im/nimau/PSB-269-reset-passphrase
Secrets recovery: Fix an issue where the Secrets Reset screen would open twice.
2023-05-05 10:22:46 +02:00
aringenbach
3b89cf110c Merge pull request #7536 from vector-im/aringenbach/7535_fix_partial_text_messages
Fix partial text messages not being saved for each room with RTE enabled
2023-05-05 09:29:28 +02:00
Nicolas Mauri
73c6087321 Merge pull request #7534 from vector-im/nimau/7504_VB_audio_alert_lost_connectivity
VoiceBroadcast: Play a sound to notify the user when VB is pause due to an error.
2023-05-04 08:49:19 +02:00
aringenbach
5b2944c918 Add missing self in closure 2023-05-03 17:26:54 +02:00
aringenbach
098b68facf Fix composer unit tests 2023-05-03 15:49:58 +02:00
aringenbach
cc4a2cbca2 Fix partial text messages not being saved for each room with RTE enabled 2023-05-03 14:57:36 +02:00
Nicolas Mauri
0b76aedab3 Merge pull request #7533 from vector-im/nimau/7526_marker_overlap_bubble
Fix the position of the marker highlighting an event.
2023-05-03 14:38:31 +02:00
Nicolas Mauri
19e94cddc9 VoiceBroadcast: Play a sound to notify the user when VB is pause due to an error. 2023-05-03 14:33:01 +02:00
Nicolas Mauri
10e51204af Add changelog file 2023-05-03 11:49:54 +02:00
Nicolas Mauri
318a806cfd Fix: highlighting an event removes the highlighting of the previous event. 2023-05-03 11:43:02 +02:00
Nicolas Mauri
c032762bdb Fix the frame of the marker view highlighting an event 2023-05-03 11:02:02 +02:00
Nicolas Mauri
bc68b26f6a Merge pull request #7528 from vector-im/nimau/7523_timeline_reload
Fix a flickering issue when the timeline datasource is reloaded.
2023-05-03 10:09:17 +02:00
Nicolas Mauri
6500a8ac43 Fix: don’t allow to reset secrets if it is already in progress. 2023-05-02 16:56:43 +02:00
Nicolas Mauri
2c1d56ece9 Secrets recovery: fix an issue preventing the release of SecureBackupSetupCoordinator 2023-05-02 16:29:10 +02:00
aringenbach
ac0594d033 Merge pull request #7531 from vector-im/aringenbach/7530_fix_threads_crash_rte
Fix application crashing when opening a thread with RTE enabled
2023-05-02 12:29:52 +02:00
aringenbach
53ad72dd24 Update room input toolbar when CompletionSuggestionCoordinator is initialised 2023-05-02 11:44:23 +02:00
aringenbach
72013759de Fix application crashing when opening a thread with RTE enabled 2023-05-02 11:11:51 +02:00
Nicolas Mauri
b6811fd99b Fix a flickering issue when the timeline datasource is reloaded. 2023-04-28 16:23:48 +02:00
Nicolas Mauri
1574611c90 Merge pull request #7518 from vector-im/nimau/7497_timeline_closed_polls
Fix: allow to render a TimelinePoll even if the poll is loading
2023-04-27 19:04:42 +02:00
Nicolas Mauri
0bc32f0f97 Update RiotSwiftUI/Modules/Room/PollHistory/Service/MatrixSDK/PollHistoryService.swift
Co-authored-by: Alfonso Grillo <alfogrillo@element.io>
2023-04-27 14:55:40 +02:00
Alfonso Grillo
27f367ecee Merge pull request #7522 from vector-im/alfogrillo/fix_accessibility_pin_screen
Fix accessibility behavior on "enter PIN" screen
2023-04-27 14:41:17 +02:00
Nicolas Mauri
573782e915 Merge pull request #7519 from vector-im/nimau/7517_matrix_id_notice_events
Fix: Remove the matrix id from the notice display name changed event
2023-04-27 08:55:43 +02:00
Nicolas Mauri
1c45459410 Fix: TimelinePoll code refactoring 2023-04-26 17:52:22 +02:00
Kat Gerasimova
92895f0f26 Update triage for labelled issues
Modernise actions from graphql to use new actions.

Remove automation for Delight, WTF, FTUE, voice message and message bubble boards.
2023-04-26 16:25:01 +01:00
Alfonso Grillo
f72f7c238a Add changelog.d file 2023-04-26 16:40:07 +02:00
Alfonso Grillo
9d73564cfe Remove accessibility from placeholder button 2023-04-26 16:40:07 +02:00
Alfonso Grillo
1d65120429 Fix accessibility in SetPinCoordinatorBridgePresenter 2023-04-26 16:40:07 +02:00
Alfonso Grillo
ed3f0dcbc0 Merge pull request #7521 from vector-im/alfogrillo/fix_accessibility_on_emoji
Disable accessibility for emojis during verification
2023-04-26 15:59:00 +02:00
Alfonso Grillo
7286dc7c48 Add changelog.d file 2023-04-26 13:03:06 +02:00
Alfonso Grillo
8cfb199bc2 Disable accessibility for emojis during verification 2023-04-26 12:58:18 +02:00
Nicolas Mauri
5926dad024 Fix: allow to render a TimelinePoll even if the poll is loading 2023-04-26 10:14:44 +02:00
Nicolas Mauri
53dc32ee57 Fix: Remove the matrix id from the notice display name changed event 2023-04-26 09:54:44 +02:00
aringenbach
257e256761 Merge pull request #7514 from vector-im/aringenbach/7493_slash_commands_suggestion_list
Slash commands suggestion list
2023-04-24 10:27:15 +02:00
aringenbach
3289733957 Fix sending command with Pills through RTE 2023-04-21 17:13:03 +02:00
aringenbach
92286ecb88 Fix typo 2023-04-21 13:47:15 +02:00
aringenbach
d8acd1f351 Fix RoomInputToolbarTextView pills flushing 2023-04-21 09:30:56 +02:00
aringenbach
188916e04f Fix missing self in closure 2023-04-21 09:11:35 +02:00
aringenbach
2048e2f085 Fix comment typo 2023-04-20 17:12:09 +02:00
aringenbach
837bee610f L10N 2023-04-20 17:09:02 +02:00
aringenbach
f6e7b9710c Add changelog 2023-04-20 16:50:44 +02:00
aringenbach
0171e64638 Move room admin condition to be usable in UnitTests and add tests 2023-04-20 16:45:08 +02:00
aringenbach
a3f7d0433a Re-enable unit tests and fix a few lint warnings 2023-04-20 16:45:08 +02:00
aringenbach
616238f13b Rework CompletionSuggestionService text trigger 2023-04-20 16:45:08 +02:00
aringenbach
4b0c47c5dd Display all commands when a single slash is entered 2023-04-20 16:45:08 +02:00
aringenbach
787967a8e4 Rework MXKSlashCommands to a more Swift-friendly form and use it in suggestion module 2023-04-20 16:45:08 +02:00
aringenbach
56ad4a03d3 Display additional command content in suggestion list 2023-04-20 16:45:08 +02:00
aringenbach
d28010098a Rename UserSuggestion module as CompletionSuggestion 2023-04-20 16:45:08 +02:00
aringenbach
cacf97233a Add basic slash commands support to UserSuggestion module 2023-04-20 16:45:08 +02:00
Nicolas Mauri
65c0c1b4b8 Merge pull request #7512 from vector-im/nimau/PSB308_sent_confirmation_icon
Fix: Calculation of the frame for a component of a bubble
2023-04-20 15:38:24 +02:00
Nicolas Mauri
6179453c57 Fix: Calculation of the frame for a bubble component 2023-04-20 10:14:51 +02:00
Anderas
a72830bdd6 Merge pull request #7508 from vector-im/andy/deprecate_crypto
Deprecate MXLegacyCrypto
2023-04-19 14:14:30 +01:00
Anderas
7d55531b07 Merge pull request #7509 from vector-im/andy/user_trust
Refactor encryption trust level
2023-04-19 09:30:59 +01:00
Andy Uhnak
e3a32e1c5f Refactor encryption trust level 2023-04-19 08:42:11 +01:00
Doug
a2984b0ecc Prepare for new sprint 2023-04-18 20:11:40 +01:00
Doug
4abbf3213d Merge branch 'master' into develop 2023-04-18 20:11:38 +01:00
Doug
dcfa1ea07b Merge branch 'release/1.10.11/master' 2023-04-18 20:11:34 +01:00
Doug
ec51c12a51 finish version++ 2023-04-18 20:11:34 +01:00
Doug
5129f0e416 Merge pull request #7510 from vector-im/release/1.10.11/release
Release 1.10.11
2023-04-18 20:10:38 +01:00
Doug
e1089b1a14 Tidy up event formatter issues. 2023-04-18 17:43:21 +01:00
Doug
ac519c70e1 version++ 2023-04-18 17:41:11 +01:00
Doug
3200dde4e5 changelog.d: Upgrade MatrixSDK version ([v0.26.9](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.26.9)). 2023-04-18 17:41:11 +01:00
Andy Uhnak
7b728c14f8 Deprecate MXLegacyCrypto 2023-04-18 12:45:39 +01:00
Doug
ef95ef4ab4 Merge pull request #7475 from RiotTranslateBot/weblate-riot-ios-riot-ios
Translations update from Weblate
2023-04-18 10:13:14 +01:00
Nicolas Mauri
79cab0fb22 Merge pull request #7501 from vector-im/nimau/PSB-307-lasteventdescription-color
Fix: add missing foreground color attribute
2023-04-18 11:12:43 +02:00
Doug
2276b6a11f Merge pull request #7505 from RiotTranslateBot/weblate-riot-ios-riot-ios-push
Translations update from Weblate
2023-04-18 09:26:01 +01:00
SmallJinn
8a0b660399 Translated using Weblate (Russian)
Currently translated at 83.0% (1988 of 2394 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/ru/
2023-04-18 08:23:17 +00:00
Peter Chen
82b137b636 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (2394 of 2394 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/zh_Hant/
2023-04-18 08:23:17 +00:00
Besnik Bleta
0a69f843c0 Translated using Weblate (Albanian)
Currently translated at 99.6% (2386 of 2394 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/sq/
2023-04-18 08:23:17 +00:00
Szimszon
3d29ee33ac Translated using Weblate (Hungarian)
Currently translated at 100.0% (2394 of 2394 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/hu/
2023-04-18 08:23:17 +00:00
Peter Chen
77172d4893 Translated using Weblate (Chinese (Traditional))
Currently translated at 99.9% (2393 of 2394 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/zh_Hant/
2023-04-18 08:23:17 +00:00
Peter Chen
f726d70a4e Translated using Weblate (Chinese (Traditional))
Currently translated at 99.9% (2392 of 2394 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/zh_Hant/
2023-04-18 08:23:17 +00:00
Peter Chen
39f90b6945 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (2394 of 2394 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/zh_Hant/
2023-04-18 08:23:17 +00:00
Vri
7b6d88f88d Translated using Weblate (German)
Currently translated at 100.0% (2394 of 2394 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/
2023-04-18 08:23:17 +00:00
Jozef Gaal
5811baf6ef Translated using Weblate (Slovak)
Currently translated at 100.0% (2394 of 2394 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/sk/
2023-04-18 08:23:17 +00:00
Peter Chen
620dc7ea0c Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (50 of 50 strings)

Translation: Element iOS/Element iOS (Push)
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios-push/zh_Hant/
2023-04-18 08:23:16 +00:00
Linerly
e71474de2c Translated using Weblate (Indonesian)
Currently translated at 100.0% (2394 of 2394 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/id/
2023-04-18 08:23:16 +00:00
Priit Jõerüüt
82aae74f8b Translated using Weblate (Estonian)
Currently translated at 100.0% (2394 of 2394 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/et/
2023-04-18 08:23:16 +00:00
Ihor Hordiichuk
cf9b5ba22a Translated using Weblate (Ukrainian)
Currently translated at 100.0% (2394 of 2394 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/uk/
2023-04-18 08:23:16 +00:00
random
309f505ad9 Translated using Weblate (Italian)
Currently translated at 100.0% (2394 of 2394 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/
2023-04-18 08:23:16 +00:00
Peter Chen
29028b872c Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (2394 of 2394 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/zh_Hant/
2023-04-18 08:23:16 +00:00
Vri
3a6dd3ff1f Translated using Weblate (German)
Currently translated at 99.9% (2393 of 2394 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/
2023-04-18 08:23:16 +00:00
Linerly
782c620981 Translated using Weblate (Indonesian)
Currently translated at 100.0% (2391 of 2391 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/id/
2023-04-18 08:23:16 +00:00
Jozef Gaal
14ec24c848 Translated using Weblate (Slovak)
Currently translated at 100.0% (2391 of 2391 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/sk/
2023-04-18 08:23:16 +00:00
Priit Jõerüüt
2ecb56c608 Translated using Weblate (Estonian)
Currently translated at 100.0% (2391 of 2391 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/et/
2023-04-18 08:23:16 +00:00
Ihor Hordiichuk
1fe81d6942 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (2391 of 2391 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/uk/
2023-04-18 08:23:16 +00:00
random
09ce3542e6 Translated using Weblate (Italian)
Currently translated at 100.0% (2391 of 2391 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/
2023-04-18 08:23:16 +00:00
Peter Chen
02bd6edc3e Translated using Weblate (Chinese (Traditional))
Currently translated at 99.9% (2390 of 2391 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/zh_Hant/
2023-04-18 08:23:16 +00:00
Vri
e4a68cae95 Translated using Weblate (German)
Currently translated at 100.0% (2391 of 2391 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/
2023-04-18 08:23:16 +00:00
Doug
0a7adcb0fd Merge pull request #7506 from RiotTranslateBot/weblate-riot-ios-riot-ios-dialogs
Translations update from Weblate
2023-04-18 09:23:12 +01:00
Nicolas Mauri
dc0ff11b0c Fix: add missing foreground color attribute 2023-04-17 15:53:36 +02:00
Peter Chen
533003e9f2 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (8 of 8 strings)

Translation: Element iOS/Element iOS (Dialogs)
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios-dialogs/zh_Hant/
2023-04-17 13:45:29 +00:00
aringenbach
be2abff9b1 Merge pull request #7500 from vector-im/aringenbach/7492_fix_user_suggestion_list_height_ios_16
Fix user suggestion list item height on iOS 16+
2023-04-17 15:45:23 +02:00
aringenbach
5036c845ac Fix user suggestion list item height on iOS 16+ 2023-04-17 14:44:17 +02:00
aringenbach
f79a455262 Merge pull request #7416 from vector-im/aringenbach/enable_rte_user_mentions
Enable user mentions in Rich Text Editor
2023-04-14 16:19:56 +02:00
Andy Uhnak
c29b226760 Prepare for new sprint 2023-04-12 17:38:47 +01:00
Andy Uhnak
1ea17355d6 Merge branch 'master' into develop 2023-04-12 17:38:43 +01:00
Andy Uhnak
8030f8ab9a Merge branch 'release/1.10.10/master' 2023-04-12 17:38:38 +01:00
Andy Uhnak
2e25046b3c finish version++ 2023-04-12 17:38:38 +01:00
Anderas
c858284e30 Merge pull request #7494 from vector-im/release/1.10.10/release
Release 1.10.10
2023-04-12 17:37:27 +01:00
Andy Uhnak
e3ace26c79 version++ 2023-04-12 16:53:26 +01:00
Andy Uhnak
e47ba982f1 changelog.d: Upgrade MatrixSDK version ([v0.26.7](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.26.7)). 2023-04-12 16:53:25 +01:00
Mauro
6eab1a79af Merge pull request #7491 from vector-im/mauroromito/fix_for_unsupported_audio_messages
Fix for unsupported audio messages
2023-04-12 17:15:32 +02:00
aringenbach
76e2aadc26 Merge branch 'develop' into aringenbach/enable_rte_user_mentions 2023-04-12 15:04:15 +02:00
aringenbach
0b00e9da83 Update changelog 2023-04-12 14:56:33 +02:00
aringenbach
46b39e739d Unit tests for insertPills and markdownLinks 2023-04-12 14:55:59 +02:00
Mauro Romito
177e1091b6 changelog 2023-04-12 14:45:59 +02:00
Mauro Romito
7e223a8ce9 we can now support more than just mp4 as audio messages 2023-04-12 14:43:52 +02:00
Anderas
c4096b5e15 Merge pull request #7485 from vector-im/andy/crypto_feature
Enable Rust Crypto for all users
2023-04-11 18:27:29 +01:00
Nicolas Mauri
2566e08c53 Merge pull request #7482 from vector-im/nimau/pills-custom-base-url
Fix: If a clientPermalinkBaseUrl is defined, we still have to support matrix.to links
2023-04-11 16:30:19 +02:00
Andy Uhnak
832ce9f150 Enable Rust Crypto for all users 2023-04-11 14:49:28 +01:00
aringenbach
434559488d Rename textDefaultFont to defaultFont and remove unnecessary definition in RoomInputToolbarView.h 2023-04-11 14:54:55 +02:00
aringenbach
67c768f8fc Bump composer version to 2.0.0 and fix PillAttachmentViewProvider 2023-04-11 14:45:44 +02:00
aringenbach
38ae3cd3a8 Merge branch 'develop' into aringenbach/enable_rte_user_mentions 2023-04-11 14:21:31 +02:00
Nicolas Mauri
33e6280f31 Fix: Continue to display pills for matrix.to permalinks if a custom permalinkBaseUrl is set. 2023-04-07 16:40:34 +02:00
Stefan Ceriu
2e4be8a4fe Pin Xcode version to 14.2. The app is currently failing ASC validation on using private symbols from Down. 2023-04-05 12:55:01 +03:00
Stefan Ceriu
f33b01424e Prepare for new sprint 2023-04-04 15:00:52 +03:00
Stefan Ceriu
adceff3690 Merge branch 'master' into develop 2023-04-04 15:00:50 +03:00
aringenbach
7be42deec3 Add changelog 2023-03-23 17:16:57 +01:00
aringenbach
c59701e5b9 Bump composer version to 1.4.0 2023-03-23 17:16:57 +01:00
aringenbach
9ea625e470 Update environment object setup and view model context wrapping to restore SwiftUI UI tests 2023-03-23 17:16:57 +01:00
aringenbach
b26e0ccea3 Fix wrong condition for highlight test 2023-03-23 17:16:57 +01:00
aringenbach
0c061edf60 Allow displaying UserSuggestionList without shadow 2023-03-23 17:16:57 +01:00
aringenbach
e29b40fdfc Clean WysiwygInputToolbarView code 2023-03-23 17:16:57 +01:00
aringenbach
1a6cebe7de Avoid crashing if data source is not ready when translating Pills 2023-03-23 17:16:57 +01:00
aringenbach
b9faccf6c1 Use PillProvider for RTE Pills creation 2023-03-23 17:16:57 +01:00
aringenbach
3b9530c065 Display user suggestion list in fullscreen mode with shared context from UserSuggestionCoordinator 2023-03-23 17:16:57 +01:00
aringenbach
845be40694 Fix broken constraint after using fullscreen mode 2023-03-23 17:16:57 +01:00
aringenbach
37a8aa5734 Update composer library to 1.3.0 and apply changes 2023-03-23 17:16:57 +01:00
aringenbach
24df7ca032 Always use preferred font for body 2023-03-23 17:16:57 +01:00
aringenbach
bb8d6bd4ac Bump to version 1.2.2 2023-03-23 17:16:57 +01:00
aringenbach
000d8465d0 Use textDefaultFont in all variants of the InputToolbarView 2023-03-23 17:16:57 +01:00
aringenbach
935e61e1bb Enable user mentions in Rich Text Editor 2023-03-23 17:16:57 +01:00
283 changed files with 7374 additions and 3401 deletions

View File

@@ -53,23 +53,10 @@ jobs:
contains(github.event.issue.labels.*.name, 'O-Frequent')) ||
contains(github.event.issue.labels.*.name, 'A11y'))
steps:
- uses: octokit/graphql-action@v2.x
id: add_to_project
- uses: actions/add-to-project@main
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:ID!,$contentid:ID!) {
addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
item {
id
}
}
}
projectid: ${{ env.PROJECT_ID }}
contentid: ${{ github.event.issue.node_id }}
env:
PROJECT_ID: "PVT_kwDOAM0swc0sUA"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
project-url: https://github.com/orgs/vector-im/projects/18
github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
add_product_issues_to_project:
name: X-Needs-Product to Design project board
@@ -77,138 +64,10 @@ jobs:
if: >
contains(github.event.issue.labels.*.name, 'X-Needs-Product')
steps:
- uses: octokit/graphql-action@v2.x
id: add_to_project
- uses: actions/add-to-project@main
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:ID!,$contentid:ID!) {
addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
item {
id
}
}
}
projectid: ${{ env.PROJECT_ID }}
contentid: ${{ github.event.issue.node_id }}
env:
PROJECT_ID: "PVT_kwDOAM0swc4AAg6N"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
Delight_issues_to_board:
name: Spaces issues to Delight project board
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'Team: Delight') ||
contains(github.event.issue.labels.*.name, 'Z-AppLayout')
steps:
- uses: octokit/graphql-action@v2.x
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:ID!,$contentid:ID!) {
addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
item {
id
}
}
}
projectid: ${{ env.PROJECT_ID }}
contentid: ${{ github.event.issue.node_id }}
env:
PROJECT_ID: "PVT_kwDOAM0swc1HvQ"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
move_voice-message_issues:
name: A-Voice Messages to voice message board
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'A-Voice Messages')
steps:
- uses: octokit/graphql-action@v2.x
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:ID!,$contentid:ID!) {
addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
item {
id
}
}
}
projectid: ${{ env.PROJECT_ID }}
contentid: ${{ github.event.issue.node_id }}
env:
PROJECT_ID: "PVT_kwDOAM0swc2KCw"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
move_message_bubble_issues:
name: A-Message-Bubbles to Message bubble board
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'A-Message-Bubbles')
steps:
- uses: octokit/graphql-action@v2.x
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:ID!,$contentid:ID!) {
addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
item {
id
}
}
}
projectid: ${{ env.PROJECT_ID }}
contentid: ${{ github.event.issue.node_id }}
env:
PROJECT_ID: "PVT_kwDOAM0swc3m-g"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
move_FTUE_issues:
name: Z-FTUE to FTUE board
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'Z-FTUE')
steps:
- uses: octokit/graphql-action@v2.x
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:ID!,$contentid:ID!) {
addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
item {
id
}
}
}
projectid: ${{ env.PROJECT_ID }}
contentid: ${{ github.event.issue.node_id }}
env:
PROJECT_ID: "PVT_kwDOAM0swc4AAqVx"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
move_WTF_issues:
name: Z-WTF to WTF board
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'Z-WTF')
steps:
- uses: octokit/graphql-action@v2.x
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:ID!,$contentid:ID!) {
addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
item {
id
}
}
}
projectid: ${{ env.PROJECT_ID }}
contentid: ${{ github.event.issue.node_id }}
env:
PROJECT_ID: "PVT_kwDOAM0swc4AArk0"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
project-url: https://github.com/orgs/vector-im/projects/28
github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
ex_plorers:
name: Add labelled issues to X-Plorer project
@@ -216,23 +75,10 @@ jobs:
if: >
contains(github.event.issue.labels.*.name, 'Team: Element X Feature')
steps:
- uses: octokit/graphql-action@v2.x
id: add_to_project
- uses: actions/add-to-project@main
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:ID!,$contentid:ID!) {
addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
item {
id
}
}
}
projectid: ${{ env.PROJECT_ID }}
contentid: ${{ github.event.issue.node_id }}
env:
PROJECT_ID: "PVT_kwDOAM0swc4ALoFY"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
project-url: https://github.com/orgs/vector-im/projects/73
github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
ps_features1:
name: Add labelled issues to PS features team 1
@@ -245,23 +91,10 @@ jobs:
(contains(github.event.issue.labels.*.name, 'A-Session-Mgmt') &&
contains(github.event.issue.labels.*.name, 'A-User-Settings'))
steps:
- uses: octokit/graphql-action@v2.x
id: add_to_project
- uses: actions/add-to-project@main
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:ID!,$contentid:ID!) {
addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
item {
id
}
}
}
projectid: ${{ env.PROJECT_ID }}
contentid: ${{ github.event.issue.node_id }}
env:
PROJECT_ID: "PVT_kwDOAM0swc4AHJKF"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
project-url: https://github.com/orgs/vector-im/projects/56
github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
ps_features2:
name: Add labelled issues to PS features team 2
@@ -270,23 +103,10 @@ jobs:
contains(github.event.issue.labels.*.name, 'A-DM-Start') ||
contains(github.event.issue.labels.*.name, 'A-Broadcast')
steps:
- uses: octokit/graphql-action@v2.x
id: add_to_project
- uses: actions/add-to-project@main
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:ID!,$contentid:ID!) {
addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
item {
id
}
}
}
projectid: ${{ env.PROJECT_ID }}
contentid: ${{ github.event.issue.node_id }}
env:
PROJECT_ID: "PVT_kwDOAM0swc4AHJKd"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
project-url: https://github.com/orgs/vector-im/projects/58
github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
ps_features3:
name: Add labelled issues to PS features team 3
@@ -294,23 +114,10 @@ jobs:
if: >
contains(github.event.issue.labels.*.name, 'A-Rich-Text-Editor')
steps:
- uses: octokit/graphql-action@v2.x
id: add_to_project
- uses: actions/add-to-project@main
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:ID!,$contentid:ID!) {
addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
item {
id
}
}
}
projectid: ${{ env.PROJECT_ID }}
contentid: ${{ github.event.issue.node_id }}
env:
PROJECT_ID: "PVT_kwDOAM0swc4AHJKW"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
project-url: https://github.com/orgs/vector-im/projects/57
github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
voip:
name: Add labelled issues to VoIP project board
@@ -318,20 +125,7 @@ jobs:
if: >
contains(github.event.issue.labels.*.name, 'Team: VoIP')
steps:
- uses: octokit/graphql-action@v2.x
id: add_to_project
- uses: actions/add-to-project@main
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:ID!,$contentid:ID!) {
addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
item {
id
}
}
}
projectid: ${{ env.PROJECT_ID }}
contentid: ${{ github.event.issue.node_id }}
env:
PROJECT_ID: "PVT_kwDOAM0swc4ABMIk"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
project-url: https://github.com/orgs/vector-im/projects/41
github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}

View File

@@ -0,0 +1,30 @@
//
// Copyright 2023 Vector Creations 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.
//
// Configuration settings file format documentation can be found at:
// https://help.apple.com/xcode/#/dev745c5c974
#include "Config/AppIdentifiers.xcconfig"
#include "Config/AppVersion.xcconfig"
PRODUCT_NAME = BroadcastUploadExtension
PRODUCT_BUNDLE_IDENTIFIER = $(BROADCAST_UPLOAD_EXTENSION_BUNDLE_IDENTIFIER)
INFOPLIST_FILE = BroadcastUploadExtension/SupportingFiles/Info.plist
CODE_SIGN_ENTITLEMENTS = BroadcastUploadExtension/SupportingFiles/BroadcastUploadExtension.entitlements
SKIP_INSTALL = YES

View File

@@ -1,5 +1,5 @@
//
// Copyright 2021 New Vector Ltd
//
// Copyright 2020 Vector Creations Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -14,8 +14,8 @@
// limitations under the License.
//
import Foundation
// Configuration settings file format documentation can be found at:
// https://help.apple.com/xcode/#/dev745c5c974
protocol UserSuggestionViewModelProtocol {
var completion: ((UserSuggestionViewModelResult) -> Void)? { get set }
}
#include "Common.xcconfig"
#include "Pods/Target Support Files/Pods-RiotPods-BroadcastUploadExtension/Pods-RiotPods-BroadcastUploadExtension.debug.xcconfig"

View File

@@ -0,0 +1,26 @@
//
// Copyright 2020 Vector Creations 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.
//
// Configuration settings file format documentation can be found at:
// https://help.apple.com/xcode/#/dev745c5c974
#include "Common.xcconfig"
#include "Pods/Target Support Files/Pods-RiotPods-BroadcastUploadExtension/Pods-RiotPods-BroadcastUploadExtension.release.xcconfig"
PROVISIONING_PROFILE = $(BROADCAST_UPLOAD_EXTENSION_PROVISIONING_PROFILE)
PROVISIONING_PROFILE_SPECIFIER = $(BROADCAST_UPLOAD_EXTENSION_PROVISIONING_PROFILE_SPECIFIER)
COPY_PHASE_STRIP = NO

View File

@@ -0,0 +1,41 @@
//
// License from the original repository:
// https://github.com/jitsi/jitsi-meet-sdk-samples/blob/master/LICENSE
//
// Atomic.swift
// Broadcast Extension
//
// Created by Maksym Shcheglov.
// https://www.onswiftwings.com/posts/atomic-property-wrapper/
//
import Foundation
@propertyWrapper
struct Atomic<Value> {
private var value: Value
private let lock = NSLock()
init(wrappedValue value: Value) {
self.value = value
}
var wrappedValue: Value {
get { load() }
set { store(newValue: newValue) }
}
func load() -> Value {
lock.lock()
defer { lock.unlock() }
return value
}
mutating func store(newValue: Value) {
lock.lock()
defer { lock.unlock() }
value = newValue
}
}

View File

@@ -0,0 +1,33 @@
//
// License from the original repository:
// https://github.com/jitsi/jitsi-meet-sdk-samples/blob/master/LICENSE
//
// DarwinNotificationCenter.swift
// Broadcast Extension
//
// Created by Alex-Dan Bumbu on 23/03/2021.
// Copyright © 2021 8x8, Inc. All rights reserved.
//
import Foundation
enum DarwinNotification: String {
case broadcastStarted = "iOS_BroadcastStarted"
case broadcastStopped = "iOS_BroadcastStopped"
}
class DarwinNotificationCenter {
static let shared = DarwinNotificationCenter()
private let notificationCenter: CFNotificationCenter
init() {
notificationCenter = CFNotificationCenterGetDarwinNotifyCenter()
}
func postNotification(_ name: DarwinNotification) {
CFNotificationCenterPostNotification(notificationCenter, CFNotificationName(rawValue: name.rawValue as CFString), nil, nil, true)
}
}

View File

@@ -0,0 +1,125 @@
//
// License from the original repository:
// https://github.com/jitsi/jitsi-meet-sdk-samples/blob/master/LICENSE
//
// SampleHandler.swift
// Broadcast Extension
//
// Created by Alex-Dan Bumbu on 04.06.2021.
//
import ReplayKit
import MatrixSDK
private enum Constants {
// the App Group ID value that the app and the broadcast extension targets are setup with. It differs for each app.
static let appGroupIdentifier = BuildSettings.applicationGroupIdentifier
}
class SampleHandler: RPBroadcastSampleHandler {
private var clientConnection: SocketConnection?
private var uploader: SampleUploader?
private var frameCount: Int = 0
private var socketFilePath: String {
let sharedContainer = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: Constants.appGroupIdentifier)
return sharedContainer?.appendingPathComponent("rtc_SSFD").path ?? ""
}
override init() {
super.init()
setupLogger()
if let connection = SocketConnection(filePath: socketFilePath) {
clientConnection = connection
setupConnection()
uploader = SampleUploader(connection: connection)
}
}
override func broadcastStarted(withSetupInfo setupInfo: [String: NSObject]?) {
// User has requested to start the broadcast. Setup info from the UI extension can be supplied but optional.
frameCount = 0
DarwinNotificationCenter.shared.postNotification(.broadcastStarted)
openConnection()
}
override func broadcastPaused() {
// User has requested to pause the broadcast. Samples will stop being delivered.
}
override func broadcastResumed() {
// User has requested to resume the broadcast. Samples delivery will resume.
}
override func broadcastFinished() {
// User has requested to finish the broadcast.
DarwinNotificationCenter.shared.postNotification(.broadcastStopped)
clientConnection?.close()
}
override func processSampleBuffer(_ sampleBuffer: CMSampleBuffer, with sampleBufferType: RPSampleBufferType) {
switch sampleBufferType {
case RPSampleBufferType.video:
// very simple mechanism for adjusting frame rate by using every third frame
frameCount += 1
if frameCount % 3 == 0 {
uploader?.send(sample: sampleBuffer)
}
default:
break
}
}
}
private extension SampleHandler {
func setupConnection() {
clientConnection?.didClose = { [weak self] error in
MXLog.error("client connection did close", context: error)
if let error = error {
self?.finishBroadcastWithError(error)
} else {
// the displayed failure message is more user friendly when using NSError instead of Error
let JMScreenSharingStopped = 10001
let customError = NSError(domain: RPRecordingErrorDomain, code: JMScreenSharingStopped, userInfo: [NSLocalizedDescriptionKey: "Screen sharing stopped"])
self?.finishBroadcastWithError(customError)
}
}
}
func openConnection() {
let queue = DispatchQueue(label: "broadcast.connectTimer")
let timer = DispatchSource.makeTimerSource(queue: queue)
timer.schedule(deadline: .now(), repeating: .milliseconds(100), leeway: .milliseconds(500))
timer.setEventHandler { [weak self] in
guard self?.clientConnection?.open() == true else {
return
}
timer.cancel()
}
timer.resume()
}
func setupLogger() {
let configuration = MXLogConfiguration()
configuration.logLevel = .verbose
configuration.maxLogFilesCount = 100
configuration.logFilesSizeLimit = 10 * 1024 * 1024; // 10MB
configuration.subLogName = "broadcastUploadExtension"
if isatty(STDERR_FILENO) == 0 {
configuration.redirectLogsToFiles = true
}
MXLog.configure(configuration)
}
}

View File

@@ -0,0 +1,151 @@
//
// License from the original repository:
// https://github.com/jitsi/jitsi-meet-sdk-samples/blob/master/LICENSE
//
// SampleUploader.swift
// Broadcast Extension
//
// Created by Alex-Dan Bumbu on 22/03/2021.
// Copyright © 2021 8x8, Inc. All rights reserved.
//
import Foundation
import ReplayKit
import MatrixSDK
private enum Constants {
static let bufferMaxLength = 10240
}
class SampleUploader {
private static var imageContext = CIContext(options: nil)
@Atomic private var isReady = false
private var connection: SocketConnection
private var dataToSend: Data?
private var byteIndex = 0
private let serialQueue: DispatchQueue
init(connection: SocketConnection) {
self.connection = connection
self.serialQueue = DispatchQueue(label: "org.jitsi.meet.broadcast.sampleUploader")
setupConnection()
}
@discardableResult func send(sample buffer: CMSampleBuffer) -> Bool {
guard isReady else {
return false
}
isReady = false
dataToSend = prepare(sample: buffer)
byteIndex = 0
serialQueue.async { [weak self] in
self?.sendDataChunk()
}
return true
}
}
private extension SampleUploader {
func setupConnection() {
connection.didOpen = { [weak self] in
self?.isReady = true
}
connection.streamHasSpaceAvailable = { [weak self] in
self?.serialQueue.async {
if let success = self?.sendDataChunk() {
self?.isReady = !success
}
}
}
}
@discardableResult func sendDataChunk() -> Bool {
guard let dataToSend = dataToSend else {
return false
}
var bytesLeft = dataToSend.count - byteIndex
var length = bytesLeft > Constants.bufferMaxLength ? Constants.bufferMaxLength : bytesLeft
length = dataToSend[byteIndex..<(byteIndex + length)].withUnsafeBytes {
guard let ptr = $0.bindMemory(to: UInt8.self).baseAddress else {
return 0
}
return connection.writeToStream(buffer: ptr, maxLength: length)
}
if length > 0 {
byteIndex += length
bytesLeft -= length
if bytesLeft == 0 {
self.dataToSend = nil
byteIndex = 0
}
} else {
MXLog.error("writeBufferToStream failure")
}
return true
}
func prepare(sample buffer: CMSampleBuffer) -> Data? {
guard let imageBuffer = CMSampleBufferGetImageBuffer(buffer) else {
MXLog.error("image buffer not available")
return nil
}
CVPixelBufferLockBaseAddress(imageBuffer, .readOnly)
let scaleFactor = 2.0
let width = CVPixelBufferGetWidth(imageBuffer)/Int(scaleFactor)
let height = CVPixelBufferGetHeight(imageBuffer)/Int(scaleFactor)
let orientation = CMGetAttachment(buffer, key: RPVideoSampleOrientationKey as CFString, attachmentModeOut: nil)?.uintValue ?? 0
let scaleTransform = CGAffineTransform(scaleX: CGFloat(1.0/scaleFactor), y: CGFloat(1.0/scaleFactor))
let bufferData = self.jpegData(from: imageBuffer, scale: scaleTransform)
CVPixelBufferUnlockBaseAddress(imageBuffer, .readOnly)
guard let messageData = bufferData else {
MXLog.error("corrupted image buffer")
return nil
}
let httpResponse = CFHTTPMessageCreateResponse(nil, 200, nil, kCFHTTPVersion1_1).takeRetainedValue()
CFHTTPMessageSetHeaderFieldValue(httpResponse, "Content-Length" as CFString, String(messageData.count) as CFString)
CFHTTPMessageSetHeaderFieldValue(httpResponse, "Buffer-Width" as CFString, String(width) as CFString)
CFHTTPMessageSetHeaderFieldValue(httpResponse, "Buffer-Height" as CFString, String(height) as CFString)
CFHTTPMessageSetHeaderFieldValue(httpResponse, "Buffer-Orientation" as CFString, String(orientation) as CFString)
CFHTTPMessageSetBody(httpResponse, messageData as CFData)
let serializedMessage = CFHTTPMessageCopySerializedMessage(httpResponse)?.takeRetainedValue() as Data?
return serializedMessage
}
func jpegData(from buffer: CVPixelBuffer, scale scaleTransform: CGAffineTransform) -> Data? {
let image = CIImage(cvPixelBuffer: buffer).transformed(by: scaleTransform)
guard let colorSpace = image.colorSpace else {
return nil
}
let options: [CIImageRepresentationOption: Float] = [kCGImageDestinationLossyCompressionQuality as CIImageRepresentationOption: 1.0]
return SampleUploader.imageContext.jpegRepresentation(of: image, colorSpace: colorSpace, options: options)
}
}

View File

@@ -0,0 +1,203 @@
//
// License from the original repository:
// https://github.com/jitsi/jitsi-meet-sdk-samples/blob/master/LICENSE
//
// SocketConnection.swift
// Broadcast Extension
//
// Created by Alex-Dan Bumbu on 22/03/2021.
// Copyright © 2021 Atlassian Inc. All rights reserved.
//
import Foundation
import MatrixSDK
class SocketConnection: NSObject {
var didOpen: (() -> Void)?
var didClose: ((Error?) -> Void)?
var streamHasSpaceAvailable: (() -> Void)?
private let filePath: String
private var socketHandle: Int32 = -1
private var address: sockaddr_un?
private var inputStream: InputStream?
private var outputStream: OutputStream?
private var networkQueue: DispatchQueue?
private var shouldKeepRunning = false
init?(filePath path: String) {
filePath = path
socketHandle = Darwin.socket(AF_UNIX, SOCK_STREAM, 0)
guard socketHandle != -1 else {
MXLog.error("failure: create socket")
return nil
}
}
func open() -> Bool {
MXLog.info("open socket connection")
guard FileManager.default.fileExists(atPath: filePath) else {
MXLog.error("failure: socket file missing")
return false
}
guard setupAddress() == true else {
return false
}
guard connectSocket() == true else {
return false
}
setupStreams()
inputStream?.open()
outputStream?.open()
return true
}
func close() {
unscheduleStreams()
inputStream?.delegate = nil
outputStream?.delegate = nil
inputStream?.close()
outputStream?.close()
inputStream = nil
outputStream = nil
}
func writeToStream(buffer: UnsafePointer<UInt8>, maxLength length: Int) -> Int {
outputStream?.write(buffer, maxLength: length) ?? 0
}
}
extension SocketConnection: StreamDelegate {
func stream(_ aStream: Stream, handle eventCode: Stream.Event) {
switch eventCode {
case .openCompleted:
MXLog.info("client stream open completed")
if aStream == outputStream {
didOpen?()
}
case .hasBytesAvailable:
if aStream == inputStream {
var buffer: UInt8 = 0
let numberOfBytesRead = inputStream?.read(&buffer, maxLength: 1)
if numberOfBytesRead == 0 && aStream.streamStatus == .atEnd {
MXLog.info("server socket closed")
close()
notifyDidClose(error: nil)
}
}
case .hasSpaceAvailable:
if aStream == outputStream {
streamHasSpaceAvailable?()
}
case .errorOccurred:
MXLog.error("client stream error occured", context: aStream.streamError)
close()
notifyDidClose(error: aStream.streamError)
default:
break
}
}
}
private extension SocketConnection {
func setupAddress() -> Bool {
var addr = sockaddr_un()
guard filePath.count < MemoryLayout.size(ofValue: addr.sun_path) else {
MXLog.error("failure: fd path is too long")
return false
}
_ = withUnsafeMutablePointer(to: &addr.sun_path.0) { ptr in
filePath.withCString {
strncpy(ptr, $0, filePath.count)
}
}
address = addr
return true
}
func connectSocket() -> Bool {
guard var addr = address else {
return false
}
let status = withUnsafePointer(to: &addr) { ptr in
ptr.withMemoryRebound(to: sockaddr.self, capacity: 1) {
Darwin.connect(socketHandle, $0, socklen_t(MemoryLayout<sockaddr_un>.size))
}
}
guard status == noErr else {
MXLog.error("connect socket failure", context: status)
return false
}
return true
}
func setupStreams() {
var readStream: Unmanaged<CFReadStream>?
var writeStream: Unmanaged<CFWriteStream>?
CFStreamCreatePairWithSocket(kCFAllocatorDefault, socketHandle, &readStream, &writeStream)
inputStream = readStream?.takeRetainedValue()
inputStream?.delegate = self
inputStream?.setProperty(kCFBooleanTrue, forKey: Stream.PropertyKey(kCFStreamPropertyShouldCloseNativeSocket as String))
outputStream = writeStream?.takeRetainedValue()
outputStream?.delegate = self
outputStream?.setProperty(kCFBooleanTrue, forKey: Stream.PropertyKey(kCFStreamPropertyShouldCloseNativeSocket as String))
scheduleStreams()
}
func scheduleStreams() {
shouldKeepRunning = true
networkQueue = DispatchQueue.global(qos: .userInitiated)
networkQueue?.async { [weak self] in
self?.inputStream?.schedule(in: .current, forMode: .common)
self?.outputStream?.schedule(in: .current, forMode: .common)
RunLoop.current.run()
var isRunning = false
repeat {
isRunning = self?.shouldKeepRunning ?? false && RunLoop.current.run(mode: .default, before: .distantFuture)
} while (isRunning)
}
}
func unscheduleStreams() {
networkQueue?.sync { [weak self] in
self?.inputStream?.remove(from: .current, forMode: .common)
self?.outputStream?.remove(from: .current, forMode: .common)
}
shouldKeepRunning = false
}
func notifyDidClose(error: Error?) {
if didClose != nil {
didClose?(error)
}
}
}

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.application-groups</key>
<array>
<string>$(APPLICATION_GROUP_IDENTIFIER)</string>
</array>
</dict>
</plist>

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundlePackageType</key>
<string>XPC!</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleDisplayName</key>
<string>$(BUNDLE_DISPLAY_NAME)</string>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>NSExtension</key>
<dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.broadcast-services-upload</string>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).SampleHandler</string>
<key>RPBroadcastProcessMode</key>
<string>RPBroadcastProcessModeSampleBuffer</string>
</dict>
</dict>
</plist>

View File

@@ -0,0 +1,42 @@
name: BroadcastUploadExtension
schemes:
BroadcastUploadExtension:
analyze:
config: Debug
archive:
config: Release
build:
targets:
BroadcastUploadExtension:
- running
- testing
- profiling
- analyzing
- archiving
profile:
config: Release
run:
askForAppToLaunch: true
config: Debug
debugEnabled: false
disableMainThreadChecker: true
launchAutomaticallySubstyle: 2
test:
config: Debug
disableMainThreadChecker: true
targets:
BroadcastUploadExtension:
platform: iOS
type: app-extension
configFiles:
Debug: Debug.xcconfig
Release: Release.xcconfig
sources:
- path: .
- path: ../Config/BuildSettings.swift
- path: ../Riot/Categories/Bundle.swift
- path: ../Riot/Modules/Room/TimelineCells/Styles/RoomTimelineStyleIdentifier.swift

View File

@@ -1,3 +1,92 @@
## Changes in 1.10.14 (2023-06-21)
🙌 Improvements
- Upgrade MatrixSDK version ([v0.26.12](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.26.12)).
## Changes in 1.10.13 (2023-06-13)
✨ Features
- Increase max. length of voice message recordings to 5m ([#7582](https://github.com/vector-im/element-ios/pull/7582))
- Broadcast Upload Extension added to the app targets to allow Jitsi screen sharing feature. ([#7566](https://github.com/vector-im/element-ios/issues/7566))
🙌 Improvements
- Upgrade MatrixSDK version ([v0.26.11](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.26.11)).
- Prompt the user when the invited MatrixId is not recognized ([#7558](https://github.com/vector-im/element-ios/issues/7558))
- MSC3987 implementation: the 'dont_notify' action for a push_rule is now deprecated and replaced by an empty action list. ([#7576](https://github.com/vector-im/element-ios/issues/7576))
🐛 Bugfixes
- Device manager: fix offline state for user's sessions overview. ([#7562](https://github.com/vector-im/element-ios/pull/7562))
- Prevents user avatar from disappearing due to incorrect width. ([#7587](https://github.com/vector-im/element-ios/pull/7587))
- App crashes when we make audio and video calls ([#7529](https://github.com/vector-im/element-ios/issues/7529))
- Timeline: Room creation intro cell now correctly adjusts to light / dark theme changes. ([#7554](https://github.com/vector-im/element-ios/issues/7554))
- Labs: Fix RTE sometimes inserting characters in wrong locations after multiple new lines ([#7570](https://github.com/vector-im/element-ios/issues/7570))
- Labs: RTE: Fix a crash when creating a new direct chat ([#7577](https://github.com/vector-im/element-ios/issues/7577))
- Fixed crashes when mentioning users without display names ([#7579](https://github.com/vector-im/element-ios/issues/7579))
## Changes in 1.10.12 (2023-05-16)
✨ Features
- Add composer suggestions for slash commands ([#7493](https://github.com/vector-im/element-ios/issues/7493))
🙌 Improvements
- Crypto: Deprecate MXLegacyCrypto ([#7508](https://github.com/vector-im/element-ios/pull/7508))
- Add a flag in the build settings to force the user to define a homeserver instead of using the default one. ([#7541](https://github.com/vector-im/element-ios/pull/7541))
- Upgrade MatrixSDK version ([v0.26.10](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.26.10)).
- Add an audio alert when the voice broadcast recording is automatically paused ([#7504](https://github.com/vector-im/element-ios/issues/7504))
- Timeline: Remove the matrix ID displayed when someone has changed its display name. ([#7517](https://github.com/vector-im/element-ios/issues/7517))
🐛 Bugfixes
- Fix an issue where the Secrets Reset screen would open twice. ([#7404](https://github.com/vector-im/element-ios/pull/7404))
- Make sure to use the chosen language for the VoiceOver voice too. ([#7493](https://github.com/vector-im/element-ios/pull/7493))
- Fix the position of the send confirmation icon. ([#7512](https://github.com/vector-im/element-ios/pull/7512))
- Disable accessibility for emojis during session verification. ([#7521](https://github.com/vector-im/element-ios/pull/7521))
- Fix accessibility when entering the PIN to unlock the app. ([#7522](https://github.com/vector-im/element-ios/pull/7522))
- Fix voiceover order of room creation header and message composer. ([#7543](https://github.com/vector-im/element-ios/pull/7543))
- Fix: The last event description text color now matches the active theme. ([#7545](https://github.com/vector-im/element-ios/pull/7545))
- Fix mention pills display in thread list ([#7322](https://github.com/vector-im/element-ios/issues/7322))
- Poll: The timeline sometimes displayed closed polls in the wrong order. ([#7497](https://github.com/vector-im/element-ios/issues/7497))
- Fix a flickering issue when the timeline datasource is reloaded. ([#7523](https://github.com/vector-im/element-ios/issues/7523))
- Fix the position of the marker highlighting an event. ([#7526](https://github.com/vector-im/element-ios/issues/7526))
- Fix application crashing when opening a thread with RTE enabled ([#7530](https://github.com/vector-im/element-ios/issues/7530))
- Labs: Rich Text Editor: Fix partial text messages not being saved for each room ([#7535](https://github.com/vector-im/element-ios/issues/7535))
## Changes in 1.10.11 (2023-04-18)
🙌 Improvements
- Upgrade MatrixSDK version ([v0.26.9](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.26.9)).
- Labs: Rich Text Editor: Integrate version 2.0.0 with mention Pills support. ([#7442](https://github.com/vector-im/element-ios/issues/7442))
🐛 Bugfixes
- Continue to display pills for matrix.to permalinks if a custom permalinkBaseUrl is set. ([#7482](https://github.com/vector-im/element-ios/pull/7482))
- Add a foreground color attribute for the unformattable event error message. ([#7501](https://github.com/vector-im/element-ios/pull/7501))
- Fixed a bug that prevented audio messages that were not .mp4 to be played in the timeline ([#7451](https://github.com/vector-im/element-ios/issues/7451))
- Fix user suggestion list item height on iOS 16+ ([#7492](https://github.com/vector-im/element-ios/issues/7492))
🧱 Build
- Pinned used Xcode version to 14.2 as newer version fail ASC validation ([#7476](https://github.com/vector-im/element-ios/issues/7476))
## Changes in 1.10.10 (2023-04-12)
🙌 Improvements
- Crypto: Enable Rust Crypto for all users ([#7485](https://github.com/vector-im/element-ios/pull/7485))
- Upgrade MatrixSDK version ([v0.26.7](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.26.7)).
## Changes in 1.10.9 (2023-04-04)
🙌 Improvements

View File

@@ -1,4 +1,65 @@
Changes in BWI project 2.5.0 (2023-05-09)
Changes in BWI project 2.8.0 (2023-08-03)
===================================================
Upstream merge ✨:
- v1.10.14
Features ✨:
- New show participants toggle for polls (#4393)
Improvements 🙌:
- Migration progress information (#4905)
- Additional information for maintance (#4295)
- Poll history information (#4484)
- Notification times (#3580)
Bugfix 🐛:
Translations 🗣 :
SDK API changes ⚠️:
Build 🧱:
Changes in BWI project 2.7.0 (2023-07-04)
===================================================
Upstream merge ✨:
- v1.10.12
Features ✨:
- New show participants toggle for polls (#4393)
Improvements 🙌:
- Roomavatar can now be deleted (#4743)
- Remove "black" theme (#4744)
- Open links in system browser (#1678)
- Add imprint (#4682)
- Text changes for DM creation (#4736)
- Add accessibility statement (#4772)
- Matomo tracking of poll creation (#4795)
- Matomo tracking of voice messages (#4795)
- Matomo tracking of forwarding messages (#4795)
Bugfix 🐛:
- Disable logout when there is no internet connection (#3539)
- Disable permalink sharing for private rooms (#4390)
- Fix manual verification (#4710)
- Fix QR code scanning (#4748)
- Show app logo in pin code screen (#4828)
- Update "all chats" filter on logout/login (#4573)
Translations 🗣 :
- English translations passphrase (#4706)
SDK API changes ⚠️:
Build 🧱:
Changes in BWI project 2.6.0 (2023-05-09)
===================================================
Upstream merge ✨:

View File

@@ -37,3 +37,6 @@ SHARE_EXTENSION_PROVISIONING_PROFILE = 8c797ca0-0440-49bd-be8d-11d761152995
SIRI_INTENTS_PROVISIONING_PROFILE_SPECIFIER = "Vector Siri Intents: App Store"
SIRI_INTENTS_PROVISIONING_PROFILE = 1690e81a-5ad3-4d99-b578-02693579be71
BROADCAST_UPLOAD_EXTENSION_PROVISIONING_PROFILE_SPECIFIER = "Vector Broadcast Upload Extension: App Store"
BROADCAST_UPLOAD_EXTENSION_PROVISIONING_PROFILE = c86239f4-0d3a-47f4-a5f2-9f4763c42b5d

View File

@@ -16,5 +16,5 @@
//
// Version
MARKETING_VERSION = 2.6.0
MARKETING_VERSION = 2.8.0
CURRENT_PROJECT_VERSION = 20220714163152

View File

@@ -124,6 +124,11 @@ class BWIBuildSettings: NSObject {
var bwiUserLabelParticipantSorting = true
var bwiShowClosedPolls = true
var bwiPollShowParticipantsToggle = true
var bwiPollVisibleVotes = 5
var bwiPollParticipantsInHistory = true
var bwiShowThreads = false
var bwiShowRoomCreationSectionFooter = false
@@ -185,7 +190,17 @@ class BWIBuildSettings: NSObject {
"4d5b6dcf02396274be58a69c4bbeba175b529f6b19c504fc99a37892ee1cf0b5",
"0d157119821bd9d76ac4f24c7f14f56e6bb5b766a6d5ee7dad6634420e79271a",
"e3573fe09d518cce80cececedf80f8e0020cbc150f22db8b64827bff2e27abd9",
"b76a62ccd8ea70d01c3a35ec3839e49ed2c83c8e3276f40a1b2c2cdf7cd77d01"
"b76a62ccd8ea70d01c3a35ec3839e49ed2c83c8e3276f40a1b2c2cdf7cd77d01",
"4a610a4d5fd3d8a1e1fd5669abdf1e0c5f7f5ff0c6b559e0f360cfa092ecb115",
"32752f6d21f3005587941415cd64812ee28c19e6e01ed307edf9ddf4f6a91583",
"704c6eaa107b13ef0694eb7ddd041bb6f595b53670a2e0c3c16e199947a9e013",
"6921f031357cf63fb8538d9a1d1971efae95899907fdbf05a05082b6d1a6d0fb",
"9f960fc663f5eaae67eecff75b131dea130b3ab1cf889c45fc74c688a48aea30",
"160c35279484a027031b131183f3f203b1166306bab214355b00cf28502bce11",
"d5a7298dde23aa0269c4cbd3b2a543e6ede94ce78fc20e4bfb888eb6057b5c52",
"00136d830dd2acd5047efcf8419e939ef7ef97a84bef1930df86aace3f855265",
"64cbbeea37237814445b35c941d010b9d5d024e4c584a476864b00c7c9909bce",
"e79f4ce0f3c2772b45fd492a9c11e4e10e869ca21af68f13ff48c9c3bbd446ea"
]
// use a different badge color if the user was mentioned in a room
@@ -436,8 +451,9 @@ class BWIBuildSettings: NSObject {
var authScreenShowTestServerOptions = true
var authScreenShowSocialLoginSection = false
// MARK: - Cross-signing (bwi=true)
var disableSelfUserVerification = false
// MARK: - Self Verification not crosssigning (bwi=true)
var disableSelfUserVerification = true
var disableCrosssigning = false
var additionalSelfVerfificationAlert = false
var showNoOtherDeviceError = false
@@ -489,7 +505,7 @@ class BWIBuildSettings: NSObject {
var passwordIndicatorOnLogin = true
// MARK: Displays the element base version on the settings screen
var elementBaseVersion = "1.10.9"
var elementBaseVersion = "1.10.14"
var showElementBaseVersion = true
@@ -600,6 +616,7 @@ class BWIBuildSettings: NSObject {
// MARK: - Maintenance
var enableMaintenanceInfoOnWelcomeScreen = false
var showMaintenanceInfoMessageType = false
// MARK: User Search
var sortUserSearchResultsAlphabetically = true
@@ -617,6 +634,22 @@ class BWIBuildSettings: NSObject {
// MARK: Rust Encryption
var useRustEncryption = false
// MARK: Color Theme
var useNewBumColors = false
// MARK: Sessions Manager
var enableNewSessionManagerByDefault = false
// MARK: Accessibility declaration
// bwi flag for showing accessibility declaration on login screen and in settings
var bwiShowAccessibilityDeclaration = false
// internal markdown file for accessibility declaration in en and de.
var accessibilityDeclarationFileDe = ""
var accessibilityDeclarationFileEn = ""
// MARK: Voice Broadcast
var enableLabFeatureVoiceBroadcasts = false
// MARK: WYSIWYG
var enableLabFeatureWYSIWYG = false
}

View File

@@ -20,6 +20,7 @@ import Foundation
extension BWIBuildSettings {
func overrideTargetSpecificSettings() {
useNewBumColors = true
secondaryAppName = "BundesMessenger"
settingsScreenShowLabSettings = true
authScreenShowRegister = true
@@ -32,6 +33,11 @@ extension BWIBuildSettings {
bwiLocationShareButtonVisible = false
bwiLoginFlowLayout = false
useRustEncryption = true
bwiNotificationTimes = true
enableLabFeatureVoiceBroadcasts = true
enableNewSessionManagerByDefault = true
enableLabFeatureWYSIWYG = true
showMaintenanceInfoMessageType = true
}
}

View File

@@ -0,0 +1,39 @@
//
// Copyright 2021 Vector Creations 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.
//
// App identity
BUNDLE_DISPLAY_NAME = BuM-Open
BASE_BUNDLE_IDENTIFIER = de.bwi.messenger-open
APPLICATION_GROUP_IDENTIFIER = group.de.messenger-open
APPLICATION_SCHEME = element
// Team
DEVELOPMENT_TEAM = Q111Q11QQ1
// Provisioning profiles
RIOT_PROVISIONING_PROFILE_SPECIFIER = Vector App Store
RIOT_PROVISIONING_PROFILE = 7579fa6f-9887-415e-90fc-2c7acd8812e6
NSE_PROVISIONING_PROFILE_SPECIFIER = "Vector NSE: App Store"
NSE_PROVISIONING_PROFILE = e73107b2-1bfe-4615-be3e-39fd4dcb2af0
SHARE_EXTENSION_PROVISIONING_PROFILE_SPECIFIER = "Vector Share Extension: App Store"
SHARE_EXTENSION_PROVISIONING_PROFILE = 8c797ca0-0440-49bd-be8d-11d761152995
SIRI_INTENTS_PROVISIONING_PROFILE_SPECIFIER = "Vector Siri Intents: App Store"
SIRI_INTENTS_PROVISIONING_PROFILE = 1690e81a-5ad3-4d99-b578-02693579be71

View File

@@ -0,0 +1,34 @@
//
/*
* Copyright (c) 2023 BWI GmbH
*
* 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 Foundation
extension BWIBuildSettings {
func overrideTargetSpecificSettings() {
secondaryAppName = "BundesMessenger"
locationSharingEnabled = false
bwiLocationShareButtonVisible = false
bwiLoginFlowLayout = false
authScreenShowTestServerOptions = false
enableNewSessionManagerByDefault = true
bwiEnableLoginProtection = false
}
}

View File

@@ -25,7 +25,7 @@ extension BWIBuildSettings {
bwiLocationShareButtonVisible = false
bwiLoginFlowLayout = false
authScreenShowTestServerOptions = false
bwiNotificationTimes = true
enableNewSessionManagerByDefault = true
}

View File

@@ -98,10 +98,15 @@ final class BuildSettings: NSObject {
// MARK: - Server configuration
// Default servers proposed on the authentication screen
/// Force the user to set a homeserver instead of using the default one
static let forceHomeserverSelection = false
/// Default server proposed on the authentication screen
static let serverConfigDefaultHomeserverUrlString = "https://matrix.org"
static let serverConfigDefaultIdentityServerUrlString = "https://vector.im"
/// Default identity server
static let serverConfigDefaultIdentityServerUrlString = "https://vector.im"
static let serverConfigSygnalAPIUrlString = "https://matrix.org/_matrix/push/v1/notify"

View File

@@ -91,8 +91,7 @@ class CommonConfiguration: NSObject, Configurable {
sdkOptions.enableNewClientInformationFeature = RiotSettings.shared.enableClientInformationFeature
// Configure Crypto SDK feature deciding which crypto module to use
sdkOptions.cryptoSDKFeature = CryptoSDKFeature.shared
sdkOptions.cryptoMigrationDelegate = self
}
private func makeASCIIUserAgent() -> String? {
@@ -168,14 +167,16 @@ class CommonConfiguration: NSObject, Configurable {
if RiotSettings.shared.allowStunServerFallback, let stunServerFallback = BWIBuildSettings.shared.stunServerFallbackUrlString {
callManager.fallbackSTUNServer = stunServerFallback
}
}
// MARK: - Per loaded matrix session settings
func setupSettingsWhenLoaded(for matrixSession: MXSession) {
// Do not warn for unknown devices. We have cross-signing now
(matrixSession.crypto as? MXLegacyCrypto)?.warnOnUnknowDevices = false
}
}
}
extension CommonConfiguration: MXCryptoV2MigrationDelegate {
var needsVerificationUpgrade: Bool {
get {
RiotSettings.shared.showVerificationUpgradeAlert
}
set {
RiotSettings.shared.showVerificationUpgradeAlert = newValue
}
}
}

View File

@@ -24,7 +24,4 @@ import MatrixSDK
// MARK: - Per matrix session settings
func setupSettings(for matrixSession: MXSession)
// MARK: - Per loaded matrix session settings
func setupSettingsWhenLoaded(for matrixSession: MXSession)
}

View File

@@ -23,6 +23,7 @@
// Application constants
KEYCHAIN_ACCESS_GROUP = $(AppIdentifierPrefix)$(BASE_BUNDLE_IDENTIFIER).keychain.shared
BROADCAST_UPLOAD_EXTENSION_BUNDLE_IDENTIFIER = $(BASE_BUNDLE_IDENTIFIER).broadcastUploadExtension
// Build settings
IPHONEOS_DEPLOYMENT_TARGET = 14.0

20
Config/copyOpenConfig.sh Executable file
View File

@@ -0,0 +1,20 @@
#!/bin/sh
# setConfig.sh
#
# Copyright (c) 2023 BWI GmbH
#
# 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.
#
cp -vf ../Config/BuM-Open/AppIdentifiers-bum-open.xcconfig ../Config/AppIdentifiers.xcconfig

View File

@@ -21,7 +21,8 @@ import SwiftUI
/// Dark theme colors.
public class DarkColors {
private static let values = ColorValues(
accent: UIColor(rgb:0x0DBD8B),
// bwi: BUM accent color 108194
accent: UIColor(rgb:0x108194),
alert: UIColor(rgb:0xFF4B55),
primaryContent: UIColor(rgb:0xFFFFFF),
secondaryContent: UIColor(rgb:0xA9B2BC),

View File

@@ -22,7 +22,8 @@ import SwiftUI
/// Light theme colors.
public class LightColors {
private static let values = ColorValues(
accent: UIColor(rgb:0x0DBD8B),
// bwi: BUM accent color 108194
accent: UIColor(rgb:0x108194),
alert: UIColor(rgb:0xFF4B55),
primaryContent: UIColor(rgb:0x17191C),
secondaryContent: UIColor(rgb:0x737D8C),

View File

@@ -1,15 +1,21 @@
GIT
remote: https://github.com/mhtranbn/fastlane-plugin-diawi.git
revision: 6ca982cd41e7c315290240cd4570d5d7b799db38
specs:
fastlane-plugin-diawi (0.1.3)
GEM
remote: https://rubygems.org/
specs:
CFPropertyList (3.0.5)
CFPropertyList (3.0.6)
rexml
activesupport (6.1.7)
activesupport (6.1.7.3)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
tzinfo (~> 2.0)
zeitwerk (~> 2.3)
addressable (2.8.1)
addressable (2.8.4)
public_suffix (>= 2.0.2, < 6.0)
algoliasearch (1.27.5)
httpclient (~> 2.8, >= 2.8.3)
@@ -17,16 +23,16 @@ GEM
artifactory (3.0.15)
atomos (0.1.3)
aws-eventstream (1.2.0)
aws-partitions (1.674.0)
aws-sdk-core (3.168.4)
aws-partitions (1.770.0)
aws-sdk-core (3.173.1)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.651.0)
aws-sigv4 (~> 1.5)
jmespath (~> 1, >= 1.6.1)
aws-sdk-kms (1.61.0)
aws-sdk-kms (1.64.0)
aws-sdk-core (~> 3, >= 3.165.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.117.2)
aws-sdk-s3 (1.122.0)
aws-sdk-core (~> 3, >= 3.165.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.4)
@@ -76,7 +82,7 @@ GEM
colored2 (3.1.2)
commander (4.6.0)
highline (~> 2.0.0)
concurrent-ruby (1.1.10)
concurrent-ruby (1.2.2)
declarative (0.0.20)
digest-crc (0.6.4)
rake (>= 12.0.0, < 14.0.0)
@@ -87,8 +93,8 @@ GEM
escape (0.0.4)
ethon (0.16.0)
ffi (>= 1.15.0)
excon (0.94.0)
faraday (1.10.2)
excon (0.99.0)
faraday (1.10.3)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
faraday-excon (~> 1.1)
@@ -116,8 +122,8 @@ GEM
faraday-retry (1.0.3)
faraday_middleware (1.2.0)
faraday (~> 1.0)
fastimage (2.2.6)
fastlane (2.211.0)
fastimage (2.2.7)
fastlane (2.213.0)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
@@ -141,7 +147,7 @@ GEM
json (< 3.0.0)
jwt (>= 2.1.0, < 3)
mini_magick (>= 4.9.4, < 5.0.0)
multipart-post (~> 2.0.0)
multipart-post (>= 2.0.0, < 3.0.0)
naturally (~> 2.2)
optparse (~> 0.1.1)
plist (>= 3.1.0, < 4.0.0)
@@ -157,9 +163,7 @@ GEM
xcpretty (~> 0.3.0)
xcpretty-travis-formatter (>= 0.0.3)
fastlane-plugin-brew (0.1.1)
fastlane-plugin-diawi (2.1.0)
rest-client (>= 2.0.0)
fastlane-plugin-sentry (1.14.0)
fastlane-plugin-sentry (1.15.0)
os (~> 1.1, >= 1.1.4)
fastlane-plugin-versioning (0.5.1)
fastlane-plugin-xcodegen (1.1.0)
@@ -168,9 +172,9 @@ GEM
fourflusher (2.3.1)
fuzzy_match (2.0.4)
gh_inspector (1.1.3)
google-apis-androidpublisher_v3 (0.31.0)
google-apis-core (>= 0.9.1, < 2.a)
google-apis-core (0.9.1)
google-apis-androidpublisher_v3 (0.42.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-core (0.11.0)
addressable (~> 2.5, >= 2.5.1)
googleauth (>= 0.16.2, < 2.a)
httpclient (>= 2.8.1, < 3.a)
@@ -179,10 +183,10 @@ GEM
retriable (>= 2.0, < 4.a)
rexml
webrick
google-apis-iamcredentials_v1 (0.16.0)
google-apis-core (>= 0.9.1, < 2.a)
google-apis-playcustomapp_v1 (0.12.0)
google-apis-core (>= 0.9.1, < 2.a)
google-apis-iamcredentials_v1 (0.17.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-playcustomapp_v1 (0.13.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-storage_v1 (0.19.0)
google-apis-core (>= 0.9.0, < 2.a)
google-cloud-core (1.6.0)
@@ -190,7 +194,7 @@ GEM
google-cloud-errors (~> 1.0)
google-cloud-env (1.6.0)
faraday (>= 0.17.3, < 3.0)
google-cloud-errors (1.3.0)
google-cloud-errors (1.3.1)
google-cloud-storage (1.44.0)
addressable (~> 2.8)
digest-crc (~> 0.4)
@@ -199,7 +203,7 @@ GEM
google-cloud-core (~> 1.6)
googleauth (>= 0.16.2, < 2.a)
mini_mime (~> 1.0)
googleauth (1.3.0)
googleauth (1.5.2)
faraday (>= 0.17.3, < 3.a)
jwt (>= 1.4, < 3.0)
memoist (~> 0.16)
@@ -207,48 +211,39 @@ GEM
os (>= 0.9, < 2.0)
signet (>= 0.16, < 2.a)
highline (2.0.3)
http-accept (1.7.0)
http-cookie (1.0.5)
domain_name (~> 0.5)
httpclient (2.8.3)
i18n (1.12.0)
i18n (1.13.0)
concurrent-ruby (~> 1.0)
jmespath (1.6.2)
json (2.6.3)
jwt (2.5.0)
jwt (2.7.0)
memoist (0.16.2)
mime-types (3.4.1)
mime-types-data (~> 3.2015)
mime-types-data (3.2022.0105)
mini_magick (4.12.0)
mini_mime (1.1.2)
mini_portile2 (2.8.0)
minitest (5.16.3)
mini_portile2 (2.8.2)
minitest (5.18.0)
molinillo (0.8.0)
multi_json (1.15.0)
multipart-post (2.0.0)
multipart-post (2.3.0)
nanaimo (0.3.0)
nap (1.1.0)
naturally (2.2.1)
netrc (0.11.0)
nokogiri (1.13.10)
mini_portile2 (~> 2.8.0)
nokogiri (1.15.2)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
optparse (0.1.1)
os (1.1.4)
plist (3.6.0)
plist (3.7.0)
public_suffix (4.0.7)
racc (1.6.1)
racc (1.6.2)
rake (13.0.6)
representable (3.2.0)
declarative (< 0.1.0)
trailblazer-option (>= 0.1.1, < 0.2.0)
uber (< 0.2.0)
rest-client (2.1.0)
http-accept (>= 1.7.0, < 2.0)
http-cookie (>= 1.0.2, < 2.0)
mime-types (>= 1.16, < 4.0)
netrc (~> 0.8)
retriable (3.1.2)
rexml (3.2.5)
rouge (2.0.7)
@@ -261,10 +256,10 @@ GEM
faraday (>= 0.17.5, < 3.a)
jwt (>= 1.5, < 3.0)
multi_json (~> 1.10)
simctl (1.6.8)
simctl (1.6.10)
CFPropertyList
naturally
slather (2.7.3)
slather (2.7.4)
CFPropertyList (>= 2.2, < 4)
activesupport
clamp (~> 1.3)
@@ -280,14 +275,14 @@ GEM
tty-cursor (~> 0.7)
typhoeus (1.4.0)
ethon (>= 0.9.0)
tzinfo (2.0.5)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
uber (0.1.0)
unf (0.1.4)
unf_ext
unf_ext (0.0.8.2)
unicode-display_width (1.8.0)
webrick (1.7.0)
webrick (1.8.1)
word_wrap (1.0.0)
xcode-install (2.8.1)
claide (>= 0.9.1)
@@ -303,7 +298,7 @@ GEM
rouge (~> 2.0.7)
xcpretty-travis-formatter (1.0.1)
xcpretty (~> 0.2, >= 0.0.7)
zeitwerk (2.6.6)
zeitwerk (2.6.8)
PLATFORMS
ruby
@@ -311,7 +306,7 @@ PLATFORMS
DEPENDENCIES
cocoapods (~> 1.11.2)
fastlane
fastlane-plugin-diawi
fastlane-plugin-diawi!
fastlane-plugin-sentry
fastlane-plugin-versioning
fastlane-plugin-xcodegen

28
Podfile
View File

@@ -16,7 +16,7 @@ use_frameworks!
# - `{ :specHash => {sdk spec hash}` to depend on specific pod options (:git => …, :podspec => …) for MatrixSDK repo. Used by Fastfile during CI
#
# Warning: our internal tooling depends on the name of this variable name, so be sure not to change it
$matrixSDKVersion = '= 0.26.6'
$matrixSDKVersion = '= 0.26.12'
# $matrixSDKVersion = :local
# $matrixSDKVersion = { :branch => 'develop'}
# $matrixSDKVersion = { :specHash => { git: 'https://git.io/fork123', branch: 'fix' } }
@@ -43,7 +43,7 @@ when String # specific MatrixSDK released version
$matrixSDKVersionSpec = $matrixSDKVersion
end
$matrixSDKVersionSpec = { :git => 'https://dl-gitlab.example.com/bwmessenger/bundesmessenger/bundesmessenger-ios-sdk', :tag => 'v0.26.6.1_bwi' }
$matrixSDKVersionSpec = { :git => 'https://dl-gitlab.example.com/bwmessenger/bundesmessenger/bundesmessenger-ios-sdk', :tag => 'v0.26.12_bwi' }
# Method to import the MatrixSDK
def import_MatrixSDK
@@ -155,6 +155,26 @@ abstract_target 'RiotPods' do
pod 'FLEX', '~> 4.5.0', :configurations => ['Debug']
end
target "BuM-Open" do
import_MatrixSDK
import_MatrixKit_pods
import_SwiftUI_pods
pod 'UICollectionViewLeftAlignedLayout', '~> 1.0.2'
pod 'UICollectionViewRightAlignedLayout', '~> 0.0.3'
pod 'KTCenterFlowLayout', '~> 1.3.1'
pod 'FlowCommoniOS', '~> 1.12.0'
pod 'DTTJailbreakDetection', '~> 0.4.0'
pod 'ReadMoreTextView', '~> 3.0.1'
pod 'SwiftBase32', '~> 0.9.0'
pod 'SwiftJWT', '~> 3.6.200'
pod 'SideMenu', '~> 6.5'
pod 'DSWaveformImage', '~> 6.1.1'
pod 'FLEX', '~> 4.5.0', :configurations => ['Debug']
end
target "RiotSwiftUI" do
import_SwiftUI_pods
@@ -169,6 +189,10 @@ abstract_target 'RiotPods' do
import_MatrixKit_pods
end
target "BroadcastUploadExtension" do
import_MatrixSDK
end
end
post_install do |installer|

View File

@@ -27,9 +27,9 @@ PODS:
- GBDeviceInfo/Core (7.1.0)
- GZIP (1.3.0)
- Introspect (0.1.4)
- JitsiMeetSDKLite (7.0.1-lite):
- JitsiWebRTC (~> 106.0)
- JitsiWebRTC (106.0.0)
- JitsiMeetSDKLite (8.1.2-lite):
- JitsiWebRTC (~> 111.0)
- JitsiWebRTC (111.0.2)
- KeychainAccess (4.2.2)
- KituraContracts (1.2.1):
- LoggerAPI (~> 1.7)
@@ -39,20 +39,20 @@ PODS:
- LoggerAPI (1.9.200):
- Logging (~> 1.1)
- Logging (1.4.0)
- MatrixSDK (0.26.6):
- MatrixSDK/Core (= 0.26.6)
- MatrixSDK/Core (0.26.6):
- MatrixSDK (0.26.12):
- MatrixSDK/Core (= 0.26.12)
- MatrixSDK/Core (0.26.12):
- AFNetworking (~> 4.0.0)
- GZIP (~> 1.3.0)
- libbase58 (~> 0.1.4)
- MatrixSDKCrypto (= 0.3.2)
- MatrixSDKCrypto (= 0.3.4)
- OLMKit (~> 3.2.5)
- Realm (= 10.27.0)
- SwiftyBeaver (= 1.9.5)
- MatrixSDK/JingleCallStack (0.26.6):
- JitsiMeetSDKLite (= 7.0.1-lite)
- MatrixSDK/JingleCallStack (0.26.12):
- JitsiMeetSDKLite (= 8.1.2-lite)
- MatrixSDK/Core
- MatrixSDKCrypto (0.3.2)
- MatrixSDKCrypto (0.3.4)
- OLMKit (3.2.12):
- OLMKit/olmc (= 3.2.12)
- OLMKit/olmcpp (= 3.2.12)
@@ -102,8 +102,8 @@ DEPENDENCIES:
- KeychainAccess (~> 4.2.2)
- KTCenterFlowLayout (~> 1.3.1)
- libPhoneNumber-iOS (~> 0.9.13)
- MatrixSDK (= 0.26.6)
- MatrixSDK/JingleCallStack (= 0.26.6)
- MatrixSDK (= 0.26.12)
- MatrixSDK/JingleCallStack (= 0.26.12)
- OLMKit
- PostHog (~> 2.0.0)
- ReadMoreTextView (~> 3.0.1)
@@ -178,8 +178,8 @@ SPEC CHECKSUMS:
GBDeviceInfo: 5d62fa85bdcce3ed288d83c28789adf1173e4376
GZIP: 416858efbe66b41b206895ac6dfd5493200d95b3
Introspect: b62c4dd2063072327c21d618ef2bedc3c87bc366
JitsiMeetSDKLite: d59573336ce887ec52327a9927aa8443f560d0b9
JitsiWebRTC: f441eb0e2d67f0588bf24e21c5162e97342714fb
JitsiMeetSDKLite: 895213158cf62342069a10634a41d2f1c00057f7
JitsiWebRTC: 80f62908fcf2a1160e0d14b584323fb6e6be630b
KeychainAccess: c0c4f7f38f6fc7bbe58f5702e25f7bd2f65abf51
KituraContracts: e845e60dc8627ad0a76fa55ef20a45451d8f830b
KTCenterFlowLayout: 6e02b50ab2bd865025ae82fe266ed13b6d9eaf97
@@ -187,8 +187,8 @@ SPEC CHECKSUMS:
libPhoneNumber-iOS: 0a32a9525cf8744fe02c5206eb30d571e38f7d75
LoggerAPI: ad9c4a6f1e32f518fdb43a1347ac14d765ab5e3d
Logging: beeb016c9c80cf77042d62e83495816847ef108b
MatrixSDK: 8179c184d819782282f47dab16ce6c2b68ef8a74
MatrixSDKCrypto: 7073c382c484cb8ba7dba0a83e112ead96d3bbfd
MatrixSDK: 0af737bc461b82d0ec9edd6fdf8f70b02771ebd3
MatrixSDKCrypto: ac805c22c24f79f349cdbfa065855c73a4c81b51
OLMKit: da115f16582e47626616874e20f7bb92222c7a51
PostHog: 660ec6c9d80cec17b685e148f17f6785a88b597d
ReadMoreTextView: 19147adf93abce6d7271e14031a00303fe28720d
@@ -208,6 +208,6 @@ SPEC CHECKSUMS:
zxcvbn-ios: fef98b7c80f1512ff0eec47ac1fa399fc00f7e3c
ZXingObjC: fdbb269f25dd2032da343e06f10224d62f537bdb
PODFILE CHECKSUM: 54848168ab5303c9126626395886cd85f27a44b3
PODFILE CHECKSUM: 0e7e10f516d40d9df60cb874170b91603c632118
COCOAPODS: 1.11.3

View File

@@ -59,8 +59,8 @@
"kind" : "remoteSourceControl",
"location" : "https://github.com/matrix-org/matrix-wysiwyg-composer-swift",
"state" : {
"revision" : "addf90f3e2a6ab46bd2b2febe117d9cddb646e7d",
"version" : "1.1.1"
"revision" : "1100b217c04d096dfe072afb4484660ff794d805",
"version" : "2.2.2"
}
},
{

View File

@@ -1,19 +1,8 @@
{
"images" : [
{
"filename" : "launch_bwi.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "launch_bwi@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "launch_bwi@3x.png",
"idiom" : "universal",
"scale" : "3x"
"filename" : "bundesmessenger-logo.svg",
"idiom" : "universal"
}
],
"info" : {
@@ -21,6 +10,7 @@
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true,
"template-rendering-intent" : "original"
}
}

View File

@@ -0,0 +1,14 @@
<svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="1024" height="1024" rx="248" fill="white"/>
<rect x="2" y="2" width="1020" height="1020" rx="246" stroke="black" stroke-opacity="0.25" stroke-width="4"/>
<rect x="243" y="366" width="545" height="47" rx="23.5" fill="black"/>
<rect x="207" y="529.648" width="544" height="47.6335" rx="23.8167" fill="#FFCC00"/>
<rect x="243" y="612" width="419" height="47" rx="23.5" fill="black"/>
<rect x="340" y="694" width="378" height="47" rx="23.5" fill="black"/>
<rect x="296" y="775.438" width="488" height="47.6335" rx="23.8167" fill="black"/>
<rect x="393" y="857.367" width="325" height="47.6335" rx="23.8167" fill="black"/>
<rect x="385" y="202" width="366" height="48" rx="24" fill="black"/>
<rect x="286" y="283.859" width="487" height="47.6335" rx="23.8167" fill="black"/>
<rect x="385.001" y="120" width="167" height="48" rx="24" fill="black"/>
<rect x="207" y="447.719" width="610" height="47.6335" rx="23.8167" fill="#FF0000"/>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

View File

@@ -30,7 +30,8 @@
"downtime_title" = "⚠ Server nicht erreichbar";
"downtime_default_message" = "Wir führen gerade Wartungsarbeiten durch. Bitte versuche es später erneut.";
"downtime_alert_dismiss_button" = "Zurück";
"downtime_alert_dismiss_button" = "Ok";
"blocking_downtime_alert_dismiss_button" = "Zurück";
"settings_downtime_message_same_day" = "Der %@ steht am %@, %@ von %@ bis %@ Uhr (UTC%@) nicht zur Verfügung. Nachrichten können in dieser Zeit nicht verschickt oder empfangen werden.";
"settings_downtime_message_different_days" = "Der %@ steht von %@, %@ Uhr (UTC%@) bis %@, %@ Uhr (UTC%@) nicht zur Verfügung. Nachrichten können in dieser Zeit nicht verschickt oder empfangen werden.";
"settings_copyright" = "Copyright";
@@ -205,6 +206,7 @@
"settings_password_has_no_lowercase_letter" = "Das Passwort muss mindestens einen Kleinbuchstaben enthalten";
"settings_about" = "Erweitert";
"bwi_settings_ignored_users_text" = "Ignorierte Nutzer";
"settings_imprint" = "Impressum";
// MARK: - Room Details
@@ -387,7 +389,7 @@
// Mark: - Room Creation
"room_intro_cell_information_dm_sentence1_part1" = "Das ist der Anfang deiner Direktnachricht mit ";
"room_intro_cell_information_dm_sentence1_part1" = "Dies ist der Beginn deiner Direktnachrichten mit ";
"room_avatar_view_accessibility_hint" = "Raumbild ändern";
"room_avatar_view_accessibility_label" = "Profilbild";
"room_details_permalink" = "Link zum Raum kopieren";
@@ -501,6 +503,7 @@
"bwi_error_invite_already_in_room" = "%@ ist bereits im Raum.";
"bwi_error_invite_banned_in_room" = "%@ ist vom Raum gebannt.";
"bwi_error_invite_general" = "%@ konnte nicht eingeladen werden.";
"bwi_error_logout_offline" = "Abmelden ist ohne Internetverbindung nicht möglich.";
// MARK: - Matomo
@@ -519,7 +522,7 @@
"bwi_settings_new_features_show_features" = "Neue Funktionen anzeigen";
"bwi_feature_banner_header" = "Neue Funktionen";
"bwi_feature_banner_show_more_button" = "Erfahre mehr";
"bwi_feature_banner_advertisement_text" = "Du kannst jetzt aktive und vergangene Umfragen gesammelt in den Raumdetails einsehen (erreichbar unter Raumdetails, im Bereich \"Umfrageverlauf\").";
"bwi_feature_banner_advertisement_text" = "Mit dem neuen Feature Ruhezeiteneinstellung lassen sich Benachrichtigungen nach Wochentag und Uhrzeit ein- bzw stummschalten.";
// MARK: - Onboarding
"onboarding_splash_login_button_title" = "Loslegen";
@@ -540,6 +543,10 @@
"poll_edit_form_poll_type" = "Umfragetyp";
"poll_edit_form_poll_type_closed" = "Versteckte Umfrage";
"poll_edit_form_poll_type_open" = "Offene Umfrage";
"poll_edit_form_participant_toggle" = "Anzeigen, wer für welche Option gestimmt hat.";
"poll_timeline_show_participants_button" = "Stimmen anzeigen";
"poll_participant_details_show_more" = "Alle ansehen (%lu weitere)";
"poll_participant_details_title" = "Umfragedetails";
// MARK: - Welcome Experience
"welcome_experience_title1" = "Willkommen beim BundesMessenger";
@@ -592,6 +599,8 @@
// MARK: - Permalink
"settings_permalink_prefix_picker_title" = "Permalink Prefix";
"bwi_error_room_not_available_title" = "Link ungültig";
"bwi_error_room_not_available_message" = "Der Raum wurde bereits geschlossen, daher kannst Du nicht mehr beitreten.";
// MARK: - Notification Settings
"settings_notify_me_for" = "Benachrichtige mich für";
@@ -612,7 +621,15 @@
// MARK: - Device Manager
"user_session_verified_session_description" = "Du hast deine Sitzung durch Eingabe des Wiederherstellungsschlüssels oder durch die Verifizierung mit einem anderen Gerät bestätigt. Dies bedeutet, dass du alle Schlüssel zum Entschlüsseln deiner Nachrichten hast und anderen bestätigst, dieser Sitzung zu vertrauen.";
"user_session_button_view_all" = "Alle anzeigen (%d)";
"user_verification_session_details_verify_action_current_user" = "Sitzung verifizieren";
// MARK: - Voice Over
"textfield_reveal_secret" = "Texteingabe anzeigen";
"textfield_hide_secret" = "Texteingabe verbergen";
// MARK: - Accessibility declaration
"bwi_accessibility_declaration_button_title" = "Barrierefreiheitserklärung";
// MARK: - Crypto Store migration
"bwi_launch_loading_crypto_store_migration_info" = "Die Ver-/Entschlüsselung von Nachrichten wird verbessert, dies kann ein paar Minuten dauern, bitte schließe die App nicht. Verbesserung läuft.";

View File

@@ -2742,3 +2742,32 @@
// MARK: - Launch loading
"launch_loading_generic" = "Synchronisiere deine Unterhaltungen";
"pill_message_in" = "Nachricht in %@";
"pill_message_from" = "Nachricht von %@";
"pill_message" = "Nachricht";
// Pills
"pill_room_fallback_display_name" = "Space/Raum";
"key_verification_self_verify_security_upgrade_alert_message" = "Verschlüsselte Kommunikation wurde mit der neuesten Aktualisierung verbessert. Bitte verifiziere deine Geräte erneut.";
// Legacy to Rust security upgrade
"key_verification_self_verify_security_upgrade_alert_title" = "App aktualisiert";
"settings_acceptable_use" = "Nutzungsbedingungen";
"room_command_emote_description" = "Zeigt Aktionen";
"room_command_error_unknown_command" = "Ungültige oder nicht verarbeitete Eingabe";
"room_command_change_room_topic_description" = "Ändert das Raumthema";
"room_command_reset_user_power_level_description" = "Setzt das Berechtigungslevel beim Benutzer mit der angegebenen ID zurück";
"room_command_set_user_power_level_description" = "Bestimmt das Berechtigungslevel des Benutzers";
"room_command_unban_user_description" = "Entbannt den Benutzer mit der angegebenen ID";
"room_command_ban_user_description" = "Verbannt den Benutzer mit der angegebenen ID";
"room_command_kick_user_description" = "Entfernt den Benutzer mit der angegebenen ID aus diesem Raum";
"room_command_invite_user_description" = "Lädt den Benutzer mit der angegebenen ID in den aktuellen Raum ein";
"room_command_part_room_description" = "Raum verlassen";
"room_command_join_room_description" = "Raum mit angegebener Adresse betreten";
// Room commands descriptions
"room_command_change_display_name_description" = "Ändert deinen Anzeigenamen";
"notice_display_name_changed_to" = "%@ hat den Anzeigenamen zu %@ geändert";
"poll_timeline_loading" = "Lade …";
"room_command_discard_session_description" = "Erzwingt das Verferfen der aktuell ausgehende Gruppensitzung in einem verschlüsseltem Raum";

View File

@@ -30,7 +30,8 @@
"downtime_title" = "⚠ Server not available";
"downtime_default_message" = "We are working on our maintenance. Please try again later.";
"downtime_alert_dismiss_button" = "Back";
"downtime_alert_dismiss_button" = "Ok";
"blocking_downtime_alert_dismiss_button" = "Back";
"settings_downtime_message_same_day" = "The %@ is not available on %@, %@ between %@ and %@ (UTC%@). Messages may not be sent or received during that time.";
"settings_downtime_message_different_days" = "The %@ is not available from %@, %@ (UTC%@) to %@, %@ (UTC%@). Messages may not be sent or received during that time.";
"settings_copyright" = "Copyright";
@@ -161,6 +162,7 @@
"settings_password_has_no_lowercase_letter" = "The password must include at least one lowercase letter";
"settings_deactivate_my_account" = "Deactivate my account";
"settings_enable_inapp_notifications" = "Enable In-App notifications";
"settings_imprint" = "Imprint";
// MARK: - Room Details
@@ -309,7 +311,7 @@
// Mark: - Room Creation
"room_intro_cell_information_dm_sentence1_part1" = "This is the beginning of your conversation with ";
"room_intro_cell_information_dm_sentence1_part1" = "This is the beginning of your direct message history with ";
// MARK: - Notification Times
@@ -410,6 +412,7 @@
"bwi_error_invite_already_in_room" = "%@ is already in the room.";
"bwi_error_invite_banned_in_room" = "%@ is banned from the room.";
"bwi_error_invite_general" = "%@ could not be invited.";
"bwi_error_logout_offline" = "Logout not possible without internet connection.";
// MARK: - Matomo
@@ -428,7 +431,7 @@
"bwi_settings_new_features_show_features" = "Show new features";
"bwi_feature_banner_header" = "New Features";
"bwi_feature_banner_show_more_button" = "Learn more";
"bwi_feature_banner_advertisement_text" = "You can now see a poll history in the room details.";
"bwi_feature_banner_advertisement_text" = "A new feature for notifications times allows you to define time intervals for filtering incoming push notifications.";
// MARK: - Onboarding
"onboarding_splash_login_button_title" = "Let's go";
@@ -445,6 +448,10 @@
"poll_edit_form_poll_type" = "Poll type";
"poll_edit_form_poll_type_closed" = "Hidden Poll";
"poll_edit_form_poll_type_open" = "Open poll";
"poll_edit_form_participant_toggle" = "Show who voted for which option";
"poll_timeline_show_participants_button" = "Show votes";
"poll_participant_details_show_more" = "Show all (%lu more)";
"poll_participant_details_title" = "Poll details";
// MARK: - Welcome Experience
"welcome_experience_title1" = "Welcome to BundesMessenger";
@@ -502,6 +509,8 @@
// MARK: - Permalink
"settings_permalink_prefix_picker_title" = "Permalink Prefix";
"bwi_error_room_not_available_title" = "Link invalid";
"bwi_error_room_not_available_message" = "The room has already been closed, you can no longer join.";
// MARK: - Notification Settings
"settings_notify_me_for" = "Notify me for";
@@ -522,8 +531,14 @@
// MARK: - Device Manager
"user_session_verified_session_description" = "You have confirmed your session by entering the recovery key or verifying with another device. This means that you have all the keys to decrypt your messages and are confirming to others to trust this session.";
"user_session_button_view_all" = "View all (%d)";
"user_verification_session_details_verify_action_current_user" = "Verify session";
// MARK: - Voice Over
"textfield_reveal_secret" = "reveal text input";
"textfield_hide_secret" = "hide text input";
// MARK: - Accessibility declaration
"bwi_accessibility_declaration_button_title" = "Accessibility declaration";
// MARK: - Crypto Store migration
"bwi_launch_loading_crypto_store_migration_info" = "Message encryption/decryption has been updated to improve app performance, this may take a few minutes. Please do not close the app during the update. The update is running.";

View File

@@ -366,6 +366,9 @@
"room_creation_error_invite_user_by_email_without_identity_server" = "No identity server is configured so you cannot add a participant with an email.";
"room_creation_dm_error" = "We couldn't create your DM. Please check the users you want to invite and try again.";
"room_creation_only_one_email_invite" = "You can only invite one email at a time";
"room_creation_user_not_found_prompt_title" = "Confirmation";
"room_creation_user_not_found_prompt_message" = "Unable to find profiles for this Matrix ID. Would you like to start a DM anyway?";
"room_creation_user_not_found_prompt_invite_action" = "Start DM anyway";
// Room recents
"room_recents_directory_section" = "ROOM DIRECTORY";
@@ -459,6 +462,8 @@ Tap the + to start adding people.";
"room_participants_invite_prompt_title" = "Confirmation";
"room_participants_invite_prompt_msg" = "Are you sure you want to invite %@ to this chat?";
"room_participants_invite_prompt_to_msg" = "Are you sure you want to invite %@ to %@?";
"room_participants_invite_unknown_participant_prompt_to_msg" = "Unable to find profiles for this Matrix ID. Are you sure you want to invite %@ to %@?";
"room_participants_invite_anyway" = "Invite anyway";
"room_participants_filter_room_members" = "Filter room members";
"room_participants_filter_room_members_for_dm" = "Filter members";
"room_participants_invite_another_user" = "Search / invite by User ID, Name or email";
@@ -614,6 +619,21 @@ Tap the + to start adding people.";
"room_join_group_call" = "Join";
"room_no_privileges_to_create_group_call" = "You need to be an admin or a moderator to start a call.";
// Room commands descriptions
"room_command_change_display_name_description" = "Changes your display nickname";
"room_command_emote_description" = "Displays action";
"room_command_join_room_description" = "Joins room with given address";
"room_command_part_room_description" = "Leave room";
"room_command_invite_user_description" = "Invites user with given id to current room";
"room_command_kick_user_description" = "Removes user with given id from this room";
"room_command_ban_user_description" = "Bans user with given id";
"room_command_unban_user_description" = "Unbans user with given id";
"room_command_set_user_power_level_description" = "Define the power level of a user";
"room_command_reset_user_power_level_description" = "Deops user with given id";
"room_command_change_room_topic_description" = "Sets the room topic";
"room_command_discard_session_description" = "Forces the current outbound group session in an encrypted room to be discarded";
"room_command_error_unknown_command" = "Invalid or unhandled command";
// MARK: Threads
"room_thread_title" = "Thread";
"thread_copy_link_to_thread" = "Copy link to thread";
@@ -807,9 +827,6 @@ Tap the + to start adding people.";
"settings_labs_enable_new_app_layout" = "New Application Layout";
"settings_labs_enable_wysiwyg_composer" = "Try out the rich text editor";
"settings_labs_enable_voice_broadcast" = "Voice broadcast";
"settings_labs_enable_crypto_sdk" = "Rust end-to-end encryption";
"settings_labs_confirm_crypto_sdk" = "Please be advised that as this feature is still in its experimental stage, it may not function as expected and could potentially have unintended consequences. To revert the feature, simply log out and log back in. Use at your own discretion and with caution.";
"settings_labs_disable_crypto_sdk" = "Rust end-to-end encryption (log out to disable)";
"settings_version" = "Version %@";
"settings_olm_version" = "Olm Version %@";
@@ -2393,6 +2410,8 @@ Tap the + to start adding people.";
"poll_timeline_reply_ended_poll" = "Ended poll";
"poll_timeline_loading" = "Loading...";
// MARK: - Location sharing
"location_sharing_title" = "Location";
@@ -2972,6 +2991,7 @@ To enable access, tap Settings> Location and select Always";
"notice_avatar_url_changed" = "%@ changed their avatar";
"notice_display_name_set" = "%@ set their display name to %@";
"notice_display_name_changed_from" = "%@ changed their display name from %@ to %@";
"notice_display_name_changed_to" = "%@ changed their display name to %@";
"notice_display_name_removed" = "%@ removed their display name";
"notice_topic_changed" = "%@ changed the topic to \"%@\".";
"notice_room_name_changed" = "%@ changed the room name to %@.";

View File

@@ -2680,3 +2680,32 @@
// MARK: - Launch loading
"launch_loading_generic" = "Sinu vestlused on sünkroniseerimisel";
"pill_message_in" = "Sõnum jututoas %@";
"pill_message_from" = "Sõnum kasutajalt %@";
"pill_message" = "Sõnum";
// Pills
"pill_room_fallback_display_name" = "Kogukond/jututuba";
"settings_acceptable_use" = "Vastuvõetava kasutamise põhimõtted";
"key_verification_self_verify_security_upgrade_alert_message" = "Turvalisele sõnumivahetusele on lisandunud palju täiendusi. Palun verifitseeri oma seade uuesti.";
// Legacy to Rust security upgrade
"key_verification_self_verify_security_upgrade_alert_title" = "Rakendus on uuendatud";
"room_command_error_unknown_command" = "Vigane või määratlemata käsk";
"room_command_discard_session_description" = "Sunnib loobuma praeguse krüptitud jututoa rühmavestluse seansist";
"room_command_change_room_topic_description" = "Määra jututoa teema";
"room_command_reset_user_power_level_description" = "Eemalda antud tunnusega kasutajalt haldusõigused selles jututoas";
"room_command_set_user_power_level_description" = "Määra kasutaja õigused";
"room_command_unban_user_description" = "Taasta ligipääs antud tunnusega kasutajale";
"room_command_ban_user_description" = "Keela ligipääs antud tunnusega kasutajale";
"room_command_kick_user_description" = "Müksa selle tunnusega kasutaja jututoast välja";
"room_command_invite_user_description" = "Kutsub nimetatud kasutajatunnusega kasutaja sellesse jututuppa";
"room_command_part_room_description" = "Lahku jututoast";
"room_command_join_room_description" = "Liitu sellise aadressiga jututoaga";
"room_command_emote_description" = "Näitab tegevusi";
// Room commands descriptions
"room_command_change_display_name_description" = "Muudab sinu kuvatavat nime";
"notice_display_name_changed_to" = "%@ muutis oma kuvatavaks nimeks %@";
"poll_timeline_loading" = "Laadin...";

View File

@@ -54,7 +54,6 @@
// MARK: - MatrixKit
"matrix" = "Matrix";
// Login Screen
"login_create_account" = "Luo tili:";
@@ -197,3 +196,23 @@
"ssl_could_not_verify" = "Etäpalvelimen identiteetin vahvistaminen epäonnistui.";
"login_user_id_placeholder" = "Matrix ID (esim. @matti:matrix.org tai pelkästään matti)";
"login_identity_server_info" = "Matrix tarjoaa identiteettipalvelimen joka osaa kertaa mikä sähköpostiosoite tai puhelinnumero vastaa mitäkin Matrix ID:tä. Vain https://matrix.org on tällä hetkellä käytettävissä.";
"suggest" = "Ehdota";
"add" = "Lisää";
"existing" = "Nykyinen";
"new_word" = "Uusi";
"stop" = "Seis";
"done" = "Valmis";
"open" = "Avaa";
"less" = "Vähemmän";
"more" = "Lisää";
"switch" = "Vaihda";
"joined" = "Liittyi";
"skip" = "Ohita";
"send_to" = "Lähetä käyttäjälle %@";
"collapse" = "Näytä vähemmän";
"rename" = "Nimeä uudelleen";
"later" = "Myöhemmin";
"active_call_details" = "Aktiivinen puhelu (%@)";
"active_call" = "Aktiivinen puhelu";
"enable" = "Ota käyttöön";
"store_promotional_text" = "Yksityisyyttä varjeleva chat ja yhteistyösovellus, avoimessa verkossa. Hajautettu hallintaa varten. Ei datalouhintaa, takaovia tai kolmannen osapuolen pääsyä.";

View File

@@ -2654,7 +2654,6 @@
"voice_broadcast_stop_alert_title" = "Megszakítod az élő közvetítést?";
"voice_broadcast_buffering" = "Pufferelés…";
"voice_broadcast_time_left" = "%@ van vissza";
"password_policy_pwd_in_dict_error" = "Ez a jelszó megtalálható a szótárban ezért nem engedélyezett.";
"password_policy_weak_pwd_error" = "Ez a jelszó túl gyenge. Legalább 8 karakternek kell lennie és minden típusból legalább egy: nagybetű, kisbetű, szám és speciális karakter.";
@@ -2701,7 +2700,6 @@
"poll_history_no_past_poll_period_text" = "%@ napja nincs aktív szavazás. További szavazások betöltése az előző havi szavazások megjelenítéséhez";
"poll_history_no_active_poll_period_text" = "%@ napja nincs aktív szavazás. További szavazások betöltése az előző havi szavazások megjelenítéséhez";
"poll_history_loading_text" = "Szavazások megjelenítése";
"settings_labs_disable_crypto_sdk" = "Rust végpontok közötti titkosítás (kikapcsoláshoz kijelentkezés szükséges)";
"settings_labs_confirm_crypto_sdk" = "Ez a funkció még kísérleti fázisban van. Lehet, hogy nem az elvártnak megfelelően fog működni és előre nem látható következménye lehet. A funkció kikapcsolásához egyszerű ki-, és bejelentkezés szükséges. Használata csak saját felelősségre.";
"settings_labs_enable_crypto_sdk" = "Rust végpontok közötti titkosítás";
@@ -2720,3 +2718,25 @@
"device_verification_self_verify_wait_recover_secrets_additional_help" = "Nem férsz hozzá létező munkamenethez, %@?";
"device_verification_self_verify_open_on_other_device_title" = "Nyisd meg ezt: %@ a másik eszközön";
"room_creation_only_one_email_invite" = "E-mail meghívóból egyszerre csak egy küldhető";
"pill_message_in" = "Üzenet itt: %@";
"pill_message_from" = "Üzenet tőle: %@";
"pill_message" = "Üzenet";
// Pills
"pill_room_fallback_display_name" = "Tér/Szoba";
"launch_loading_delay_warning" = "Ez egy kicsit tovább tarthat.\nKöszönjük a türelmet.";
// MARK: - Launch loading
"launch_loading_generic" = "Beszélgetések szinkronizálása";
"key_verification_scan_qr_code_information_new_session" = "Az új munkameneted ellenőrzéséhez irányítsd a kamerádat a másik eszközödön megjelenő QR kódra";
"key_verification_scan_qr_code_information_other_session" = "A munkameneted ellenőrzéséhez irányítsd a kamerádat a másik eszközödön megjelenő QR kódra";
"key_verification_scan_qr_code_information_other_device" = "A munkamenet ellenőrzéséhez irányítsd a kamerádat a másik eszközödön megjelenő QR kódra";
"key_verification_scan_qr_code_information_other_user" = "A munkamenetük ellenőrzéséhez irányítsd a kamerádat az eszközükön megjelenő QR kódra";
"device_verification_self_verify_open_on_other_device_information" = "Ennek a munkamenetnek az ellenőrzésére szükséged van a régi titkosított üzenetek olvasásához.\n\nNyisd meg az Elementet egy másik eszközödön és kövesd az utasításokat.";
"key_verification_self_verify_security_upgrade_alert_message" = "A biztonságos üzenetküldés a legutolsó fejlesztésekkel frissült. Kérjük ellenőrizzed újra az eszközt.";
// Legacy to Rust security upgrade
"key_verification_self_verify_security_upgrade_alert_title" = "Alkalmazás frissítve";
"settings_acceptable_use" = "Elfogadható felhasználói feltételek";

View File

@@ -2935,3 +2935,32 @@
"device_verification_self_verify_open_on_other_device_information" = "Anda harus memverifikasi sesi ini supaya dapat membaca riwayat pesan aman Anda.\n\nBuka Element di salah satu perangkat Anda yang lain dan ikuti petunjuknya.";
"device_verification_self_verify_open_on_other_device_title" = "Buka %@ di perangkat Anda yang lain";
"room_creation_only_one_email_invite" = "Amda hanya dapat mengundang satu surel satu-satu";
"pill_message_in" = "Pesan di %@";
"pill_message_from" = "Pesan dari %@";
"pill_message" = "Pesan";
// Pills
"pill_room_fallback_display_name" = "Space/Ruangan";
"key_verification_self_verify_security_upgrade_alert_message" = "Perpesanan aman telah ditingkatkan dengan pembaruan terkini. Silakan verifikasi ulang perangkat Anda.";
// Legacy to Rust security upgrade
"key_verification_self_verify_security_upgrade_alert_title" = "Aplikasi diperbarui";
"settings_acceptable_use" = "Kebijakan Penggunaan yang Dapat Diterima";
"room_command_error_unknown_command" = "Perintah tidak valid atau tidak ditangani";
"room_command_discard_session_description" = "Memaksa sesi kelompok outbound saat ini di ruang terenkripsi untuk dihapus";
"room_command_change_room_topic_description" = "Menetapkan topik ruangan";
"room_command_reset_user_power_level_description" = "Menurunkan pengguna dengan ID yang ditetapkan";
"room_command_set_user_power_level_description" = "Definisikan tingkat daya pengguna";
"room_command_unban_user_description" = "Menghilangkan cekalan pengguna dengan ID yang ditetapkan";
"room_command_ban_user_description" = "Mencekal pengguna dengan ID yang ditetapkan";
"room_command_kick_user_description" = "Mengeluarkan pengguna dengan ID yang ditetapkan dari ruangan ini";
"room_command_invite_user_description" = "Mengundang pengguna dengan OD yang ditetapkan ke ruangan saat ini";
"room_command_part_room_description" = "Tinggalkan ruangan";
"room_command_join_room_description" = "Bergabung dengan ruangan dengan alamat yang ditetapkan";
"room_command_emote_description" = "Menampilkan tindakan";
// Room commands descriptions
"room_command_change_display_name_description" = "Mengubah nama tampilan Anda";
"notice_display_name_changed_to" = "%@ mengubah nama tampilannya menjadi %@";
"poll_timeline_loading" = "Memuat...";

View File

@@ -2708,3 +2708,32 @@
// MARK: - Launch loading
"launch_loading_generic" = "Sincronizzazione delle tue conversazioni";
"pill_message_in" = "Messaggio in %@";
"pill_message_from" = "Messaggio da %@";
"pill_message" = "Messaggio";
// Pills
"pill_room_fallback_display_name" = "Spazio/Stanza";
"key_verification_self_verify_security_upgrade_alert_message" = "La messaggistica sicura è stata migliorata con l'aggiornamento più recente. Ri-verifica il tuo dispositivo.";
// Legacy to Rust security upgrade
"key_verification_self_verify_security_upgrade_alert_title" = "App aggiornata";
"settings_acceptable_use" = "Politica di utilizzo accettabile";
"room_command_error_unknown_command" = "Comando non valido o non gestito";
"room_command_discard_session_description" = "Forza l'eliminazione dell'attuale sessione di gruppo in uscita in una stanza criptata";
"room_command_change_room_topic_description" = "Imposta l'argomento della stanza";
"room_command_kick_user_description" = "Rimuove l'utente per ID da questa stanza";
"room_command_reset_user_power_level_description" = "Toglie privilegi all'utente per ID";
"room_command_set_user_power_level_description" = "Definisci il livello di poteri di un utente";
"room_command_unban_user_description" = "Riammette l'utente per ID";
"room_command_ban_user_description" = "Bandisce l'utente per ID";
"room_command_invite_user_description" = "Invita l'utente per ID alla stanza attuale";
"room_command_part_room_description" = "Esci dalla stanza";
"room_command_join_room_description" = "Entra nella stanza con l'indirizzo scelto";
"room_command_emote_description" = "Mostra l'azione";
// Room commands descriptions
"room_command_change_display_name_description" = "Cambia il tuo nome visualizzato";
"notice_display_name_changed_to" = "%@ ha cambiato il suo nome visualizzato in %@";
"poll_timeline_loading" = "Caricamento...";

View File

@@ -3,8 +3,10 @@
"NSFaceIDUsageDescription" = "Face ID brukes til å få tilgang til appen din.";
"NSCalendarsUsageDescription" = "Se de planlagte møtene dine i appen.";
"NSContactsUsageDescription" = "For å oppdage kontakter som allerede bruker Matrix, kan Element sende e-postadresser og telefonnummer i adresseboken til den valgte Matrix-identitetsserveren. Der det støttes, hasheres personlige data før sending - vennligst sjekk identitetsserverens personvernregler for mer informasjon.";
"NSMicrophoneUsageDescription" = "Mikrofonen brukes til å ta videoer, ringe.";
"NSPhotoLibraryUsageDescription" = "Fotobiblioteket brukes til å sende bilder og videoer.";
"NSContactsUsageDescription" = "De vil bli delt med din identitets-tjener for hjelpe å finne dine kontakter.";
"NSMicrophoneUsageDescription" = "Appen trenger tilgang til mikrofonen for samtaler, og for å spille inn video og lydmeldinger.";
"NSPhotoLibraryUsageDescription" = "Tillat tilgang til å laste opp bilder og videoer fra fotobiblioteket.";
// Permissions usage explanations
"NSCameraUsageDescription" = "Kameraet brukes til å ta bilder og videoer, ringe videosamtaler.";
"NSCameraUsageDescription" = "Kameraet brukes til videosamtaler, og til å ta og laste opp bilder og videoer.";
"NSLocationAlwaysAndWhenInUseUsageDescription" = "Når du deler din lokasjon men noen trenger appen tilganger til å vise dem et kart.";
"NSLocationWhenInUseUsageDescription" = "Når du deler din lokasjon men noen trenger appen tilganger til å vise dem et kart.";

View File

@@ -26,6 +26,61 @@
</style>
</head>
<body>
<div>
<p>
<b>Version 2.8.0</b>
</p>
<p>
<b>Neue Funktionen</b>
<ul>
<li/>Mit dem neuen Feature Ruhezeiteneinstellung lassen sich Benachrichtigungen nach Wochentag und Uhrzeit ein- bzw stummschalten.
</ul>
</p>
<p>
<b>Verbesserungen</b>
<ul>
<li/>Der Code zur Verschlüsselung von Nachrichten wurde komplett neu geschrieben, was die Performance und Stabilität verbessert.
</ul>
</p>
<p>
<b>Behobene Bugs</b>
<ul>
<li/>Die App informiert jetzt zuverlässiger über bevorstehende Wartungsfenster.
</ul>
</p>
</div>
<div>
<p>
<b>Version 2.7.0</b>
</p>
<p>
<b>Neue Funktionen</b>
<ul>
<li/>Neue Umfragen können vom Ersteller so konfiguriert werden, dass angezeigt wird, wer für welche Option gestimmt hat.
</ul>
</p>
<p>
<b>Verbesserungen</b>
<ul>
<li/>Das Löschen des Raumavatars ist nun möglich.
<li/>Website Verlinkungen werden nun im System-Browser geöffnet.
</ul>
</p>
<p>
<b>Behobene Bugs</b>
<ul>
<li/>Das Abmelden ohne Internetverbindung kann zu Fehlern führen, deshalb ist dies nicht mehr möglich.
<li/>Die Eingabe des Wiederherstellungsschlüssels war nicht möglich, wenn die Sprache der App auf Englisch eingestellt war.
<li/>Man kann eine andere Sitzung nicht mehr von einem Gerät alleine verifizieren.
</ul>
</p>
</div>
<div>
<p>
<b>Version 2.6.0</b>

View File

@@ -118,3 +118,6 @@
/* New file message from a specific person, not referencing a room. */
"LOCATION_FROM_USER" = "%@ udostępnił(-a) swoją lokację";
/* New voice broadcast from a specific person, not referencing a room. */
"VOICE_BROADCAST_FROM_USER" = "%@ rozpoczął transmisję głosową";

View File

@@ -1,5 +1,5 @@
// Titles
"title_home" = "Strona startowa";
"title_home" = "Strona główna";
"title_favourites" = "Ulubione";
"title_people" = "Osoby";
"title_rooms" = "Pokoje";
@@ -65,9 +65,9 @@
"auth_username_in_use" = "Nazwa użytkownika jest już używana";
"auth_use_server_options" = "Użyj niestandardowych ustawień serwera (zaawansowane)";
"auth_email_validation_message" = "Sprawdź swój e-mail, aby kontynuować rejestrację";
"auth_msisdn_validation_title" = "Oczekiwanie na weryfikację";
"auth_msisdn_validation_message" = "Wysłaliśmy SMS z kodem aktywacyjnym. Podaj ten kod poniżej.";
"auth_recaptcha_message" = "Ten serwer domowy chciałby się upewnić, że nie jesteś robotem";
"auth_msisdn_validation_title" = "Oczekiwanie weryfikacji";
"auth_msisdn_validation_message" = "Wysłaliśmy SMS-a z kodem aktywacyjnym. Wpisz otrzymany kod poniżej.";
"auth_recaptcha_message" = "Serwer domowy prosi o potwierdzenie, że nie jesteś robotem";
"auth_reset_password_message" = "Aby zresetować swoje hasło, wprowadź adres e-mail powiązany z twoim kontem:";
"auth_reset_password_missing_password" = "Należy wprowadzić nowe hasło.";
"auth_reset_password_next_step_button" = "Zweryfikowałem(-am) swój adres e-mail";
@@ -165,8 +165,8 @@
"room_event_action_more" = "Więcej";
"room_event_action_share" = "Udostępnij";
"room_event_action_permalink" = "Skopiuj link do wiadomości";
"room_event_action_view_source" = "Pokaż źródło";
"room_event_action_view_decrypted_source" = "Pokaż odszyfrowane źródło";
"room_event_action_view_source" = "Wyświetl źródło";
"room_event_action_view_decrypted_source" = "Pokaż rozszyfrowane źródło";
"room_event_action_report" = "Zgłoś zawartość";
"room_event_action_report_prompt_reason" = "Powód zgłoszenia zawartości";
"room_event_action_save" = "Zapisz";
@@ -443,7 +443,7 @@
"widget_integration_failed_to_send_request" = "Nie udało się wysłać żądania.";
"widget_integration_unable_to_create" = "Nie można utworzyć widżetu.";
// Widget Integration Manager
"widget_integration_need_to_be_able_to_invite" = "Aby to zrobić musisz mieć możliwość zapraszania użytkowników.";
"widget_integration_need_to_be_able_to_invite" = "Aby to zrobić, musisz mieć możliwość zapraszania użytkowników.";
"widget_sticker_picker_no_stickerpacks_alert" = "Nie masz obecnie włączonych żadnych pakietów naklejek.";
"widget_sticker_picker_no_stickerpacks_alert_add_now" = "Czy chcesz dodać teraz kilka?";
"widget_creation_failure" = "Utworzenie widżetu nie powiodło się";
@@ -522,7 +522,7 @@
"settings_key_backup_button_delete" = "Usuń kopię zapasową";
"settings_key_backup_delete_confirmation_prompt_title" = "Usuń kopię zapasową";
"auth_login_single_sign_on" = "Zaloguj się";
"auth_autodiscover_invalid_response" = "Nie udało się odnaleźć serwera domowego";
"auth_autodiscover_invalid_response" = "Nieprawidłowa odpowiedź na wykrycie serwera domowego";
"settings_key_backup_button_create" = "Zacznij korzystać z kopii zapasowej kluczy";
"settings_key_backup_button_restore" = "Przywróć z kopii zapasowej";
"room_details_fail_to_update_avatar" = "Nie udało się zaaktualizować zdjęcia pokoju";
@@ -538,7 +538,7 @@
"room_details_fail_to_update_room_communities" = "Nie udało się zaaktualizować powiązanych społeczności";
"room_details_fail_to_update_room_direct" = "Nie udało się zaaktualizować flagi tego pokoju";
"room_details_fail_to_enable_encryption" = "Nie udało się włączyć szyfrowania w tym pokoju";
"group_details_home" = "Strona startowa";
"group_details_home" = "Strona główna";
"key_backup_setup_intro_setup_action_without_existing_backup" = "Zacznij korzystać z Bezpiecznej Kopii Kluczy";
"key_backup_setup_intro_setup_connect_action_with_existing_backup" = "Podłącz tę sesję do Bezpiecznej Kopii Kluczy";
"key_backup_setup_intro_manual_export_info" = "(Zaawansowane)";
@@ -567,10 +567,10 @@
"key_backup_setup_success_from_recovery_key_make_copy_action" = "Zrób kopię";
"key_backup_setup_success_from_recovery_key_made_copy_action" = "Zrobiłem(-am) kopię";
"key_backup_recover_title" = "Bezpieczne wiadomości";
"key_backup_recover_invalid_passphrase_title" = "Nieprawidłowe hasło odzyskiwania";
"key_backup_recover_invalid_passphrase" = "Nie można odszyfrować kopii zapasowej przy użyciu tego hasła: sprawdź, czy zostało wprowadzone prawidłowe hasło odzyskiwania.";
"key_backup_recover_invalid_recovery_key_title" = "Niezgodność klucza odzyskiwania";
"key_backup_recover_invalid_recovery_key" = "Nie można odszyfrować kopii zapasowej za pomocą tego klucza: sprawdź, czy został wprowadzony prawidłowy klucz odzyskiwania.";
"key_backup_recover_invalid_passphrase_title" = "Nieprawidłowe hasło bezpieczeństwa";
"key_backup_recover_invalid_passphrase" = "Kopia zapasowa nie mogła zostać rozszyfrowana za pomocą tego Hasła: upewnij się, że wprowadzono prawidłowe Hasło bezpieczeństwa.";
"key_backup_recover_invalid_recovery_key_title" = "Klucze bezpieczeństwa nie pasują do siebie";
"key_backup_recover_invalid_recovery_key" = "Kopia zapasowa nie mogła zostać rozszyfrowana za pomocą tego Klucza: upewnij się, że wprowadzono prawidłowy Klucz bezpieczeństwa.";
"key_backup_recover_from_passphrase_info" = "Użyj hasło odzyskiwania, aby odszyfrować historyczne wiadomości";
"key_backup_recover_from_passphrase_passphrase_title" = "Wprowadź";
"key_backup_recover_from_passphrase_passphrase_placeholder" = "Wprowadź hasło";
@@ -609,7 +609,7 @@
"device_verification_error_cannot_load_device" = "Nie można załadować informacji dotyczących sesji.";
// Mark: Incoming
"device_verification_incoming_title" = "Przychodząca prośba o weryfikację";
"device_verification_incoming_description_1" = "Zweryfikuj tą sesję, aby oznaczyć ją jako zaufaną. Zaufane sesje dają Twoim rozmówcom dodatkowe poczucie spokoju, podczas konwersacji w pokojach z włączonym szyfrowaniem wiadomości end-to-end.";
"device_verification_incoming_description_1" = "Zweryfikuj tę sesję, aby oznaczyć ją jako zaufaną. Dodawanie sesji parterów do zaufanych, daje większej pewności, gdy korzystasz z wiadomości szyfrowanych end-to-end.";
"device_verification_incoming_description_2" = "Weryfikacja tej sesji spowoduje oznaczenie jej, jako zaufanej. Dodatkowo zostanie ona oznaczona jako zaufana również dla Twojego rozmówcy.";
// MARK: Start
"device_verification_start_title" = "Zweryfikuj, porównując krótki tekst";
@@ -707,7 +707,7 @@
// MARK: Reaction history
"reaction_history_title" = "Reakcje";
"auth_forgot_password_error_no_configured_identity_server" = "Brak skonfigurowanego serwera tożsamości: dodaj serwer tożsamości, aby zresetować hasło.";
"auth_softlogout_signed_out" = "Zostałeś(-aś) wylogowany(-a)";
"auth_softlogout_signed_out" = "Zostałeś wylogowany";
"auth_softlogout_reason" = "Administrator serwera domowego (%1$@) wylogował Cię z Twojego konta %2$@ (%3$@).";
"auth_softlogout_recover_encryption_keys" = "Zaloguj się aby odzyskać klucze szyfrujące zapisane na tym urządzeniu. Potrzebujesz ich aby odczytać wszystkie swoje zaszyfrowane wiadomości na którymkolwiek z Twoich urządzeń.";
"auth_softlogout_clear_data" = "Wyczyść prywatne dane";
@@ -1010,9 +1010,9 @@
// MARK: - Secrets reset
"secrets_reset_title" = "Zresetuj wszystko";
"secrets_setup_recovery_passphrase_summary_information" = "Zapamiętaj swoje hasło odzyskiwania. Możesz go użyć do odszyfrowania zaszyfrowanych wiadomości i danych.";
"secrets_setup_recovery_passphrase_summary_title" = "Zapisz swoje hasło odzyskiwania";
"secrets_reset_title" = "Resetuj wszystko";
"secrets_setup_recovery_passphrase_summary_information" = "Zapamiętaj swoje hasło bezpieczeństwa. Można go użyć do rozszyfrowania wiadomości szyfrowanych i różnych danych.";
"secrets_setup_recovery_passphrase_summary_title" = "Zapisz swoje hasło bezpieczeństwa";
"secrets_setup_recovery_passphrase_confirm_passphrase_placeholder" = "Potwierdź hasło";
"secrets_setup_recovery_passphrase_confirm_passphrase_title" = "Potwierdź";
"secrets_setup_recovery_passphrase_confirm_information" = "Wprowadź ponownie swoje hasło odzyskiwania.";
@@ -1021,19 +1021,19 @@
// Recovery passphrase
"secrets_setup_recovery_passphrase_title" = "Ustaw hasło odzyskiwania";
"secrets_setup_recovery_passphrase_title" = "Ustaw hasło bezpieczeństwa";
"secrets_setup_recovery_key_storage_alert_title" = "Dbaj o bezpieczeństwo";
"secrets_setup_recovery_key_done_action" = "Gotowe";
"secrets_setup_recovery_key_export_action" = "Zapisz";
"secrets_setup_recovery_key_loading" = "Ładowanie…";
"secrets_setup_recovery_key_information" = "Zapisz klucz odzyskiwania i przechowuj go w bezpiecznym miejscu. Będzie Ci on potrzebny, aby uzyskać dostęp do kopii kluczy zaszyfrowanych wiadomości przechowywanych na serwerze.";
"secrets_setup_recovery_key_information" = "Przechowuj swój klucz bezpieczeństwa w bezpiecznym miejscu. Można go użyć do rozszyfrowania wiadomości szyfrowanych i różnych danych.";
// MARK: - Secrets set up
// Recovery Key
"secrets_setup_recovery_key_title" = "Zapisz swój klucz odzyskiwania";
"secrets_recovery_with_key_invalid_recovery_key_title" = "Nie można uzyskać dostępu do kopii bezpieczeństwa";
"secrets_recovery_with_key_invalid_recovery_key_title" = "Nie można uzyskać dostępu do sekretnego magazynu";
"secrets_recovery_with_key_recover_action" = "Użyj klucz odzyskiwania";
"secrets_recovery_with_key_recovery_key_placeholder" = "Wprowadź klucz odzyskiwania";
"secrets_recovery_with_key_recovery_key_title" = "Wprowadź";
@@ -1044,26 +1044,26 @@
"secrets_recovery_with_key_title" = "Klucz odzyskiwania";
"secrets_recovery_with_passphrase_invalid_passphrase_message" = "Sprawdź, czy zostało wprowadzone prawidłowe hasło odzyskiwania.";
"secrets_recovery_with_passphrase_invalid_passphrase_title" = "Nie można uzyskać dostępu do kopii bezpieczeństwa";
"secrets_recovery_with_passphrase_invalid_passphrase_title" = "Nie można uzyskać dostępu do sekretnego magazynu";
"secrets_recovery_with_passphrase_lost_passphrase_action_part3" = ".";
"secrets_recovery_with_passphrase_lost_passphrase_action_part2" = "użyć klucz odzyskiwania";
"secrets_recovery_with_passphrase_lost_passphrase_action_part1" = "Nie znasz swojego hasła odzyskiwania? Możesz ";
"secrets_recovery_with_passphrase_recover_action" = "Użyj hasło odzyskiwania";
"secrets_recovery_with_passphrase_passphrase_placeholder" = "Wprowadź hasło odzyskiwania";
"secrets_recovery_with_passphrase_lost_passphrase_action_part2" = "użyj swojego Klucza bezpieczeństwa";
"secrets_recovery_with_passphrase_lost_passphrase_action_part1" = "Nie znasz swojego hasła bezpieczeństwa? Możesz ";
"secrets_recovery_with_passphrase_recover_action" = "Użyj hasła bezpieczeństwa";
"secrets_recovery_with_passphrase_passphrase_placeholder" = "Wprowadź hasło bezpieczeństwa";
"secrets_recovery_with_passphrase_passphrase_title" = "Wprowadź";
"secrets_recovery_with_passphrase_information_verify_device" = "Użyj hasło odzyskiwania, aby zweryfikować tę sesję.";
"secrets_recovery_with_passphrase_information_default" = "Uzyskaj dostęp do swoich zaszyfrowanych wiadomości i swojej tożsamości umożliwiającej weryfikację innych twoich sesji, wprowadzając swoje hasło odzyskiwania.";
// Recover with passphrase
"secrets_recovery_with_passphrase_title" = "Hasło odzyskiwania";
"secrets_recovery_reset_action_part_2" = "Zresetuj wszystko";
"secrets_recovery_with_passphrase_title" = "Hasło bezpieczeństwa";
"secrets_recovery_reset_action_part_2" = "Resetuj wszystko";
// MARK: - Secrets recovery
"secrets_recovery_reset_action_part_1" = "Zapomniałeś(-aś) lub straciłeś(-aś) wszystkie opcje odzyskiwania? ";
"user_verification_session_details_verify_action_other_user" = "Manualna weryfikacja";
"user_verification_session_details_verify_action_current_user_manually" = "Manualna weryfikacja za pomocą tekstu";
"secrets_recovery_reset_action_part_1" = "Zapomniałeś lub straciłeś wszystkie opcje odzyskiwania? ";
"user_verification_session_details_verify_action_other_user" = "Weryfikuj ręcznie";
"user_verification_session_details_verify_action_current_user_manually" = "Zweryfikuj manualnie za pomocą tekstu";
"user_verification_session_details_verify_action_current_user" = "Interaktywna weryfikacja";
"user_verification_session_details_additional_information_untrusted_current_user" = "Jeśli nie rozpoznajesz tej sesji to może oznaczać, że ktoś inny logował się na Twoje konto.";
"user_verification_session_details_additional_information_untrusted_other_user" = "Dopóki ten użytkownik nie zaufa tej sesji, wiadomości wysyłane do niej i z niej są oznaczane ostrzeżeniami. Alternatywnie możesz ją zweryfikować ręcznie.";
@@ -1123,9 +1123,9 @@
"key_verification_tile_conclusion_done_title" = "Zweryfikowano";
"key_verification_tile_request_incoming_approval_decline" = "Odmów";
"key_verification_tile_request_incoming_approval_accept" = "Zaakceptuj";
"key_verification_tile_request_status_accepted" = "Zaakceptowałeś(-aś)";
"key_verification_tile_request_status_accepted" = "Zaakceptowano";
"key_verification_tile_request_status_cancelled" = "%@ odrzucił(-a)";
"key_verification_tile_request_status_cancelled_by_me" = "Anulowałeś(-aś)";
"key_verification_tile_request_status_cancelled_by_me" = "Anulowałeś";
"key_verification_tile_request_status_expired" = "Wygasło";
"key_verification_tile_request_status_waiting" = "Oczekiwanie…";
"key_verification_tile_request_status_data_loading" = "Ładowanie danych…";
@@ -1147,20 +1147,20 @@
// User
"key_verification_verified_user_information" = "Wiadomości wysyłane do tego użytkownika są szyfrowane metodą end-to-end i nie mogą być odczytywane przez osoby trzecie.";
"key_verification_verified_user_information" = "Wiadomości z tym użytkownikiem są szyfrowane end-to-end i nie mogą zostać odczytane przez osoby trzecie.";
"key_verification_verified_this_session_information" = "Uzyskałeś(-aś) dostęp do zaszyfrowanych wiadomości w tej sesji. Dodatkowo użytkownicy będą ufać tej sesji.";
"key_verification_verified_new_session_information" = "Uzyskałeś(-aś) dostęp do zaszyfrowanych wiadomości w nowej sesji. Dodatkowo użytkownicy będą ufać tej sesji.";
"key_verification_verified_other_session_information" = "Uzyskałeś(-aś) dostęp do zaszyfrowanych wiadomości w swojej drugiej sesji. Dodatkowo użytkownicy będą ufać tej sesji.";
"key_verification_verified_new_session_title" = "Nowa sesja zweryfikowana!";
"key_verification_manually_verify_device_validate_action" = "Zweryfikuj";
"key_verification_manually_verify_device_additional_information" = "Jeżeli te dane się nie zgadzają to może oznaczać, że bezpieczeństwo komunikacji mogło zostać skompromitowane.";
"key_verification_manually_verify_device_additional_information" = "Jeśli nie pasują, bezpieczeństwo twojego konta mogło zostać zdradzone.";
"key_verification_manually_verify_device_key_title" = "Klucz sesji";
"key_verification_manually_verify_device_id_title" = "Identyfikator sesji";
"key_verification_manually_verify_device_name_title" = "Nazwa sesji";
// MARK: Manually Verify Device
"key_verification_manually_verify_device_title" = "Manualna weryfikacja za pomocą tekstu";
"key_verification_manually_verify_device_title" = "Zweryfikuj ręcznie za pomocą tekstu";
"key_verification_verify_sas_additional_information" = "Aby zapewnić maksymalne bezpieczeństwo, użyj innego zaufanego środka komunikacji lub zrób to osobiście.";
"key_verification_verify_sas_validate_action" = "Pasują";
"key_verification_verify_sas_cancel_action" = "Nie pasują";
@@ -1206,10 +1206,10 @@
"device_verification_security_advice_emoji" = "Porównaj unikalne emotikony, upewniając się, że pojawiają się w tej samej kolejności.";
"key_verification_user_title" = "Weryfikacja";
"key_verification_this_session_title" = "Weryfikacja bieżącej sesji";
"key_verification_new_session_title" = "Weryfikacja nowej sesji";
"key_verification_new_session_title" = "Weryfikuj nową sesję";
// MARK: - Device Verification
"key_verification_other_session_title" = "Weryfikacja istniejącej sesji";
"key_verification_other_session_title" = "Weryfikuj sesję";
"sign_out_non_existing_key_backup_alert_setup_secure_backup_action" = "Zacznij korzystać z bezpiecznej kopii zapasowej";
// Recover from private key
@@ -1229,7 +1229,7 @@
"secure_key_backup_setup_existing_backup_error_unlock_it" = "Odblokuj starą kopię";
"secure_key_backup_setup_existing_backup_error_info" = "Odblokuj ją, aby ponownie użyć jej w bezpiecznej kopii zapasowej lub usuń, aby utworzyć nową kopię zapasową wiadomości w bezpiecznej kopii zapasowej.";
"secure_key_backup_setup_existing_backup_error_title" = "Kopia zapasowa wiadomości już istnieje";
"secure_key_backup_setup_intro_use_security_passphrase_title" = "Ustaw hasło odzyskiwania";
"secure_key_backup_setup_intro_use_security_passphrase_title" = "Użyj hasła bezpieczeństwa";
"secure_key_backup_setup_intro_use_security_key_info" = "Wygeneruj klucz odzyskiwania. Następnie zdeponuj go w bezpiecznym miejscu.";
"secure_key_backup_setup_intro_use_security_key_title" = "Ustaw klucz odzyskiwania";
"secure_key_backup_setup_intro_info" = "Zabezpiecz się przed utratą dostępu do zaszyfrowanych wiadomości wykonując kopię zapasową kluczy szyfrowania na Twoim serwerze domowym.";
@@ -1269,7 +1269,7 @@
"bug_report_background_mode" = "Kontynuuj w tle";
"call_actions_unhold" = "Wznów połączenie";
"call_no_stun_server_error_use_fallback_button" = "Spróbuj użyć %@";
"call_no_stun_server_error_message_2" = "Alternatywnie możesz spróbować użyć serwera publicznego pod adresem %@, ale nie będzie to tak niezawodne i będzie udostępni Twój adres IP temu serwerowi. Możesz również zarządzać tym w Ustawieniach";
"call_no_stun_server_error_message_2" = "Alternatywnie możesz spróbować użyć serwera publicznego %@, ale mogą wystąpić problemy i zostanie udostępniony Twój adres IP z serwerem. Zarządzaj tym również w Ustawieniach";
"call_no_stun_server_error_message_1" = "Poproś administratora swojego serwera domowego %@ o skonfigurowanie serwera TURN, aby połączenia działały niezawodnie.";
"call_no_stun_server_error_title" = "Połączenie nie powiodło się z powodu błędnej konfiguracji serwera";
@@ -1292,7 +1292,7 @@
"room_details_access_section_anyone_for_dm" = "Każdy kto zna link pokoju, razem z gośćmi";
"room_details_access_section_anyone_apart_from_guest_for_dm" = "Każdy kto zna link pokoju, poza gośćmi";
"room_details_access_section_for_dm" = "Kto może dołączyć do pokoju?";
"room_details_room_name_for_dm" = "Nazwa Pokoju";
"room_details_room_name_for_dm" = "Nazwa";
"room_details_photo_for_dm" = "Obraz pokoju";
"room_details_integrations" = "Integracje";
"room_details_search" = "Wyszukaj w pokoju";
@@ -1301,10 +1301,10 @@
"identity_server_settings_alert_error_terms_not_accepted" = "Musisz zaakceptować warunki %@, aby ustawić go jako serwer tożsamości.";
"identity_server_settings_alert_disconnect_still_sharing_3pid_button" = "Odłącz mimo wszystko";
"identity_server_settings_alert_disconnect_still_sharing_3pid" = "Nadal udostępniasz swoje dane personalne na serwerze tożsamości %@. \n\nZalecamy usunięcie adresów e-mail i numerów telefonów z serwera tożsamości przed rozłączeniem.";
"identity_server_settings_alert_disconnect_button" = "Odłącz";
"identity_server_settings_alert_disconnect" = "Odłączyć się od serwera tożsamości %@?";
"identity_server_settings_alert_disconnect_title" = "Odłącz serwer tożsamości";
"identity_server_settings_alert_change" = "Odłączyć się od serwera tożsamości %1$@ i zamiast tego połączyć się z %2$@?";
"identity_server_settings_alert_disconnect_button" = "Rozłącz";
"identity_server_settings_alert_disconnect" = "Rozłączyć się z serwerem tożsamości %@?";
"identity_server_settings_alert_disconnect_title" = "Rozłącz serwer tożsamości";
"identity_server_settings_alert_change" = "Rozłączyć się z bieżącym serwerem tożsamości %1$@ i połączyć się z %2$@?";
"identity_server_settings_alert_change_title" = "Zmień serwer tożsamości";
"identity_server_settings_alert_no_terms" = "Wybrany serwer tożsamości nie ma żadnych warunków korzystania z usługi. Kontynuuj tylko wtedy, gdy ufasz właścicielowi serwera.";
"identity_server_settings_alert_no_terms_title" = "Serwer tożsamości nie ma warunków świadczenia usług";
@@ -1348,7 +1348,7 @@
"security_settings_crypto_sessions_description_2" = "Jeśli nie rozpoznajesz którejś z sesji to zmień hasło i zresetuj bezpieczną kopię zapasową.";
"settings_show_NSFW_public_rooms" = "Pokaż publiczne pokoje NSFW";
"secrets_setup_recovery_key_storage_alert_message" = "✓ Wydrukuj klucz i przechowuj go w bezpiecznym miejscu\n✓ Zapisz klucz na pendrive lub dysku zapasowym\n✓ Skopiuj klucz na prywatnym dysku w chmurze";
"user_verification_sessions_list_information" = "Konwersacja z tym użytkownikiem w tym pokoju jest szyfrowana end-to-end i nie może być odczytana przez osoby trzecie.";
"user_verification_sessions_list_information" = "Wiadomości z tym użytkownikiem szyfrowane end-to-end i nie mogą zostać odczytane przez osoby trzecie.";
"service_terms_modal_description_for_identity_server_2" = "Daj się znaleźć na podstawie numeru telefonu lub adresu e-mail";
"secrets_setup_recovery_passphrase_information" = "Wprowadź unikalne hasło odzyskiwania. Będzie ono używane do zabezpieczenia Twojej kopii kluczy przechowywanej na serwerze.";
"secrets_recovery_with_key_invalid_recovery_key_message" = "Sprawdź, czy wprowadziłeś(-aś) poprawny klucz odzyskiwania.";
@@ -1448,7 +1448,7 @@
"voice_message_release_to_send" = "Przytrzymaj, aby nagrać, zwolnij, aby wysłać";
"side_menu_app_version" = "Wersja %@";
"side_menu_action_feedback" = "Feedback";
"side_menu_action_feedback" = "Opinia użytkownika";
"side_menu_action_help" = "Pomoc";
"side_menu_action_settings" = "Ustawienia";
"side_menu_action_invite_friends" = "Zaproś przyjaciół";
@@ -1998,7 +1998,7 @@
// Room members
"room_member_ignore_prompt" = "Czy na pewno chcesz ukryć wszystkie wiadomości od tego użytkownika?";
"message_reply_to_message_to_reply_to_prefix" = "W odpowiedzi na";
"message_reply_to_message_to_reply_to_prefix" = "W odpowiedzi do";
"message_reply_to_sender_sent_a_file" = "wysłał(-a) plik.";
"message_reply_to_sender_sent_a_video" = "wysłał(-a) plik wideo.";
"message_reply_to_sender_sent_an_audio_file" = "wysłał(-a) plik audio.";
@@ -2038,10 +2038,10 @@
"account_error_display_name_change_failed" = "Zmiana wyświetlanej nazwy nie powiodła się";
"account_msisdn_validation_error" = "Nie można zweryfikować numeru telefonu.";
"account_msisdn_validation_message" = "Wysłaliśmy SMS-a z kodem aktywacyjnym. Wpisz otrzymany kod poniżej.";
"account_msisdn_validation_title" = "Oczekiwanie na weryfikację";
"account_msisdn_validation_title" = "Oczekiwanie weryfikacji";
"account_email_validation_error" = "Nie można zweryfikować adresu e-mail. Sprawdź swoją skrzynkę e-mail i kliknij zawarte w niej łącze. Gdy to zrobisz, kliknij kontynuuj";
"account_email_validation_message" = "Sprawdź swoją skrzynkę e-mail i kliknij zawarte w niej łącze. Gdy to zrobisz, kliknij kontynuuj.";
"account_email_validation_title" = "Oczekiwanie na weryfikację";
"account_email_validation_title" = "Oczekiwanie weryfikacji";
"account_linked_emails" = "Połączone adresy e-mail";
"account_link_email" = "Połącz adres e-mail";
@@ -2133,10 +2133,10 @@
"poll_timeline_not_closed_subtitle" = "Proszę spróbuj ponownie";
"poll_timeline_not_closed_title" = "Nie udało się zakończyć ankiety";
"poll_timeline_vote_not_registered_subtitle" = "Przepraszamy, Twój głos nie został zarejestrowany, spróbuj ponownie";
"poll_timeline_vote_not_registered_title" = "Głos niezarejestrowany";
"poll_timeline_vote_not_registered_title" = "Głos nie został zarejestrowany";
"poll_timeline_total_final_results" = "Ostateczne wyniki na podstawie %lu głosów";
"poll_timeline_total_final_results_one_vote" = "Wyniki końcowe na podstawie 1 głosu";
"poll_timeline_total_votes_not_voted" = "%lu oddane/ych głosy/ów. Zagłosuj, aby zobaczyć wyniki";
"poll_timeline_total_votes_not_voted" = "Oddano %lu głosów. Zagłosuj, aby zobaczyć wyniki";
"poll_timeline_total_one_vote_not_voted" = "1 oddany głos. Zagłosuj, aby zobaczyć wyniki";
"poll_timeline_total_votes" = "%lu głosy/ów";
"poll_timeline_total_one_vote" = "1 głos";
@@ -2169,11 +2169,11 @@
// Mark: Avatar
"space_avatar_view_accessibility_label" = "avatar";
"space_avatar_view_accessibility_label" = "awatar";
// MARK: Reactions
"room_event_action_reaction_more" = "%@ jeszcze";
"room_event_action_reaction_more" = "%@ więcej";
"leave_space_selection_no_rooms" = "Nie zaznaczaj pokoi";
"leave_space_selection_all_rooms" = "Wybierz wszystkie pokoje";
"leave_space_selection_title" = "WYBIERZ POKOJE";
@@ -2196,7 +2196,7 @@
"spaces_creation_post_process_creating_space_task" = "Tworzę %@";
"spaces_creation_post_process_creating_space" = "Tworzenie przestrzeni";
"spaces_creation_invite_by_username_message" = "Możesz ich też zaprosić później.";
"spaces_creation_invite_by_username" = "Zaproś według nazwy użytkownika";
"spaces_creation_invite_by_username" = "Zaproś przez nazwę użytkownika";
"spaces_creation_add_rooms_message" = "Ponieważ ta przestrzeń jest tylko dla Ciebie, nikt nie zostanie o tym poinformowany. Możesz dodać więcej później.";
"spaces_creation_add_rooms_title" = "Co chcesz dodać?";
"spaces_creation_sharing_type_me_and_teammates_detail" = "Prywatna przestrzeń dla Ciebie i Twoich kolegów z drużyny";
@@ -2208,11 +2208,11 @@
"spaces_creation_email_invites_email_title" = "Email";
"spaces_creation_email_invites_message" = "Możesz ich też zaprosić później.";
"spaces_creation_email_invites_title" = "Zaproś swój zespół";
"spaces_creation_new_rooms_support" = "Wspierać się";
"spaces_creation_new_rooms_random" = "Losowy";
"spaces_creation_new_rooms_support" = "Wsparcie";
"spaces_creation_new_rooms_random" = "Losowe";
"spaces_creation_new_rooms_general" = "Ogólny";
"spaces_creation_new_rooms_room_name_title" = "Nazwa pokoju";
"spaces_creation_new_rooms_message" = "Dla każdego stworzymy pokój.";
"spaces_creation_new_rooms_message" = "Utworzymy pokój dla każdego z nich.";
"spaces_creation_new_rooms_title" = "Jakie dyskusje będziesz mieć?";
"spaces_creation_cancel_message" = "Twoje postępy zostaną utracone.";
"spaces_creation_cancel_title" = "Przestać tworzyć przestrzeń?";
@@ -2237,15 +2237,15 @@
"space_settings_access_section" = "Kto ma dostęp do tej przestrzeni?";
"space_topic" = "Opis";
"space_public_join_rule_detail" = "Otwarty dla każdego, najlepszy dla społeczności";
"spaces_add_space" = "Dodaj miejsce";
"spaces_add_space" = "Dodaj przestrzeń";
"spaces_add_room" = "Dodaj pokój";
"spaces_invite_people" = "Zaproś ludzi";
"space_public_join_rule" = "Miejsce publiczne";
"space_public_join_rule" = "Przestrzeń publiczna";
"space_private_join_rule_detail" = "Tylko zapraszaj, najlepiej dla siebie lub zespołów";
"space_private_join_rule" = "Prywatna przestrzeń";
"space_private_join_rule" = "Przestrzeń prywatna";
"space_home_show_all_rooms" = "Pokaż wszystkie pokoje";
"space_participants_action_ban" = "Zakaz z tej przestrzeni";
"space_participants_action_remove" = "Usuń z tego miejsca";
"space_participants_action_ban" = "Zbanuj z tej przestrzeni";
"space_participants_action_remove" = "Usuń z tej przestrzeni";
"spaces_coming_soon_detail" = "Ta funkcja nie została tutaj zaimplementowana, ale jest w drodze. Na razie możesz to zrobić za pomocą %@ na swoim komputerze.";
"spaces_invites_coming_soon_title" = "Zaproszenia już wkrótce";
"spaces_add_rooms_coming_soon_title" = "Wkrótce dodam pokoje";
@@ -2302,11 +2302,11 @@
"create_room_suggest_room" = "Zaproponuj członkom przestrzeni";
"create_room_show_in_directory_footer" = "Pomoże to ludziom znaleźć i dołączyć do pokoju.";
"create_room_promotion_header" = "AWANS";
"create_room_section_footer_type_public" = "Tylko zaproszone osoby mogą znajdować i dołączać, a nie tylko osoby o nazwie Space.";
"create_room_section_footer_type_public" = "Tylko zaproszone osoby mogą Cię znaleźć i dołączyć, a nie tylko osoby w tej samej przestrzeni.";
"create_room_section_footer_type_restricted" = "Każda osoba w Przestrzeni może wyszukiwać i dołączać.";
"create_room_section_footer_type_private" = "Tylko zaproszone osoby mogą znaleźć i dołączyć do tego pokoju.";
"create_room_type_restricted" = "Członkowie przestrzeni";
"key_verification_manually_verify_device_instruction" = "Potwierdź zgodność poniższych informacji porównując następujące elementy z ustawieniami użytkownika w drugiej sesji:";
"key_verification_manually_verify_device_instruction" = "Potwierdź porównując następujące elementy w ustawieniach użytkownika w drugiej sesji:";
"service_terms_modal_information_description_integration_manager" = "Menedżer integracji umożliwia dodawanie funkcji od stron trzecich.";
"service_terms_modal_information_description_identity_server" = "Serwer tożsamości pomaga znaleźć kontakty, wyszukując ich numer telefonu lub adres e-mail, aby sprawdzić, czy mają już konto.";
"service_terms_modal_information_title_integration_manager" = "Menedżer integracji";
@@ -2315,7 +2315,7 @@
"service_terms_modal_information_title_identity_server" = "Serwer Tożsamości";
"service_terms_modal_description_integration_manager" = "Umożliwi to korzystanie z botów, mostów, widżetów i pakietów naklejek.";
"service_terms_modal_description_identity_server" = "Umożliwi to komuś znalezienie Cię, jeśli ma Twój numer telefonu lub adres e-mail zapisany w swoich kontaktach telefonicznych.";
"analytics_prompt_message_new_user" = "Pomóż nam zidentyfikować problemy i ulepszyć %@, udostępniając anonimowe dane o użytkowaniu. Aby zrozumieć, w jaki sposób ludzie korzystają z wielu urządzeń, wygenerujemy losowy identyfikator udostępniany przez Twoje urządzenia.";
"analytics_prompt_message_new_user" = "Pomóż nam zidentyfikować problemy i ulepszyć %@, udostępniając anonimowe dane o użytkowaniu. Aby zrozumieć, w jaki sposób użytkownicy korzystają z wielu urządzeń, wygenerujemy losowy identyfikator dzielony pomiędzy Twoimi urządzeniami.";
"network_offline_message" = "Jesteś offline, sprawdź swoje połączenie.";
"network_offline_title" = "Jesteś offline";
"event_formatter_message_deleted" = "Wiadomość usunięta";
@@ -2375,7 +2375,7 @@
"threads_empty_show_all_threads" = "Pokaż wszystkie wątki";
"threads_empty_tip" = "Wskazówka: dotknij wiadomości i użyj „Nowy wątek”, aby go utworzyć.";
"threads_empty_info_my" = "Odpowiedz w danym wątku lub dotknij wiadomości i użyj „Nowy wątek”, aby go rozpocząć.";
"threads_empty_info_all" = "Wątki umożliwiają łatwiejsze wyszukiwanie i agregowanie wiadomości dotyczących danego tematu.";
"threads_empty_info_all" = "Dzięki wątkom Twoje rozmowy są zorganizowane i łatwe do śledzenia.";
"threads_empty_title" = "Organizuj dyskusje za pomocą wątków";
"threads_action_my_threads" = "Moje wątki";
"threads_action_all_threads" = "Wszystkie wątki";
@@ -2390,7 +2390,7 @@
"room_accessibility_threads" = "Wątki";
"room_event_copy_link_info" = "Link skopiowany do schowka.";
"room_event_action_reply_in_thread" = "Wątek";
"room_event_action_view_in_room" = "Zobacz w pokoju";
"room_event_action_view_in_room" = "Wyświetl w pokoju";
"room_participants_invite_prompt_to_msg" = "Czy na pewno chcesz zaprosić %@ do %@?";
"room_participants_leave_success" = "Opuszczono pokój";
"room_participants_leave_processing" = "Opuszczanie";
@@ -2424,7 +2424,7 @@
"authentication_verify_msisdn_text_field_placeholder" = "Numer telefonu";
"authentication_verify_msisdn_input_message" = "%@ musi zweryfikować Twoje konto";
"authentication_verify_msisdn_input_title" = "Wprowadź swój numer telefonu";
"authentication_choose_password_submit_button" = "Zresetuj hasło";
"authentication_choose_password_submit_button" = "Resetuj hasło";
"authentication_choose_password_signout_all_devices" = "Wyloguj się ze wszystkich urządzeń";
"authentication_choose_password_text_field_placeholder" = "Nowe Hasło";
"authentication_choose_password_input_message" = "Upewnij się, że ma 8 znaków lub więcej";
@@ -2497,7 +2497,7 @@
"onboarding_splash_page_3_title" = "Bezpieczne przesyłanie wiadomości.";
"onboarding_splash_page_2_message" = "Wybierz, gdzie chcesz przechowywać swoje rozmowy. Połączenie ustanowione poprzez Matrix.";
"onboarding_splash_page_2_title" = "Masz kontrolę.";
"onboarding_splash_page_1_title" = "Zarządzaj swoimi rozmowami.";
"onboarding_splash_page_1_title" = "Bądź właścicielem swoich konwersacji.";
"saving" = "Zapisywanie";
// Activities
@@ -2510,10 +2510,10 @@
"new_word" = "Nowy";
"stop" = "Stop";
"joining" = "Dołączanie";
"location_sharing_invalid_power_level_message" = "Aby udostępniać lokalizację na żywo w tym pokoju, musisz mieć odpowiednie uprawnienia.";
"location_sharing_invalid_power_level_message" = "Musisz mieć odpowiednie uprawnienia, aby udostępniać lokalizację na żywo w tym pokoju.";
"location_sharing_invalid_power_level_title" = "Nie masz uprawnień do udostępniania lokalizacji na żywo";
"authentication_choose_password_not_verified_message" = "Sprawdź swoją skrzynkę odbiorczą";
"authentication_choose_password_not_verified_title" = "E-mail niezweryfikowany";
"authentication_choose_password_not_verified_title" = "E-mail nie został zweryfikowany";
"authentication_server_info_title_login" = "Miejsce twoich konwersacji";
// MARK: User sessions management
@@ -2539,7 +2539,7 @@
"room_recents_recently_viewed_section" = "Ostatnio wyświetlane";
"all_chats_nothing_found_placeholder_message" = "Spróbuj poprawić swoje wyszukiwanie.";
"all_chats_nothing_found_placeholder_title" = "Nic nie znaleziono.";
"all_chats_empty_unreads_placeholder_message" = "W tym miejscu pojawią się nieprzeczytane wiadomości, gdy będziesz takie mieć.";
"all_chats_empty_unreads_placeholder_message" = "W tym miejscu pojawią się nieprzeczytane wiadomości, jeśli jakieś dostaniesz.";
"all_chats_empty_list_placeholder_title" = "Jesteś na bieżąco.";
"all_chats_empty_view_information" = "Bezpieczny, wielofunkcyjny komunikator dla zespołów, znajomych i organizacji. Utwórz rozmowę, lub dołącz do istniejącego pokoju, aby rozpocząć.";
"all_chats_empty_space_information" = "Przestrzenie to nowy sposób na grupowanie pokojów i osób. Dodaj istniejący pokój, lub utwórz nowy, korzystając z przycisku w prawym dolnym rogu.";
@@ -2577,3 +2577,277 @@
"authentication_qr_login_start_title" = "Zeskanuj kod QR";
"authentication_login_with_qr" = "Zaloguj się za pomocą kodu QR";
"accessibility_selected" = "wybrane";
"authentication_qr_login_start_step2" = "Przejdź do Ustawień -> Bezpieczeństwo i prywatność";
"user_other_session_verified_sessions_header_subtitle" = "Dla najlepszego bezpieczeństwa, wyloguj się ze wszystkich sesji, których nie rozpoznajesz lub nie używasz.";
"user_sessions_overview_other_sessions_section_info" = "Dla najlepszego bezpieczeństwa, zweryfikuj swoje sesje i wyloguj się ze wszystkich sesji, których nie rozpoznajesz lub nie używasz.";
"poll_history_no_past_poll_period_text" = "Nie znaleziono przeszłych ankiet w ostatnich %@ dniach. Wczytaj więcej ankiet, aby wyświetlić ankiety z poprzednich miesięcy";
"poll_history_no_active_poll_period_text" = "Nie znaleziono aktywnych ankiet w ostatnich %@ dniach. Wczytaj więcej ankiet, aby wyświetlić ankiety z poprzednich miesięcy";
/* The placeholder will be replaces with manage_session_name_info_link */
"manage_session_name_info" = "Bądź świadom, że nazwy sesji są również widoczne dla ludzi, z którymi się komunikujesz. %@";
"settings_acceptable_use" = "Akceptowalna polityka użytkowania";
// First item is client name and second item is session display name
"user_session_name" = "%@: %@";
/* %1$@ will be the verification state and %2$@ will be user_session_item_details_verification_unknown or user_other_session_current_session_details */
"user_session_item_details" = "%1$@ · %2$@";
"device_name_web" = "%@ Web";
"device_name_mobile" = "%@ Mobile";
"device_type_name_web" = "Web";
"device_type_name_desktop" = "Desktop";
"device_type_name_mobile" = "Mobile";
"room_waiting_other_participants_message" = "Jak tylko zaproszeni użytkownicy dołączą do %@, będziesz mógł czatować w pokoju szyfrowanym end-to-end";
"room_waiting_other_participants_title" = "Czekanie na użytkowników %@";
"all_chats_user_menu_accessibility_label" = "Menu użytkownika";
"voice_broadcast_playback_unable_to_decrypt" = "Nie można rozszyfrować tej transmisji głosowej.";
"voice_broadcast_recorder_connection_error" = "Błąd połączenia - Nagrywanie wstrzymane";
"voice_broadcast_connection_error_message" = "Niestety, nie jesteśmy w stanie rozpocząć nowego nagrania. Spróbuj ponownie później.";
"voice_broadcast_playback_loading_error" = "Nie można odtworzyć tej transmisji głosowej.";
"voice_broadcast_already_in_progress_message" = "Już nagrywasz transmisję głosową. Zakończ bieżącą transmisję głosową, aby rozpocząć nową.";
"voice_broadcast_blocked_by_someone_else_message" = "Ktoś już nagrywa transmisję głosową. Aby rozpocząć nową, poczekaj aż bieżąca się skończy.";
"key_verification_scan_qr_code_information_other_user" = "Ustaw kamerę na kod QR wyświetlony na ich urządzeniu, aby zweryfikować ich sesję";
"key_verification_scan_qr_code_information_other_device" = "Ustaw kamerę na kod QR wyświetlony na swoim drugim urządzeniu, aby zweryfikować tę sesję";
"key_verification_scan_qr_code_information_other_session" = "Ustaw kamerę na kod QR wyświetlony na swoim drugim urządzeniu, aby zweryfikować swoją sesję";
"key_verification_scan_qr_code_information_new_session" = "Ustaw kamerę na kod QR wyświetlony na swoim drugim urządzeniu, aby zweryfikować swoją nową sesję";
"device_verification_self_verify_wait_recover_secrets_additional_help" = "Nie możesz dostać się do istniejącej %@ sesji?";
"poll_timeline_decryption_error" = "Ze względu na błędy rozszyfrowywania, niektóre głosy mogły nie zostać policzone";
"user_sessions_overview_security_recommendations_section_info" = "Zwiększ bezpieczeństwo swojego konta kierując się tymi rekomendacjami.";
"user_other_session_current_session_details" = "Twoja bieżąca sesja";
"user_other_session_security_recommendation_title" = "Inne sesje";
"user_session_rename_session_title" = "Zmienianie nazwy sesji";
"user_session_inactive_session_title" = "Sesje nieaktywne";
"user_session_unverified_session_title" = "Sesja niezweryfikowana";
"user_session_verified_session_title" = "Sesje zweryfikowane";
"user_session_got_it" = "Rozumiem";
"user_session_push_notifications_message" = "Po włączeniu, ta sesja zacznie otrzymywać powiadomienia push.";
"user_session_push_notifications" = "Powiadomienia push";
"user_other_session_verified_additional_info" = "Sesja jest gotowa do wysyłania bezpiecznych wiadomości.";
"user_other_session_permanently_unverified_additional_info" = "Ta sesja nie wspiera szyfrowania, dlatego nie może zostać zweryfikowana.";
"user_other_session_unverified_additional_info" = "Zweryfikuj lub wyloguj się z tej sesji dla zapewnienia najlepszego bezpieczeństwa.";
"user_session_verification_unknown_additional_info" = "Zweryfikuj swoją bieżącą sesję, aby odsłonić status weryfikacji tej sesji.";
"user_session_unverified_additional_info" = "Zweryfikuj swoją bieżącą sesję dla wzmocnienia bezpiecznych wiadomości.";
"user_session_verified_additional_info" = "Twoja bieżąca sesja jest gotowa do wysyłania bezpiecznych wiadomości.";
"user_session_learn_more" = "Dowiedz się więcej";
"user_session_view_details" = "Wyświetl szczegóły";
"user_session_verify_action" = "Zweryfikuj sesję";
"user_session_verification_unknown_short" = "Nieznana";
"user_session_unverified_short" = "Niezweryfikowano";
"user_session_verified_short" = "Zweryfikowano";
"user_session_verification_unknown" = "Nieznany status weryfikacji";
"user_session_unverified" = "Sesja niezweryfikowana";
"user_session_verified" = "Sesja zweryfikowana";
"user_sessions_view_all_action" = "Wyświetl wszystko (%d)";
"user_sessions_overview_link_device" = "Powiąż urządzenie";
"user_sessions_overview_current_session_section_title" = "Bieżąca sesja";
"user_sessions_hide_location_info" = "Ukryj adres IP";
"user_sessions_show_location_info" = "Pokaż adres IP";
"user_sessions_overview_security_recommendations_inactive_info" = "Rozważ wylogowanie się ze starych sesji (90 dni lub starsze), jeśli już z nich nie korzystasz.";
"user_sessions_overview_other_sessions_section_title" = "Inne sesje";
"user_sessions_overview_security_recommendations_inactive_title" = "Sesje nieaktywne";
"user_sessions_overview_security_recommendations_unverified_info" = "Zweryfikuj lub wyloguj się z niezweryfikowanych sesji.";
"user_sessions_overview_security_recommendations_unverified_title" = "Sesje niezweryfikowane";
"user_sessions_overview_security_recommendations_section_title" = "Rekomendacje bezpieczeństwa";
// MARK: User sessions management
// Parameter is the application display name (e.g. "Element")
"user_sessions_default_session_display_name" = "%@ iOS";
"poll_timeline_loading" = "Wczytywanie...";
"poll_timeline_reply_ended_poll" = "Zakończył ankietę";
"poll_timeline_ended_text" = "Zakończył ankietę";
"poll_history_fetching_error" = "Błąd podczas pobierania ankiet.";
"poll_history_load_more" = "Wczytaj więcej ankiet";
"poll_history_detail_view_in_timeline" = "Wyświetl ankietę na osi czasu";
"poll_history_no_past_poll_text" = "Brak przeszłych ankiet w tym pokoju";
"poll_history_no_active_poll_text" = "Brak aktywnych ankiet w tym pokoju";
"poll_history_past_segment_title" = "Przeszłe ankiety";
"poll_history_active_segment_title" = "Aktywne ankiety";
"poll_history_loading_text" = "Wyświetlanie ankiet";
// MARK: - Polls history
"poll_history_title" = "Historia ankiet";
"user_other_session_filter" = "Filtr";
"user_other_session_no_unverified_sessions" = "Nie znaleziono niezweryfikowanych sesji.";
"pill_message_in" = "Wiadomość w %@";
"pill_message_from" = "Wiadomość od %@";
"pill_message" = "Wiadomość";
// Pills
"pill_room_fallback_display_name" = "Przestrzeń/Pokój";
"notice_display_name_changed_to" = "%@ zmienił swoją wyświetlaną nazwę %@";
"room_event_encryption_info_key_authenticity_not_guaranteed" = "Autentyczność tej wiadomości szyfrowanej nie jest gwarantowana na tym urządzeniu.";
"notice_voice_broadcast_ended_by_you" = "Zakończyłeś transmisje na żywo.";
"notice_voice_broadcast_ended" = "%@ zakończył transmisje na żywo.";
"notice_voice_broadcast_live" = "Transmisja na żywo";
"deselect_all" = "Odznacz wszystko";
"wysiwyg_composer_link_action_edit_title" = "Edytuj link";
"wysiwyg_composer_link_action_create_title" = "Utwórz link";
"wysiwyg_composer_link_action_link" = "Link";
// Links
"wysiwyg_composer_link_action_text" = "Tekst";
"wysiwyg_composer_format_action_un_indent" = "Zmniejsz wcięcie";
"wysiwyg_composer_format_action_indent" = "Zwiększ wcięcie";
"wysiwyg_composer_format_action_quote" = "Przełącz cytat";
"wysiwyg_composer_format_action_code_block" = "Przełącz blok kodu";
"wysiwyg_composer_format_action_ordered_list" = "Przełącz listę numerowaną";
"wysiwyg_composer_format_action_unordered_list" = "Przełącz listę punktorów";
"wysiwyg_composer_format_action_inline_code" = "Zastosuj kod w tekście";
"wysiwyg_composer_format_action_link" = "Zastosuj link";
"wysiwyg_composer_format_action_strikethrough" = "Zastosuj podkreślenie";
"wysiwyg_composer_format_action_underline" = "Zastosuj przekreślenie";
"wysiwyg_composer_format_action_italic" = "Zastosuj kursywę";
// Formatting Actions
"wysiwyg_composer_format_action_bold" = "Zastosuj pogrubienie";
"wysiwyg_composer_start_action_voice_broadcast" = "Transmisja głosowa";
"wysiwyg_composer_start_action_text_formatting" = "Formatowanie tekstu";
"wysiwyg_composer_start_action_camera" = "Kamera";
"wysiwyg_composer_start_action_location" = "Lokalizacja";
"wysiwyg_composer_start_action_polls" = "Ankiety";
"wysiwyg_composer_start_action_attachments" = "Załączniki";
"wysiwyg_composer_start_action_stickers" = "Naklejki";
// MARK: - WYSIWYG Composer
// Send Media Actions
"wysiwyg_composer_start_action_media_picker" = "Biblioteka zdjęć";
"user_session_overview_session_details_button_title" = "Szczegóły sesji";
"user_session_overview_session_title" = "Sesja";
"user_session_overview_current_session_title" = "Bieżąca sesja";
"user_session_details_application_url" = "URL";
"user_session_details_application_version" = "Wersja";
"user_session_details_application_name" = "Nazwa";
"user_session_details_device_os" = "System operacyjny";
"user_session_details_device_browser" = "Przeglądarka";
"user_session_details_device_model" = "Model";
"user_session_details_device_ip_location" = "Lokalizacja IP";
"user_session_details_device_ip_address" = "Adres IP";
"user_session_details_last_activity" = "Ostatnia aktywność";
"user_session_details_session_id" = "ID sesji";
"user_session_details_session_name" = "Nazwa sesji";
"user_session_details_device_section_header" = "Urządzenie";
"user_session_details_application_section_header" = "Aplikacja";
"user_session_details_session_section_header" = "Sesja";
"user_session_details_title" = "Szczegóły sesji";
"device_type_name_unknown" = "Nieznany";
"device_name_unknown" = "Nieznany klient";
"device_name_desktop" = "%@ Desktop";
"user_inactive_session_item_with_date" = "Nieaktywny przez 90+ dni (%@)";
"user_inactive_session_item" = "Nieaktywny przez 90+ dni";
"user_session_item_details_last_activity" = "Ostatnia aktywność %@";
"user_other_session_menu_sign_out_sessions" = "Wyloguj z %@ sesji";
"user_other_session_menu_select_sessions" = "Zaznacz sesje";
"user_other_session_selected_count" = "%@ zaznaczono";
"user_other_session_clear_filter" = "Wyczyść filtry";
"user_other_session_no_verified_sessions" = "Nie znaleziono zweryfikowanych sesji.";
"user_other_session_no_inactive_sessions" = "Nie znaleziono nieaktywnych sesji.";
"user_other_session_filter_menu_inactive" = "Nieaktywny";
"user_other_session_filter_menu_unverified" = "Niezweryfikowano";
"user_other_session_filter_menu_verified" = "Zweryfikowano";
"user_other_session_filter_menu_all" = "Wszystkie sesje";
"voice_broadcast_voip_cannot_start_description" = "Nie możesz rozpocząć połączenia, ponieważ już nagrywasz transmisję na żywo.";
"voice_broadcast_connection_error_title" = "Błąd połączenia";
"voice_broadcast_voip_cannot_start_title" = "Nie można rozpocząć połączenia";
"voice_broadcast_stop_alert_agree_button" = "Tak, zatrzymaj";
"voice_broadcast_stop_alert_description" = "Czy na pewno chcesz zakończyć transmisję na żywo? Transmisja zostanie zakończona, a całe nagranie będzie dostępne w pokoju.";
"voice_broadcast_stop_alert_title" = "Zakończyć transmisję na żywo?";
"voice_broadcast_buffering" = "Buforowanie...";
"voice_broadcast_time_left" = "%@ wyszedł";
"voice_broadcast_tile" = "Transmisja głosowa";
"voice_broadcast_live" = "Na żywo";
"voice_broadcast_playback_lock_screen_placeholder" = "Transmisja głosowa";
"voice_broadcast_permission_denied_message" = "Nie posiadasz wymaganych uprawnień, aby rozpocząć transmisję głosową w tym pokoju. Skontaktuj się z administratorem pokoju, aby zwiększyć swoje uprawnienia.";
"voice_message_broadcast_in_progress_message" = "Nie możesz rozpocząć wiadomości głosowej, ponieważ już nagrywasz transmisję na żywo. Zakończ transmisję na żywo, aby rozpocząć nagrywanie wiadomości głosowej";
// MARK: - Voice Broadcast
"voice_broadcast_unauthorized_title" = "Nie można rozpocząć nowej transmisji głosowej";
"voice_message_broadcast_in_progress_title" = "Nie można rozpocząć wiadomości głosowej";
"home_context_menu_mark_as_unread" = "Oznacz jako nieprzeczytane";
"launch_loading_delay_warning" = "Może to chwilę potrwać. \nDziękujemy za Twoją cierpliwość.";
// MARK: - Launch loading
"launch_loading_generic" = "Synchronizowanie Twoich konwersacji";
"key_verification_scan_qr_code_title" = "Skanuj kod QR";
"device_verification_self_verify_open_on_other_device_information" = "Musisz zweryfikować tę sesję, aby przeglądać swoją bezpieczną historię rozmów.\n\nOtwórz Element na jednym z twoich innych urządzeń i podążaj za instrukcjami.";
"device_verification_self_verify_open_on_other_device_title" = "Otwórz %@ na swoim drugim urządzeniu";
"key_verification_alert_body" = "Przejrzyj, aby upewnić się, że twoje konto jest bezpieczne.";
// Unverified sessions
"key_verification_alert_title" = "Posiadasz niezweryfikowane sesje";
"key_verification_self_verify_security_upgrade_alert_message" = "Bezpieczne wysyłanie wiadomości zostało usprawnione z najnowszą aktualizacją. Zweryfikuj swoje urządzenie ponownie.";
// Legacy to Rust security upgrade
"key_verification_self_verify_security_upgrade_alert_title" = "Zaktualizowano aplikację";
"sign_out_confirmation_message" = "Czy na pewno chcesz się wylogować?";
// MARK: Sign out warning
"sign_out" = "Wyloguj";
"key_backup_recover_from_private_key_progress" = "%@%% Zakończone";
"room_details_polls" = "Historia ankiet";
"manage_session_sign_out_other_sessions" = "Wyloguj z wszystkich pozostałych sesji";
"manage_session_rename" = "Zmień nazwę sesji";
"manage_session_name_info_link" = "Dowiedz się więcej";
"manage_session_name_hint" = "Własne nazwy sesji pomogą Ci łatwiej rozpoznać swoje urządzenia.";
"settings_labs_enable_voice_broadcast" = "Transmisja głosowa";
"settings_labs_enable_wysiwyg_composer" = "Wypróbuj w bogatym edytorze tekstu";
"settings_labs_enable_new_app_layout" = "Nowy układ aplikacji";
"settings_labs_enable_new_client_info_feature" = "Zapisz nazwę klienta, wersję i URL, aby łatwiej rozpoznawać sesje w menedżerze sesji";
"settings_labs_enable_new_session_manager" = "Nowy menedżer sesji";
"room_command_error_unknown_command" = "Komenda jest nieprawidłowa lub nieobsługiwana";
"settings_push_rules_error" = "Wystąpił błąd podczas aktualizowania Twoich preferencji powiadomień. Przełącz opcję ponownie.";
"room_command_change_room_topic_description" = "Ustawia temat pokoju";
"room_command_reset_user_power_level_description" = "Usuwa uprawnienia administratora z danym ID";
"room_command_set_user_power_level_description" = "Ustal poziom uprawnień użytkownika";
"room_command_unban_user_description" = "Odbanowuje użytkownika z danym ID";
"room_command_ban_user_description" = "Banuje użytkownika z danym ID";
"room_command_kick_user_description" = "Usuwa użytkownika danym ID z tego pokoju";
"room_command_invite_user_description" = "Zaprasza użytkownika z danym ID do bieżącego pokoju";
"room_command_part_room_description" = "Opuść pokój";
"room_command_join_room_description" = "Dołącza do pokoju z podanego adresu";
// Room commands descriptions
"room_command_change_display_name_description" = "Zmienia twój wyświetlany pseudonim";
"room_command_emote_description" = "Wyświetla akcję";
"room_first_message_placeholder" = "Wyślij swoją pierwszą wiadomość…";
"room_creation_only_one_email_invite" = "Możesz zaprosić tylko jeden e-mail jednocześnie";
"password_policy_pwd_in_dict_error" = "Hasło zostało znalezione w słowniku, dlatego nie można go użyć.";
"password_policy_weak_pwd_error" = "Hasło jest za słabe. Musi zawierać co najmniej 8 znaków wraz z jednym z każdego typu: duże litery, małe litery, cyfry i znaki specjalne.";
// MARK: Password policy errors
"password_policy_too_short_pwd_error" = "Hasło jest za krótkie";
"authentication_qr_login_failure_retry" = "Spróbuj ponownie";
"authentication_qr_login_failure_request_timed_out" = "Wiązanie nie zostało zakończone w ustalonym czasie.";
"authentication_qr_login_failure_request_denied" = "Żądanie zostało odrzucone przez drugie urządzenie.";
"authentication_qr_login_failure_invalid_qr" = "Kod QR jest nieprawidłowy.";
"authentication_qr_login_failure_device_not_supported" = "Wiązanie z tym urządzeniem nie jest wspierane.";
"authentication_qr_login_confirm_alert" = "Upewnij się, że znasz pochodzenie tego kodu. Poprzez powiązanie urządzeń udostępniasz pełny dostęp do Twojego konta.";
"authentication_qr_login_failure_title" = "Nie udało się powiązać";
"authentication_qr_login_loading_signed_in" = "Jesteś teraz zalogowany na swoim drugim urządzeniu.";
"authentication_qr_login_loading_waiting_signin" = "Oczekiwanie na logowanie urządzenia.";
"authentication_qr_login_loading_connecting_device" = "Łączenie z urządzeniem";
"authentication_qr_login_confirm_subtitle" = "Potwierdź, że kod poniżej pasuje z Twoim drugim urządzeniem:";
"authentication_qr_login_confirm_title" = "Bezpieczne połączenie ustanowione";
"authentication_qr_login_scan_subtitle" = "Ustaw kod QR w obrębie kwadratu poniżej";
"authentication_qr_login_scan_title" = "Skanuj kod QR";
"authentication_qr_login_display_step2" = "Wybierz 'Zaloguj za pomocą kodu QR'";
"authentication_qr_login_display_subtitle" = "Zeskanuj kod QR na Twoim urządzeniu, które jest wylogowane.";
"authentication_qr_login_display_step1" = "Otwórz Element na innym urządzeniu";
"authentication_qr_login_display_title" = "Powiąż urządzenie";
"authentication_qr_login_start_need_alternative" = "Szukasz innej metody?";
"authentication_qr_login_start_display_qr" = "Pokaż kod QR na tym urządzeniu";
"authentication_qr_login_start_step4" = "Wybierz 'Pokaż kod QR na tym urządzeniu'";
"authentication_qr_login_start_step3" = "Wybierz 'powiąż urządzenie'";
"room_command_discard_session_description" = "Wymusza usunięcie bieżącej sesji grupowej wychodzącej z zaszyfrowanego pokoju";
"user_session_details_session_section_footer" = "Aby skopiować dane, przytrzymaj na nich stuknięcie.";
"user_session_inactive_session_description" = "Sesje nieaktywne to sesje, które nie były używane przez dłuższy czas, ale wciąż otrzymują klucze szyfrujące.\n\nRegularne usuwanie sesji nieaktywnych poprawia bezpieczeństwo, wydajność i upraszcza Tobie detekcje podejrzanych sesji.";
"user_session_rename_session_description" = "Inni użytkownicy w wiadomościach bezpośrednich i pokojach, do których dołączyłeś, mogą wyświetlić całą listę Twoich sesji.\n\nOznacza to dla nich pewność, że rzeczywiście rozmawiają z Tobą, ale jednocześnie oznacza, że widzą nazwę sesji, którą tutaj wpiszesz.";
"user_session_permanently_unverified_session_description" = "Ta sesja nie wspiera szyfrowania, więc nie może zostać zweryfikowana. \n\nNie będziesz w stanie uczestniczyć w pokojach, gdzie szyfrowane jest włączone.\n\nDla najlepszego bezpieczeństwa i prywatności zaleca się korzystania z klientów Matrix, które wspierają szyfrowanie.";
"user_session_unverified_session_description" = "Sesje niezweryfikowane to sesje, w których zalogowano się za pomocą Twoich danych, lecz nie zostały zweryfikowane inną sesją.\n\nW tym przypadku dokładnie się upewnij, że rozpoznajesz takie sesje, ponieważ mogą ujawnić nieautoryzowane użycie Twojego konta.";
"user_session_verified_session_description" = "Sesje zweryfikowane są wszędzie, gdzie korzystasz z Element po wprowadzeniu swojego hasła lub zweryfikowaniu swojej tożsamości za pomocą innej sesji zweryfikowanej.\n\nTo oznacza, że posiadasz wszystkie niezbędne klucze wymagane do odblokowania swoich zaszyfrowanych wiadomości i oznajmiasz innym użytkownikom, że ufasz tej sesji.";
"space_invite_nav_title" = "Zaproszenie do przestrzeni";
"user_other_session_unverified_sessions_header_subtitle" = "Dla wzmocnienia bezpiecznych wiadomości, zweryfikuj swoje sesje i wyloguj się ze wszystkich sesji, których nie rozpoznajesz lub nie używasz.";

View File

@@ -2626,7 +2626,6 @@
"user_session_got_it" = "Entendido";
"user_other_session_permanently_unverified_additional_info" = "Esta sessão não suporta encriptação e assim não pode ser verificada.";
"voice_broadcast_time_left" = "%@ restando";
"key_verification_alert_body" = "Revise para assegurar que sua conta está segura.";
// Unverified sessions
@@ -2653,3 +2652,5 @@
"wysiwyg_composer_format_action_inline_code" = "Aplicar formato de código inline";
"wysiwyg_composer_format_action_link" = "Aplicar formato de link";
"user_other_session_security_recommendation_title" = "Outras sessões";
"room_creation_only_one_email_invite" = "Você só pode convidar um e-mail de cada vez";
"accessibility_selected" = "selecionado";

View File

@@ -239,7 +239,7 @@
"settings_ignored_users" = "ИГНОРИРУЕМЫЕ ПОЛЬЗОВАТЕЛИ";
"settings_contacts" = "КОНТАКТЫ УСТРОЙСТВА";
"settings_advanced" = "ДОПОЛНИТЕЛЬНО";
"settings_other" = "ДРУГИЕ";
"settings_other" = "Другие";
"settings_labs" = "ЛАБОРАТОРИЯ";
"settings_devices" = "СЕАНСЫ";
"settings_cryptography" = "КРИПТОГРАФИЯ";
@@ -272,11 +272,11 @@
"settings_send_crash_report" = "Отправка данных о сбоях и использовании";
"settings_clear_cache" = "Очистить кэш";
"settings_change_password" = "Изменить пароль";
"settings_old_password" = "старый пароль";
"settings_new_password" = "новый пароль";
"settings_confirm_password" = "подтвердить пароль";
"settings_fail_to_update_password" = "Не удалось обновить пароль";
"settings_password_updated" = "Ваш пароль был обновлен";
"settings_old_password" = "Старый пароль";
"settings_new_password" = "Новый пароль";
"settings_confirm_password" = "Подтвердить пароль";
"settings_fail_to_update_password" = "Не удалось обновить пароль аккаунта Matrix";
"settings_password_updated" = "Ваш пароль аккаунта Matrix был обновлен";
"settings_crypto_device_name" = "Имя сеанса: ";
"settings_crypto_device_id" = "\nID сеанса: ";
"settings_crypto_device_key" = "\nКлюч сеанса:\n";
@@ -512,7 +512,7 @@
"room_action_send_photo_or_video" = "Отправить фото или видео";
"room_action_send_sticker" = "Отправить стикер";
"settings_deactivate_account" = "ДЕАКТИВАЦИЯ АККАУНТА";
"settings_deactivate_my_account" = "Деактивировать мой аккаунт";
"settings_deactivate_my_account" = "Деактивировать аккаунт навсегда";
"widget_sticker_picker_no_stickerpacks_alert_add_now" = "Добавить сейчас?";
"deactivate_account_title" = "Деактивировать аккаунт";
"deactivate_account_informations_part1" = "Это действие сделает вашу учетную запись непригодной для дальнейшего использования. Вы не сможете войти в систему и никто другой не сможет заново зарегистрировать учетную запись с вашим идентификатором. Также, это приведет к тому, что вы покинете все комнаты, в которых участвовали и данные о вашей учетной записи будут удалены с сервера идентификации. ";
@@ -525,7 +525,7 @@
"deactivate_account_forget_messages_information_part3" = ": будущие участники увидят неполное представление разговоров)";
"deactivate_account_validate_action" = "Деактивировать аккаунт";
"deactivate_account_password_alert_title" = "Деактивировать аккаунт";
"deactivate_account_password_alert_message" = "Чтобы продолжить, введите пароль";
"deactivate_account_password_alert_message" = "Чтобы продолжить, введите пароль аккаунта Matrix";
"widget_sticker_picker_no_stickerpacks_alert" = "У вас пока нет включенных пакетов стикеров.";
"event_formatter_rerequest_keys_part1_link" = "Повторно запросить ключи шифрования";
"event_formatter_rerequest_keys_part2" = " из других ваших сеансов.";
@@ -583,7 +583,7 @@
"key_backup_setup_intro_title" = "Никогда не теряйте зашифрованных сообщений";
"key_backup_setup_intro_info" = "Сообщения в зашифрованных комнатах защищены сквозным шифрованием. Только вы и получатель(и) имеют ключи для чтения этих сообщений.\n\nСохраните ключи надежно, чтобы не потерять их.";
"key_backup_setup_intro_setup_action" = "Настроить";
"key_backup_setup_passphrase_info" = "Мы будем хранить зашифрованную копию ваших ключей на нашем сервере. Для безопасности, защитите резервную копию секретной фразой.\n\nДля обеспечения максимальной безопасности она должна отличаться от пароля учетной записи.";
"key_backup_setup_passphrase_info" = "Мы будем хранить зашифрованную копию ваших ключей на нашем сервере. Для безопасности, защитите резервную копию секретной фразой.\n\nДля обеспечения максимальной безопасности она должна отличаться от пароля учётной записи Matrix.";
"key_backup_setup_passphrase_passphrase_title" = "Ввод";
"key_backup_setup_passphrase_passphrase_placeholder" = "Введите секретную фразу";
"key_backup_setup_passphrase_passphrase_valid" = "Отлично!";
@@ -864,7 +864,7 @@
"identity_server_settings_alert_error_invalid_identity_server" = "%@ не является действительным сервером идентификации.";
"settings_add_3pid_password_title_email" = "Добавить адрес электронной почты";
"settings_add_3pid_password_title_msidsn" = "Добавить номер телефона";
"settings_add_3pid_password_message" = "Для продолжения, задайте пароль";
"settings_add_3pid_password_message" = "Для продолжения, введите пароль аккаунта Matrix";
"settings_add_3pid_invalid_password_message" = "Недействительные данные";
"settings_discovery_three_pid_details_title_phone_number" = "Управление номера телефона";
"settings_identity_server_no_is" = "Сервер идентификации не настроен";
@@ -915,7 +915,7 @@
"security_settings_title" = "Безопасность";
"security_settings_crypto_sessions" = "МОИ СЕАНСЫ";
"security_settings_crypto_sessions_loading" = "Загрузка сеансов…";
"security_settings_crypto_sessions_description_2" = "Если вы не узнали логин, измените пароль и сбросьте Безопасное резервное копирование.";
"security_settings_crypto_sessions_description_2" = "Если вы не узнаете логин, измените пароль учётной записи Matrix и сбросьте Secure Backup.";
"security_settings_secure_backup" = "БЕЗОПАСНОЕ РЕЗЕРВНОЕ КОПИРОВАНИЕ";
"security_settings_secure_backup_description" = "Сделайте резервную копию ключей шифрования с данными вашей учетной записи на случай, если вы потеряете доступ к своим сеансам. Ваши ключи будут защищены уникальным электронным ключом.";
"security_settings_secure_backup_setup" = "Настроить";
@@ -938,7 +938,7 @@
"security_settings_complete_security_alert_title" = "Завершите настройку безопасности";
"security_settings_complete_security_alert_message" = "Сначала вы должны завершить настройку безопасности текущего сеанса.";
"security_settings_coming_soon" = "Извините. Это действие пока недоступно в %@ iOS. Пожалуйста, используйте другой клиент Matrix для его настройки. %@ iOS будет его использовать.";
"security_settings_user_password_description" = "Подтвердите свою личность, введя пароль учетной записи";
"security_settings_user_password_description" = "Подтвердите свою личность, введя пароль учётной записи Matrix";
// Manage session
"manage_session_title" = "Управление сеансами";
"manage_session_info" = "ИНФОРМАЦИЯ О СЕАНСЕ";
@@ -1130,7 +1130,7 @@
"secrets_setup_recovery_key_storage_alert_message" = "✓ Распечатайте и храните в безопасном месте\n✓ Сохраните его на USB-носителе или резервном носителе\n✓ Скопируйте его в свое личное облачное хранилище";
"secrets_setup_recovery_passphrase_title" = "Задайте мнемоническую фразу";
"secrets_setup_recovery_passphrase_information" = "Введите секретную фразу, известную только вам, для защиты данных на вашем сервере.";
"secrets_setup_recovery_passphrase_additional_information" = "Не используйте пароль своей учетной записи.";
"secrets_setup_recovery_passphrase_additional_information" = "Не используйте пароль своей учётной записи Matrix.";
"secrets_setup_recovery_passphrase_validate_action" = "Готово";
"secrets_setup_recovery_passphrase_confirm_information" = "Введите мнемоническую фразу ещё раз, чтобы подтвердить её.";
"secrets_setup_recovery_passphrase_confirm_passphrase_title" = "Подтвердить";
@@ -1183,19 +1183,19 @@
"searchable_directory_x_network" = "%@ Сеть";
"searchable_directory_search_placeholder" = "Имя или ID";
"create_room_title" = "Новая комната";
"create_room_section_header_name" = "Имя комнаты";
"create_room_section_header_name" = "НАЗВАНИЕ";
"create_room_placeholder_name" = "Имя";
"create_room_section_header_topic" = "Тема комнаты (опционально)";
"create_room_placeholder_topic" = "Тема";
"create_room_section_header_encryption" = "Шифрование комнаты";
"create_room_placeholder_topic" = "О чём эта комната?";
"create_room_section_header_encryption" = "ШИФРОВАНИЕ";
"create_room_enable_encryption" = "Включено шифрование";
"create_room_section_footer_encryption" = "После этого шифрование отключить нельзя.";
"create_room_section_header_type" = "Тип комнаты";
"create_room_type_private" = "Приватная комната";
"create_room_type_public" = "Публичная комната";
"create_room_section_header_type" = "КТО ИМЕЕТ ДОСТУП";
"create_room_type_private" = "Приватная комната (только по приглашению)";
"create_room_type_public" = "Публичная комната (для каждого)";
"create_room_section_footer_type" = "Люди присоединяются к приватной комнате только по приглашению в комнату.";
"create_room_show_in_directory" = "Показать комнату в списке";
"create_room_section_header_address" = "Адрес комнаты";
"create_room_section_header_address" = "АДРЕС";
"create_room_placeholder_address" = "#testroom:matrix.org";
"room_info_list_room_encrypted" = "Сообщения в этой комнате зашифрованы сквозным шифрованием";
"room_info_list_one_member" = "1 пользователь";
@@ -1218,7 +1218,7 @@
"room_details_advanced_e2e_encryption_enabled_for_dm" = "Шифрование включено";
"room_details_advanced_e2e_encryption_disabled_for_dm" = "Шифрование не включено.";
"pin_protection_kick_user_alert_message" = "Слишком много ошибок, вы вышли из системы";
"secrets_reset_authentication_message" = "Введите пароль своей учётной записи для подтверждения";
"secrets_reset_authentication_message" = "Введите пароль своей учётной записи Matrix для подтверждения";
"secrets_reset_reset_action" = "Сброс";
"secrets_reset_warning_message" = "Вы перезапустите приложение без истории, сообщений, доверенных устройств или доверенных пользователей.";
"secrets_reset_warning_title" = "Если сбросить все";
@@ -2224,3 +2224,44 @@
"threads_notice_information" = "Все потоки созданные во время экспериментального периода теперь <b>отображаются как обычные ответы</b>.<br/><br/>Это разовый переход, так как потоки теперь часть спецификации Matrix.";
"authentication_qr_login_failure_device_not_supported" = "Связь с этим устройством не поддерживается.";
"accessibility_selected" = "выбранный";
"room_access_settings_screen_message" = "Решите, кто может найти и присоединиться к %@.";
"room_access_settings_screen_title" = "Кто может получить доступ к этой комнате?";
"room_details_promote_room_suggest_title" = "Предложить участникам пространства";
/* The placeholder will be replaces with manage_session_name_info_link */
"manage_session_name_info" = "Учитывайте, что имена сессий также видны людям, с которыми вы общаетесь. %@";
"settings_labs_enable_new_client_info_feature" = "Запишите имя клиента, версию и URL-адрес, чтобы упростить распознавание сеансов в диспетчере сеансов";
"sign_out_confirmation_message" = "Вы уверены, что хотите выйти?";
"share_extension_send_now" = "Отправить сейчас";
"share_extension_low_quality_video_title" = "Видео будет отправлено в низком качестве";
"analytics_prompt_stop" = "Прекратить делиться";
"analytics_prompt_not_now" = "Не сейчас";
"analytics_prompt_point_3" = "Вы можете отключить это в любое время в настройках";
/* Note: The word "don't" is formatted in bold */
"analytics_prompt_point_2" = "Мы <b>не</b> передаем информацию третьим лицам";
/* Note: The word "don't" is formatted in bold */
"analytics_prompt_point_1" = "Мы <b>не</b> записываем и не профилируем никакие данные учётной записи";
"analytics_prompt_message_upgrade" = "Ранее вы дали согласие на передачу нам анонимных данных об использовании. Теперь, чтобы помочь понять, как люди используют несколько устройств, мы сгенерируем случайный идентификатор, общий для всех ваших устройств.";
"analytics_prompt_message_new_user" = "Помогите нам выявить проблемы и улучшить %@, поделившись анонимными данными об использовании. Чтобы понять, как люди используют несколько устройств, мы сгенерируем случайный идентификатор, общий для всех ваших устройств.";
// Analytics
"analytics_prompt_title" = "Помогите улучшить %@";
"call_jitsi_unable_to_start" = "Невозможно начать конференц-звонок";
"network_offline_message" = "Вы не в сети, проверьте ваше соединение.";
"network_offline_title" = "Вы не в сети";
"event_formatter_message_deleted" = "Сообщение удалено";
"room_access_space_chooser_other_spaces_section" = "Другие пространства или комнаты";
"room_access_settings_screen_setting_room_access" = "Настройка доступа к комнате";
"room_access_settings_screen_upgrade_alert_auto_invite_switch" = "Автоматически приглашать участников в новую комнату";
"room_access_settings_screen_upgrade_alert_note" = "Обратите внимание, что при обновлении будет создана новая версия комнаты. Все текущие сообщения останутся в этой архивной комнате.";
"room_access_settings_screen_upgrade_alert_message_no_param" = "Любой в родительском пространстве сможет найти и присоединиться к этой комнате - нет необходимости вручную приглашать всех вручную. Вы сможете изменить это в настройках комнаты в любое время.";
"room_access_settings_screen_upgrade_alert_message" = "Любой человек в %@ сможет найти и присоединиться к этой комнате - нет необходимости вручную приглашать всех. Вы сможете изменить это в настройках комнаты в любое время.";
"room_access_settings_screen_public_message" = "Любой желающий может найти и присоединиться.";
"room_access_settings_screen_edit_spaces" = "Редактировать пространства";
"room_access_settings_screen_restricted_message" = "Позволяет всем, кто находится в пространстве, найти его и присоединиться.\nВам будет предложено подтвердить к каким пространствам.";
"room_access_settings_screen_private_message" = "Только приглашенные люди могут найти и присоединиться.";
"manage_session_name_hint" = "Индивидуальные имена сеансов помогут Вам легче распознавать свои устройства.";
"settings_labs_confirm_crypto_sdk" = "Имейте ввиду, что эта функция все ещё на экспериментальной стадии, поэтому она может работать не так, как ожидается, и потенциально может иметь непредвиденные последствия. Для отмены функции выйдите из системы и войдите снова. Используйте её по своему усмотрению и с осторожностью.";
// Room Access Settings
"room_access_settings_screen_nav_title" = "Доступ к комнате";
"spaces_coming_soon_detail" = "Эта функция еще не реализована здесь, но она в разработке. На данный момент вы можете сделать это с помощью %@ на своем компьютере.";

View File

@@ -2931,3 +2931,32 @@
// MARK: - Launch loading
"launch_loading_generic" = "Synchronizácia vašich konverzácií";
"pill_message_in" = "Správa v %@";
"pill_message_from" = "Správa od %@";
"pill_message" = "Správa";
// Pills
"pill_room_fallback_display_name" = "Priestor/miestnosť";
"key_verification_self_verify_security_upgrade_alert_message" = "Najnovšou aktualizáciou sa zlepšilo bezpečné zasielanie správ. Overte prosím znova svoje zariadenie.";
// Legacy to Rust security upgrade
"key_verification_self_verify_security_upgrade_alert_title" = "Aplikácia bola aktualizovaná";
"settings_acceptable_use" = "Zásady prijateľného používania";
"room_command_error_unknown_command" = "Neplatný alebo nespracovaný príkaz";
"room_command_discard_session_description" = "Vynúti zrušenie aktuálnej relácie odchádzajúcej skupiny v zašifrovanej miestnosti";
"room_command_change_room_topic_description" = "Nastaví tému aktuálnej miestnosti";
"room_command_reset_user_power_level_description" = "Zruší stav moderátora používateľovi so zadaným ID";
"room_command_set_user_power_level_description" = "Určuje úroveň oprávnenia pre zadaného používateľa";
"room_command_unban_user_description" = "Zruší zákaz vstúpiť používateľovi so zadaným ID";
"room_command_ban_user_description" = "Zakáže vstup používateľovi so zadaným ID";
"room_command_kick_user_description" = "Odstráni používateľa s daným ID z tejto miestnosti";
"room_command_invite_user_description" = "Pozve zadaného používateľa do aktuálnej miestnosti";
"room_command_part_room_description" = "Opustiť miestnosť";
"room_command_join_room_description" = "Pripojí sa do miestnosti s danou adresou";
"room_command_emote_description" = "Zobrazí akciu";
// Room commands descriptions
"room_command_change_display_name_description" = "Mení vaše zobrazované meno / prezývku";
"notice_display_name_changed_to" = "%@ zmenil/a svoje zobrazované meno na %@";
"poll_timeline_loading" = "Načítavanie…";

View File

@@ -2718,3 +2718,31 @@
"device_verification_self_verify_open_on_other_device_information" = "Lypset të verifikoni këtë sesion, që të mund të lexoni historikun e mesazheve tuaj të siguruar.\n\nHapeni Element-in në një nga pajisjet tuaja të tjera dhe ndiqni udhëzimet.";
"device_verification_self_verify_open_on_other_device_title" = "Hapeni %@ në pajisjen tuaj tjetër";
"room_creation_only_one_email_invite" = "Mund të ftoni vetëm një email në herë";
"pill_message_in" = "Mesazh te %@";
"pill_message_from" = "Mesazh nga %@";
"pill_message" = "Mesazh";
// Pills
"pill_room_fallback_display_name" = "Hapësirë/Dhomë";
"key_verification_self_verify_security_upgrade_alert_message" = "Me përditësimin e fundit shkëmbimi i siguruar i mesazheve është përmirësuar. Ju lutemi, riverifikoni pajisjen tuaj.";
// Legacy to Rust security upgrade
"key_verification_self_verify_security_upgrade_alert_title" = "Aplikacioni u përditësua";
"settings_acceptable_use" = "Rregull Përdorimi të Pranueshëm";
"accessibility_selected" = "përzgjedhur";
"notice_display_name_changed_to" = "%@ ndërroi emrin e vet për në ekran si %@";
"room_command_error_unknown_command" = "Urdhër i pavlefshëm ose i patrajtuar";
"room_command_change_room_topic_description" = "Cakton temën e dhomës";
"room_command_reset_user_power_level_description" = "I heq gjendjen e operatorit përdoruesit me ID-në e dhënë";
"room_command_set_user_power_level_description" = "Përcaktoni shkallën e pushtetit së një përdoruesi";
"room_command_unban_user_description" = "Heq dëbimin për përdoruesin me ID-në e dhënë";
"room_command_ban_user_description" = "Dëbon përdoruesin me ID-në e dhënë";
"room_command_kick_user_description" = "Heq nga dhoma aktuale përdoruesin me ID-në e dhënë";
"room_command_invite_user_description" = "Fton në dhomën aktuale përdoruesin me ID-në e dhënë";
"room_command_part_room_description" = "Dil nga dhoma";
"room_command_join_room_description" = "Hyhet në dhomën me adresën e dhënë";
"room_command_emote_description" = "Veprim shfaqjeje";
// Room commands descriptions
"room_command_change_display_name_description" = "Kjo ndryshon nofkën tuaj në ekran";

View File

@@ -2409,7 +2409,6 @@
"spaces_explore_rooms_format" = "Utforska %@";
"spaces_create_subspace_title" = "Skapa ett underutrymme";
"spaces_add_subspace_title" = "Skapa utrymme inuti %@";
"key_verification_alert_body" = "Granska för att försäkra att ditt konto är säkert.";
// Unverified sessions
@@ -2647,7 +2646,6 @@
"voice_broadcast_connection_error_message" = "Tyvärr kan vi inte starta en röstsändning för tillfället. Vänligen pröva igen senare.";
"voice_broadcast_connection_error_title" = "Anslutningsfel";
"voice_broadcast_playback_lock_screen_placeholder" = "Röstsändning";
"room_details_polls" = "Omröstningshistorik";
"settings_labs_disable_crypto_sdk" = "Totalsträckskryptering i Rust (logga ut för att stänga av)";
"settings_labs_confirm_crypto_sdk" = "Vänligen observera att den här funktionen fortfarande ska anses vara experimentell, den kanske inte fungerar som förväntat eller kan leda till okända konsekvenser. För att återgå, logga ut och logga sedan in igen. Använd på egen risk.";
@@ -2661,3 +2659,20 @@
"home_context_menu_mark_as_unread" = "Markera som oläst";
"key_backup_recover_from_private_key_progress" = "%@%% Färdig";
"authentication_qr_login_failure_device_not_supported" = "Det finns inget stöd för att länka denna enhet.";
"room_command_emote_description" = "Visa åtgärd";
// Room commands descriptions
"room_command_change_display_name_description" = "Byter ditt visningsnamn";
"room_creation_only_one_email_invite" = "Du kan bara bjuda in en e-postadress åt gången";
"settings_acceptable_use" = "Policy för acceptabel användning";
"room_command_join_room_description" = "Går med i rummet med den angivna adressen";
"room_command_part_room_description" = "Lämna rummet";
"room_command_invite_user_description" = "Bjuder in användaren med angivet ID till aktuellt rum";
"room_command_kick_user_description" = "Tar bort användaren med angivet ID från det här rummet";
"room_command_ban_user_description" = "Bannar användaren med angivet ID";
"room_command_unban_user_description" = "Avbannar användaren med angivet ID";
"room_command_set_user_power_level_description" = "Definiera behörighetsnivån för en användare";
"room_command_reset_user_power_level_description" = "Avoppar användaren med angivet ID";
"room_command_change_room_topic_description" = "Sätter rummets ämne";
"room_command_discard_session_description" = "Tvingar den aktuella utgående gruppsessionen i ett krypterat rum att kasseras";
"room_command_error_unknown_command" = "Ogiltigt eller obehandlat kommando";

View File

@@ -2933,3 +2933,32 @@
// MARK: - Launch loading
"launch_loading_generic" = "Синхронізація ваших розмов";
"pill_message_in" = "Повідомлення у %@";
"pill_message_from" = "Повідомлення від %@";
"pill_message" = "Повідомлення";
// Pills
"pill_room_fallback_display_name" = "Простір/кімната";
"key_verification_self_verify_security_upgrade_alert_message" = "В останньому оновленні було вдосконалено захищений обмін повідомленнями. Перевірте свій пристрій ще раз.";
// Legacy to Rust security upgrade
"key_verification_self_verify_security_upgrade_alert_title" = "Застосунок оновлено";
"settings_acceptable_use" = "Політика прийнятного користування";
"room_command_error_unknown_command" = "Недійсна і необроблена команда";
"room_command_discard_session_description" = "Примусово відхиляє поточний вихідний сеанс групи в зашифрованій кімнаті";
"room_command_change_room_topic_description" = "Встановлює тему кімнати";
"room_command_reset_user_power_level_description" = "Скинути рівень доступу користувача із вказаним ID";
"room_command_set_user_power_level_description" = "Визначити рівень повноважень користувача";
"room_command_unban_user_description" = "Розблоковує користувача з указаним ID";
"room_command_ban_user_description" = "Блокує користувача з указаним ID";
"room_command_kick_user_description" = "Вилучає користувача з указаним ID з цієї кімнати";
"room_command_invite_user_description" = "Запрошує користувача зі вказаним ID до кімнати";
"room_command_part_room_description" = "Вийти з кімнати";
"room_command_join_room_description" = "Приєднується до кімнати із вказаною адресою";
"room_command_emote_description" = "Показує дію";
// Room commands descriptions
"room_command_change_display_name_description" = "Змінює ваш нік";
"notice_display_name_changed_to" = "%@ змінили своє показуване ім'я на %@";
"poll_timeline_loading" = "Завантаження...";

View File

@@ -68,14 +68,14 @@
"auth_msisdn_validation_title" = "等待验证中";
"auth_msisdn_validation_message" = "我们通过短信向您发送了一条验证码,请在下方输入它。";
"auth_msisdn_validation_error" = "无法验证此手机号。";
"auth_recaptcha_message" = "此服务器想确定您不是机器人";
"auth_recaptcha_message" = "此服务器想确定您不是机器人";
"auth_reset_password_message" = "为了重置您的Matrix账户密码请输入与您账户关联的邮箱地址";
"auth_reset_password_missing_email" = "必须输入与您的账户关联的邮箱地址。";
"auth_reset_password_missing_password" = "必须输入新的密码。";
"auth_reset_password_email_validation_message" = "一封邮件已经发送到 %@。当您已经按照其中的链接操作以后,请点下面。";
"auth_reset_password_next_step_button" = "我已经验证了我的邮箱地址";
"auth_reset_password_error_unauthorized" = "验证邮箱地址失败:请确认您已经点击了邮件里的链接";
"auth_reset_password_error_not_found" = "您的邮箱地址可能没有与此服务器上的 Matrix ID 绑定。";
"auth_reset_password_error_not_found" = "您的邮箱地址可能没有与此服务器上的 Matrix ID 绑定。";
"auth_reset_password_success_message" = "您的Matrix账户密码已重置。\n\n您的所有会话都会被登出并且不会收到推送通知。要想重新收到通知请在每个设备上重新登录。";
"auth_add_email_and_phone_warning" = "在 API 出现之前,还不支持使用邮箱地址或手机号码直接注册。只有手机号码会和此账户绑定。您可以在设置中添加邮箱地址。";
// Chat creation
@@ -237,7 +237,7 @@
"settings_config_no_build_info" = "没有编译信息";
"settings_mark_all_as_read" = "将所有消息标记为已读";
"settings_report_bug" = "报告 bug";
"settings_config_home_server" = "服务器为 %@";
"settings_config_home_server" = "服务器为 %@";
"settings_config_identity_server" = "身份认证服务器为 %@";
"settings_config_user_id" = "以 %@ 登录";
"settings_user_settings" = "用户设置";
@@ -258,12 +258,12 @@
"settings_surname" = "姓氏";
"settings_remove_prompt_title" = "确认";
"settings_remove_email_prompt_msg" = "你确定要移除邮箱地址 %@";
"settings_remove_phone_prompt_msg" = "你确定要移除手机号码地址 %@";
"settings_remove_phone_prompt_msg" = "你确定要移除电话号码%@";
"settings_email_address" = "电子邮件";
"settings_email_address_placeholder" = "输入您的邮箱地址";
"settings_add_email_address" = "添加邮箱地址";
"settings_phone_number" = "手机号码";
"settings_add_phone_number" = "添加手机号码";
"settings_phone_number" = "电话";
"settings_add_phone_number" = "添加电话号码";
"settings_night_mode" = "夜间模式";
"settings_fail_to_update_profile" = "个人档案更新失败";
"settings_enable_push_notif" = "在此设备上发送通知";
@@ -362,7 +362,7 @@
"directory_server_picker_title" = "选择一个目录";
"directory_server_all_rooms" = "%@ 服务器上的所有房间";
"directory_server_all_native_rooms" = "所有本地 Matrix 房间";
"directory_server_type_homeserver" = "输入一个服务器来列出公共房间";
"directory_server_type_homeserver" = "输入一个服务器来列出公共房间";
"directory_server_placeholder" = "matrix.org";
// Others
"or" = "或";
@@ -385,7 +385,7 @@
// Crash report
// Crypto
"e2e_enabling_on_app_update" = "%@ 现在支持端到端加密,但是您需要重新登录以启用它。\n\n您可以现在重新登录也可以之后从应用程序设置中选择开启。";
"e2e_need_log_in_again" = "您需要登录回来以便为此会话生成端对端加密密钥并提交公钥到您的服务器。\n这只需要做一次很抱歉造成打扰。";
"e2e_need_log_in_again" = "您需要登录回来以便为此会话生成端对端加密密钥并提交公钥到您的服务器。\n这只需要做一次很抱歉造成打扰。";
// Bug report
"bug_report_title" = "Bug 报告";
"bug_report_description" = "请描述此 bug。您做了什么本来应该发生什么以及实际发生了什么";
@@ -505,7 +505,7 @@
"event_formatter_jitsi_widget_added" = "VoIP 会议已被 %@ 添加";
"event_formatter_rerequest_keys_part1_link" = "重新请求加密密钥";
"event_formatter_rerequest_keys_part2" = " (从您的其他会话中)。";
"homeserver_connection_lost" = "无法连接至服务器。";
"homeserver_connection_lost" = "无法连接至服务器。";
"call_jitsi_error" = "电话会议加入失败。";
"deactivate_account_forget_messages_information_part2_emphasize" = "警告";
"deactivate_account_validate_action" = "停用账户";
@@ -516,12 +516,12 @@
"room_replacement_link" = "对话自此继续。";
"room_predecessor_information" = "这个房间是另一个对话的延续。";
"room_predecessor_link" = "点击此处查看更早的消息。";
"room_resource_usage_limit_reached_message_1_default" = "此服务器某资源已超出使用限制,导致 ";
"room_resource_usage_limit_reached_message_1_monthly_active_user" = "此服务器已达到月活跃用户限制,导致 ";
"room_resource_usage_limit_reached_message_1_default" = "此服务器某资源已超出使用限制,导致 ";
"room_resource_usage_limit_reached_message_1_monthly_active_user" = "此服务器已达到月活跃用户限制,导致 ";
"room_resource_usage_limit_reached_message_2" = "部分用户将无法登录。";
"room_resource_usage_limit_reached_message_contact_3" = " 以提高限制。";
// String for App Store
"store_short_description" = "安全、去中心化的聊天VoIP 应用";
"store_short_description" = "安全、去中心化的聊天/VoIP";
"store_full_description" = "Element 是一种新型的通讯与协作应用:\n\n1. 使您可以掌控您的隐私\n2. 使您与 Matrix 网络中的任何人交流,甚至可以通过集成功能与如 Slack 之类的其他应用通讯\n3. 保护您免受广告,大数据挖掘和封闭服务的侵害\n4. 通过端到端加密保证安全,通过交叉签名验证其他人\n\nElement 与其他通讯与协作应用完全不同,因为它是去中心化且开源的。\n\nElement 允许您自托管——或者选择托管商——因此,您能拥有数据和会话的隐私权,所有权和控制权。它允许您访问开放网络;因此,您可以与 Element 用户以外的人交流。并且它非常安全。\n\nElement 之所以可以做到这些,是因为它在 Matrix 上运行——开放,去中心化通讯的标准。\n\n通过让您选择由谁来托管您的会话Element 让您掌控一切。在 Element 应用中,您可以选择不同的托管方式:\n\n1. 在由 Matrix 开发者托管的 matrix.org 公共服务器上获取免费账户,或从志愿者托管的上千个公共服务器中选择\n2. 在您自己的硬件上运行服务器,自托管您的会话\n3. 通过订阅 Element Matrix Services 托管平台,简单地在自定义服务器上注册账户\n\n为什么选择 Element\n\n掌控您的数据您来决定存放您的数据和消息的位置。拥有并控制它的是您而不是挖掘您的数据或与第三方分享的巨型企业。\n\n开放通讯与协作您可以与 Matrix 网络中的任何人聊天,不论他们使用 Element 还是其他 Matrix 应用,甚至/即使他们在使用不同的通讯系统,例如 Slack、IRC 或 XMPP。\n\n超级安全支持真正的端到端加密仅有会话中的人可以解密消息还有能够验证会话参与方的设备的交叉签名。\n\n完善的通讯方式消息语音和视频通话文件共享屏幕共享和大量集成功能机器人和挂件。建立房间与社区保持联系并完成工作。\n\n随时随地消息历史可在您的全部设备和 https://app.element.io 网页端之间完全同步,无论您在哪里,都可以保持联系。";
"auth_accept_policies" = "请查看并接受此主页服务器的服务条款:";
"room_replacement_information" = "这个房间已被替换,不再有效。";
@@ -572,7 +572,7 @@
"e2e_room_key_request_message_new_device" = "您添加了一个新会话 '%@' ,它正在请求加密密钥。";
"e2e_room_key_request_message" = "您的未验证会话 '%@' 正在请求加密密钥。";
// GDPR
"gdpr_consent_not_given_alert_message" = "要继续使用该 %@ 服务器,您必须查看并同意其服务条款和条件。";
"gdpr_consent_not_given_alert_message" = "要继续使用该 %@ 服务器,您必须查看并同意其服务条款和条件。";
"gdpr_consent_not_given_alert_review_now_action" = "立即查看";
"deactivate_account_title" = "停用账户";
"deactivate_account_informations_part1" = "这将使您的账户永久无法使用。 您将无法登录,也无法重新注册相同的用户 ID 。 这将导致您的账户离开其参与的所有房间,并且会从您的身份服务器中删除您的账户详细信息。 ";
@@ -595,7 +595,7 @@
"key_backup_setup_intro_manual_export_info" = "(高级)";
"key_backup_setup_intro_manual_export_action" = "手动导出密钥";
"key_backup_setup_passphrase_title" = "使用一段安全词组保护您的备份";
"key_backup_setup_passphrase_info" = "我们将会在服务器上保存一份您的密钥的加密拷贝。设置一个词组来保护您的备份的安全。\n\n为了最大的安全性它应当与您的Matrix账户密码不同。";
"key_backup_setup_passphrase_info" = "我们将会在服务器上保存一份您的密钥的加密拷贝。设置一个词组来保护您的备份的安全。\n\n为了最大的安全性它应当与您的Matrix账户密码不同。";
"key_backup_setup_passphrase_passphrase_title" = "输入";
"key_backup_setup_passphrase_passphrase_placeholder" = "输入词组";
"key_backup_setup_passphrase_passphrase_valid" = "太棒了!";
@@ -654,7 +654,7 @@
"sign_out_key_backup_in_progress_alert_cancel_action" = "等待";
"auth_login_single_sign_on" = "使用单点登录方式登入";
"room_message_unable_open_link_error_message" = "无法打开链接。";
"auth_autodiscover_invalid_response" = "服务器探测响应无效";
"auth_autodiscover_invalid_response" = "服务器探测响应无效";
"close" = "关闭";
// Accessibility
"accessibility_checkbox_label" = "多选框";
@@ -667,7 +667,7 @@
"auth_reset_password_error_is_required" = "未配置身份服务器在服务器选项中添加以便重设你的Matrix账户密码。";
"auth_softlogout_signed_out" = "你已登出";
"auth_softlogout_sign_in" = "登录";
"auth_softlogout_reason" = "你的服务器(%1$@)管理员已将你的账户%2$@%3$@)登出。";
"auth_softlogout_reason" = "你的服务器(%1$@)管理员已将你的账户%2$@%3$@)登出。";
"auth_softlogout_recover_encryption_keys" = "登录以恢复单独保存在此设备上的加密密钥。你需要它们才能阅读任何设备上的安全消息。";
"auth_softlogout_clear_data" = "清空个人信息";
"auth_softlogout_clear_data_message_1" = "警告:你的个人信息(包括加密密钥)仍将保存在这台设备上。";
@@ -677,7 +677,7 @@
"auth_softlogout_clear_data_sign_out_msg" = "你确定希望清空所有当前保存在此设备上数据吗?再次登录可以获取你的账户数据和消息。";
"auth_softlogout_clear_data_sign_out" = "登出";
// Errors
"error_user_already_logged_in" = "您似乎正在尝试连接另一个服务器。您想要登出吗?";
"error_user_already_logged_in" = "您似乎正在尝试连接另一个服务器。您想要登出吗?";
"room_creation_error_invite_user_by_email_without_identity_server" = "未设置身份认证服务器,所以你不能用邮箱添加参与者。";
"contacts_address_book_no_identity_server" = "未设置身份认证服务器";
"room_participants_remove_third_party_invite_prompt_msg" = "你确定想撤回这个邀请吗?";
@@ -718,7 +718,7 @@
"settings_three_pids_management_information_part3" = "。";
"settings_security" = "安全";
"settings_calls_stun_server_fallback_button" = "允许使用通话辅助服务器作为备用手段";
"settings_calls_stun_server_fallback_description" = "允许在你的服务器不能提供时使用通话辅助服务器 %@ 作为备用手段你的IP地址在通话时会被分享。";
"settings_calls_stun_server_fallback_description" = "允许在你的服务器不能提供时使用通话辅助服务器 %@ 作为备用手段你的IP地址在通话时会被分享。";
"settings_integrations_allow_button" = "管理集成";
"settings_integrations_allow_description" = "使用集成管理器(%@)来管理机器人,桥接,小插件和贴纸包。\n\n集成管理器会收到设置数据而且能修改小插件发送房间邀请以及代表你设置权力级别。";
"settings_labs_message_reaction" = "用emoji表情回应消息";
@@ -792,7 +792,7 @@
"camera_unavailable" = "此摄像头在你的设备上无效";
"photo_library_access_not_granted" = "%@没有权限获取你的照片库,请更改隐私设置";
"call_no_stun_server_error_title" = "由于错误设置服务器,通话失败";
"call_no_stun_server_error_message_1" = "请让你的服务器%@的管理员设置一个TURN服务器以便通话能可靠运行。";
"call_no_stun_server_error_message_1" = "请让你的服务器%@的管理员设置一个TURN服务器以便通话能可靠运行。";
"call_no_stun_server_error_message_2" = "此外,你可以尝试使用在%@的公共服务器但这将减少可靠性而且它会把你的IP地址分享给那个服务器。你也可以在设置中管理这个选项";
"call_no_stun_server_error_use_fallback_button" = "尝试使用%@";
// Widget
@@ -1088,7 +1088,7 @@
"people_empty_view_title" = "用户";
"less" = "较小地";
"more" = "更多";
"switch" = "开关";
"switch" = "切换";
"joined" = "已加入";
"store_promotional_text" = "在开放网络上保护隐私的聊天和协作应用程序。去中心化让你掌控一切。没有数据挖掘,没有后门,也没有第三方访问。";
"social_login_button_title_sign_up" = "使用 %@ 注册";
@@ -1376,7 +1376,7 @@
"room_details_title_for_dm" = "详细信息";
// AuthenticatedSessionViewControllerFactory
"authenticated_session_flow_not_supported" = "此应用并不支持你的服务器的认证机制。";
"authenticated_session_flow_not_supported" = "此应用并不支持你的服务器的认证机制。";
"settings_labs_enable_ringing_for_group_calls" = "群组通话铃声";
"room_multiple_typing_notification" = "%@ 和其他人";
"room_no_privileges_to_create_group_call" = "你需要成为管理员或协管员以开始通话。";
@@ -1612,8 +1612,8 @@
// Login Screen
"login_create_account" = "创建账户:";
"login_server_url_placeholder" = "网址(例如 https://matrix.org";
"login_home_server_title" = "服务器网址:";
"login_home_server_info" = "您的服务器存储了您所有的对话和账户数据";
"login_home_server_title" = "服务器网址:";
"login_home_server_info" = "您的服务器存储了您所有的对话和账户数据";
"login_identity_server_title" = "身份认证服务器网址:";
"login_identity_server_info" = "Matrix 提供了身份认证服务器以验证邮箱地址等是否属于某个 Matrix ID。目前只有 https://matrix.org 支持。";
"login_user_id_placeholder" = "Matrix ID例如 @bob:matrix.org 或 bob";
@@ -1690,8 +1690,8 @@
"notice_invalid_attachment" = "无效附件";
"notice_unsupported_attachment" = "不支持的附件:%@";
"login_email_info" = "指定邮箱地址可以让其他 Matrix 用户更容易找到您,并允许您可以在未来重置密码。";
"login_error_no_login_flow" = "我们未能从此服务器获取认证信息";
"login_error_do_not_support_login_flows" = "当前我们不支持此服务器定义的任何或者所有登录流";
"login_error_no_login_flow" = "我们未能从此服务器获取认证信息";
"login_error_do_not_support_login_flows" = "当前我们不支持此服务器定义的任何或者所有登录流";
"notice_feedback" = "反馈事件 (id: %@)%@";
"notice_redaction" = "%@ 取消了一个事件 (id: %@)";
"notice_error_unsupported_event" = "不支持的事件";
@@ -1790,7 +1790,7 @@
"power_level" = "权力级别";
"network_error_not_reachable" = "请检查你的网络连接";
"user_id_placeholder" = "例如:@bob:homeserver";
"ssl_homeserver_url" = "服务器网址:%@";
"ssl_homeserver_url" = "服务器网址:%@";
// Country picker
"country_picker_title" = "请选择国家";
// Language picker
@@ -1915,8 +1915,8 @@
"account_email_validation_error" = "无法验证邮箱地址。请检查你的电子邮箱并点击邮件中的链接。完成后,请点击继续";
"login_error_resource_limit_exceeded_title" = "超出资源使用限制";
"login_error_resource_limit_exceeded_contact_button" = "联系管理员";
"login_error_resource_limit_exceeded_message_default" = "此服务器已超出某资源的使用限制。";
"login_error_resource_limit_exceeded_message_monthly_active_user" = "此服务器已达到月活跃用户限制。";
"login_error_resource_limit_exceeded_message_default" = "此服务器已超出某资源的使用限制。";
"login_error_resource_limit_exceeded_message_monthly_active_user" = "此服务器已达到月活跃用户限制。";
"login_error_resource_limit_exceeded_message_contact" = "\n\n请联系管理员以继续使用本服务。";
"account_msisdn_validation_message" = "我们通过短信向您发送了一条验证码,请在下方输入它。";
"room_error_timeline_event_not_found" = "应用程序试图加载此房间时间线中的特定点,但无法找到该时间点";
@@ -2135,11 +2135,11 @@
"authentication_verify_email_input_title" = "输入你的电子邮件";
"authentication_cancel_flow_confirmation_message" = "账户还未创建。停止注册流程吗?";
"authentication_server_selection_generic_error" = "无法在这个URL上找到服务器请检查其是否正确。";
"authentication_server_selection_server_url" = "服务器URL";
"authentication_server_selection_server_url" = "服务器URL";
"authentication_server_selection_register_message" = "你服务器的地址是什么?它就像你全部数据的家";
"authentication_server_selection_register_title" = "选择你的服务器";
"authentication_server_selection_register_title" = "选择你的服务器";
"authentication_server_selection_login_message" = "你服务器的地址是什么?";
"authentication_server_selection_login_title" = "连接到服务器";
"authentication_server_selection_login_title" = "连接到服务器";
"authentication_server_info_title_login" = "你的对话发生的地方";
"authentication_login_forgot_password" = "忘记密码";
"authentication_login_username" = "用户名/电子邮件/电话";
@@ -2285,3 +2285,67 @@
"deselect_all" = "取消全选";
"notice_voice_broadcast_ended" = "%@结束了一个语音广播。";
"notice_voice_broadcast_ended_by_you" = "你结束了一个语音广播。";
"threads_beta_cancel" = "先不了";
"threads_beta_enable" = "尝试一下";
"threads_beta_information" = "使用消息列使讨论保持有序。\n\n消息列帮助你保持聊天不跑题且易于回溯。 ";
"threads_beta_title" = "消息列";
"threads_notice_information" = "实验期间创建的所有消息列会被 <b>显示为普通回复</b>。<br/><br/>这是个一次性的转变因为消息列现在是Matrix标准的一部分了。";
"threads_notice_title" = "消息列不再是实验性功能了🎉";
"threads_empty_show_all_threads" = "显示所有消息列";
"threads_empty_tip" = "提示:点击一条消息然后点击“消息列”来新建一个消息列。";
"threads_empty_info_my" = "回复到一个消息列,或者点击一条消息然后点击“消息列”来新建消息列。";
"room_command_error_unknown_command" = "命令无效或未处理";
"room_command_change_room_topic_description" = "设置房间话题";
"room_command_set_user_power_level_description" = "设置用户权限级别";
"room_command_unban_user_description" = "取消封禁指定id的用户";
"room_command_invite_user_description" = "邀请指定id用户进入此房间";
"room_command_kick_user_description" = "从此房间移除指定id用户";
"room_command_ban_user_description" = "封禁指定id的用户";
"room_command_part_room_description" = "离开房间";
"room_command_join_room_description" = "根据地址加入房间";
// Room commands descriptions
"room_command_change_display_name_description" = "更改显示的昵称";
"room_creation_only_one_email_invite" = "一次性只能邀请一个邮箱地址";
"authentication_qr_login_failure_device_not_supported" = "不支持链接到此设备。";
"all_chats_edit_layout_alphabetical_order" = "按照字母顺序排序";
"all_chats_edit_layout_show_filters" = "显示过滤器";
"all_chats_edit_layout_show_recents" = "显示最近项目";
// MARK: - Space Selector
"space_selector_title" = "我的空间";
// MARK: - All Chats
"all_chats_title" = "所有聊天";
"settings_labs_enable_voice_broadcast" = "语音广播";
"settings_labs_enable_wysiwyg_composer" = "尝试富文本编辑器";
"settings_labs_enable_new_client_info_feature" = "记录客户端名字、版本和URL来在会话管理器中更方便地分辨会话";
"settings_labs_enable_new_session_manager" = "新会话管理器";
"location_sharing_live_error" = "实时位置共享错误";
"location_sharing_live_loading" = "正在加载实时位置……";
"location_sharing_live_timer_incoming" = "共享到%@";
"location_sharing_live_list_item_stop_sharing_action" = "停止";
"location_sharing_live_list_item_last_update" = "在%@之前更新";
"location_sharing_live_list_item_sharing_expired" = "共享已过期";
"location_sharing_live_viewer_title" = "位置";
"location_sharing_live_map_callout_title" = "共享位置";
"live_location_sharing_banner_stop" = "停止";
"live_location_sharing_ended" = "实时位置共享已结束";
"live_location_sharing_banner_title" = "实时位置共享已开启";
// MARK: Live location sharing
"location_sharing_live_share_title" = "共享实时位置";
"location_sharing_allow_background_location_message" = "如果你想要实时共享你的位置Element需要在后台访问你的位置信息。要允许访问点击设置>位置,然后选择“总是”";
"location_sharing_invalid_power_level_message" = "要在此房间中实时共享位置,你需要有对应的权限。";
"settings_labs_enable_live_location_sharing" = "实时位置共享——共享当前位置(活跃开发中,位置暂时还会留在房间历史记录中)";
"poll_timeline_decryption_error" = "因为解密错误,有的投票可能没有被算进去";
"settings_labs_enable_auto_report_decryption_errors" = "自动报告解密错误";
"settings_ui_show_redactions_in_room_history" = "为已被删除的消息显示占位符";
"settings_enable_room_message_bubbles" = "消息气泡";
"all_chats_user_menu_settings" = "用户设置";
// User sessions management
"user_sessions_settings" = "管理登陆会话";
"settings_presence_offline_mode_description" = "如果开启此选项,对其他用户来说,你看起来就会像下线了一样,即使你正在使用此软件。";

View File

@@ -1,8 +1,8 @@
// Permissions usage explanations
"NSCameraUsageDescription" = "給予相機權限會用來進行視訊通話或是拍攝並上傳照片與影片。";
"NSPhotoLibraryUsageDescription" = "同意使用圖片的權限會用來上傳圖庫的照片影片。";
"NSMicrophoneUsageDescription" = "Element 需要麥克風的權限來接受通話、拍攝影片以及錄製語音訊息。";
"NSContactsUsageDescription" = "他們會與您的身分伺服器共享以找到您在Matrix上的聯絡人。";
"NSPhotoLibraryUsageDescription" = "請允許存取「照片」,來上傳圖庫當中的照片影片。";
"NSMicrophoneUsageDescription" = "Element 需要麥克風的權限來通話、拍攝影片以及錄製語音訊息。";
"NSContactsUsageDescription" = "會將此資訊分享給您的身分伺服器,以幫助您尋找 Matrix 聯絡人。";
"NSLocationAlwaysAndWhenInUseUsageDescription" = "當您與其他人分享您的位置Element 需要權限將位置顯示在地圖上。";
"NSLocationWhenInUseUsageDescription" = "當您與其他人分享您的位置Element 需要權限將位置顯示在地圖上。";
"NSFaceIDUsageDescription" = "您可以使用 Face ID 來登入您的應用程式。";

View File

@@ -75,15 +75,15 @@
"USER_MEMBERSHIP_UPDATED" = "%@ 更新了個人資料";
/* A user has change their name to a new name which we don't know */
"GENERIC_USER_UPDATED_DISPLAYNAME" = "%@ 變更了名";
"GENERIC_USER_UPDATED_DISPLAYNAME" = "%@ 變更了名";
/** Membership Updates **/
/* A user has change their name to a new name */
"USER_UPDATED_DISPLAYNAME" = "%@ 名稱變更為 %@";
"USER_UPDATED_DISPLAYNAME" = "%@ 名稱變更為 %@";
/* A user has change their avatar */
"USER_UPDATED_AVATAR" = "%@ 變更了他們的頭像";
"USER_UPDATED_AVATAR" = "%@ 變更了大頭照";
/* A user has reacted to a message, but the reaction content is unknown */
"GENERIC_REACTION_FROM_USER" = "%@ 送出了一個反應";

View File

@@ -98,7 +98,7 @@
"directory_title" = "目錄";
"auth_recaptcha_message" = "這個家伺服器想要確認您不是機器人";
"auth_reset_password_missing_email" = "必須輸入和您帳號綁定的電子郵件地址。";
"auth_reset_password_missing_password" = "必須輸入一個新密碼。";
"auth_reset_password_missing_password" = "必須輸入新密碼。";
"auth_reset_password_next_step_button" = "我已經驗證了電子郵件地址";
"auth_reset_password_error_unauthorized" = "電子郵件地址驗證失敗:請確認您已點擊郵件中的連結";
"auth_reset_password_error_not_found" = "您的電子郵件地址似乎並未與這台家伺服器上的任何 Matrix ID 相關聯。";
@@ -384,9 +384,9 @@
"room_details_photo" = "聊天室圖片";
"room_details_room_name" = "聊天室名稱";
"room_details_mute_notifs" = "將通知靜音";
"room_details_access_section_no_address_warning" = "要連結一個聊天室,該聊天室必須要有位址";
"room_details_access_section_no_address_warning" = "要連結聊天室,該聊天室必須要有位址";
"room_details_access_section_directory_toggle" = "將此聊天室列入聊天室目錄";
"room_details_history_section_prompt_msg" = "對可閱讀歷史訊息的使用者的變更,僅適用於此聊天室的新訊息。現有訊息的顯示狀態將保持不變。";
"room_details_history_section_prompt_msg" = "對可閱讀訊息紀錄的使用者的變更,僅適用於此聊天室的新訊息。現有訊息的顯示狀態將保持不變。";
"room_details_new_address" = "新增位址";
"room_details_new_address_placeholder" = "新增位址(例如 #foo%@";
"room_details_addresses_invalid_address_prompt_msg" = "%@ 不是有效的別名格式";
@@ -454,7 +454,7 @@
"directory_server_type_homeserver" = "輸入一個家伺服器來列出所有公開聊天室";
"directory_server_placeholder" = "matrix.org";
// Events formatter
"event_formatter_member_updates" = "變更 %tu 成員身分";
"event_formatter_member_updates" = "%tu 成員狀態變更";
"event_formatter_widget_added" = "%@ 小工具已由 %@ 新增";
"event_formatter_widget_removed" = "%@ 小工具已由 %@ 移除";
"event_formatter_jitsi_widget_added" = "VoIP 群組通話已由 %@ 新增";
@@ -526,7 +526,7 @@
"room_message_reply_to_placeholder" = "傳送回覆(未加密)…";
"encrypted_room_message_reply_to_placeholder" = "傳送加密的回覆…";
"room_message_reply_to_short_placeholder" = "傳送回覆…";
"room_event_action_view_decrypted_source" = "檢視解密的來源";
"room_event_action_view_decrypted_source" = "檢視解密的原始碼";
"room_predecessor_link" = "點擊此處以檢視更早以前的訊息。";
"room_replacement_information" = "這個聊天室已被取代,且不再使用。";
"room_replacement_link" = "對話在此繼續。";
@@ -619,10 +619,10 @@
"skip" = "略過";
"close" = "關閉";
"store_promotional_text" = "開放網路上的隱私保護聊天和協作應用程式。去中心化機制讓您可自行管控。沒有資料探勘、沒有後門,也不會被第三方存取。";
"store_full_description" = "Element 是一套新型的通訊和協作應用程式,它提供下列功能:\n\n1. 您可以自行掌控隱私\n2. 可以與 Matrix 網路中的任何人進行通訊,甚至可以與 Slack 等應用程式整合\n3. 保護您免受廣告、資料探勘、後門和封閉平台的侵害\n4. 透過端到端加密和交叉簽署來驗證彼此,互相確保安全\n\nElement 是去中心化的開軟體,因此與其他通訊和協作應用程式完全不同。\n\nElement 允許您自行架設(或選擇託管)伺服器,使您可針對隱私權,所有權以及對資料和對話內容的完整控制權。您可以連線到所有開放的網路,所以您不是只能與其他 Element 使用者聊天。而且還非常安全。\n\nElement 之所以能夠做到所有這些目標,是因為它使用 Matrix一套開放、去中心化的通訊標準運作。\n\nElement 讓您可以自行選擇要將對話放在哪一台伺服器來讓您可自行控制自己的訊息和資料。在 Element 應用程式中,您可以選擇以不同方式託管您的訊息:\n\n1. 在 matrix.org 公開伺服器註冊免費帳號\n2. 使用自行架設的硬體主機上的伺服器來註冊帳號\n3. 訂閱 Element Matrix Services 代管平台,註冊自己的伺服器\n\n為什麼要選擇 Element\n\n自己擁有自己資料由您決定將資料與訊息保留在何處。您自己擁有並管理這些資料而不用讓某些「超大型企業」來探勘您的資料或將資料提供給第三方。\n\n開放的通訊與協作機制您可以與 Matrix 網路中的任何人聊天,不管他們使用的是 Element 還是其他 Matrix 應用程式,甚至他們也可以使用像 Slack 、IRC 或 XMPP 之類的其他通訊系統。\n\n超級安全真正的端對端加密只有對話中的人才能解開訊息內容並進行交叉簽署以驗證對話參與者的設備。\n\n完整的通訊傳訊息、進行語音或視訊通話、分享檔案、畫面還有大量整合、機器人與小工具。建立聊天室、社群保持聯繫並完成工作。\n\n無論您身在何處都可保持聯繫無論您身在何處都可以透過 https://element.io/app 在所有裝置與網路取得完全同步的訊息記錄來保持聯繫。";
"store_full_description" = "Element 是一套新型的通訊和協作應用程式,它提供下列功能:\n\n1. 您可以自行掌控隱私\n2. 可以與 Matrix 網路中的任何人進行通訊,甚至可以與 Slack 等應用程式整合\n3. 保護您免受廣告、資料探勘、後門和封閉平台的侵害\n4. 透過端到端加密和交叉簽署來驗證彼此,互相確保安全\n\nElement 是去中心化的開放原始碼軟體,因此與其他通訊和協作應用程式完全不同。\n\nElement 允許您自行架設(或選擇託管)伺服器,使您可針對隱私權,所有權以及對資料和對話內容的完整控制權。您可以連線到所有開放的網路,所以您不是只能與其他 Element 使用者聊天。而且還非常安全。\n\nElement 之所以能夠做到所有這些目標,是因為它使用 Matrix一套開放、去中心化的通訊標準運作。\n\nElement 讓您可以自行選擇要將對話放在哪一台伺服器來讓您可自行控制自己的訊息和資料。在 Element 應用程式中,您可以選擇以不同方式託管您的訊息:\n\n1. 在 matrix.org 公開伺服器註冊免費帳號\n2. 使用自行架設的硬體主機上的伺服器來註冊帳號\n3. 訂閱 Element Matrix Services 代管平台,註冊自己的伺服器\n\n為什麼要選擇 Element\n\n自己擁有自己資料由您決定將資料與訊息保留在何處。您自己擁有並管理這些資料而不用讓某些「超大型企業」來探勘您的資料或將資料提供給第三方。\n\n開放的通訊與協作機制您可以與 Matrix 網路中的任何人聊天,不管他們使用的是 Element 還是其他 Matrix 應用程式,甚至他們也可以使用像 Slack 、IRC 或 XMPP 之類的其他通訊系統。\n\n超級安全真正的端對端加密只有對話中的人才能解開訊息內容並進行交叉簽署以驗證對話參與者的設備。\n\n完整的通訊傳訊息、進行語音或視訊通話、分享檔案、畫面還有大量整合、機器人與小工具。建立聊天室、社群保持聯繫並完成工作。\n\n無論您身在何處都可保持聯繫無論您身在何處都可以透過 https://element.io/app 在所有裝置與網路取得完全同步的訊息記錄來保持聯繫。";
// String for App Store
"store_short_description" = "去中心化的安全通訊VoIP 軟體";
"settings_three_pids_management_information_part1" = "在此管理用作登入或復帳的電子郵件地址或電話號碼。也可控制誰可以用這些資料找到 ";
"settings_three_pids_management_information_part1" = "在此管理你可以用作登入或復帳的電地址或電話號碼。也可控制誰可以用這些資料找到你。 ";
"external_link_confirmation_message" = "此連結 %@ 將帶您到另一網頁:%@\n\n確定要前往嗎";
"external_link_confirmation_title" = "請確認此連結";
"media_type_accessibility_sticker" = "貼圖";
@@ -826,7 +826,7 @@
"event_formatter_call_answer" = "接聽";
"event_formatter_call_back" = "回撥";
"event_formatter_call_has_ended" = "通話結束";
"event_formatter_call_connecting" = "正在連接…";
"event_formatter_call_connecting" = "連線中…";
"event_formatter_message_edited_mention" = "(已編輯)";
"image_picker_action_library" = "從媒體庫挑選";
@@ -881,14 +881,14 @@
"settings_messages_containing_keywords" = "關鍵字";
"settings_messages_containing_user_name" = "我的使用者名稱";
"settings_messages_containing_display_name" = "我的顯示名稱";
"settings_encrypted_group_messages" = "加密的群組訊息";
"settings_encrypted_group_messages" = "加密的群組訊息";
"settings_group_messages" = "群組訊息";
"settings_encrypted_direct_messages" = "加密的私人訊息";
"settings_encrypted_direct_messages" = "加密的私人訊息";
"settings_direct_messages" = "私人訊息";
"settings_default" = "預設通知";
"settings_notifications_disabled_alert_title" = "已停用通知";
"settings_device_notifications" = "裝置通知";
"settings_three_pids_management_information_part3" = "。";
"settings_three_pids_management_information_part3" = "管理您用作登入或恢復帳號的電子郵件地址或電話號碼。您也可控制誰可以用這些資料找到您。";
"room_join_group_call" = "加入";
"room_place_voice_call" = "語音通話";
"room_accessibility_video_call" = "視訊通話";
@@ -924,7 +924,7 @@
"room_event_encryption_info_event" = "事件資訊\n";
"room_event_encryption_info_event_user_id" = "使用者 ID\n";
"room_event_encryption_info_event_identity_key" = "Curve25519 身分認證金鑰\n";
"room_event_encryption_info_event_fingerprint_key" = "已聲請之 Ed25519 指紋金鑰\n";
"room_event_encryption_info_event_fingerprint_key" = "聲稱的 Ed25519 指紋金鑰\n";
"room_event_encryption_info_event_algorithm" = "演算法\n";
"room_event_encryption_info_event_session_id" = "工作階段 ID\n";
"room_event_encryption_info_event_decryption_error" = "解密錯誤\n";
@@ -993,14 +993,14 @@
"notice_room_ban" = "%@ 已封鎖 %@";
"notice_room_withdraw" = "%@ 已撤回 %@ 的邀請";
"notice_room_reason" = ",原因:%@";
"notice_avatar_url_changed" = "%@ 變更大頭照";
"notice_display_name_set" = "%@ 已將他們的顯示名稱設定為 %@";
"notice_display_name_changed_from" = "%@ 將自己的顯示名稱從 %@ 改為 %@";
"notice_display_name_removed" = "%@ 移除他們的顯示名稱";
"notice_topic_changed" = "%@ 已經將主題變更為%@。";
"notice_avatar_url_changed" = "%@ 變更大頭照";
"notice_display_name_set" = "%@ 顯示名稱設定為 %@";
"notice_display_name_changed_from" = "%@ 將顯示名稱從 %@ 改為 %@";
"notice_display_name_removed" = "%@ 移除顯示名稱";
"notice_topic_changed" = "%@ 將主題變更為%@。";
"notice_room_name_changed" = "%@ 將聊天室名稱變更為 %@。";
"notice_placed_voice_call" = "%@ 已出語音通話";
"notice_placed_video_call" = "%@ 已出視訊通話";
"notice_placed_voice_call" = "%@ 已出語音通話";
"notice_placed_video_call" = "%@ 已出視訊通話";
"notice_answered_video_call" = "%@ 已接聽通話";
"notice_ended_video_call" = "%@ 已結束通話";
"notice_conference_call_request" = "%@ 已請求 VoIP 會議";
@@ -1098,7 +1098,7 @@
"notice_room_topic_removed" = "%@ 移除了該主題";
"notice_event_redacted_by" = " 由 %@";
"notice_event_redacted_reason" = " [理由:%@]";
"notice_profile_change_redacted" = "%@ 更新他的個人檔案 %@";
"notice_profile_change_redacted" = "%@ 更新個人檔案 %@";
"notice_room_created" = "%@ 已建立並設定該聊天室。";
"notice_room_join_rule" = "加入規則: %@";
"notice_room_power_level_intro" = "聊天室成員們的權限级别是:";
@@ -1138,7 +1138,7 @@
"notice_error_unexpected_event" = "意外事件";
"notice_error_unknown_event_type" = "未知的事件類型";
"notice_room_history_visible_to_anyone" = "%@ 讓任何人都能看到未來的聊天室歷史記錄。";
"notice_room_history_visible_to_members" = "%@ 讓所有聊天室成員都能看到聊天室之後的歷史記錄。";
"notice_room_history_visible_to_members" = "%@ 讓所有成員都能看到聊天室之後的歷史記錄。";
"stop" = "停止";
"joining" = "正在加入";
"enable" = "啟用";
@@ -1291,18 +1291,18 @@
// Settings keys
// call string
"call_connecting" = "正在連接…";
"call_connecting" = "連線中…";
"notification_settings_notify_all_other" = "其他訊息/聊天室的通知";
"notification_settings_by_default" = "按預設…";
"notification_settings_suppress_from_bots" = "限制來自機器人的通知";
"notification_settings_receive_a_call" = "當我收到通話時,請通知我";
"notification_settings_people_join_leave_rooms" = "有人加入或離開聊天室時,請通知我";
"notification_settings_invite_to_a_new_room" = "當我被邀請到一個全新的聊天室時,請通知我";
"notification_settings_just_sent_to_me" = "當收到只寄給我的訊息時,請用音通知我";
"notification_settings_contain_my_display_name" = "訊息出現我的顯示名稱時,請用音通知我";
"notification_settings_contain_my_user_name" = "訊息出現我的使用者名稱時,請用音通知我";
"notification_settings_invite_to_a_new_room" = "當我被邀請到全新的聊天室時,請通知我";
"notification_settings_just_sent_to_me" = "當收到只寄給我的訊息時,請用音通知我";
"notification_settings_contain_my_display_name" = "訊息出現我的顯示名稱時,請用音通知我";
"notification_settings_contain_my_user_name" = "訊息出現我的使用者名稱時,請用音通知我";
"notification_settings_other_alerts" = "其他警告";
"notification_settings_select_room" = "選擇一個聊天室";
"notification_settings_select_room" = "選擇聊天室";
"notification_settings_sender_hint" = "@user:domain.com";
"notification_settings_per_sender_notifications" = "寄件人通知";
"notification_settings_per_room_notifications" = "聊天室的通知";
@@ -1346,11 +1346,11 @@
"login_error_already_logged_in" = "已經登入";
"message_unsaved_changes" = "還有變更未儲存。現在離開的話,您將會放棄這些變動。";
"notice_room_history_visible_to_members_from_joined_point_by_you_for_dm" = "您讓所有人在加入後,就能看到未來的聊天室歷史紀錄。";
"notice_room_history_visible_to_members_from_joined_point_by_you" = "您讓所有聊天室成員在加入後,都能看到未來的聊天室歷史紀錄。";
"notice_room_history_visible_to_members_from_joined_point_by_you" = "您讓所有成員在加入後,都能看到未來的聊天室歷史紀錄。";
"notice_room_history_visible_to_members_from_invited_point_by_you_for_dm" = "您讓所有人收到邀請後,都能看到未來的聊天室歷史紀錄。";
"notice_room_history_visible_to_members_from_invited_point_by_you" = "您讓所有聊天室成員被邀請後,都能看到未來的聊天室歷史紀錄。";
"notice_room_history_visible_to_members_by_you_for_dm" = "您讓所有聊天室成員都能看到聊天室未來的歷史記錄。";
"notice_room_history_visible_to_members_by_you" = "您讓所有聊天室成員都能看到聊天室未來的歷史記錄。";
"notice_room_history_visible_to_members_from_invited_point_by_you" = "您讓所有成員被邀請後,都能看到未來的聊天室歷史紀錄。";
"notice_room_history_visible_to_members_by_you_for_dm" = "您讓所有成員都能看到聊天室未來的歷史記錄。";
"notice_room_history_visible_to_members_by_you" = "您讓所有成員都能看到聊天室未來的歷史記錄。";
"notice_room_history_visible_to_anyone_by_you" = "您讓任何人都能看到未來的聊天室歷史記錄。";
"notice_redaction_by_you" = "您已取消一个事件id: %@)";
"notice_encryption_enabled_unknown_algorithm_by_you" = "您已開啟端到端加密(無法識別的演算法 %@)。";
@@ -1366,14 +1366,14 @@
"notice_declined_video_call_by_you" = "您已拒絕此通話";
"notice_ended_video_call_by_you" = "您已結束通話";
"notice_answered_video_call_by_you" = "您已接聽此通話";
"notice_placed_video_call_by_you" = "您已出視訊通話";
"notice_placed_voice_call_by_you" = "您已出語音通話";
"notice_room_name_changed_by_you_for_dm" = "您將名稱變更為 %@。";
"notice_room_name_changed_by_you" = "您將聊天室名稱變更為 %@。";
"notice_topic_changed_by_you" = "您已經將主題更為:%@。";
"notice_placed_video_call_by_you" = "您已出視訊通話";
"notice_placed_voice_call_by_you" = "您已出語音通話";
"notice_room_name_changed_by_you_for_dm" = "您將名稱變更為 %@。";
"notice_room_name_changed_by_you" = "您將聊天室名稱變更為 %@。";
"notice_topic_changed_by_you" = "您將主題更為:%@。";
"notice_display_name_removed_by_you" = "您已移除自己的顯示名稱";
"notice_display_name_changed_from_by_you" = "您已將顯示名稱從 %@ 變更為 %@";
"notice_display_name_set_by_you" = "您將顯示名稱設定為 %@";
"notice_display_name_set_by_you" = "您將您的顯示名稱設定為 %@";
"notice_avatar_url_changed_by_you" = "您已變更您的大頭照";
"notice_room_withdraw_by_you" = "您已撤回 %@ 的邀請";
"notice_room_ban_by_you" = "您已封鎖 %@";
@@ -1392,12 +1392,12 @@
// Notice Events with "You"
"notice_room_invite_by_you" = "您已邀請 %@";
"notice_declined_video_call" = "%@ 已拒絕此通話";
"notice_room_name_changed_for_dm" = "%@ 名稱變更為 %@。";
"notice_room_name_changed_for_dm" = "%@ 名稱變更為 %@。";
"notice_room_third_party_revoked_invite_for_dm" = "%@ 已撤銷對 %@ 的邀請";
"notice_room_third_party_revoked_invite" = "%@ 已撤銷對 %@ 加入聊天室的邀請";
"notice_room_third_party_invite_for_dm" = "%@ 已邀請 %@";
"microphone_access_not_granted_for_voice_message" = "語音簡訊需要使用麥克風的權限,但是 %@ 沒有存取權限";
"error_common_message" = "發生了一個錯誤。請重新再試。";
"error_common_message" = "發生錯誤。請稍後再試。";
"e2e_passphrase_create" = "建立安全密語";
"e2e_passphrase_too_short" = "安全密語太短(至少要 %d 字母的長度)";
"e2e_passphrase_confirm" = "確認安全密語";
@@ -1445,7 +1445,7 @@
"room_member_ignore_prompt" = "您確定要隱藏所有來自此使用者的訊息嗎?";
"message_reply_to_message_to_reply_to_prefix" = "回覆給";
"message_reply_to_sender_sent_their_live_location" = "即時位置。";
"message_reply_to_sender_sent_their_location" = "已經分享了他們的位置。";
"message_reply_to_sender_sent_their_location" = "分享了他們的位置。";
"message_reply_to_sender_sent_a_file" = "已傳送檔案。";
"message_reply_to_sender_sent_a_voice_message" = "已傳送語音訊息。";
"message_reply_to_sender_sent_an_audio_file" = "已傳送音訊檔。";
@@ -1531,7 +1531,7 @@
"user_session_rename_session_title" = "正在重新命名工作階段";
"user_session_inactive_session_description" = "不活躍的工作階段是您有一段時間未使用的工作階段,但它們會繼續接收加密金鑰。\n\n移除不活躍的工作階段可以改善安全性與效能並讓您可以更容易地識別新的工作階段是否可疑。";
"user_session_inactive_session_title" = "不活躍的工作階段";
"user_session_permanently_unverified_session_description" = "此工作階段無法對此對話進行加密,因此無法驗證。\n\n您無法進入已加密的聊天室中。\n\n為了安全與隱私建議使用支援加密的 Matrix 客戶端。";
"user_session_permanently_unverified_session_description" = "此工作階段不支援加密功能,所以無法驗證。\n\n您無法使用此工作階段進入有開啟加密的聊天室中。\n\n為了安全與隱私建議使用支援加密的 Matrix 客戶端。";
"user_session_unverified_session_description" = "未驗證的工作階段是使用您的憑證登入但交叉叉驗證的工作階段。\n\n您應特別確定您可以識別這些工作階段因為它們可能代表未經授權使用您的帳號。";
"user_session_unverified_session_title" = "未經驗證的工作階段";
"user_session_verified_session_description" = "已驗證的工作階段,是您輸入安全密語或透過另一個已驗證工作階段確認您的身分後,使用此 Element 帳號的任何地方。\n\n這代表了您擁有解鎖加密訊息並向其他使用者確認您信任此工作階段所需的所有金鑰。";
@@ -1638,8 +1638,8 @@
"poll_timeline_total_one_vote_not_voted" = "已投 1 票。投票後即可檢視結果";
"poll_timeline_total_votes" = "共計 %lu 票";
"poll_timeline_total_one_vote" = "共計 1 票";
"poll_timeline_total_no_votes" = "尚投票";
"poll_timeline_votes_count" = "%lu 票";
"poll_timeline_total_no_votes" = "尚投票";
"poll_timeline_votes_count" = "%lu 票";
"poll_timeline_one_vote" = "1 票";
"poll_edit_form_poll_type_closed_description" = "結果僅在您結束投票後顯示";
"poll_edit_form_poll_type_closed" = "秘密投票";
@@ -1683,12 +1683,12 @@
"all_chats_nothing_found_placeholder_title" = "找不到任何結果。";
"all_chats_empty_unreads_placeholder_message" = "當您有一些未讀的訊息時,這裡會顯示您的未讀訊息。";
"all_chats_empty_list_placeholder_title" = "您都看完了。";
"all_chats_empty_view_information" = "適用於團隊、朋友與組織的多合一安全聊天應用程式。建立聊天室,或加入一個既有的聊天室。";
"all_chats_empty_view_information" = "適用於團隊、朋友與組織的多合一安全聊天應用程式。建立聊天室,或加入有的聊天室。";
"all_chats_empty_space_information" = "聊天空間是一種為聊天室與人們分組的新方式。使用右下角的按鈕新增既有的聊天室或建立新的。";
"all_chats_empty_view_title" = "%@\n看起來有點空。";
"all_chats_all_filter" = "全部";
"all_chats_edit_layout_alphabetical_order" = "按 A-Z 排";
"all_chats_edit_layout_activity_order" = "按活動排列";
"all_chats_edit_layout_alphabetical_order" = "按名稱 A-Z 排";
"all_chats_edit_layout_activity_order" = "按頻道最新活動排列";
"all_chats_edit_layout_show_filters" = "顯示過濾條件";
"all_chats_edit_layout_show_recents" = "顯示最近的";
"all_chats_edit_layout_sorting_options_title" = "分類您的訊息";
@@ -1870,7 +1870,7 @@
"home_context_menu_normal_priority" = "一般優先度";
"home_context_menu_low_priority" = "低優先度";
"home_context_menu_unfavourite" = "從我的最愛移除";
"home_context_menu_favourite" = "我的最愛";
"home_context_menu_favourite" = "加入我的最愛";
"home_context_menu_unmute" = "解除靜音";
"home_context_menu_mute" = "靜音";
"home_context_menu_notifications" = "通知";
@@ -1996,10 +1996,10 @@
"notice_crypto_error_unknown_inbound_session_id" = "傳送者的工作階段,尚未傳送傳給我們這則訊息的金鑰。";
"notice_crypto_unable_to_decrypt" = "** 無法解密:%@ **";
"notice_room_history_visible_to_members_from_joined_point_for_dm" = "%@ 您讓所有人被邀請後,都能看到未來的聊天室歷史紀錄。";
"notice_room_history_visible_to_members_from_joined_point" = "%@ 讓所有聊天室成員被邀請後開始,都能看到未來的聊天室歷史紀錄。";
"notice_room_history_visible_to_members_from_invited_point_for_dm" = "%@ 從他們被邀請開始,讓未來的聊天室歷史紀錄顯示給所有聊天室成員。";
"notice_room_history_visible_to_members_from_invited_point" = "%@ 從他們被邀請開始,讓未來的聊天室歷史紀錄顯示給所有聊天室成員。";
"notice_room_history_visible_to_members_for_dm" = "%@ 讓所有聊天室成員都能看到聊天室之後的歷史記錄。";
"notice_room_history_visible_to_members_from_joined_point" = "%@ 讓所有成員被邀請後開始,都能看到未來的聊天紀錄。";
"notice_room_history_visible_to_members_from_invited_point_for_dm" = "%@ 從他們被邀請開始,讓未來的聊天紀錄顯示給所有成員。";
"notice_room_history_visible_to_members_from_invited_point" = "%@ 從他們被邀請開始,讓未來的聊天紀錄顯示給所有成員。";
"notice_room_history_visible_to_members_for_dm" = "%@ 讓所有成員都能看到聊天室之後的歷史記錄。";
"notice_error_unformattable_event" = "** 無法顯示這則訊息。請回報此錯誤";
"notice_encryption_enabled_unknown_algorithm" = "%1$@ 已開啟端到端加密(無法識別的演算法 %2$@)。";
"notice_encryption_enabled_ok" = "%@ 已開啟端到端加密。";
@@ -2009,11 +2009,11 @@
"notice_room_join_rule_public_by_you" = "您已公開此聊天室。";
"notice_room_join_rule_public_for_dm" = "%@ 公開這個。";
"notice_room_join_rule_public" = "%@ 公開此聊天室。";
"notice_room_join_rule_invite_by_you_for_dm" = "您讓此變為邀請制。";
"notice_room_join_rule_invite_by_you_for_dm" = "您將此處變為邀請制。";
"notice_room_join_rule_invite_by_you" = "您讓聊天室變為邀請才可加入。";
"notice_room_join_rule_invite_for_dm" = "%@讓此變為邀請制。";
"notice_room_join_rule_invite_for_dm" = "%@ 將此處變為邀請制。";
// New
"notice_room_join_rule_invite" = "%@聊天室變為邀請才可加入。";
"notice_room_join_rule_invite" = "%@聊天室變為邀請。";
"notice_room_created_for_dm" = "%@ 已加入。";
"notice_room_name_removed_for_dm" = "%@ 移除了該聊天室的名稱";
"ignore_user" = "忽略使用者";
@@ -2114,7 +2114,7 @@
// Generic errors
"error_invite_3pid_with_no_identity_server" = "在設定加入一個身分伺服器,才能用電子郵件寄送邀請。";
"error_invite_3pid_with_no_identity_server" = "在設定加入身分伺服器,才能用電子郵件寄送邀請。";
"emoji_picker_flags_category" = "旗幟";
"emoji_picker_symbols_category" = "符號";
"emoji_picker_places_category" = "旅遊與景點";
@@ -2128,7 +2128,7 @@
// User
"key_verification_verified_user_information" = "與此使用者的訊息是端到端加密,無法被第三方讀取。";
"key_verification_verified_user_information" = "與此使用者的訊息有端對端加密,無法被第三方讀取。";
"key_verification_verified_this_session_information" = "您現在可以在此裝置上閱讀您的加密訊息,其他使用者也會知道他們能夠信任此裝置。";
"key_verification_verified_new_session_information" = "您現在也可以在新的裝置上閱讀您的加密訊息,其他使用者也會知道他們能夠信任此裝置。";
"key_verification_verified_other_session_information" = "您現在也可以在其他的工作階段閱讀您的加密訊息,其他使用者也會知道他們能夠信任此工作階段。";
@@ -2300,7 +2300,7 @@
"secure_key_backup_setup_intro_use_security_passphrase_info" = "輸入只有您知道的安全密語,並產生備份的金鑰。";
"secure_key_backup_setup_intro_use_security_passphrase_title" = "使用安全密語";
"secure_key_backup_setup_intro_use_security_key_info" = "產生安全金鑰後,請儲存在密碼管理員或保險箱等安全的地方。";
"secure_key_backup_setup_intro_info" = "透過備份您伺服器上的加密金鑰,來防止失去對您已加密訊息與資料的存取權。";
"secure_key_backup_setup_intro_info" = "透過備份您伺服器上的加密金鑰,來防止失去對加密訊息與資料的存取權。";
"service_terms_modal_information_description_integration_manager" = "整合管理員能夠讓您加入第三方服務的功能。";
"service_terms_modal_information_description_identity_server" = "身分伺服器讓您能夠用電話或電子郵件,查詢您的聯絡人是否已經申請帳號。";
"service_terms_modal_information_title_integration_manager" = "整合管理員";
@@ -2309,7 +2309,7 @@
"service_terms_modal_information_title_identity_server" = "身分伺服器";
"service_terms_modal_description_integration_manager" = "這會讓您可以使用聊天機器人、橋接、小工具和貼圖包。";
"service_terms_modal_description_identity_server" = "這會讓手機上儲存您電話或電子郵件的人能找到您。";
"service_terms_modal_table_header_integration_manager" = "管理整合服務使用條款";
"service_terms_modal_table_header_integration_manager" = "整合管理員使用條款";
"service_terms_modal_table_header_identity_server" = "身分伺服器條款";
"service_terms_modal_footer" = "您可以隨時在設定中取消。";
@@ -2362,10 +2362,10 @@
"leave_space_action" = "離開聊天空間";
"spaces_add_room_missing_permission_message" = "您沒有權限在此聊天空間中新增聊天室。";
"spaces_creation_in_one_space" = "在個聊天空間";
"spaces_creation_in_one_space" = "在 1 個聊天空間";
"spaces_creation_in_many_spaces" = "在 %@ 個聊天空間";
"spaces_creation_in_spacename_plus_many" = "在 %@ 加入 %@ 個聊天空間";
"spaces_creation_in_spacename_plus_one" = "在 %@ 加入個聊天空間";
"spaces_creation_in_spacename_plus_one" = "在 %@ 加入 1 個聊天空間";
"spaces_creation_in_spacename" = "在 %@";
"spaces_creation_post_process_inviting_users" = "邀請 %@ 位使用者";
"spaces_creation_post_process_adding_rooms" = "加入 %@ 個聊天室";
@@ -2406,7 +2406,7 @@
// Analytics
"analytics_prompt_title" = "協助改善 %@";
"call_no_stun_server_error_use_fallback_button" = "嘗試使用 %@";
"call_no_stun_server_error_message_2" = "或是您也可以試著使用公開伺服器 %@,但可能不夠可靠,而且會跟該伺服器分享您的 IP 位址。您也可以在設定中管理這個";
"call_no_stun_server_error_message_2" = "或是您也可以試著使用公開伺服器 %@,但可能不夠可靠,而且會跟該伺服器分享您的 IP 位址。您也可以在設定中管理此設定";
"call_no_stun_server_error_message_1" = "請聯繫您家伺服器 %@ 的管理員建立一套 TURN 伺服器,使通話能更穩定運作。";
"call_no_stun_server_error_title" = "由於伺服器設定錯誤,無法通話";
"call_jitsi_unable_to_start" = "無法建立會議通話";
@@ -2424,7 +2424,7 @@
"room_notifs_settings_mentions_and_keywords" = "僅提及和關鍵字";
// Room Notification Settings
"room_notifs_settings_notify_me_for" = "通知我";
"room_notifs_settings_notify_me_for" = "收到下列訊息時通知我";
"room_suggestion_settings_screen_message" = "將向聊天空間中的成員推薦建議的聊天室。";
"room_suggestion_settings_screen_title" = "將聊天室設為聊天空間中的建議聊天室";
@@ -2437,7 +2437,7 @@
"room_access_settings_screen_upgrade_alert_upgrading" = "升級聊天室";
"room_access_settings_screen_upgrade_alert_upgrade_button" = "升級";
"room_access_settings_screen_upgrade_alert_auto_invite_switch" = "自動邀請成員到新的聊天室";
"room_access_settings_screen_upgrade_alert_note" = "請注意,升級會創造一個新版的聊天室。目前所有訊息都會放在已封存的聊天室。";
"room_access_settings_screen_upgrade_alert_note" = "請注意,升級會建立新版的聊天室。目前所有訊息都將封存在此聊天室。";
"room_access_settings_screen_upgrade_alert_message_no_param" = "母聊天空間中的任何人都可以找到並加入此聊天室,不需要手動邀請所有人。您隨時都可以在聊天室設定中變更此設定。";
"room_access_settings_screen_upgrade_alert_message" = "任何在 %@ 的人都能找到並加入此聊天室,不需手動邀請所有人。您可以在聊天室的設定中隨時變更此設定。";
"room_access_settings_screen_upgrade_alert_title" = "升級聊天室";
@@ -2474,7 +2474,7 @@
"identity_server_settings_alert_change_title" = "變更身分伺服器";
"identity_server_settings_alert_no_terms" = "您選擇的身分伺服器沒有任何服務條款。僅在您信任服務擁有者時才繼續。";
"identity_server_settings_alert_no_terms_title" = "身分伺服器無使用條款";
"identity_server_settings_disconnect_info" = "如果您未連線到您的身分伺服器,其他使用者無法到您,您也無法經由電子郵件和電話找到其他使用者。";
"identity_server_settings_disconnect_info" = "您的身分伺服器中斷連線後,其他使用者無法再探索到您,您也不能透過電子郵件地址或電話號碼邀請其他人。";
"identity_server_settings_place_holder" = "輸入一個身分伺服器";
"identity_server_settings_no_is_description" = "您目前未使用身分伺服器。若想要尋找或被您認識的聯絡人找到,請在上方加入伺服器。";
"identity_server_settings_description" = "您正在使用 %@ 來讓其他現有的聯絡人和您能夠找到彼此。";
@@ -2531,9 +2531,9 @@
"settings_discovery_three_pid_details_revoke_action" = "撤回";
"settings_discovery_three_pid_details_information_phone_number" = "在此管理讓其他使用者尋找您以及邀請您進入聊天室的電話號碼偏好設定。您可以在「帳號」中加入或刪除電話號碼。";
"settings_discovery_three_pid_details_information_email" = "在此管理讓其他使用者尋找您以及邀請您進入聊天室的電子郵件地址偏好設定。您可以在「帳號」中加入或刪除電子郵件地址。";
"settings_discovery_three_pids_management_information_part1" = "選擇您希望其他使用者用哪一個電子郵件(或電話)聯絡您,以及邀請您進入聊天室。您可以在此清單加入/移除電子郵件(或電話)。 ";
"settings_discovery_three_pids_management_information_part1" = "選擇您希望其他使用者用哪一個電子郵件地址(或電話號碼)聯絡您,以及邀請您進入聊天室。您可以在此清單加入/移除電子郵件地址(或電話號碼)。 ";
"settings_discovery_accept_terms" = "同意身分伺服器的使用條款";
"settings_discovery_terms_not_signed" = "同意身分伺服器(%@)的使用條款,讓其他人可以用您的電子郵件或電話號碼找到您。";
"settings_discovery_terms_not_signed" = "同意身分伺服器(%@)的使用條款,讓其他人可以用電子郵件地址或電話號碼找到您。";
"settings_discovery_no_identity_server" = "您目前未使用身分伺服器。若想要被您認識的聯絡人找到,請加入伺服器。";
"settings_devices_description" = "所有與您通訊的聯絡人都能看到此工作階段的公開名稱";
"settings_key_backup_delete_confirmation_prompt_msg" = "您確定嗎?如果您的金鑰沒有正確備份的話,將會遺失所有加密訊息。";
@@ -2576,7 +2576,7 @@
// Sessions list
"user_verification_sessions_list_user_trust_level_trusted_title" = "受信任";
"user_verification_start_additional_information" = "要確定安全,請面對面進行或使用其他方式來通訊。";
"user_verification_start_additional_information" = "為了確保安全,請面對面進行驗證,或使用其他方式來通訊。";
"user_verification_start_waiting_partner" = "正在等待 %@…";
"user_verification_start_information_part2" = " 雙方裝置上顯示的單次驗證碼。";
"user_verification_start_information_part1" = "為了加強安全性,請確認 ";
@@ -2648,8 +2648,8 @@
"settings_call_invitations" = "通話邀請";
"settings_room_invitations" = "聊天室邀請";
"settings_messages_containing_at_room" = "@room";
"settings_notify_me_for" = "通知我";
"settings_mentions_and_keywords" = "僅有被提及與出現關鍵字";
"settings_notify_me_for" = "收到下列訊息時通知我";
"settings_mentions_and_keywords" = "提及與關鍵字";
"settings_notifications_disabled_alert_message" = "如需啟用通知,請前往裝置設定。";
"settings_security" = "安全性";
"settings_confirm_media_size_description" = "開啟此選項後,傳送檔案前,會先向您確認準備傳送的圖片與影片大小。";
@@ -2733,7 +2733,7 @@
// Social login
"social_login_list_title_continue" = "繼續";
"social_login_list_title_continue" = "使用下列方式繼續";
"network_offline_message" = "您已離線,請確認您的網路連線。";
"network_offline_title" = "您已離線";
"event_formatter_jitsi_widget_removed_by_you" = "您已刪除 VoIP 會議";
@@ -2743,7 +2743,7 @@
// Events formatter with you
"event_formatter_widget_added_by_you" = "您新增了小工具:%@";
"event_formatter_message_deleted" = "訊息已刪除";
"event_formatter_group_call_incoming" = "%@ %@";
"event_formatter_group_call_incoming" = "%@ (來自 %@";
"event_formatter_call_decline" = "拒絕";
"event_formatter_call_connection_failed" = "連線失敗";
"event_formatter_call_missed_video" = "未接聽的視訊通話";
@@ -2824,8 +2824,8 @@
"wysiwyg_composer_format_action_unordered_list" = "切換項目符號清單";
"wysiwyg_composer_format_action_inline_code" = "套用內嵌程式碼格式";
"user_other_session_security_recommendation_title" = "其他工作階段";
"poll_timeline_reply_ended_poll" = "結束投票";
"poll_timeline_ended_text" = "結束投票";
"poll_timeline_reply_ended_poll" = "結束投票";
"poll_timeline_ended_text" = "投票已結束";
"poll_timeline_decryption_error" = "因為解密錯誤,不會計算部份投票";
"poll_history_load_more" = "載入更多投票";
"poll_history_detail_view_in_timeline" = "在時間軸中檢視投票";
@@ -2856,3 +2856,32 @@
// MARK: - Launch loading
"launch_loading_generic" = "正在同步對話";
"pill_message_in" = "在 %@ 的訊息";
"pill_message_from" = "來自 %@ 的訊息";
"pill_message" = "訊息";
// Pills
"pill_room_fallback_display_name" = "聊天空間/聊天室";
"key_verification_self_verify_security_upgrade_alert_message" = "最新版本中已改進加密訊息傳輸功能,請重新驗證您的裝置。";
// Legacy to Rust security upgrade
"key_verification_self_verify_security_upgrade_alert_title" = "已更新程式";
"settings_acceptable_use" = "可接受使用政策";
"room_command_error_unknown_command" = "無效或是無法處理的指令";
"room_command_discard_session_description" = "強制使現行在已加密聊天室的外部工作階段失效";
"room_command_change_room_topic_description" = "設定聊天室主題";
"room_command_reset_user_power_level_description" = "使用 ID 降級超級使用者";
"room_command_set_user_power_level_description" = "定義超級權限使用者";
"room_command_unban_user_description" = "使用 ID 解除已禁止使用者";
"room_command_ban_user_description" = "使用 ID 來禁止使用者";
"room_command_kick_user_description" = "使用 ID 移除使用者離開此聊天室";
"room_command_invite_user_description" = "使用 ID 邀請成員加入此聊天室";
"room_command_part_room_description" = "離開聊天室";
"room_command_join_room_description" = "使用網址位置加入聊天室";
"room_command_emote_description" = "顯示動作";
// Room commands descriptions
"room_command_change_display_name_description" = "變更您的顯示名稱";
"notice_display_name_changed_to" = "%@ 將顯示名稱變更為 %@";
"poll_timeline_loading" = "載入中 ...";

View File

@@ -70,7 +70,6 @@ extension MXBugReportRestClient {
// SDKs
userInfo["matrix_sdk_version"] = MatrixSDKVersion
userInfo["crypto_module"] = MXSDKOptions.sharedInstance().cryptoModuleId
if let crypto = mainAccount?.mxSession?.crypto {
userInfo["crypto_module_version"] = crypto.version
}

View File

@@ -256,40 +256,18 @@ NSString *const kMXKRoomBubbleCellKeyVerificationIncomingRequestDeclinePressed =
if (componentIndex < bubbleComponents.count)
{
MXKRoomBubbleComponent *component = bubbleComponents[componentIndex];
// Define the marker frame
CGFloat markPosY = component.position.y + self.msgTextViewTopConstraint.constant;
NSInteger mostRecentComponentIndex = bubbleComponents.count - 1;
if ([bubbleData isKindOfClass:RoomBubbleCellData.class])
CGRect componentFrame = [self componentFrameInContentViewForIndex:componentIndex];
if (CGRectIsEmpty(componentFrame))
{
mostRecentComponentIndex = ((RoomBubbleCellData*)bubbleData).mostRecentComponentIndex;
}
// Compute the mark height.
// Use the rest of the cell height by default.
CGFloat markHeight = self.contentView.frame.size.height - markPosY;
if (componentIndex != mostRecentComponentIndex)
{
// There is another component (with display) after this component in the cell.
// Stop the marker height to the top of this component.
for (NSInteger index = componentIndex + 1; index < bubbleComponents.count; index ++)
{
MXKRoomBubbleComponent *nextComponent = bubbleComponents[index];
if (nextComponent.attributedTextMessage)
{
markHeight = nextComponent.position.y - component.position.y;
break;
}
}
return;
}
UIView *markerView = [[UIView alloc] initWithFrame:CGRectMake(VECTOR_ROOMBUBBLETABLEVIEWCELL_MARK_X,
markPosY,
VECTOR_ROOMBUBBLETABLEVIEWCELL_MARK_WIDTH,
markHeight)];
CGRect markerFrame = CGRectMake(VECTOR_ROOMBUBBLETABLEVIEWCELL_MARK_X,
CGRectGetMinY(componentFrame),
VECTOR_ROOMBUBBLETABLEVIEWCELL_MARK_WIDTH,
CGRectGetHeight(componentFrame));
UIView *markerView = [[UIView alloc] initWithFrame:markerFrame];
markerView.backgroundColor = ThemeService.shared.theme.tintColor;
[markerView setTranslatesAutoresizingMaskIntoConstraints:NO];
@@ -303,28 +281,28 @@ NSString *const kMXKRoomBubbleCellKeyVerificationIncomingRequestDeclinePressed =
toItem:self.contentView
attribute:NSLayoutAttributeLeading
multiplier:1.0
constant:VECTOR_ROOMBUBBLETABLEVIEWCELL_MARK_X];
constant:CGRectGetMinX(markerFrame)];
NSLayoutConstraint *topConstraint = [NSLayoutConstraint constraintWithItem:markerView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.contentView
attribute:NSLayoutAttributeTop
multiplier:1.0
constant:markPosY];
constant:CGRectGetMinY(markerFrame)];
NSLayoutConstraint *widthConstraint = [NSLayoutConstraint constraintWithItem:markerView
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:VECTOR_ROOMBUBBLETABLEVIEWCELL_MARK_WIDTH];
constant:CGRectGetWidth(markerFrame)];
NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:markerView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:markHeight];
constant:CGRectGetHeight(markerFrame)];
// Available on iOS 8 and later
[NSLayoutConstraint activateConstraints:@[leftConstraint, topConstraint, widthConstraint, heightConstraint]];
@@ -600,36 +578,47 @@ NSString *const kMXKRoomBubbleCellKeyVerificationIncomingRequestDeclinePressed =
}
else if (roomBubbleTableViewCell.messageTextView)
{
// Force the textView used underneath to layout its frame properly
[roomBubbleTableViewCell setNeedsLayout];
[roomBubbleTableViewCell layoutIfNeeded];
// Compute the height
CGFloat textMessageHeight = 0;
if ([bubbleCellData isKindOfClass:[RoomBubbleCellData class]])
{
RoomBubbleCellData *roomBubbleCellData = (RoomBubbleCellData*)bubbleCellData;
if (!roomBubbleCellData.attachment && selectedComponent.attributedTextMessage)
{
textMessageHeight = [roomBubbleCellData rawTextHeight:selectedComponent.attributedTextMessage];
// Get the width of messageTextView to compute the needed height
CGFloat maxTextWidth = CGRectGetWidth(roomBubbleTableViewCell.messageTextView.bounds);
// Compute text message height
textMessageHeight = [roomBubbleCellData rawTextHeight:selectedComponent.attributedTextMessage withMaxWidth:maxTextWidth];
}
}
selectedComponentPositionY = selectedComponent.position.y;
// Get the messageText frame in the cell content view (as the messageTextView may be inside a stackView and not directly a child of the tableViewCell)
UITextView *messageTextView = roomBubbleTableViewCell.messageTextView;
CGRect messageTextViewFrame = [messageTextView convertRect:messageTextView.bounds toView:roomBubbleTableViewCell.contentView];
if (textMessageHeight > 0)
{
selectedComponentHeight = textMessageHeight;
}
else
{
selectedComponentHeight = roomBubbleTableViewCell.frame.size.height - selectedComponentPositionY;
// if we don't have a height, use the messageTextView height without the text container vertical insets to stay aligned with the text.
selectedComponentHeight = CGRectGetHeight(messageTextViewFrame) - messageTextView.textContainerInset.top - messageTextView.textContainerInset.bottom;
}
// Force the textView used underneath to layout its frame properly
[roomBubbleTableViewCell setNeedsLayout];
[roomBubbleTableViewCell layoutIfNeeded];
selectedComponenContentViewYOffset = roomBubbleTableViewCell.messageTextView.frame.origin.y;
// Get the vertical position of the messageTextView relative to the contentView
selectedComponenContentViewYOffset = CGRectGetMinY(messageTextViewFrame);
// Get the position of the component inside the messageTextView
selectedComponentPositionY = selectedComponent.position.y;
}
if (roomBubbleTableViewCell.attachmentView || roomBubbleTableViewCell.messageTextView)
{
CGFloat x = 0;
@@ -801,8 +790,7 @@ NSString *const kMXKRoomBubbleCellKeyVerificationIncomingRequestDeclinePressed =
- (void)addTickView:(UIView *)tickView atIndex:(NSInteger)index
{
CGRect componentFrame = [self componentFrameInContentViewForIndex: index];
CGRect componentFrame = [self componentFrameInContentViewForIndex:index];
tickView.frame = CGRectMake(self.contentView.bounds.size.width - tickView.frame.size.width - 2 * PlainRoomCellLayoutConstants.readReceiptsViewRightMargin, CGRectGetMaxY(componentFrame) - tickView.frame.size.height, tickView.frame.size.width, tickView.frame.size.height);
[self.contentView addSubview:tickView];

View File

@@ -20,7 +20,7 @@
#import "AvatarGenerator.h"
#import "MatrixKit.h"
#import "GeneratedInterface-Swift.h"
#import <objc/runtime.h>
@implementation MXRoom (Riot)
@@ -80,8 +80,15 @@
// Check whether an override rule has been defined with the roomm id as rule id.
// This kind of rule is created to mute the room
MXPushRule* rule = [self getOverrideRoomPushRule];
if (rule)
if (rule && rule.enabled)
{
// Support for MSC3987: The dont_notify push rule action is deprecated.
if (rule.actions.count == 0)
{
return true;
}
// Support deprecated dont_notify push rule action for compatibility purposes.
for (MXPushRuleAction *ruleAction in rule.actions)
{
if (ruleAction.actionType == MXPushRuleActionTypeDontNotify)
@@ -98,7 +105,7 @@
if (key && pattern && [key isEqualToString:@"room_id"] && [pattern isEqualToString:self.roomId])
{
return rule.enabled;
return true;
}
}
}
@@ -113,13 +120,20 @@
{
// Check push rules at room level
MXPushRule *rule = [self getRoomPushRule];
if (rule)
if (rule && rule.enabled)
{
// Support for MSC3987: The dont_notify push rule action is deprecated.
if (rule.actions.count == 0)
{
return true;
}
// Support deprecated dont_notify push rule action for compatibility purposes.
for (MXPushRuleAction *ruleAction in rule.actions)
{
if (ruleAction.actionType == MXPushRuleActionTypeDontNotify)
{
return rule.enabled;
return true;
}
}
}
@@ -178,12 +192,21 @@
// check if the user did not define one
BOOL hasDontNotifyRule = NO;
for (MXPushRuleAction *ruleAction in rule.actions)
// Support for MSC3987: The dont_notify push rule action is deprecated.
if (rule.actions.count == 0)
{
if (ruleAction.actionType == MXPushRuleActionTypeDontNotify)
hasDontNotifyRule = YES;
}
else
{
// Support deprecated dont_notify push rule action for compatibility purposes.
for (MXPushRuleAction *ruleAction in rule.actions)
{
hasDontNotifyRule = YES;
break;
if (ruleAction.actionType == MXPushRuleActionTypeDontNotify)
{
hasDontNotifyRule = YES;
break;
}
}
}
@@ -256,12 +279,21 @@
// check if the user did not define one
BOOL hasDontNotifyRule = NO;
for (MXPushRuleAction *ruleAction in rule.actions)
// Support for MSC3987: The dont_notify push rule action is deprecated.
if (rule.actions.count == 0)
{
if (ruleAction.actionType == MXPushRuleActionTypeDontNotify)
hasDontNotifyRule = YES;
}
else
{
// Support deprecated dont_notify push rule action for compatibility purposes.
for (MXPushRuleAction *ruleAction in rule.actions)
{
hasDontNotifyRule = YES;
break;
if (ruleAction.actionType == MXPushRuleActionTypeDontNotify)
{
hasDontNotifyRule = YES;
break;
}
}
}
@@ -331,30 +363,10 @@
{
[self.mxSession.crypto trustLevelSummaryForUserIds:@[userId] forceDownload:NO success:^(MXUsersTrustLevelSummary *usersTrustLevelSummary) {
UserEncryptionTrustLevel userEncryptionTrustLevel;
double trustedDevicesPercentage = usersTrustLevelSummary.trustedDevicesProgress.fractionCompleted;
if (trustedDevicesPercentage >= 1.0)
{
userEncryptionTrustLevel = UserEncryptionTrustLevelTrusted;
}
else if (trustedDevicesPercentage == 0.0)
{
// Verify if the user has the user has cross-signing enabled
if ([self.mxSession.crypto.crossSigning crossSigningKeysForUser:userId])
{
userEncryptionTrustLevel = UserEncryptionTrustLevelNotVerified;
}
else
{
userEncryptionTrustLevel = UserEncryptionTrustLevelNoCrossSigning;
}
}
else
{
userEncryptionTrustLevel = UserEncryptionTrustLevelWarning;
}
MXCrossSigningInfo *crossSigningInfo = [self.mxSession.crypto.crossSigning crossSigningKeysForUser:userId];
EncryptionTrustLevel *encryption = [[EncryptionTrustLevel alloc] init];
UserEncryptionTrustLevel userEncryptionTrustLevel = [encryption userTrustLevelWithCrossSigning:crossSigningInfo
trustedDevicesProgress:usersTrustLevelSummary.trustedDevicesProgress];
onComplete(userEncryptionTrustLevel);
} failure:^(NSError *error) {

View File

@@ -15,17 +15,7 @@
*/
#import "MatrixKit.h"
/**
RoomEncryptionTrustLevel represents the trust level in an encrypted room.
*/
typedef NS_ENUM(NSUInteger, RoomEncryptionTrustLevel) {
RoomEncryptionTrustLevelTrusted,
RoomEncryptionTrustLevelWarning,
RoomEncryptionTrustLevelNormal,
RoomEncryptionTrustLevelUnknown
};
#import "RoomEncryptionTrustLevel.h"
/**
Define a `MXRoomSummary` category at Riot level.

View File

@@ -33,32 +33,15 @@
- (RoomEncryptionTrustLevel)roomEncryptionTrustLevel
{
RoomEncryptionTrustLevel roomEncryptionTrustLevel = RoomEncryptionTrustLevelUnknown;
if (self.trust)
MXUsersTrustLevelSummary *trust = self.trust;
if (!trust)
{
double trustedUsersPercentage = self.trust.trustedUsersProgress.fractionCompleted;
double trustedDevicesPercentage = self.trust.trustedDevicesProgress.fractionCompleted;
if (trustedUsersPercentage >= 1.0)
{
if (trustedDevicesPercentage >= 1.0)
{
roomEncryptionTrustLevel = RoomEncryptionTrustLevelTrusted;
}
else
{
roomEncryptionTrustLevel = RoomEncryptionTrustLevelWarning;
}
}
else
{
roomEncryptionTrustLevel = RoomEncryptionTrustLevelNormal;
}
roomEncryptionTrustLevel = roomEncryptionTrustLevel;
MXLogError(@"[MXRoomSummary] roomEncryptionTrustLevel: trust is missing");
return RoomEncryptionTrustLevelUnknown;
}
return roomEncryptionTrustLevel;
EncryptionTrustLevel *encryption = [[EncryptionTrustLevel alloc] init];
return [encryption roomTrustLevelWithSummary:trust];
}
- (BOOL)isJoined

View File

@@ -0,0 +1,64 @@
//
// Copyright 2023 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 Foundation
/// Custom NSAttributedString.Key to specify the theme
let themeIdentifierAttributeName = NSAttributedString.Key("ThemeIdentifier")
/// Custom NSAttributedString.Key to specify a theme color by its name
let themeColorNameAttributeName = NSAttributedString.Key("ThemeColorName")
extension NSAttributedString {
/// Fix foreground color attributes if this attributed string contains the `themeIdentifierAttributeName` and `foregroundColorNameAttributeName` attributes
/// - Returns: a new attributed string with updated colors
@objc func fixForegroundColor() -> NSAttributedString {
let activeTheme = ThemeService.shared().theme
// Check if a theme is defined for this attributed string
var needUpdate = false
self.vc_enumerateAttribute(themeIdentifierAttributeName) { (themeIdentifier: String, range: NSRange, _) in
needUpdate = themeIdentifier != activeTheme.identifier
}
guard needUpdate else {
return self
}
// Build a new attributedString with the proper colors if possible
let mutableAttributedString = NSMutableAttributedString(attributedString: self)
mutableAttributedString.vc_enumerateAttribute(themeColorNameAttributeName) { (colorName: String, range: NSRange, _) in
if let color = ThemeColorResolver.getColorByName(colorName) {
mutableAttributedString.addAttribute(.foregroundColor, value: color, range: range)
}
}
return mutableAttributedString
}
}
extension NSMutableAttributedString {
/// Adds a theme color name attribute
/// - Parameters:
/// - colorName: color name
/// - range:range for this attribute
@objc func addThemeColorNameAttribute(_ colorName: String, range: NSRange) {
self.addAttribute(themeColorNameAttributeName, value: colorName, range: range)
}
/// Adds a theme identifier attribute
@objc func addThemeIdentifierAttribute() {
self.addAttribute(themeIdentifierAttributeName, value: ThemeService.shared().theme.identifier, range: .init(location: 0, length: length))
}
}

View File

@@ -1,120 +0,0 @@
//
// Copyright 2023 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 Foundation
import MatrixSDKCrypto
/// An implementation of `MXCryptoV2Feature` which uses `UserDefaults` to persist the enabled status
/// of `CryptoSDK`, and which uses feature flags to control rollout availability.
///
/// The implementation uses both remote and local feature flags to control the availability of `CryptoSDK`.
/// Whilst remote is more convenient in that it allows changes to the rollout without new app releases,
/// it is not available to all users because it requires data tracking user consent. Remote therefore
/// represents the safer, albeit limited rollout strategy, whereas the local feature flags allows eventually
/// targetting all users, but each target change requires new app release.
///
/// Additionally users can manually enable this feature from the settings if they are not already in the
/// feature group.
@objc class CryptoSDKFeature: NSObject, MXCryptoV2Feature {
@objc static let shared = CryptoSDKFeature()
var isEnabled: Bool {
BWIBuildSettings.shared.useRustEncryption
}
var needsVerificationUpgrade: Bool {
get {
return RiotSettings.shared.showVerificationUpgradeAlert
}
set {
RiotSettings.shared.showVerificationUpgradeAlert = newValue
}
}
private static let FeatureName = "ios-crypto-sdk"
private static let FeatureNameV2 = "ios-crypto-sdk-v2"
private let remoteFeature: RemoteFeaturesClientProtocol
private let localFeature: PhasedRolloutFeature
init(
remoteFeature: RemoteFeaturesClientProtocol = PostHogAnalyticsClient.shared,
localTargetPercentage: Double = 0.5
) {
var targetPercentage = 0.0
if BWIBuildSettings.shared.useRustEncryption {
targetPercentage = 1.0
}
self.remoteFeature = remoteFeature
self.localFeature = PhasedRolloutFeature(
name: Self.FeatureName,
targetPercentage: targetPercentage
)
}
func enable() {
RiotSettings.shared.enableCryptoSDK = true
Analytics.shared.trackCryptoSDKEnabled()
MXLog.debug("[CryptoSDKFeature] Crypto SDK enabled")
}
func enableIfAvailable(forUserId userId: String!) {
guard !isEnabled else {
MXLog.debug("[CryptoSDKFeature] enableIfAvailable: Feature is already enabled")
return
}
guard let userId else {
MXLog.failure("[CryptoSDKFeature] enableIfAvailable: Missing user id")
return
}
guard isFeatureEnabled(userId: userId) else {
MXLog.debug("[CryptoSDKFeature] enableIfAvailable: Feature is currently not available for this user")
return
}
MXLog.debug("[CryptoSDKFeature] enableIfAvailable: Feature has become available for this user and will be enabled")
enable()
}
@objc func canManuallyEnable(forUserId userId: String!) -> Bool {
guard let userId else {
MXLog.failure("[CryptoSDKFeature] canManuallyEnable: Missing user id")
return false
}
// User can manually enable only if not already within the automatic feature group
return !isFeatureEnabled(userId: userId)
}
@objc func reset() {
RiotSettings.shared.enableCryptoSDK = false
MXLog.debug("[CryptoSDKFeature] Crypto SDK disabled")
}
private func isFeatureEnabled(userId: String) -> Bool {
// This feature includes app version with a bug, and thus will not be rolled out to 100% users
remoteFeature.isFeatureEnabled(Self.FeatureName)
// Second version of the remote feature with a bugfix and released eventually to 100% users
|| remoteFeature.isFeatureEnabled(Self.FeatureNameV2)
// Local feature
|| localFeature.isEnabled(userId: userId)
}
}

View File

@@ -99,6 +99,10 @@ public class BWIL10n: NSObject {
public static var bumAutheticationTitle: String {
return BWIL10n.tr("Bwi", "bum_authetication_title")
}
/// Barrierefreiheitserklärung
public static var bwiAccessibilityDeclarationButtonTitle: String {
return BWIL10n.tr("Bwi", "bwi_accessibility_declaration_button_title")
}
/// Wir brauchen Deine Hilfe, um Fehler im %@ besser analysieren zu können. Dazu würden wir gerne anonymisierte Diagnosedaten erfassen. Es werden keine Daten an Dritte übermittelt. Details findest Du in der Datenschutzerklärung.\n\nFalls Du nicht mehr mithelfen möchtest, kannst Du dies in den Einstellungen jederzeit wieder deaktivieren.\n\nMöchtest du bei der Fehler-Analyse unterstützen?
public static func bwiAnalyticsAlertBody(_ p1: String) -> String {
return BWIL10n.tr("Bwi", "bwi_analytics_alert_body", p1)
@@ -207,7 +211,19 @@ public class BWIL10n: NSObject {
public static func bwiErrorInviteGeneral(_ p1: String) -> String {
return BWIL10n.tr("Bwi", "bwi_error_invite_general", p1)
}
/// Du kannst jetzt aktive und vergangene Umfragen gesammelt in den Raumdetails einsehen (erreichbar unter Raumdetails, im Bereich "Umfrageverlauf").
/// Abmelden ist ohne Internetverbindung nicht möglich.
public static var bwiErrorLogoutOffline: String {
return BWIL10n.tr("Bwi", "bwi_error_logout_offline")
}
/// Der Raum wurde bereits geschlossen, daher kannst Du nicht mehr beitreten.
public static var bwiErrorRoomNotAvailableMessage: String {
return BWIL10n.tr("Bwi", "bwi_error_room_not_available_message")
}
/// Link ungültig
public static var bwiErrorRoomNotAvailableTitle: String {
return BWIL10n.tr("Bwi", "bwi_error_room_not_available_title")
}
/// Neue Umfragen können vom Ersteller so konfiguriert werden, dass angezeigt wird, wer für welche Option gestimmt hat.
public static var bwiFeatureBannerAdvertisementText: String {
return BWIL10n.tr("Bwi", "bwi_feature_banner_advertisement_text")
}
@@ -967,6 +983,10 @@ public class BWIL10n: NSObject {
public static var pollEditFormCreatePoll: String {
return BWIL10n.tr("Bwi", "poll_edit_form_create_poll")
}
/// Anzeigen, wer für welche Option gestimmt hat.
public static var pollEditFormParticipantToggle: String {
return BWIL10n.tr("Bwi", "poll_edit_form_participant_toggle")
}
/// Umfragetyp
public static var pollEditFormPollType: String {
return BWIL10n.tr("Bwi", "poll_edit_form_poll_type")
@@ -979,6 +999,18 @@ public class BWIL10n: NSObject {
public static var pollEditFormPollTypeOpen: String {
return BWIL10n.tr("Bwi", "poll_edit_form_poll_type_open")
}
/// Alle ansehen (%lu weitere)
public static func pollParticipantDetailsShowMore(_ p1: Int) -> String {
return BWIL10n.tr("Bwi", "poll_participant_details_show_more", p1)
}
/// Umfragedetails
public static var pollParticipantDetailsTitle: String {
return BWIL10n.tr("Bwi", "poll_participant_details_title")
}
/// Stimmen anzeigen
public static var pollTimelineShowParticipantsButton: String {
return BWIL10n.tr("Bwi", "poll_timeline_show_participants_button")
}
/// Wiederholen
public static var retry: String {
return BWIL10n.tr("Bwi", "retry")
@@ -1067,7 +1099,7 @@ public class BWIL10n: NSObject {
public static var roomEventActionRemovePoll: String {
return BWIL10n.tr("Bwi", "room_event_action_remove_poll")
}
/// Das ist der Anfang deiner Direktnachricht mit
/// Dies ist der Beginn deiner Direktnachrichten mit
public static var roomIntroCellInformationDmSentence1Part1: String {
return BWIL10n.tr("Bwi", "room_intro_cell_information_dm_sentence1_part1")
}
@@ -1491,6 +1523,10 @@ public class BWIL10n: NSObject {
public static var settingsGroupMessages: String {
return BWIL10n.tr("Bwi", "settings_group_messages")
}
/// Impressum
public static var settingsImprint: String {
return BWIL10n.tr("Bwi", "settings_imprint")
}
/// Mentions and Keywords
public static var settingsMentionsAndKeywords: String {
return BWIL10n.tr("Bwi", "settings_mentions_and_keywords")
@@ -1687,6 +1723,10 @@ public class BWIL10n: NSObject {
public static var userSessionVerifiedSessionDescription: String {
return BWIL10n.tr("Bwi", "user_session_verified_session_description")
}
/// Sitzung verifizieren
public static var userVerificationSessionDetailsVerifyActionCurrentUser: String {
return BWIL10n.tr("Bwi", "user_verification_session_details_verify_action_current_user")
}
/// Ansehen
public static var view: String {
return BWIL10n.tr("Bwi", "view")

View File

@@ -3899,6 +3899,10 @@ public class VectorL10n: NSObject {
public static func noticeDisplayNameChangedFromByYou(_ p1: String, _ p2: String) -> String {
return VectorL10n.tr("Vector", "notice_display_name_changed_from_by_you", p1, p2)
}
/// %@ changed their display name to %@
public static func noticeDisplayNameChangedTo(_ p1: String, _ p2: String) -> String {
return VectorL10n.tr("Vector", "notice_display_name_changed_to", p1, p2)
}
/// %@ removed their display name
public static func noticeDisplayNameRemoved(_ p1: String) -> String {
return VectorL10n.tr("Vector", "notice_display_name_removed", p1)
@@ -4923,6 +4927,10 @@ public class VectorL10n: NSObject {
public static var pollTimelineEndedText: String {
return VectorL10n.tr("Vector", "poll_timeline_ended_text")
}
/// Loading...
public static var pollTimelineLoading: String {
return VectorL10n.tr("Vector", "poll_timeline_loading")
}
/// Please try again
public static var pollTimelineNotClosedSubtitle: String {
return VectorL10n.tr("Vector", "poll_timeline_not_closed_subtitle")
@@ -5211,6 +5219,58 @@ public class VectorL10n: NSObject {
public static var roomAvatarViewAccessibilityLabel: String {
return VectorL10n.tr("Vector", "room_avatar_view_accessibility_label")
}
/// Bans user with given id
public static var roomCommandBanUserDescription: String {
return VectorL10n.tr("Vector", "room_command_ban_user_description")
}
/// Changes your display nickname
public static var roomCommandChangeDisplayNameDescription: String {
return VectorL10n.tr("Vector", "room_command_change_display_name_description")
}
/// Sets the room topic
public static var roomCommandChangeRoomTopicDescription: String {
return VectorL10n.tr("Vector", "room_command_change_room_topic_description")
}
/// Forces the current outbound group session in an encrypted room to be discarded
public static var roomCommandDiscardSessionDescription: String {
return VectorL10n.tr("Vector", "room_command_discard_session_description")
}
/// Displays action
public static var roomCommandEmoteDescription: String {
return VectorL10n.tr("Vector", "room_command_emote_description")
}
/// Invalid or unhandled command
public static var roomCommandErrorUnknownCommand: String {
return VectorL10n.tr("Vector", "room_command_error_unknown_command")
}
/// Invites user with given id to current room
public static var roomCommandInviteUserDescription: String {
return VectorL10n.tr("Vector", "room_command_invite_user_description")
}
/// Joins room with given address
public static var roomCommandJoinRoomDescription: String {
return VectorL10n.tr("Vector", "room_command_join_room_description")
}
/// Removes user with given id from this room
public static var roomCommandKickUserDescription: String {
return VectorL10n.tr("Vector", "room_command_kick_user_description")
}
/// Leave room
public static var roomCommandPartRoomDescription: String {
return VectorL10n.tr("Vector", "room_command_part_room_description")
}
/// Deops user with given id
public static var roomCommandResetUserPowerLevelDescription: String {
return VectorL10n.tr("Vector", "room_command_reset_user_power_level_description")
}
/// Define the power level of a user
public static var roomCommandSetUserPowerLevelDescription: String {
return VectorL10n.tr("Vector", "room_command_set_user_power_level_description")
}
/// Unbans user with given id
public static var roomCommandUnbanUserDescription: String {
return VectorL10n.tr("Vector", "room_command_unban_user_description")
}
/// You need permission to manage conference call in this room
public static var roomConferenceCallNoPower: String {
return VectorL10n.tr("Vector", "room_conference_call_no_power")
@@ -5311,6 +5371,18 @@ public class VectorL10n: NSObject {
public static var roomCreationTitle: String {
return VectorL10n.tr("Vector", "room_creation_title")
}
/// Start DM anyway
public static var roomCreationUserNotFoundPromptInviteAction: String {
return VectorL10n.tr("Vector", "room_creation_user_not_found_prompt_invite_action")
}
/// Unable to find profiles for this Matrix ID. Would you like to start a DM anyway?
public static var roomCreationUserNotFoundPromptMessage: String {
return VectorL10n.tr("Vector", "room_creation_user_not_found_prompt_message")
}
/// Confirmation
public static var roomCreationUserNotFoundPromptTitle: String {
return VectorL10n.tr("Vector", "room_creation_user_not_found_prompt_title")
}
/// A room is already being created. Please wait.
public static var roomCreationWaitForCreation: String {
return VectorL10n.tr("Vector", "room_creation_wait_for_creation")
@@ -6315,6 +6387,10 @@ public class VectorL10n: NSObject {
public static var roomParticipantsInviteAnotherUser: String {
return VectorL10n.tr("Vector", "room_participants_invite_another_user")
}
/// Invite anyway
public static var roomParticipantsInviteAnyway: String {
return VectorL10n.tr("Vector", "room_participants_invite_anyway")
}
/// Malformed ID. Should be an email address or a Matrix ID like '@localpart:domain'
public static var roomParticipantsInviteMalformedId: String {
return VectorL10n.tr("Vector", "room_participants_invite_malformed_id")
@@ -6335,6 +6411,10 @@ public class VectorL10n: NSObject {
public static func roomParticipantsInvitePromptToMsg(_ p1: String, _ p2: String) -> String {
return VectorL10n.tr("Vector", "room_participants_invite_prompt_to_msg", p1, p2)
}
/// Unable to find profiles for this Matrix ID. Are you sure you want to invite %@ to %@?
public static func roomParticipantsInviteUnknownParticipantPromptToMsg(_ p1: String, _ p2: String) -> String {
return VectorL10n.tr("Vector", "room_participants_invite_unknown_participant_prompt_to_msg", p1, p2)
}
/// INVITED
public static var roomParticipantsInvitedSection: String {
return VectorL10n.tr("Vector", "room_participants_invited_section")
@@ -7647,18 +7727,10 @@ public class VectorL10n: NSObject {
public static var settingsLabs: String {
return VectorL10n.tr("Vector", "settings_labs")
}
/// Please be advised that as this feature is still in its experimental stage, it may not function as expected and could potentially have unintended consequences. To revert the feature, simply log out and log back in. Use at your own discretion and with caution.
public static var settingsLabsConfirmCryptoSdk: String {
return VectorL10n.tr("Vector", "settings_labs_confirm_crypto_sdk")
}
/// Create conference calls with jitsi
public static var settingsLabsCreateConferenceWithJitsi: String {
return VectorL10n.tr("Vector", "settings_labs_create_conference_with_jitsi")
}
/// Rust end-to-end encryption (log out to disable)
public static var settingsLabsDisableCryptoSdk: String {
return VectorL10n.tr("Vector", "settings_labs_disable_crypto_sdk")
}
/// End-to-End Encryption
public static var settingsLabsE2eEncryption: String {
return VectorL10n.tr("Vector", "settings_labs_e2e_encryption")
@@ -7671,10 +7743,6 @@ public class VectorL10n: NSObject {
public static var settingsLabsEnableAutoReportDecryptionErrors: String {
return VectorL10n.tr("Vector", "settings_labs_enable_auto_report_decryption_errors")
}
/// Rust end-to-end encryption
public static var settingsLabsEnableCryptoSdk: String {
return VectorL10n.tr("Vector", "settings_labs_enable_crypto_sdk")
}
/// Live location sharing - share current location (active development, and temporarily, locations persist in room history)
public static var settingsLabsEnableLiveLocationSharing: String {
return VectorL10n.tr("Vector", "settings_labs_enable_live_location_sharing")

View File

@@ -834,7 +834,7 @@ extension CallPresenter: JMCallKitListener {
}
func performAnswerCall(UUID: UUID) {
func performAnswerCall(with UUID: UUID) {
guard let widget = jitsiCalls[UUID] else {
return
}
@@ -842,7 +842,7 @@ extension CallPresenter: JMCallKitListener {
displayJitsiCall(withWidget: widget)
}
func performEndCall(UUID: UUID) {
func performEndCall(with UUID: UUID) {
guard let widget = jitsiCalls[UUID] else {
return
}
@@ -857,7 +857,7 @@ extension CallPresenter: JMCallKitListener {
}
}
func performSetMutedCall(UUID: UUID, isMuted: Bool) {
func performSetMutedCall(with UUID: UUID, isMuted: Bool) {
guard let widget = jitsiCalls[UUID] else {
return
}
@@ -868,20 +868,20 @@ extension CallPresenter: JMCallKitListener {
}
}
func performStartCall(UUID: UUID, isVideo: Bool) {
func performStartCall(with UUID: UUID, isVideo: Bool) {
}
func providerDidActivateAudioSession(sessionInfo: AVAudioSession) {
func providerDidActivateAudioSession(with session: AVAudioSession) {
}
func providerDidDeactivateAudioSession(sessionInfo: AVAudioSession) {
func providerDidDeactivateAudioSession(with session: AVAudioSession) {
}
func providerTimedOutPerformingAction(action: CXAction) {
func providerTimedOutPerformingAction(with action: CXAction) {
}
}

View File

@@ -242,7 +242,7 @@ class RiotSharedSettings: NSObject {
let toHour = calender.component(.hour, from: weekday.endTime)
let toMinute = calender.component(.minute, from: weekday.endTime)
let entry: [String: Any] = ["is_enabled": weekday.isEnabled, "from_our": fromHour, "from_minute": fromMinute, "to_hour": toHour, "to_minute": toMinute]
let entry: [String: Any] = ["is_enabled": weekday.isEnabled, "from_hour": fromHour, "from_minute": fromMinute, "to_hour": toHour, "to_minute": toMinute]
entries.append(entry)
}

View File

@@ -28,7 +28,7 @@ enum ThemeIdentifier: String, RawRepresentable {
case "dark":
self = .dark
case "black":
self = .black
self = .dark // bwi: 4744 (map previous set black theme to dark)
default:
return nil
}

View File

@@ -80,7 +80,7 @@ NSString *const kThemeServiceDidChangeThemeNotification = @"kThemeServiceDidChan
}
else if ([themeId isEqualToString:@"black"])
{
theme = [BlackTheme new];
theme = [DarkTheme new]; // bwi: 4744 (map previous set black theme to dark)
}
else
{

View File

@@ -23,5 +23,5 @@ extension ThemeService {
return nil
}
return ThemeIdentifier(rawValue: themeId)
}
}
}

View File

@@ -274,7 +274,7 @@ extension Analytics {
func trackE2EEError(_ reason: DecryptionFailureReason, context: String) {
let event = AnalyticsEvent.Error(
context: context,
cryptoModule: MXSDKOptions.sharedInstance().enableCryptoSDK ? .Rust : .Native,
cryptoModule: .Rust,
domain: .E2EE,
name: reason.errorName
)

View File

@@ -46,9 +46,6 @@ struct SentryMonitoringClient {
if let message = event.message?.formatted {
event.fingerprint = [message]
}
event.tags = [
"crypto_module": MXSDKOptions.sharedInstance().cryptoModuleId
]
MXLog.debug("[SentryMonitoringClient] Issue detected: \(event)")
return event
}

View File

@@ -34,7 +34,6 @@
#import "ContactDetailsViewController.h"
#import "BugReportViewController.h"
#import "RoomKeyRequestViewController.h"
#import "DecryptionFailureTracker.h"
#import "Tools.h"
@@ -115,11 +114,6 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
id roomKeyRequestObserver;
id roomKeyRequestCancellationObserver;
/**
If any the currently displayed sharing key dialog
*/
RoomKeyRequestViewController *roomKeyRequestViewController;
/**
Incoming key verification requests observers
*/
@@ -401,6 +395,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
}
[NSBundle mxk_setLanguage:language];
[NSBundle mxk_setFallbackLanguage:@"en"];
UIApplication.sharedApplication.accessibilityLanguage = language;
if (BuildSettings.disableRightToLeftLayout)
{
@@ -579,6 +574,15 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
// bwi: could be a system alert wait for diEnter background
self.isApplicationActiveFromSystemAlert = YES;
// bwi: make sure that the shared user defaults have the current notification times settings before the nse is called
MXSession *session = [AppDelegate theDelegate].mxSessions.firstObject;
if(session) {
RiotSharedSettings *sharedSettings = [[RiotSharedSettings alloc] initWithSession:session];
[sharedSettings fetchNotificationTimes];
[NotificationTimes storeToSharedUserDefaults];
}
}
- (void)applicationDidEnterBackground:(UIApplication *)application
@@ -796,7 +800,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
[application keyWindow].accessibilityIgnoresInvertColors = YES;
[BWIAnalytics.sharedTracker firstCall];
[BWIAnalytics.sharedTracker trackEvent:@"Session" action:@"PinLogin"];
[BWIAnalytics.sharedTracker trackEventWithCategory:@"Session" action:@"PinLogin" name:@"pin_login_default" number:nil];
self.isPinUnlocked = true;
@@ -1677,7 +1681,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
[self peekInRoomWithNavigationParameters:roomPreviewNavigationParameters pathParams:pathParams];
}
} failure:^(NSError *error) {
[self peekInRoomWithNavigationParameters:roomPreviewNavigationParameters pathParams:pathParams];
[self peekInRoomWithNavigationParameters:roomPreviewNavigationParameters pathParams:pathParams];
}];
}
@@ -1887,8 +1891,6 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
// start the call service
[self.callPresenter start];
[self.configuration setupSettingsWhenLoadedFor:mxSession];
// Register to user new device sign in notification
[self registerUserDidSignInOnNewDeviceNotificationForSession:mxSession];
@@ -1897,8 +1899,6 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
// Register to new key verification request
[self registerNewRequestNotificationForSession:mxSession];
[self checkLocalPrivateKeysInSession:mxSession];
[self.pushNotificationService checkPushKitPushersInSession:mxSession];
}
else if (mxSession.state == MXSessionStateRunning)
@@ -2126,9 +2126,6 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
// If any, disable the no VoIP support workaround
[self disableNoVoIPOnMatrixSession:mxSession];
// Disable listening of incoming key share requests
[self disableRoomKeyRequestObserver:mxSession];
// Disable listening of incoming key verification requests
[self disableIncomingKeyVerificationObserver:mxSession];
@@ -2259,7 +2256,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
[topVC startActivityIndicator];
}
[BWIAnalytics.sharedTracker trackEvent:@"Session" action:@"Logout"];
[BWIAnalytics.sharedTracker trackEventWithCategory:@"Session" action:@"Logout" name:@"logout_default" number:nil];
[BWIAnalytics.sharedTracker dispatchAll];
[self logoutSendingRequestServer:YES completion:^(BOOL isLoggedOut) {
@@ -2271,6 +2268,8 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
[BWIBuildSettings.shared reset];
[BWIAnalytics.sharedTracker resetUserdefaults];
// bwi #4573 reset chatsfilter on logout
[AllChatsLayoutSettingsManager.shared reset];
}
completion (YES);
}
@@ -2340,7 +2339,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
[topVC startActivityIndicator];
}
[BWIAnalytics.sharedTracker trackEvent:@"Session" action:@"Logout"];
[BWIAnalytics.sharedTracker trackEventWithCategory:@"Session" action:@"Logout" name:@"logout_default" number:nil];
[BWIAnalytics.sharedTracker dispatchAll];
[self logoutSendingRequestServer:YES completion:^(BOOL isLoggedOut) {
@@ -2369,9 +2368,6 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
// Clear cache
[self clearCache];
// Reset Crypto SDK configuration (labs flag for which crypto module to use)
[CryptoSDKFeature.shared reset];
// Reset key backup banner preferences
[SecureBackupBannerPreferences.shared reset];
@@ -2485,11 +2481,6 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
case MXSessionStateSyncInProgress:
// Stay in launching during the first server sync if the store is empty.
isLaunching = (mainSession.rooms.count == 0 && launchAnimationContainerView);
if (mainSession.crypto.crossSigning && mainSession.crypto.crossSigning.state == MXCrossSigningStateCrossSigningExists && [mainSession.crypto isKindOfClass:[MXLegacyCrypto class]])
{
[(MXLegacyCrypto *)mainSession.crypto setOutgoingKeyRequestsEnabled:NO onComplete:nil];
}
break;
case MXSessionStateRunning:
self.clearingCache = NO;
@@ -2549,7 +2540,6 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
// This is the time to check existing requests
MXLogDebug(@"[AppDelegate] handleAppState: Check pending verification requests");
[self checkPendingRoomKeyRequests];
[self checkPendingIncomingKeyVerificationsInSession:mainSession];
// TODO: When we will have an application state, we will do all of this in a dedicated initialisation state
@@ -2558,9 +2548,6 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
{
MXLogDebug(@"[AppDelegate] handleAppState: Set up observers for the crypto module");
// Enable listening of incoming key share requests
[self enableRoomKeyRequestObserver:mainSession];
// Enable listening of incoming key verification requests
[self enableIncomingKeyVerificationObserver:mainSession];
}
@@ -2586,33 +2573,38 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
{
MXLogDebug(@"[AppDelegate] showLaunchAnimation");
// bwi: #4905 show loading animation
UIView *launchLoadingView;
if (MXSDKOptions.sharedInstance.enableStartupProgress)
if (BWIBuildSettings.shared.showBUMLottieAnimation)
{
if (BWIBuildSettings.shared.showBUMLottieAnimation)
{
launchLoadingView = [BUMLaunchLoadingViewController makeView];
} else {
if (MXSDKOptions.sharedInstance.enableStartupProgress)
{
MXSession *mainSession = self.mxSessions.firstObject;
launchLoadingView = [LaunchLoadingView instantiateWithStartupProgress:mainSession.startupProgress];
}
else
{
launchLoadingView = [LaunchLoadingView instantiateWithStartupProgress:nil];
}
[(LaunchLoadingView *) launchLoadingView updateWithTheme:ThemeService.shared.theme];
}
launchLoadingView = [BUMLaunchLoadingViewController makeView];
launchLoadingView.frame = window.bounds;
launchLoadingView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[window addSubview:launchLoadingView];
} else {
MXSession *mainSession = self.mxSessions.firstObject;
launchLoadingView = [LaunchLoadingView instantiateWithStartupProgress:mainSession.startupProgress];
[(LaunchLoadingView *) launchLoadingView updateWithTheme:ThemeService.shared.theme];
}
launchAnimationContainerView = launchLoadingView;
launchLoadingView.frame = window.bounds;
launchLoadingView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[window addSubview:launchLoadingView];
launchAnimationContainerView = launchLoadingView;
/* bwi: 4782 - new code from nv
MXSession *mainSession = self.mxSessions.firstObject;
LaunchLoadingView *launchLoadingView = [LaunchLoadingView instantiateWithStartupProgress:mainSession.startupProgress];
launchLoadingView.frame = window.bounds;
[launchLoadingView updateWithTheme:ThemeService.shared.theme];
launchLoadingView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[window addSubview:launchLoadingView];
launchAnimationContainerView = launchLoadingView;
*/
[MXSDKOptions.sharedInstance.profiler startMeasuringTaskWithName:MXTaskProfileNameStartupLaunchScreen];
}
}
@@ -2718,38 +2710,6 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
#endif
}
- (void)checkLocalPrivateKeysInSession:(MXSession*)mxSession
{
if (![mxSession.crypto isKindOfClass:[MXLegacyCrypto class]])
{
return;
}
MXLegacyCrypto *crypto = (MXLegacyCrypto *)mxSession.crypto;
MXRecoveryService *recoveryService = mxSession.crypto.recoveryService;
NSUInteger keysCount = 0;
if ([recoveryService hasSecretWithSecretId:MXSecretId.keyBackup])
{
keysCount++;
}
if ([recoveryService hasSecretWithSecretId:MXSecretId.crossSigningUserSigning])
{
keysCount++;
}
if ([recoveryService hasSecretWithSecretId:MXSecretId.crossSigningSelfSigning])
{
keysCount++;
}
if ((keysCount > 0 && keysCount < 3)
|| (mxSession.crypto.crossSigning.canTrustCrossSigning && !mxSession.crypto.crossSigning.canCrossSign))
{
// We should have 3 of them. If not, request them again as mitigation
MXLogDebug(@"[AppDelegate] checkLocalPrivateKeysInSession: request keys because keysCount = %@", @(keysCount));
[crypto requestAllPrivateKeys];
}
}
- (void)authenticationDidComplete
{
[self handleAppState];
@@ -3663,173 +3623,6 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
}
}
#pragma mark - Incoming room key requests handling
- (void)enableRoomKeyRequestObserver:(MXSession*)mxSession
{
roomKeyRequestObserver =
[[NSNotificationCenter defaultCenter] addObserverForName:kMXCryptoRoomKeyRequestNotification
object:mxSession.crypto
queue:[NSOperationQueue mainQueue]
usingBlock:^(NSNotification *notif)
{
[self checkPendingRoomKeyRequestsInSession:mxSession];
}];
roomKeyRequestCancellationObserver =
[[NSNotificationCenter defaultCenter] addObserverForName:kMXCryptoRoomKeyRequestCancellationNotification
object:mxSession.crypto
queue:[NSOperationQueue mainQueue]
usingBlock:^(NSNotification *notif)
{
[self checkPendingRoomKeyRequestsInSession:mxSession];
}];
}
- (void)disableRoomKeyRequestObserver:(MXSession*)mxSession
{
if (roomKeyRequestObserver)
{
[[NSNotificationCenter defaultCenter] removeObserver:roomKeyRequestObserver];
roomKeyRequestObserver = nil;
}
if (roomKeyRequestCancellationObserver)
{
[[NSNotificationCenter defaultCenter] removeObserver:roomKeyRequestCancellationObserver];
roomKeyRequestCancellationObserver = nil;
}
}
// Check if a key share dialog must be displayed for the given session
- (void)checkPendingRoomKeyRequestsInSession:(MXSession*)mxSession
{
if ([UIApplication sharedApplication].applicationState != UIApplicationStateActive)
{
MXLogDebug(@"[AppDelegate] checkPendingRoomKeyRequestsInSession called while the app is not active. Ignore it.");
return;
}
if (![mxSession.crypto isKindOfClass:[MXLegacyCrypto class]])
{
MXLogDebug(@"[AppDelegate] checkPendingRoomKeyRequestsInSession: Only legacy crypto allows manually accepting/rejecting key requests");
return;
}
MXLegacyCrypto *crypto = (MXLegacyCrypto *)mxSession.crypto;
MXWeakify(self);
[crypto pendingKeyRequests:^(MXUsersDevicesMap<NSArray<MXIncomingRoomKeyRequest *> *> *pendingKeyRequests) {
MXStrongifyAndReturnIfNil(self);
MXLogDebug(@"[AppDelegate] checkPendingRoomKeyRequestsInSession: cross-signing state: %ld, pendingKeyRequests.count: %@. Already displayed: %@",
crypto.crossSigning.state,
@(pendingKeyRequests.count),
self->roomKeyRequestViewController ? @"YES" : @"NO");
if (!crypto.crossSigning || crypto.crossSigning.state == MXCrossSigningStateNotBootstrapped)
{
if (self->roomKeyRequestViewController)
{
// Check if the current RoomKeyRequestViewController is still valid
MXSession *currentMXSession = self->roomKeyRequestViewController.mxSession;
NSString *currentUser = self->roomKeyRequestViewController.device.userId;
NSString *currentDevice = self->roomKeyRequestViewController.device.deviceId;
NSArray<MXIncomingRoomKeyRequest *> *currentPendingRequest = [pendingKeyRequests objectForDevice:currentDevice forUser:currentUser];
if (currentMXSession == mxSession && currentPendingRequest.count == 0)
{
MXLogDebug(@"[AppDelegate] checkPendingRoomKeyRequestsInSession: Cancel current dialog");
// The key request has been probably cancelled, remove the popup
[self->roomKeyRequestViewController hide];
self->roomKeyRequestViewController = nil;
}
}
}
if (!self->roomKeyRequestViewController && pendingKeyRequests.count)
{
// Pick the first coming user/device pair
NSString *userId = pendingKeyRequests.userIds.firstObject;
NSString *deviceId = [pendingKeyRequests deviceIdsForUser:userId].firstObject;
// Give the client a chance to refresh the device list
MXWeakify(self);
[crypto downloadKeys:@[userId] forceDownload:NO success:^(MXUsersDevicesMap<MXDeviceInfo *> *usersDevicesInfoMap, NSDictionary<NSString *,MXCrossSigningInfo *> *crossSigningKeysMap) {
MXStrongifyAndReturnIfNil(self);
MXDeviceInfo *deviceInfo = [usersDevicesInfoMap objectForDevice:deviceId forUser:userId];
if (deviceInfo)
{
if (!crypto.crossSigning || crypto.crossSigning.state == MXCrossSigningStateNotBootstrapped)
{
BOOL wasNewDevice = (deviceInfo.trustLevel.localVerificationStatus == MXDeviceUnknown);
void (^openDialog)(void) = ^void()
{
MXLogDebug(@"[AppDelegate] checkPendingRoomKeyRequestsInSession: Open dialog for %@", deviceInfo);
self->roomKeyRequestViewController = [[RoomKeyRequestViewController alloc] initWithDeviceInfo:deviceInfo wasNewDevice:wasNewDevice andMatrixSession:mxSession crypto:crypto onComplete:^{
self->roomKeyRequestViewController = nil;
// Check next pending key request, if any
[self checkPendingRoomKeyRequests];
}];
[self->roomKeyRequestViewController show];
};
// If the device was new before, it's not any more.
if (wasNewDevice)
{
[crypto setDeviceVerification:MXDeviceUnverified forDevice:deviceId ofUser:userId success:openDialog failure:nil];
}
else
{
openDialog();
}
}
else if (deviceInfo.trustLevel.isVerified)
{
[crypto acceptAllPendingKeyRequestsFromUser:userId andDevice:deviceId onComplete:^{
[self checkPendingRoomKeyRequests];
}];
}
else
{
[crypto ignoreAllPendingKeyRequestsFromUser:userId andDevice:deviceId onComplete:^{
[self checkPendingRoomKeyRequests];
}];
}
}
else
{
MXLogDebug(@"[AppDelegate] checkPendingRoomKeyRequestsInSession: No details found for device %@:%@", userId, deviceId);
[crypto ignoreAllPendingKeyRequestsFromUser:userId andDevice:deviceId onComplete:^{
[self checkPendingRoomKeyRequests];
}];
}
} failure:^(NSError *error) {
// Retry later
MXLogDebug(@"[AppDelegate] checkPendingRoomKeyRequestsInSession: Failed to download device keys. Retry");
[self checkPendingRoomKeyRequests];
}];
}
}];
}
// Check all opened MXSessions for key share dialog
- (void)checkPendingRoomKeyRequests
{
for (MXSession *mxSession in mxSessionArray)
{
[self checkPendingRoomKeyRequestsInSession:mxSession];
}
}
#pragma mark - Incoming key verification handling
- (void)enableIncomingKeyVerificationObserver:(MXSession*)mxSession
@@ -3987,12 +3780,6 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
- (void)keyVerificationCoordinatorBridgePresenterDelegateDidComplete:(KeyVerificationCoordinatorBridgePresenter *)coordinatorBridgePresenter otherUserId:(NSString * _Nonnull)otherUserId otherDeviceId:(NSString * _Nonnull)otherDeviceId
{
id<MXCrypto> crypto = coordinatorBridgePresenter.session.crypto;
if ([crypto isKindOfClass:[MXLegacyCrypto class]] && (!crypto.backup.hasPrivateKeyInCryptoStore || !crypto.backup.enabled))
{
MXLogDebug(@"[AppDelegate][MXKeyVerification] requestAllPrivateKeys: Request key backup private keys");
[(MXLegacyCrypto *)crypto setOutgoingKeyRequestsEnabled:YES onComplete:nil];
}
[self dismissKeyVerificationCoordinatorBridgePresenter];
}

View File

@@ -635,8 +635,7 @@ final class AuthenticationCoordinator: NSObject, AuthenticationCoordinatorProtoc
loadingViewController.modalPresentationStyle = .fullScreen
navigationRouter.setRootModule(loadingViewController)
} else {
let startupProgress: MXSessionStartupProgress? = MXSDKOptions.sharedInstance().enableStartupProgress ? session?.startupProgress : nil
let loadingViewController = LaunchLoadingViewController(startupProgress: startupProgress)
let loadingViewController = LaunchLoadingViewController(startupProgress: session?.startupProgress)
loadingViewController.modalPresentationStyle = .fullScreen
// Replace the navigation stack with the loading animation
@@ -782,12 +781,6 @@ extension AuthenticationCoordinator: AuthenticationServiceDelegate {
// MARK: - KeyVerificationCoordinatorDelegate
extension AuthenticationCoordinator: KeyVerificationCoordinatorDelegate {
func keyVerificationCoordinatorDidComplete(_ coordinator: KeyVerificationCoordinatorType, otherUserId: String, otherDeviceId: String) {
if let crypto = session?.crypto as? MXLegacyCrypto, let backup = crypto.backup,
!backup.hasPrivateKeyInCryptoStore || !backup.enabled {
MXLog.debug("[AuthenticationCoordinator][MXKeyVerification] requestAllPrivateKeys: Request key backup private keys")
crypto.setOutgoingKeyRequestsEnabled(true, onComplete: nil)
}
navigationRouter.dismissModule(animated: true) { [weak self] in
self?.authenticationDidComplete()
}

View File

@@ -1320,7 +1320,14 @@ static const CGFloat kAuthInputContainerViewMinHeightConstraintConstant = 150.0;
[self saveCustomServerInputs];
// Restore default configuration
[self setHomeServerTextFieldText:self.defaultHomeServerUrl];
if (BuildSettings.forceHomeserverSelection)
{
[self setHomeServerTextFieldText:nil];
}
else
{
[self setHomeServerTextFieldText:self.defaultHomeServerUrl];
}
[self setIdentityServerTextFieldText:self.defaultIdentityServerUrl];
[self.customServersTickButton setImage:AssetImages.selectionUntick.image forState:UIControlStateNormal];

View File

@@ -121,8 +121,7 @@ final class LegacyAuthenticationCoordinator: NSObject, AuthenticationCoordinator
loadingViewController.modalPresentationStyle = .fullScreen
navigationRouter.setRootModule(loadingViewController)
} else {
let startupProgress: MXSessionStartupProgress? = MXSDKOptions.sharedInstance().enableStartupProgress ? session?.startupProgress : nil
let loadingViewController = LaunchLoadingViewController(startupProgress: startupProgress)
let loadingViewController = LaunchLoadingViewController(startupProgress: session?.startupProgress)
loadingViewController.modalPresentationStyle = .fullScreen
// Replace the navigation stack with the loading animation
@@ -236,12 +235,6 @@ extension LegacyAuthenticationCoordinator: AuthenticationViewControllerDelegate
// MARK: - KeyVerificationCoordinatorDelegate
extension LegacyAuthenticationCoordinator: KeyVerificationCoordinatorDelegate {
func keyVerificationCoordinatorDidComplete(_ coordinator: KeyVerificationCoordinatorType, otherUserId: String, otherDeviceId: String) {
if let crypto = session?.crypto as? MXLegacyCrypto, let backup = crypto.backup,
!backup.hasPrivateKeyInCryptoStore || !backup.enabled {
MXLog.debug("[LegacyAuthenticationCoordinator][MXKeyVerification] requestAllPrivateKeys: Request key backup private keys")
crypto.setOutgoingKeyRequestsEnabled(true, onComplete: nil)
}
navigationRouter.dismissModule(animated: true) { [weak self] in
self?.authenticationDidComplete()
}

View File

@@ -68,14 +68,7 @@ class SessionVerificationListener {
return
}
if session.state == .storeDataReady {
if let crypto = session.crypto as? MXLegacyCrypto {
// Do not make key share requests while the "Complete security" is not complete.
// If the device is self-verified, the SDK will restore the existing key backup.
// Then, it will re-enable outgoing key share requests
crypto.setOutgoingKeyRequestsEnabled(false, onComplete: nil)
}
} else if session.state == .running {
if session.state == .running {
unregisterSessionStateChangeNotification()
if let crypto = session.crypto {
@@ -101,7 +94,6 @@ class SessionVerificationListener {
self.completion?(.authenticationIsComplete)
} failure: { error in
MXLog.error("[SessionVerificationListener] sessionStateDidChange: Bootstrap failed", context: error)
(crypto as? MXLegacyCrypto)?.setOutgoingKeyRequestsEnabled(true, onComplete: nil)
self.completion?(.authenticationIsComplete)
}
} else {
@@ -111,12 +103,10 @@ class SessionVerificationListener {
self.completion?(.authenticationIsComplete)
} failure: { error in
MXLog.error("[SessionVerificationListener] sessionStateDidChange: Do not know how to bootstrap cross-signing. Skip it.")
(crypto as? MXLegacyCrypto)?.setOutgoingKeyRequestsEnabled(true, onComplete: nil)
self.completion?(.authenticationIsComplete)
}
}
} else {
(crypto as? MXLegacyCrypto)?.setOutgoingKeyRequestsEnabled(true, onComplete: nil)
self.completion?(.authenticationIsComplete)
}
case .crossSigningExists:
@@ -124,13 +114,10 @@ class SessionVerificationListener {
self.completion?(.needsVerification)
default:
MXLog.debug("[SessionVerificationListener] sessionStateDidChange: Nothing to do")
(crypto as? MXLegacyCrypto)?.setOutgoingKeyRequestsEnabled(true, onComplete: nil)
self.completion?(.authenticationIsComplete)
}
} failure: { [weak self] error in
MXLog.error("[SessionVerificationListener] sessionStateDidChange: Fail to refresh crypto state", context: error)
(crypto as? MXLegacyCrypto)?.setOutgoingKeyRequestsEnabled(true, onComplete: nil)
self?.completion?(.authenticationIsComplete)
}
} else {

View File

@@ -370,28 +370,16 @@ CallAudioRouteMenuViewDelegate>
{
typeof(self) self = weakSelf;
self->currentAlert = nil;
// Acknowledge the existence of all devices
[self startActivityIndicator];
if (![self.mainSession.crypto isKindOfClass:[MXLegacyCrypto class]])
// Retry the call
if (call.isIncoming)
{
MXLogFailure(@"[CallViewController] call: Only legacy crypto supports manual setting of known devices");
return;
[call answer];
}
else
{
[call callWithVideo:call.isVideoCall];
}
[(MXLegacyCrypto *)self.mainSession.crypto setDevicesKnown:unknownDevices complete:^{
[self stopActivityIndicator];
// Retry the call
if (call.isIncoming)
{
[call answer];
}
else
{
[call callWithVideo:call.isVideoCall];
}
}];
}
}]];

View File

@@ -103,6 +103,7 @@ class AvatarView: UIView, Themable {
func updateAvatarImageView(with viewData: AvatarViewDataProtocol) {
guard let avatarImageView = self.avatarImageView else {
MXLog.warning("[AvatarView] avatar not updated because avatarImageView is nil.")
return
}
@@ -120,6 +121,10 @@ class AvatarView: UIView, Themable {
let (defaultAvatarImage, defaultAvatarImageContentMode) = viewData.fallbackImageParameters() ?? (nil, .scaleAspectFill)
updateAvatarImageView(image: defaultAvatarImage, contentMode: defaultAvatarImageContentMode)
if defaultAvatarImage == nil {
MXLog.warning("[AvatarView] defaultAvatarImage is nil")
}
if let avatarUrl = viewData.avatarUrl {
avatarImageView.setImageURI(avatarUrl,
withType: nil,
@@ -129,6 +134,10 @@ class AvatarView: UIView, Themable {
previewImage: defaultAvatarImage,
mediaManager: viewData.mediaManager)
updateAvatarContentMode(contentMode: .scaleAspectFill)
if avatarImageView.frame.size.width < 8 || avatarImageView.frame.size.height < 8 {
MXLog.warning("[AvatarView] small avatarImageView frame: \(avatarImageView.frame)")
}
} else {
updateAvatarImageView(image: defaultAvatarImage, contentMode: defaultAvatarImageContentMode)
}

View File

@@ -81,7 +81,8 @@
// Manage lastEventAttributedTextMessage optional property
if (!roomCellData.roomSummary.spaceChildInfo && [roomCellData respondsToSelector:@selector(lastEventAttributedTextMessage)])
{
self.lastEventDescription.attributedText = roomCellData.lastEventAttributedTextMessage;
// Attempt to correct the attributed string colors to match the current theme
self.lastEventDescription.attributedText = [roomCellData.lastEventAttributedTextMessage fixForegroundColor];
}
else
{

View File

@@ -63,7 +63,7 @@ class RecentsInvitesTableViewCell: UITableViewCell, NibReusable, Themable {
badgeLabel.textColor = theme.colors.background
badgeLabel.font = theme.fonts.footnoteSB
titleLabel.textColor = theme.colors.accent
titleLabel.textColor = BWIBuildSettings.shared.useNewBumColors ? theme.tintColor : theme.colors.accent // bwi: 4769
}
// MARK: - Private

View File

@@ -47,7 +47,7 @@ class AllChatsFilterOptionListView: UIView, Themable {
// MARK: - Private
private let backgroundView = UIVisualEffectView(effect: UIBlurEffect(style: .regular))
private let backgroundView = UIView() // bwi: 4769
private let separator = UIView()
private let tabListView = TabListView()
@@ -90,6 +90,10 @@ class AllChatsFilterOptionListView: UIView, Themable {
// MARK: - Themable
func update(theme: Theme) {
// bwi: 4769
backgroundView.backgroundColor = ThemeService.shared().theme.backgroundColor
backgroundColor = theme.colors.background.withAlphaComponent(0.7)
tabListView.itemFont = theme.fonts.calloutSB
@@ -102,6 +106,9 @@ class AllChatsFilterOptionListView: UIView, Themable {
// MARK: - Private
private func setupView() {
// bwi: 4769
backgroundView.backgroundColor = ThemeService.shared().theme.backgroundColor
vc_addSubViewMatchingParent(backgroundView)
addSubview(separator)

View File

@@ -0,0 +1,68 @@
//
// Copyright 2023 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 Foundation
/// Object responsible for calculating user and room trust level
///
/// For legacy reasons, the trust of multiple items is represented as `Progress` object,
/// where `completedUnitCount` represents the number of trusted users / devices.
@objc class EncryptionTrustLevel: NSObject {
struct TrustSummary {
let totalCount: Int64
let trustedCount: Int64
let areAllTrusted: Bool
init(progress: Progress) {
totalCount = max(progress.totalUnitCount, progress.completedUnitCount)
trustedCount = progress.completedUnitCount
areAllTrusted = trustedCount == totalCount
}
}
/// Calculate trust level for a single user given their cross-signing info
@objc func userTrustLevel(
crossSigning: MXCrossSigningInfo?,
trustedDevicesProgress: Progress
) -> UserEncryptionTrustLevel {
let devices = TrustSummary(progress: trustedDevicesProgress)
// If we could cross-sign but we haven't, the user is simply not verified
if let crossSigning, !crossSigning.trustLevel.isVerified {
return .notVerified
// If we cannot cross-sign the user (legacy behaviour) and have not signed
// any devices manually, the user is not verified
} else if crossSigning == nil && devices.trustedCount == 0 {
return .notVerified
}
// In all other cases we check devices for trust level
return devices.areAllTrusted ? .trusted : .warning
}
/// Calculate trust level for a room given trust level of users and their devices
@objc func roomTrustLevel(summary: MXUsersTrustLevelSummary) -> RoomEncryptionTrustLevel {
let users = TrustSummary(progress: summary.trustedUsersProgress)
let devices = TrustSummary(progress: summary.trustedDevicesProgress)
guard users.totalCount > 0 && users.areAllTrusted else {
return .normal
}
return devices.areAllTrusted ? .trusted : .warning
}
}

View File

@@ -1,5 +1,5 @@
//
// Copyright 2021 New Vector Ltd
//
// Copyright 2023 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.
@@ -14,22 +14,12 @@
// limitations under the License.
//
import Foundation
enum UserSuggestionViewAction {
case selectedItem(UserSuggestionViewStateItem)
}
enum UserSuggestionViewModelResult {
case selectedItemWithIdentifier(String)
}
struct UserSuggestionViewStateItem: Identifiable {
let id: String
let avatar: AvatarInputProtocol?
let displayName: String?
}
struct UserSuggestionViewState: BindableState {
var items: [UserSuggestionViewStateItem]
}
/**
RoomEncryptionTrustLevel represents the trust level in an encrypted room.
*/
typedef NS_ENUM(NSUInteger, RoomEncryptionTrustLevel) {
RoomEncryptionTrustLevelTrusted,
RoomEncryptionTrustLevelWarning,
RoomEncryptionTrustLevelNormal,
RoomEncryptionTrustLevelUnknown
};

View File

@@ -412,17 +412,26 @@ class AllChatsCoordinator: NSObject, SplitViewMasterCoordinatorProtocol {
let avatarView = UserAvatarView(frame: view.bounds.inset(by: avatarInsets))
avatarView.isUserInteractionEnabled = false
avatarView.update(theme: ThemeService.shared().theme)
avatarView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
avatarView.autoresizingMask = [.flexibleTopMargin, .flexibleBottomMargin]
view.addSubview(avatarView)
view.bringSubviewToFront(button)
NSLayoutConstraint.activate([
view.widthAnchor.constraint(equalToConstant: 36),
view.heightAnchor.constraint(equalToConstant: 36)
])
self.avatarMenuView = avatarView
updateAvatarButtonItem()
viewController.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: view)
}
private func updateAvatarButtonItem() {
MXLog.info("[AllChatsCoordinator] updating avatar button item.")
if let avatar = userAvatarViewData(from: currentMatrixSession) {
if avatarMenuView == nil {
MXLog.warning("[AllChatsCoordinator] updateAvatarButtonItem: avatarMenuView is nil.")
}
avatarMenuView?.fill(with: avatar)
avatarMenuButton?.setImage(nil, for: .normal)
} else {

View File

@@ -51,6 +51,11 @@ final class AllChatsLayoutSettingsManager: NSObject {
// MARK: - Public
// bwi #4573 reset filters for logout
@objc func reset() {
activeFilters = .all
}
var activeFilters: AllChatsLayoutFilterType {
get {
guard let value = RiotSettings.defaults.object(forKey: Constants.activeFiltersKey) as? NSNumber else {

View File

@@ -137,7 +137,13 @@ class AllChatsViewController: HomeViewController {
emptyViewBottomAnchor = toolbar.topAnchor
// bwi: 4179
toolbar.tintColor = ThemeService.shared().theme.tintColor
if BWIBuildSettings.shared.useNewBumColors { // bwi: #4883
toolbar.tintColor = ThemeService.shared().theme.tintColor
toolbar.barTintColor = ThemeService.shared().theme.backgroundColor
} else {
toolbar.tintColor = theme.colors.accent
}
updateUI()
@@ -150,12 +156,22 @@ class AllChatsViewController: HomeViewController {
NotificationCenter.default.addObserver(self, selector: #selector(self.setupEditOptions), name: AllChatsLayoutSettingsManager.didUpdateSettings, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.updateBadgeButton), name: MXSpaceNotificationCounter.didUpdateNotificationCount, object: nil)
// bwi: 4769
self.registerThemeServiceDidChangeThemeNotification()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.toolbar.tintColor = theme.colors.accent
// bwi: 4769
if BWIBuildSettings.shared.useNewBumColors {
self.toolbar.tintColor = theme.tintColor
self.toolbar.barTintColor = theme.backgroundColor
} else {
self.toolbar.tintColor = theme.colors.accent
}
if self.navigationItem.searchController == nil {
self.navigationItem.searchController = searchController
}
@@ -205,6 +221,17 @@ class AllChatsViewController: HomeViewController {
}
}
// bwi: 4769
private func registerThemeServiceDidChangeThemeNotification() {
NotificationCenter.default.addObserver(self, selector: #selector(themeDidChange), name: .themeServiceDidChangeTheme, object: nil)
}
// bwi: 4769
@objc private func themeDidChange() {
self.update(with: ThemeService.shared().theme)
}
// MARK: - Public
func switchSpace(withId spaceId: String?) {
@@ -316,15 +343,10 @@ class AllChatsViewController: HomeViewController {
alert.addAction(UIAlertAction(title: BWIL10n.bwiAnalyticsAlertInfoButton,
style: .default,
handler: { [self] action in
if let webViewController = WebViewViewController(url: BWIBuildSettings.shared.applicationPrivacyPolicyWithMatomoSectionUrlString) {
navigationBar = UINavigationController(rootViewController: webViewController)
webViewController.navigationItem.setLeftBarButton(UIBarButtonItem(title: VectorL10n.close, style: .plain, target: self, action: #selector(self.bwiCloseModal)), animated: false)
webViewController.title = VectorL10n.settingsPrivacyPolicy
navigationBar?.presentationController?.delegate = self
if let url = URL(string: BWIBuildSettings.shared.applicationPrivacyPolicyWithMatomoSectionUrlString) {
UIApplication.shared.open(url)
}
showMatomoConsentAlertOnCloseModal = true
present(navigationBar ?? webViewController, animated: true, completion: nil)
}
}))
alert.addAction(UIAlertAction(title: BWIL10n.bwiAnalyticsAlertCancelButton,
@@ -544,7 +566,16 @@ class AllChatsViewController: HomeViewController {
}
private func update(with theme: Theme) {
self.navigationController?.toolbar?.tintColor = theme.colors.accent
// bwi: 4769
if BWIBuildSettings.shared.useNewBumColors {
toolbar.tintColor = ThemeService.shared().theme.tintColor
toolbar.barTintColor = ThemeService.shared().theme.backgroundColor
UIToolbar.appearance().tintColor = ThemeService.shared().theme.tintColor
UIToolbar.appearance().barTintColor = ThemeService.shared().theme.backgroundColor
} else {
self.navigationController?.toolbar?.tintColor = theme.colors.accent
}
}
// MARK: - Private
@@ -628,8 +659,8 @@ class AllChatsViewController: HomeViewController {
// bwi: 4179
var allChatsEditButton = UIBarButtonItem(image: Asset.Images.allChatsEditIcon.image, menu: menu)
allChatsEditButton.tintColor = ThemeService.shared().theme.tintColor
allChatsEditButton.tintColor = ThemeService.shared().theme.tintColor // bwi: #4883
if BWIBuildSettings.shared.enableSpaces {
self.toolbar.items = [
spacesButton,
@@ -1090,8 +1121,7 @@ extension AllChatsViewController: SplitViewMasterViewControllerProtocol {
let title: String
let message: String
if let feature = MXSDKOptions.sharedInstance().cryptoSDKFeature,
feature.isEnabled && feature.needsVerificationUpgrade {
if MXSDKOptions.sharedInstance().cryptoMigrationDelegate?.needsVerificationUpgrade == true {
title = VectorL10n.keyVerificationSelfVerifySecurityUpgradeAlertTitle
message = VectorL10n.keyVerificationSelfVerifySecurityUpgradeAlertMessage
} else {

View File

@@ -35,6 +35,7 @@ static NSString * _Nonnull kRCTTextViewClassName = @"RCTTextView";
Some feature flags defined in https://github.com/jitsi/jitsi-meet/blob/master/react/features/base/flags/constants.js
*/
static NSString * _Nonnull kJitsiFeatureFlagChatEnabled = @"chat.enabled";
static NSString * _Nonnull kJitsiFeatureFlagScreenSharingEnabled = @"ios.screensharing.enabled";
@interface JitsiViewController () <PictureInPicturable, JitsiMeetViewDelegate>
@@ -278,6 +279,7 @@ static NSString * _Nonnull kJitsiFeatureFlagChatEnabled = @"chat.enabled";
andAvatar:avatarUrl];
builder.token = self.jwtToken;
[builder setFeatureFlag:kJitsiFeatureFlagChatEnabled withBoolean:NO];
[builder setFeatureFlag:kJitsiFeatureFlagScreenSharingEnabled withBoolean: YES];
}];
[self.jitsiMeetView join:jitsiMeetConferenceOptions];

View File

@@ -137,7 +137,7 @@ final class KeyVerificationCoordinator: KeyVerificationCoordinatorType {
case .incomingSASTransaction(let incomingSASTransaction):
rootCoordinator = self.createDataLoadingScreenCoordinator(otherUserId: incomingSASTransaction.otherUserId, otherDeviceId: incomingSASTransaction.otherDeviceId)
case .completeSecurity(let isNewSignIn):
if BWIBuildSettings.shared.disableSelfUserVerification {
if BWIBuildSettings.shared.disableCrosssigning {
let coordinator = self.createSecretsRecoveryCoordinator(with: .passphraseOrKey)
rootCoordinator = coordinator
} else {

View File

@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="21507" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="dBQ-CG-VDL">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="dBQ-CG-VDL">
<device id="retina4_7" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21505"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
@@ -17,7 +17,7 @@
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jOh-c7-uod">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<rect key="frame" x="0.0" y="20" width="375" height="647"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="c4q-B8-hPy">
<rect key="frame" x="0.0" y="0.0" width="375" height="358"/>
@@ -51,7 +51,7 @@
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<inset key="contentEdgeInsets" minX="10" minY="0.0" maxX="10" maxY="0.0"/>
<state key="normal" title="Got it">
<state key="normal" title=" ">
<color key="titleColor" red="0.01176470588" green="0.70196078429999997" blue="0.50588235290000005" alpha="1" colorSpace="calibratedRGB"/>
</state>
<connections>

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