Compare commits

..

8 Commits

Author SHA1 Message Date
Evgeny Poberezkin 601b4cd619 6.1: ios 244, android 247, desktop 73 2024-10-12 12:08:16 +01:00
Evgeny d2b4b7bed6 ui: translations (#5031)
* Translated using Weblate (Spanish)

Currently translated at 100.0% (2089 of 2089 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/

* Translated using Weblate (Spanish)

Currently translated at 100.0% (1843 of 1843 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (2089 of 2089 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (1843 of 1843 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/

* Translated using Weblate (Czech)

Currently translated at 96.1% (2008 of 2089 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/cs/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2089 of 2089 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (1843 of 1843 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/hu/

* process localizations

---------

Co-authored-by: No name <CertainBot@users.noreply.hosted.weblate.org>
Co-authored-by: M1K4 <oomikaoo@gmail.com>
Co-authored-by: zenobit <zen@osowoso.xyz>
Co-authored-by: summoner001 <summoner@vivaldi.net>
2024-10-12 11:36:49 +01:00
Diogo fa95e4e9ad ios: dont show tails for moderated and blocked items unless revealed (#5030)
* ios: stop showing tails for non revealed moderated or blocked items

* simplify

---------

Co-authored-by: Evgeny Poberezkin <evgeny@poberezkin.com>
2024-10-12 10:59:51 +01:00
Evgeny Poberezkin 88fdc1ef75 core: 6.1.0.9 2024-10-12 10:56:24 +01:00
Evgeny 7ab6e44a6e directory service: list pending groups (#5029)
* directory service: list pending groups

* user commands to remove a group from directory and to set initial member role (TODO tests)

* tests
2024-10-12 10:33:45 +01:00
Evgeny Poberezkin 26986686ca ios: fix link previews to be enabled by default 2024-10-12 09:06:05 +01:00
spaced4ndy e76dc33cf0 core: associate new contact with all corresponding members on member contact re-creation (e.g. after it was merged to many members and then deleted) (#5028) 2024-10-11 20:47:54 +01:00
Evgeny aa2eafdacb blog: v6.1 announcement placeholder (#5004)
* blog: v6.1 announcement placeholder

* draft
2024-10-11 20:46:08 +01:00
24 changed files with 535 additions and 146 deletions
+1 -1
View File
@@ -1187,7 +1187,7 @@ struct ChatView: View {
allowMenu: $allowMenu
)
.environment(\.showTimestamp, itemSeparation.timestamp)
.modifier(ChatItemClipped(ci, tailVisible: itemSeparation.largeGap))
.modifier(ChatItemClipped(ci, tailVisible: itemSeparation.largeGap && (ci.meta.itemDeleted == nil || revealed)))
.contextMenu { menu(ci, range, live: composeState.liveMessage != nil) }
.accessibilityLabel("")
if ci.content.msgContent != nil && (ci.meta.itemDeleted == nil || revealed) && ci.reactions.count > 0 {
@@ -36,12 +36,7 @@ struct ChatItemClipped: ViewModifier {
.sndMsgContent,
.rcvMsgContent,
.rcvDecryptionError,
.sndDeleted,
.rcvDeleted,
.rcvIntegrityError,
.sndModerated,
.rcvModerated,
.rcvBlocked,
.invalidJSON:
let tail = if let mc = ci.content.msgContent, mc.isImageOrVideo && mc.text.isEmpty {
false
@@ -2246,7 +2246,7 @@ This is your own one-time link!</source>
</trans-unit>
<trans-unit id="Delete or moderate up to 200 messages." xml:space="preserve">
<source>Delete or moderate up to 200 messages.</source>
<target>Borrar o moderar hasta 200 mensajes.</target>
<target>Borra o modera hasta 200 mensajes a la vez.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete pending connection?" xml:space="preserve">
@@ -1438,7 +1438,7 @@
</trans-unit>
<trans-unit id="Choose _Migrate from another device_ on the new device and scan QR code." xml:space="preserve">
<source>Choose _Migrate from another device_ on the new device and scan QR code.</source>
<target>Válassza az _Átköltöztetés egy másik eszközről opciót az új eszközén és olvassa be a QR-kódot.</target>
<target>Válassza az _Átköltöztetés egy másik eszközről_ opciót az új eszközén és olvassa be a QR-kódot.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose file" xml:space="preserve">
@@ -1722,7 +1722,7 @@ Ez az Ön egyszer használható hivatkozása!</target>
</trans-unit>
<trans-unit id="Connection timeout" xml:space="preserve">
<source>Connection timeout</source>
<target>Kapcsolat időtúllépés</target>
<target>Időtúllépés kapcsolódáskor</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connection with desktop stopped" xml:space="preserve">
@@ -1977,7 +1977,7 @@ Ez az Ön egyszer használható hivatkozása!</target>
</trans-unit>
<trans-unit id="Database IDs and Transport isolation option." xml:space="preserve">
<source>Database IDs and Transport isolation option.</source>
<target>Adatbázis-azonosítók és átviteli izolációs beállítások.</target>
<target>Adatbázis-azonosítók és átvitel-izolációs beállítások.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Database downgrade" xml:space="preserve">
@@ -2356,7 +2356,7 @@ Ez az Ön egyszer használható hivatkozása!</target>
</trans-unit>
<trans-unit id="Details" xml:space="preserve">
<source>Details</source>
<target>Részletek</target>
<target>További részletek</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Develop" xml:space="preserve">
@@ -2391,7 +2391,7 @@ Ez az Ön egyszer használható hivatkozása!</target>
</trans-unit>
<trans-unit id="Different names, avatars and transport isolation." xml:space="preserve">
<source>Different names, avatars and transport isolation.</source>
<target>Különböző nevek, avatarok és átviteli izoláció.</target>
<target>Különböző nevek, profilképek és átvitel-izoláció.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Direct messages" xml:space="preserve">
@@ -4355,12 +4355,12 @@ Ez az Ön hivatkozása a(z) %@ csoporthoz!</target>
</trans-unit>
<trans-unit id="Message status" xml:space="preserve">
<source>Message status</source>
<target>Üzenet állapota</target>
<target>Üzenetállapot</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message status: %@" xml:space="preserve">
<source>Message status: %@</source>
<target>Üzenet állapota: %@</target>
<target>Üzenetállapot: %@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Message text" xml:space="preserve">
@@ -4955,12 +4955,12 @@ VPN engedélyezése szükséges.</target>
</trans-unit>
<trans-unit id="PING count" xml:space="preserve">
<source>PING count</source>
<target>PING számláló</target>
<target>PING-ek száma</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="PING interval" xml:space="preserve">
<source>PING interval</source>
<target>PING időköze</target>
<target>Időtartam a PING-ek között</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode" xml:space="preserve">
@@ -5316,12 +5316,12 @@ Engedélyezze a „Beállítások -&gt; Hálózat és kiszolgálók” menüben.
</trans-unit>
<trans-unit id="Protocol timeout" xml:space="preserve">
<source>Protocol timeout</source>
<target>Protokoll időtúllépés</target>
<target>Protokoll időtúllépése</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Protocol timeout per KB" xml:space="preserve">
<source>Protocol timeout per KB</source>
<target>Protokoll időkorlát KB-onként</target>
<target>Protokoll időtúllépése KB-onként</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Proxied" xml:space="preserve">
@@ -5446,7 +5446,7 @@ Engedélyezze a „Beállítások -&gt; Hálózat és kiszolgálók” menüben.
</trans-unit>
<trans-unit id="Received total" xml:space="preserve">
<source>Received total</source>
<target>Összes fogadott</target>
<target>Összes fogadott üzenet</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Receiving address will be changed to a different server. Address change will complete after sender comes online." xml:space="preserve">
@@ -6158,7 +6158,7 @@ Engedélyezze a „Beállítások -&gt; Hálózat és kiszolgálók” menüben.
</trans-unit>
<trans-unit id="Sent total" xml:space="preserve">
<source>Sent total</source>
<target>Összes elküldött</target>
<target>Összes elküldött üzenet</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sent via proxy" xml:space="preserve">
@@ -6373,7 +6373,7 @@ Engedélyezze a „Beállítások -&gt; Hálózat és kiszolgálók” menüben.
</trans-unit>
<trans-unit id="Show message status" xml:space="preserve">
<source>Show message status</source>
<target>Üzenet állapot megjelenítése</target>
<target>Üzenetállapot megjelenítése</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show percentage" xml:space="preserve">
@@ -6678,7 +6678,7 @@ Engedélyezze a „Beállítások -&gt; Hálózat és kiszolgálók” menüben.
</trans-unit>
<trans-unit id="TCP connection timeout" xml:space="preserve">
<source>TCP connection timeout</source>
<target>TCP kapcsolat időtúllépés</target>
<target>TCP kapcsolat időtúllépése</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="TCP_KEEPCNT" xml:space="preserve">
@@ -7072,12 +7072,12 @@ A funkció bekapcsolása előtt a rendszer felszólítja a képernyőzár beáll
</trans-unit>
<trans-unit id="Total" xml:space="preserve">
<source>Total</source>
<target>Összesen</target>
<target>Összes kapcsolat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Transport isolation" xml:space="preserve">
<source>Transport isolation</source>
<target>Kapcsolat izolációs mód</target>
<target>Átvitel-izoláció módja</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Transport sessions" xml:space="preserve">
@@ -6653,7 +6653,7 @@ Schakel dit in in *Netwerk en servers*-instellingen.</target>
</trans-unit>
<trans-unit id="Switch audio and video during the call." xml:space="preserve">
<source>Switch audio and video during the call.</source>
<target>Wissel tussen audio en video tijdens het gesprek.</target>
<target>Wisselen tussen audio en video tijdens het gesprek.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Switch chat profile for 1-time invitations." xml:space="preserve">
+30 -30
View File
@@ -223,11 +223,11 @@
E5DCF9712C590272007928CC /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = E5DCF96F2C590272007928CC /* Localizable.strings */; };
E5DCF9842C5902CE007928CC /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = E5DCF9822C5902CE007928CC /* Localizable.strings */; };
E5DCF9982C5906FF007928CC /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = E5DCF9962C5906FF007928CC /* InfoPlist.strings */; };
E5E997BF2CB9867B00D7A2FA /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E5E997BA2CB9867B00D7A2FA /* libgmpxx.a */; };
E5E997C02CB9867B00D7A2FA /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E5E997BB2CB9867B00D7A2FA /* libffi.a */; };
E5E997C12CB9867B00D7A2FA /* libHSsimplex-chat-6.1.0.8-CCpM4Xk6yH6LfY0I6dYuyA-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E5E997BC2CB9867B00D7A2FA /* libHSsimplex-chat-6.1.0.8-CCpM4Xk6yH6LfY0I6dYuyA-ghc9.6.3.a */; };
E5E997C22CB9867B00D7A2FA /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E5E997BD2CB9867B00D7A2FA /* libgmp.a */; };
E5E997C32CB9867B00D7A2FA /* libHSsimplex-chat-6.1.0.8-CCpM4Xk6yH6LfY0I6dYuyA.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E5E997BE2CB9867B00D7A2FA /* libHSsimplex-chat-6.1.0.8-CCpM4Xk6yH6LfY0I6dYuyA.a */; };
E5E997C92CBA891A00D7A2FA /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E5E997C42CBA891A00D7A2FA /* libgmpxx.a */; };
E5E997CA2CBA891A00D7A2FA /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E5E997C52CBA891A00D7A2FA /* libgmp.a */; };
E5E997CB2CBA891A00D7A2FA /* libHSsimplex-chat-6.1.0.9-3X73OucN19a19eYgUK66sv-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E5E997C62CBA891A00D7A2FA /* libHSsimplex-chat-6.1.0.9-3X73OucN19a19eYgUK66sv-ghc9.6.3.a */; };
E5E997CC2CBA891A00D7A2FA /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E5E997C72CBA891A00D7A2FA /* libffi.a */; };
E5E997CD2CBA891A00D7A2FA /* libHSsimplex-chat-6.1.0.9-3X73OucN19a19eYgUK66sv.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E5E997C82CBA891A00D7A2FA /* libHSsimplex-chat-6.1.0.9-3X73OucN19a19eYgUK66sv.a */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -612,11 +612,11 @@
E5DCF9A62C590731007928CC /* th */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = th; path = th.lproj/InfoPlist.strings; sourceTree = "<group>"; };
E5DCF9A72C590732007928CC /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist.strings; sourceTree = "<group>"; };
E5DCF9A82C590732007928CC /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/InfoPlist.strings; sourceTree = "<group>"; };
E5E997BA2CB9867B00D7A2FA /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; };
E5E997BB2CB9867B00D7A2FA /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; };
E5E997BC2CB9867B00D7A2FA /* libHSsimplex-chat-6.1.0.8-CCpM4Xk6yH6LfY0I6dYuyA-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.1.0.8-CCpM4Xk6yH6LfY0I6dYuyA-ghc9.6.3.a"; sourceTree = "<group>"; };
E5E997BD2CB9867B00D7A2FA /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
E5E997BE2CB9867B00D7A2FA /* libHSsimplex-chat-6.1.0.8-CCpM4Xk6yH6LfY0I6dYuyA.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.1.0.8-CCpM4Xk6yH6LfY0I6dYuyA.a"; sourceTree = "<group>"; };
E5E997C42CBA891A00D7A2FA /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; };
E5E997C52CBA891A00D7A2FA /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
E5E997C62CBA891A00D7A2FA /* libHSsimplex-chat-6.1.0.9-3X73OucN19a19eYgUK66sv-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.1.0.9-3X73OucN19a19eYgUK66sv-ghc9.6.3.a"; sourceTree = "<group>"; };
E5E997C72CBA891A00D7A2FA /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; };
E5E997C82CBA891A00D7A2FA /* libHSsimplex-chat-6.1.0.9-3X73OucN19a19eYgUK66sv.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.1.0.9-3X73OucN19a19eYgUK66sv.a"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -655,14 +655,14 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
E5E997C12CB9867B00D7A2FA /* libHSsimplex-chat-6.1.0.8-CCpM4Xk6yH6LfY0I6dYuyA-ghc9.6.3.a in Frameworks */,
E5E997C22CB9867B00D7A2FA /* libgmp.a in Frameworks */,
E5E997C32CB9867B00D7A2FA /* libHSsimplex-chat-6.1.0.8-CCpM4Xk6yH6LfY0I6dYuyA.a in Frameworks */,
E5E997BF2CB9867B00D7A2FA /* libgmpxx.a in Frameworks */,
E5E997C92CBA891A00D7A2FA /* libgmpxx.a in Frameworks */,
E5E997CB2CBA891A00D7A2FA /* libHSsimplex-chat-6.1.0.9-3X73OucN19a19eYgUK66sv-ghc9.6.3.a in Frameworks */,
E5E997CA2CBA891A00D7A2FA /* libgmp.a in Frameworks */,
5CE2BA93284534B000EC33A6 /* libiconv.tbd in Frameworks */,
E5E997CC2CBA891A00D7A2FA /* libffi.a in Frameworks */,
5CE2BA94284534BB00EC33A6 /* libz.tbd in Frameworks */,
E5E997C02CB9867B00D7A2FA /* libffi.a in Frameworks */,
CE38A29C2C3FCD72005ED185 /* SwiftyGif in Frameworks */,
E5E997CD2CBA891A00D7A2FA /* libHSsimplex-chat-6.1.0.9-3X73OucN19a19eYgUK66sv.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -739,11 +739,11 @@
5C764E5C279C70B7000C6508 /* Libraries */ = {
isa = PBXGroup;
children = (
E5E997BB2CB9867B00D7A2FA /* libffi.a */,
E5E997BD2CB9867B00D7A2FA /* libgmp.a */,
E5E997BA2CB9867B00D7A2FA /* libgmpxx.a */,
E5E997BC2CB9867B00D7A2FA /* libHSsimplex-chat-6.1.0.8-CCpM4Xk6yH6LfY0I6dYuyA-ghc9.6.3.a */,
E5E997BE2CB9867B00D7A2FA /* libHSsimplex-chat-6.1.0.8-CCpM4Xk6yH6LfY0I6dYuyA.a */,
E5E997C72CBA891A00D7A2FA /* libffi.a */,
E5E997C52CBA891A00D7A2FA /* libgmp.a */,
E5E997C42CBA891A00D7A2FA /* libgmpxx.a */,
E5E997C62CBA891A00D7A2FA /* libHSsimplex-chat-6.1.0.9-3X73OucN19a19eYgUK66sv-ghc9.6.3.a */,
E5E997C82CBA891A00D7A2FA /* libHSsimplex-chat-6.1.0.9-3X73OucN19a19eYgUK66sv.a */,
);
path = Libraries;
sourceTree = "<group>";
@@ -1899,7 +1899,7 @@
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 243;
CURRENT_PROJECT_VERSION = 244;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
@@ -1948,7 +1948,7 @@
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 243;
CURRENT_PROJECT_VERSION = 244;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
@@ -1989,7 +1989,7 @@
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 243;
CURRENT_PROJECT_VERSION = 244;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
@@ -2009,7 +2009,7 @@
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 243;
CURRENT_PROJECT_VERSION = 244;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
@@ -2034,7 +2034,7 @@
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 243;
CURRENT_PROJECT_VERSION = 244;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
GCC_OPTIMIZATION_LEVEL = s;
@@ -2071,7 +2071,7 @@
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 243;
CURRENT_PROJECT_VERSION = 244;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
ENABLE_CODE_COVERAGE = NO;
@@ -2108,7 +2108,7 @@
CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES;
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 243;
CURRENT_PROJECT_VERSION = 244;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
DYLIB_COMPATIBILITY_VERSION = 1;
@@ -2159,7 +2159,7 @@
CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES;
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 243;
CURRENT_PROJECT_VERSION = 244;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
DYLIB_COMPATIBILITY_VERSION = 1;
@@ -2210,7 +2210,7 @@
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CODE_SIGN_ENTITLEMENTS = "SimpleX SE/SimpleX SE.entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 243;
CURRENT_PROJECT_VERSION = 244;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
@@ -2244,7 +2244,7 @@
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CODE_SIGN_ENTITLEMENTS = "SimpleX SE/SimpleX SE.entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 243;
CURRENT_PROJECT_VERSION = 244;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
+1 -1
View File
@@ -85,7 +85,7 @@ public func registerGroupDefaults() {
GROUP_DEFAULT_INITIAL_RANDOM_DB_PASSPHRASE: false,
GROUP_DEFAULT_APP_LOCAL_AUTH_ENABLED: true,
GROUP_DEFAULT_ALLOW_SHARE_EXTENSION: false,
GROUP_DEFAULT_PRIVACY_LINK_PREVIEWS: false,
GROUP_DEFAULT_PRIVACY_LINK_PREVIEWS: true,
GROUP_DEFAULT_PRIVACY_ACCEPT_IMAGES: true,
GROUP_DEFAULT_PRIVACY_TRANSFER_IMAGES_INLINE: false,
GROUP_DEFAULT_PRIVACY_ENCRYPT_LOCAL_FILES: true,
+1 -1
View File
@@ -1501,7 +1501,7 @@
"Delete old database?" = "¿Eliminar base de datos antigua?";
/* No comment provided by engineer. */
"Delete or moderate up to 200 messages." = "Borrar o moderar hasta 200 mensajes.";
"Delete or moderate up to 200 messages." = "Borra o modera hasta 200 mensajes a la vez.";
/* No comment provided by engineer. */
"Delete pending connection?" = "¿Eliminar conexión pendiente?";
+17 -17
View File
@@ -948,7 +948,7 @@
"Chinese and Spanish interface" = "Kínai és spanyol kezelőfelület";
/* No comment provided by engineer. */
"Choose _Migrate from another device_ on the new device and scan QR code." = "Válassza az _Átköltöztetés egy másik eszközről opciót az új eszközén és olvassa be a QR-kódot.";
"Choose _Migrate from another device_ on the new device and scan QR code." = "Válassza az _Átköltöztetés egy másik eszközről_ opciót az új eszközén és olvassa be a QR-kódot.";
/* No comment provided by engineer. */
"Choose file" = "Fájl kiválasztása";
@@ -1155,7 +1155,7 @@
"Connection terminated" = "Kapcsolat megszakítva";
/* No comment provided by engineer. */
"Connection timeout" = "Kapcsolat időtúllépés";
"Connection timeout" = "Időtúllépés kapcsolódáskor";
/* No comment provided by engineer. */
"Connection with desktop stopped" = "A kapcsolat a számítógéppel megszakadt";
@@ -1341,7 +1341,7 @@
"Database ID: %d" = "Adatbázis-azonosító: %d";
/* No comment provided by engineer. */
"Database IDs and Transport isolation option." = "Adatbázis-azonosítók és átviteli izolációs beállítások.";
"Database IDs and Transport isolation option." = "Adatbázis-azonosítók és átvitel-izolációs beállítások.";
/* No comment provided by engineer. */
"Database is encrypted using a random passphrase, you can change it." = "Az adatbázis egy véletlenszerű jelmondattal van titkosítva, ami megváltoztatható.";
@@ -1576,7 +1576,7 @@
"Detailed statistics" = "Részletes statisztikák";
/* No comment provided by engineer. */
"Details" = "Részletek";
"Details" = "További részletek";
/* No comment provided by engineer. */
"Develop" = "Fejlesztés";
@@ -1600,7 +1600,7 @@
"different migration in the app/database: %@ / %@" = "különböző átköltöztetések az alkalmazásban/adatbázisban: %@ / %@";
/* No comment provided by engineer. */
"Different names, avatars and transport isolation." = "Különböző nevek, avatarok és átviteli izoláció.";
"Different names, avatars and transport isolation." = "Különböző nevek, profilképek és átvitel-izoláció.";
/* connection level description */
"direct" = "közvetlen";
@@ -2918,10 +2918,10 @@
"Message source remains private." = "Az üzenet forrása titokban marad.";
/* No comment provided by engineer. */
"Message status" = "Üzenet állapota";
"Message status" = "Üzenetállapot";
/* copied message info */
"Message status: %@" = "Üzenet állapota: %@";
"Message status: %@" = "Üzenetállapot: %@";
/* No comment provided by engineer. */
"Message text" = "Név és üzenet";
@@ -3388,10 +3388,10 @@
"Picture-in-picture calls" = "Kép a képben hívások";
/* No comment provided by engineer. */
"PING count" = "PING számláló";
"PING count" = "PING-ek száma";
/* No comment provided by engineer. */
"PING interval" = "PING időköze";
"PING interval" = "Időtartam a PING-ek között";
/* No comment provided by engineer. */
"Play from the chat list." = "Lejátszás a csevegési listából.";
@@ -3550,10 +3550,10 @@
"Protect your IP address from the messaging relays chosen by your contacts.\nEnable in *Network & servers* settings." = "Védje IP-címét az ismerősei által kiválasztott üzenet-közvetítő-kiszolgálókkal szemben.\nEngedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben.";
/* No comment provided by engineer. */
"Protocol timeout" = "Protokoll időtúllépés";
"Protocol timeout" = "Protokoll időtúllépése";
/* No comment provided by engineer. */
"Protocol timeout per KB" = "Protokoll időkorlát KB-onként";
"Protocol timeout per KB" = "Protokoll időtúllépése KB-onként";
/* No comment provided by engineer. */
"Proxied" = "Proxyzott";
@@ -3637,7 +3637,7 @@
"Received reply" = "Fogadott válaszüzenet-buborék színe";
/* No comment provided by engineer. */
"Received total" = "Összes fogadott";
"Received total" = "Összes fogadott üzenet";
/* No comment provided by engineer. */
"Receiving address will be changed to a different server. Address change will complete after sender comes online." = "A fogadó cím egy másik kiszolgálóra változik. A címváltoztatás a feladó online állapotba kerülése után fejeződik be.";
@@ -4101,7 +4101,7 @@
"Sent reply" = "Válaszüzenet-buborék színe";
/* No comment provided by engineer. */
"Sent total" = "Összes elküldött";
"Sent total" = "Összes elküldött üzenet";
/* No comment provided by engineer. */
"Sent via proxy" = "Proxyn keresztül küldve";
@@ -4239,7 +4239,7 @@
"Show last messages" = "Szobák utolsó üzeneteinek megjelenítése a listanézetben";
/* No comment provided by engineer. */
"Show message status" = "Üzenet állapot megjelenítése";
"Show message status" = "Üzenetállapot megjelenítése";
/* No comment provided by engineer. */
"Show percentage" = "Százalék megjelenítése";
@@ -4464,7 +4464,7 @@
"TCP connection" = "TCP kapcsolat";
/* No comment provided by engineer. */
"TCP connection timeout" = "TCP kapcsolat időtúllépés";
"TCP connection timeout" = "TCP kapcsolat időtúllépése";
/* No comment provided by engineer. */
"TCP_KEEPCNT" = "TCP_KEEPCNT";
@@ -4674,10 +4674,10 @@
"Toolbar opacity" = "Eszköztár átlátszatlansága";
/* No comment provided by engineer. */
"Total" = "Összesen";
"Total" = "Összes kapcsolat";
/* No comment provided by engineer. */
"Transport isolation" = "Kapcsolat izolációs mód";
"Transport isolation" = "Átvitel-izoláció módja";
/* No comment provided by engineer. */
"Transport sessions" = "Munkamenetek átvitele";
+1 -1
View File
@@ -4422,7 +4422,7 @@
"Support SimpleX Chat" = "Ondersteuning van SimpleX Chat";
/* No comment provided by engineer. */
"Switch audio and video during the call." = "Wissel tussen audio en video tijdens het gesprek.";
"Switch audio and video during the call." = "Wisselen tussen audio en video tijdens het gesprek.";
/* No comment provided by engineer. */
"Switch chat profile for 1-time invitations." = "Wijzig chatprofiel voor eenmalige uitnodigingen.";
@@ -667,8 +667,8 @@
<string name="callstate_received_confirmation">obdržel potvrzení…</string>
<string name="callstate_connecting">připojování…</string>
<string name="privacy_redefined">Nové vymezení soukromí</string>
<string name="first_platform_without_user_ids">1. platforma bez jakýchkoliv uživatelských identifikátorů soukromá již od návrhu.</string>
<string name="immune_to_spam_and_abuse">Odolná vůči spamu a zneužití</string>
<string name="first_platform_without_user_ids">Bez uživatelských identifikátorů</string>
<string name="immune_to_spam_and_abuse">Odolná vůči spamu</string>
<string name="to_protect_privacy_simplex_has_ids_for_queues">K ochraně soukromí, místo uživatelských ID užívaných všemi ostatními platformami, SimpleX používá identifikátory pro fronty zpráv, zvlášť pro každý z vašich kontaktů.</string>
<string name="many_people_asked_how_can_it_deliver"><![CDATA[Mnoho lidí se ptá: <i>když SimpleX nemá žádný identifikátor uživatelů, jak může doručovat zprávy\?</i>]]></string>
<string name="you_control_servers_to_receive_your_contacts_to_send"><![CDATA[Vy určujete, přes které servery <b>přijímat</b> zprávy, vaše kontakty servery, které používáte k zasílání zpráv.]]></string>
@@ -679,8 +679,8 @@
<string name="onboarding_notifications_mode_off">Když aplikace běží</string>
<string name="onboarding_notifications_mode_service">Okamžité</string>
<string name="onboarding_notifications_mode_off_desc"><![CDATA[<b>Nejlepší pro baterii</b>. Budete přijímat oznámení pouze když aplikace běží (žádná služba na pozadí).]]></string>
<string name="onboarding_notifications_mode_periodic_desc"><![CDATA[<b>Dobré pro baterii</b>. Služba na pozadí bude kontrolovat každých 10 minut. Můžete zmeškat hovory nebo naléhavé zprávy.]]></string>
<string name="onboarding_notifications_mode_service_desc"><![CDATA[<b>Využívá více baterie</b>! Služba na pozadí je spuštěna vždy - oznámení se zobrazí, jakmile jsou zprávy k dispozici.]]></string>
<string name="onboarding_notifications_mode_periodic_desc"><![CDATA[<b>Dobré pro baterii</b>. Apka bude kontrolovat zprávy každých 10 minut. Můžete zmeškat volání nebo naléhavé zprávy.]]></string>
<string name="onboarding_notifications_mode_service_desc"><![CDATA[<b>Využívá více baterie</b>! Apka stále běží na pozadí - oznámení se zobrazí okamžitě.]]></string>
<string name="paste_the_link_you_received">Vložte přijatý odkaz</string>
<string name="incoming_video_call">Příchozí videohovor</string>
<string name="incoming_audio_call">Příchozí zvukový hovor</string>
@@ -1582,7 +1582,7 @@
<string name="profile_update_event_member_name_changed">člen %1$s změněn na %2$s</string>
<string name="member_info_member_blocked">blokováno</string>
<string name="member_blocked_by_admin">Blokováno adminem</string>
<string name="share_text_created_at">Vytvořeno v: %s</string>
<string name="share_text_created_at">Vytvořen v: %s</string>
<string name="message_too_large">Zpráva příliš velká</string>
<string name="remote_host_disconnected_from"><![CDATA[Odpojeno z mobilu <b>%s</b> z důvodu: %s]]></string>
<string name="remote_host_was_disconnected_title">Spojení zastaveno</string>
@@ -1817,8 +1817,7 @@
<string name="v5_8_safe_files">Bezpečné přijímání souborů</string>
<string name="v5_8_chat_themes">Nové motivy chatu</string>
<string name="v5_8_private_routing">Soukromé směrování zpráv 🚀</string>
<string name="v5_8_private_routing_descr">Chraňte vaši IP adresu před relé zpráv, které jste si vybrali.
\nPovolit v nastavení *Síť &amp; servery*.</string>
<string name="v5_8_private_routing_descr">Chraňte vaši IP adresu před relé zpráv vašich kontaktů.\nPovolte v nastavení *Síť &amp; servery*.</string>
<string name="v5_8_message_delivery">Vylepšené doručování zpráv</string>
<string name="v5_8_persian_ui">Perské UI</string>
<string name="remote_ctrl_connection_stopped_desc">Prosím zkontrolujte, že mobil a desktop jsou připojeny ke stejné místní síti, a že stolní firewall umožňuje připojení.
@@ -1862,4 +1861,193 @@
<string name="cant_call_member_alert_title">Nelze zavolat člena skupiny</string>
<string name="deleted_chats">Archivované kontakty</string>
<string name="v6_0_your_contacts_descr">Archivujte kontakty pro pozdější chatování.</string>
<string name="smp_proxy_error_broker_host">Adresa předávacího serveru je nekompatibilní s nastavením sítě: %1$s.</string>
<string name="smp_proxy_error_broker_version">Verze předávacího serveru je nekompatibilní s nastavením sítě: %1$s.</string>
<string name="proxy_destination_error_broker_host">Cílová adresa serveru %1$s je nekompatibilní s nastavením přeposílajícího serveru %2$s.</string>
<string name="smp_proxy_error_connecting">Chyba připojení k přeposílajícímu serveru %1$s. Prosím, zkuste to později.</string>
<string name="proxy_destination_error_failed_to_connect">Předávacímu serveru %1$s se nepodařilo připojit k cílovému serveru %2$s. Prosím, zkuste to později.</string>
<string name="cannot_share_message_alert_text">Vybrané nastavení chatu zakazuje tuto zprávu.</string>
<string name="smp_servers_other">Jiné SMP servery</string>
<string name="smp_servers_configured">Nastavené SMP servery</string>
<string name="servers_info_subscriptions_connections_pending">Probíhá</string>
<string name="chunks_uploaded">Části nahrány</string>
<string name="n_file_errors">%1$d chuba souboru(ů):\n%2$s</string>
<string name="n_other_file_errors">%1$d jiná chyba souboru(ů).</string>
<string name="error_forwarding_messages">Chyba přeposílaní zpráv</string>
<string name="srv_error_host">Adresa serveru není kompatibilní s nastavením sítě.</string>
<string name="forward_alert_title_messages_to_forward">Předat %1$s zpráv(u)?</string>
<string name="forward_alert_title_nothing_to_forward">Nic k předání!</string>
<string name="forward_alert_forward_messages_without_files">Předat zprávy bez souborů?</string>
<string name="forward_files_failed_to_receive_desc">%1$d soubor(y) se nepodařilo stáhnout.</string>
<string name="forward_files_not_accepted_desc">%1$d soubor(y) nestažen(y).</string>
<string name="forward_files_missing_desc">%1$d soubor(y) smazán(y).</string>
<string name="forward_files_messages_deleted_after_selection_title">%1$s zprávy nepředány</string>
<string name="forward_files_not_accepted_receive_files">Stáhnout</string>
<string name="compose_forward_messages_n">Předávám %1$s zpráv</string>
<string name="forward_multiple">Předat zprávy…</string>
<string name="compose_save_messages_n">Uložit %1$s zpráv</string>
<string name="network_proxy_auth_mode_no_auth">Nepoužívat autorizaci s proxy.</string>
<string name="network_proxy_incorrect_config_title">Chyba ukládání proxy</string>
<string name="network_proxy_incorrect_config_desc">Ujistěte se, že nastavení proxy je správné.</string>
<string name="network_proxy_password">Heslo</string>
<string name="network_proxy_auth">Proxy autentizace</string>
<string name="app_check_for_updates_button_install">Instalovat aktualizace</string>
<string name="app_check_for_updates_button_open">Otevřít umístění souboru</string>
<string name="app_check_for_updates_download_started">Stahování aktualizace, nezavírejte aplikaci</string>
<string name="app_check_for_updates_installed_successfully_desc">Prosím restartujte aplikaci.</string>
<string name="app_check_for_updates_installed_successfully_title">Instalovány úspěšně</string>
<string name="app_check_for_updates_button_remind_later">Připomenout později</string>
<string name="app_check_for_updates_notice_title">Zkontrolovat aktualizace</string>
<string name="privacy_media_blur_radius_off">Vypnuto</string>
<string name="settings_section_title_chat_database">CHAT DATABÁZE</string>
<string name="member_info_member_disabled">vypnut</string>
<string name="message_queue_info_server_info">info fronty serveru: %1$s\n\nposlední obdržená zpráva: %2$s</string>
<string name="network_options_save_and_reconnect">Uložit a připojit znovu</string>
<string name="v6_0_chat_list_media">Hrajte ze seznamu chatů.</string>
<string name="servers_info_messages_received">Přijatých zprávy</string>
<string name="servers_info_reconnect_servers_title">Znovu připojit servery?</string>
<string name="completed">Kompletní</string>
<string name="secured">Zabezpečeno</string>
<string name="error_parsing_uri_desc">Prosím zkontrolujte, že SimpleX odkaz je správný.</string>
<string name="error_parsing_uri_title">Chybný odkaz</string>
<string name="proxy_destination_error_broker_version">Verze cílového serveru %1$s je nekompatibilní s nastavením přeposílajícího serveru %2$s.</string>
<string name="message_forwarded_title">Zpráva předána</string>
<string name="keep_conversation">Udržujte konverzaci</string>
<string name="only_delete_conversation">Jen smazat konverzaci</string>
<string name="confirm_delete_contact_question">Potvrdit smazání kontaktu?</string>
<string name="delete_contact_cannot_undo_warning">Kontakt bude smazán - nelze vrátit!</string>
<string name="conversation_deleted">Konverzace odstraněna!</string>
<string name="paste_link">Vložit odkaz</string>
<string name="chat_database_exported_title">Chat databáze exportována</string>
<string name="cant_send_message_to_member_alert_title">Členu skupiny nelze odeslat zprávu</string>
<string name="calls_prohibited_ask_to_enable_calls_alert_text">Požádejte váš kontakt ať povolí volání.</string>
<string name="color_sent_quote">Odeslaných odpovědí</string>
<string name="wallpaper_scale">Škálovat</string>
<string name="wallpaper_scale_fit">Přizpůsobit</string>
<string name="v6_0_privacy_blur">Rozmazání pro lepší soukromí.</string>
<string name="v6_0_connect_faster_descr">Připojte se k vašim přátelům rychleji.</string>
<string name="v6_0_delete_many_messages_descr">Smazat až 20 zpráv najednou.</string>
<string name="v6_0_increase_font_size">Zvětšit velikost písma.</string>
<string name="v6_0_connection_servers_status_descr">Stav připojení a serverů.</string>
<string name="v6_0_connection_servers_status">Kontrolujte svou síť</string>
<string name="servers_info_sessions_errors">Chyby</string>
<string name="servers_info_sessions_connected">Připojen</string>
<string name="servers_info_sessions_connecting">Připojování</string>
<string name="servers_info_connected_servers_section_header">Připojené servery</string>
<string name="servers_info_previously_connected_servers_section_header">Dříve připojené servery</string>
<string name="acknowledged">Potvrzeno</string>
<string name="duplicates_label">duplikáty</string>
<string name="deleted">Smazán</string>
<string name="open_server_settings_button">Otevřít nastavení serveru</string>
<string name="v6_0_new_chat_experience">Nový zážitek z chatu 🎉</string>
<string name="v6_0_new_media_options">Nové možnosti médií</string>
<string name="new_message">Nová zpráva</string>
<string name="scan_paste_link">Skenovat / Vložit odkaz</string>
<string name="no_filtered_contacts">Žádné filtrované kontakty</string>
<string name="error_initializing_web_view_wrong_arch">Chyba inicializace WebView. Ujistěte se, že máte nainstalován WebView podporující architekturu arm64.\nChyba: %s</string>
<string name="v6_0_private_routing_descr">Chrání vaši IP adresu a připojení.</string>
<string name="forward_files_messages_deleted_after_selection_desc">Zprávy byly odstraněny poté, co jste je vybrali.</string>
<string name="network_session_mode_session_description">Nové přihlašovací údaje SOCKS budou použity pokaždé, když zapnete aplikaci.</string>
<string name="network_session_mode_server_description">Nové přihlašovací údaje SOCKS budou použity pro každý server.</string>
<string name="servers_info_reconnect_servers_message">Znovu připojte všechny připojené servery pro vynucení doručení. Využívá další provoz.</string>
<string name="reset_all_hints">Resetovat všechny tipy</string>
<string name="forward_files_in_progress_desc">%1$d soubor(y) stále stahuji.</string>
<string name="v6_1_message_dates_descr">Lepší datování zpráv.</string>
<string name="v6_1_better_security">Lepší zabezpečení ✅</string>
<string name="chunks_deleted">Části odstraněny</string>
<string name="info_view_connect_button">připojení</string>
<string name="current_user">Aktuální profil</string>
<string name="servers_info_reconnect_server_error">Chyba znovu připojení serveru</string>
<string name="servers_info_reconnect_servers_error">Chyba při opětovném připojování serverů</string>
<string name="servers_info_reconnect_server_message">Znovu připojte server pro vynucení doručení. Využívá další provoz.</string>
<string name="servers_info_modal_error_title">Chyba</string>
<string name="delete_messages_cannot_be_undone_warning">Zprávy budou smazány - nelze vrátit!</string>
<string name="delete_without_notification">Smazat bez upozornění</string>
<string name="info_view_search_button">hledat</string>
<string name="switching_profile_error_title">Chyba přepínání profilu</string>
<string name="select_chat_profile">Vyberte chat profil</string>
<string name="info_view_message_button">zpráva</string>
<string name="info_view_open_button">otevřít</string>
<string name="contact_deleted">Kontakt smazán!</string>
<string name="member_info_member_inactive">neaktivní</string>
<string name="servers_info_details">Detaily</string>
<string name="servers_info_reset_stats">Resetovat všechny statistiky</string>
<string name="please_try_later">Prosím zkuste později.</string>
<string name="private_routing_error">Chyba soukromého směrování</string>
<string name="network_error_broker_host_desc">Adresa serveru není kompatibilní s nastavením sítě: %1$s.</string>
<string name="member_inactive_title">Člen neaktivní</string>
<string name="member_inactive_desc">Zpráva může být doručena později až bude člen aktivní.</string>
<string name="message_forwarded_desc">Zatím bez přímého spojení, zpráva je předána adminem.</string>
<string name="cant_call_contact_connecting_wait_alert_text">Připojování ke kontaktu, počkejte nebo se podívejte později!</string>
<string name="cant_call_contact_deleted_alert_text">Kontakt odstraněn.</string>
<string name="deletion_errors">Chyby mazání</string>
<string name="servers_info_detailed_statistics">Podrobné statistiky</string>
<string name="chunks_downloaded">Části staženy</string>
<string name="network_session_mode_server">Server</string>
<string name="network_smp_proxy_fallback_allow_protected_description">Odesílat zprávy přímo, když je IP adresa chráněna a váš nebo cílový server nepodporuje soukromé směrování.</string>
<string name="network_smp_proxy_fallback_allow_description">Odeslat zprávy přímo, když váš nebo cílový server nepodporuje soukromé směrování.</string>
<string name="app_check_for_updates">Zkontrolovat aktualizace</string>
<string name="app_check_for_updates_notice_disable">Vypnout</string>
<string name="app_check_for_updates_disabled">Vypnut</string>
<string name="app_check_for_updates_button_download">Stáhnout %s (%s)</string>
<string name="invite_friends_short">Pozvat</string>
<string name="create_address_button">Vytvořit</string>
<string name="settings_message_shape_corner">Roh</string>
<string name="settings_section_title_message_shape">Tvar zpráv</string>
<string name="chat_database_exported_continue">Pokračovat</string>
<string name="call_desktop_permission_denied_chrome">Klikněte na info tlačítko blízko pole adresy, pro použití mikrofonu.</string>
<string name="call_desktop_permission_denied_safari">Otevřete nastavení Safari / Webové stránky / mikrofon, vyberte možnost Povolit pro localhost.</string>
<string name="appearance_font_size">Velikost písma</string>
<string name="v6_0_upgrade_app_descr">Stáhnout nové verze z GitHubu.</string>
<string name="v6_0_reachable_chat_toolbar">Dosažitelný panel nástrojů chatu</string>
<string name="migrate_from_device_remove_archive_question">Odebrat archiv?</string>
<string name="servers_info_files_tab">Soubory</string>
<string name="servers_info_messages_sent">Odeslaných zpráv</string>
<string name="servers_info_downloaded">Staženo</string>
<string name="servers_info_reconnect_server_title">Znovu připojit server?</string>
<string name="decryption_errors">chyba dešifrování</string>
<string name="v6_1_better_calls">Lepší volání</string>
<string name="v6_1_better_user_experience">Větší přívětivost</string>
<string name="v6_1_customizable_message_descr">Přizpůsobitelný tvar zpráv.</string>
<string name="v6_1_delete_many_messages_descr">Smazat nebo moderovat až 200 zpráv.</string>
<string name="v6_1_forward_many_messages_descr">Předat až 20 zpráv najednou.</string>
<string name="servers_info_missing">Žádné info, zkuste načíst znovu</string>
<string name="servers_info">Informace o serverech</string>
<string name="downloaded_files">Stažené soubory</string>
<string name="download_errors">Chyby stahování</string>
<string name="servers_info_reset_stats_alert_error_title">Chyba resetování statistik</string>
<string name="servers_info_detailed_statistics_received_messages_header">Přijaté zprávy</string>
<string name="servers_info_detailed_statistics_received_total">Přijato celkem</string>
<string name="servers_info_detailed_statistics_receive_errors">Chyb přijmutí</string>
<string name="servers_info_reconnect_all_servers_button">Připojte znovu všechny servery</string>
<string name="servers_info_reset_stats_alert_confirm">Reset</string>
<string name="servers_info_reset_stats_alert_title">Resetovat všechny statistiky?</string>
<string name="servers_info_detailed_statistics_sent_messages_header">Odeslané zprávy</string>
<string name="servers_info_detailed_statistics_sent_messages_total">Odeslaných celkem</string>
<string name="server_address">Adresa serveru</string>
<string name="one_hand_ui">Dosažitelný panel nástrojů chatu</string>
<string name="acknowledgement_errors">Chyba potvrzení</string>
<string name="connections">Připojení</string>
<string name="created">Vytvořen</string>
<string name="expired_label">prošlý</string>
<string name="other_label">jiné</string>
<string name="other_errors">jiné chyby</string>
<string name="reconnect">Znovu připojit</string>
<string name="send_errors">Chyby odesílání</string>
<string name="sent_directly">Odesláno přímo</string>
<string name="sent_via_proxy">Odeslaných přes proxy</string>
<string name="delete_members_messages__question">Odstranit %d zpráv členů?</string>
<string name="delete_messages_mark_deleted_warning">Zprávy budou označeny pro smazání. Příjemci budou moci tyto zprávy odhalit.</string>
<string name="select_verb">Vybrat</string>
<string name="compose_message_placeholder">Zpráva</string>
<string name="selected_chat_items_nothing_selected">Nic nevybráno</string>
<string name="selected_chat_items_selected_n">Vybrány %d</string>
<string name="privacy_media_blur_radius_medium">Střední</string>
<string name="servers_info_subscriptions_section_header">Příjem zpráv</string>
<string name="xftp_servers_configured">Nastavené XFTP servery</string>
<string name="media_and_file_servers">Servery médií a souborů</string>
<string name="message_servers">Servery zpráv</string>
<string name="xftp_servers_other">Jiné FXTP servery</string>
<string name="action_button_add_members">Pozvat</string>
<string name="cant_call_member_send_message_alert_text">Pošlete zprávu pro povolení volání.</string>
</resources>
@@ -2126,6 +2126,6 @@
<string name="v6_1_better_security_descr">Protocolos de SimpleX auditados por Trail of Bits.</string>
<string name="v6_1_better_calls_descr">Intercambia audio y video durante la llamada.</string>
<string name="v6_1_better_security">Seguridad mejorada ✅</string>
<string name="v6_1_delete_many_messages_descr">Borrar o moderar hasta 200 mensajes.</string>
<string name="v6_1_delete_many_messages_descr">Borra o modera hasta 200 mensajes a la vez.</string>
<string name="v6_1_switch_chat_profile_descr">Cambia el perfil de chat para invitaciones de un solo uso.</string>
</resources>
@@ -219,7 +219,7 @@
<string name="connecting_to_desktop">Kapcsolódás a számítógéphez</string>
<string name="network_session_mode_entity">Kapcsolat</string>
<string name="correct_name_to">Név helyesbítése erre: %s?</string>
<string name="connection_timeout">Kapcsolat időtúllépés</string>
<string name="connection_timeout">Időtúllépés kapcsolódáskor</string>
<string name="connect_with_contact_name_question">Kapcsolódás %1$s által?</string>
<string name="create_profile_button">Létrehozás</string>
<string name="contact_preferences">Ismerős beállításai</string>
@@ -357,7 +357,7 @@
<string name="database_encryption_will_be_updated_in_settings">Adatbázis titkosítási jelmondat frissül és eltárolásra kerül a beállításokban.</string>
<string name="info_row_database_id">Adatbázis-azonosító</string>
<string name="share_text_database_id">Adatbázis-azonosító: %d</string>
<string name="developer_options">Adatbázis-azonosítók és átviteli izolációs beállítások.</string>
<string name="developer_options">Adatbázis-azonosítók és átvitel-izolációs beállítások.</string>
<string name="database_encryption_will_be_updated">Az adatbázis-titkosítási jelmondat megváltoztatásra és mentésre kerül a Keystore-ban.</string>
<string name="database_will_be_encrypted_and_passphrase_stored_in_settings">Az adatbázis titkosításra kerül és a jelmondat eltárolásra a beállításokban.</string>
<string name="smp_servers_delete_server">Kiszolgáló törlése</string>
@@ -677,7 +677,7 @@
<string name="if_you_cannot_meet_in_person_show_QR_in_video_call_or_via_another_channel"><![CDATA[Ha nem tud személyesen találkozni, <b>mutassa meg a QR-kódot a videohívásban</b>, vagy ossza meg a hivatkozást.]]></string>
<string name="network_disable_socks_info">Megerősítés esetén az üzenetküldő-kiszolgálók látni fogják az IP-címét és a szolgáltatóját azt, hogy mely kiszolgálókhoz kapcsolódik.</string>
<string name="image_will_be_received_when_contact_completes_uploading">A kép akkor érkezik meg, amikor a küldője befejezte annak feltöltését.</string>
<string name="desktop_scan_QR_code_from_app_via_scan_QR_code"><![CDATA[💻 számítógép: a megjelenített QR-kód beolvasása az alkalmazásból, a <b>QR kód beolvasásával</b>.]]></string>
<string name="desktop_scan_QR_code_from_app_via_scan_QR_code"><![CDATA[💻 számítógép: a megjelenített QR-kód beolvasása az alkalmazásból, a <b>QR-kód beolvasásával</b>.]]></string>
<string name="if_you_received_simplex_invitation_link_you_can_open_in_browser">A kapott SimpleX Chat-meghívó-hivatkozását megnyithatja a böngészőjében:</string>
<string name="if_you_enter_self_destruct_code">Ha az alkalmazás megnyitásakor megadja az önmegsemmisítő jelkódot:</string>
<string name="found_desktop">Megtalált számítógép</string>
@@ -686,7 +686,7 @@
<string name="create_chat_profile">Csevegési profil létrehozása</string>
<string name="immune_to_spam_and_abuse">Levélszemét elleni védelem</string>
<string name="disconnect_remote_hosts">Hordozható eszközök leválasztása</string>
<string name="v4_5_multiple_chat_profiles_descr">Különböző nevek, avatarok és átviteli izoláció.</string>
<string name="v4_5_multiple_chat_profiles_descr">Különböző nevek, profilképek és átvitel-izoláció.</string>
<string name="if_you_choose_to_reject_the_sender_will_not_be_notified">Elutasítás esetén a feladó NEM kap értesítést.</string>
<string name="icon_descr_expand_role">Szerepkörválasztás bővítése</string>
<string name="image_will_be_received_when_contact_is_online">A kép akkor érkezik meg, amikor a küldője elérhető lesz, várjon, vagy ellenőrizze később!</string>
@@ -801,7 +801,7 @@
<string name="v4_5_multiple_chat_profiles">Több csevegőprofil</string>
<string name="marked_deleted_description">törlésre jelölve</string>
<string name="user_mute">Némítás</string>
<string name="link_a_mobile">Egy hordozható eszköz társítása</string>
<string name="link_a_mobile">Hordozható eszköz társítása</string>
<string name="settings_notifications_mode_title">Értesítési szolgáltatás</string>
<string name="only_group_owners_can_enable_voice">Csak a csoporttulajdonosok engedélyezhetik a hangüzenetek küldését.</string>
<string name="only_client_devices_store_contacts_groups_e2e_encrypted_messages"><![CDATA[Csak az alkalmazások tárolják a felhasználó-profilokat, ismerősöket, csoportokat és a <b>2 rétegű végpontok közötti titkosítással</b> küldött üzeneteket.]]></string>
@@ -893,13 +893,13 @@
<string name="add_contact_or_create_group">Új csevegés kezdése</string>
<string name="opensource_protocol_and_code_anybody_can_run_servers">Bárki üzemeltethet kiszolgálókat.</string>
<string name="rcv_group_event_open_chat">Megnyitás</string>
<string name="network_option_protocol_timeout">Protokoll időtúllépés</string>
<string name="network_option_protocol_timeout">Protokoll időtúllépése</string>
<string name="secret_text">titkos</string>
<string name="settings_notification_preview_mode_title">Értesítés előnézete</string>
<string name="callstate_waiting_for_confirmation">várakozás a visszaigazolásra…</string>
<string name="stop_file__action">Fájl megállítása</string>
<string name="description_via_group_link">a csoporthivatkozáson keresztül</string>
<string name="network_option_ping_interval">PING időköze</string>
<string name="network_option_ping_interval">Időtartam a PING-ek között</string>
<string name="send_disappearing_message">Eltűnő üzenet küldése</string>
<string name="self_destruct_passcode">Önmegsemmisítési jelkód</string>
<string name="save_and_update_group_profile">Mentés és a csoportprofil frissítése</string>
@@ -984,7 +984,7 @@
<string name="unlink_desktop_question">Számítógép leválasztása?</string>
<string name="voice_messages_prohibited">A hangüzenetek le vannak tilva!</string>
<string name="compose_send_direct_message_to_connect">Közvetlen üzenet küldése a kapcsolódáshoz</string>
<string name="network_option_ping_count">PING számláló</string>
<string name="network_option_ping_count">PING-ek száma</string>
<string name="show_developer_options">Fejlesztői beállítások megjelenítése</string>
<string name="rcv_group_event_1_member_connected">%s kapcsolódott</string>
<string name="theme_system">Rendszer</string>
@@ -1124,7 +1124,7 @@
<string name="settings_section_title_use_from_desktop">Társítás számítógéppel</string>
<string name="settings_section_title_you">PROFIL</string>
<string name="network_proxy_port">port %d</string>
<string name="to_connect_via_link_title">Kapcsolódás hivatkozáson keresztül</string>
<string name="to_connect_via_link_title">Kapcsolódás egy hivatkozáson keresztül</string>
<string name="share_address">Cím megosztása</string>
<string name="smp_servers_scan_qr">A kiszolgáló QR-kódjának beolvasása</string>
<string name="stop_chat_confirmation">Megállítás</string>
@@ -1279,7 +1279,7 @@
<string name="use_simplex_chat_servers__question">SimpleX Chat-kiszolgálók használata?</string>
<string name="unhide_chat_profile">Csevegési profil felfedése</string>
<string name="v5_0_large_files_support">Videók és fájlok 1Gb méretig</string>
<string name="network_option_tcp_connection_timeout">TCP kapcsolat időtúllépés</string>
<string name="network_option_tcp_connection_timeout">TCP kapcsolat időtúllépése</string>
<string name="connect__your_profile_will_be_shared">A(z) %1$s nevű profiljának SimpleX-címe megosztásra fog kerülni.</string>
<string name="you_are_already_connected_to_vName_via_this_link">Ön már kapcsolódva van ehhez: %1$s.</string>
<string name="your_current_chat_database_will_be_deleted_and_replaced_with_the_imported_one">Jelenlegi csevegési adatbázis TÖRLÉSRE és FELCSERÉLÉSRE kerül az importált által!
@@ -1368,7 +1368,7 @@
<string name="connect_plan_you_are_already_joining_the_group_vName"><![CDATA[A csatlakozás már folyamatban van a(z) <b>%1$s</b> nevű csoporthoz.]]></string>
<string name="onboarding_notifications_mode_off">Amikor az alkalmazás fut</string>
<string name="alert_title_cant_invite_contacts_descr">Inkognitóprofilt használ ehhez a csoporthoz - fő profilja megosztásának elkerülése érdekében a meghívók küldése le van tiltva</string>
<string name="v4_5_transport_isolation">Kapcsolat izolációs mód</string>
<string name="v4_5_transport_isolation">Átvitel-izoláció</string>
<string name="you_will_be_connected_when_your_connection_request_is_accepted">Akkor lesz kapcsolódva, ha a kapcsolatkérése elfogadásra kerül, várjon, vagy ellenőrizze később!</string>
<string name="voice_messages_are_prohibited">A hangüzenetek küldése le van tiltva ebben a csoportban.</string>
<string name="system_restricted_background_in_call_warn"><![CDATA[A háttérben való hívásokhoz válassza ki az <b>Alkalmazás akkumulátor-használata</b> / <b>Korlátlan</b> módot az alkalmazás beállításaiban.]]></string>
@@ -1389,8 +1389,8 @@
<string name="to_protect_privacy_simplex_has_ids_for_queues">Az adatvédelem érdekében, a más csevegési platformokon megszokott felhasználó-azonosítók helyett, a SimpleX csak az üzenetek sorbaállításához használ azonosítókat, minden egyes ismerőshöz egy-egy különbözőt.</string>
<string name="to_share_with_your_contact">(a megosztáshoz az ismerősével)</string>
<string name="you_sent_group_invitation">Csoportmeghívó elküldve</string>
<string name="update_network_session_mode_question">Kapcsolat izolációs mód frissítése?</string>
<string name="network_session_mode_transport_isolation">Kapcsolat izolációs mód</string>
<string name="update_network_session_mode_question">Átvitel-izoláció módjának frissítése?</string>
<string name="network_session_mode_transport_isolation">Átvitel-izoláció</string>
<string name="you_will_stop_receiving_messages_from_this_group_chat_history_will_be_preserved">Ettől a csoporttól nem fog értesítéseket kapni. A csevegési előzmények megmaradnak.</string>
<string name="database_is_not_encrypted">A csevegési adatbázis nem titkosított - állítson be egy jelmondatot annak védelméhez.</string>
<string name="network_disable_socks">Közvetlen internet kapcsolat használata?</string>
@@ -1438,7 +1438,7 @@
<string name="v4_6_group_welcome_message_descr">Megjelenítendő üzenet beállítása az új tagok számára!</string>
<string name="whats_new_thanks_to_users_contribute_weblate">Köszönet a felhasználóknak - hozzájárulás a Weblate-en!</string>
<string name="sending_delivery_receipts_will_be_enabled">A kézbesítési jelentés küldése minden ismerőse számára engedélyezésre kerül.</string>
<string name="network_option_protocol_timeout_per_kb">Protokoll időkorlát KB-onként</string>
<string name="network_option_protocol_timeout_per_kb">Protokoll időtúllépése KB-onként</string>
<string name="database_backup_can_be_restored">Az adatbázis-jelmondat megváltoztatására tett kísérlet nem fejeződött be.</string>
<string name="enable_automatic_deletion_message">Ez a művelet nem vonható vissza - a kiválasztottnál korábban küldött és fogadott üzenetek törlésre kerülnek. Ez több percet is igénybe vehet.</string>
<string name="profile_is_only_shared_with_your_contacts">A profilja csak az ismerőseivel kerül megosztásra.</string>
@@ -1768,7 +1768,7 @@
<string name="network_smp_proxy_mode_never">Soha</string>
<string name="network_smp_proxy_mode_unknown">Ismeretlen kiszolgálók</string>
<string name="network_smp_proxy_fallback_allow_protected">Ha az IP-cím rejtett</string>
<string name="private_routing_show_message_status">Üzenet állapot megjelenítése</string>
<string name="private_routing_show_message_status">Üzenetállapot megjelenítése</string>
<string name="network_smp_proxy_fallback_allow_downgrade">Visszafejlesztés engedélyezése</string>
<string name="network_smp_proxy_mode_always">Mindig</string>
<string name="network_smp_proxy_fallback_prohibit">Nem</string>
@@ -1844,8 +1844,8 @@
\nutoljára kézbesített üzenet: %2$s</string>
<string name="file_error_auth">Hibás kulcs vagy ismeretlen fájltöredék cím - valószínűleg a fájl törlődött.</string>
<string name="temporary_file_error">Ideiglenesfájl-hiba</string>
<string name="info_row_message_status">Üzenet állapota</string>
<string name="share_text_message_status">Üzenet állapota: %s</string>
<string name="info_row_message_status">Üzenetállapot</string>
<string name="share_text_message_status">Üzenetállapot: %s</string>
<string name="file_error">Fájlhiba</string>
<string name="file_error_no_file">A fájl nem található - valószínűleg a fájlt törölték vagy visszavonták.</string>
<string name="file_error_relay">Fájlkiszolgáló-hiba: %1$s</string>
@@ -1890,12 +1890,12 @@
<string name="servers_info_downloaded">Letöltve</string>
<string name="expired_label">lejárt</string>
<string name="other_label">egyéb</string>
<string name="servers_info_detailed_statistics_received_total">Összes fogadott</string>
<string name="servers_info_detailed_statistics_received_total">Összes fogadott üzenet</string>
<string name="servers_info_detailed_statistics_receive_errors">Üzenetfogadási hibák</string>
<string name="reconnect">Újrakapcsolás</string>
<string name="send_errors">Üzenetküldési hibák</string>
<string name="sent_directly">Közvetlenül küldött</string>
<string name="servers_info_detailed_statistics_sent_messages_total">Összes elküldött</string>
<string name="servers_info_detailed_statistics_sent_messages_total">Összes elküldött üzenet</string>
<string name="sent_via_proxy">Proxyn keresztül küldve</string>
<string name="smp_server">SMP-kiszolgáló</string>
<string name="servers_info_starting_from">Statisztikagyűjtés kezdete: %s.</string>
@@ -1926,7 +1926,7 @@
<string name="xftp_servers_configured">Konfigurált XFTP-kiszolgálók</string>
<string name="servers_info_sessions_connected">Kapcsolódva</string>
<string name="current_user">Jelenlegi profil</string>
<string name="servers_info_details">Részletek</string>
<string name="servers_info_details">További részletek</string>
<string name="decryption_errors">visszafejtési hibák</string>
<string name="deleted">Törölve</string>
<string name="servers_info_messages_received">Fogadott üzenetek</string>
@@ -1943,7 +1943,7 @@
<string name="servers_info_reconnect_server_message">A kiszolgálóhoz való újrakapcsolódás az üzenetkézbesítési jelentések kikényszerítéséhez. Ez további adatforgalmat használ.</string>
<string name="servers_info_detailed_statistics_sent_messages_header">Elküldött üzenetek</string>
<string name="servers_info_transport_sessions_section_header">Munkamenetek átvitele</string>
<string name="servers_info_subscriptions_total">Összesen</string>
<string name="servers_info_subscriptions_total">Összes kapcsolat</string>
<string name="servers_info_statistics_section_header">Statisztikák</string>
<string name="servers_info_target">Információk megjelenítése ehhez:</string>
<string name="network_error_broker_version_desc">A kiszolgáló verziója nem kompatibilis az alkalmazással: %1$s.</string>
@@ -2120,7 +2120,7 @@
<string name="v6_1_message_dates_descr">Betere datums voor berichten.</string>
<string name="v6_1_better_user_experience">Betere gebruikerservaring</string>
<string name="v6_1_customizable_message_descr">Aanpasbare berichtvorm.</string>
<string name="v6_1_better_calls_descr">Wissel tussen audio en video tijdens het gesprek.</string>
<string name="v6_1_better_calls_descr">Wisselen tussen audio en video tijdens het gesprek.</string>
<string name="v6_1_switch_chat_profile_descr">Wijzig chatprofiel voor eenmalige uitnodigingen.</string>
<string name="v6_1_delete_many_messages_descr">Maximaal 200 berichten verwijderen of modereren.</string>
<string name="v6_1_forward_many_messages_descr">Stuur maximaal 20 berichten tegelijk door.</string>
+4 -4
View File
@@ -26,11 +26,11 @@ android.enableJetifier=true
kotlin.mpp.androidSourceSetLayoutVersion=2
kotlin.jvm.target=11
android.version_name=6.1-beta.5
android.version_code=246
android.version_name=6.1
android.version_code=247
desktop.version_name=6.1-beta.5
desktop.version_code=72
desktop.version_name=6.1
desktop.version_code=73
kotlin.version=1.9.23
gradle.plugin.version=8.2.0
@@ -106,11 +106,13 @@ data DirectoryCmdTag (r :: DirectoryRole) where
DCConfirmDuplicateGroup_ :: DirectoryCmdTag 'DRUser
DCListUserGroups_ :: DirectoryCmdTag 'DRUser
DCDeleteGroup_ :: DirectoryCmdTag 'DRUser
DCSetRole_ :: DirectoryCmdTag 'DRUser
DCApproveGroup_ :: DirectoryCmdTag 'DRSuperUser
DCRejectGroup_ :: DirectoryCmdTag 'DRSuperUser
DCSuspendGroup_ :: DirectoryCmdTag 'DRSuperUser
DCResumeGroup_ :: DirectoryCmdTag 'DRSuperUser
DCListLastGroups_ :: DirectoryCmdTag 'DRSuperUser
DCListPendingGroups_ :: DirectoryCmdTag 'DRSuperUser
DCExecuteCommand_ :: DirectoryCmdTag 'DRSuperUser
deriving instance Show (DirectoryCmdTag r)
@@ -127,11 +129,13 @@ data DirectoryCmd (r :: DirectoryRole) where
DCConfirmDuplicateGroup :: UserGroupRegId -> GroupName -> DirectoryCmd 'DRUser
DCListUserGroups :: DirectoryCmd 'DRUser
DCDeleteGroup :: UserGroupRegId -> GroupName -> DirectoryCmd 'DRUser
DCSetRole :: GroupId -> GroupName -> GroupMemberRole -> DirectoryCmd 'DRUser
DCApproveGroup :: {groupId :: GroupId, displayName :: GroupName, groupApprovalId :: GroupApprovalId} -> DirectoryCmd 'DRSuperUser
DCRejectGroup :: GroupId -> GroupName -> DirectoryCmd 'DRSuperUser
DCSuspendGroup :: GroupId -> GroupName -> DirectoryCmd 'DRSuperUser
DCResumeGroup :: GroupId -> GroupName -> DirectoryCmd 'DRSuperUser
DCListLastGroups :: Int -> DirectoryCmd 'DRSuperUser
DCListPendingGroups :: Int -> DirectoryCmd 'DRSuperUser
DCExecuteCommand :: String -> DirectoryCmd 'DRSuperUser
DCUnknownCommand :: DirectoryCmd 'DRUser
DCCommandError :: DirectoryCmdTag r -> DirectoryCmd r
@@ -163,11 +167,13 @@ directoryCmdP =
"list" -> u DCListUserGroups_
"ls" -> u DCListUserGroups_
"delete" -> u DCDeleteGroup_
"role" -> u DCSetRole_
"approve" -> su DCApproveGroup_
"reject" -> su DCRejectGroup_
"suspend" -> su DCSuspendGroup_
"resume" -> su DCResumeGroup_
"last" -> su DCListLastGroups_
"pending" -> su DCListPendingGroups_
"exec" -> su DCExecuteCommand_
"x" -> su DCExecuteCommand_
_ -> fail "bad command tag"
@@ -184,14 +190,19 @@ directoryCmdP =
DCConfirmDuplicateGroup_ -> gc DCConfirmDuplicateGroup
DCListUserGroups_ -> pure DCListUserGroups
DCDeleteGroup_ -> gc DCDeleteGroup
DCSetRole_ -> do
(groupId, displayName) <- gc (,)
memberRole <- A.space *> ("member" $> GRMember <|> "observer" $> GRObserver)
pure $ DCSetRole groupId displayName memberRole
DCApproveGroup_ -> do
(groupId, displayName) <- gc (,)
groupApprovalId <- A.space *> A.decimal
pure $ DCApproveGroup {groupId, displayName, groupApprovalId}
pure DCApproveGroup {groupId, displayName, groupApprovalId}
DCRejectGroup_ -> gc DCRejectGroup
DCSuspendGroup_ -> gc DCSuspendGroup
DCResumeGroup_ -> gc DCResumeGroup
DCListLastGroups_ -> DCListLastGroups <$> (A.space *> A.decimal <|> pure 10)
DCListPendingGroups_ -> DCListPendingGroups <$> (A.space *> A.decimal <|> pure 10)
DCExecuteCommand_ -> DCExecuteCommand . T.unpack <$> (A.space *> A.takeText)
where
gc f = f <$> (A.space *> A.decimal <* A.char ':') <*> displayNameP
@@ -214,13 +225,15 @@ directoryCmdTag = \case
DCRecentGroups -> "new"
DCSubmitGroup _ -> "submit"
DCConfirmDuplicateGroup {} -> "confirm"
DCListUserGroups -> "list"
DCListUserGroups -> "list"
DCDeleteGroup {} -> "delete"
DCApproveGroup {} -> "approve"
DCSetRole {} -> "role"
DCRejectGroup {} -> "reject"
DCSuspendGroup {} -> "suspend"
DCResumeGroup {} -> "resume"
DCListLastGroups _ -> "last"
DCListPendingGroups _ -> "pending"
DCExecuteCommand _ -> "exec"
DCUnknownCommand -> "unknown"
DCCommandError _ -> "error"
@@ -23,6 +23,7 @@ import Data.Set (Set)
import qualified Data.Set as S
import Data.Text (Text)
import qualified Data.Text as T
import Data.Text.Encoding (decodeLatin1)
import Data.Time.Clock (diffUTCTime, getCurrentTime)
import Data.Time.LocalTime (getCurrentTimeZone)
import Directory.Events
@@ -447,30 +448,43 @@ directoryService st DirectoryOpts {superUsers, serviceName, searchResults, testi
DCRecentGroups -> withFoundListedGroups Nothing $ sendAllGroups takeRecent "the most recent" STRecent
DCSubmitGroup _link -> pure ()
DCConfirmDuplicateGroup ugrId gName ->
atomically (getUserGroupReg st (contactId' ct) ugrId) >>= \case
Nothing -> sendReply $ "Group ID " <> show ugrId <> " not found"
Just GroupReg {dbGroupId, groupRegStatus} -> do
getGroup cc dbGroupId >>= \case
Nothing -> sendReply $ "Group ID " <> show ugrId <> " not found"
Just g@GroupInfo {groupProfile = GroupProfile {displayName}}
| displayName == gName ->
readTVarIO groupRegStatus >>= \case
GRSPendingConfirmation -> do
getDuplicateGroup g >>= \case
Nothing -> sendMessage cc ct "Error: getDuplicateGroup. Please notify the developers."
Just DGReserved -> sendMessage cc ct $ groupAlreadyListed g
_ -> processInvitation ct g
_ -> sendReply $ "Error: the group ID " <> show ugrId <> " (" <> T.unpack displayName <> ") is not pending confirmation."
| otherwise -> sendReply $ "Group ID " <> show ugrId <> " has the display name " <> T.unpack displayName
withUserGroupReg ugrId gName $ \gr g@GroupInfo {groupProfile = GroupProfile {displayName}} ->
readTVarIO (groupRegStatus gr) >>= \case
GRSPendingConfirmation ->
getDuplicateGroup g >>= \case
Nothing -> sendMessage cc ct "Error: getDuplicateGroup. Please notify the developers."
Just DGReserved -> sendMessage cc ct $ groupAlreadyListed g
_ -> processInvitation ct g
_ -> sendReply $ "Error: the group ID " <> show ugrId <> " (" <> T.unpack displayName <> ") is not pending confirmation."
DCListUserGroups ->
atomically (getUserGroupRegs st $ contactId' ct) >>= \grs -> do
sendReply $ show (length grs) <> " registered group(s)"
void . forkIO $ forM_ (reverse grs) $ \gr@GroupReg {userGroupRegId} ->
sendGroupInfo ct gr userGroupRegId Nothing
DCDeleteGroup _ugrId _gName -> pure ()
DCDeleteGroup ugrId gName ->
withUserGroupReg ugrId gName $ \gr GroupInfo {groupProfile = GroupProfile {displayName}} -> do
delGroupReg st gr
sendReply $ T.unpack $ "Your group " <> displayName <> " is deleted from the directory"
DCSetRole ugrId gName mRole ->
withUserGroupReg ugrId gName $ \_gr GroupInfo {groupId, groupProfile = GroupProfile {displayName}} -> do
gLink_ <- setGroupLinkRole cc groupId mRole
sendReply $ T.unpack $ case gLink_ of
Nothing -> "Error: the initial member role for the group " <> displayName <> " was NOT upgated"
Just gLink ->
("The initial member role for the group " <> displayName <> " is set to *" <> decodeLatin1 (strEncode mRole) <> "*\n\n")
<> ("*Please note*: it applies only to members joining via this link: " <> safeDecodeUtf8 (strEncode $ simplexChatContact gLink))
DCUnknownCommand -> sendReply "Unknown command"
DCCommandError tag -> sendReply $ "Command error: " <> show tag
where
withUserGroupReg ugrId gName action =
atomically (getUserGroupReg st (contactId' ct) ugrId) >>= \case
Nothing -> sendReply $ "Group ID " <> show ugrId <> " not found"
Just gr@GroupReg {dbGroupId} -> do
getGroup cc dbGroupId >>= \case
Nothing -> sendReply $ "Group ID " <> show ugrId <> " not found"
Just g@GroupInfo {groupProfile = GroupProfile {displayName}}
| displayName == gName -> action gr g
| otherwise -> sendReply $ "Group ID " <> show ugrId <> " has the display name " <> T.unpack displayName
sendReply = sendComposedMessage cc ct (Just ciId) . textMsgContent
withFoundListedGroups s_ action =
getGroups_ s_ >>= \case
@@ -576,13 +590,8 @@ directoryService st DirectoryOpts {superUsers, serviceName, searchResults, testi
notifyOwner gr $ "The group " <> userGroupReference' gr gName <> " is listed in the directory again!"
sendReply "Group listing resumed!"
_ -> sendReply $ "The group " <> groupRef <> " is not suspended, can't be resumed."
DCListLastGroups count ->
readTVarIO (groupRegs st) >>= \grs -> do
sendReply $ show (length grs) <> " registered group(s)" <> (if length grs > count then ", showing the last " <> show count else "")
void . forkIO $ forM_ (reverse $ take count grs) $ \gr@GroupReg {dbGroupId, dbContactId} -> do
ct_ <- getContact cc dbContactId
let ownerStr = "Owner: " <> maybe "getContact error" localDisplayName' ct_
sendGroupInfo ct gr dbGroupId $ Just ownerStr
DCListLastGroups count -> listGroups count False
DCListPendingGroups count -> listGroups count True
DCExecuteCommand cmdStr ->
sendChatCmdStr cc cmdStr >>= \r -> do
ts <- getCurrentTime
@@ -593,6 +602,17 @@ directoryService st DirectoryOpts {superUsers, serviceName, searchResults, testi
where
superUser = KnownContact {contactId = contactId' ct, localDisplayName = localDisplayName' ct}
sendReply = sendComposedMessage cc ct (Just ciId) . textMsgContent
listGroups count pending =
readTVarIO (groupRegs st) >>= \groups -> do
grs <-
if pending
then filterM (fmap pendingApproval . readTVarIO . groupRegStatus) groups
else pure groups
sendReply $ show (length grs) <> " registered group(s)" <> (if length grs > count then ", showing the last " <> show count else "")
void . forkIO $ forM_ (reverse $ take count grs) $ \gr@GroupReg {dbGroupId, dbContactId} -> do
ct_ <- getContact cc dbContactId
let ownerStr = "Owner: " <> maybe "getContact error" localDisplayName' ct_
sendGroupInfo ct gr dbGroupId $ Just ownerStr
getGroupAndReg :: GroupId -> GroupName -> IO (Maybe (GroupInfo, GroupReg))
getGroupAndReg gId gName =
@@ -641,5 +661,12 @@ getGroupAndSummary cc gId = resp <$> sendChatCmd cc (APIGroupInfo gId)
CRGroupInfo {groupInfo, groupSummary} -> Just (groupInfo, groupSummary)
_ -> Nothing
setGroupLinkRole :: ChatController -> GroupId -> GroupMemberRole -> IO (Maybe ConnReqContact)
setGroupLinkRole cc gId mRole = resp <$> sendChatCmd cc (APIGroupLinkMemberRole gId mRole)
where
resp = \case
CRGroupLink _ _ gLink _ -> Just gLink
_ -> Nothing
unexpectedError :: String -> String
unexpectedError err = "Unexpected error: " <> err <> ", please notify the developers."
@@ -12,6 +12,7 @@ module Directory.Store
GroupApprovalId,
restoreDirectoryStore,
addGroupReg,
delGroupReg,
setGroupStatus,
setGroupRegOwner,
getGroupReg,
@@ -19,6 +20,7 @@ module Directory.Store
getUserGroupRegs,
filterListedGroups,
groupRegStatusText,
pendingApproval,
)
where
@@ -79,6 +81,11 @@ data GroupRegStatus
| GRSSuspendedBadRoles
| GRSRemoved
pendingApproval :: GroupRegStatus -> Bool
pendingApproval = \case
GRSPendingApproval _ -> True
_ -> False
data DirectoryStatus = DSListed | DSReserved | DSRegistered
groupRegStatusText :: GroupRegStatus -> Text
@@ -118,6 +125,12 @@ addGroupReg st ct GroupInfo {groupId} grStatus = do
| dbContactId == ctId && userGroupRegId > mx = userGroupRegId
| otherwise = mx
delGroupReg :: DirectoryStore -> GroupReg -> IO ()
delGroupReg st GroupReg {dbGroupId = gId} = do
logGDelete st gId
atomically $ unlistGroup st gId
atomically $ modifyTVar' (groupRegs st) $ filter ((gId ==) . dbGroupId)
setGroupStatus :: DirectoryStore -> GroupReg -> GroupRegStatus -> IO ()
setGroupStatus st gr grStatus = do
logGUpdateStatus st (dbGroupId gr) grStatus
@@ -167,10 +180,15 @@ unlistGroup st gId = do
data DirectoryLogRecord
= GRCreate GroupRegData
| GRDelete GroupId
| GRUpdateStatus GroupId GroupRegStatus
| GRUpdateOwner GroupId GroupMemberId
data DLRTag = GRCreate_ | GRUpdateStatus_ | GRUpdateOwner_
data DLRTag
= GRCreate_
| GRDelete_
| GRUpdateStatus_
| GRUpdateOwner_
logDLR :: DirectoryStore -> DirectoryLogRecord -> IO ()
logDLR st r = forM_ (directoryLogFile st) $ \h -> B.hPutStrLn h (strEncode r)
@@ -178,6 +196,9 @@ logDLR st r = forM_ (directoryLogFile st) $ \h -> B.hPutStrLn h (strEncode r)
logGCreate :: DirectoryStore -> GroupRegData -> IO ()
logGCreate st = logDLR st . GRCreate
logGDelete :: DirectoryStore -> GroupId -> IO ()
logGDelete st = logDLR st . GRDelete
logGUpdateStatus :: DirectoryStore -> GroupId -> GroupRegStatus -> IO ()
logGUpdateStatus st = logDLR st .: GRUpdateStatus
@@ -187,11 +208,13 @@ logGUpdateOwner st = logDLR st .: GRUpdateOwner
instance StrEncoding DLRTag where
strEncode = \case
GRCreate_ -> "GCREATE"
GRDelete_ -> "GDELETE"
GRUpdateStatus_ -> "GSTATUS"
GRUpdateOwner_ -> "GOWNER"
strP =
A.takeTill (== ' ') >>= \case
"GCREATE" -> pure GRCreate_
"GDELETE" -> pure GRDelete_
"GSTATUS" -> pure GRUpdateStatus_
"GOWNER" -> pure GRUpdateOwner_
_ -> fail "invalid DLRTag"
@@ -199,13 +222,15 @@ instance StrEncoding DLRTag where
instance StrEncoding DirectoryLogRecord where
strEncode = \case
GRCreate gr -> strEncode (GRCreate_, gr)
GRDelete gId -> strEncode (GRDelete_, gId)
GRUpdateStatus gId grStatus -> strEncode (GRUpdateStatus_, gId, grStatus)
GRUpdateOwner gId grOwnerId -> strEncode (GRUpdateOwner_, gId, grOwnerId)
strP =
strP >>= \case
GRCreate_ -> GRCreate <$> (A.space *> strP)
GRUpdateStatus_ -> GRUpdateStatus <$> (A.space *> A.decimal) <*> (A.space *> strP)
GRUpdateOwner_ -> GRUpdateOwner <$> (A.space *> A.decimal) <*> (A.space *> A.decimal)
strP_ >>= \case
GRCreate_ -> GRCreate <$> strP
GRDelete_ -> GRDelete <$> strP
GRUpdateStatus_ -> GRUpdateStatus <$> A.decimal <*> _strP
GRUpdateOwner_ -> GRUpdateOwner <$> A.decimal <* A.space <*> A.decimal
instance StrEncoding GroupRegData where
strEncode GroupRegData {dbGroupId_, userGroupRegId_, dbContactId_, dbOwnerMemberId_, groupRegStatus_} =
@@ -314,6 +339,9 @@ readDirectoryData f =
putStrLn $
"Warning: duplicate group with ID " <> show gId <> ", group replaced."
pure $ M.insert gId gr m
GRDelete gId -> case M.lookup gId m of
Just _ -> pure $ M.delete gId m
Nothing -> m <$ putStrLn ("Warning: no group with ID " <> show gId <> ", deletion ignored.")
GRUpdateStatus gId groupRegStatus_ -> case M.lookup gId m of
Just gr -> pure $ M.insert gId gr {groupRegStatus_} m
Nothing -> m <$ putStrLn ("Warning: no group with ID " <> show gId <> ", status update ignored.")
@@ -0,0 +1,18 @@
---
layout: layouts/article.html
title: "SimpleX network: cryptographic design review by Trail of Bits, v6.1 released with better calls and user experience."
date: 2024-10-14
# image: images/20240814-reachable.png
# previewBody: blog_previews/20240814.html
permalink: "/blog/20241014-simplex-network-v6-1-security-review-better-calls-user-experience.html"
draft: true
---
# SimpleX network: security review of protocols design by Trail of Bits, v6.1 released with better calls and user experience.
**Published:** Oct 14, 2024
This is the placeholder for the security review and release announcement.
Come back on Monday afternoon!
+1 -1
View File
@@ -1,5 +1,5 @@
name: simplex-chat
version: 6.1.0.8
version: 6.1.0.9
#synopsis:
#description:
homepage: https://github.com/simplex-chat/simplex-chat#readme
+1 -1
View File
@@ -5,7 +5,7 @@ cabal-version: 1.12
-- see: https://github.com/sol/hpack
name: simplex-chat
version: 6.1.0.8
version: 6.1.0.9
category: Web, System, Services, Cryptography
homepage: https://github.com/simplex-chat/simplex-chat#readme
author: simplex.chat
+5 -5
View File
@@ -1933,8 +1933,8 @@ createMemberContact
contactId <- insertedRowId db
DB.execute
db
"UPDATE group_members SET contact_id = ?, updated_at = ? WHERE group_member_id = ?"
(contactId, currentTs, groupMemberId)
"UPDATE group_members SET contact_id = ?, updated_at = ? WHERE contact_profile_id = ?"
(contactId, currentTs, memberContactProfileId)
DB.execute
db
[sql|
@@ -2003,7 +2003,7 @@ createMemberContactInvited
user@User {userId, profile = LocalProfile {preferences}}
connIds
gInfo
m@GroupMember {groupMemberId, localDisplayName = memberLDN, memberProfile, memberContactProfileId}
m@GroupMember {localDisplayName = memberLDN, memberProfile, memberContactProfileId}
mConn
subMode = do
currentTs <- liftIO getCurrentTime
@@ -2031,8 +2031,8 @@ createMemberContactInvited
contactId <- insertedRowId db
DB.execute
db
"UPDATE group_members SET contact_id = ?, updated_at = ? WHERE group_member_id = ?"
(contactId, currentTs, groupMemberId)
"UPDATE group_members SET contact_id = ?, updated_at = ? WHERE contact_profile_id = ?"
(contactId, currentTs, memberContactProfileId)
pure contactId
updateMemberContactInvited :: DB.Connection -> User -> (CommandId, ConnId) -> GroupInfo -> Connection -> Contact -> SubscriptionMode -> ExceptT StoreError IO Contact
+52
View File
@@ -28,6 +28,8 @@ directoryServiceTests :: SpecWith FilePath
directoryServiceTests = do
it "should register group" testDirectoryService
it "should suspend and resume group" testSuspendResume
it "should delete group registration" testDeleteGroup
it "should change initial member role" testSetRole
it "should join found group via link" testJoinGroup
it "should support group names with spaces" testGroupNameWithSpaces
it "should return more groups in search, all and recent groups" testSearchGroups
@@ -139,6 +141,15 @@ testDirectoryService tmp =
bob <# "SimpleX-Directory> Thank you! The group link for ID 1 (PSA) is added to the welcome message."
bob <## "You will be notified once the group is added to the directory - it may take up to 24 hours."
approvalRequested superUser welcomeWithLink' (1 :: Int)
superUser #> "@SimpleX-Directory /pending"
superUser <# "SimpleX-Directory> > /pending"
superUser <## " 1 registered group(s)"
superUser <# "SimpleX-Directory> 1. PSA (Privacy, Security & Anonymity)"
superUser <## "Welcome message:"
superUser <##. "Welcome! Link to join the group PSA: "
superUser <## "Owner: bob"
superUser <## "2 members"
superUser <## "Status: pending admin approval"
superUser #> "@SimpleX-Directory /approve 1:PSA 1"
superUser <# "SimpleX-Directory> > /approve 1:PSA 1"
superUser <## " Group approved!"
@@ -197,6 +208,47 @@ testSuspendResume tmp =
bob <# "SimpleX-Directory> The group ID 1 (privacy) is listed in the directory again!"
groupFound bob "privacy"
testDeleteGroup :: HasCallStack => FilePath -> IO ()
testDeleteGroup tmp =
withDirectoryService tmp $ \superUser dsLink ->
withNewTestChat tmp "bob" bobProfile $ \bob -> do
bob `connectVia` dsLink
registerGroup superUser bob "privacy" "Privacy"
groupFound bob "privacy"
bob #> "@SimpleX-Directory /delete 1:privacy"
bob <# "SimpleX-Directory> > /delete 1:privacy"
bob <## " Your group privacy is deleted from the directory"
groupNotFound bob "privacy"
testSetRole :: HasCallStack => FilePath -> IO ()
testSetRole tmp =
withDirectoryService tmp $ \superUser dsLink ->
withNewTestChat tmp "bob" bobProfile $ \bob ->
withNewTestChat tmp "cath" cathProfile $ \cath -> do
bob `connectVia` dsLink
registerGroup superUser bob "privacy" "Privacy"
groupFound bob "privacy"
bob #> "@SimpleX-Directory /role 1:privacy observer"
bob <# "SimpleX-Directory> > /role 1:privacy observer"
bob <## " The initial member role for the group privacy is set to observer"
bob <## ""
note <- getTermLine bob
let groupLink = dropStrPrefix "Please note: it applies only to members joining via this link: " note
cath ##> ("/c " <> groupLink)
cath <## "connection request sent!"
cath <## "#privacy: joining the group..."
cath <## "#privacy: you joined the group"
cath <#. "#privacy SimpleX-Directory> Link to join the group privacy: https://simplex.chat/"
cath <## "#privacy: member bob (Bob) is connected"
bob <## "#privacy: SimpleX-Directory added cath (Catherine) to the group (connecting...)"
bob <## "#privacy: new member cath is connected"
bob ##> "/ms #privacy"
bob <## "bob (Bob): owner, you, created group"
bob <## "SimpleX-Directory: admin, invited, connected"
bob <## "cath (Catherine): observer, connected"
cath ##> "#privacy hello"
cath <## "#privacy: you don't have permission to send messages"
testJoinGroup :: HasCallStack => FilePath -> IO ()
testJoinGroup tmp =
withDirectoryServiceCfg tmp testCfgGroupLinkViaContact $ \superUser dsLink ->
+68
View File
@@ -130,6 +130,7 @@ chatGroupTests = do
it "invited member replaces member contact reference if it already exists" testMemberContactInvitedConnectionReplaced
it "share incognito profile" testMemberContactIncognito
it "sends and updates profile when creating contact" testMemberContactProfileUpdate
it "re-create member contact after deletion, many groups" testRecreateMemberContactManyGroups
describe "group message forwarding" $ do
it "forward messages between invitee and introduced (x.msg.new)" testGroupMsgForward
it "deduplicate forwarded messages" testGroupMsgForwardDeduplicate
@@ -4537,6 +4538,73 @@ testMemberContactProfileUpdate =
alice <# "#team kate> hello there"
bob <# "#team kate> hello there" -- updated profile
testRecreateMemberContactManyGroups :: HasCallStack => FilePath -> IO ()
testRecreateMemberContactManyGroups =
testChat2 aliceProfile bobProfile $
\alice bob -> do
connectUsers alice bob
createGroup2' "team" alice bob False
createGroup2' "club" alice bob False
-- alice can message bob via team and via club
alice ##> "@#team bob 1"
alice <# "@bob 1"
bob <# "alice> 1"
bob ##> "@#team alice 2"
bob <# "@alice 2"
alice <# "bob> 2"
alice ##> "@#club bob 3"
alice <# "@bob 3"
bob <# "alice> 3"
bob ##> "@#club alice 4"
bob <# "@alice 4"
alice <# "bob> 4"
-- alice deletes contact with bob
alice ##> "/d bob"
alice <## "bob: contact is deleted"
bob <## "alice (Alice) deleted contact with you"
bob ##> "/d alice"
bob <## "alice: contact is deleted"
-- alice creates member contact with bob
alice ##> "@#team bob hi"
alice
<### [ "member #team bob does not have direct connection, creating",
"contact for member #team bob is created",
"sent invitation to connect directly to member #team bob",
WithTime "@bob hi"
]
bob
<### [ "#team alice is creating direct contact alice with you",
WithTime "alice> hi"
]
bob <## "alice (Alice): you can send messages to contact"
concurrently_
(alice <## "bob (Bob): contact is connected")
(bob <## "alice (Alice): contact is connected")
-- alice can message bob via team and via club
alice ##> "@#team bob 1"
alice <# "@bob 1"
bob <# "alice> 1"
bob ##> "@#team alice 2"
bob <# "@alice 2"
alice <# "bob> 2"
alice ##> "@#club bob 3"
alice <# "@bob 3"
bob <# "alice> 3"
bob ##> "@#club alice 4"
bob <# "@alice 4"
alice <# "bob> 4"
testGroupMsgForward :: HasCallStack => FilePath -> IO ()
testGroupMsgForward =
testChat3 aliceProfile bobProfile cathProfile $