diff --git a/apps/ios/Shared/ContentView.swift b/apps/ios/Shared/ContentView.swift
index 3198a3d361..65631954e5 100644
--- a/apps/ios/Shared/ContentView.swift
+++ b/apps/ios/Shared/ContentView.swift
@@ -317,6 +317,12 @@ struct ContentView: View {
.onContinueUserActivity("INStartCallIntent", perform: processUserActivity)
.onContinueUserActivity("INStartAudioCallIntent", perform: processUserActivity)
.onContinueUserActivity("INStartVideoCallIntent", perform: processUserActivity)
+ .onContinueUserActivity(NSUserActivityTypeBrowsingWeb) { userActivity in
+ if let url = userActivity.webpageURL {
+ logger.debug("onContinueUserActivity.NSUserActivityTypeBrowsingWeb: \(url)")
+ chatModel.appOpenUrl = url
+ }
+ }
}
private func setConditionsNotified_() async {
diff --git a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff
index 04dd78337f..396232e038 100644
--- a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff
+++ b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff
@@ -823,6 +823,10 @@
Всички профилиprofile dropdown
+
+ All reports will be archived for you.
+ No comment provided by engineer.
+ All your contacts will remain connected.Всички ваши контакти ще останат свързани.
@@ -898,6 +902,10 @@
Позволи необратимо изтриване на изпратените съобщения. (24 часа)No comment provided by engineer.
+
+ Allow to report messsages to moderators.
+ No comment provided by engineer.
+ Allow to send SimpleX links.Разрешаване на изпращане на SimpleX линкове.
@@ -1060,6 +1068,14 @@
ArchiveNo comment provided by engineer.
+
+ Archive %lld reports?
+ No comment provided by engineer.
+
+
+ Archive all reports?
+ No comment provided by engineer.
+ Archive and uploadАрхивиране и качване
@@ -1078,6 +1094,10 @@
Archive report?No comment provided by engineer.
+
+ Archive reports
+ swipe action
+ Archived contactsАрхивирани контакти
@@ -1615,6 +1635,10 @@
Изчисти разговора?No comment provided by engineer.
+
+ Clear group?
+ No comment provided by engineer.
+ Clear or delete group?No comment provided by engineer.
@@ -3576,6 +3600,10 @@ This is your own one-time link!
Поправката не се поддържа от члена на групатаNo comment provided by engineer.
+
+ For all moderators
+ No comment provided by engineer.
+ For chat profile %@:servers error
@@ -3589,6 +3617,10 @@ This is your own one-time link!
For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server.No comment provided by engineer.
+
+ For me
+ No comment provided by engineer.
+ For private routingNo comment provided by engineer.
@@ -4497,6 +4529,10 @@ This is your link for group %@!
Member inactiveitem status text
+
+ Member reports
+ chat feature
+ Member role will be changed to "%@". All chat members will be notified.No comment provided by engineer.
@@ -4530,6 +4566,10 @@ This is your link for group %@!
Членовете на групата могат необратимо да изтриват изпратените съобщения. (24 часа)No comment provided by engineer.
+
+ Members can report messsages to moderators.
+ No comment provided by engineer.
+ Members can send SimpleX links.Членовете на групата могат да изпращат SimpleX линкове.
@@ -5638,6 +5678,10 @@ Error: %@
Забрани реакциите на съобщенията.No comment provided by engineer.
+
+ Prohibit reporting messages to moderators.
+ No comment provided by engineer.
+ Prohibit sending SimpleX links.Забранете изпращането на SimpleX линкове.
@@ -6018,6 +6062,14 @@ Enable in *Network & servers* settings.
Report violation: only group moderators will see it.report reason
+
+ Report: (text.isEmpty ? reason.text : text)
+ report in notification
+
+
+ Reporting messages to moderators is prohibited.
+ No comment provided by engineer.
+ ReportsNo comment provided by engineer.
@@ -7271,10 +7323,6 @@ It can happen because of some bug or when the connection is compromised.Профилът се споделя само с вашите контакти.
No comment provided by engineer.
-
- The report will be archived for you.
- No comment provided by engineer.
- The same conditions will apply to operator **%@**.No comment provided by engineer.
diff --git a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff
index 9b3a40e012..1f417ad85a 100644
--- a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff
+++ b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff
@@ -788,6 +788,10 @@
All profilesprofile dropdown
+
+ All reports will be archived for you.
+ No comment provided by engineer.
+ All your contacts will remain connected.Všechny vaše kontakty zůstanou připojeny.
@@ -859,6 +863,10 @@
Povolit nevratné smazání odeslaných zpráv. (24 hodin)No comment provided by engineer.
+
+ Allow to report messsages to moderators.
+ No comment provided by engineer.
+ Allow to send SimpleX links.No comment provided by engineer.
@@ -1013,6 +1021,14 @@
ArchiveNo comment provided by engineer.
+
+ Archive %lld reports?
+ No comment provided by engineer.
+
+
+ Archive all reports?
+ No comment provided by engineer.
+ Archive and uploadNo comment provided by engineer.
@@ -1029,6 +1045,10 @@
Archive report?No comment provided by engineer.
+
+ Archive reports
+ swipe action
+ Archived contactsNo comment provided by engineer.
@@ -1531,6 +1551,10 @@
Vyčistit konverzaci?No comment provided by engineer.
+
+ Clear group?
+ No comment provided by engineer.
+ Clear or delete group?No comment provided by engineer.
@@ -3430,6 +3454,10 @@ This is your own one-time link!
Opravit nepodporované členem skupinyNo comment provided by engineer.
+
+ For all moderators
+ No comment provided by engineer.
+ For chat profile %@:servers error
@@ -3443,6 +3471,10 @@ This is your own one-time link!
For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server.No comment provided by engineer.
+
+ For me
+ No comment provided by engineer.
+ For private routingNo comment provided by engineer.
@@ -4317,6 +4349,10 @@ This is your link for group %@!
Member inactiveitem status text
+
+ Member reports
+ chat feature
+ Member role will be changed to "%@". All chat members will be notified.No comment provided by engineer.
@@ -4350,6 +4386,10 @@ This is your link for group %@!
Členové skupiny mohou nevratně mazat odeslané zprávy. (24 hodin)No comment provided by engineer.
+
+ Members can report messsages to moderators.
+ No comment provided by engineer.
+ Members can send SimpleX links.No comment provided by engineer.
@@ -5420,6 +5460,10 @@ Error: %@
Zakázat reakce na zprávy.No comment provided by engineer.
+
+ Prohibit reporting messages to moderators.
+ No comment provided by engineer.
+ Prohibit sending SimpleX links.No comment provided by engineer.
@@ -5789,6 +5833,14 @@ Enable in *Network & servers* settings.
Report violation: only group moderators will see it.report reason
+
+ Report: (text.isEmpty ? reason.text : text)
+ report in notification
+
+
+ Reporting messages to moderators is prohibited.
+ No comment provided by engineer.
+ ReportsNo comment provided by engineer.
@@ -7018,10 +7070,6 @@ Může se to stát kvůli nějaké chybě, nebo pokud je spojení kompromitován
Profil je sdílen pouze s vašimi kontakty.No comment provided by engineer.
-
- The report will be archived for you.
- No comment provided by engineer.
- The same conditions will apply to operator **%@**.No comment provided by engineer.
diff --git a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff
index f0f1bf84ef..9ab9b2a818 100644
--- a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff
+++ b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff
@@ -840,6 +840,10 @@
Alle Profileprofile dropdown
+
+ All reports will be archived for you.
+ No comment provided by engineer.
+ All your contacts will remain connected.Alle Ihre Kontakte bleiben verbunden.
@@ -915,6 +919,10 @@
Unwiederbringliches löschen von gesendeten Nachrichten erlauben. (24 Stunden)No comment provided by engineer.
+
+ Allow to report messsages to moderators.
+ No comment provided by engineer.
+ Allow to send SimpleX links.Das Senden von SimpleX-Links erlauben.
@@ -1080,6 +1088,14 @@
ArchivNo comment provided by engineer.
+
+ Archive %lld reports?
+ No comment provided by engineer.
+
+
+ Archive all reports?
+ No comment provided by engineer.
+ Archive and uploadArchivieren und Hochladen
@@ -1100,6 +1116,10 @@
Meldung archivieren?No comment provided by engineer.
+
+ Archive reports
+ swipe action
+ Archived contactsArchivierte Kontakte
@@ -1657,6 +1677,10 @@
Chat-Inhalte entfernen?No comment provided by engineer.
+
+ Clear group?
+ No comment provided by engineer.
+ Clear or delete group?Gruppe entfernen oder löschen?
@@ -3732,6 +3756,10 @@ Das ist Ihr eigener Einmal-Link!
Reparatur wird vom Gruppenmitglied nicht unterstütztNo comment provided by engineer.
+
+ For all moderators
+ No comment provided by engineer.
+ For chat profile %@:Für das Chat-Profil %@:
@@ -3747,6 +3775,10 @@ Das ist Ihr eigener Einmal-Link!
Wenn Ihr Kontakt beispielsweise Nachrichten über einen SimpleX-Chatserver empfängt, wird Ihre App diese über einen der Server von Flux versenden.No comment provided by engineer.
+
+ For me
+ No comment provided by engineer.
+ For private routingFür privates Routing
@@ -4693,6 +4725,10 @@ Das ist Ihr Link für die Gruppe %@!
Mitglied inaktivitem status text
+
+ Member reports
+ chat feature
+ Member role will be changed to "%@". All chat members will be notified.Die Rolle des Mitglieds wird auf "%@" geändert. Alle Chat-Mitglieder werden darüber informiert.
@@ -4728,6 +4764,10 @@ Das ist Ihr Link für die Gruppe %@!
Gruppenmitglieder können gesendete Nachrichten unwiederbringlich löschen. (24 Stunden)No comment provided by engineer.
+
+ Members can report messsages to moderators.
+ No comment provided by engineer.
+ Members can send SimpleX links.Gruppenmitglieder können SimpleX-Links versenden.
@@ -5909,6 +5949,10 @@ Fehler: %@
Reaktionen auf Nachrichten nicht erlauben.No comment provided by engineer.
+
+ Prohibit reporting messages to moderators.
+ No comment provided by engineer.
+ Prohibit sending SimpleX links.Das Senden von SimpleX-Links nicht erlauben.
@@ -6314,6 +6358,14 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen.
Verstoß melden: Nur Gruppenmoderatoren werden es sehen.report reason
+
+ Report: (text.isEmpty ? reason.text : text)
+ report in notification
+
+
+ Reporting messages to moderators is prohibited.
+ No comment provided by engineer.
+ ReportsMeldungen
@@ -7654,11 +7706,6 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro
Das Profil wird nur mit Ihren Kontakten geteilt.No comment provided by engineer.
-
- The report will be archived for you.
- Die Meldung wird für Sie archiviert.
- No comment provided by engineer.
- The same conditions will apply to operator **%@**.Dieselben Nutzungsbedingungen gelten auch für den Betreiber **%@**.
diff --git a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff
index 22d61004ca..f1edf1e8cd 100644
--- a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff
+++ b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff
@@ -843,6 +843,11 @@
All profilesprofile dropdown
+
+ All reports will be archived for you.
+ All reports will be archived for you.
+ No comment provided by engineer.
+ All your contacts will remain connected.All your contacts will remain connected.
@@ -918,6 +923,11 @@
Allow to irreversibly delete sent messages. (24 hours)No comment provided by engineer.
+
+ Allow to report messsages to moderators.
+ Allow to report messsages to moderators.
+ No comment provided by engineer.
+ Allow to send SimpleX links.Allow to send SimpleX links.
@@ -1083,6 +1093,16 @@
ArchiveNo comment provided by engineer.
+
+ Archive %lld reports?
+ Archive %lld reports?
+ No comment provided by engineer.
+
+
+ Archive all reports?
+ Archive all reports?
+ No comment provided by engineer.
+ Archive and uploadArchive and upload
@@ -1103,6 +1123,11 @@
Archive report?No comment provided by engineer.
+
+ Archive reports
+ Archive reports
+ swipe action
+ Archived contactsArchived contacts
@@ -1660,6 +1685,11 @@
Clear conversation?No comment provided by engineer.
+
+ Clear group?
+ Clear group?
+ No comment provided by engineer.
+ Clear or delete group?Clear or delete group?
@@ -3740,6 +3770,11 @@ This is your own one-time link!
Fix not supported by group memberNo comment provided by engineer.
+
+ For all moderators
+ For all moderators
+ No comment provided by engineer.
+ For chat profile %@:For chat profile %@:
@@ -3755,6 +3790,11 @@ This is your own one-time link!
For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server.No comment provided by engineer.
+
+ For me
+ For me
+ No comment provided by engineer.
+ For private routingFor private routing
@@ -4706,6 +4746,11 @@ This is your link for group %@!
Member inactiveitem status text
+
+ Member reports
+ Member reports
+ chat feature
+ Member role will be changed to "%@". All chat members will be notified.Member role will be changed to "%@". All chat members will be notified.
@@ -4741,6 +4786,11 @@ This is your link for group %@!
Members can irreversibly delete sent messages. (24 hours)No comment provided by engineer.
+
+ Members can report messsages to moderators.
+ Members can report messsages to moderators.
+ No comment provided by engineer.
+ Members can send SimpleX links.Members can send SimpleX links.
@@ -5930,6 +5980,11 @@ Error: %@
Prohibit messages reactions.No comment provided by engineer.
+
+ Prohibit reporting messages to moderators.
+ Prohibit reporting messages to moderators.
+ No comment provided by engineer.
+ Prohibit sending SimpleX links.Prohibit sending SimpleX links.
@@ -6338,6 +6393,16 @@ Enable in *Network & servers* settings.
Report violation: only group moderators will see it.report reason
+
+ Report: (text.isEmpty ? reason.text : text)
+ Report: (text.isEmpty ? reason.text : text)
+ report in notification
+
+
+ Reporting messages to moderators is prohibited.
+ Reporting messages to moderators is prohibited.
+ No comment provided by engineer.
+ ReportsReports
@@ -7680,11 +7745,6 @@ It can happen because of some bug or when the connection is compromised.The profile is only shared with your contacts.
No comment provided by engineer.
-
- The report will be archived for you.
- The report will be archived for you.
- No comment provided by engineer.
- The same conditions will apply to operator **%@**.The same conditions will apply to operator **%@**.
diff --git a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff
index 86043e9fcf..968dd52f13 100644
--- a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff
+++ b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff
@@ -840,6 +840,10 @@
Todos los perfilesprofile dropdown
+
+ All reports will be archived for you.
+ No comment provided by engineer.
+ All your contacts will remain connected.Todos tus contactos permanecerán conectados.
@@ -915,6 +919,10 @@
Se permite la eliminación irreversible de mensajes. (24 horas)No comment provided by engineer.
+
+ Allow to report messsages to moderators.
+ No comment provided by engineer.
+ Allow to send SimpleX links.Se permite enviar enlaces SimpleX.
@@ -1080,6 +1088,14 @@
ArchivarNo comment provided by engineer.
+
+ Archive %lld reports?
+ No comment provided by engineer.
+
+
+ Archive all reports?
+ No comment provided by engineer.
+ Archive and uploadArchivar y subir
@@ -1100,6 +1116,10 @@
¿Archivar informe?No comment provided by engineer.
+
+ Archive reports
+ swipe action
+ Archived contactsContactos archivados
@@ -1657,6 +1677,10 @@
¿Vaciar conversación?No comment provided by engineer.
+
+ Clear group?
+ No comment provided by engineer.
+ Clear or delete group?¿Vaciar o eliminar grupo?
@@ -3732,6 +3756,10 @@ This is your own one-time link!
Corrección no compatible con miembro del grupoNo comment provided by engineer.
+
+ For all moderators
+ No comment provided by engineer.
+ For chat profile %@:Para el perfil de chat %@:
@@ -3747,6 +3775,10 @@ This is your own one-time link!
Si por ejemplo tu contacto recibe los mensajes a través de un servidor de SimpleX Chat, tu aplicación los entregará a través de un servidor de Flux.No comment provided by engineer.
+
+ For me
+ No comment provided by engineer.
+ For private routingPara enrutamiento privado
@@ -4693,6 +4725,10 @@ This is your link for group %@!
Miembro inactivoitem status text
+
+ Member reports
+ chat feature
+ Member role will be changed to "%@". All chat members will be notified.El rol del miembro cambiará a "%@" y todos serán notificados.
@@ -4728,6 +4764,10 @@ This is your link for group %@!
Los miembros del grupo pueden eliminar mensajes de forma irreversible. (24 horas)No comment provided by engineer.
+
+ Members can report messsages to moderators.
+ No comment provided by engineer.
+ Members can send SimpleX links.Los miembros del grupo pueden enviar enlaces SimpleX.
@@ -5909,6 +5949,10 @@ Error: %@
No se permiten reacciones a los mensajes.No comment provided by engineer.
+
+ Prohibit reporting messages to moderators.
+ No comment provided by engineer.
+ Prohibit sending SimpleX links.No se permite enviar enlaces SimpleX.
@@ -6314,6 +6358,14 @@ Actívalo en ajustes de *Servidores y Redes*.
Informar de violación: sólo los moderadores del grupo lo verán.report reason
+
+ Report: (text.isEmpty ? reason.text : text)
+ report in notification
+
+
+ Reporting messages to moderators is prohibited.
+ No comment provided by engineer.
+ ReportsInformes
@@ -7654,11 +7706,6 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida.
El perfil sólo se comparte con tus contactos.No comment provided by engineer.
-
- The report will be archived for you.
- El informe será archivado para ti.
- No comment provided by engineer.
- The same conditions will apply to operator **%@**.Las mismas condiciones se aplicarán al operador **%@**.
diff --git a/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff b/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff
index 2a4c3fb9ff..e8113a5553 100644
--- a/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff
+++ b/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff
@@ -775,6 +775,10 @@
All profilesprofile dropdown
+
+ All reports will be archived for you.
+ No comment provided by engineer.
+ All your contacts will remain connected.Kaikki kontaktisi pysyvät yhteydessä.
@@ -846,6 +850,10 @@
Salli lähetettyjen viestien peruuttamaton poistaminen. (24 tuntia)No comment provided by engineer.
+
+ Allow to report messsages to moderators.
+ No comment provided by engineer.
+ Allow to send SimpleX links.No comment provided by engineer.
@@ -999,6 +1007,14 @@
ArchiveNo comment provided by engineer.
+
+ Archive %lld reports?
+ No comment provided by engineer.
+
+
+ Archive all reports?
+ No comment provided by engineer.
+ Archive and uploadNo comment provided by engineer.
@@ -1015,6 +1031,10 @@
Archive report?No comment provided by engineer.
+
+ Archive reports
+ swipe action
+ Archived contactsNo comment provided by engineer.
@@ -1516,6 +1536,10 @@
Tyhjennä keskustelu?No comment provided by engineer.
+
+ Clear group?
+ No comment provided by engineer.
+ Clear or delete group?No comment provided by engineer.
@@ -3412,6 +3436,10 @@ This is your own one-time link!
Ryhmän jäsen ei tue korjaustaNo comment provided by engineer.
+
+ For all moderators
+ No comment provided by engineer.
+ For chat profile %@:servers error
@@ -3425,6 +3453,10 @@ This is your own one-time link!
For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server.No comment provided by engineer.
+
+ For me
+ No comment provided by engineer.
+ For private routingNo comment provided by engineer.
@@ -4299,6 +4331,10 @@ This is your link for group %@!
Member inactiveitem status text
+
+ Member reports
+ chat feature
+ Member role will be changed to "%@". All chat members will be notified.No comment provided by engineer.
@@ -4332,6 +4368,10 @@ This is your link for group %@!
Ryhmän jäsenet voivat poistaa lähetetyt viestit peruuttamattomasti. (24 tuntia)No comment provided by engineer.
+
+ Members can report messsages to moderators.
+ No comment provided by engineer.
+ Members can send SimpleX links.No comment provided by engineer.
@@ -5400,6 +5440,10 @@ Error: %@
Estä viestireaktiot.No comment provided by engineer.
+
+ Prohibit reporting messages to moderators.
+ No comment provided by engineer.
+ Prohibit sending SimpleX links.No comment provided by engineer.
@@ -5769,6 +5813,14 @@ Enable in *Network & servers* settings.
Report violation: only group moderators will see it.report reason
+
+ Report: (text.isEmpty ? reason.text : text)
+ report in notification
+
+
+ Reporting messages to moderators is prohibited.
+ No comment provided by engineer.
+ ReportsNo comment provided by engineer.
@@ -6996,10 +7048,6 @@ Tämä voi johtua jostain virheestä tai siitä, että yhteys on vaarantunut.Profiili jaetaan vain kontaktiesi kanssa.
No comment provided by engineer.
-
- The report will be archived for you.
- No comment provided by engineer.
- The same conditions will apply to operator **%@**.No comment provided by engineer.
diff --git a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff
index c030ccf98b..0c9a87126e 100644
--- a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff
+++ b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff
@@ -833,6 +833,10 @@
Tous les profilesprofile dropdown
+
+ All reports will be archived for you.
+ No comment provided by engineer.
+ All your contacts will remain connected.Tous vos contacts resteront connectés.
@@ -908,6 +912,10 @@
Autoriser la suppression irréversible de messages envoyés. (24 heures)No comment provided by engineer.
+
+ Allow to report messsages to moderators.
+ No comment provided by engineer.
+ Allow to send SimpleX links.Autorise l'envoi de liens SimpleX.
@@ -1070,6 +1078,14 @@
ArchiveNo comment provided by engineer.
+
+ Archive %lld reports?
+ No comment provided by engineer.
+
+
+ Archive all reports?
+ No comment provided by engineer.
+ Archive and uploadArchiver et téléverser
@@ -1088,6 +1104,10 @@
Archive report?No comment provided by engineer.
+
+ Archive reports
+ swipe action
+ Archived contactsContacts archivés
@@ -1642,6 +1662,10 @@
Effacer la conversation ?No comment provided by engineer.
+
+ Clear group?
+ No comment provided by engineer.
+ Clear or delete group?No comment provided by engineer.
@@ -3693,6 +3717,10 @@ Il s'agit de votre propre lien unique !
Correction non prise en charge par un membre du groupeNo comment provided by engineer.
+
+ For all moderators
+ No comment provided by engineer.
+ For chat profile %@:Pour le profil de discussion %@ :
@@ -3708,6 +3736,10 @@ Il s'agit de votre propre lien unique !
Par exemple, si votre contact reçoit des messages via un serveur SimpleX Chat, votre application les transmettra via un serveur Flux.No comment provided by engineer.
+
+ For me
+ No comment provided by engineer.
+ For private routingPour le routage privé
@@ -4647,6 +4679,10 @@ Voici votre lien pour le groupe %@ !
Membre inactifitem status text
+
+ Member reports
+ chat feature
+ Member role will be changed to "%@". All chat members will be notified.Le rôle du membre sera modifié pour « %@ ». Tous les membres du chat seront notifiés.
@@ -4682,6 +4718,10 @@ Voici votre lien pour le groupe %@ !
Les membres du groupe peuvent supprimer de manière irréversible les messages envoyés. (24 heures)No comment provided by engineer.
+
+ Members can report messsages to moderators.
+ No comment provided by engineer.
+ Members can send SimpleX links.Les membres du groupe peuvent envoyer des liens SimpleX.
@@ -5851,6 +5891,10 @@ Erreur : %@
Interdire les réactions aux messages.No comment provided by engineer.
+
+ Prohibit reporting messages to moderators.
+ No comment provided by engineer.
+ Prohibit sending SimpleX links.Interdire l'envoi de liens SimpleX.
@@ -6249,6 +6293,14 @@ Activez-le dans les paramètres *Réseau et serveurs*.
Report violation: only group moderators will see it.report reason
+
+ Report: (text.isEmpty ? reason.text : text)
+ report in notification
+
+
+ Reporting messages to moderators is prohibited.
+ No comment provided by engineer.
+ ReportsNo comment provided by engineer.
@@ -7584,10 +7636,6 @@ Cela peut se produire en raison d'un bug ou lorsque la connexion est compromise.
Le profil n'est partagé qu'avec vos contacts.No comment provided by engineer.
-
- The report will be archived for you.
- No comment provided by engineer.
- The same conditions will apply to operator **%@**.Les mêmes conditions s'appliquent à l'opérateur **%@**.
diff --git a/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff b/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff
index 5b212638e7..14746bfb92 100644
--- a/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff
+++ b/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff
@@ -840,6 +840,10 @@
Összes profilprofile dropdown
+
+ All reports will be archived for you.
+ No comment provided by engineer.
+ All your contacts will remain connected.Az összes ismerősével kapcsolatban marad.
@@ -915,6 +919,10 @@
Elküldött üzenetek végleges törlésének engedélyezése. (24 óra)No comment provided by engineer.
+
+ Allow to report messsages to moderators.
+ No comment provided by engineer.
+ Allow to send SimpleX links.A SimpleX-hivatkozások küldése engedélyezve van.
@@ -1080,6 +1088,14 @@
ArchívumNo comment provided by engineer.
+
+ Archive %lld reports?
+ No comment provided by engineer.
+
+
+ Archive all reports?
+ No comment provided by engineer.
+ Archive and uploadArchiválás és feltöltés
@@ -1100,6 +1116,10 @@
Jelentés archiválása?No comment provided by engineer.
+
+ Archive reports
+ swipe action
+ Archived contactsArchivált ismerősök
@@ -1657,6 +1677,10 @@
Üzenetek kiürítése?No comment provided by engineer.
+
+ Clear group?
+ No comment provided by engineer.
+ Clear or delete group?Csoport kiürítése vagy törlése?
@@ -3732,6 +3756,10 @@ Ez az Ön egyszer használható meghívó-hivatkozása!
Csoporttag általi javítás nem támogatottNo comment provided by engineer.
+
+ For all moderators
+ No comment provided by engineer.
+ For chat profile %@:A(z) %@ nevű csevegési profilhoz:
@@ -3747,6 +3775,10 @@ Ez az Ön egyszer használható meghívó-hivatkozása!
Például, ha az Ön ismerőse egy SimpleX Chat-kiszolgálón keresztül fogadja az üzeneteket, az Ön alkalmazása egy Flux-kiszolgálón keresztül fogja azokat kézbesíteni.No comment provided by engineer.
+
+ For me
+ No comment provided by engineer.
+ For private routingA privát útválasztáshoz
@@ -4693,6 +4725,10 @@ Ez az Ön hivatkozása a(z) %@ nevű csoporthoz!
Inaktív tagitem status text
+
+ Member reports
+ chat feature
+ Member role will be changed to "%@". All chat members will be notified.A tag szerepeköre meg fog változni a következőre: "%@". A csevegés tagjai értesítést fognak kapni.
@@ -4728,6 +4764,10 @@ Ez az Ön hivatkozása a(z) %@ nevű csoporthoz!
A csoport tagjai véglegesen törölhetik az elküldött üzeneteiket. (24 óra)No comment provided by engineer.
+
+ Members can report messsages to moderators.
+ No comment provided by engineer.
+ Members can send SimpleX links.A csoport tagjai küldhetnek SimpleX-hivatkozásokat.
@@ -5909,6 +5949,10 @@ Hiba: %@
Az üzenetreakciók tiltása.No comment provided by engineer.
+
+ Prohibit reporting messages to moderators.
+ No comment provided by engineer.
+ Prohibit sending SimpleX links.A SimpleX-hivatkozások küldése le van tiltva.
@@ -6314,6 +6358,14 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben.
Szabálysértés jelentése: csak a csoport moderátorai látják.report reason
+
+ Report: (text.isEmpty ? reason.text : text)
+ report in notification
+
+
+ Reporting messages to moderators is prohibited.
+ No comment provided by engineer.
+ ReportsJelentések
@@ -7654,11 +7706,6 @@ Ez valamilyen hiba vagy sérült kapcsolat esetén fordulhat elő.
A profilja csak az ismerőseivel van megosztva.No comment provided by engineer.
-
- The report will be archived for you.
- A jelentés archiválva lesz az Ön számára.
- No comment provided by engineer.
- The same conditions will apply to operator **%@**.Ugyanezek a feltételek lesznek elfogadva a következő üzemeltetőre is: **%@**.
diff --git a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff
index 2492edc626..8dd8b44054 100644
--- a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff
+++ b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff
@@ -840,6 +840,10 @@
Tutti gli profiliprofile dropdown
+
+ All reports will be archived for you.
+ No comment provided by engineer.
+ All your contacts will remain connected.Tutti i tuoi contatti resteranno connessi.
@@ -915,6 +919,10 @@
Permetti di eliminare irreversibilmente i messaggi inviati. (24 ore)No comment provided by engineer.
+
+ Allow to report messsages to moderators.
+ No comment provided by engineer.
+ Allow to send SimpleX links.Consenti di inviare link di SimpleX.
@@ -1080,6 +1088,14 @@
ArchiviaNo comment provided by engineer.
+
+ Archive %lld reports?
+ No comment provided by engineer.
+
+
+ Archive all reports?
+ No comment provided by engineer.
+ Archive and uploadArchivia e carica
@@ -1100,6 +1116,10 @@
Archiviare la segnalazione?No comment provided by engineer.
+
+ Archive reports
+ swipe action
+ Archived contactsContatti archiviati
@@ -1657,6 +1677,10 @@
Svuotare la conversazione?No comment provided by engineer.
+
+ Clear group?
+ No comment provided by engineer.
+ Clear or delete group?Svuotare o eliminare il gruppo?
@@ -3732,6 +3756,10 @@ Questo è il tuo link una tantum!
Correzione non supportata dal membro del gruppoNo comment provided by engineer.
+
+ For all moderators
+ No comment provided by engineer.
+ For chat profile %@:Per il profilo di chat %@:
@@ -3747,6 +3775,10 @@ Questo è il tuo link una tantum!
Ad esempio, se il tuo contatto riceve messaggi tramite un server di SimpleX Chat, la tua app li consegnerà tramite un server Flux.No comment provided by engineer.
+
+ For me
+ No comment provided by engineer.
+ For private routingPer l'instradamento privato
@@ -4693,6 +4725,10 @@ Questo è il tuo link per il gruppo %@!
Membro inattivoitem status text
+
+ Member reports
+ chat feature
+ Member role will be changed to "%@". All chat members will be notified.Il ruolo del membro verrà cambiato in "%@". Verranno notificati tutti i membri della chat.
@@ -4728,6 +4764,10 @@ Questo è il tuo link per il gruppo %@!
I membri del gruppo possono eliminare irreversibilmente i messaggi inviati. (24 ore)No comment provided by engineer.
+
+ Members can report messsages to moderators.
+ No comment provided by engineer.
+ Members can send SimpleX links.I membri del gruppo possono inviare link di Simplex.
@@ -5909,6 +5949,10 @@ Errore: %@
Proibisci le reazioni ai messaggi.No comment provided by engineer.
+
+ Prohibit reporting messages to moderators.
+ No comment provided by engineer.
+ Prohibit sending SimpleX links.Vieta l'invio di link di SimpleX.
@@ -6314,6 +6358,14 @@ Attivalo nelle impostazioni *Rete e server*.
Segnala violazione: solo i moderatori del gruppo lo vedranno.report reason
+
+ Report: (text.isEmpty ? reason.text : text)
+ report in notification
+
+
+ Reporting messages to moderators is prohibited.
+ No comment provided by engineer.
+ ReportsSegnalazioni
@@ -7654,11 +7706,6 @@ Può accadere a causa di qualche bug o quando la connessione è compromessa.Il profilo è condiviso solo con i tuoi contatti.
No comment provided by engineer.
-
- The report will be archived for you.
- La segnalazione verrà archiviata per te.
- No comment provided by engineer.
- The same conditions will apply to operator **%@**.Le stesse condizioni si applicheranno all'operatore **%@**.
diff --git a/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff b/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff
index 913e227f17..9884967d68 100644
--- a/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff
+++ b/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff
@@ -813,6 +813,10 @@
すべてのプロフィールprofile dropdown
+
+ All reports will be archived for you.
+ No comment provided by engineer.
+ All your contacts will remain connected.あなたの連絡先が繋がったまま継続します。
@@ -886,6 +890,10 @@
送信済みメッセージの永久削除を許可する。(24時間)No comment provided by engineer.
+
+ Allow to report messsages to moderators.
+ No comment provided by engineer.
+ Allow to send SimpleX links.SimpleXリンクの送信を許可。
@@ -1047,6 +1055,14 @@
ArchiveNo comment provided by engineer.
+
+ Archive %lld reports?
+ No comment provided by engineer.
+
+
+ Archive all reports?
+ No comment provided by engineer.
+ Archive and uploadアーカイブとアップロード
@@ -1064,6 +1080,10 @@
Archive report?No comment provided by engineer.
+
+ Archive reports
+ swipe action
+ Archived contactsNo comment provided by engineer.
@@ -1569,6 +1589,10 @@
ダイアログのクリアしますか?No comment provided by engineer.
+
+ Clear group?
+ No comment provided by engineer.
+ Clear or delete group?No comment provided by engineer.
@@ -3485,6 +3509,10 @@ This is your own one-time link!
グループメンバーによる修正はサポートされていませんNo comment provided by engineer.
+
+ For all moderators
+ No comment provided by engineer.
+ For chat profile %@:servers error
@@ -3498,6 +3526,10 @@ This is your own one-time link!
For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server.No comment provided by engineer.
+
+ For me
+ No comment provided by engineer.
+ For private routingNo comment provided by engineer.
@@ -4372,6 +4404,10 @@ This is your link for group %@!
Member inactiveitem status text
+
+ Member reports
+ chat feature
+ Member role will be changed to "%@". All chat members will be notified.No comment provided by engineer.
@@ -4405,6 +4441,10 @@ This is your link for group %@!
グループのメンバーがメッセージを完全削除することができます。(24時間)No comment provided by engineer.
+
+ Members can report messsages to moderators.
+ No comment provided by engineer.
+ Members can send SimpleX links.No comment provided by engineer.
@@ -5478,6 +5518,10 @@ Error: %@
メッセージへのリアクションは禁止されています。No comment provided by engineer.
+
+ Prohibit reporting messages to moderators.
+ No comment provided by engineer.
+ Prohibit sending SimpleX links.No comment provided by engineer.
@@ -5846,6 +5890,14 @@ Enable in *Network & servers* settings.
Report violation: only group moderators will see it.report reason
+
+ Report: (text.isEmpty ? reason.text : text)
+ report in notification
+
+
+ Reporting messages to moderators is prohibited.
+ No comment provided by engineer.
+ ReportsNo comment provided by engineer.
@@ -7067,10 +7119,6 @@ It can happen because of some bug or when the connection is compromised.プロフィールは連絡先にしか共有されません。
No comment provided by engineer.
-
- The report will be archived for you.
- No comment provided by engineer.
- The same conditions will apply to operator **%@**.No comment provided by engineer.
diff --git a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff
index d8ced23aa4..044ea87cd6 100644
--- a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff
+++ b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff
@@ -840,6 +840,10 @@
Alle profielenprofile dropdown
+
+ All reports will be archived for you.
+ No comment provided by engineer.
+ All your contacts will remain connected.Al uw contacten blijven verbonden.
@@ -915,6 +919,10 @@
Sta toe om verzonden berichten definitief te verwijderen. (24 uur)No comment provided by engineer.
+
+ Allow to report messsages to moderators.
+ No comment provided by engineer.
+ Allow to send SimpleX links.Sta toe dat SimpleX-links worden verzonden.
@@ -1080,6 +1088,14 @@
ArchiefNo comment provided by engineer.
+
+ Archive %lld reports?
+ No comment provided by engineer.
+
+
+ Archive all reports?
+ No comment provided by engineer.
+ Archive and uploadArchiveren en uploaden
@@ -1100,6 +1116,10 @@
Rapport archiveren?No comment provided by engineer.
+
+ Archive reports
+ swipe action
+ Archived contactsGearchiveerde contacten
@@ -1657,6 +1677,10 @@
Gesprek wissen?No comment provided by engineer.
+
+ Clear group?
+ No comment provided by engineer.
+ Clear or delete group?Groep wissen of verwijderen?
@@ -3732,6 +3756,10 @@ Dit is uw eigen eenmalige link!
Herstel wordt niet ondersteund door groepslidNo comment provided by engineer.
+
+ For all moderators
+ No comment provided by engineer.
+ For chat profile %@:Voor chatprofiel %@:
@@ -3747,6 +3775,10 @@ Dit is uw eigen eenmalige link!
Als uw contactpersoon bijvoorbeeld berichten ontvangt via een SimpleX Chat-server, worden deze door uw app via een Flux-server verzonden.No comment provided by engineer.
+
+ For me
+ No comment provided by engineer.
+ For private routingVoor privé-routering
@@ -4693,6 +4725,10 @@ Dit is jouw link voor groep %@!
Lid inactiefitem status text
+
+ Member reports
+ chat feature
+ Member role will be changed to "%@". All chat members will be notified.De rol van het lid wordt gewijzigd naar "%@". Alle chatleden worden op de hoogte gebracht.
@@ -4728,6 +4764,10 @@ Dit is jouw link voor groep %@!
Groepsleden kunnen verzonden berichten onherroepelijk verwijderen. (24 uur)No comment provided by engineer.
+
+ Members can report messsages to moderators.
+ No comment provided by engineer.
+ Members can send SimpleX links.Groepsleden kunnen SimpleX-links verzenden.
@@ -5909,6 +5949,10 @@ Fout: %@
Berichten reacties verbieden.No comment provided by engineer.
+
+ Prohibit reporting messages to moderators.
+ No comment provided by engineer.
+ Prohibit sending SimpleX links.Verbied het verzenden van SimpleX-links
@@ -6314,6 +6358,14 @@ Schakel dit in in *Netwerk en servers*-instellingen.
Rapporteer overtreding: alleen groepsmoderators kunnen dit zien.report reason
+
+ Report: (text.isEmpty ? reason.text : text)
+ report in notification
+
+
+ Reporting messages to moderators is prohibited.
+ No comment provided by engineer.
+ ReportsRapporten
@@ -7654,11 +7706,6 @@ Het kan gebeuren vanwege een bug of wanneer de verbinding is aangetast.
Het profiel wordt alleen gedeeld met uw contacten.No comment provided by engineer.
-
- The report will be archived for you.
- Het rapport wordt voor u gearchiveerd.
- No comment provided by engineer.
- The same conditions will apply to operator **%@**.Dezelfde voorwaarden gelden voor operator **%@**.
diff --git a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff
index c410ff46e3..1c39ed50ba 100644
--- a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff
+++ b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff
@@ -838,6 +838,10 @@
Wszystkie profileprofile dropdown
+
+ All reports will be archived for you.
+ No comment provided by engineer.
+ All your contacts will remain connected.Wszystkie Twoje kontakty pozostaną połączone.
@@ -913,6 +917,10 @@
Zezwól na nieodwracalne usunięcie wysłanych wiadomości. (24 godziny)No comment provided by engineer.
+
+ Allow to report messsages to moderators.
+ No comment provided by engineer.
+ Allow to send SimpleX links.Zezwól na wysyłanie linków SimpleX.
@@ -1075,6 +1083,14 @@
ArchiveNo comment provided by engineer.
+
+ Archive %lld reports?
+ No comment provided by engineer.
+
+
+ Archive all reports?
+ No comment provided by engineer.
+ Archive and uploadArchiwizuj i prześlij
@@ -1093,6 +1109,10 @@
Archive report?No comment provided by engineer.
+
+ Archive reports
+ swipe action
+ Archived contactsZarchiwizowane kontakty
@@ -1648,6 +1668,10 @@
Wyczyścić rozmowę?No comment provided by engineer.
+
+ Clear group?
+ No comment provided by engineer.
+ Clear or delete group?No comment provided by engineer.
@@ -3678,6 +3702,10 @@ To jest twój jednorazowy link!
Naprawa nie jest obsługiwana przez członka grupyNo comment provided by engineer.
+
+ For all moderators
+ No comment provided by engineer.
+ For chat profile %@:servers error
@@ -3691,6 +3719,10 @@ To jest twój jednorazowy link!
For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server.No comment provided by engineer.
+
+ For me
+ No comment provided by engineer.
+ For private routingNo comment provided by engineer.
@@ -4620,6 +4652,10 @@ To jest twój link do grupy %@!
Członek nieaktywnyitem status text
+
+ Member reports
+ chat feature
+ Member role will be changed to "%@". All chat members will be notified.No comment provided by engineer.
@@ -4653,6 +4689,10 @@ To jest twój link do grupy %@!
Członkowie grupy mogą nieodwracalnie usuwać wysłane wiadomości. (24 godziny)No comment provided by engineer.
+
+ Members can report messsages to moderators.
+ No comment provided by engineer.
+ Members can send SimpleX links.Członkowie grupy mogą wysyłać linki SimpleX.
@@ -5801,6 +5841,10 @@ Błąd: %@
Zabroń reakcje wiadomości.No comment provided by engineer.
+
+ Prohibit reporting messages to moderators.
+ No comment provided by engineer.
+ Prohibit sending SimpleX links.Zabroń wysyłania linków SimpleX.
@@ -6199,6 +6243,14 @@ Włącz w ustawianiach *Sieć i serwery* .
Report violation: only group moderators will see it.report reason
+
+ Report: (text.isEmpty ? reason.text : text)
+ report in notification
+
+
+ Reporting messages to moderators is prohibited.
+ No comment provided by engineer.
+ ReportsNo comment provided by engineer.
@@ -7514,10 +7566,6 @@ Może się to zdarzyć z powodu jakiegoś błędu lub gdy połączenie jest skom
Profil jest udostępniany tylko Twoim kontaktom.No comment provided by engineer.
-
- The report will be archived for you.
- No comment provided by engineer.
- The same conditions will apply to operator **%@**.No comment provided by engineer.
diff --git a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff
index d5dc066a9f..9bae61e56d 100644
--- a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff
+++ b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff
@@ -838,6 +838,10 @@
Все профилиprofile dropdown
+
+ All reports will be archived for you.
+ No comment provided by engineer.
+ All your contacts will remain connected.Все контакты, которые соединились через этот адрес, сохранятся.
@@ -913,6 +917,10 @@
Разрешить необратимо удалять отправленные сообщения. (24 часа)No comment provided by engineer.
+
+ Allow to report messsages to moderators.
+ No comment provided by engineer.
+ Allow to send SimpleX links.Разрешить отправлять ссылки SimpleX.
@@ -1077,6 +1085,14 @@
АрхивироватьNo comment provided by engineer.
+
+ Archive %lld reports?
+ No comment provided by engineer.
+
+
+ Archive all reports?
+ No comment provided by engineer.
+ Archive and uploadАрхивировать и загрузить
@@ -1097,6 +1113,10 @@
Архивировать отчет?No comment provided by engineer.
+
+ Archive reports
+ swipe action
+ Archived contactsАрхивированные контакты
@@ -1651,6 +1671,10 @@
Очистить разговор?No comment provided by engineer.
+
+ Clear group?
+ No comment provided by engineer.
+ Clear or delete group?No comment provided by engineer.
@@ -3702,6 +3726,10 @@ This is your own one-time link!
Починка не поддерживается членом группыNo comment provided by engineer.
+
+ For all moderators
+ No comment provided by engineer.
+ For chat profile %@:Для профиля чата %@:
@@ -3717,6 +3745,10 @@ This is your own one-time link!
Например, если Ваш контакт получает сообщения через сервер SimpleX Chat, Ваше приложение доставит их через сервер Flux.No comment provided by engineer.
+
+ For me
+ No comment provided by engineer.
+ For private routingДля доставки сообщений
@@ -4655,6 +4687,10 @@ This is your link for group %@!
Член неактивенitem status text
+
+ Member reports
+ chat feature
+ Member role will be changed to "%@". All chat members will be notified.Роль участника будет изменена на "%@". Все участники разговора получат уведомление.
@@ -4690,6 +4726,10 @@ This is your link for group %@!
Члены группы могут необратимо удалять отправленные сообщения. (24 часа)No comment provided by engineer.
+
+ Members can report messsages to moderators.
+ No comment provided by engineer.
+ Members can send SimpleX links.Члены группы могут отправлять ссылки SimpleX.
@@ -5859,6 +5899,10 @@ Error: %@
Запретить реакции на сообщения.No comment provided by engineer.
+
+ Prohibit reporting messages to moderators.
+ No comment provided by engineer.
+ Prohibit sending SimpleX links.Запретить отправку ссылок SimpleX.
@@ -6257,6 +6301,14 @@ Enable in *Network & servers* settings.
Report violation: only group moderators will see it.report reason
+
+ Report: (text.isEmpty ? reason.text : text)
+ report in notification
+
+
+ Reporting messages to moderators is prohibited.
+ No comment provided by engineer.
+ ReportsNo comment provided by engineer.
@@ -7592,10 +7644,6 @@ It can happen because of some bug or when the connection is compromised.Профиль отправляется только Вашим контактам.
No comment provided by engineer.
-
- The report will be archived for you.
- No comment provided by engineer.
- The same conditions will apply to operator **%@**.Те же самые условия будут приняты для оператора **%@**.
diff --git a/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff b/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff
index ea0ecaa4f0..7239c30b44 100644
--- a/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff
+++ b/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff
@@ -767,6 +767,10 @@
All profilesprofile dropdown
+
+ All reports will be archived for you.
+ No comment provided by engineer.
+ All your contacts will remain connected.ผู้ติดต่อทั้งหมดของคุณจะยังคงเชื่อมต่ออยู่.
@@ -838,6 +842,10 @@
อนุญาตให้ลบข้อความที่ส่งไปแล้วอย่างถาวรNo comment provided by engineer.
+
+ Allow to report messsages to moderators.
+ No comment provided by engineer.
+ Allow to send SimpleX links.No comment provided by engineer.
@@ -991,6 +999,14 @@
ArchiveNo comment provided by engineer.
+
+ Archive %lld reports?
+ No comment provided by engineer.
+
+
+ Archive all reports?
+ No comment provided by engineer.
+ Archive and uploadNo comment provided by engineer.
@@ -1007,6 +1023,10 @@
Archive report?No comment provided by engineer.
+
+ Archive reports
+ swipe action
+ Archived contactsNo comment provided by engineer.
@@ -1508,6 +1528,10 @@
ลบการสนทนา?No comment provided by engineer.
+
+ Clear group?
+ No comment provided by engineer.
+ Clear or delete group?No comment provided by engineer.
@@ -3397,6 +3421,10 @@ This is your own one-time link!
การแก้ไขไม่สนับสนุนโดยสมาชิกกลุ่มNo comment provided by engineer.
+
+ For all moderators
+ No comment provided by engineer.
+ For chat profile %@:servers error
@@ -3410,6 +3438,10 @@ This is your own one-time link!
For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server.No comment provided by engineer.
+
+ For me
+ No comment provided by engineer.
+ For private routingNo comment provided by engineer.
@@ -4282,6 +4314,10 @@ This is your link for group %@!
Member inactiveitem status text
+
+ Member reports
+ chat feature
+ Member role will be changed to "%@". All chat members will be notified.No comment provided by engineer.
@@ -4315,6 +4351,10 @@ This is your link for group %@!
สมาชิกกลุ่มสามารถลบข้อความที่ส่งแล้วอย่างถาวรNo comment provided by engineer.
+
+ Members can report messsages to moderators.
+ No comment provided by engineer.
+ Members can send SimpleX links.No comment provided by engineer.
@@ -5379,6 +5419,10 @@ Error: %@
ห้ามแสดงปฏิกิริยาต่อข้อความNo comment provided by engineer.
+
+ Prohibit reporting messages to moderators.
+ No comment provided by engineer.
+ Prohibit sending SimpleX links.No comment provided by engineer.
@@ -5746,6 +5790,14 @@ Enable in *Network & servers* settings.
Report violation: only group moderators will see it.report reason
+
+ Report: (text.isEmpty ? reason.text : text)
+ report in notification
+
+
+ Reporting messages to moderators is prohibited.
+ No comment provided by engineer.
+ ReportsNo comment provided by engineer.
@@ -6970,10 +7022,6 @@ It can happen because of some bug or when the connection is compromised.โปรไฟล์นี้แชร์กับผู้ติดต่อของคุณเท่านั้น
No comment provided by engineer.
-
- The report will be archived for you.
- No comment provided by engineer.
- The same conditions will apply to operator **%@**.No comment provided by engineer.
diff --git a/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff b/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff
index 28befea033..0963a750aa 100644
--- a/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff
+++ b/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff
@@ -833,6 +833,10 @@
Tüm Profillerprofile dropdown
+
+ All reports will be archived for you.
+ No comment provided by engineer.
+ All your contacts will remain connected.Konuştuğun kişilerin tümü bağlı kalacaktır.
@@ -908,6 +912,10 @@
Gönderilen mesajların kalıcı olarak silinmesine izin ver. (24 saat içinde)No comment provided by engineer.
+
+ Allow to report messsages to moderators.
+ No comment provided by engineer.
+ Allow to send SimpleX links.SimpleX bağlantıları göndilmesine izin ver.
@@ -1070,6 +1078,14 @@
ArchiveNo comment provided by engineer.
+
+ Archive %lld reports?
+ No comment provided by engineer.
+
+
+ Archive all reports?
+ No comment provided by engineer.
+ Archive and uploadArşivle ve yükle
@@ -1088,6 +1104,10 @@
Archive report?No comment provided by engineer.
+
+ Archive reports
+ swipe action
+ Archived contactsArşivli kişiler
@@ -1642,6 +1662,10 @@
Sohbet temizlensin mi?No comment provided by engineer.
+
+ Clear group?
+ No comment provided by engineer.
+ Clear or delete group?No comment provided by engineer.
@@ -3692,6 +3716,10 @@ Bu senin kendi tek kullanımlık bağlantın!
Düzeltme grup üyesi tarafından desteklenmiyorNo comment provided by engineer.
+
+ For all moderators
+ No comment provided by engineer.
+ For chat profile %@:Sohbet profili için %@:
@@ -3707,6 +3735,10 @@ Bu senin kendi tek kullanımlık bağlantın!
Örneğin, eğer kişiniz SimpleX Sohbet sunucusundan mesajları alıyorsa, uygulamanız bu mesajları Flux sunucusundan iletecektir.No comment provided by engineer.
+
+ For me
+ No comment provided by engineer.
+ For private routingGizli yönlendirme için
@@ -4646,6 +4678,10 @@ Bu senin grup için bağlantın %@!
Üye inaktifitem status text
+
+ Member reports
+ chat feature
+ Member role will be changed to "%@". All chat members will be notified.Üye rolü "%@" olarak değiştirilecektir. Tüm sohbet üyeleri bilgilendirilecektir.
@@ -4680,6 +4716,10 @@ Bu senin grup için bağlantın %@!
Grup üyeleri, gönderilen mesajları kalıcı olarak silebilir. (24 saat içinde)No comment provided by engineer.
+
+ Members can report messsages to moderators.
+ No comment provided by engineer.
+ Members can send SimpleX links.Grup üyeleri SimpleX bağlantıları gönderebilir.
@@ -5828,6 +5868,10 @@ Hata: %@
Mesajlarda tepkileri yasakla.No comment provided by engineer.
+
+ Prohibit reporting messages to moderators.
+ No comment provided by engineer.
+ Prohibit sending SimpleX links.SimpleX bağlantısı gönderimini yasakla.
@@ -6226,6 +6270,14 @@ Enable in *Network & servers* settings.
Report violation: only group moderators will see it.report reason
+
+ Report: (text.isEmpty ? reason.text : text)
+ report in notification
+
+
+ Reporting messages to moderators is prohibited.
+ No comment provided by engineer.
+ ReportsNo comment provided by engineer.
@@ -7544,10 +7596,6 @@ Bazı hatalar nedeniyle veya bağlantı tehlikeye girdiğinde meydana gelebilir.
Profil sadece kişilerinle paylaşılacak.No comment provided by engineer.
-
- The report will be archived for you.
- No comment provided by engineer.
- The same conditions will apply to operator **%@**.No comment provided by engineer.
diff --git a/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff b/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff
index a8c1ec27b7..8d48227e77 100644
--- a/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff
+++ b/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff
@@ -833,6 +833,10 @@
Всі профіліprofile dropdown
+
+ All reports will be archived for you.
+ No comment provided by engineer.
+ All your contacts will remain connected.Всі ваші контакти залишаться на зв'язку.
@@ -908,6 +912,10 @@
Дозволяє безповоротно видаляти надіслані повідомлення. (24 години)No comment provided by engineer.
+
+ Allow to report messsages to moderators.
+ No comment provided by engineer.
+ Allow to send SimpleX links.Дозволити надсилати посилання SimpleX.
@@ -1070,6 +1078,14 @@
ArchiveNo comment provided by engineer.
+
+ Archive %lld reports?
+ No comment provided by engineer.
+
+
+ Archive all reports?
+ No comment provided by engineer.
+ Archive and uploadАрхівування та завантаження
@@ -1088,6 +1104,10 @@
Archive report?No comment provided by engineer.
+
+ Archive reports
+ swipe action
+ Archived contactsАрхівні контакти
@@ -1642,6 +1662,10 @@
Відверта розмова?No comment provided by engineer.
+
+ Clear group?
+ No comment provided by engineer.
+ Clear or delete group?No comment provided by engineer.
@@ -3693,6 +3717,10 @@ This is your own one-time link!
Виправлення не підтримується учасником групиNo comment provided by engineer.
+
+ For all moderators
+ No comment provided by engineer.
+ For chat profile %@:Для профілю чату %@:
@@ -3708,6 +3736,10 @@ This is your own one-time link!
Наприклад, якщо ваш контакт отримує повідомлення через сервер SimpleX Chat, ваш додаток доставлятиме їх через сервер Flux.No comment provided by engineer.
+
+ For me
+ No comment provided by engineer.
+ For private routingДля приватної маршрутизації
@@ -4647,6 +4679,10 @@ This is your link for group %@!
Користувач неактивнийitem status text
+
+ Member reports
+ chat feature
+ Member role will be changed to "%@". All chat members will be notified.Роль учасника буде змінено на "%@". Усі учасники чату отримають сповіщення.
@@ -4682,6 +4718,10 @@ This is your link for group %@!
Учасники групи можуть безповоротно видаляти надіслані повідомлення. (24 години)No comment provided by engineer.
+
+ Members can report messsages to moderators.
+ No comment provided by engineer.
+ Members can send SimpleX links.Учасники групи можуть надсилати посилання SimpleX.
@@ -5851,6 +5891,10 @@ Error: %@
Заборонити реакції на повідомлення.No comment provided by engineer.
+
+ Prohibit reporting messages to moderators.
+ No comment provided by engineer.
+ Prohibit sending SimpleX links.Заборонити надсилання посилань SimpleX.
@@ -6249,6 +6293,14 @@ Enable in *Network & servers* settings.
Report violation: only group moderators will see it.report reason
+
+ Report: (text.isEmpty ? reason.text : text)
+ report in notification
+
+
+ Reporting messages to moderators is prohibited.
+ No comment provided by engineer.
+ ReportsNo comment provided by engineer.
@@ -7584,10 +7636,6 @@ It can happen because of some bug or when the connection is compromised.Профіль доступний лише вашим контактам.
No comment provided by engineer.
-
- The report will be archived for you.
- No comment provided by engineer.
- The same conditions will apply to operator **%@**.Такі ж умови діятимуть і для оператора **%@**.
diff --git a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff
index 5be4378abb..6ac247c6f1 100644
--- a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff
+++ b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff
@@ -811,6 +811,10 @@
所有配置文件profile dropdown
+
+ All reports will be archived for you.
+ No comment provided by engineer.
+ All your contacts will remain connected.所有联系人会保持连接。
@@ -886,6 +890,10 @@
允许不可撤回地删除已发送消息No comment provided by engineer.
+
+ Allow to report messsages to moderators.
+ No comment provided by engineer.
+ Allow to send SimpleX links.允许发送 SimpleX 链接。
@@ -1047,6 +1055,14 @@
ArchiveNo comment provided by engineer.
+
+ Archive %lld reports?
+ No comment provided by engineer.
+
+
+ Archive all reports?
+ No comment provided by engineer.
+ Archive and upload存档和上传
@@ -1065,6 +1081,10 @@
Archive report?No comment provided by engineer.
+
+ Archive reports
+ swipe action
+ Archived contacts已存档的联系人
@@ -1602,6 +1622,10 @@
清除对话吗?No comment provided by engineer.
+
+ Clear group?
+ No comment provided by engineer.
+ Clear or delete group?No comment provided by engineer.
@@ -3618,6 +3642,10 @@ This is your own one-time link!
修复群组成员不支持的问题No comment provided by engineer.
+
+ For all moderators
+ No comment provided by engineer.
+ For chat profile %@:servers error
@@ -3631,6 +3659,10 @@ This is your own one-time link!
For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server.No comment provided by engineer.
+
+ For me
+ No comment provided by engineer.
+ For private routingNo comment provided by engineer.
@@ -4555,6 +4587,10 @@ This is your link for group %@!
成员不活跃item status text
+
+ Member reports
+ chat feature
+ Member role will be changed to "%@". All chat members will be notified.No comment provided by engineer.
@@ -4588,6 +4624,10 @@ This is your link for group %@!
群组成员可以不可撤回地删除已发送的消息No comment provided by engineer.
+
+ Members can report messsages to moderators.
+ No comment provided by engineer.
+ Members can send SimpleX links.群成员可发送 SimpleX 链接。
@@ -5725,6 +5765,10 @@ Error: %@
禁止消息回应。No comment provided by engineer.
+
+ Prohibit reporting messages to moderators.
+ No comment provided by engineer.
+ Prohibit sending SimpleX links.禁止发送 SimpleX 链接。
@@ -6121,6 +6165,14 @@ Enable in *Network & servers* settings.
Report violation: only group moderators will see it.report reason
+
+ Report: (text.isEmpty ? reason.text : text)
+ report in notification
+
+
+ Reporting messages to moderators is prohibited.
+ No comment provided by engineer.
+ ReportsNo comment provided by engineer.
@@ -7427,10 +7479,6 @@ It can happen because of some bug or when the connection is compromised.该资料仅与您的联系人共享。
No comment provided by engineer.
-
- The report will be archived for you.
- No comment provided by engineer.
- The same conditions will apply to operator **%@**.No comment provided by engineer.
diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj
index d94d874d80..54c0135447 100644
--- a/apps/ios/SimpleX.xcodeproj/project.pbxproj
+++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj
@@ -179,8 +179,8 @@
64C3B0212A0D359700E19930 /* CustomTimePicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64C3B0202A0D359700E19930 /* CustomTimePicker.swift */; };
64C8299D2D54AEEE006B9E89 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64C829982D54AEED006B9E89 /* libgmp.a */; };
64C8299E2D54AEEE006B9E89 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64C829992D54AEEE006B9E89 /* libffi.a */; };
- 64C8299F2D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.3-2g9X994zhsoKwinyJQVzkZ-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64C8299A2D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.3-2g9X994zhsoKwinyJQVzkZ-ghc9.6.3.a */; };
- 64C829A02D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.3-2g9X994zhsoKwinyJQVzkZ.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64C8299B2D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.3-2g9X994zhsoKwinyJQVzkZ.a */; };
+ 64C8299F2D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.4-4btgYWZNeX12ojCzRaHJ3W-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64C8299A2D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.4-4btgYWZNeX12ojCzRaHJ3W-ghc9.6.3.a */; };
+ 64C829A02D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.4-4btgYWZNeX12ojCzRaHJ3W.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64C8299B2D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.4-4btgYWZNeX12ojCzRaHJ3W.a */; };
64C829A12D54AEEE006B9E89 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64C8299C2D54AEEE006B9E89 /* libgmpxx.a */; };
64D0C2C029F9688300B38D5F /* UserAddressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64D0C2BF29F9688300B38D5F /* UserAddressView.swift */; };
64D0C2C229FA57AB00B38D5F /* UserAddressLearnMore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64D0C2C129FA57AB00B38D5F /* UserAddressLearnMore.swift */; };
@@ -537,8 +537,8 @@
64C3B0202A0D359700E19930 /* CustomTimePicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomTimePicker.swift; sourceTree = ""; };
64C829982D54AEED006B9E89 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; };
64C829992D54AEEE006B9E89 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; };
- 64C8299A2D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.3-2g9X994zhsoKwinyJQVzkZ-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.3.0.3-2g9X994zhsoKwinyJQVzkZ-ghc9.6.3.a"; sourceTree = ""; };
- 64C8299B2D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.3-2g9X994zhsoKwinyJQVzkZ.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.3.0.3-2g9X994zhsoKwinyJQVzkZ.a"; sourceTree = ""; };
+ 64C8299A2D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.4-4btgYWZNeX12ojCzRaHJ3W-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.3.0.4-4btgYWZNeX12ojCzRaHJ3W-ghc9.6.3.a"; sourceTree = ""; };
+ 64C8299B2D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.4-4btgYWZNeX12ojCzRaHJ3W.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.3.0.4-4btgYWZNeX12ojCzRaHJ3W.a"; sourceTree = ""; };
64C8299C2D54AEEE006B9E89 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; };
64D0C2BF29F9688300B38D5F /* UserAddressView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserAddressView.swift; sourceTree = ""; };
64D0C2C129FA57AB00B38D5F /* UserAddressLearnMore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserAddressLearnMore.swift; sourceTree = ""; };
@@ -690,8 +690,8 @@
64C8299D2D54AEEE006B9E89 /* libgmp.a in Frameworks */,
64C8299E2D54AEEE006B9E89 /* libffi.a in Frameworks */,
64C829A12D54AEEE006B9E89 /* libgmpxx.a in Frameworks */,
- 64C8299F2D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.3-2g9X994zhsoKwinyJQVzkZ-ghc9.6.3.a in Frameworks */,
- 64C829A02D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.3-2g9X994zhsoKwinyJQVzkZ.a in Frameworks */,
+ 64C8299F2D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.4-4btgYWZNeX12ojCzRaHJ3W-ghc9.6.3.a in Frameworks */,
+ 64C829A02D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.4-4btgYWZNeX12ojCzRaHJ3W.a in Frameworks */,
CE38A29C2C3FCD72005ED185 /* SwiftyGif in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -772,8 +772,8 @@
64C829992D54AEEE006B9E89 /* libffi.a */,
64C829982D54AEED006B9E89 /* libgmp.a */,
64C8299C2D54AEEE006B9E89 /* libgmpxx.a */,
- 64C8299A2D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.3-2g9X994zhsoKwinyJQVzkZ-ghc9.6.3.a */,
- 64C8299B2D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.3-2g9X994zhsoKwinyJQVzkZ.a */,
+ 64C8299A2D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.4-4btgYWZNeX12ojCzRaHJ3W-ghc9.6.3.a */,
+ 64C8299B2D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.4-4btgYWZNeX12ojCzRaHJ3W.a */,
);
path = Libraries;
sourceTree = "";
@@ -1957,7 +1957,7 @@
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 262;
+ CURRENT_PROJECT_VERSION = 263;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
@@ -2006,7 +2006,7 @@
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 262;
+ CURRENT_PROJECT_VERSION = 263;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
@@ -2047,7 +2047,7 @@
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 262;
+ CURRENT_PROJECT_VERSION = 263;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
@@ -2067,7 +2067,7 @@
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 262;
+ CURRENT_PROJECT_VERSION = 263;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
@@ -2092,7 +2092,7 @@
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 262;
+ CURRENT_PROJECT_VERSION = 263;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
GCC_OPTIMIZATION_LEVEL = s;
@@ -2129,7 +2129,7 @@
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 262;
+ CURRENT_PROJECT_VERSION = 263;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
ENABLE_CODE_COVERAGE = NO;
@@ -2166,7 +2166,7 @@
CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES;
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 262;
+ CURRENT_PROJECT_VERSION = 263;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
DYLIB_COMPATIBILITY_VERSION = 1;
@@ -2217,7 +2217,7 @@
CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES;
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 262;
+ CURRENT_PROJECT_VERSION = 263;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
DYLIB_COMPATIBILITY_VERSION = 1;
@@ -2268,7 +2268,7 @@
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CODE_SIGN_ENTITLEMENTS = "SimpleX SE/SimpleX SE.entitlements";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 262;
+ CURRENT_PROJECT_VERSION = 263;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
@@ -2302,7 +2302,7 @@
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CODE_SIGN_ENTITLEMENTS = "SimpleX SE/SimpleX SE.entitlements";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 262;
+ CURRENT_PROJECT_VERSION = 263;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
diff --git a/apps/ios/SimpleXChat/ChatTypes.swift b/apps/ios/SimpleXChat/ChatTypes.swift
index 58bbfdbfd8..60d5082584 100644
--- a/apps/ios/SimpleXChat/ChatTypes.swift
+++ b/apps/ios/SimpleXChat/ChatTypes.swift
@@ -3523,8 +3523,12 @@ extension MsgReaction: Decodable {
let type = try container.decode(String.self, forKey: CodingKeys.type)
switch type {
case "emoji":
- let emoji = try container.decode(MREmojiChar.self, forKey: CodingKeys.emoji)
- self = .emoji(emoji: emoji)
+ do {
+ let emoji = try container.decode(MREmojiChar.self, forKey: CodingKeys.emoji)
+ self = .emoji(emoji: emoji)
+ } catch {
+ self = .unknown(type: "emoji")
+ }
default:
self = .unknown(type: type)
}
diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt
index 51c27b21de..04fd6b380d 100644
--- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt
+++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt
@@ -3311,7 +3311,7 @@ sealed class MsgReaction {
MREmojiChar.Heart -> "❤️"
else -> emoji.value
}
- is Unknown -> ""
+ is Unknown -> "?"
}
companion object {
@@ -3341,8 +3341,13 @@ object MsgReactionSerializer : KSerializer {
return if (json is JsonObject && "type" in json) {
when(val t = json["type"]?.jsonPrimitive?.content ?: "") {
"emoji" -> {
- val emoji = Json.decodeFromString(json["emoji"].toString())
- if (emoji == null) MsgReaction.Unknown(t, json) else MsgReaction.Emoji(emoji)
+ val msgReaction = try {
+ val emoji = Json.decodeFromString(json["emoji"].toString())
+ MsgReaction.Emoji(emoji)
+ } catch (e: Throwable) {
+ MsgReaction.Unknown(t, json)
+ }
+ msgReaction
}
else -> MsgReaction.Unknown(t, json)
}
diff --git a/apps/multiplatform/gradle.properties b/apps/multiplatform/gradle.properties
index 276bb8127f..2b53258fc8 100644
--- a/apps/multiplatform/gradle.properties
+++ b/apps/multiplatform/gradle.properties
@@ -24,11 +24,11 @@ android.nonTransitiveRClass=true
kotlin.mpp.androidSourceSetLayoutVersion=2
kotlin.jvm.target=11
-android.version_name=6.3-beta.3
-android.version_code=272
+android.version_name=6.3-beta.4
+android.version_code=273
-desktop.version_name=6.3-beta.3
-desktop.version_code=90
+desktop.version_name=6.3-beta.4
+desktop.version_code=91
kotlin.version=1.9.23
gradle.plugin.version=8.2.0
diff --git a/cabal.project b/cabal.project
index dcd465c658..b867c0e93b 100644
--- a/cabal.project
+++ b/cabal.project
@@ -12,7 +12,7 @@ constraints: zip +disable-bzip2 +disable-zstd
source-repository-package
type: git
location: https://github.com/simplex-chat/simplexmq.git
- tag: bd97cb04495b90412c1300fd1a4862f488db85cb
+ tag: c192339af9e9342902731f2d49ff380359be0dec
source-repository-package
type: git
diff --git a/scripts/nix/sha256map.nix b/scripts/nix/sha256map.nix
index d440afb61f..a54d3a35a2 100644
--- a/scripts/nix/sha256map.nix
+++ b/scripts/nix/sha256map.nix
@@ -1,5 +1,5 @@
{
- "https://github.com/simplex-chat/simplexmq.git"."bd97cb04495b90412c1300fd1a4862f488db85cb" = "19i0r2b4kfkq2zlbmq134a0hk0vszhm6wdlfyp58d35zqrc0xadf";
+ "https://github.com/simplex-chat/simplexmq.git"."c192339af9e9342902731f2d49ff380359be0dec" = "1h81kmwllqza7wil7w20ia934b6iny3dch9fln0x95l9q3f4zww7";
"https://github.com/simplex-chat/hs-socks.git"."a30cc7a79a08d8108316094f8f2f82a0c5e1ac51" = "0yasvnr7g91k76mjkamvzab2kvlb1g5pspjyjn2fr6v83swjhj38";
"https://github.com/simplex-chat/direct-sqlcipher.git"."f814ee68b16a9447fbb467ccc8f29bdd3546bfd9" = "1ql13f4kfwkbaq7nygkxgw84213i0zm7c1a8hwvramayxl38dq5d";
"https://github.com/simplex-chat/sqlcipher-simple.git"."a46bd361a19376c5211f1058908fc0ae6bf42446" = "1z0r78d8f0812kxbgsm735qf6xx8lvaz27k1a0b4a2m0sshpd5gl";
diff --git a/simplex-chat.cabal b/simplex-chat.cabal
index 7fbe800025..982e00fe37 100644
--- a/simplex-chat.cabal
+++ b/simplex-chat.cabal
@@ -5,7 +5,7 @@ cabal-version: 1.12
-- see: https://github.com/sol/hpack
name: simplex-chat
-version: 6.3.0.4
+version: 6.3.0.5
category: Web, System, Services, Cryptography
homepage: https://github.com/simplex-chat/simplex-chat#readme
author: simplex.chat
diff --git a/src/Simplex/Chat/Library/Commands.hs b/src/Simplex/Chat/Library/Commands.hs
index 4c5beb9cee..79ff9333c6 100644
--- a/src/Simplex/Chat/Library/Commands.hs
+++ b/src/Simplex/Chat/Library/Commands.hs
@@ -80,7 +80,7 @@ import Simplex.Chat.Store.Shared
import Simplex.Chat.Types
import Simplex.Chat.Types.Preferences
import Simplex.Chat.Types.Shared
-import Simplex.Chat.Util (liftIOEither)
+import Simplex.Chat.Util (liftIOEither, zipWith3')
import qualified Simplex.Chat.Util as U
import Simplex.FileTransfer.Description (FileDescriptionURI (..), maxFileSize, maxFileSizeHard)
import Simplex.Messaging.Agent as Agent
@@ -1893,6 +1893,12 @@ processChatCommand' vr = \case
pure CRBroadcastSent {user, msgContent = mc, successes = 0, failures = 0, timestamp}
Just (ctConns :: NonEmpty (Contact, Connection)) -> do
let idsEvts = L.map ctSndEvent ctConns
+ -- TODO Broadcast rework
+ -- In createNewSndMessage and encodeChatMessage we could use Nothing for sharedMsgId,
+ -- then we could reuse message body across broadcast.
+ -- Encoding different sharedMsgId and reusing body is meaningless as referencing will not work anyway.
+ -- As an improvement, single message record with its sharedMsgId could be created for new "broadcast" entity.
+ -- Then all recipients could refer to broadcast message using same sharedMsgId.
sndMsgs <- lift $ createSndMessages idsEvts
let msgReqs_ :: NonEmpty (Either ChatError ChatMsgReq) = L.zipWith (fmap . ctMsgReq) ctConns sndMsgs
(errs, ctSndMsgs :: [(Contact, SndMessage)]) <-
@@ -1909,9 +1915,7 @@ processChatCommand' vr = \case
ctSndEvent :: (Contact, Connection) -> (ConnOrGroupId, ChatMsgEvent 'Json)
ctSndEvent (_, Connection {connId}) = (ConnectionId connId, XMsgNew $ MCSimple (extMsgContent mc Nothing))
ctMsgReq :: (Contact, Connection) -> SndMessage -> ChatMsgReq
- ctMsgReq (_, conn) SndMessage {msgId, msgBody} = (conn, MsgFlags {notification = hasNotification XMsgNew_}, msgBody, [msgId])
- zipWith3' :: (a -> b -> c -> d) -> NonEmpty a -> NonEmpty b -> NonEmpty c -> NonEmpty d
- zipWith3' f ~(x :| xs) ~(y :| ys) ~(z :| zs) = f x y z :| zipWith3 f xs ys zs
+ ctMsgReq (_, conn) SndMessage {msgId, msgBody} = (conn, MsgFlags {notification = hasNotification XMsgNew_}, (vrValue msgBody, [msgId]))
combineResults :: (Contact, Connection) -> Either ChatError SndMessage -> Either ChatError ([Int64], PQEncryption) -> Either ChatError (Contact, SndMessage)
combineResults (ct, _) (Right msg') (Right _) = Right (ct, msg')
combineResults _ (Left e) _ = Left e
@@ -2662,7 +2666,7 @@ processChatCommand' vr = \case
ctMsgReq :: ChangedProfileContact -> Either ChatError SndMessage -> Either ChatError ChatMsgReq
ctMsgReq ChangedProfileContact {conn} =
fmap $ \SndMessage {msgId, msgBody} ->
- (conn, MsgFlags {notification = hasNotification XInfo_}, msgBody, [msgId])
+ (conn, MsgFlags {notification = hasNotification XInfo_}, (vrValue msgBody, [msgId]))
updateContactPrefs :: User -> Contact -> Preferences -> CM ChatResponse
updateContactPrefs _ ct@Contact {activeConn = Nothing} _ = throwChatError $ CEContactNotActive ct
updateContactPrefs user@User {userId} ct@Contact {activeConn = Just Connection {customUserProfileId}, userPreferences = contactUserPrefs} contactUserPrefs'
@@ -2713,7 +2717,7 @@ processChatCommand' vr = \case
when (memberStatus membership == GSMemInvited) $ throwChatError (CEGroupNotJoined g)
when (memberRemoved membership) $ throwChatError CEGroupMemberUserRemoved
unless (memberActive membership) $ throwChatError CEGroupMemberNotActive
- delGroupChatItemsForMembers :: User -> GroupInfo -> [GroupMember] -> [CChatItem CTGroup] -> CM ChatResponse
+ delGroupChatItemsForMembers :: User -> GroupInfo -> [GroupMember] -> [CChatItem 'CTGroup] -> CM ChatResponse
delGroupChatItemsForMembers user gInfo ms items = do
assertDeletable gInfo items
assertUserGroupRole gInfo GRAdmin -- TODO GRModerator when most users migrate
@@ -2723,8 +2727,8 @@ processChatCommand' vr = \case
delGroupChatItems user gInfo items True
where
assertDeletable :: GroupInfo -> [CChatItem 'CTGroup] -> CM ()
- assertDeletable GroupInfo {membership = GroupMember {memberRole = membershipMemRole}} items =
- unless (all itemDeletable items) $ throwChatError CEInvalidChatItemDelete
+ assertDeletable GroupInfo {membership = GroupMember {memberRole = membershipMemRole}} items' =
+ unless (all itemDeletable items') $ throwChatError CEInvalidChatItemDelete
where
itemDeletable :: CChatItem 'CTGroup -> Bool
itemDeletable (CChatItem _ ChatItem {chatDir, meta = CIMeta {itemSharedMsgId}}) =
@@ -3742,8 +3746,8 @@ chatCommandP =
"/_delete member item #" *> (APIDeleteMemberChatItem <$> A.decimal <*> _strP),
"/_archive reports #" *> (APIArchiveReceivedReports <$> A.decimal),
"/_delete reports #" *> (APIDeleteReceivedReports <$> A.decimal <*> _strP <*> _strP),
- "/_reaction " *> (APIChatItemReaction <$> chatRefP <* A.space <*> A.decimal <* A.space <*> onOffP <* A.space <*> jsonP),
- "/_reaction members " *> (APIGetReactionMembers <$> A.decimal <* " #" <*> A.decimal <* A.space <*> A.decimal <* A.space <*> jsonP),
+ "/_reaction " *> (APIChatItemReaction <$> chatRefP <* A.space <*> A.decimal <* A.space <*> onOffP <* A.space <*> (knownReaction <$?> jsonP)),
+ "/_reaction members " *> (APIGetReactionMembers <$> A.decimal <* " #" <*> A.decimal <* A.space <*> A.decimal <* A.space <*> (knownReaction <$?> jsonP)),
"/_forward plan " *> (APIPlanForwardChatItems <$> chatRefP <*> _strP),
"/_forward " *> (APIForwardChatItems <$> chatRefP <* A.space <*> chatRefP <*> _strP <*> sendMessageTTLP),
"/_read user " *> (APIUserRead <$> A.decimal),
diff --git a/src/Simplex/Chat/Library/Internal.hs b/src/Simplex/Chat/Library/Internal.hs
index ea838206fe..3e96e1e496 100644
--- a/src/Simplex/Chat/Library/Internal.hs
+++ b/src/Simplex/Chat/Library/Internal.hs
@@ -274,7 +274,7 @@ uniqueMsgMentions maxMentions mentions = go M.empty S.empty 0
go acc seen n (name : rest)
| n >= maxMentions = acc
| otherwise = case M.lookup name mentions of
- Just mm@MsgMention {memberId} | S.notMember memberId seen ->
+ Just mm@MsgMention {memberId} | S.notMember memberId seen ->
go (M.insert name mm acc) (S.insert memberId seen) (n + 1) rest
_ -> go acc seen n rest
@@ -1312,7 +1312,7 @@ batchSendConnMessagesB _user conn msgFlags msgs_ = do
let batched_ = batchSndMessagesJSON msgs_
case L.nonEmpty batched_ of
Just batched' -> do
- let msgReqs = L.map (fmap (msgBatchReq conn msgFlags)) batched'
+ let msgReqs = L.map (fmap msgBatchReq_) batched'
delivered <- deliverMessagesB msgReqs
let msgs' = concat $ L.zipWith flattenMsgs batched' delivered
pqEnc = findLastPQEnc delivered
@@ -1320,6 +1320,9 @@ batchSendConnMessagesB _user conn msgFlags msgs_ = do
pure (msgs', pqEnc)
Nothing -> pure ([], Nothing)
where
+ msgBatchReq_ :: MsgBatch -> ChatMsgReq
+ msgBatchReq_ (MsgBatch batchBody sndMsgs) =
+ (conn, msgFlags, (vrValue batchBody, map (\SndMessage {msgId} -> msgId) sndMsgs))
flattenMsgs :: Either ChatError MsgBatch -> Either ChatError ([Int64], PQEncryption) -> [Either ChatError SndMessage]
flattenMsgs (Right (MsgBatch _ sndMsgs)) (Right _) = map Right sndMsgs
flattenMsgs (Right (MsgBatch _ sndMsgs)) (Left ce) = replicate (length sndMsgs) (Left ce)
@@ -1330,9 +1333,6 @@ batchSendConnMessagesB _user conn msgFlags msgs_ = do
batchSndMessagesJSON :: NonEmpty (Either ChatError SndMessage) -> [Either ChatError MsgBatch]
batchSndMessagesJSON = batchMessages maxEncodedMsgLength . L.toList
-msgBatchReq :: Connection -> MsgFlags -> MsgBatch -> ChatMsgReq
-msgBatchReq conn msgFlags (MsgBatch batchBody sndMsgs) = (conn, msgFlags, batchBody, map (\SndMessage {msgId} -> msgId) sndMsgs)
-
encodeConnInfo :: MsgEncodingI e => ChatMsgEvent e -> CM ByteString
encodeConnInfo chatMsgEvent = do
vr <- chatVersionRange
@@ -1358,7 +1358,7 @@ deliverMessage conn cmEventTag msgBody msgId = do
deliverMessage' :: Connection -> MsgFlags -> MsgBody -> MessageId -> CM (Int64, PQEncryption)
deliverMessage' conn msgFlags msgBody msgId =
- deliverMessages ((conn, msgFlags, msgBody, [msgId]) :| []) >>= \case
+ deliverMessages ((conn, msgFlags, (vrValue msgBody, [msgId])) :| []) >>= \case
r :| [] -> case r of
Right ([deliveryId], pqEnc) -> pure (deliveryId, pqEnc)
Right (deliveryIds, _) -> throwChatError $ CEInternalError $ "deliverMessage: expected 1 delivery id, got " <> show (length deliveryIds)
@@ -1366,45 +1366,45 @@ deliverMessage' conn msgFlags msgBody msgId =
rs -> throwChatError $ CEInternalError $ "deliverMessage: expected 1 result, got " <> show (length rs)
-- [MessageId] - SndMessage ids inside MsgBatch, or single message id
-type ChatMsgReq = (Connection, MsgFlags, MsgBody, [MessageId])
+type ChatMsgReq = (Connection, MsgFlags, (ValueOrRef MsgBody, [MessageId]))
deliverMessages :: NonEmpty ChatMsgReq -> CM (NonEmpty (Either ChatError ([Int64], PQEncryption)))
deliverMessages msgs = deliverMessagesB $ L.map Right msgs
deliverMessagesB :: NonEmpty (Either ChatError ChatMsgReq) -> CM (NonEmpty (Either ChatError ([Int64], PQEncryption)))
deliverMessagesB msgReqs = do
- msgReqs' <- liftIO compressBodies
+ msgReqs' <- if any connSupportsPQ msgReqs then liftIO compressBodies else pure msgReqs
sent <- L.zipWith prepareBatch msgReqs' <$> withAgent (`sendMessagesB` snd (mapAccumL toAgent Nothing msgReqs'))
lift . void $ withStoreBatch' $ \db -> map (updatePQSndEnabled db) (rights . L.toList $ sent)
lift . withStoreBatch $ \db -> L.map (bindRight $ createDelivery db) sent
where
+ connSupportsPQ = \case
+ Right (Connection {pqSupport = PQSupportOn, connChatVersion = v}, _, _) -> v >= pqEncryptionCompressionVersion
+ _ -> False
compressBodies =
- forME msgReqs $ \mr@(conn@Connection {pqSupport, connChatVersion = v}, msgFlags, msgBody, msgIds) ->
- runExceptT $ case pqSupport of
- -- we only compress messages when:
- -- 1) PQ support is enabled
- -- 2) version is compatible with compression
- -- 3) message is longer than max compressed size (as this function is not used for batched messages anyway)
- PQSupportOn | v >= pqEncryptionCompressionVersion && B.length msgBody > maxCompressedMsgLength -> do
+ forME msgReqs $ \(conn, msgFlags, (mbr, msgIds)) -> runExceptT $ do
+ mbr' <- case mbr of
+ VRValue i msgBody | B.length msgBody > maxCompressedMsgLength -> do
let msgBody' = compressedBatchMsgBody_ msgBody
when (B.length msgBody' > maxCompressedMsgLength) $ throwError $ ChatError $ CEException "large compressed message"
- pure (conn, msgFlags, msgBody', msgIds)
- _ -> pure mr
+ pure $ VRValue i msgBody'
+ v -> pure v
+ pure (conn, msgFlags, (mbr', msgIds))
toAgent prev = \case
- Right (conn@Connection {connId, pqEncryption}, msgFlags, msgBody, _msgIds) ->
+ Right (conn@Connection {connId, pqEncryption}, msgFlags, (mbr, _msgIds)) ->
let cId = case prev of
Just prevId | prevId == connId -> ""
_ -> aConnId conn
- in (Just connId, Right (cId, pqEncryption, msgFlags, msgBody))
+ in (Just connId, Right (cId, pqEncryption, msgFlags, mbr))
Left _ce -> (prev, Left (AP.INTERNAL "ChatError, skip")) -- as long as it is Left, the agent batchers should just step over it
prepareBatch (Right req) (Right ar) = Right (req, ar)
prepareBatch (Left ce) _ = Left ce -- restore original ChatError
prepareBatch _ (Left ae) = Left $ ChatErrorAgent ae Nothing
createDelivery :: DB.Connection -> (ChatMsgReq, (AgentMsgId, PQEncryption)) -> IO (Either ChatError ([Int64], PQEncryption))
- createDelivery db ((Connection {connId}, _, _, msgIds), (agentMsgId, pqEnc')) = do
+ createDelivery db ((Connection {connId}, _, (_, msgIds)), (agentMsgId, pqEnc')) = do
Right . (,pqEnc') <$> mapM (createSndMsgDelivery db (SndMsgDelivery {connId, agentMsgId})) msgIds
updatePQSndEnabled :: DB.Connection -> (ChatMsgReq, (AgentMsgId, PQEncryption)) -> IO ()
- updatePQSndEnabled db ((Connection {connId, pqSndEnabled}, _, _, _), (_, pqSndEnabled')) =
+ updatePQSndEnabled db ((Connection {connId, pqSndEnabled}, _, _), (_, pqSndEnabled')) =
case (pqSndEnabled, pqSndEnabled') of
(Just b, b') | b' /= b -> updatePQ
(Nothing, PQEncOn) -> updatePQ
@@ -1471,7 +1471,7 @@ sendGroupMessages_ _user gInfo@GroupInfo {groupId} members events = do
stored <- lift $ withStoreBatch (\db -> map (bindRight $ createPendingMsg db) pendingReqs)
when (length stored /= length pendingMemIds) $ logError "sendGroupMessages_: pendingMemIds and stored length mismatch"
-- Zip for easier access to results
- let sentTo = zipWith3 (\mId mReq r -> (mId, fmap (\(_, _, _, msgIds) -> msgIds) mReq, r)) sendToMemIds msgReqs delivered
+ let sentTo = zipWith3 (\mId mReq r -> (mId, fmap (\(_, _, (_, msgIds)) -> msgIds) mReq, r)) sendToMemIds msgReqs delivered
pending = zipWith3 (\mId pReq r -> (mId, fmap snd pReq, r)) pendingMemIds pendingReqs stored
pure (sndMsgs_, GroupSndResult {sentTo, pending, forwarded})
where
@@ -1495,24 +1495,36 @@ sendGroupMessages_ _user gInfo@GroupInfo {groupId} members events = do
mId = groupMemberId' m
mIds' = S.insert mId mIds
prepareMsgReqs :: MsgFlags -> NonEmpty (Either ChatError SndMessage) -> [(GroupMember, Connection)] -> [(GroupMember, Connection)] -> ([GroupMemberId], [Either ChatError ChatMsgReq])
- prepareMsgReqs msgFlags msgs_ toSendSeparate toSendBatched = do
- let batched_ = batchSndMessagesJSON msgs_
+ prepareMsgReqs msgFlags msgs toSendSeparate toSendBatched = do
+ let batched_ = batchSndMessagesJSON msgs
case L.nonEmpty batched_ of
Just batched' -> do
- let (memsSep, mreqsSep) = foldr' foldMsgs ([], []) toSendSeparate
- (memsBtch, mreqsBtch) = foldr' (foldBatches batched') ([], []) toSendBatched
+ let lenMsgs = length msgs
+ (memsSep, mreqsSep) = foldMembers lenMsgs sndMessageMBR msgs toSendSeparate
+ (memsBtch, mreqsBtch) = foldMembers (length batched' + lenMsgs) msgBatchMBR batched' toSendBatched
(memsSep <> memsBtch, mreqsSep <> mreqsBtch)
Nothing -> ([], [])
where
- foldMsgs :: (GroupMember, Connection) -> ([GroupMemberId], [Either ChatError ChatMsgReq]) -> ([GroupMemberId], [Either ChatError ChatMsgReq])
- foldMsgs (GroupMember {groupMemberId}, conn) memIdsReqs =
- foldr' (\msg_ (memIds, reqs) -> (groupMemberId : memIds, fmap sndMessageReq msg_ : reqs)) memIdsReqs msgs_
+ foldMembers :: forall a. Int -> (Maybe Int -> Int -> a -> (ValueOrRef MsgBody, [MessageId])) -> NonEmpty (Either ChatError a) -> [(GroupMember, Connection)] -> ([GroupMemberId], [Either ChatError ChatMsgReq])
+ foldMembers lastRef mkMb mbs mems = snd $ foldr' foldMsgBodies (lastMemIdx_, ([], [])) mems
where
- sndMessageReq :: SndMessage -> ChatMsgReq
- sndMessageReq SndMessage {msgId, msgBody} = (conn, msgFlags, msgBody, [msgId])
- foldBatches :: NonEmpty (Either ChatError MsgBatch) -> (GroupMember, Connection) -> ([GroupMemberId], [Either ChatError ChatMsgReq]) -> ([GroupMemberId], [Either ChatError ChatMsgReq])
- foldBatches batched' (GroupMember {groupMemberId}, conn) memIdsReqs =
- foldr' (\batch_ (memIds, reqs) -> (groupMemberId : memIds, fmap (msgBatchReq conn msgFlags) batch_ : reqs)) memIdsReqs batched'
+ lastMemIdx_ = let len = length mems in if len > 1 then Just len else Nothing
+ foldMsgBodies :: (GroupMember, Connection) -> (Maybe Int, ([GroupMemberId], [Either ChatError ChatMsgReq])) -> (Maybe Int, ([GroupMemberId], [Either ChatError ChatMsgReq]))
+ foldMsgBodies (GroupMember {groupMemberId}, conn) (memIdx_, memIdsReqs) =
+ (subtract 1 <$> memIdx_,) $ snd $ foldr' addBody (lastRef, memIdsReqs) mbs
+ where
+ addBody :: Either ChatError a -> (Int, ([GroupMemberId], [Either ChatError ChatMsgReq])) -> (Int, ([GroupMemberId], [Either ChatError ChatMsgReq]))
+ addBody mb (i, (memIds, reqs)) =
+ let req = (conn,msgFlags,) . mkMb memIdx_ i <$> mb
+ in (i - 1, (groupMemberId : memIds, req : reqs))
+ sndMessageMBR :: Maybe Int -> Int -> SndMessage -> (ValueOrRef MsgBody, [MessageId])
+ sndMessageMBR memIdx_ i SndMessage {msgId, msgBody} = (vrValue_ memIdx_ i msgBody, [msgId])
+ msgBatchMBR :: Maybe Int -> Int -> MsgBatch -> (ValueOrRef MsgBody, [MessageId])
+ msgBatchMBR memIdx_ i (MsgBatch batchBody sndMsgs) = (vrValue_ memIdx_ i batchBody, map (\SndMessage {msgId} -> msgId) sndMsgs)
+ vrValue_ memIdx_ i v = case memIdx_ of
+ Nothing -> VRValue Nothing v -- sending to one member, do not reference bodies
+ Just 1 -> VRValue (Just i) v
+ Just _ -> VRRef i
preparePending :: NonEmpty (Either ChatError SndMessage) -> [GroupMember] -> ([GroupMemberId], [Either ChatError (GroupMemberId, MessageId)])
preparePending msgs_ =
foldr' foldMsgs ([], [])
diff --git a/src/Simplex/Chat/Library/Subscriber.hs b/src/Simplex/Chat/Library/Subscriber.hs
index 902c19ed63..1530f8e5c4 100644
--- a/src/Simplex/Chat/Library/Subscriber.hs
+++ b/src/Simplex/Chat/Library/Subscriber.hs
@@ -274,7 +274,7 @@ processAgentMsgSndFile _corrId aFileId msg = do
map (\fileDescr -> (conn, (connOrGroupId, XMsgFileDescr {msgId = sharedMsgId, fileDescr}))) (L.toList $ splitFileDescr partSize rfdText)
toMsgReq :: (Connection, (ConnOrGroupId, ChatMsgEvent 'Json)) -> SndMessage -> ChatMsgReq
toMsgReq (conn, _) SndMessage {msgId, msgBody} =
- (conn, MsgFlags {notification = hasNotification XMsgFileDescr_}, msgBody, [msgId])
+ (conn, MsgFlags {notification = hasNotification XMsgFileDescr_}, (vrValue msgBody, [msgId]))
sendFileError :: FileError -> Text -> VersionRangeChat -> FileTransferMeta -> CM ()
sendFileError ferr err vr ft = do
logError $ "Sent file error: " <> err
diff --git a/src/Simplex/Chat/Protocol.hs b/src/Simplex/Chat/Protocol.hs
index 1e5815bab3..9c8c044630 100644
--- a/src/Simplex/Chat/Protocol.hs
+++ b/src/Simplex/Chat/Protocol.hs
@@ -425,6 +425,13 @@ data MsgReaction = MREmoji {emoji :: MREmojiChar} | MRUnknown {tag :: Text, json
emojiTag :: IsString a => a
emojiTag = "emoji"
+knownReaction :: MsgReaction -> Either String MsgReaction
+knownReaction = \case
+ r@MREmoji {} -> Right r
+ MRUnknown {} -> Left "unknown MsgReaction"
+
+-- parseJSON for MsgReaction parses unknown emoji reactions as MRUnknown with type "emoji",
+-- allowing to add new emojis in a backwards compatible way - UI shows them as ?
instance FromJSON MsgReaction where
parseJSON (J.Object v) = do
tag <- v .: "type"
diff --git a/src/Simplex/Chat/Store/SQLite/Migrations/agent_query_plans.txt b/src/Simplex/Chat/Store/SQLite/Migrations/agent_query_plans.txt
index c4f5007040..31bc2feb81 100644
--- a/src/Simplex/Chat/Store/SQLite/Migrations/agent_query_plans.txt
+++ b/src/Simplex/Chat/Store/SQLite/Migrations/agent_query_plans.txt
@@ -15,6 +15,20 @@ SEARCH s USING INTEGER PRIMARY KEY (rowid=?)
SEARCH c USING INTEGER PRIMARY KEY (rowid=?)
SEARCH f USING INTEGER PRIMARY KEY (rowid=?)
+Query:
+ SELECT
+ m.msg_type, m.msg_flags, m.msg_body, m.pq_encryption, m.internal_ts, m.internal_snd_id, s.previous_msg_hash,
+ s.retry_int_slow, s.retry_int_fast, s.msg_encrypt_key, s.padded_msg_len, sb.agent_msg
+ FROM messages m
+ JOIN snd_messages s ON s.conn_id = m.conn_id AND s.internal_id = m.internal_id
+ LEFT JOIN snd_message_bodies sb ON sb.snd_message_body_id = s.snd_message_body_id
+ WHERE m.conn_id = ? AND m.internal_id = ?
+
+Plan:
+SEARCH m USING PRIMARY KEY (conn_id=? AND internal_id=?)
+SEARCH s USING PRIMARY KEY (conn_id=?)
+SEARCH sb USING INTEGER PRIMARY KEY (rowid=?) LEFT-JOIN
+
Query:
SELECT
r.snd_file_chunk_replica_id, r.replica_id, r.replica_key, r.replica_status, r.delay, r.retries,
@@ -45,16 +59,6 @@ Query:
Plan:
SEARCH commands USING INDEX idx_commands_server_commands (host=? AND port=?)
-Query:
- SELECT m.msg_type, m.msg_flags, m.msg_body, m.pq_encryption, m.internal_ts, s.retry_int_slow, s.retry_int_fast
- FROM messages m
- JOIN snd_messages s ON s.conn_id = m.conn_id AND s.internal_id = m.internal_id
- WHERE m.conn_id = ? AND m.internal_id = ?
-
-Plan:
-SEARCH m USING PRIMARY KEY (conn_id=? AND internal_id=?)
-SEARCH s USING PRIMARY KEY (conn_id=?)
-
Query:
SELECT rcv_file_chunk_id, chunk_no, chunk_size, digest, tmp_path
FROM rcv_file_chunks
@@ -71,6 +75,17 @@ Query:
Plan:
SEARCH snd_file_chunks USING INDEX idx_snd_file_chunks_snd_file_id (snd_file_id=?)
+Query:
+ DELETE FROM snd_message_bodies
+ WHERE NOT EXISTS (SELECT 1 FROM snd_messages WHERE snd_message_body_id = ?)
+ AND snd_message_body_id = ?
+
+Plan:
+SEARCH snd_message_bodies USING INTEGER PRIMARY KEY (rowid=?)
+SCALAR SUBQUERY 1
+SEARCH snd_messages USING COVERING INDEX idx_snd_messages_snd_message_body_id (snd_message_body_id=?)
+SEARCH snd_messages USING COVERING INDEX idx_snd_messages_snd_message_body_id (snd_message_body_id=?)
+
Query:
SELECT
f.rcv_file_id, f.rcv_file_entity_id, f.user_id, c.rcv_file_chunk_id, c.chunk_no, c.chunk_size, c.digest, f.tmp_path, c.tmp_path,
@@ -184,6 +199,16 @@ SEARCH c USING INTEGER PRIMARY KEY (rowid=?)
SEARCH f USING INTEGER PRIMARY KEY (rowid=?)
USE TEMP B-TREE FOR ORDER BY
+Query:
+ SELECT rcpt_status, snd_message_body_id FROM snd_messages
+ WHERE NOT EXISTS (SELECT 1 FROM snd_message_deliveries WHERE conn_id = ? AND internal_id = ? AND failed = 0)
+ AND conn_id = ? AND internal_id = ?
+
+Plan:
+SEARCH snd_messages USING PRIMARY KEY (conn_id=?)
+SCALAR SUBQUERY 1
+SEARCH snd_message_deliveries USING COVERING INDEX idx_snd_message_deliveries_expired (conn_id=?)
+
Query:
SELECT rcv_file_entity_id, user_id, size, digest, key, nonce, chunk_size, prefix_path, tmp_path, save_path, save_file_key, save_file_nonce, status, deleted, redirect_id, redirect_entity_id, redirect_size, redirect_digest
FROM rcv_files
@@ -512,9 +537,9 @@ Plan:
Query:
INSERT INTO snd_messages
- ( conn_id, internal_snd_id, internal_id, internal_hash, previous_msg_hash)
+ ( conn_id, internal_snd_id, internal_id, internal_hash, previous_msg_hash, msg_encrypt_key, padded_msg_len, snd_message_body_id)
VALUES
- (?,?,?,?,?)
+ (?,?,?,?,?,?,?,?)
Plan:
SEARCH messages USING COVERING INDEX idx_messages_conn_id_internal_snd_id (conn_id=? AND internal_snd_id=?)
@@ -861,6 +886,10 @@ Plan:
Query: INSERT INTO snd_files (snd_file_entity_id, user_id, path, src_file_key, src_file_nonce, num_recipients, prefix_path, key, nonce, status, redirect_size, redirect_digest) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)
Plan:
+Query: INSERT INTO snd_message_bodies (agent_msg) VALUES (?) RETURNING snd_message_body_id
+Plan:
+SEARCH snd_messages USING COVERING INDEX idx_snd_messages_snd_message_body_id (snd_message_body_id=?)
+
Query: INSERT INTO snd_message_deliveries (conn_id, snd_queue_id, internal_id) VALUES (?, ?, ?)
Plan:
@@ -893,9 +922,9 @@ Query: SELECT conn_id FROM connections WHERE user_id = ?
Plan:
SEARCH connections USING COVERING INDEX idx_connections_user (user_id=?)
-Query: SELECT count(*) FROM snd_message_deliveries WHERE conn_id = ? AND internal_id = ? AND failed = 0
+Query: SELECT count(1) FROM snd_message_bodies
Plan:
-SEARCH snd_message_deliveries USING COVERING INDEX idx_snd_message_deliveries_expired (conn_id=?)
+SCAN snd_message_bodies
Query: SELECT deleted FROM snd_files WHERE snd_file_id = ?
Plan:
@@ -921,10 +950,6 @@ Query: SELECT ratchet_state, x3dh_pub_key_1, x3dh_pub_key_2, pq_pub_kem FROM rat
Plan:
SEARCH ratchets USING PRIMARY KEY (conn_id=?)
-Query: SELECT rcpt_internal_id, rcpt_status FROM snd_messages WHERE conn_id = ? AND internal_id = ?
-Plan:
-SEARCH snd_messages USING PRIMARY KEY (conn_id=?)
-
Query: SELECT rcv_file_id FROM rcv_files WHERE rcv_file_entity_id = ?
Plan:
SEARCH rcv_files USING COVERING INDEX sqlite_autoindex_rcv_files_1 (rcv_file_entity_id=?)
@@ -1089,6 +1114,10 @@ Query: UPDATE snd_messages SET retry_int_slow = ?, retry_int_fast = ? WHERE conn
Plan:
SEARCH snd_messages USING COVERING INDEX idx_snd_messages_conn_id_internal_id (conn_id=? AND internal_id=?)
+Query: UPDATE snd_messages SET snd_message_body_id = NULL WHERE conn_id = ? AND internal_id = ?
+Plan:
+SEARCH snd_messages USING COVERING INDEX idx_snd_messages_conn_id_internal_id (conn_id=? AND internal_id=?)
+
Query: UPDATE snd_queues SET snd_primary = ? WHERE conn_id = ?
Plan:
SEARCH snd_queues USING COVERING INDEX idx_snd_queue_id (conn_id=?)
diff --git a/src/Simplex/Chat/Util.hs b/src/Simplex/Chat/Util.hs
index 3f7d19fd6d..796b32778b 100644
--- a/src/Simplex/Chat/Util.hs
+++ b/src/Simplex/Chat/Util.hs
@@ -4,7 +4,7 @@
{-# LANGUAGE TupleSections #-}
{-# OPTIONS_GHC -Wno-orphans #-}
-module Simplex.Chat.Util (week, encryptFile, chunkSize, liftIOEither, shuffle) where
+module Simplex.Chat.Util (week, encryptFile, chunkSize, liftIOEither, shuffle, zipWith3') where
import Control.Exception (Exception)
import Control.Monad
@@ -15,6 +15,7 @@ import Control.Monad.Reader
import Data.Bifunctor (first)
import qualified Data.ByteString.Lazy as LB
import Data.List (sortBy)
+import Data.List.NonEmpty (NonEmpty (..))
import Data.Ord (comparing)
import Data.Time (NominalDiffTime)
import Data.Word (Word16)
@@ -52,6 +53,9 @@ shuffle xs = map snd . sortBy (comparing fst) <$> mapM (\x -> (,x) <$> random) x
random :: IO Word16
random = randomRIO (0, 65535)
+zipWith3' :: (a -> b -> c -> d) -> NonEmpty a -> NonEmpty b -> NonEmpty c -> NonEmpty d
+zipWith3' f ~(x :| xs) ~(y :| ys) ~(z :| zs) = f x y z :| zipWith3 f xs ys zs
+
liftIOEither :: (MonadIO m, MonadError e m) => IO (Either e a) -> m a
liftIOEither a = liftIO a >>= liftEither
{-# INLINE liftIOEither #-}
diff --git a/tests/ChatClient.hs b/tests/ChatClient.hs
index 3376204f14..124818765f 100644
--- a/tests/ChatClient.hs
+++ b/tests/ChatClient.hs
@@ -259,13 +259,13 @@ createTestChat ps cfg opts@ChatOpts {coreOptions} dbPrefix profile = do
Right db@ChatDatabase {chatStore, agentStore} <- createDatabase ps coreOptions dbPrefix
insertUser agentStore
Right user <- withTransaction chatStore $ \db' -> runExceptT $ createUserRecord db' (AgentUserId 1) profile True
- startTestChat_ db cfg opts user
+ startTestChat_ ps db cfg opts user
startTestChat :: TestParams -> ChatConfig -> ChatOpts -> String -> IO TestCC
startTestChat ps cfg opts@ChatOpts {coreOptions} dbPrefix = do
Right db@ChatDatabase {chatStore} <- createDatabase ps coreOptions dbPrefix
Just user <- find activeUser <$> withTransaction chatStore getUsers
- startTestChat_ db cfg opts user
+ startTestChat_ ps db cfg opts user
createDatabase :: TestParams -> CoreChatOpts -> String -> IO (Either MigrationError ChatDatabase)
#if defined(dbPostgres)
@@ -282,8 +282,8 @@ insertUser :: DBStore -> IO ()
insertUser st = withTransaction st (`DB.execute_` "INSERT INTO users (user_id) VALUES (1)")
#endif
-startTestChat_ :: ChatDatabase -> ChatConfig -> ChatOpts -> User -> IO TestCC
-startTestChat_ db cfg opts user = do
+startTestChat_ :: TestParams -> ChatDatabase -> ChatConfig -> ChatOpts -> User -> IO TestCC
+startTestChat_ TestParams {printOutput} db cfg opts user = do
t <- withVirtualTerminal termSettings pure
ct <- newChatTerminal t opts
cc <- newChatController db (Just user) cfg opts False
@@ -292,7 +292,7 @@ startTestChat_ db cfg opts user = do
atomically . unless (maintenance opts) $ readTVar (agentAsync cc) >>= \a -> when (isNothing a) retry
termQ <- newTQueueIO
termAsync <- async $ readTerminalOutput t termQ
- pure TestCC {chatController = cc, virtualTerminal = t, chatAsync, termAsync, termQ, printOutput = False}
+ pure TestCC {chatController = cc, virtualTerminal = t, chatAsync, termAsync, termQ, printOutput}
stopTestChat :: TestParams -> TestCC -> IO ()
stopTestChat ps TestCC {chatController = cc@ChatController {smpAgent, chatStore}, chatAsync, termAsync} = do
@@ -355,10 +355,10 @@ withTestChatOpts ps = withTestChatCfgOpts ps testCfg
withTestChatCfgOpts :: HasCallStack => TestParams -> ChatConfig -> ChatOpts -> String -> (HasCallStack => TestCC -> IO a) -> IO a
withTestChatCfgOpts ps cfg opts dbPrefix = bracket (startTestChat ps cfg opts dbPrefix) (\cc -> cc / 100000 >> stopTestChat ps cc)
--- enable output for specific chat controller, use like this:
--- withNewTestChat tmp "alice" aliceProfile $ \a -> withTestOutput a $ \alice -> do ...
-withTestOutput :: HasCallStack => TestCC -> (HasCallStack => TestCC -> IO a) -> IO a
-withTestOutput cc runTest = runTest cc {printOutput = True}
+-- enable output for specific test.
+-- usage: withTestOutput $ testChat2 aliceProfile bobProfile $ \alice bob -> do ...
+withTestOutput :: HasCallStack => (HasCallStack => TestParams -> IO ()) -> TestParams -> IO ()
+withTestOutput test ps = test ps {printOutput = True}
readTerminalOutput :: VirtualTerminal -> TQueue String -> IO ()
readTerminalOutput t termQ = do
@@ -404,12 +404,12 @@ testChatN cfg opts ps test params = do
(/) cc t = timeout t (getTermLine cc) `shouldReturn` Nothing
getTermLine :: HasCallStack => TestCC -> IO String
-getTermLine cc =
+getTermLine cc@TestCC {printOutput} =
5000000 `timeout` atomically (readTQueue $ termQ cc) >>= \case
Just s -> do
-- remove condition to always echo virtual terminal
-- when True $ do
- when (printOutput cc) $ do
+ when printOutput $ do
name <- userName cc
putStrLn $ name <> ": " <> s
pure s
diff --git a/tests/ChatTests/DBUtils/Postgres.hs b/tests/ChatTests/DBUtils/Postgres.hs
index 840c3d9a38..2b160379bb 100644
--- a/tests/ChatTests/DBUtils/Postgres.hs
+++ b/tests/ChatTests/DBUtils/Postgres.hs
@@ -1,5 +1,6 @@
module ChatTests.DBUtils.Postgres where
data TestParams = TestParams
- { tmpPath :: FilePath
+ { tmpPath :: FilePath,
+ printOutput :: Bool
}
diff --git a/tests/ChatTests/DBUtils/SQLite.hs b/tests/ChatTests/DBUtils/SQLite.hs
index b66e5ac851..2de94882cd 100644
--- a/tests/ChatTests/DBUtils/SQLite.hs
+++ b/tests/ChatTests/DBUtils/SQLite.hs
@@ -6,6 +6,7 @@ import Simplex.Messaging.TMap (TMap)
data TestParams = TestParams
{ tmpPath :: FilePath,
+ printOutput :: Bool,
chatQueryStats :: TMap Query SlowQueryStats,
agentQueryStats :: TMap Query SlowQueryStats
}
diff --git a/tests/ChatTests/Groups.hs b/tests/ChatTests/Groups.hs
index ca74e5e1bc..bdb3b443b3 100644
--- a/tests/ChatTests/Groups.hs
+++ b/tests/ChatTests/Groups.hs
@@ -83,6 +83,8 @@ chatGroupTests = do
it "send multiple messages api" testSendMulti
it "send multiple timed messages" testSendMultiTimed
it "send multiple messages (many chat batches)" testSendMultiManyBatches
+ xit'' "shared message body is reused" testSharedMessageBody
+ xit'' "shared batch body is reused" testSharedBatchBody
describe "async group connections" $ do
xit "create and join group when clients go offline" testGroupAsync
describe "group links" $ do
@@ -1602,7 +1604,7 @@ testGroupModerate =
testGroupModerateOwn :: HasCallStack => TestParams -> IO ()
testGroupModerateOwn =
- testChat2 aliceProfile bobProfile $
+ withTestOutput $ testChat2 aliceProfile bobProfile $
\alice bob -> do
createGroup2 "team" alice bob
-- disableFullDeletion2 "team" alice bob
@@ -1883,6 +1885,112 @@ testSendMultiManyBatches =
DB.query db "SELECT count(1) FROM chat_items WHERE chat_item_id > ?" (Only msgIdCath) :: IO [[Int]]
cathItemsCount `shouldBe` [[300]]
+testSharedMessageBody :: HasCallStack => TestParams -> IO ()
+testSharedMessageBody ps =
+ withNewTestChatOpts ps opts' "alice" aliceProfile $ \alice -> do
+ withSmpServer' serverCfg' $
+ withNewTestChatOpts ps opts' "bob" bobProfile $ \bob ->
+ withNewTestChatOpts ps opts' "cath" cathProfile $ \cath -> do
+ createGroup3 "team" alice bob cath
+
+ alice <##. "server disconnected localhost"
+ alice #> "#team hello"
+ bodiesCount1 <- withCCAgentTransaction alice $ \db ->
+ DB.query_ db "SELECT count(1) FROM snd_message_bodies" :: IO [[Int]]
+ bodiesCount1 `shouldBe` [[1]]
+
+ withSmpServer' serverCfg' $
+ withTestChatOpts ps opts' "bob" $ \bob ->
+ withTestChatOpts ps opts' "cath" $ \cath -> do
+ concurrentlyN_
+ [ alice <##. "server connected localhost",
+ do
+ bob <## "1 contacts connected (use /cs for the list)"
+ bob <## "#team: connected to server(s)",
+ do
+ cath <## "1 contacts connected (use /cs for the list)"
+ cath <## "#team: connected to server(s)"
+ ]
+ bob <# "#team alice> hello"
+ cath <# "#team alice> hello"
+ bodiesCount2 <- withCCAgentTransaction alice $ \db ->
+ DB.query_ db "SELECT count(1) FROM snd_message_bodies" :: IO [[Int]]
+ bodiesCount2 `shouldBe` [[0]]
+
+ alice <##. "server disconnected localhost"
+ where
+ tmp = tmpPath ps
+ serverCfg' =
+ smpServerCfg
+ { transports = [("7003", transport @TLS, False)],
+ storeLogFile = Just $ tmp <> "/smp-server-store.log",
+ storeMsgsFile = Just $ tmp <> "/smp-server-messages.log"
+ }
+ opts' =
+ testOpts
+ { coreOptions =
+ testCoreOpts
+ { smpServers = ["smp://LcJUMfVhwD8yxjAiSaDzzGF3-kLG4Uh0Fl_ZIjrRwjI=:server_password@localhost:7003"]
+ }
+ }
+
+testSharedBatchBody :: HasCallStack => TestParams -> IO ()
+testSharedBatchBody ps =
+ withNewTestChatOpts ps opts' "alice" aliceProfile $ \alice -> do
+ withSmpServer' serverCfg' $
+ withNewTestChatOpts ps opts' "bob" bobProfile $ \bob ->
+ withNewTestChatOpts ps opts' "cath" cathProfile $ \cath -> do
+ createGroup3 "team" alice bob cath
+
+ alice <##. "server disconnected localhost"
+
+ let cm i = "{\"msgContent\": {\"type\": \"text\", \"text\": \"message " <> show i <> "\"}}"
+ cms = intercalate ", " (map cm [1 .. 300 :: Int])
+ alice `send` ("/_send #1 json [" <> cms <> "]")
+ _ <- getTermLine alice
+ alice <## "300 messages sent"
+
+ bodiesCount1 <- withCCAgentTransaction alice $ \db ->
+ DB.query_ db "SELECT count(1) FROM snd_message_bodies" :: IO [[Int]]
+ bodiesCount1 `shouldBe` [[3]]
+
+ withSmpServer' serverCfg' $
+ withTestChatOpts ps opts' "bob" $ \bob ->
+ withTestChatOpts ps opts' "cath" $ \cath -> do
+ concurrentlyN_
+ [ alice <##. "server connected localhost",
+ do
+ bob <## "1 contacts connected (use /cs for the list)"
+ bob <## "#team: connected to server(s)",
+ do
+ cath <## "1 contacts connected (use /cs for the list)"
+ cath <## "#team: connected to server(s)"
+ ]
+ forM_ [(1 :: Int) .. 300] $ \i -> do
+ concurrently_
+ (bob <# ("#team alice> message " <> show i))
+ (cath <# ("#team alice> message " <> show i))
+ bodiesCount2 <- withCCAgentTransaction alice $ \db ->
+ DB.query_ db "SELECT count(1) FROM snd_message_bodies" :: IO [[Int]]
+ bodiesCount2 `shouldBe` [[0]]
+
+ alice <##. "server disconnected localhost"
+ where
+ tmp = tmpPath ps
+ serverCfg' =
+ smpServerCfg
+ { transports = [("7003", transport @TLS, False)],
+ storeLogFile = Just $ tmp <> "/smp-server-store.log",
+ storeMsgsFile = Just $ tmp <> "/smp-server-messages.log"
+ }
+ opts' =
+ testOpts
+ { coreOptions =
+ testCoreOpts
+ { smpServers = ["smp://LcJUMfVhwD8yxjAiSaDzzGF3-kLG4Uh0Fl_ZIjrRwjI=:server_password@localhost:7003"]
+ }
+ }
+
testGroupAsync :: HasCallStack => TestParams -> IO ()
testGroupAsync ps = do
withNewTestChat ps "alice" aliceProfile $ \alice -> do
diff --git a/tests/ChatTests/Profiles.hs b/tests/ChatTests/Profiles.hs
index ffdd84406c..4ab5e8fbd3 100644
--- a/tests/ChatTests/Profiles.hs
+++ b/tests/ChatTests/Profiles.hs
@@ -742,7 +742,7 @@ testBusinessAddress = testChat3 businessProfile aliceProfile {fullName = "Alice
(biz <# "#bob bob_1> hey there")
testBusinessUpdateProfiles :: HasCallStack => TestParams -> IO ()
-testBusinessUpdateProfiles = testChat4 businessProfile aliceProfile bobProfile cathProfile $
+testBusinessUpdateProfiles = withTestOutput $ testChat4 businessProfile aliceProfile bobProfile cathProfile $
\biz alice bob cath -> do
biz ##> "/ad"
cLink <- getContactLink biz True
@@ -756,8 +756,11 @@ testBusinessUpdateProfiles = testChat4 businessProfile aliceProfile bobProfile c
alice <## "#biz: joining the group..."
biz <# "#alice Welcome" -- auto reply
biz <## "#alice: alice_1 joined the group"
- alice <# "#biz biz_1> Welcome"
- alice <## "#biz: you joined the group"
+ alice
+ <###
+ [ WithTime "#biz biz_1> Welcome",
+ "#biz: you joined the group"
+ ]
biz #> "#alice hi"
alice <# "#biz biz_1> hi"
alice #> "#biz hello"
diff --git a/tests/ChatTests/Utils.hs b/tests/ChatTests/Utils.hs
index 7bb25dbe9b..9a3b560b29 100644
--- a/tests/ChatTests/Utils.hs
+++ b/tests/ChatTests/Utils.hs
@@ -33,6 +33,7 @@ import Simplex.Chat.Types
import Simplex.Chat.Types.Preferences
import Simplex.Chat.Types.Shared
import Simplex.FileTransfer.Client.Main (xftpClientCLI)
+import Simplex.Messaging.Agent.Client (agentClientStore)
import Simplex.Messaging.Agent.Store.AgentStore (maybeFirstRow, withTransaction)
import qualified Simplex.Messaging.Agent.Store.DB as DB
import qualified Simplex.Messaging.Crypto as C
@@ -556,6 +557,10 @@ withCCTransaction :: TestCC -> (DB.Connection -> IO a) -> IO a
withCCTransaction cc action =
withTransaction (chatStore $ chatController cc) $ \db -> action db
+withCCAgentTransaction :: TestCC -> (DB.Connection -> IO a) -> IO a
+withCCAgentTransaction TestCC {chatController = ChatController {smpAgent}} action =
+ withTransaction (agentClientStore smpAgent) $ \db -> action db
+
createCCNoteFolder :: TestCC -> IO ()
createCCNoteFolder cc =
withCCTransaction cc $ \db ->
diff --git a/tests/Test.hs b/tests/Test.hs
index 42dc5a0524..1d8d45ebb4 100644
--- a/tests/Test.hs
+++ b/tests/Test.hs
@@ -1,4 +1,5 @@
{-# LANGUAGE CPP #-}
+{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE TupleSections #-}
@@ -75,10 +76,10 @@ main = do
#endif
where
#if defined(dbPostgres)
- testBracket test = withSmpServer $ tmpBracket $ test . TestParams
+ testBracket test = withSmpServer $ tmpBracket $ \tmpPath -> test TestParams {tmpPath, printOutput = False}
#else
testBracket chatQueryStats agentQueryStats test =
- withSmpServer $ tmpBracket $ \tmpPath -> test TestParams {tmpPath, chatQueryStats, agentQueryStats}
+ withSmpServer $ tmpBracket $ \tmpPath -> test TestParams {tmpPath, chatQueryStats, agentQueryStats, printOutput = False}
#endif
tmpBracket test = do
t <- getSystemTime
diff --git a/website/langs/pl.json b/website/langs/pl.json
index d0674e3d8a..a25155e018 100644
--- a/website/langs/pl.json
+++ b/website/langs/pl.json
@@ -244,15 +244,17 @@
"stable-versions-built-by-f-droid-org": "Wersje stabilne zbudowane przez F-Droid.org",
"releases-to-this-repo-are-done-1-2-days-later": "Wydania na tym repo są kilka dni później",
"comparison-section-list-point-4a": "Przekaźniki SimpleX nie mogą skompromitować szyfrowania e2e. Zweryfikuj kody bezpieczeństwa aby złagodzić atak na kanał pozapasmowy",
- "hero-overlay-3-title": "Ocena bezpieczeństwa",
+ "hero-overlay-3-title": "Oceny bezpieczeństwa",
"hero-overlay-card-3-p-2": "Trail of Bits przejrzał komponenty kryptograficzne i sieciowe platformy SimpleX w listopadzie 2022. Przeczytaj więcej w ogłoszeniach.",
"jobs": "Dołącz do zespołu",
- "hero-overlay-3-textlink": "Ocena bezpieczeństwa",
+ "hero-overlay-3-textlink": "Analizy bezpieczeństwa",
"hero-overlay-card-3-p-1": "Trail of Bits jest wiodącą firmą konsultingową w zakresie bezpieczeństwa i technologii, której klientami są duże firmy technologiczne, agencje rządowe i główne projekty blockchain.",
"docs-dropdown-9": "Pliki do pobrania",
"please-enable-javascript": "Prosimy o włączenie JavaScript w celu wyświetlenia kodu QR.",
"please-use-link-in-mobile-app": "Prosimy o skorzystanie z linku w aplikacji mobilnej",
"docs-dropdown-10": "Przezroczystość",
"docs-dropdown-12": "Bezpieczeństwo",
- "docs-dropdown-11": "Często zadawane pytania"
+ "docs-dropdown-11": "Często zadawane pytania",
+ "hero-overlay-card-3-p-3": "Firma Trail of Bits dokonała analizy projektu kryptograficznego protokołów sieciowych SimpleX w lipcu 2024 roku. Dowiedz się więcej.",
+ "docs-dropdown-14": "SimpleX dla firm"
}