From 9b28ae6d9e8db2390dbc2e9028ef18e26f77ed6e Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Wed, 3 Apr 2024 17:58:32 +0700 Subject: [PATCH 01/60] desktop: remote connection host/port fix (#3987) --- .../common/views/remote/ConnectMobileView.kt | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/remote/ConnectMobileView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/remote/ConnectMobileView.kt index bd1be525be..e13b86258d 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/remote/ConnectMobileView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/remote/ConnectMobileView.kt @@ -38,9 +38,7 @@ import chat.simplex.common.views.usersettings.* import chat.simplex.res.MR import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource -import kotlinx.coroutines.delay import kotlinx.coroutines.flow.distinctUntilChanged -import kotlinx.coroutines.runBlocking @Composable fun ConnectMobileView() { @@ -269,12 +267,20 @@ fun AddingMobileDevice(showTitle: Boolean, staleQrCode: MutableState, c var cachedR by remember { mutableStateOf(null) } val customAddress = rememberSaveable { mutableStateOf(null) } val customPort = rememberSaveable { mutableStateOf(null) } + var userChangedAddress by rememberSaveable { mutableStateOf(false) } + var userChangedPort by rememberSaveable { mutableStateOf(false) } val startRemoteHost = suspend { + if (customAddress.value != cachedR.address && cachedR != null) { + userChangedAddress = true + } + if (customPort.value != cachedR.port && cachedR != null) { + userChangedPort = true + } val r = chatModel.controller.startRemoteHost( rhId = null, multicast = controller.appPrefs.offerRemoteMulticast.get(), - address = if (customAddress.value?.address != cachedR.address?.address) customAddress.value else cachedR.rh?.bindAddress_, - port = if (customPort.value != cachedR.port) customPort.value else cachedR.rh?.bindPort_ + address = if (customAddress.value != null && userChangedAddress) customAddress.value else cachedR.rh?.bindAddress_, + port = if (customPort.value != null && userChangedPort) customPort.value else cachedR.rh?.bindPort_ ) if (r != null) { cachedR = r @@ -343,12 +349,20 @@ private fun showConnectMobileDevice(rh: RemoteHostInfo, connecting: MutableState var cachedR by remember { mutableStateOf(null) } val customAddress = rememberSaveable { mutableStateOf(null) } val customPort = rememberSaveable { mutableStateOf(null) } + var userChangedAddress by rememberSaveable { mutableStateOf(false) } + var userChangedPort by rememberSaveable { mutableStateOf(false) } val startRemoteHost = suspend { + if (customAddress.value != cachedR.address && cachedR != null) { + userChangedAddress = true + } + if (customPort.value != cachedR.port && cachedR != null) { + userChangedPort = true + } val r = chatModel.controller.startRemoteHost( rhId = rh.remoteHostId, multicast = controller.appPrefs.offerRemoteMulticast.get(), - address = if (customAddress.value?.address != cachedR.address?.address) customAddress.value else cachedR.rh?.bindAddress_ ?: rh.bindAddress_, - port = if (customPort.value != cachedR.port) customPort.value else cachedR.rh?.bindPort_ ?: rh.bindPort_ + address = if (customAddress.value != null && userChangedAddress) customAddress.value else cachedR.rh?.bindAddress_ ?: rh.bindAddress_, + port = if (customPort.value != null && userChangedPort) customPort.value else cachedR.rh?.bindPort_ ?: rh.bindPort_ ) if (r != null) { cachedR = r From d2de81100d4066d80ba1b35c6f4cc2e08576458a Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Wed, 3 Apr 2024 21:11:04 +0700 Subject: [PATCH 02/60] android: workaround of pager's bug (#3988) --- .../kotlin/chat/simplex/common/views/chat/ChatView.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt index c70511f847..702dd9fec5 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt @@ -1392,11 +1392,12 @@ private fun providerForGallery( return null } - var initialIndex = Int.MAX_VALUE / 2 + // Pager has a bug with overflowing when total pages is around Int.MAX_VALUE. Using smaller value + var initialIndex = 10000 / 2 var initialChatId = cItemId return object: ImageGalleryProvider { override val initialIndex: Int = initialIndex - override val totalMediaSize = mutableStateOf(Int.MAX_VALUE) + override val totalMediaSize = mutableStateOf(10000) override fun getMedia(index: Int): ProviderMedia? { val internalIndex = initialIndex - index val item = item(internalIndex, initialChatId)?.second ?: return null From 14c279d1e0eff5d4825c059ef0ebff9413b65d65 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Wed, 3 Apr 2024 21:15:44 +0700 Subject: [PATCH 03/60] android: possibly, prevent TooManyRequests exception (#3989) * android: possibly, prevent TooManyRequests exception * new line --- .../views/chat/item/CIImageView.android.kt | 3 +-- .../chat/item/ImageFullScreenView.android.kt | 27 ++++++++++--------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chat/item/CIImageView.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chat/item/CIImageView.android.kt index 28c00ec018..c606e9acb0 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chat/item/CIImageView.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chat/item/CIImageView.android.kt @@ -6,7 +6,6 @@ import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.graphics.painter.BitmapPainter import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.platform.LocalContext -import chat.simplex.common.helpers.toUri import chat.simplex.common.model.CIFile import chat.simplex.common.platform.* import chat.simplex.common.views.helpers.ModalManager @@ -15,7 +14,6 @@ import coil.compose.rememberAsyncImagePainter import coil.decode.GifDecoder import coil.decode.ImageDecoderDecoder import coil.request.ImageRequest -import java.net.URI @Composable actual fun SimpleAndAnimatedImageView( @@ -43,6 +41,7 @@ actual fun SimpleAndAnimatedImageView( } private val imageLoader = ImageLoader.Builder(androidAppContext) + .networkObserverEnabled(false) .components { if (SDK_INT >= 28) { add(ImageDecoderDecoder.Factory()) diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chat/item/ImageFullScreenView.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chat/item/ImageFullScreenView.android.kt index d4efdc3e59..dad8872012 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chat/item/ImageFullScreenView.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chat/item/ImageFullScreenView.android.kt @@ -3,7 +3,7 @@ package chat.simplex.common.views.chat.item import android.os.Build import android.view.View import androidx.compose.foundation.Image -import androidx.compose.runtime.Composable +import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.* import androidx.compose.ui.graphics.painter.BitmapPainter @@ -11,8 +11,8 @@ import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.viewinterop.AndroidView import androidx.core.view.isVisible -import chat.simplex.common.helpers.toUri import chat.simplex.common.platform.VideoPlayer +import chat.simplex.common.platform.androidAppContext import chat.simplex.res.MR import coil.ImageLoader import coil.compose.rememberAsyncImagePainter @@ -23,21 +23,11 @@ import coil.size.Size import com.google.android.exoplayer2.ui.AspectRatioFrameLayout import com.google.android.exoplayer2.ui.StyledPlayerView import dev.icerock.moko.resources.compose.stringResource -import java.net.URI @Composable actual fun FullScreenImageView(modifier: Modifier, data: ByteArray, imageBitmap: ImageBitmap) { - // I'm making a new instance of imageLoader here because if I use one instance in multiple places + // I'm using a new private instance of imageLoader here because if I use one instance in multiple places // after end of composition here a GIF from the first instance will be paused automatically which isn't what I want - val imageLoader = ImageLoader.Builder(LocalContext.current) - .components { - if (Build.VERSION.SDK_INT >= 28) { - add(ImageDecoderDecoder.Factory()) - } else { - add(GifDecoder.Factory()) - } - } - .build() Image( rememberAsyncImagePainter( ImageRequest.Builder(LocalContext.current).data(data = data).size(Size.ORIGINAL).build(), @@ -73,3 +63,14 @@ actual fun FullScreenVideoView(player: VideoPlayer, modifier: Modifier, close: ( modifier ) } + +private val imageLoader = ImageLoader.Builder(androidAppContext) + .networkObserverEnabled(false) + .components { + if (Build.VERSION.SDK_INT >= 28) { + add(ImageDecoderDecoder.Factory()) + } else { + add(GifDecoder.Factory()) + } + } + .build() From ea6c5bfb0bc5276cf666ed9f0c96ae1613583aca Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Thu, 4 Apr 2024 08:58:24 +0100 Subject: [PATCH 04/60] 5.6.1: ios 206, android 193, desktop 36 --- apps/ios/SimpleX.xcodeproj/project.pbxproj | 52 +++++++++++----------- apps/multiplatform/gradle.properties | 8 ++-- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index 2a40cb41cb..6443c21b9e 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -111,11 +111,11 @@ 5CC2C0FC2809BF11000C35E3 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5CC2C0FA2809BF11000C35E3 /* Localizable.strings */; }; 5CC2C0FF2809BF11000C35E3 /* SimpleX--iOS--InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5CC2C0FD2809BF11000C35E3 /* SimpleX--iOS--InfoPlist.strings */; }; 5CC868F329EB540C0017BBFD /* CIRcvDecryptionError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CC868F229EB540C0017BBFD /* CIRcvDecryptionError.swift */; }; - 5CC932E12BBC94DC008A1EB6 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CC932DC2BBC94DC008A1EB6 /* libgmp.a */; }; - 5CC932E22BBC94DC008A1EB6 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CC932DD2BBC94DC008A1EB6 /* libgmpxx.a */; }; - 5CC932E32BBC94DC008A1EB6 /* libHSsimplex-chat-5.6.1.0-1MvnzcJ9TtTKuJWF1wc9Tr-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CC932DE2BBC94DC008A1EB6 /* libHSsimplex-chat-5.6.1.0-1MvnzcJ9TtTKuJWF1wc9Tr-ghc9.6.3.a */; }; - 5CC932E42BBC94DC008A1EB6 /* libHSsimplex-chat-5.6.1.0-1MvnzcJ9TtTKuJWF1wc9Tr.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CC932DF2BBC94DC008A1EB6 /* libHSsimplex-chat-5.6.1.0-1MvnzcJ9TtTKuJWF1wc9Tr.a */; }; - 5CC932E52BBC94DC008A1EB6 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CC932E02BBC94DC008A1EB6 /* libffi.a */; }; + 5CC932F52BBDD9F9008A1EB6 /* libHSsimplex-chat-5.6.1.1-KSjuZv7tE7cHRWd28F1Zto-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CC932F02BBDD9F9008A1EB6 /* libHSsimplex-chat-5.6.1.1-KSjuZv7tE7cHRWd28F1Zto-ghc9.6.3.a */; }; + 5CC932F62BBDD9F9008A1EB6 /* libHSsimplex-chat-5.6.1.1-KSjuZv7tE7cHRWd28F1Zto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CC932F12BBDD9F9008A1EB6 /* libHSsimplex-chat-5.6.1.1-KSjuZv7tE7cHRWd28F1Zto.a */; }; + 5CC932F72BBDD9FA008A1EB6 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CC932F22BBDD9F9008A1EB6 /* libgmpxx.a */; }; + 5CC932F82BBDD9FA008A1EB6 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CC932F32BBDD9F9008A1EB6 /* libgmp.a */; }; + 5CC932F92BBDD9FA008A1EB6 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CC932F42BBDD9F9008A1EB6 /* libffi.a */; }; 5CCB939C297EFCB100399E78 /* NavStackCompat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CCB939B297EFCB100399E78 /* NavStackCompat.swift */; }; 5CD67B8F2B0E858A00C510B1 /* hs_init.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CD67B8D2B0E858A00C510B1 /* hs_init.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5CD67B902B0E858A00C510B1 /* hs_init.c in Sources */ = {isa = PBXBuildFile; fileRef = 5CD67B8E2B0E858A00C510B1 /* hs_init.c */; }; @@ -402,11 +402,11 @@ 5CC2C0FB2809BF11000C35E3 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; 5CC2C0FE2809BF11000C35E3 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = "ru.lproj/SimpleX--iOS--InfoPlist.strings"; sourceTree = ""; }; 5CC868F229EB540C0017BBFD /* CIRcvDecryptionError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIRcvDecryptionError.swift; sourceTree = ""; }; - 5CC932DC2BBC94DC008A1EB6 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; }; - 5CC932DD2BBC94DC008A1EB6 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; }; - 5CC932DE2BBC94DC008A1EB6 /* libHSsimplex-chat-5.6.1.0-1MvnzcJ9TtTKuJWF1wc9Tr-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.6.1.0-1MvnzcJ9TtTKuJWF1wc9Tr-ghc9.6.3.a"; sourceTree = ""; }; - 5CC932DF2BBC94DC008A1EB6 /* libHSsimplex-chat-5.6.1.0-1MvnzcJ9TtTKuJWF1wc9Tr.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.6.1.0-1MvnzcJ9TtTKuJWF1wc9Tr.a"; sourceTree = ""; }; - 5CC932E02BBC94DC008A1EB6 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; }; + 5CC932F02BBDD9F9008A1EB6 /* libHSsimplex-chat-5.6.1.1-KSjuZv7tE7cHRWd28F1Zto-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.6.1.1-KSjuZv7tE7cHRWd28F1Zto-ghc9.6.3.a"; sourceTree = ""; }; + 5CC932F12BBDD9F9008A1EB6 /* libHSsimplex-chat-5.6.1.1-KSjuZv7tE7cHRWd28F1Zto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.6.1.1-KSjuZv7tE7cHRWd28F1Zto.a"; sourceTree = ""; }; + 5CC932F22BBDD9F9008A1EB6 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; }; + 5CC932F32BBDD9F9008A1EB6 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; }; + 5CC932F42BBDD9F9008A1EB6 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; }; 5CCB939B297EFCB100399E78 /* NavStackCompat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavStackCompat.swift; sourceTree = ""; }; 5CD67B8D2B0E858A00C510B1 /* hs_init.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = hs_init.h; sourceTree = ""; }; 5CD67B8E2B0E858A00C510B1 /* hs_init.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = hs_init.c; sourceTree = ""; }; @@ -521,12 +521,12 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5CC932E32BBC94DC008A1EB6 /* libHSsimplex-chat-5.6.1.0-1MvnzcJ9TtTKuJWF1wc9Tr-ghc9.6.3.a in Frameworks */, - 5CC932E42BBC94DC008A1EB6 /* libHSsimplex-chat-5.6.1.0-1MvnzcJ9TtTKuJWF1wc9Tr.a in Frameworks */, - 5CC932E22BBC94DC008A1EB6 /* libgmpxx.a in Frameworks */, 5CE2BA93284534B000EC33A6 /* libiconv.tbd in Frameworks */, - 5CC932E52BBC94DC008A1EB6 /* libffi.a in Frameworks */, - 5CC932E12BBC94DC008A1EB6 /* libgmp.a in Frameworks */, + 5CC932F72BBDD9FA008A1EB6 /* libgmpxx.a in Frameworks */, + 5CC932F62BBDD9F9008A1EB6 /* libHSsimplex-chat-5.6.1.1-KSjuZv7tE7cHRWd28F1Zto.a in Frameworks */, + 5CC932F52BBDD9F9008A1EB6 /* libHSsimplex-chat-5.6.1.1-KSjuZv7tE7cHRWd28F1Zto-ghc9.6.3.a in Frameworks */, + 5CC932F92BBDD9FA008A1EB6 /* libffi.a in Frameworks */, + 5CC932F82BBDD9FA008A1EB6 /* libgmp.a in Frameworks */, 5CE2BA94284534BB00EC33A6 /* libz.tbd in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -590,11 +590,11 @@ 5C764E5C279C70B7000C6508 /* Libraries */ = { isa = PBXGroup; children = ( - 5CC932E02BBC94DC008A1EB6 /* libffi.a */, - 5CC932DC2BBC94DC008A1EB6 /* libgmp.a */, - 5CC932DD2BBC94DC008A1EB6 /* libgmpxx.a */, - 5CC932DE2BBC94DC008A1EB6 /* libHSsimplex-chat-5.6.1.0-1MvnzcJ9TtTKuJWF1wc9Tr-ghc9.6.3.a */, - 5CC932DF2BBC94DC008A1EB6 /* libHSsimplex-chat-5.6.1.0-1MvnzcJ9TtTKuJWF1wc9Tr.a */, + 5CC932F42BBDD9F9008A1EB6 /* libffi.a */, + 5CC932F32BBDD9F9008A1EB6 /* libgmp.a */, + 5CC932F22BBDD9F9008A1EB6 /* libgmpxx.a */, + 5CC932F02BBDD9F9008A1EB6 /* libHSsimplex-chat-5.6.1.1-KSjuZv7tE7cHRWd28F1Zto-ghc9.6.3.a */, + 5CC932F12BBDD9F9008A1EB6 /* libHSsimplex-chat-5.6.1.1-KSjuZv7tE7cHRWd28F1Zto.a */, ); path = Libraries; sourceTree = ""; @@ -1536,7 +1536,7 @@ CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 205; + CURRENT_PROJECT_VERSION = 206; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; @@ -1585,7 +1585,7 @@ CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 205; + CURRENT_PROJECT_VERSION = 206; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; @@ -1671,7 +1671,7 @@ CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 205; + CURRENT_PROJECT_VERSION = 206; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; GCC_OPTIMIZATION_LEVEL = s; @@ -1708,7 +1708,7 @@ CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 205; + CURRENT_PROJECT_VERSION = 206; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; ENABLE_CODE_COVERAGE = NO; @@ -1745,7 +1745,7 @@ CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES; CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 205; + CURRENT_PROJECT_VERSION = 206; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; DYLIB_COMPATIBILITY_VERSION = 1; @@ -1796,7 +1796,7 @@ CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES; CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 205; + CURRENT_PROJECT_VERSION = 206; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; DYLIB_COMPATIBILITY_VERSION = 1; diff --git a/apps/multiplatform/gradle.properties b/apps/multiplatform/gradle.properties index 1bfac36a28..fbbab0ffab 100644 --- a/apps/multiplatform/gradle.properties +++ b/apps/multiplatform/gradle.properties @@ -25,11 +25,11 @@ android.nonTransitiveRClass=true android.enableJetifier=true kotlin.mpp.androidSourceSetLayoutVersion=2 -android.version_name=5.6 -android.version_code=191 +android.version_name=5.6.1 +android.version_code=193 -desktop.version_name=5.6 -desktop.version_code=35 +desktop.version_name=5.6.1 +desktop.version_code=36 kotlin.version=1.9.23 gradle.plugin.version=8.2.0 From 5f9710e4bb2ba643888fefb220e46dad5d621c44 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Thu, 4 Apr 2024 13:17:12 +0100 Subject: [PATCH 05/60] blog: post --- ...y-i-joined-simplex-chat-esraa-al-shafei.md | 38 ++++++++++++++++++ blog/README.md | 8 ++++ blog/images/20240404-esraa.png | Bin 0 -> 11788 bytes blog/images/20240404-messsaging-apps.png | Bin 0 -> 186897 bytes .../src/_includes/blog_previews/20240404.html | 8 ++++ 5 files changed, 54 insertions(+) create mode 100644 blog/20240404-why-i-joined-simplex-chat-esraa-al-shafei.md create mode 100644 blog/images/20240404-esraa.png create mode 100644 blog/images/20240404-messsaging-apps.png create mode 100644 website/src/_includes/blog_previews/20240404.html diff --git a/blog/20240404-why-i-joined-simplex-chat-esraa-al-shafei.md b/blog/20240404-why-i-joined-simplex-chat-esraa-al-shafei.md new file mode 100644 index 0000000000..e554db5102 --- /dev/null +++ b/blog/20240404-why-i-joined-simplex-chat-esraa-al-shafei.md @@ -0,0 +1,38 @@ +--- +layout: layouts/article.html +title: "Why I joined SimpleX Chat - by Esra'a al Shafei" +date: 2024-04-04 +previewBody: blog_previews/20240404.html +image: images/20240404-esraa.png +permalink: "/blog/20240404-why-i-joined-simplex-chat-esraa-al-shafei.html" +--- + +# Why I joined SimpleX Chat + +**Published:** Apr 4, 2024 + +_By [Esra'a al Shafei](https://mastodon.social/@alshafei)_ + +Transitioning from a lifelong career dedicated to nonprofits, including Board roles at organizations like the Wikimedia Foundation, Access Now and Tor, my decision to join SimpleX Chat may come as a surprise to some. But, as I step into this new chapter, I want to share the insights and convictions that have guided me here, shedding light on what I think sets SimpleX Chat apart and why this move feels like an essential learning opportunity. + +The nonprofit world has been my primary focus for decades. My team and I ran the platforms at Majal.org with an extremely limited budget. We had to navigate many complexities and challenges that shadow the nonprofit model. And because we worked primarily in creating applications and tools, a recurring theme has been financial sustainability. Being a Bahrain-based entity for most of these years meant that the many communities we served were not in a position to provide contributions and we were not eligible for most foundation grants. This drastically limited our growth and the reliability of our apps. When we failed to raise sufficient funds or meet our target budgets, we often had to shutter certain applications, sometimes after spending more than 10 years building them. + +With secure and private messaging, the stakes are even graver. Any failure to commit and resource/fund ongoing development, security patches, etc means lives can be at risk. I still believe in nonprofit models, and it’s why I continue to serve them through various volunteer roles. I do also believe that there is room for a mixture of models that, in the case of something as unique as SimpleX Chat, can serve as a fully open and transparent public interest technology while also having a profitable values-aligned company that can keep the lights on to continue developing, expanding, and improving the protocol, network and their reach. + +I’m no stranger to writing about some VC models being [corrupt](https://mastodon.social/@alshafei/112125959080515656). Frankly, I also hold the view that some tech VCs are amongst the [most complicit](https://responsiblestatecraft.org/defense-tech/) in egregious war crimes worldwide, or enabling the [intrusive surveillance](https://mastodon.social/@alshafei/112140566088322925) we’re fighting against. So being part of a VC-funded venture is not a decision I take lightly. However, I have been following SimpleX Chat’s growth since early 2022 when I first met Evgeny at the Mozilla Festival. I appreciated the drive and Evgeny’s firm refusal to settle for the current models of private messaging. We share the belief that messaging is something we need to keep improving and that we must continue pushing its boundaries to make it even more private, secure, usable for groups, and, most importantly - fully decentralized. This is a major undertaking, and it requires funding to achieve. Candidly, I did worry about funding and sustainability because, at the time, SimpleX was still primarily funded by user contributions. + +But even knowing this, I scrutinized SimpleX Chat for taking VC funding ($350K) from Village Global and questioned the individuals featured on its frontpage. I had to speak with Evgeny directly to learn who exactly from this fund was involved, how much power they wielded, if any, and if this changes the ethos of the company - all of which he is already making public. It was only after these discussions that I was comfortable to take a leap of faith and continue to use the app and vouch for its current and future offerings. It required me to question my own views on whether a VC-funded company can actually have major positive contributions to privacy as well as the open ecosystem. + + + +The web has a long history of [trading privacy](https://www.engadget.com/from-its-start-gmail-conditioned-us-to-trade-privacy-for-free-services-120009741.html) for “free” services. Traditionally, these services have also been centralized, closed-source, non-transparent, and profit-oriented. The companies behind these apps and services became prolific because of their disregard of privacy rights, which normalized lucrative surveillance capitalism. There is such an extensive global monopoly that in Africa, only 1 of the 5 biggest messaging apps in Africa isn't owned by Meta, notoriously known for spying not just through its own apps but even through [its competitors](https://qz.com/project-ghostbusters-facebook-meta-wiretap-snapchat-1851366814), – relentless, massive data harvesting that stretches far beyond its own walled gardens: + +Some of the world’s top engineers often go to these companies because of the benefits and financial opportunities. We can question their ethics all day long, but we also need to question if the web would look significantly different if there were as many opportunities at privacy-first companies with purpose and strong, proven moral boundaries, set up in a way that can guarantee operational independence from any shareholders and VCs. + +SimpleX could have taken the route of other companies in the privacy space, whether it’s Skiff which rushed to take a large amount of [VC money](https://techcrunch.com/2022/03/30/skiff-series-a-encrypted-workspaces/) only to [shutter its doors](https://www.techradar.com/computing/cyber-security/skiff-gets-bought-by-notion-raising-privacy-concerns) after an acquisition, leaving its users hanging with many unanswered questions, or giving up control of the company, which would puts its future solely in the hands of VCs with majority ownership. SimpleX aims to prevent this, and in fact has left money on the table to ensure that it does not occur. Had it not been for this information, I would not have joined, and I would have remained a user of the product, albeit a very cautious one, constantly wondering whether it will be sold or corrupted. + +It’s worth noting that some private foundations operate on the VC model in supporting nonprofits, either by requiring Board seats or requesting that their funding be used towards very specific objectives not always in alignment with the organization’s values and mission. It’s also worth noting that [some nonprofits](https://www.engadget.com/2019-05-31-sex-lies-and-surveillance-fosta-privacy.html) actually operate on the models of surveillance and censorship. Therefore, whether an organization or company is VC-backed or a nonprofit should not be the sole factor in deciding whether or not it is trustworthy. Actions are important, with full transparency being one of the most critical factors, and being fully open source being another to attract valid criticisms and audits to ensure any product or protocol lives up to its privacy and security promise. SimpleX Chat prides itself on being both transparent and open, on top of also being fully decentralized. If you’re new to it and eager to know more, you can start with [this overview](https://github.com/simplex-chat/simplexmq/blob/stable/protocol/overview-tjr.md). + +Another important consideration is that the SimpleX network does have a plan that would rely on users' payments for specific or tailored services, and not on some other sources of revenue or funds (ads, etc.). Building anything that users would be willing to pay for requires substantially more time and resources, hence the VC route to establish a business model that doesn’t translate to the user being the product. But any business services need to be separate from SimpleX as a public interest technology. As outlined in this [recent post](./20240323-simplex-network-privacy-non-profit-v5-6-quantum-resistant-e2e-encryption-simple-migration.md), I’ll be using my background in nonprofit governance structures to ensure that the SimpleX network protocols evolve under the stewardship of nonprofit entities in various jurisdictions, so that its continued evolution aligns more closely with the vision of community-driven, independent and decentralized governance. This would help create a necessary balance between different structures, in the same way many tech nonprofits also have for-profit subsidiaries to attract fee-for-service agreements to sustain their operations. + +In summary: My decision to join Simplex Chat, despite my deep-rooted beliefs and skepticism towards VC funding, reflects a broader realization: that the fight for privacy, security, and decentralization in today’s web is multifaceted and sometimes requires us to depart from our comfort zones to explore sustainable paths for continuous growth and impact so that open source privacy tools and protocols are no longer “niche”, but universally accessible standards. As long as nothing in this journey compromises our moral principles and integrity, this will remain a very worthwhile goal to pursue. diff --git a/blog/README.md b/blog/README.md index 7f27c46c76..cf93260676 100644 --- a/blog/README.md +++ b/blog/README.md @@ -1,5 +1,13 @@ # Blog +Apr 4. 2024 [Why I joined SimpleX Chat](./20240404-why-i-joined-simplex-chat-esraa-al-shafei.md) + +_By [Esra'a al Shafei](https://mastodon.social/@alshafei)_ + +Transitioning from a lifelong career dedicated to nonprofits, including Board roles at organizations like the Wikimedia Foundation, Access Now and Tor, my decision to join SimpleX Chat may come as a surprise to some. But, as I step into this new chapter, I want to share the insights and convictions that have guided me here, shedding light on what I think sets SimpleX Chat apart and why this move feels like an essential learning opportunity. + +--- + Mar 23, 2024 [SimpleX network: real privacy and stable profits, non-profits for protocols, v5.6 released with quantum resistant e2e encryption and simple profile migration](./20240323-simplex-network-privacy-non-profit-v5-6-quantum-resistant-e2e-encryption-simple-migration.md) SimpleX network: deliver real privacy via a profitable business and non-profit protocol governance: diff --git a/blog/images/20240404-esraa.png b/blog/images/20240404-esraa.png new file mode 100644 index 0000000000000000000000000000000000000000..baee24202340fdc8a9ae78613d88ac2432fcd933 GIT binary patch literal 11788 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�lpp4wal(ybGYx{LN zWU>0;G$|G2K*T{eUwOV5Cz=UoNg8$~T&@K<>_n!^2O@OcA{ZQ-i)-}CqG zO~IC&Cry9qI4+dk<+1Uz6l7E%%S8yL&u?f%?D(Q%1#Ogr3}vcNLDx10TMG&y0A(|Q zyod=s)XX%=IjQcsb8S<&LkkPLm0s4Bc8jN}V@aIHtr5iKr#OXJuKwH6Ywsq zaj!0Ss;0?}`rm8?`Fv>l^LjSD`BHQ*J4Ue$L-oO^KbL~EGzT(X`Qgiv;nREVz5MC}L*Z3^;vrYROlR zKRn#*0by|S-69K@1v)6MD%=cXCYEu8dtp z6WTo9c6CbMKkkkSCz%l!)yVNHjN)R}$QgU_?o9cB=Q#h*&7kWJ_^P%bzT{=CLEn)9Zp+5pMm>pOMO}p&az}hxuj3 zT#0?|52w=w_?YW~(ZpeEN&{>=jLK<{X7Z@2n4`*$QNdxCk?r?QWLM+6;$uQ{p^$2_ zgWopiTsS6pGSYzLR`)F0#0LSC+Q8&8HVHwi70;+M!kHb~GP7OP!)y0b^`51#Hc2_D zRuOpSCCw%g*H=;vDjse77IurA1!w%;@wEIRuO~zNnWe2I^d4GS%v(B#AO98})yi&l zNUKTRxCUM~XNz|a8W?(v#C^x!%t6$8tdz(crshX8mxS`5?lz0Mt@4kY%)^tznLPXN z-Xdw~Iyj`x=%q~zzqTF>LHk~kc_T}zPtCRZ@@ZPwf`6sE@^|My0I#xOKbVKg`d$_% zNB3K32b7zv<%Q=m>b@M!4}TqDKz6}l{!$2|ot!0D_vieRUhXsMs;Oh?`$m;5#g7np zILT+L%;=wbm{i7ri%aC+Up9&NTPnrz=ypSm{btltycPE%yL_Z?5iLZDBcCU3dwzf4 z{#!fMv__C>F zSiPg}{I=Lkh4{?|;Rt2LC=LsB;u9F8p2jWYJp7Z6kxrO4i`Mvs9U@Pw4b376tv+3E z$VXHv-+0u3xcsxTnh;{@pM=PK{$zb622GK+e8Ri6g2+{#^6FPy$xkPAn1&n9h5FU<$+b)B zoz(^zI~b!jQ(rvK&iYcP@exqpj|WsToof)yIPak#iit8nXaf`&IK zecY5@efoVCn0!CmBO5;g34eLIHYRzt>lxy@aP^DcqCxHathhok6b{w@YL0&yc+;BIE?s|kqfB(3?vWa5PO zS@nK`5Asjj%tYJb6$4?6U4IuJh>LF)triFT)O|nuQ61DFSnrPeTl43cP*~~T^|KxF zbr28QCr5YB;f&Sco=^z+^43`bYZDfz&C4bSae0TPbR*>I z&3U2M(xl3yoAI_*{eenQyMF#J%OXJ+kp}b`oxT%$3ohMw-82Wx(K5-WlCqTj@+A`d zGekgY7IsIN)*fE(s96-9oO&LDZjpEfavoZfKQwm!1Y0hA|r z&#&(;Q!y0?f%&1dVJ+gx;2(ywwRtb`ZXBiH`#417mqsdZua+_((?f{^}V`lnbr-USPCR^Llr=m zr6VH)n*LUpZVY_xw?=J8gQE?h0&tc=bupExeBC$};K zMHFT;kBp|Ltm`R+6Mg)~TSph9HrpZZU)&S=!Dk&L4UOP^dW8%?a%HrP3Z;=HRJzyA zo(_XYGYBil~QprQX?#n1n@66yc%s7rF0w;vBQ+y?#tMcE*24Sn@Dsy0#o18VA1 AHvj+t literal 0 HcmV?d00001 diff --git a/blog/images/20240404-messsaging-apps.png b/blog/images/20240404-messsaging-apps.png new file mode 100644 index 0000000000000000000000000000000000000000..6081a468a1cd3837d9aecbb31d8f8f1a60602200 GIT binary patch literal 186897 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

i2P!9@uqDp2tQIJ)7BYVj=8-PMR; z`Jw%m@$ob9SL+Et&%{UwHrW5JpFY6yVXwLqmkpkSI^pYG^^haETX=s8`NkRFPh?EZ zg~p14OOw!<5`+!B`(A>ROJ=XeY=^Voi2@!&!`HI=quRMa+UaJA zkrn&*&xJQ_C;JEe-bZbER6?FC#P2UIcc)3bM)^XlYd>QO^(A*Tp8Bm`L+2;5^T85g zT0@L5$S>21cp4!(^~xuuVp!be{w0RZyZA$=QU~wn&M6XxJt>Zb-)?49ICruxG};@F z=_$mEE##F1d5iFP6LqI`?A+h*FFvZXU{BlncA(wr4mog&_vIc*q4Z4am=Xha>db${ z0qJd+LS!y!mZHOpb)ND0IWQQsVZA?Mq6id_4Y&xH<$_|XS3sMqLe5InadtbGR97qEFt|F4ujUAyM5@|z} z-g9t`8@yujasLUa_1WVMCBLcp)@kkh3ZBe%ee}!Kna6X;WQ%)u%A)o4E%FFa$_G78 zW7Z@(&>Q6bY1z<_UP@GHlv9hQ|7JBIaX@gT|D5R5sQ@3+>;Rv7laCoT3nmvLKD6~v z_oQ&!{RWaE*Ma?TW}f#Gs9$Pv=Q<=HaFmsb+h4k+;N9)H#_Df%Zr5)62quT5Ybnr0 z(nT^XHPDC4Ly*hE4wqfsMiYJI-&@g zS_xK{)yNAu-?Y3Cdi>#GLwgzhxh|p80KePYxw9=5*ALE}1WYGkg^NroWCoNnV+P*b zJ-%Qpl46SP-V4K!XSP<3!9`VI&|ZTJ(Bqj$tM8ICyroA}?w z9!WpQwkZ|0WW{STY1#*@wjMRH_%TeI3s0SJe9jRpD!iZHh&WW?(xk= z8D&BL)-;DpYczvh&C#LbS$u}+9n$c6VMZ;RN7d=R@VU&7%C(*P!xu<&Ao5mNAcnyVjHiE*c=za)gx1guJpDh zCO!H_MB!#>Z8$BmhbYVP@zhUK%w4@}c6;k(2%`uCCFO|m{bBKXewnrm-Qw$>ZXJK^ zBm5-?E6_>H^E7c%xVRiB3(?&)H73>A+HuamOm_(KVp{zsW*QjE3pC<|F+ObLk^;$tGl3Wg?xI8w}>Xgy5aTXzF73I`|rERvbnuJ3z!~KLG z1{1|S2(9M8`6>YIX+zA5|H_3U}-e_H( z5+4%P^C7rFzbe{dkdG$k)!pHdfAvn~@F~)s&JY7IM%0PFNNeBvntC$Cb_5Uh^P8R* z?!Fe4klV`~Eb;@zWZLIBUWb{-ChmtBywHaqe~Ev-K>x6cl)U4)T;#cR?}|35!v&>i z#g_wxPZaf5A+LTMaCH_~1liM}L45_?$2{m3T&9@idoEY-V(ne1+3^&=VCx6)2C8zI z;?*SeA{{-T(|oCQ#6ouLsK{tkLs~j? z>E;p(<3^m8=#QIqB7i{VBG5QE2*&? zxxXorh(XUw-jfSl0~`TZzIX#o`r?fL6WP*H^li_};gCdvhl9hPZ$=G5=>k1>L_Qw@ z@M7|N!xZ(wa=MeEl^QleG5*@}W|hlEAV<%Rt6#K!TwK{0BlT`N*T_{QzME5gemx;q zzl{2SIX6>3Ea8DBg*=~8-JEJ{VhkCK!4OUTj&H`=uM&6+1RST}#-#L{!+|H#$~>T= zX+b4FmE}mNq$#)Kz`2Ij%m`Ldc8|sb1hx4xujh@}|2pB^<|{`+YGg( zw(6}X(Du@j$C|zsDgcL9YzS@`whtJlD;rZtm%Psb2d(enXE0F(ZzG3}&d#dz<=QH9 z?WpO3_Wiv)kC^pZng{4(dcQ$+r)EWR@o^1$c&O|myZ+r$sfOCPV@dNN|Nij7jbwi2 z6?2w`&+48;_9yg%-iF*tj%Duy>i*|q5O&X>i3RsqldNspj`f(RH^jc0zEjmR%)aWP z4kLxe=c?5P-+h8n@4J-hXhdeoEW*s1&G|8>lK0DW(RYer)dz+H{%1SJ#Pab}k@h>V zfXSIqv%QfmwU4E1dKGGArEeZAdnd>Jg2wJ2Zk0q%oBI_pn3unTBOmOVS(I^Kb-FNSG z4@|O7o3ZqZIZ@pm1ayGTP`IvfW_y=uhcQtn$k=bLBD&&ChpG4~$|#RE;3yqIx?hxfkTSb~$s%Bkih zbq7{seTJ%M>L&MYQsI#*{q=w{$&?nf=8>$TaTdbQPTybOU8K$<#oJh#Q|DzE zMnb4EnYeqJN}oM+=$FmtpRC)x6qp_UwnX%8uDaSL_t5bLLwT}T34FyRJI&W_S9_}? zEGGKk;QYnTbKlkrVW+tyr&ALOek->Sz8<7pSIY^Lwg7$+-%;fxDHXYa7Id-hA}n$1gd@YDwG8K{*-JRd+*Uy7sCd!kt{ z67e-|fB&4aHy%ohqZU~Xz?zTrQ`W5$n{FmMAA_B&hjxKxQJNupllnuh3*C!S8D;!2q~ow`vxcskT_H7oVy+^{6cJ z)|TjT>Q*_*W7)I*8@+P`BJyGU7cd0hTxiU@`HODEi;7#opo`qxr8UXf6(y@eO@(=3 zl$1rlg7O>4ErG7dMO3O5Lz{um&2Zfn{iH&EKqyV_XsDQ}q=JfNm8%@ra_6h1 z`6^bOq#mi76S)(~+~W_x2_DKHX{4_-4QCsGkCET8o4YT%V{u-};9gxm?GWtFSLd2B zU&hD!8KF~N5)Fp7)>w~qQ6DA6i{G)BiKIt{AIWax*Tdff1`kC;T;F(uwz{Kh<2GX| zchT?LnNE>pNnopW0P-O$%uO){)N3(?ZQrettz$wE;ueN}I8jctv}Vf1tHr~o1u}7P z81~%C(!OGNhOw3(mH1n5MP=lfj~bk|s&wI&0?7Ur+RJXftJkZG(V(RwvWNCNd8s+ zY8R%JO0*e`_)2}_14JLEd?1MJ+ zp~i)7MdNv@u(y@F(d;`>?Xt7->Vj$(3lSw;okQfANFR;t*XWfXRc%W0ABCrY)d!Tg zF^+BSd_bo15c=WK{S6*IZYp>{14sGNF77Zy=>1Mi61JK5m!H6UW!(!*=aqE=P)oPdP!Yo{l$r2$IdW>Q7taU#po9x06$-zB#EVY8XBPp5h9P z-B@SocaCk$jY#ez`X8o_fpXHPMc3Lk1+QTK9qI=;-nh`LiBtTgIUJ{fdueT#lC|)!WUCLfM5+W?db<;s;Aapu`c7ARtp4e&l0>Xq#>CfZ6xK(Ws4u zFWNN)kDD9Ck})_$-7D>%Yk3jNHv!6dIM;Jr0%RheSz`wCr8NaFvWXNW9~CrIsp;in zv6VXu7c{tTuZTjKz8M~so%HX#H~T6C>ErK1XV5UJnGXH}GQ?EEQwT7ZkCUauNJpXQ z+HS~=$d;t5k&k&slGZtc0sq!upN{5phBfbN1;frqVr})9G-~*Tbz%J;P)VO36Uc6I z2jD@pjU2?th#{kR`Sz|!BgL&e8vQXFO78&a?0{VCDZM%J#6LuTfhHefode~{xc_CrvG7hx4D;00r^QX5vAc30I;a3GdUPjY0$2mmc0MFvSTx84%B%nlh>=|;9a=TM|1F3*yj|;LsT#1iPf{Kg``TbATLZ+lmTe1(L1lVGz@ zo;_BxxQ0+eS<~*z+)6|09HRs;V&Z7!SOz@(u4}PEL{1%!4%-vaLDliD?_a{TPOjFOqb^r`x#sXM19cL(etdR_gip3r z%o*J@8_}d6%vIn7WyADyy**y_D3sV2dk|ArXdgyZz*8z7IauU%$j`Nh?@88yA*KKA z&?-SPSIEJ6yI~lt%G+nz|FPDUn&Bdt#Y#Fe1w(_GOa`s$#!dF5Ln>smIGlaBHi4=% zV>luBnkjwb8eEGeoFsYXPP8_xDAf5;+$QVS*6&A`cU%&ww zBzPT&k9L=XX~8tNek(&-nIza7e$-~{@O7Jn{XjbNgIL8OTh%${R31JGeky-&c(h3t zTh9RoK?6}kq*G9vmL_N?z~ zv}~6OCKh-i@Qcq*wKH0GXaoDo*1gjGMmA627dgeGZG;u+0xkK_zN1p-*Mh&w(s>@P zdKo1nifh9)fKJ{X`Vgr;KOod9HX;rfw#T)m@&Y6Nvq-^py@AZ`LPm7oVGftnev(4Z zmU23obH{^R!pRr~Seh;-4Z!hp2=pL0Oh-xQP?7`@dn_lTYXszw!fE%cpMN^4P#{(4 zNgWmASoZl93ou4>YMZ_b{p3g1~&$ zCy6zZnL+%PGx-ACbDvHU%slueAenU&VbMNs7m_Hc<;ZtJE$ZCWlKg?oBW+F(ZR+U5H%J-GCkKDH|8Q+E|Bj^9kRp9O5r@DU)`%VL!Eg*cuPXueB?m(PU-7 zAk6BigxkZ`q~Ua78roYzgYXLH&0d4*#|9%@!l0;&u6x8{lKhH{0~VF%yl1b+u(+*_ zG-xq}D@GM7RK@aa`AW%xi#58nnYdz}^On?wEjwtKd{8^JStSU>w!#*)!!dDO*2$)R zwSzETtN>BT<|_%GE?=C~5r@%8y>Fg?6pnQziH;X0#0qCzP+lT71mEuDfr5h<(MKuj zt;3QK@oIi>3>_8I`Ve2L&uKkp8S;+4$`$stYhS0v>(2h+LF)W?QK>OdVh$gSj=!b9 zbOoGF7AN$+KYq7O>ubfqqkE3U$OA-gSwj{z9X1=dn^|)kTn5so}0SOIqh$-BTt(_M|q&g{7;DIVX{! z@I&%-;y}}V+V8{}$}IxS4tY}1XP1+jT2*h8ee8A}Hx@ob@1PKCg3UQ^caztZ$2D{K zn>tUtPwQke5#J6`5(ly@Y>T%@VCFOTekt@gy8RU9A6HEj>f+YJ-dt0)H z_FSEGJ@&5>=r$!4C=cBnyyQU|EW+{)K~QA-Jyg2*T9Zk^S_hTyG15qNkyaZ@O@u=# z3!0p@n$D||&+f4mqZ`;sht$Q+bnqt=J`r=GCf2{bcn2I7`#L~lhMCmqmHP~U$Zk;k zK(9lP7Qpqetrt}aE|fZrKp4S#`7?d%B}1=)zi;6;Mk%Hgl4qUJVMTN)jN>4QUKrw? z^>`*V!yXAi8U9RU5vOtKonTsi+o==_encCP=9KpJRc5o)N)3BSb_``GTn>`iNHT#5 zMLaO5_dw?4MjM#NnX<0YLa>cHqR&4-!r`HKD%b+8CMp$A9-2APif0F(P7fNAa z!3LI3o!?nN|kyGGJLE*YT6qIBj$SDTXWDTAi z%vV$&j6P?@QYR)OHqL^-s?^yWj@=;XYfxZgHziX_M9d5Uuib>edPnovcYtLWd`Y7( zk3(ayD%_m*xz3(Vll`orS)o@pAHcXasO08K1f_FU;aQ?9#g`g;3b0>{GVs9(CbGmR z)2=tc0WmT>DkATC0&73$c9F9^C~7l>OW8e`$J@mHu6%0~-Dxg%M2L91|M*Z0dEQSB zhj$SsHQ5cn8}Ny~t`NeaXoj4Uq4IB}rqdQ>d>p$+J5A#Wmhidfstz;kHVDRtC=P7y z?Bwc~hZsp-hcb5)sf+8+%*-w35f6@t&1Mc{x{pwKtNL2r7wQa9?pwJ-Y1S?^B;>MN za$jlp!LpNIQ-&0JJyByd{r!97b#?N4xcEqJV*Dz6e{IaY@j6I5%wQ=G2Q050RJlIwZ>i``v3=VQy^vU80RpY`Mg-GYRIU z>hj^JnJ@!idC4eCF&eY6;Wi*L20j1li^Ah~+_qXQO_{L0oJfb4-rEj~gFHqiZ&E9- z_M9v3pI>cW6i>RgS@<;{J9L9B;-Jn}h6&7;WAMX`Or&b%l)Q7c@hvyieFbR9HTvA< zfXPHjP$S&{?oa`AjcVu~CrOz_6Rt~#PI9(obx@$u$GMHUEMOA0z8`A*_&kQ}IBY0a zzAXK-_WWt_Xq2AugL19y{lKwL!Q+;ntB+s2Q|a&3lfg4`Ip)rXd*@=e_asW^wB}-( zozZ_y+Qvwje=fW`puTxOPF+M*+x#72`#qPRIUnwIyV-ZB{>LhS8JNGaPV%tS5Hp!h zMNJ({;Ae-OUWf3OKxE1iH!x(3v(HyevqbEDx6Ltla9 zXVe5r6KD^_4D{M=b~S>EJ=9VlN4wfMb7? zKml_fXdwlJ1E{AWB!u_Vv|t4{SA9Z%G6v?0W>=?pCpN-08o%yQNO@lNbPDH;dj6YkSwb=d@>L%Wa) z5=vrWJE?@sTvmn&YUcuBX$$o9h%6k$71dUhS80-Nosl&RwK}NiI>~^QPlGSp!nUV-5vvw78{Je9h22{*sR~8v%~XF235uxBY6R7F{D^ z*~3?TYn5v|XgUn0t44!SAO^(3;`faPnpG_VX9kPVP zXW{z1IcH6HZ@qu-0UlH5Bf;iN>zXKtW1^y+ev9avdq520jZs7O&R~%d%#K2FmZ6g% zpdi7w$C=POq9HL0;>-1!!;*!5sx_KGW~{-aTQvB2fCbH283)$7ARLVjHUbU2-A^!; zmP!l|#Hq8miXb4sWo0F@!8^;ucQ7o}<^A<`PS@ZZ507O*YFEfY^|gnit7BF7g$AZ8 zt>>1%ah&y-_Q&#f*iIkSHW8IFevviGQVONt5-pQiGV)!Dx8dm1mRnW?tqUA!7kbA( z-=s<3rZ}pojwZtmv&OzQ(71A&KjS)>>i+(=3(FnX+>zQVI}kWK4-+V=~xp_AZqQNwoSw+9Ully>}ItWc+!z1>!bFi;pmH) z*;zen>}G_W`1?1+_~)XDR&9J}w9zhwqUW^bt&2z$Tv+UD81e~hgvZ#c5VLngJJfa9 zSRKT5&sSIqcY$Mrn`Ozt2w^fkgq?%^G*eEi#rLa;$(+w7Yf%mg130A}bxF?p3jni3+lciX9$8{^HAoT&O`$GUY)>fcH?t|&usNMpZR zkF$r(Vq?{bxRW5gP2Z+7kL4HNRPIUp%`>;!YiOD+u_*OT>aC>L&IL~{2G+E^Za0kN zH=tOS4qGU$b^sR8bdeBK#ytn=CDO~TG2e7lfFnYWXok{)-#vP2NRZ-^4)?>)QAc$u zEXDN>3D{q1=i`0K?Q3Is2W$q6_p~vb%XR32luyp}n}2>Cno3|J%J=~xDdYy7>-0HK z5@QUJNL}E!1i?qiq4%4qNdw7#MAOmyk`DfW9^QP|b7IPaf?Ss1>E`pu6DI3^maXnC zt&C1k+7OnjPFiV#T_6*w` zhJJ9n9G4Q%=TMPmJ)MQR39T?FPJnIkFoN-5sAfc`8H!ztjD{4j@SD>fs&Wb=qI_FB zJA2CEyt}3}zkxH%XzOi}%M8QBuB_lYIhtgfcPEzZd3RPmUF;;=i&m_!(4ISB$Z$ZD z&YX3-lCD#glF$Rav)MuH_$YoIazZ)6;^{#ILXj#~6VTk|?~8d8cDx@L-Gj)k1;_>W z8IC0ARGK+Q5=nB|@z{=FJI{zQOaigx)_7coRspU3?J*b8Js{Iz5sO2m@zh~V@epQQ zA>nBsrI+`_M=S)|rdggwk;kI$2f?4|e~cU;3q>QPLLR_ac@cQfAGM((kwWZHhD=@)tFCT`-RLAn*%vMW6U z`kriI+EBaw8az)RjNO)K-%I18an=FSL&?En(V2gKghEp&bU4%79`2I*bbK(*nvr;E z(fe3zRMf^Z>~*7;BabEx)1tW4+ijdn>%X3Qix25q%2&|xPnAeQ-QqEABj)^wTvtkEIJ#HO6t7mYm zwG7>>+h~`W31L8Ny&WwB%{QqRDUm`+?SzMUZ~Kk`1pNb~QUvPwH^GcnP7On7q@jow zk0u0CkbX^|dXpIG7QP`Iw0uIGD8=xWTGUEqlki*V`0aiwTksg;qRMl~8o^n{BDyC8 zT=Z?i)8b3Xk?aS_5s6i^Eh^FjIvy>_?|kmt=Ur8%XGS1unj8`4n@e*7EqsJcbszn96JZsG@(T0Te#G4Od{iBl@ zx>Y!PujplIatO6c)yZrZ_~&qy!nf#LK(?pXs^p9*sOqAR4h$7D#f1`Criz`KJBc=Y zw3OTEDEN`Widj*0Nev@jz~5jcz)i}8B+qBx(a$wqIRY>_&)1umW>QmPQ%Q9O zvagQM7#oMwc?|n#BE3PA^LD-j_SqNcin*B0sK*wdKEk?v8ft(0bNv>xuScFL35F@x zD(mV)(o&9+I=q)7bK8a(W*P3y@-&nzZh3+8E1P(#UQCPHm#q(V2wGH&yF zNw`zo!D5?Zg~;~xa=SPE@Jl1+^HP3Pco$e66h4Rrd-uTGsfm_ui8R99W22h!2^`^( zvh+*i!{-8%h6y;N>WspYNwHKr`&u+$bb1m;>n798X?qkGl~U^Kw0se zCR#;R)^k$gz<{ap0^j9$j$LAv&^!rWKH?XER(fbDkQKmT;pingF+dkO=C`h zBy&!lFxEQ_d#nROSr3n;WQg%%ZV!1u1KIQmSTLWQIbG*kKW22wir55iZcc{Rf>^=R z7V2Lzxm9b`o`i)~EDoyll-r-#6XPVA+8)XdCPNw7y7TKliWx2%PL9Ix!bw^~twX(* zhcr?DcpEYuzM*CMH2PTEsp)4XXq>eE`}#p#0LdeicTHF1yB>o`Bv(d$A?SP!0fS~-xKi2Y=gH1)+~YML}eI>wc34H zl!oj+4U_RJ9+5+gWy~0iAR8^yU=`6x@MFa(u#MQX05C7r-9ue|IB(>~pTdA2AvEkG z;oJAoX+0(U`ALPWl{vrs2L$$=Q46x+)Lg&A@9Wp;M%YIv`vG4cj{kv+%aR6Mn9LP1KA*{uR7k|mOweb5h4>5&M!WNv%?v3d-F_ONlqE4j zAny4nq0@G~e?YJht)Xq3a~vmycoazSu2WP_Hw6QtXx2WQ#YVP0bM$cRk?8P(l@`zt zLc-oB5~3is0t)WX#I{+;uj+qF#iu|lwJ_~fQ*a-TOZ|z3_!&PAm{Hzoe9W^5wownQ zMGKFn+f+QJ+^D8)et6p-XR?3`Gsh3gWi(ISoP;8foyq_J2@^e3O=&hF1yN{e-+JG)Snc zXxGV*{zPBJ+}0H=(CBU|CYdLFT-Zb*`c@_3t*5CkQ#=`QDgJQ6fKcK@6CJWGABuq% z6L8~L3^Lku6qzKN@L&K^QM;%&UpzOO90nlrJv-1&)vdQ@LV z9)Y`;Ka&V`>;XhWS|5nY zANT65WVGC%MR{#Zn~+q%gCN1z_S()XWBYiaH8r~5N|fOkN;Jv zKcE^XX@D>a9Tgcy>-@YeIsus&Obc}E=E=2AHTG|LOuY2`KAy6uf49gdnL>Zi#O181 zkmIr9#k|Qq($Mw=JqAG|EE$G~boZ9Tbnj-bqwC&p@^DFzoF8b6hC@Lo)uy|_fMmqH z&e|pF`LoG&jn(rtOpwIlk!Sc_yOv7KG|zqO3v#>Fz|f%I7*CnO;=DV*>&^!%rRusx zxyXC;VTTljp= zWn1s}&r1v5K3f0fs8JI^U>XmuV2+2Lk8}{2{V-UE=xmIMPodesVTnW^D4nEBFD3kT zpIj-pmS})=Q#M%ER0Pg$0vB*vzXCddlB%piwj1fjYX{Ue&F!A`Ayanwm}mI)(vj0e zLQb!@6TE7Jd=w}rDvcc?Rc#l#3hn}$LRc6(kwOou2`EDN-RUB(X$m5R{myPzNID-{ zSJ0+LnZ!fo=p2xBzcau#!3qL^F&%(p5TnRSEV+~@6PF+$Vc4&<;cp{mJ+7%g>aZK0+l+0zz5Eni zD>*E|tEYf9bd}{IiP-xzX~FJq?(29f@fVb3Bk=7?rXW~&L$t(lF&Dx7`~*o1Yx1~w zQcNd;eIu>T?Mp0U$PC9(mbs+CvWrida+*#4HDB^cL&TIDSz6n9AyxpOy$2$xW+pV; z^6vOcP6T3h9COHQ25^#c0IQ!^De!bbA%r4B1AUVLmg)Z3MrdS~spx$Mt%mZNP*BQz z8sgJM3&F)i0P6z_wbouI3`UcRgOF_OJSilaYH4crLsyrWwaB8UPrbs3i^olJ2g$8} zZPaRi{y9JosLOIuO;ET{LLAoySCxG9O9^<2UEc4pfIADbHxZS6$Km|C1u6s0woFdbx4Vdg{=q5r{LuaMdHZ@GpOvnq-mU5aBBUV{N zr}2hr;@>_A0z0W%7g3n)xWD=Q5{zg6FeMu=n`D%-d56O^=DqnaG(|5xcQ^ldc|=z! zIB2L04Q!~hJlh7ov=#%iSpesD1ldA-(zm;RXSPLg){`u6d{`7z&HZ9^C& z-Hf+Z94J*?er)Dv^wMALpfE5)%@M)g#VWhzEyxnIrjI_U49BGy6IS#!<21v;#q}In z+lPA6O-I-Li)z=qng^0vJRcMCE$a+Y*QP^vCwYon}98o)xx zZg^e6MY-GN@}bJgsAGSeE6Fh*`WPbGS$GwIpUZEpTXD@$n1GsnJ}sk|9$CB7!csaC z>T2<;rlV!AWATH+aw?ACvwNdUbY2p!s6P@VX!tC@HQGFEss(H`rv-9MwJ6Kq6fSt+ zU*tMpfm1*%qGv&7nYVoQ$o&`_(bEOIb0d32w_-UoEHW#8_u~m?aN`7Z7M5cRIx6ym zDAygaXb00@vwPzOuMbgSWMk3RogKb6Gov_%B=w(4POf^q(T^H*JSTuEEOlW%#&1IE z|GICwIw+TCDtKky`J&SEAO8g~KQngm9igramsc_O466E`afqTq6O?#5&RK+F3i*a2 zr6c}y)9dLrUueom_0;sF!wtyt6vtGU?0HL}KoYeA(9n*aH0@KTIdlInj(fDo;fvF^ zFx8IWl<~+g9kTbYss`Q9dgQ3hh}ax@IJZI%q%D}XkoCPHGst#}{eM&{+^?pmRe)x9Qu z5+u#M9}^TF%CJ^uHI_3AKxfC%1e~Y8avlrA{)(yJW%DA3xeR_s!}X@{hG1{#Gu(P& zokz+hw_EzT>m!?Z6MR}=M@?6ms;0-c&UPk>)bpp)`ub>E{<6;&h*2JdY~U|>*8F7Z z3*VG5N}$KThi8y1L>tP6rDO4O09v$+%ZOxgl~CKFv?!;q$NGJKPG45~qE8|sqY?AT zX7Ku-y3)nqjKsW#d+`{tNNX6mU|(Ya$bz$;llcuw2PY^tQ?b*gKdL?+I|Y5SeyDXi zg%1cHg3UZDJizf9HUv404P-+2Ic(v$=w*@My~Pf=8PC29E1|m@>miwp+~-D0bH+theYTDzcl zaOuQy?tC?rXj&$Ak{>C_P1Zj+_sxht75U5h?fPwwfsy1PCiscn{jY?T8Xkd^QRES zNG}R9SXU`;yX0_~5>Vxf$f64-c3f0>Kg zx)s&rN~?tIN%y32q}8U;7h(90VeLqNsPASc6A0`3IPm;awSuldp7<_p-}C%Lpa)17 z))O$!)c5@4^LIe9HNt^C07=T^#q)*sU~1jD1gI)WmA`}$&K4M-O5Fg6lUyzqg~F}? z3J3PWwoszbE21M^<5ETDN*d?}6jT6#;l<358qLEz7*W}>PU~UGQKmKIl{6TiR+K9t zKOqRxfW8OOV&dkixf_t;IpW*IJVVX`?j9zZ6|vwDSxDp0KPwz1;|lMmiweoY{`g7u zKn9jxYxQf>!gN`8h()3B^qQp?;t>NfUn-RLAh=(W#t8MmAnj$n!=4W|WTL`a`&_fg z(AR(5Qp>dXsuS@(iiU10vU~j92RTkj;#Y(|E0p%)4aov^oXg&4)S+<;&#_kXpN3M$ zRhc(ge5-zD)}!9CX9UHD*Eg@9foN-9WV14oo;`ky$cZvL^6Fc%QaRZUM3Fkwv6#G0 z;IC*0Pr>XcchIlt*ZD~Xc!=@c55yB|?r_x-YVhCU!xOeYkpv~WBf+CD6$=Yi63Ikm zp{IKiR8g1Z*?Kq&=^mEuq!xH}YzODS$eic8Q!i$f_I zptuv9#rKb~_u6}X>ntZ3Bkw_;cRu&L<~0S^qHDh^5V434dk&TKdNXe%8J26a%S+d{ zm0#z?cPzYebcAz1=QWB~d&-TuId5HEpKX(?BC`{V9HgwQ+gV{9dQxVOfG}`8cB3J{%Wvt>13C zxI91Njygu(mqI|Co+*?MY40MLPc0p3e%=AtLB+(42_h*Q;rterC+)x9#LI%A%lMG1>VK9N z+Bb|bXX0NTmlr2iV`K-|k`{)15Cvw(AE9pDE)dJ&5EKyQe5eO1^0-cbY+MH?+K|2I z>&io1l!3-%p@iTg9hT$DUk00B-5UTOL56|u&d6WNNw*&4r}1uMFL2A>$I=f?eWKt% zkwB}>f6Z@&IYP84J`yY}Y%CuR?E4T$WRSRr`-$zLY0)3P@W!+8e||Yemit#*dsVha zOdp>ok`%u2M^`)z)sy$%V6Pppc4)Tz)|yO}A90S<-5T_6y$3n-=C&rfA|C*zdGpKdQ-?`-O`jCl z;U4g~Ul$|t8m)w0eJh0hZzjGKh%wSInWaQFxm)}92{aeOSH;Mc6WKuDN2Fd-9=>y! zPWb?6Mka#>H@77cmspI#Gs9|M-j2?RrfM%mwS3CwrWlHEpmv-E?xj#z8!C_E?*uBs zIW6SKhe)7{$2aR|8Uq2ku7tDgjCH(c=$OO*>WUN)alBaX_Ep-<*a(4hKm(O%DkSS% zX&>j<-}~FkftZgnGDOH5ljh2XHIv5;c1?m_;(8iK69njmR8i$80wr9ux{vy65XMFw zaw}_d+;R^NTjFS;R6N;dcnqXCmLs-WZM^sFL8?V9FK$R|DD6m9zD}8}(IOo0+dRRK z;<%6#c}95vuCTN}>Yg!i^1??8`O(|&?R$NEj%0?F#fez-0_ASfeH`@HRr%*~ZYoR$ zwpP4n-HlKu;UU`NK&#dJi`o9x%D#=TB__$u6R^kS{;}dDVZPY)46e_4Wt{kNT5|Um z3;O}BkgYa6^jm5E*V(Po&J7E>@n=XjN7hqIS_w1SUstrVuka)y7e_O=&Vqfqb3P&a zZa?LSZT6~%$+KJg+s&pYyuA~>mnD)hf!^4hEa_YOAAgfA=rFL5-wcVMH#iby{#H)L z$~L0jn_uAX_{}PSFe-)#cCafPMTgyhsQu2Mv7^yuk&l^iZ(=m zH0vh7T&(xc0gfZOj~abuO*|c8n9=p;u|EMn?1F2yLD1Aq*5Oih_1VYRNsk{0x5K+u z=`4YQJjfMdC$M`-CcRNXWiR=5o#XErWkNf@D8uyP*K$^FE7mUU2fv%KCEEPUpQc}r z<@MNCWd0Qu%kRK*kjtU_wm+?v-7J>FKsq{^q`J|56U}W5Ze8U|UMwEFhti;QFpKO~ zD*h>Xs~RPk;=g+zUu5znOh2%{8{hqelgFagX>aM>31y7@2g*2Oa;a79d~E9C#N8d0 zeb^k#$tYovAM_`=hox%Q$_?gTPw?Et3RBY{L6YaoO*2z~~E~UhvJyIV5Hr*2{!8h7K+8IYLF^%4^G6dIa#u$zK4HTk2t1->nZ8 zLs(+2w=y(1t&Jm@30m=V`i}q>GnF$fFFlXjW_mBW#EV)ksp?c);Ox1+0yb?yr@tq= zixw|{03YXjn;1kn3`C(AWroo8U+%rOp2;%hF#LfqKl@S}0b?V5So+}Fby;tZtu}z8hK&xyvi=FxauFSC}WxwR->qtm=FqY zFcu*B$zGt{64^R3#m@y*{lLdD)`EA2`d7d#`!A)1nkn9uB2fa4>rjDqLaef6jyq~R zQ7&_sRGIcm{FYVA=tnHdZ9wwTzfX~M%7Ote{{!SG(FD*o6st|JDgC|29)Z1%Kl)B; zMJ$^u?O0OaMLqp2Gqr=VU&QWdIbkJFG!nK#Fa9F-h!w>7CxURWx>{)4pj z2Y7gZySBbu#oAD^s+Yalq7%qI307vq)@MEt2Ng*zn(K| za(bt-au%ov`?TrT^1nskZe3s2TB= zJyAuZZc)H9+=AX}>X`Q;5iivAjoId248c-yQpz-w((Ih!RVrO4@vPGQ+xx8^A>4m| z*t>Kn057ab)N+HhGI%QhzjxWegXLVrTzyT9Vv3`rA10B*vP8d$7tyUhrvho`(lMI@ z$+=qV3$^k(2WXR8SQOxm^Ngc=DT7+!C0=?5&-5xALmLy_tw$-cV=NyZnn?!zjuU&T z==;9!Z%k~OfM=QH-@l3Tuei6415tAeYJdq#!t32*N*R`nrXivb!lUXlECw z`Z67q%y>+-_Y_N*3@7N6#jbtsPkY$NdjR(;bKhI3zzb!bW1i^6MQ*%mx5JqUE@6j5 zma$j{a`_#gMMhI&e>!wmJ053W4P@(T9xm1CjX=U$et%YRlx({GxT3On{VO#hdZHxq z>5?v0ew=mP3Hx&y?G=8L5P>eXxfi{G%Me;mgh`P8TUt@pf|M;T@fC3Cb2&!L$#{Lf zQvBaaSM$_RkC$V7m&zYqR_b}SNMQ*4lI_p0^AuVnY$-6r1&9bJQ~cX?Y^(|(3h=Xh zSrFNKf-fH$E>nY~nM=U*E-qaUrI4qhPB#JaJTcB$l3~QNtn0+8_nkQOa|vHX2R;pX z?K#aPwM}!O>Q~yao3DvQ*Uh39k+)>@RPHc}(O)AP_;_x+0zKj_QDNniO~fXK1&rYv=(_cfhP&Jt$Wb%cARI4d8l_ey>l z$NB|nPvbT+Euv-_{0 z_^lqsVLY8Lej7&c^Mw#$&h!`~59{*B(4kWO`9xW8M~H) zZoeEC{+sz>4`Mf>08B^N_S~kY;?#7Vnt<3mN^GH&>UE?M5De4GqMl^m9Yd+0De;+Q zo%6MTy45-*rdZPGU;6+2ga>4ABs-Me5?G&PCNrgQQ}~<~k*}dA5o`K8Rria{JkBj8 zrL7Fz2hYt@FhvnFKxj`Ht>;N;-;x>hvcMnzGCc6weqfy*i%VY-b|3GA8n&QlTkbuNn)Me9Q03Udv5w9QYu z@t^o>=Zw&b;rlzWRD;IbkY_v&nims!t`Z

*}&}hE=2e(a8A9|a}rW4 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 F3$XU; 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]p6yEXt}#e>5h}Uq#|YkkEQP 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

GIJ&Q~m5)w6poScBO)&~zYz-HfY=^^yb){PN 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 literal 0 HcmV?d00001 diff --git a/website/src/_includes/blog_previews/20240404.html b/website/src/_includes/blog_previews/20240404.html new file mode 100644 index 0000000000..b2407b3ab2 --- /dev/null +++ b/website/src/_includes/blog_previews/20240404.html @@ -0,0 +1,8 @@ +By Esra'a al Shafei + +

Transitioning from a lifelong career dedicated to nonprofits, +including Board roles at organizations like the Wikimedia Foundation, Access Now and Tor, +my decision to join SimpleX Chat may come as a surprise to some. +But, as I step into this new chapter, I want to share the insights and convictions +that have guided me here, shedding light on what I think sets SimpleX Chat apart +and why this move feels like an essential learning opportunity.

From a725d2efacc395bb43cd51fc233bdb9d2bbe6567 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Thu, 4 Apr 2024 20:18:33 +0700 Subject: [PATCH 06/60] desktop (windows): fix build (#3990) --- apps/multiplatform/common/build.gradle.kts | 4 +--- apps/multiplatform/desktop/build.gradle.kts | 7 ++----- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/apps/multiplatform/common/build.gradle.kts b/apps/multiplatform/common/build.gradle.kts index 4cc5ced0d1..9a7b7fb2e3 100644 --- a/apps/multiplatform/common/build.gradle.kts +++ b/apps/multiplatform/common/build.gradle.kts @@ -12,9 +12,7 @@ version = extra["android.version_name"] as String kotlin { androidTarget() - jvm("desktop") { - jvmToolchain(11) - } + jvm("desktop") applyDefaultHierarchyTemplate() sourceSets { all { diff --git a/apps/multiplatform/desktop/build.gradle.kts b/apps/multiplatform/desktop/build.gradle.kts index c3dd9bb9b0..401c2938d5 100644 --- a/apps/multiplatform/desktop/build.gradle.kts +++ b/apps/multiplatform/desktop/build.gradle.kts @@ -12,10 +12,7 @@ version = extra["desktop.version_name"] as String kotlin { - jvm { - jvmToolchain(11) - withJava() - } + jvm() sourceSets { val jvmMain by getting { dependencies { @@ -151,7 +148,7 @@ cmake { tasks.named("clean") { dependsOn("cmakeClean") } -tasks.named("compileJava") { +tasks.named("compileKotlinJvm") { dependsOn("cmakeBuildAndCopy") } afterEvaluate { From 069395c2a0bd3c8793182bd7433e36ba290a8864 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Thu, 4 Apr 2024 22:24:42 +0400 Subject: [PATCH 07/60] core: entity locks (#3962) * core: entity locks * more locks * update sha256map * add delay * clean up * empty * fix tests * empty * empty * more delays * empty * comment delays * Revert "comment delays" This reverts commit 4245b545fba4dc20d2bc7ce08c0cd46907722fc6. * Revert "Revert "comment delays"" This reverts commit f803386945abe6a3e1d9d94e31e9ed9af2061330. * take lock in the beginning of processing loop * empty * empty * remove lock * rework file locks * empty * fix * empty * add connection locks * empty * fix test * empty * remove commented delays * add to debug locks * update * refactor * refactor --------- Co-authored-by: Evgeny Poberezkin --- cabal.project | 2 +- scripts/nix/sha256map.nix | 2 +- src/Simplex/Chat.hs | 349 ++++++++++++++------------ src/Simplex/Chat/Controller.hs | 15 +- src/Simplex/Chat/Protocol.hs | 2 +- src/Simplex/Chat/Store.hs | 1 + src/Simplex/Chat/Store/Connections.hs | 29 ++- src/Simplex/Chat/Store/Files.hs | 6 +- src/Simplex/Chat/Store/Shared.hs | 9 + src/Simplex/Chat/View.hs | 5 +- tests/ChatTests/Files.hs | 3 +- tests/ChatTests/Profiles.hs | 10 +- 12 files changed, 255 insertions(+), 178 deletions(-) diff --git a/cabal.project b/cabal.project index 62115c136b..4e8cfd22ee 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: 6bc4f6c94e11f59604b0d9c576e62e01bc08b4cd + tag: 791368c7beb3996ab4a10f25dbf8cad1e289b413 source-repository-package type: git diff --git a/scripts/nix/sha256map.nix b/scripts/nix/sha256map.nix index d2701dc45f..a671f28751 100644 --- a/scripts/nix/sha256map.nix +++ b/scripts/nix/sha256map.nix @@ -1,5 +1,5 @@ { - "https://github.com/simplex-chat/simplexmq.git"."6bc4f6c94e11f59604b0d9c576e62e01bc08b4cd" = "08l00ay1ibz7skhlpfjp6z2821zpfd0kxplwdm6zc63m2f6za7cv"; + "https://github.com/simplex-chat/simplexmq.git"."791368c7beb3996ab4a10f25dbf8cad1e289b413" = "0wbxk69lv6h17b5rdqskxwhc1wfvn1zi8q4a4w57qfzkzyaxkymk"; "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/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index 7948875180..c62fdfb8bd 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -88,9 +88,9 @@ import Simplex.FileTransfer.Description (FileDescriptionURI (..), ValidFileDescr import qualified Simplex.FileTransfer.Description as FD import Simplex.FileTransfer.Protocol (FileParty (..), FilePartyI) import Simplex.Messaging.Agent as Agent -import Simplex.Messaging.Agent.Client (AgentStatsKey (..), SubInfo (..), agentClientStore, getAgentWorkersDetails, getAgentWorkersSummary, temporaryAgentError) +import Simplex.Messaging.Agent.Client (AgentStatsKey (..), SubInfo (..), agentClientStore, getAgentWorkersDetails, getAgentWorkersSummary, temporaryAgentError, withLockMap) import Simplex.Messaging.Agent.Env.SQLite (AgentConfig (..), InitialAgentServers (..), createAgentStore, defaultAgentConfig) -import Simplex.Messaging.Agent.Lock +import Simplex.Messaging.Agent.Lock (withLock) import Simplex.Messaging.Agent.Protocol import qualified Simplex.Messaging.Agent.Protocol as AP (AgentErrorType (..)) import Simplex.Messaging.Agent.Store.SQLite (MigrationConfirmation (..), MigrationError, SQLiteStore (dbNew), execSQL, upMigration, withConnection) @@ -227,6 +227,7 @@ newChatController connNetworkStatuses <- atomically TM.empty subscriptionMode <- newTVarIO SMSubscribe chatLock <- newEmptyTMVarIO + entityLocks <- atomically TM.empty sndFiles <- newTVarIO M.empty rcvFiles <- newTVarIO M.empty currentCalls <- atomically TM.empty @@ -263,6 +264,7 @@ newChatController connNetworkStatuses, subscriptionMode, chatLock, + entityLocks, sndFiles, rcvFiles, currentCalls, @@ -310,6 +312,40 @@ newChatController userServers :: User -> IO (NonEmpty (ProtoServerWithAuth p)) userServers user' = activeAgentServers config protocol <$> withTransaction chatStore (`getProtocolServers` user') +withChatLock :: String -> CM a -> CM a +withChatLock name action = asks chatLock >>= \l -> withLock l name action + +withEntityLock :: String -> ChatLockEntity -> CM a -> CM a +withEntityLock name entity action = do + chatLock <- asks chatLock + ls <- asks entityLocks + atomically $ unlessM (isEmptyTMVar chatLock) retry + withLockMap ls entity name action + +withInvitationLock :: String -> ByteString -> CM a -> CM a +withInvitationLock name = withEntityLock name . CLInvitation +{-# INLINE withInvitationLock #-} + +withConnectionLock :: String -> Int64 -> CM a -> CM a +withConnectionLock name = withEntityLock name . CLConnection +{-# INLINE withConnectionLock #-} + +withContactLock :: String -> ContactId -> CM a -> CM a +withContactLock name = withEntityLock name . CLContact +{-# INLINE withContactLock #-} + +withGroupLock :: String -> GroupId -> CM a -> CM a +withGroupLock name = withEntityLock name . CLGroup +{-# INLINE withGroupLock #-} + +withUserContactLock :: String -> Int64 -> CM a -> CM a +withUserContactLock name = withEntityLock name . CLUserContact +{-# INLINE withUserContactLock #-} + +withFileLock :: String -> Int64 -> CM a -> CM a +withFileLock name = withEntityLock name . CLFile +{-# INLINE withFileLock #-} + activeAgentServers :: UserProtocol p => ChatConfig -> SProtocolType p -> [ServerCfg p] -> NonEmpty (ProtoServerWithAuth p) activeAgentServers ChatConfig {defaultServers} p = fromMaybe (cfgServers p defaultServers) @@ -669,8 +705,8 @@ processChatCommand' vr = \case memStatuses -> pure $ Just $ map (uncurry MemberDeliveryStatus) memStatuses _ -> pure Nothing pure $ CRChatItemInfo user aci ChatItemInfo {itemVersions, memberDeliveryStatuses} - APISendMessage (ChatRef cType chatId) live itemTTL (ComposedMessage file_ quotedItemId_ mc) -> withUser $ \user -> withChatLock "sendMessage" $ case cType of - CTDirect -> do + APISendMessage (ChatRef cType chatId) live itemTTL (ComposedMessage file_ quotedItemId_ mc) -> withUser $ \user -> case cType of + CTDirect -> withContactLock "sendMessage" chatId $ do ct@Contact {contactId, contactUsed} <- withStore $ \db -> getContact db vr user chatId assertDirectAllowed user MDSnd ct XMsgNew_ unless contactUsed $ withStore' $ \db -> updateContactUsed db user ct @@ -707,7 +743,7 @@ processChatCommand' vr = \case quoteData ChatItem {content = CISndMsgContent qmc} = pure (qmc, CIQDirectSnd, True) quoteData ChatItem {content = CIRcvMsgContent qmc} = pure (qmc, CIQDirectRcv, False) quoteData _ = throwChatError CEInvalidQuote - CTGroup -> do + CTGroup -> withGroupLock "sendMessage" chatId $ do g@(Group gInfo _) <- withStore $ \db -> getGroup db vr user chatId assertUserGroupRole gInfo GRAuthor send g @@ -767,8 +803,8 @@ processChatCommand' vr = \case pure CIFile {fileId, fileName = takeFileName filePath, fileSize, fileSource = Just cf, fileStatus = CIFSSndStored, fileProtocol = FPLocal} let ci = mkChatItem cd ciId content ciFile_ Nothing Nothing Nothing False createdAt Nothing createdAt pure . CRNewChatItem user $ AChatItem SCTLocal SMDSnd (LocalChat nf) ci - APIUpdateChatItem (ChatRef cType chatId) itemId live mc -> withUser $ \user -> withChatLock "updateChatItem" $ case cType of - CTDirect -> do + APIUpdateChatItem (ChatRef cType chatId) itemId live mc -> withUser $ \user -> case cType of + CTDirect -> withContactLock "updateChatItem" chatId $ do ct@Contact {contactId} <- withStore $ \db -> getContact db vr user chatId assertDirectAllowed user MDSnd ct XMsgUpdate_ cci <- withStore $ \db -> getDirectCIWithReactions db user ct itemId @@ -790,7 +826,7 @@ processChatCommand' vr = \case else pure $ CRChatItemNotChanged user (AChatItem SCTDirect SMDSnd (DirectChat ct) ci) _ -> throwChatError CEInvalidChatItemUpdate CChatItem SMDRcv _ -> throwChatError CEInvalidChatItemUpdate - CTGroup -> do + CTGroup -> withGroupLock "updateChatItem" chatId $ do Group gInfo@GroupInfo {groupId} ms <- withStore $ \db -> getGroup db vr user chatId assertUserGroupRole gInfo GRAuthor cci <- withStore $ \db -> getGroupCIWithReactions db user gInfo itemId @@ -825,8 +861,8 @@ processChatCommand' vr = \case _ -> throwChatError CEInvalidChatItemUpdate CTContactRequest -> pure $ chatCmdError (Just user) "not supported" CTContactConnection -> pure $ chatCmdError (Just user) "not supported" - APIDeleteChatItem (ChatRef cType chatId) itemId mode -> withUser $ \user -> withChatLock "deleteChatItem" $ case cType of - CTDirect -> do + APIDeleteChatItem (ChatRef cType chatId) itemId mode -> withUser $ \user -> case cType of + CTDirect -> withContactLock "deleteChatItem" chatId $ do (ct, CChatItem msgDir ci@ChatItem {meta = CIMeta {itemSharedMsgId, editable}}) <- withStore $ \db -> (,) <$> getContact db vr user chatId <*> getDirectChatItem db user chatId itemId case (mode, msgDir, itemSharedMsgId, editable) of (CIDMInternal, _, _, _) -> deleteDirectCI user ct ci True False @@ -837,7 +873,7 @@ processChatCommand' vr = \case then deleteDirectCI user ct ci True False else markDirectCIDeleted user ct ci msgId True =<< liftIO getCurrentTime (CIDMBroadcast, _, _, _) -> throwChatError CEInvalidChatItemDelete - CTGroup -> do + CTGroup -> withGroupLock "deleteChatItem" chatId $ do Group gInfo ms <- withStore $ \db -> getGroup db vr user chatId CChatItem msgDir ci@ChatItem {meta = CIMeta {itemSharedMsgId, editable}} <- withStore $ \db -> getGroupChatItem db user chatId itemId case (mode, msgDir, itemSharedMsgId, editable) of @@ -852,7 +888,7 @@ processChatCommand' vr = \case deleteLocalCI user nf ci True False CTContactRequest -> pure $ chatCmdError (Just user) "not supported" CTContactConnection -> pure $ chatCmdError (Just user) "not supported" - APIDeleteMemberChatItem gId mId itemId -> withUser $ \user -> withChatLock "deleteChatItem" $ do + APIDeleteMemberChatItem gId mId itemId -> withUser $ \user -> withGroupLock "deleteChatItem" gId $ do Group gInfo@GroupInfo {membership} ms <- withStore $ \db -> getGroup db vr user gId CChatItem _ ci@ChatItem {chatDir, meta = CIMeta {itemSharedMsgId}} <- withStore $ \db -> getGroupChatItem db user gId itemId case (chatDir, itemSharedMsgId) of @@ -862,44 +898,46 @@ processChatCommand' vr = \case (SndMessage {msgId}, _) <- sendGroupMessage user gInfo ms $ XMsgDel itemSharedMId $ Just memberId delGroupChatItem user gInfo ci msgId (Just membership) (_, _) -> throwChatError CEInvalidChatItemDelete - APIChatItemReaction (ChatRef cType chatId) itemId add reaction -> withUser $ \user -> withChatLock "chatItemReaction" $ case cType of + APIChatItemReaction (ChatRef cType chatId) itemId add reaction -> withUser $ \user -> case cType of CTDirect -> - withStore (\db -> (,) <$> getContact db vr user chatId <*> getDirectChatItem db user chatId itemId) >>= \case - (ct, CChatItem md ci@ChatItem {meta = CIMeta {itemSharedMsgId = Just itemSharedMId}}) -> do - unless (featureAllowed SCFReactions forUser ct) $ - throwChatError (CECommandError $ "feature not allowed " <> T.unpack (chatFeatureNameText CFReactions)) - unless (ciReactionAllowed ci) $ - throwChatError (CECommandError "reaction not allowed - chat item has no content") - rs <- withStore' $ \db -> getDirectReactions db ct itemSharedMId True - checkReactionAllowed rs - (SndMessage {msgId}, _) <- sendDirectContactMessage user ct $ XMsgReact itemSharedMId Nothing reaction add - createdAt <- liftIO getCurrentTime - reactions <- withStore' $ \db -> do - setDirectReaction db ct itemSharedMId True reaction add msgId createdAt - liftIO $ getDirectCIReactions db ct itemSharedMId - let ci' = CChatItem md ci {reactions} - r = ACIReaction SCTDirect SMDSnd (DirectChat ct) $ CIReaction CIDirectSnd ci' createdAt reaction - pure $ CRChatItemReaction user add r - _ -> throwChatError $ CECommandError "reaction not possible - no shared item ID" + withContactLock "chatItemReaction" chatId $ + withStore (\db -> (,) <$> getContact db vr user chatId <*> getDirectChatItem db user chatId itemId) >>= \case + (ct, CChatItem md ci@ChatItem {meta = CIMeta {itemSharedMsgId = Just itemSharedMId}}) -> do + unless (featureAllowed SCFReactions forUser ct) $ + throwChatError (CECommandError $ "feature not allowed " <> T.unpack (chatFeatureNameText CFReactions)) + unless (ciReactionAllowed ci) $ + throwChatError (CECommandError "reaction not allowed - chat item has no content") + rs <- withStore' $ \db -> getDirectReactions db ct itemSharedMId True + checkReactionAllowed rs + (SndMessage {msgId}, _) <- sendDirectContactMessage user ct $ XMsgReact itemSharedMId Nothing reaction add + createdAt <- liftIO getCurrentTime + reactions <- withStore' $ \db -> do + setDirectReaction db ct itemSharedMId True reaction add msgId createdAt + liftIO $ getDirectCIReactions db ct itemSharedMId + let ci' = CChatItem md ci {reactions} + r = ACIReaction SCTDirect SMDSnd (DirectChat ct) $ CIReaction CIDirectSnd ci' createdAt reaction + pure $ CRChatItemReaction user add r + _ -> throwChatError $ CECommandError "reaction not possible - no shared item ID" CTGroup -> - withStore (\db -> (,) <$> getGroup db vr user chatId <*> getGroupChatItem db user chatId itemId) >>= \case - (Group g@GroupInfo {membership} ms, CChatItem md ci@ChatItem {meta = CIMeta {itemSharedMsgId = Just itemSharedMId}}) -> do - unless (groupFeatureAllowed SGFReactions g) $ - throwChatError (CECommandError $ "feature not allowed " <> T.unpack (chatFeatureNameText CFReactions)) - unless (ciReactionAllowed ci) $ - throwChatError (CECommandError "reaction not allowed - chat item has no content") - let GroupMember {memberId = itemMemberId} = chatItemMember g ci - rs <- withStore' $ \db -> getGroupReactions db g membership itemMemberId itemSharedMId True - checkReactionAllowed rs - (SndMessage {msgId}, _) <- sendGroupMessage user g ms (XMsgReact itemSharedMId (Just itemMemberId) reaction add) - createdAt <- liftIO getCurrentTime - reactions <- withStore' $ \db -> do - setGroupReaction db g membership itemMemberId itemSharedMId True reaction add msgId createdAt - liftIO $ getGroupCIReactions db g itemMemberId itemSharedMId - let ci' = CChatItem md ci {reactions} - r = ACIReaction SCTGroup SMDSnd (GroupChat g) $ CIReaction CIGroupSnd ci' createdAt reaction - pure $ CRChatItemReaction user add r - _ -> throwChatError $ CECommandError "reaction not possible - no shared item ID" + withGroupLock "chatItemReaction" chatId $ + withStore (\db -> (,) <$> getGroup db vr user chatId <*> getGroupChatItem db user chatId itemId) >>= \case + (Group g@GroupInfo {membership} ms, CChatItem md ci@ChatItem {meta = CIMeta {itemSharedMsgId = Just itemSharedMId}}) -> do + unless (groupFeatureAllowed SGFReactions g) $ + throwChatError (CECommandError $ "feature not allowed " <> T.unpack (chatFeatureNameText CFReactions)) + unless (ciReactionAllowed ci) $ + throwChatError (CECommandError "reaction not allowed - chat item has no content") + let GroupMember {memberId = itemMemberId} = chatItemMember g ci + rs <- withStore' $ \db -> getGroupReactions db g membership itemMemberId itemSharedMId True + checkReactionAllowed rs + (SndMessage {msgId}, _) <- sendGroupMessage user g ms (XMsgReact itemSharedMId (Just itemMemberId) reaction add) + createdAt <- liftIO getCurrentTime + reactions <- withStore' $ \db -> do + setGroupReaction db g membership itemMemberId itemSharedMId True reaction add msgId createdAt + liftIO $ getGroupCIReactions db g itemMemberId itemSharedMId + let ci' = CChatItem md ci {reactions} + r = ACIReaction SCTGroup SMDSnd (GroupChat g) $ CIReaction CIGroupSnd ci' createdAt reaction + pure $ CRChatItemReaction user add r + _ -> throwChatError $ CECommandError "reaction not possible - no shared item ID" CTLocal -> pure $ chatCmdError (Just user) "not supported" CTContactRequest -> pure $ chatCmdError (Just user) "not supported" CTContactConnection -> pure $ chatCmdError (Just user) "not supported" @@ -959,7 +997,7 @@ processChatCommand' vr = \case CTDirect -> do ct <- withStore $ \db -> getContact db vr user chatId filesInfo <- withStore' $ \db -> getContactFileInfo db user ct - withChatLock "deleteChat direct" . procCmd $ do + withContactLock "deleteChat direct" chatId . procCmd $ do cancelFilesInProgress user filesInfo deleteFilesLocally filesInfo let doSendDel = contactReady ct && contactActive ct && notify @@ -971,7 +1009,7 @@ processChatCommand' vr = \case withStore' $ \db -> deleteContactConnectionsAndFiles db userId ct withStore $ \db -> deleteContact db user ct pure $ CRContactDeleted user ct - CTContactConnection -> withChatLock "deleteChat contactConnection" . procCmd $ do + CTContactConnection -> withConnectionLock "deleteChat contactConnection" chatId . procCmd $ do conn@PendingContactConnection {pccAgentConnId = AgentConnId acId} <- withStore $ \db -> getPendingContactConnection db userId chatId deleteAgentConnectionAsync user acId withStore' $ \db -> deletePendingContactConnection db userId chatId @@ -983,7 +1021,7 @@ processChatCommand' vr = \case canDelete = isOwner || not (memberCurrent membership) unless canDelete $ throwChatError $ CEGroupUserRole gInfo GROwner filesInfo <- withStore' $ \db -> getGroupFileInfo db user gInfo - withChatLock "deleteChat group" . procCmd $ do + withGroupLock "deleteChat group" chatId . procCmd $ do cancelFilesInProgress user filesInfo deleteFilesLocally filesInfo let doSendDel = memberActive membership && isOwner @@ -1038,28 +1076,29 @@ processChatCommand' vr = \case CTLocal -> do nf <- withStore $ \db -> getNoteFolder db user chatId filesInfo <- withStore' $ \db -> getNoteFolderFileInfo db user nf - withChatLock "clearChat local" . procCmd $ do - deleteFilesLocally filesInfo - withStore' $ \db -> deleteNoteFolderFiles db userId nf - withStore' $ \db -> deleteNoteFolderCIs db user nf - pure $ CRChatCleared user (AChatInfo SCTLocal $ LocalChat nf) + deleteFilesLocally filesInfo + withStore' $ \db -> deleteNoteFolderFiles db userId nf + withStore' $ \db -> deleteNoteFolderCIs db user nf + pure $ CRChatCleared user (AChatInfo SCTLocal $ LocalChat nf) CTContactConnection -> pure $ chatCmdError (Just user) "not supported" CTContactRequest -> pure $ chatCmdError (Just user) "not supported" - APIAcceptContact incognito connReqId -> withUser $ \_ -> withChatLock "acceptContact" $ do + APIAcceptContact incognito connReqId -> withUser $ \_ -> do (user@User {userId}, cReq@UserContactRequest {userContactLinkId}) <- withStore $ \db -> getContactRequest' db connReqId - ucl <- withStore $ \db -> getUserContactLinkById db userId userContactLinkId - let contactUsed = (\(_, groupId_, _) -> isNothing groupId_) ucl - -- [incognito] generate profile to send, create connection with incognito profile - incognitoProfile <- if incognito then Just . NewIncognito <$> liftIO generateRandomProfile else pure Nothing - ct <- acceptContactRequest user cReq incognitoProfile contactUsed - pure $ CRAcceptingContactRequest user ct - APIRejectContact connReqId -> withUser $ \user -> withChatLock "rejectContact" $ do - cReq@UserContactRequest {agentContactConnId = AgentConnId connId, agentInvitationId = AgentInvId invId} <- + withUserContactLock "acceptContact" userContactLinkId $ do + ucl <- withStore $ \db -> getUserContactLinkById db userId userContactLinkId + let contactUsed = (\(_, groupId_, _) -> isNothing groupId_) ucl + -- [incognito] generate profile to send, create connection with incognito profile + incognitoProfile <- if incognito then Just . NewIncognito <$> liftIO generateRandomProfile else pure Nothing + ct <- acceptContactRequest user cReq incognitoProfile contactUsed + pure $ CRAcceptingContactRequest user ct + APIRejectContact connReqId -> withUser $ \user -> do + cReq@UserContactRequest {userContactLinkId, agentContactConnId = AgentConnId connId, agentInvitationId = AgentInvId invId} <- withStore $ \db -> getContactRequest db user connReqId `storeFinally` liftIO (deleteContactRequest db user connReqId) - withAgent $ \a -> rejectContact a connId invId - pure $ CRContactRequestRejected user cReq + withUserContactLock "rejectContact" userContactLinkId $ do + withAgent $ \a -> rejectContact a connId invId + pure $ CRContactRequestRejected user cReq APISendCallInvitation contactId callType -> withUser $ \user -> do -- party initiating call ct <- withStore $ \db -> getContact db vr user contactId @@ -1067,7 +1106,7 @@ processChatCommand' vr = \case if featureAllowed SCFCalls forUser ct then do calls <- asks currentCalls - withChatLock "sendCallInvitation" $ do + withContactLock "sendCallInvitation" contactId $ do g <- asks random callId <- atomically $ CallId <$> C.randomBytes 16 g dhKeyPair <- atomically $ if encryptedCall callType then Just <$> C.generateKeyPair g else pure Nothing @@ -1192,12 +1231,11 @@ processChatCommand' vr = \case toServerCfg server = ServerCfg {server, preset = True, tested = Nothing, enabled = True} GetUserProtoServers aProtocol -> withUser $ \User {userId} -> processChatCommand $ APIGetUserProtoServers userId aProtocol - APISetUserProtoServers userId (APSC p (ProtoServersConfig servers)) -> withUserId userId $ \user -> withServerProtocol p $ - withChatLock "setUserSMPServers" $ do - withStore $ \db -> overwriteProtocolServers db user servers - cfg <- asks config - lift $ withAgent' $ \a -> setProtocolServers a (aUserId user) $ activeAgentServers cfg p servers - ok user + APISetUserProtoServers userId (APSC p (ProtoServersConfig servers)) -> withUserId userId $ \user -> withServerProtocol p $ do + withStore $ \db -> overwriteProtocolServers db user servers + cfg <- asks config + lift $ withAgent' $ \a -> setProtocolServers a (aUserId user) $ activeAgentServers cfg p servers + ok user SetUserProtoServers serversConfig -> withUser $ \User {userId} -> processChatCommand $ APISetUserProtoServers userId serversConfig APITestProtoServer userId srv@(AProtoServerWithAuth _ server) -> withUserId userId $ \user -> @@ -1300,7 +1338,7 @@ processChatCommand' vr = \case connectionStats <- withAgent $ \a -> abortConnectionSwitch a connId pure $ CRGroupMemberSwitchAborted user g m connectionStats _ -> throwChatError CEGroupMemberNotActive - APISyncContactRatchet contactId force -> withUser $ \user -> withChatLock "syncContactRatchet" $ do + APISyncContactRatchet contactId force -> withUser $ \user -> withContactLock "syncContactRatchet" contactId $ do ct <- withStore $ \db -> getContact db vr user contactId case contactConn ct of Just conn@Connection {pqSupport} -> do @@ -1308,7 +1346,7 @@ processChatCommand' vr = \case createInternalChatItem user (CDDirectSnd ct) (CISndConnEvent $ SCERatchetSync rss Nothing) Nothing pure $ CRContactRatchetSyncStarted user ct cStats Nothing -> throwChatError $ CEContactNotActive ct - APISyncGroupMemberRatchet gId gMemberId force -> withUser $ \user -> withChatLock "syncGroupMemberRatchet" $ do + APISyncGroupMemberRatchet gId gMemberId force -> withUser $ \user -> withGroupLock "syncGroupMemberRatchet" gId $ do (g, m) <- withStore $ \db -> (,) <$> getGroupInfo db vr user gId <*> getGroupMember db vr user gId gMemberId case memberConnId m of Just connId -> do @@ -1397,7 +1435,7 @@ processChatCommand' vr = \case EnableGroupMember gName mName -> withMemberName gName mName $ \gId mId -> APIEnableGroupMember gId mId ChatHelp section -> pure $ CRChatHelp section Welcome -> withUser $ pure . CRWelcome - APIAddContact userId incognito -> withUserId userId $ \user -> withChatLock "addContact" . procCmd $ do + APIAddContact userId incognito -> withUserId userId $ \user -> procCmd $ do -- [incognito] generate profile for connection incognitoProfile <- if incognito then Just <$> liftIO generateRandomProfile else pure Nothing subMode <- chatReadVar subscriptionMode @@ -1424,9 +1462,8 @@ processChatCommand' vr = \case Just conn' -> pure $ CRConnectionIncognitoUpdated user conn' Nothing -> throwChatError CEConnectionIncognitoChangeProhibited APIConnectPlan userId cReqUri -> withUserId userId $ \user -> - withChatLock "connectPlan" . procCmd $ - CRConnectionPlan user <$> connectPlan user cReqUri - APIConnect userId incognito (Just (ACR SCMInvitation cReq)) -> withUserId userId $ \user -> withChatLock "connect" . procCmd $ do + CRConnectionPlan user <$> connectPlan user cReqUri + APIConnect userId incognito (Just (ACR SCMInvitation cReq)) -> withUserId userId $ \user -> withInvitationLock "connect" (strEncode cReq) . procCmd $ do subMode <- chatReadVar subscriptionMode -- [incognito] generate profile to send incognitoProfile <- if incognito then Just <$> liftIO generateRandomProfile else pure Nothing @@ -1471,7 +1508,7 @@ processChatCommand' vr = \case CRContactsList user <$> withStore' (\db -> getUserContacts db vr user) ListContacts -> withUser $ \User {userId} -> processChatCommand $ APIListContacts userId - APICreateMyAddress userId -> withUserId userId $ \user -> withChatLock "createMyAddress" . procCmd $ do + APICreateMyAddress userId -> withUserId userId $ \user -> procCmd $ do subMode <- chatReadVar subscriptionMode -- TODO v5.7 pass IPPQOn (connId, cReq) <- withAgent $ \a -> createConnection a (aUserId user) True SCMContact Nothing IKPQOff subMode @@ -1636,7 +1673,7 @@ processChatCommand' vr = \case pure $ CRGroupCreated user groupInfo NewGroup incognito gProfile -> withUser $ \User {userId} -> processChatCommand $ APINewGroup userId incognito gProfile - APIAddMember groupId contactId memRole -> withUser $ \user -> withChatLock "addMember" $ do + APIAddMember groupId contactId memRole -> withUser $ \user -> withGroupLock "addMember" groupId $ do -- TODO for large groups: no need to load all members to determine if contact is a member (group, contact) <- withStore $ \db -> (,) <$> getGroup db vr user groupId <*> getContact db vr user contactId assertDirectAllowed user MDSnd contact XGrpInv_ @@ -1666,7 +1703,7 @@ processChatCommand' vr = \case Nothing -> throwChatError $ CEGroupCantResendInvitation gInfo cName | otherwise -> throwChatError $ CEGroupDuplicateMember cName APIJoinGroup groupId -> withUser $ \user@User {userId} -> do - withChatLock "joinGroup" . procCmd $ do + withGroupLock "joinGroup" groupId . procCmd $ do (invitation, ct) <- withStore $ \db -> do inv@ReceivedGroupInvitation {fromMember} <- getGroupInvitation db vr user groupId (inv,) <$> getContactViaMember db vr user fromMember @@ -1697,7 +1734,7 @@ processChatCommand' vr = \case changeMemberRole user gInfo members m gEvent = do let GroupMember {memberId = mId, memberRole = mRole, memberStatus = mStatus, memberContactId, localDisplayName = cName} = m assertUserGroupRole gInfo $ maximum [GRAdmin, mRole, memRole] - withChatLock "memberRole" . procCmd $ do + withGroupLock "memberRole" groupId . procCmd $ do unless (mRole == memRole) $ do withStore' $ \db -> updateGroupMemberRole db user m memRole case mStatus of @@ -1719,7 +1756,7 @@ processChatCommand' vr = \case let GroupMember {memberId = bmMemberId, memberRole = bmRole, memberProfile = bmp} = bm assertUserGroupRole gInfo $ max GRAdmin bmRole when (blocked == blockedByAdmin bm) $ throwChatError $ CECommandError $ if blocked then "already blocked" else "already unblocked" - withChatLock "blockForAll" . procCmd $ do + withGroupLock "blockForAll" groupId . procCmd $ do let mrs = if blocked then MRSBlocked else MRSUnrestricted event = XGrpMemRestrict bmMemberId MemberRestrictions {restriction = mrs} (msg, _) <- sendGroupMessage' user gInfo remainingMembers event @@ -1741,7 +1778,7 @@ processChatCommand' vr = \case Nothing -> throwChatError CEGroupMemberNotFound Just m@GroupMember {memberId = mId, memberRole = mRole, memberStatus = mStatus, memberProfile} -> do assertUserGroupRole gInfo $ max GRAdmin mRole - withChatLock "removeMember" . procCmd $ do + withGroupLock "removeMember" groupId . procCmd $ do case mStatus of GSMemInvited -> do deleteMemberConnection user m @@ -1757,7 +1794,7 @@ processChatCommand' vr = \case APILeaveGroup groupId -> withUser $ \user@User {userId} -> do Group gInfo@GroupInfo {membership} members <- withStore $ \db -> getGroup db vr user groupId filesInfo <- withStore' $ \db -> getGroupFileInfo db user gInfo - withChatLock "leaveGroup" . procCmd $ do + withGroupLock "leaveGroup" groupId . procCmd $ do cancelFilesInProgress user filesInfo (msg, _) <- sendGroupMessage' user gInfo members XGrpLeave ci <- saveSndChatItem user (CDGroupSnd gInfo) msg (CISndGroupEvent SGEUserLeft) @@ -1807,7 +1844,7 @@ processChatCommand' vr = \case updateGroupProfileByName gName $ \p -> p {description} ShowGroupDescription gName -> withUser $ \user -> CRGroupDescription user <$> withStore (\db -> getGroupInfoByName db vr user gName) - APICreateGroupLink groupId mRole -> withUser $ \user -> withChatLock "createGroupLink" $ do + APICreateGroupLink groupId mRole -> withUser $ \user -> withGroupLock "createGroupLink" groupId $ do gInfo <- withStore $ \db -> getGroupInfo db vr user groupId assertUserGroupRole gInfo GRAdmin when (mRole > GRMember) $ throwChatError $ CEGroupMemberInitialRole gInfo mRole @@ -1817,14 +1854,14 @@ processChatCommand' vr = \case (connId, cReq) <- withAgent $ \a -> createConnection a (aUserId user) True SCMContact (Just crClientData) IKPQOff subMode withStore $ \db -> createGroupLink db user gInfo connId cReq groupLinkId mRole subMode pure $ CRGroupLinkCreated user gInfo cReq mRole - APIGroupLinkMemberRole groupId mRole' -> withUser $ \user -> withChatLock "groupLinkMemberRole " $ do + APIGroupLinkMemberRole groupId mRole' -> withUser $ \user -> withGroupLock "groupLinkMemberRole" groupId $ do gInfo <- withStore $ \db -> getGroupInfo db vr user groupId (groupLinkId, groupLink, mRole) <- withStore $ \db -> getGroupLink db user gInfo assertUserGroupRole gInfo GRAdmin when (mRole' > GRMember) $ throwChatError $ CEGroupMemberInitialRole gInfo mRole' when (mRole' /= mRole) $ withStore' $ \db -> setGroupLinkMemberRole db user groupLinkId mRole' pure $ CRGroupLink user gInfo groupLink mRole' - APIDeleteGroupLink groupId -> withUser $ \user -> withChatLock "deleteGroupLink" $ do + APIDeleteGroupLink groupId -> withUser $ \user -> withGroupLock "deleteGroupLink" groupId $ do gInfo <- withStore $ \db -> getGroupInfo db vr user groupId deleteGroupLink' user gInfo pure $ CRGroupLinkDeleted user gInfo @@ -1932,19 +1969,19 @@ processChatCommand' vr = \case ForwardImage chatName fileId -> forwardFile chatName fileId SendImage SendFileDescription _chatName _f -> pure $ chatCmdError Nothing "TODO" ReceiveFile fileId encrypted_ rcvInline_ filePath_ -> withUser $ \_ -> - withChatLock "receiveFile" . procCmd $ do + withFileLock "receiveFile" fileId . procCmd $ do (user, ft) <- withStore (`getRcvFileTransferById` fileId) encrypt <- (`fromMaybe` encrypted_) <$> chatReadVar encryptLocalFiles ft' <- (if encrypt then setFileToEncrypt else pure) ft receiveFile' user ft' rcvInline_ filePath_ SetFileToReceive fileId encrypted_ -> withUser $ \_ -> do - withChatLock "setFileToReceive" . procCmd $ do + withFileLock "setFileToReceive" fileId . procCmd $ do encrypt <- (`fromMaybe` encrypted_) <$> chatReadVar encryptLocalFiles cfArgs <- if encrypt then Just <$> (atomically . CF.randomArgs =<< asks random) else pure Nothing withStore' $ \db -> setRcvFileToReceive db fileId cfArgs ok_ CancelFile fileId -> withUser $ \user@User {userId} -> - withChatLock "cancelFile" . procCmd $ + withFileLock "cancelFile" fileId . procCmd $ withStore (\db -> getFileTransfer db user fileId) >>= \case FTSnd ftm@FileTransferMeta {xftpSndFile, cancelled} fts | cancelled -> throwChatError $ CEFileCancel fileId "file already cancelled" @@ -2074,8 +2111,18 @@ processChatCommand' vr = \case pure $ CRVersionInfo {versionInfo, chatMigrations, agentMigrations} DebugLocks -> lift $ do chatLockName <- atomically . tryReadTMVar =<< asks chatLock + chatEntityLocks <- getLocks =<< asks entityLocks agentLocks <- withAgent' debugAgentLocks - pure CRDebugLocks {chatLockName, agentLocks} + pure CRDebugLocks {chatLockName, chatEntityLocks, agentLocks} + where + getLocks ls = atomically $ M.mapKeys enityLockString . M.mapMaybe id <$> (mapM tryReadTMVar =<< readTVar ls) + enityLockString cle = case cle of + CLInvitation bs -> "Invitation " <> B.unpack bs + CLConnection connId -> "Connection " <> show connId + CLContact ctId -> "Contact " <> show ctId + CLGroup gId -> "Group " <> show gId + CLUserContact ucId -> "UserContact " <> show ucId + CLFile fId -> "File " <> show fId GetAgentWorkers -> lift $ CRAgentWorkersSummary <$> withAgent' getAgentWorkersSummary GetAgentWorkersDetails -> lift $ CRAgentWorkersDetails <$> withAgent' getAgentWorkersDetails GetAgentStats -> lift $ CRAgentStats . map stat <$> withAgent' getAgentStats @@ -2101,7 +2148,6 @@ processChatCommand' vr = \case -- in a modified CLI app or core - the hook should return Either ChatResponse ChatCommand CustomChatCommand _cmd -> withUser $ \user -> pure $ chatCmdError (Just user) "not supported" where - withChatLock name action = asks chatLock >>= \l -> withLock l name action -- below code would make command responses asynchronous where they can be slow -- in View.hs `r'` should be defined as `id` in this case -- procCmd :: m ChatResponse -> m ChatResponse @@ -2167,7 +2213,7 @@ processChatCommand' vr = \case CTLocal -> withStore $ \db -> getLocalChatItemIdByText' db user cId msg _ -> throwChatError $ CECommandError "not supported" connectViaContact :: User -> IncognitoEnabled -> ConnectionRequestUri 'CMContact -> CM ChatResponse - connectViaContact user@User {userId} incognito cReq@(CRContactUri ConnReqUriData {crClientData}) = withChatLock "connectViaContact" $ do + connectViaContact user@User {userId} incognito cReq@(CRContactUri ConnReqUriData {crClientData}) = withInvitationLock "connectViaContact" (strEncode cReq) $ do let groupLinkId = crClientData >>= decodeJSON >>= \(CRDataGroup gli) -> Just gli cReqHash = ConnReqUriHash . C.sha256Hash $ strEncode cReq case groupLinkId of @@ -2198,7 +2244,7 @@ processChatCommand' vr = \case pure $ CRSentInvitation user conn incognitoProfile connectContactViaAddress :: User -> IncognitoEnabled -> Contact -> ConnectionRequestUri 'CMContact -> CM ChatResponse connectContactViaAddress user incognito ct cReq = - withChatLock "connectViaContact" $ do + withInvitationLock "connectContactViaAddress" (strEncode cReq) $ do newXContactId <- XContactId <$> drgRandomBytes 16 pqSup <- chatReadVar pqExperimentalEnabled (connId, incognitoProfile, subMode, chatV) <- requestContact user incognito cReq newXContactId False pqSup @@ -2265,8 +2311,9 @@ processChatCommand' vr = \case -- [incognito] filter out contacts with whom user has incognito connections addChangedProfileContact :: User -> Contact -> [ChangedProfileContact] -> [ChangedProfileContact] addChangedProfileContact user' ct changedCts = case contactSendConn_ ct' of - Right conn | not (connIncognito conn) && mergedProfile' /= mergedProfile -> - ChangedProfileContact ct ct' mergedProfile' conn : changedCts + Right conn + | not (connIncognito conn) && mergedProfile' /= mergedProfile -> + ChangedProfileContact ct ct' mergedProfile' conn : changedCts _ -> changedCts where mergedProfile = userProfileToSend user Nothing (Just ct) False @@ -2289,7 +2336,7 @@ processChatCommand' vr = \case let mergedProfile = userProfileToSend user (fromLocalProfile <$> incognitoProfile) (Just ct) False mergedProfile' = userProfileToSend user (fromLocalProfile <$> incognitoProfile) (Just ct') False when (mergedProfile' /= mergedProfile) $ - withChatLock "updateProfile" $ do + withContactLock "updateProfile" (contactId' ct) $ do void (sendDirectContactMessage user ct' $ XInfo mergedProfile') `catchChatError` (toView . CRChatError (Just user)) lift . when (directOrUsed ct') $ createSndFeatureItems user ct ct' pure $ CRContactPrefsUpdated user ct ct' @@ -2334,7 +2381,7 @@ processChatCommand' vr = \case user <- getUserByContactId db ctId (user,) <$> getContact db vr user ctId calls <- asks currentCalls - withChatLock "currentCall" $ + withContactLock "currentCall" ctId $ atomically (TM.lookup ctId calls) >>= \case Nothing -> throwChatError CENoCurrentCall Just call@Call {contactId} @@ -2988,21 +3035,16 @@ deleteGroupLink_ user gInfo conn = do agentSubscriber :: CM' () agentSubscriber = do q <- asks $ subQ . smpAgent - l <- asks chatLock - forever $ atomically (readTBQueue q) >>= process l + forever $ atomically (readTBQueue q) >>= process where - process :: Lock -> (ACorrId, EntityId, APartyCmd 'Agent) -> CM' () - process l (corrId, entId, APC e msg) = run $ case e of + process :: (ACorrId, EntityId, APartyCmd 'Agent) -> CM' () + process (corrId, entId, APC e msg) = run $ case e of SAENone -> processAgentMessageNoConn msg SAEConn -> processAgentMessage corrId entId msg SAERcvFile -> processAgentMsgRcvFile corrId entId msg SAESndFile -> processAgentMsgSndFile corrId entId msg where - run action = do - let name = "agentSubscriber entity=" <> show e <> " entId=" <> str entId <> " msg=" <> str (aCommandTag msg) - withLock' l name $ action `catchChatError'` (toView' . CRChatError Nothing) - str :: StrEncoding a => a -> String - str = B.unpack . strEncode + run action = action `catchChatError'` (toView' . CRChatError Nothing) type AgentBatchSubscribe = AgentClient -> [ConnId] -> ExceptT AgentErrorType IO (Map ConnId (Either AgentErrorType ())) @@ -3150,8 +3192,7 @@ subscribeUserConnections vr onlyNeeded agentBatchSubscribe user = do forM_ err_ $ toView . CRSndFileSubError user ft void . forkIO $ do threadDelay 1000000 - l <- asks chatLock - when (fileStatus == FSConnected) . unlessM (isFileActive fileId sndFiles) . withLock l "subscribe sendFileChunk" $ + when (fileStatus == FSConnected) . unlessM (isFileActive fileId sndFiles) . withChatLock "subscribe sendFileChunk" $ sendFileChunk user ft rcvFileSubsToView :: Map ConnId (Either AgentErrorType ()) -> Map ConnId RcvFileTransfer -> CM () rcvFileSubsToView rs = mapM_ (toView . uncurry (CRRcvFileSubError user)) . filterErrors . resultsFor rs @@ -3317,11 +3358,13 @@ processAgentMessage _ connId (DEL_RCVQ srv qId err_) = processAgentMessage _ connId DEL_CONN = toView $ CRAgentConnDeleted (AgentConnId connId) processAgentMessage corrId connId msg = do - vr <- chatVersionRange - -- getUserByAConnId never throws logical errors, only SEDBBusyError can be thrown here - critical (withStore' (`getUserByAConnId` AgentConnId connId)) >>= \case - Just user -> processAgentMessageConn vr user corrId connId msg `catchChatError` (toView . CRChatError (Just user)) - _ -> throwChatError $ CENoConnectionUser (AgentConnId connId) + lockEntity <- critical (withStore (`getChatLockEntity` AgentConnId connId)) + withEntityLock "processAgentMessage" lockEntity $ do + vr <- chatVersionRange + -- getUserByAConnId never throws logical errors, only SEDBBusyError can be thrown here + critical (withStore' (`getUserByAConnId` AgentConnId connId)) >>= \case + Just user -> processAgentMessageConn vr user corrId connId msg `catchChatError` (toView . CRChatError (Just user)) + _ -> throwChatError $ CENoConnectionUser (AgentConnId connId) -- CRITICAL error will be shown to the user as alert with restart button in Android/desktop apps. -- SEDBBusyError will only be thrown on IO exceptions or SQLError during DB queries, @@ -3358,18 +3401,18 @@ processAgentMessageNoConn = \case toView $ event srv cs processAgentMsgSndFile :: ACorrId -> SndFileId -> ACommand 'Agent 'AESndFile -> CM () -processAgentMsgSndFile _corrId aFileId msg = - withStore' (`getUserByASndFileId` AgentSndFileId aFileId) >>= \case - Just user -> process user `catchChatError` (toView . CRChatError (Just user)) - _ -> do - lift $ withAgent' (`xftpDeleteSndFileInternal` aFileId) - throwChatError $ CENoSndFileUser $ AgentSndFileId aFileId +processAgentMsgSndFile _corrId aFileId msg = do + fileId <- withStore (`getXFTPSndFileDBId` AgentSndFileId aFileId) + withFileLock "processAgentMsgSndFile" fileId $ + withStore' (`getUserByASndFileId` AgentSndFileId aFileId) >>= \case + Just user -> process user fileId `catchChatError` (toView . CRChatError (Just user)) + _ -> do + lift $ withAgent' (`xftpDeleteSndFileInternal` aFileId) + throwChatError $ CENoSndFileUser $ AgentSndFileId aFileId where - process :: User -> CM () - process user = do - (ft@FileTransferMeta {fileId, xftpRedirectFor, cancelled}, sfts) <- withStore $ \db -> do - fileId <- getXFTPSndFileDBId db user $ AgentSndFileId aFileId - getSndFileTransfer db user fileId + process :: User -> FileTransferId -> CM () + process user fileId = do + (ft@FileTransferMeta {xftpRedirectFor, cancelled}, sfts) <- withStore $ \db -> getSndFileTransfer db user fileId vr <- chatVersionRange unless cancelled $ case msg of SFPROG sndProgress sndTotal -> do @@ -3386,11 +3429,11 @@ processAgentMsgSndFile _corrId aFileId msg = lift $ withAgent' (`xftpDeleteSndFileInternal` aFileId) withStore' $ \db -> createExtraSndFTDescrs db user fileId (map fileDescrText rfds) case rfds of - [] -> sendFileError "no receiver descriptions" fileId vr ft + [] -> sendFileError "no receiver descriptions" vr ft rfd : _ -> case [fd | fd@(FD.ValidFileDescription FD.FileDescription {chunks = [_]}) <- rfds] of [] -> case xftpRedirectFor of Nothing -> xftpSndFileRedirect user fileId rfd >>= toView . CRSndFileRedirectStartXFTP user ft - Just _ -> sendFileError "Prohibit chaining redirects" fileId vr ft + Just _ -> sendFileError "Prohibit chaining redirects" vr ft rfds' -> do -- we have 1 chunk - use it as URI whether it is redirect or not ft' <- maybe (pure ft) (\fId -> withStore $ \db -> getFileTransferMeta db user fId) xftpRedirectFor @@ -3439,7 +3482,7 @@ processAgentMsgSndFile _corrId aFileId msg = | temporaryAgentError e -> throwChatError $ CEXFTPSndFile fileId (AgentSndFileId aFileId) e | otherwise -> - sendFileError (tshow e) fileId vr ft + sendFileError (tshow e) vr ft where fileDescrText :: FilePartyI p => ValidFileDescription p -> T.Text fileDescrText = safeDecodeUtf8 . strEncode @@ -3457,8 +3500,8 @@ processAgentMsgSndFile _corrId aFileId msg = case L.nonEmpty fds of Just fds' -> loopSend fds' Nothing -> pure msgDeliveryId - sendFileError :: Text -> Int64 -> (PQSupport -> VersionRangeChat) -> FileTransferMeta -> CM () - sendFileError err fileId vr ft = do + sendFileError :: Text -> (PQSupport -> VersionRangeChat) -> FileTransferMeta -> CM () + sendFileError err vr ft = do logError $ "Sent file error: " <> err ci <- withStore $ \db -> do liftIO $ updateFileCancelled db user fileId CIFSSndError @@ -3480,18 +3523,18 @@ splitFileDescr rfdText = do else fileDescr <| splitParts (partNo + 1) partSize rest processAgentMsgRcvFile :: ACorrId -> RcvFileId -> ACommand 'Agent 'AERcvFile -> CM () -processAgentMsgRcvFile _corrId aFileId msg = - withStore' (`getUserByARcvFileId` AgentRcvFileId aFileId) >>= \case - Just user -> process user `catchChatError` (toView . CRChatError (Just user)) - _ -> do - lift $ withAgent' (`xftpDeleteRcvFile` aFileId) - throwChatError $ CENoRcvFileUser $ AgentRcvFileId aFileId +processAgentMsgRcvFile _corrId aFileId msg = do + fileId <- withStore (`getXFTPRcvFileDBId` AgentRcvFileId aFileId) + withFileLock "processAgentMsgRcvFile" fileId $ + withStore' (`getUserByARcvFileId` AgentRcvFileId aFileId) >>= \case + Just user -> process user fileId `catchChatError` (toView . CRChatError (Just user)) + _ -> do + lift $ withAgent' (`xftpDeleteRcvFile` aFileId) + throwChatError $ CENoRcvFileUser $ AgentRcvFileId aFileId where - process :: User -> CM () - process user = do - ft@RcvFileTransfer {fileId} <- withStore $ \db -> do - fileId <- getXFTPRcvFileDBId db $ AgentRcvFileId aFileId - getRcvFileTransfer db user fileId + process :: User -> FileTransferId -> CM () + process user fileId = do + ft <- withStore $ \db -> getRcvFileTransfer db user fileId vr <- chatVersionRange unless (rcvFileCompleteOrCancelled ft) $ case msg of RFPROG rcvProgress rcvTotal -> do @@ -3597,7 +3640,8 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = -- probably this branch is never executed, so there should be no reason -- to save message if contact hasn't been created yet - chat item isn't created anyway withAckMessage' agentConnId meta $ - void $ saveDirectRcvMSG conn meta msgBody + void $ + saveDirectRcvMSG conn meta msgBody SENT msgId -> sentMsgDeliveryEvent conn msgId OK -> @@ -3634,7 +3678,6 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = (conn'', msg@RcvMessage {chatMsgEvent = ACME _ event}) <- saveDirectRcvMSG conn' msgMeta msgBody let ct'' = ct' {activeConn = Just conn''} :: Contact assertDirectAllowed user MDRcv ct'' $ toCMEventTag event - updateChatLock "direct message" event case event of XMsgNew mc -> newContentMessage ct'' mc msg msgMeta XMsgFileDescr sharedMsgId fileDescr -> messageFileDescription ct'' sharedMsgId fileDescr @@ -4053,7 +4096,6 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = processEvent :: MsgEncodingI e => ChatMessage e -> CM () processEvent chatMsg = do (m', conn', msg@RcvMessage {chatMsgEvent = ACME _ event}) <- saveGroupRcvMsg user groupId m conn msgMeta msgBody chatMsg - updateChatLock "groupMessage" event case event of XMsgNew mc -> memberCanSend m' $ newGroupContentMessage gInfo m' mc msg brokerTs False XMsgFileDescr sharedMsgId fileDescr -> memberCanSend m' $ groupMessageFileDescription gInfo m' sharedMsgId fileDescr @@ -4389,13 +4431,6 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = toView $ CRConnectionDisabled connEntity _ -> pure () - updateChatLock :: MsgEncodingI enc => String -> ChatMsgEvent enc -> CM () - updateChatLock name event = do - l <- asks chatLock - atomically $ tryReadTMVar l >>= mapM_ (swapTMVar l . (<> s)) - where - s = " " <> name <> "=" <> B.unpack (strEncode $ toCMEventTag event) - -- TODO v5.7 / v6.0 - together with deprecating old group protocol establishing direct connections? -- we could save command records only for agent APIs we process continuations for (INV) withCompletedCommand :: forall e. AEntityI e => Connection -> ACommand 'Agent e -> (CommandData -> CM ()) -> CM () @@ -4433,9 +4468,9 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = -- This prevents losing the message that failed to be processed. Left (ChatErrorStore SEDBBusyError {message}) | showCritical -> throwError $ ChatErrorAgent (CRITICAL True message) Nothing Left e -> ackMsg msgMeta Nothing >> throwError e - where - ackMsg :: MsgMeta -> Maybe MsgReceiptInfo -> CM () - ackMsg MsgMeta {recipient = (msgId, _)} rcpt = withAgent $ \a -> ackMessageAsync a "" cId msgId rcpt + where + ackMsg :: MsgMeta -> Maybe MsgReceiptInfo -> CM () + ackMsg MsgMeta {recipient = (msgId, _)} rcpt = withAgent $ \a -> ackMessageAsync a "" cId msgId rcpt sentMsgDeliveryEvent :: Connection -> AgentMsgId -> CM () sentMsgDeliveryEvent Connection {connId} msgId = diff --git a/src/Simplex/Chat/Controller.hs b/src/Simplex/Chat/Controller.hs index 0291793843..024757e7bb 100644 --- a/src/Simplex/Chat/Controller.hs +++ b/src/Simplex/Chat/Controller.hs @@ -59,7 +59,7 @@ import Simplex.Chat.Messages.CIContent import Simplex.Chat.Protocol import Simplex.Chat.Remote.AppVersion import Simplex.Chat.Remote.Types -import Simplex.Chat.Store (AutoAccept, StoreError (..), UserContactLink, UserMsgReceiptSettings) +import Simplex.Chat.Store (AutoAccept, ChatLockEntity, StoreError (..), UserContactLink, UserMsgReceiptSettings) import Simplex.Chat.Types import Simplex.Chat.Types.Preferences import Simplex.Chat.Util (liftIOEither) @@ -165,7 +165,7 @@ defaultChatHooks = ChatHooks { preCmdHook = \_ -> pure . Right, eventHook = \_ -> pure - } + } data DefaultAgentServers = DefaultAgentServers { smp :: NonEmpty SMPServerWithAuth, @@ -208,6 +208,7 @@ data ChatController = ChatController connNetworkStatuses :: TMap AgentConnId NetworkStatus, subscriptionMode :: TVar SubscriptionMode, chatLock :: Lock, + entityLocks :: TMap ChatLockEntity Lock, sndFiles :: TVar (Map Int64 Handle), rcvFiles :: TVar (Map Int64 Handle), currentCalls :: TMap ContactId Call, @@ -491,9 +492,9 @@ data ChatCommand | GetAgentSubsDetails | GetAgentWorkers | GetAgentWorkersDetails - -- The parser will return this command for strings that start from "//". - -- This command should be processed in preCmdHook - | CustomChatCommand ByteString + | -- The parser will return this command for strings that start from "//". + -- This command should be processed in preCmdHook + CustomChatCommand ByteString deriving (Show) allowRemoteCommand :: ChatCommand -> Bool -- XXX: consider using Relay/Block/ForceLocal @@ -731,7 +732,7 @@ data ChatResponse | CRContactPQEnabled {user :: User, contact :: Contact, pqEnabled :: PQEncryption} | CRSQLResult {rows :: [Text]} | CRSlowSQLQueries {chatQueries :: [SlowSQLQuery], agentQueries :: [SlowSQLQuery]} - | CRDebugLocks {chatLockName :: Maybe String, agentLocks :: AgentLocks} + | CRDebugLocks {chatLockName :: Maybe String, chatEntityLocks :: Map String String, agentLocks :: AgentLocks} | CRAgentStats {agentStats :: [[String]]} | CRAgentWorkersDetails {agentWorkersDetails :: AgentWorkersDetails} | CRAgentWorkersSummary {agentWorkersSummary :: AgentWorkersSummary} @@ -1353,7 +1354,7 @@ handleDBErrors = [ E.Handler $ \(e :: SQLError) -> let se = SQL.sqlError e busy = se == SQL.ErrorBusy || se == SQL.ErrorLocked - in pure . Left . ChatErrorStore $ if busy then SEDBBusyError $ show se else SEDBException $ show e, + in pure . Left . ChatErrorStore $ if busy then SEDBBusyError $ show se else SEDBException $ show e, E.Handler $ \(E.SomeException e) -> pure . Left . ChatErrorStore . SEDBException $ show e ] diff --git a/src/Simplex/Chat/Protocol.hs b/src/Simplex/Chat/Protocol.hs index e2810dafa9..8727a592a7 100644 --- a/src/Simplex/Chat/Protocol.hs +++ b/src/Simplex/Chat/Protocol.hs @@ -48,7 +48,7 @@ import Simplex.Chat.Types import Simplex.Chat.Types.Util import Simplex.Messaging.Agent.Protocol (VersionSMPA, pqdrSMPAgentVersion) import Simplex.Messaging.Compression (compress1, decompressBatch) -import Simplex.Messaging.Crypto.Ratchet (PQSupport (..), pattern PQSupportOn, pattern PQSupportOff) +import Simplex.Messaging.Crypto.Ratchet (PQSupport (..), pattern PQSupportOff, pattern PQSupportOn) import Simplex.Messaging.Encoding import Simplex.Messaging.Encoding.String import Simplex.Messaging.Parsers (defaultJSON, dropPrefix, fromTextField_, fstToLower, parseAll, sumTypeJSON, taggedObjectJSON) diff --git a/src/Simplex/Chat/Store.hs b/src/Simplex/Chat/Store.hs index 91021713b1..4b0591fb3a 100644 --- a/src/Simplex/Chat/Store.hs +++ b/src/Simplex/Chat/Store.hs @@ -1,6 +1,7 @@ module Simplex.Chat.Store ( SQLiteStore, StoreError (..), + ChatLockEntity (..), UserMsgReceiptSettings (..), UserContactLink (..), AutoAccept (..), diff --git a/src/Simplex/Chat/Store/Connections.hs b/src/Simplex/Chat/Store/Connections.hs index 6584aabb0a..0e543eacf2 100644 --- a/src/Simplex/Chat/Store/Connections.hs +++ b/src/Simplex/Chat/Store/Connections.hs @@ -3,11 +3,13 @@ {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE TupleSections #-} {-# LANGUAGE TypeOperators #-} {-# OPTIONS_GHC -fno-warn-ambiguous-fields #-} module Simplex.Chat.Store.Connections - ( getConnectionEntity, + ( getChatLockEntity, + getConnectionEntity, getConnectionEntityByConnReq, getContactConnEntityByConnReqHash, getConnectionsToSubscribe, @@ -37,6 +39,31 @@ import qualified Simplex.Messaging.Agent.Store.SQLite.DB as DB import Simplex.Messaging.Crypto.Ratchet (PQSupport) import Simplex.Messaging.Util (eitherToMaybe) +getChatLockEntity :: DB.Connection -> AgentConnId -> ExceptT StoreError IO ChatLockEntity +getChatLockEntity db agentConnId = do + ((connId, connType) :. (contactId, groupMemberId, sndFileId, rcvFileId, userContactLinkId)) <- + ExceptT . firstRow id (SEConnectionNotFound agentConnId) $ + DB.query + db + [sql| + SELECT connection_id, conn_type, contact_id, group_member_id, snd_file_id, rcv_file_id, user_contact_link_id + FROM connections + WHERE agent_conn_id = ? + |] + (Only agentConnId) + let err = throwError $ SEInternalError $ "connection " <> show connType <> " without entity" + case connType of + ConnMember -> maybe err (fmap CLGroup . getMemberGroupId) groupMemberId + ConnContact -> pure $ maybe (CLConnection connId) CLContact contactId + ConnSndFile -> maybe err (pure . CLFile) sndFileId + ConnRcvFile -> maybe err (pure . CLFile) rcvFileId + ConnUserContact -> maybe err (pure . CLUserContact) userContactLinkId + where + getMemberGroupId :: GroupMemberId -> ExceptT StoreError IO GroupId + getMemberGroupId groupMemberId = + ExceptT . firstRow fromOnly (SEInternalError "group member connection group_id not found") $ + DB.query db "SELECT group_id FROM group_members WHERE group_member_id = ?" (Only groupMemberId) + getConnectionEntity :: DB.Connection -> (PQSupport -> VersionRangeChat) -> User -> AgentConnId -> ExceptT StoreError IO ConnectionEntity getConnectionEntity db vr user@User {userId, userContactId} agentConnId = do c@Connection {connType, entityId} <- getConnection_ diff --git a/src/Simplex/Chat/Store/Files.hs b/src/Simplex/Chat/Store/Files.hs index e77681bb9b..8ac54c7e9b 100644 --- a/src/Simplex/Chat/Store/Files.hs +++ b/src/Simplex/Chat/Store/Files.hs @@ -336,10 +336,10 @@ setSndFTAgentDeleted db User {userId} fileId = do "UPDATE files SET agent_snd_file_deleted = 1, updated_at = ? WHERE user_id = ? AND file_id = ?" (currentTs, userId, fileId) -getXFTPSndFileDBId :: DB.Connection -> User -> AgentSndFileId -> ExceptT StoreError IO FileTransferId -getXFTPSndFileDBId db User {userId} aSndFileId = +getXFTPSndFileDBId :: DB.Connection -> AgentSndFileId -> ExceptT StoreError IO FileTransferId +getXFTPSndFileDBId db aSndFileId = ExceptT . firstRow fromOnly (SESndFileNotFoundXFTP aSndFileId) $ - DB.query db "SELECT file_id FROM files WHERE user_id = ? AND agent_snd_file_id = ?" (userId, aSndFileId) + DB.query db "SELECT file_id FROM files WHERE agent_snd_file_id = ?" (Only aSndFileId) getXFTPRcvFileDBId :: DB.Connection -> AgentRcvFileId -> ExceptT StoreError IO FileTransferId getXFTPRcvFileDBId db aRcvFileId = diff --git a/src/Simplex/Chat/Store/Shared.hs b/src/Simplex/Chat/Store/Shared.hs index 88540134fe..ef7cda4802 100644 --- a/src/Simplex/Chat/Store/Shared.hs +++ b/src/Simplex/Chat/Store/Shared.hs @@ -45,6 +45,15 @@ import Simplex.Messaging.Util (allFinally) import Simplex.Messaging.Version import UnliftIO.STM +data ChatLockEntity + = CLInvitation ByteString + | CLConnection Int64 + | CLContact ContactId + | CLGroup GroupId + | CLUserContact Int64 + | CLFile Int64 + deriving (Eq, Ord) + -- These error type constructors must be added to mobile apps data StoreError = SEDuplicateName diff --git a/src/Simplex/Chat/View.hs b/src/Simplex/Chat/View.hs index 65a6626308..550fe97b18 100644 --- a/src/Simplex/Chat/View.hs +++ b/src/Simplex/Chat/View.hs @@ -351,8 +351,9 @@ responseToView hu@(currentRH, user_) ChatConfig {logLevel, showReactions, showRe <> (" :: avg: " <> sShow timeAvg <> " ms") <> (" :: " <> plain (T.unwords $ T.lines query)) in ("Chat queries" : map viewQuery chatQueries) <> [""] <> ("Agent queries" : map viewQuery agentQueries) - CRDebugLocks {chatLockName, agentLocks} -> + CRDebugLocks {chatLockName, chatEntityLocks, agentLocks} -> [ maybe "no chat lock" (("chat lock: " <>) . plain) chatLockName, + plain $ "chat entity locks: " <> LB.unpack (J.encode chatEntityLocks), plain $ "agent locks: " <> LB.unpack (J.encode agentLocks) ] CRAgentStats stats -> map (plain . intercalate ",") stats @@ -1595,7 +1596,7 @@ standaloneUploadComplete FileTransferMeta {fileId, fileName} = \case [] -> [fileTransferStr fileId fileName <> " upload complete."] uris -> fileTransferStr fileId fileName <> " upload complete. download with:" - : map plain uris + : map plain uris sndFile :: SndFileTransfer -> StyledString sndFile SndFileTransfer {fileId, fileName} = fileTransferStr fileId fileName diff --git a/tests/ChatTests/Files.hs b/tests/ChatTests/Files.hs index 1e72df9156..e50b20844a 100644 --- a/tests/ChatTests/Files.hs +++ b/tests/ChatTests/Files.hs @@ -787,7 +787,8 @@ testXFTPCancelRcvRepeat = bob ##> "/fr 1 ./tests/tmp" bob <### [ "saving file 1 from alice to ./tests/tmp/testfile_1", - "started receiving file 1 (testfile) from alice" + "started receiving file 1 (testfile) from alice", + StartsWith "chat db error: SERcvFileNotFoundXFTP" ] bob <## "completed receiving file 1 (testfile) from alice" diff --git a/tests/ChatTests/Profiles.hs b/tests/ChatTests/Profiles.hs index 7996fde3ad..8a9191c988 100644 --- a/tests/ChatTests/Profiles.hs +++ b/tests/ChatTests/Profiles.hs @@ -179,10 +179,12 @@ testMultiWordProfileNames = alice <# "#'Our Team' 'Bob James'> hi" cath <# "#'Our Team' 'Bob James'> hi" alice `send` "@'Cath Johnson' hello" - alice <## "member #'Our Team' 'Cath Johnson' does not have direct connection, creating" - alice <## "contact for member #'Our Team' 'Cath Johnson' is created" - alice <## "sent invitation to connect directly to member #'Our Team' 'Cath Johnson'" - alice <# "@'Cath Johnson' hello" + alice + <### [ "member #'Our Team' 'Cath Johnson' does not have direct connection, creating", + "contact for member #'Our Team' 'Cath Johnson' is created", + "sent invitation to connect directly to member #'Our Team' 'Cath Johnson'", + WithTime "@'Cath Johnson' hello" + ] cath <## "#'Our Team' 'Alice Jones' is creating direct contact 'Alice Jones' with you" cath <# "'Alice Jones'> hello" cath <## "'Alice Jones': contact is connected" From 18efc28d16eecb6188bf34df157b72a645eb304b Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Thu, 4 Apr 2024 20:41:56 +0100 Subject: [PATCH 08/60] core: additional group preferences: prohibit SimpleX links, restrict some features to specific roles (#3964) * core: additional group preferences: prohibit SimpleX links, restrict some features to specific roles * add role to group preference items, tests --- .../src/Directory/Events.hs | 1 + .../src/Directory/Service.hs | 1 + simplex-chat.cabal | 1 + src/Simplex/Chat.hs | 72 ++++++---- src/Simplex/Chat/Controller.hs | 4 +- src/Simplex/Chat/Markdown.hs | 9 ++ src/Simplex/Chat/Messages/CIContent.hs | 33 ++--- src/Simplex/Chat/Messages/CIContent/Events.hs | 1 + src/Simplex/Chat/Protocol.hs | 1 + src/Simplex/Chat/Store/Groups.hs | 8 +- src/Simplex/Chat/Store/Profiles.hs | 1 + src/Simplex/Chat/Types.hs | 43 +----- src/Simplex/Chat/Types/Preferences.hs | 131 +++++++++++++++--- src/Simplex/Chat/Types/Shared.hs | 48 +++++++ src/Simplex/Chat/View.hs | 1 + tests/Bots/DirectoryTests.hs | 3 +- tests/ChatTests/Groups.hs | 4 +- tests/ChatTests/Profiles.hs | 126 ++++++++++++++++- tests/ChatTests/Utils.hs | 2 + tests/ProtocolTests.hs | 3 +- 20 files changed, 384 insertions(+), 109 deletions(-) create mode 100644 src/Simplex/Chat/Types/Shared.hs diff --git a/apps/simplex-directory-service/src/Directory/Events.hs b/apps/simplex-directory-service/src/Directory/Events.hs index 1d7a866051..76f57585a8 100644 --- a/apps/simplex-directory-service/src/Directory/Events.hs +++ b/apps/simplex-directory-service/src/Directory/Events.hs @@ -31,6 +31,7 @@ import Simplex.Chat.Messages import Simplex.Chat.Messages.CIContent import Simplex.Chat.Protocol (MsgContent (..)) import Simplex.Chat.Types +import Simplex.Chat.Types.Shared import Simplex.Messaging.Encoding.String import Simplex.Messaging.Util ((<$?>)) import Data.Char (isSpace) diff --git a/apps/simplex-directory-service/src/Directory/Service.hs b/apps/simplex-directory-service/src/Directory/Service.hs index c1428881b9..d158b57e22 100644 --- a/apps/simplex-directory-service/src/Directory/Service.hs +++ b/apps/simplex-directory-service/src/Directory/Service.hs @@ -36,6 +36,7 @@ import Simplex.Chat.Messages import Simplex.Chat.Options import Simplex.Chat.Protocol (MsgContent (..)) import Simplex.Chat.Types +import Simplex.Chat.Types.Shared import Simplex.Chat.View (serializeChatResponse, simplexChatContact) import Simplex.Messaging.Encoding.String import Simplex.Messaging.TMap (TMap) diff --git a/simplex-chat.cabal b/simplex-chat.cabal index fb0635abad..005fbe10a9 100644 --- a/simplex-chat.cabal +++ b/simplex-chat.cabal @@ -174,6 +174,7 @@ library Simplex.Chat.Terminal.Output Simplex.Chat.Types Simplex.Chat.Types.Preferences + Simplex.Chat.Types.Shared Simplex.Chat.Types.Util Simplex.Chat.Util Simplex.Chat.View diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index c62fdfb8bd..d075c6cf70 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -80,6 +80,7 @@ import Simplex.Chat.Store.Profiles import Simplex.Chat.Store.Shared import Simplex.Chat.Types import Simplex.Chat.Types.Preferences +import Simplex.Chat.Types.Shared import Simplex.Chat.Types.Util import Simplex.Chat.Util (encryptFile, shuffle) import Simplex.FileTransfer.Client.Main (maxFileSize, maxFileSizeHard) @@ -748,10 +749,10 @@ processChatCommand' vr = \case assertUserGroupRole gInfo GRAuthor send g where - send g@(Group gInfo@GroupInfo {groupId} ms) - | isVoice mc && not (groupFeatureAllowed SGFVoice gInfo) = notAllowedError GFVoice - | not (isVoice mc) && isJust file_ && not (groupFeatureAllowed SGFFiles gInfo) = notAllowedError GFFiles - | otherwise = do + send g@(Group gInfo@GroupInfo {groupId, membership} ms) = + case prohibitedGroupContent gInfo membership mc file_ of + Just f -> notAllowedError f + Nothing -> do (fInv_, ciFile_) <- L.unzip <$> setupSndFileTransfer g (length $ filter memberCurrent ms) timed_ <- sndGroupCITimed live gInfo itemTTL (msgContainer, quotedItem_) <- prepareGroupMsg user gInfo mc quotedItemId_ fInv_ timed_ live @@ -1587,8 +1588,9 @@ processChatCommand' vr = \case let mc = MCText msg case memberContactId m of Nothing -> do - gInfo <- withStore $ \db -> getGroupInfo db vr user gId - toView $ CRNoMemberContactCreating user gInfo m + g <- withStore $ \db -> getGroupInfo db vr user gId + unless (groupFeatureMemberAllowed SGFDirectMessages (membership g) g) $ throwChatError $ CECommandError "direct messages not allowed" + toView $ CRNoMemberContactCreating user g m processChatCommand (APICreateMemberContact gId mId) >>= \case cr@(CRNewMemberContact _ Contact {contactId} _ _) -> do toView cr @@ -1872,7 +1874,7 @@ processChatCommand' vr = \case APICreateMemberContact gId gMemberId -> withUser $ \user -> do (g, m) <- withStore $ \db -> (,) <$> getGroupInfo db vr user gId <*> getGroupMember db vr user gId gMemberId assertUserGroupRole g GRAuthor - unless (groupFeatureAllowed SGFDirectMessages g) $ throwChatError $ CECommandError "direct messages not allowed" + unless (groupFeatureMemberAllowed SGFDirectMessages (membership g) g) $ throwChatError $ CECommandError "direct messages not allowed" case memberConn m of Just mConn@Connection {peerChatVRange} -> do unless (maxVersion peerChatVRange >= groupDirectInvVersion) $ throwChatError CEPeerChatVRangeIncompatible @@ -2053,9 +2055,12 @@ processChatCommand' vr = \case ct@Contact {userPreferences} <- withStore $ \db -> getContactByName db vr user cName let prefs' = setPreference f allowed_ $ Just userPreferences updateContactPrefs user ct prefs' - SetGroupFeature (AGF f) gName enabled -> + SetGroupFeature (AGFNR f) gName enabled -> updateGroupProfileByName gName $ \p -> p {groupPreferences = Just . setGroupPreference f enabled $ groupPreferences p} + SetGroupFeatureRole (AGFR f) gName enabled role -> + updateGroupProfileByName gName $ \p -> + p {groupPreferences = Just . setGroupPreferenceRole f enabled role $ groupPreferences p} SetUserTimedMessages onOff -> withUser $ \user@User {profile} -> do let allowed = if onOff then FAYes else FANo pref = TimedMessagesPreference allowed Nothing @@ -2645,7 +2650,7 @@ assertDirectAllowed user dir ct event = unless (allowedChatEvent || anyDirectOrUsed ct) . unlessM directMessagesAllowed $ throwChatError (CEDirectMessagesProhibited dir ct) where - directMessagesAllowed = any (groupFeatureAllowed' SGFDirectMessages) <$> withStore' (\db -> getContactGroupPreferences db user ct) + directMessagesAllowed = any (uncurry $ groupFeatureMemberAllowed' SGFDirectMessages) <$> withStore' (\db -> getContactGroupPreferences db user ct) allowedChatEvent = case event of XMsgNew_ -> False XMsgUpdate_ -> False @@ -2655,6 +2660,13 @@ assertDirectAllowed user dir ct event = XCallInv_ -> False _ -> True +prohibitedGroupContent :: GroupInfo -> GroupMember -> MsgContent -> Maybe f -> Maybe GroupFeature +prohibitedGroupContent gInfo m mc file_ + | isVoice mc && not (groupFeatureMemberAllowed SGFVoice m gInfo) = Just GFVoice + | not (isVoice mc) && isJust file_ && not (groupFeatureMemberAllowed SGFFiles m gInfo) = Just GFFiles + | not (groupFeatureMemberAllowed SGFSimplexLinks m gInfo) && containsFormat isSimplexLink (parseMarkdown $ msgContentText mc) = Just GFSimplexLinks + | otherwise = Nothing + roundedFDCount :: Int -> Int roundedFDCount n | n <= 0 = 4 @@ -4739,14 +4751,14 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = newGroupContentMessage :: GroupInfo -> GroupMember -> MsgContainer -> RcvMessage -> UTCTime -> Bool -> CM () newGroupContentMessage gInfo m@GroupMember {memberId, memberRole} mc msg@RcvMessage {sharedMsgId_} brokerTs forwarded | blockedByAdmin m = createBlockedByAdmin - | isVoice content && not (groupFeatureAllowed SGFVoice gInfo) = rejected GFVoice - | not (isVoice content) && isJust fInv_ && not (groupFeatureAllowed SGFFiles gInfo) = rejected GFFiles - | otherwise = - withStore' (\db -> getCIModeration db vr user gInfo memberId sharedMsgId_) >>= \case - Just ciModeration -> do - applyModeration ciModeration - withStore' $ \db -> deleteCIModeration db gInfo memberId sharedMsgId_ - Nothing -> createContentItem + | otherwise = case prohibitedGroupContent gInfo m content fInv_ of + Just f -> rejected f + Nothing -> + withStore' (\db -> getCIModeration db vr user gInfo memberId sharedMsgId_) >>= \case + Just ciModeration -> do + applyModeration ciModeration + withStore' $ \db -> deleteCIModeration db gInfo memberId sharedMsgId_ + Nothing -> createContentItem where rejected f = void $ newChatItem (CIRcvGroupFeatureRejected f) Nothing Nothing False timed' = if forwarded then rcvCITimed_ (Just Nothing) itemTTL else rcvGroupCITimed gInfo itemTTL @@ -5189,8 +5201,8 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = createGroupFeatureItems g@GroupInfo {fullGroupPreferences} m = forM_ allGroupFeatures $ \(AGF f) -> do let p = getGroupPreference f fullGroupPreferences - (_, param) = groupFeatureState p - createInternalChatItem user (CDGroupRcv g m) (CIRcvGroupFeature (toGroupFeature f) (toGroupPreference p) param) Nothing + (_, param, role) = groupFeatureState p + createInternalChatItem user (CDGroupRcv g m) (CIRcvGroupFeature (toGroupFeature f) (toGroupPreference p) param role) Nothing xInfoProbe :: ContactOrMember -> Probe -> CM () xInfoProbe cgm2 probe = do @@ -5701,7 +5713,7 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = xGrpDirectInv :: GroupInfo -> GroupMember -> Connection -> ConnReqInvitation -> Maybe MsgContent -> RcvMessage -> UTCTime -> CM () xGrpDirectInv g m mConn connReq mContent_ msg brokerTs = do - unless (groupFeatureAllowed SGFDirectMessages g) $ messageError "x.grp.direct.inv: direct messages not allowed" + unless (groupFeatureMemberAllowed SGFDirectMessages m g) $ messageError "x.grp.direct.inv: direct messages not allowed" let GroupMember {memberContactId} = m subMode <- chatReadVar subscriptionMode case memberContactId of @@ -6681,14 +6693,14 @@ createContactsFeatureItems user cts chatDir ciFeature ciOffer getPref = do cup = getContactUserPreference f cups cup' = getContactUserPreference f cups' -createGroupFeatureChangedItems :: MsgDirectionI d => User -> ChatDirection 'CTGroup d -> (GroupFeature -> GroupPreference -> Maybe Int -> CIContent d) -> GroupInfo -> GroupInfo -> CM () +createGroupFeatureChangedItems :: MsgDirectionI d => User -> ChatDirection 'CTGroup d -> (GroupFeature -> GroupPreference -> Maybe Int -> Maybe GroupMemberRole -> CIContent d) -> GroupInfo -> GroupInfo -> CM () createGroupFeatureChangedItems user cd ciContent GroupInfo {fullGroupPreferences = gps} GroupInfo {fullGroupPreferences = gps'} = forM_ allGroupFeatures $ \(AGF f) -> do let state = groupFeatureState $ getGroupPreference f gps pref' = getGroupPreference f gps' - state'@(_, int') = groupFeatureState pref' + state'@(_, param', role') = groupFeatureState pref' when (state /= state') $ - createInternalChatItem user cd (ciContent (toGroupFeature f) (toGroupPreference pref') int') Nothing + createInternalChatItem user cd (ciContent (toGroupFeature f) (toGroupPreference pref') param' role') Nothing sameGroupProfileInfo :: GroupProfile -> GroupProfile -> Bool sameGroupProfileInfo p p' = p {groupPreferences = Nothing} == p' {groupPreferences = Nothing} @@ -7046,20 +7058,22 @@ chatCommandP = "/show profile image" $> ShowProfileImage, ("/profile " <|> "/p ") *> (uncurry UpdateProfile <$> profileNames), ("/profile" <|> "/p") $> ShowProfile, - "/set voice #" *> (SetGroupFeature (AGF SGFVoice) <$> displayName <*> (A.space *> strP)), + "/set voice #" *> (SetGroupFeatureRole (AGFR SGFVoice) <$> displayName <*> _strP <*> optional memberRole), "/set voice @" *> (SetContactFeature (ACF SCFVoice) <$> displayName <*> optional (A.space *> strP)), "/set voice " *> (SetUserFeature (ACF SCFVoice) <$> strP), - "/set files #" *> (SetGroupFeature (AGF SGFFiles) <$> displayName <*> (A.space *> strP)), - "/set history #" *> (SetGroupFeature (AGF SGFHistory) <$> displayName <*> (A.space *> strP)), + "/set files #" *> (SetGroupFeatureRole (AGFR SGFFiles) <$> displayName <*> _strP <*> optional memberRole), + "/set history #" *> (SetGroupFeature (AGFNR SGFHistory) <$> displayName <*> (A.space *> strP)), + "/set reactions #" *> (SetGroupFeature (AGFNR SGFReactions) <$> displayName <*> (A.space *> strP)), "/set calls @" *> (SetContactFeature (ACF SCFCalls) <$> displayName <*> optional (A.space *> strP)), "/set calls " *> (SetUserFeature (ACF SCFCalls) <$> strP), - "/set delete #" *> (SetGroupFeature (AGF SGFFullDelete) <$> displayName <*> (A.space *> strP)), + "/set delete #" *> (SetGroupFeature (AGFNR SGFFullDelete) <$> displayName <*> (A.space *> strP)), "/set delete @" *> (SetContactFeature (ACF SCFFullDelete) <$> displayName <*> optional (A.space *> strP)), "/set delete " *> (SetUserFeature (ACF SCFFullDelete) <$> strP), - "/set direct #" *> (SetGroupFeature (AGF SGFDirectMessages) <$> displayName <*> (A.space *> strP)), + "/set direct #" *> (SetGroupFeatureRole (AGFR SGFDirectMessages) <$> displayName <*> _strP <*> optional memberRole), "/set disappear #" *> (SetGroupTimedMessages <$> displayName <*> (A.space *> timedTTLOnOffP)), "/set disappear @" *> (SetContactTimedMessages <$> displayName <*> optional (A.space *> timedMessagesEnabledP)), "/set disappear " *> (SetUserTimedMessages <$> (("yes" $> True) <|> ("no" $> False))), + "/set links #" *> (SetGroupFeatureRole (AGFR SGFSimplexLinks) <$> displayName <*> _strP <*> optional memberRole), ("/incognito" <* optional (A.space *> onOffP)) $> ChatHelp HSIncognito, "/set device name " *> (SetLocalDeviceName <$> textP), "/list remote hosts" $> ListRemoteHosts, @@ -7147,7 +7161,7 @@ chatCommandP = let groupPreferences = Just (emptyGroupPrefs :: GroupPreferences) - { directMessages = Just DirectMessagesGroupPreference {enable = FEOn}, + { directMessages = Just DirectMessagesGroupPreference {enable = FEOn, role = Nothing}, history = Just HistoryGroupPreference {enable = FEOn} } pure GroupProfile {displayName = gName, fullName, description = Nothing, image = Nothing, groupPreferences} diff --git a/src/Simplex/Chat/Controller.hs b/src/Simplex/Chat/Controller.hs index 024757e7bb..85d93a7d88 100644 --- a/src/Simplex/Chat/Controller.hs +++ b/src/Simplex/Chat/Controller.hs @@ -62,6 +62,7 @@ import Simplex.Chat.Remote.Types import Simplex.Chat.Store (AutoAccept, ChatLockEntity, StoreError (..), UserContactLink, UserMsgReceiptSettings) import Simplex.Chat.Types import Simplex.Chat.Types.Preferences +import Simplex.Chat.Types.Shared import Simplex.Chat.Util (liftIOEither) import Simplex.FileTransfer.Description (FileDescriptionURI) import Simplex.Messaging.Agent (AgentClient, SubscriptionsInfo) @@ -461,7 +462,8 @@ data ChatCommand | ShowProfileImage | SetUserFeature AChatFeature FeatureAllowed -- UserId (not used in UI) | SetContactFeature AChatFeature ContactName (Maybe FeatureAllowed) - | SetGroupFeature AGroupFeature GroupName GroupFeatureEnabled + | SetGroupFeature AGroupFeatureNoRole GroupName GroupFeatureEnabled + | SetGroupFeatureRole AGroupFeatureRole GroupName GroupFeatureEnabled (Maybe GroupMemberRole) | SetUserTimedMessages Bool -- UserId (not used in UI) | SetContactTimedMessages ContactName (Maybe TimedMessagesEnabled) | SetGroupTimedMessages GroupName (Maybe Int) diff --git a/src/Simplex/Chat/Markdown.hs b/src/Simplex/Chat/Markdown.hs index 2eabb48166..d3b9ea52f1 100644 --- a/src/Simplex/Chat/Markdown.hs +++ b/src/Simplex/Chat/Markdown.hs @@ -144,6 +144,15 @@ markdownToList (m1 :|: m2) = markdownToList m1 <> markdownToList m2 parseMarkdown :: Text -> Markdown parseMarkdown s = fromRight (unmarked s) $ A.parseOnly (markdownP <* A.endOfInput) s +containsFormat :: (Format -> Bool) -> Markdown -> Bool +containsFormat p (Markdown f _) = maybe False p f +containsFormat p (m1 :|: m2) = containsFormat p m1 || containsFormat p m2 + +isSimplexLink :: Format -> Bool +isSimplexLink = \case + SimplexLink {} -> True; + _ -> False + markdownP :: Parser Markdown markdownP = mconcat <$> A.many' fragmentP where diff --git a/src/Simplex/Chat/Messages/CIContent.hs b/src/Simplex/Chat/Messages/CIContent.hs index 0e95570b85..9266a0c1ca 100644 --- a/src/Simplex/Chat/Messages/CIContent.hs +++ b/src/Simplex/Chat/Messages/CIContent.hs @@ -28,6 +28,7 @@ import Simplex.Chat.Messages.CIContent.Events import Simplex.Chat.Protocol import Simplex.Chat.Types import Simplex.Chat.Types.Preferences +import Simplex.Chat.Types.Shared import Simplex.Chat.Types.Util import Simplex.Messaging.Agent.Protocol (MsgErrorType (..), RatchetSyncState (..), SwitchPhase (..)) import Simplex.Messaging.Crypto.Ratchet (PQEncryption, pattern PQEncOn, pattern PQEncOff) @@ -134,8 +135,8 @@ data CIContent (d :: MsgDirection) where CISndChatFeature :: ChatFeature -> PrefEnabled -> Maybe Int -> CIContent 'MDSnd CIRcvChatPreference :: ChatFeature -> FeatureAllowed -> Maybe Int -> CIContent 'MDRcv CISndChatPreference :: ChatFeature -> FeatureAllowed -> Maybe Int -> CIContent 'MDSnd - CIRcvGroupFeature :: GroupFeature -> GroupPreference -> Maybe Int -> CIContent 'MDRcv - CISndGroupFeature :: GroupFeature -> GroupPreference -> Maybe Int -> CIContent 'MDSnd + CIRcvGroupFeature :: GroupFeature -> GroupPreference -> Maybe Int -> Maybe GroupMemberRole -> CIContent 'MDRcv + CISndGroupFeature :: GroupFeature -> GroupPreference -> Maybe Int -> Maybe GroupMemberRole -> CIContent 'MDSnd CIRcvChatFeatureRejected :: ChatFeature -> CIContent 'MDRcv CIRcvGroupFeatureRejected :: GroupFeature -> CIContent 'MDRcv CISndModerated :: CIContent 'MDSnd @@ -255,8 +256,8 @@ ciContentToText = \case CISndChatFeature feature enabled param -> featureStateText feature enabled param CIRcvChatPreference feature allowed param -> prefStateText feature allowed param CISndChatPreference feature allowed param -> "you " <> prefStateText feature allowed param - CIRcvGroupFeature feature pref param -> groupPrefStateText feature pref param - CISndGroupFeature feature pref param -> groupPrefStateText feature pref param + CIRcvGroupFeature feature pref param role -> groupPrefStateText feature pref param role + CISndGroupFeature feature pref param role -> groupPrefStateText feature pref param role CIRcvChatFeatureRejected feature -> chatFeatureNameText feature <> ": received, prohibited" CIRcvGroupFeatureRejected feature -> groupFeatureNameText feature <> ": received, prohibited" CISndModerated -> ciModeratedText @@ -413,8 +414,8 @@ data JSONCIContent | JCISndChatFeature {feature :: ChatFeature, enabled :: PrefEnabled, param :: Maybe Int} | JCIRcvChatPreference {feature :: ChatFeature, allowed :: FeatureAllowed, param :: Maybe Int} | JCISndChatPreference {feature :: ChatFeature, allowed :: FeatureAllowed, param :: Maybe Int} - | JCIRcvGroupFeature {groupFeature :: GroupFeature, preference :: GroupPreference, param :: Maybe Int} - | JCISndGroupFeature {groupFeature :: GroupFeature, preference :: GroupPreference, param :: Maybe Int} + | JCIRcvGroupFeature {groupFeature :: GroupFeature, preference :: GroupPreference, param :: Maybe Int, memberRole_ :: Maybe GroupMemberRole} + | JCISndGroupFeature {groupFeature :: GroupFeature, preference :: GroupPreference, param :: Maybe Int, memberRole_ :: Maybe GroupMemberRole} | JCIRcvChatFeatureRejected {feature :: ChatFeature} | JCIRcvGroupFeatureRejected {groupFeature :: GroupFeature} | JCISndModerated @@ -447,8 +448,8 @@ jsonCIContent = \case CISndChatFeature feature enabled param -> JCISndChatFeature {feature, enabled, param} CIRcvChatPreference feature allowed param -> JCIRcvChatPreference {feature, allowed, param} CISndChatPreference feature allowed param -> JCISndChatPreference {feature, allowed, param} - CIRcvGroupFeature groupFeature preference param -> JCIRcvGroupFeature {groupFeature, preference, param} - CISndGroupFeature groupFeature preference param -> JCISndGroupFeature {groupFeature, preference, param} + CIRcvGroupFeature groupFeature preference param memberRole_ -> JCIRcvGroupFeature {groupFeature, preference, param, memberRole_} + CISndGroupFeature groupFeature preference param memberRole_ -> JCISndGroupFeature {groupFeature, preference, param, memberRole_} CIRcvChatFeatureRejected feature -> JCIRcvChatFeatureRejected {feature} CIRcvGroupFeatureRejected groupFeature -> JCIRcvGroupFeatureRejected {groupFeature} CISndModerated -> JCISndModerated @@ -481,8 +482,8 @@ aciContentJSON = \case JCISndChatFeature {feature, enabled, param} -> ACIContent SMDSnd $ CISndChatFeature feature enabled param JCIRcvChatPreference {feature, allowed, param} -> ACIContent SMDRcv $ CIRcvChatPreference feature allowed param JCISndChatPreference {feature, allowed, param} -> ACIContent SMDSnd $ CISndChatPreference feature allowed param - JCIRcvGroupFeature {groupFeature, preference, param} -> ACIContent SMDRcv $ CIRcvGroupFeature groupFeature preference param - JCISndGroupFeature {groupFeature, preference, param} -> ACIContent SMDSnd $ CISndGroupFeature groupFeature preference param + JCIRcvGroupFeature {groupFeature, preference, param, memberRole_} -> ACIContent SMDRcv $ CIRcvGroupFeature groupFeature preference param memberRole_ + JCISndGroupFeature {groupFeature, preference, param, memberRole_} -> ACIContent SMDSnd $ CISndGroupFeature groupFeature preference param memberRole_ JCIRcvChatFeatureRejected {feature} -> ACIContent SMDRcv $ CIRcvChatFeatureRejected feature JCIRcvGroupFeatureRejected {groupFeature} -> ACIContent SMDRcv $ CIRcvGroupFeatureRejected groupFeature JCISndModerated -> ACIContent SMDSnd CISndModerated @@ -516,8 +517,8 @@ data DBJSONCIContent | DBJCISndChatFeature {feature :: ChatFeature, enabled :: PrefEnabled, param :: Maybe Int} | DBJCIRcvChatPreference {feature :: ChatFeature, allowed :: FeatureAllowed, param :: Maybe Int} | DBJCISndChatPreference {feature :: ChatFeature, allowed :: FeatureAllowed, param :: Maybe Int} - | DBJCIRcvGroupFeature {groupFeature :: GroupFeature, preference :: GroupPreference, param :: Maybe Int} - | DBJCISndGroupFeature {groupFeature :: GroupFeature, preference :: GroupPreference, param :: Maybe Int} + | DBJCIRcvGroupFeature {groupFeature :: GroupFeature, preference :: GroupPreference, param :: Maybe Int, memberRole_ :: Maybe GroupMemberRole} + | DBJCISndGroupFeature {groupFeature :: GroupFeature, preference :: GroupPreference, param :: Maybe Int, memberRole_ :: Maybe GroupMemberRole} | DBJCIRcvChatFeatureRejected {feature :: ChatFeature} | DBJCIRcvGroupFeatureRejected {groupFeature :: GroupFeature} | DBJCISndModerated @@ -550,8 +551,8 @@ dbJsonCIContent = \case CISndChatFeature feature enabled param -> DBJCISndChatFeature {feature, enabled, param} CIRcvChatPreference feature allowed param -> DBJCIRcvChatPreference {feature, allowed, param} CISndChatPreference feature allowed param -> DBJCISndChatPreference {feature, allowed, param} - CIRcvGroupFeature groupFeature preference param -> DBJCIRcvGroupFeature {groupFeature, preference, param} - CISndGroupFeature groupFeature preference param -> DBJCISndGroupFeature {groupFeature, preference, param} + CIRcvGroupFeature groupFeature preference param memberRole_ -> DBJCIRcvGroupFeature {groupFeature, preference, param, memberRole_} + CISndGroupFeature groupFeature preference param memberRole_ -> DBJCISndGroupFeature {groupFeature, preference, param, memberRole_} CIRcvChatFeatureRejected feature -> DBJCIRcvChatFeatureRejected {feature} CIRcvGroupFeatureRejected groupFeature -> DBJCIRcvGroupFeatureRejected {groupFeature} CISndModerated -> DBJCISndModerated @@ -584,8 +585,8 @@ aciContentDBJSON = \case DBJCISndChatFeature {feature, enabled, param} -> ACIContent SMDSnd $ CISndChatFeature feature enabled param DBJCIRcvChatPreference {feature, allowed, param} -> ACIContent SMDRcv $ CIRcvChatPreference feature allowed param DBJCISndChatPreference {feature, allowed, param} -> ACIContent SMDSnd $ CISndChatPreference feature allowed param - DBJCIRcvGroupFeature {groupFeature, preference, param} -> ACIContent SMDRcv $ CIRcvGroupFeature groupFeature preference param - DBJCISndGroupFeature {groupFeature, preference, param} -> ACIContent SMDSnd $ CISndGroupFeature groupFeature preference param + DBJCIRcvGroupFeature {groupFeature, preference, param, memberRole_} -> ACIContent SMDRcv $ CIRcvGroupFeature groupFeature preference param memberRole_ + DBJCISndGroupFeature {groupFeature, preference, param, memberRole_} -> ACIContent SMDSnd $ CISndGroupFeature groupFeature preference param memberRole_ DBJCIRcvChatFeatureRejected {feature} -> ACIContent SMDRcv $ CIRcvChatFeatureRejected feature DBJCIRcvGroupFeatureRejected {groupFeature} -> ACIContent SMDRcv $ CIRcvGroupFeatureRejected groupFeature DBJCISndModerated -> ACIContent SMDSnd CISndModerated diff --git a/src/Simplex/Chat/Messages/CIContent/Events.hs b/src/Simplex/Chat/Messages/CIContent/Events.hs index 7ce5f73cde..74f7d94399 100644 --- a/src/Simplex/Chat/Messages/CIContent/Events.hs +++ b/src/Simplex/Chat/Messages/CIContent/Events.hs @@ -7,6 +7,7 @@ module Simplex.Chat.Messages.CIContent.Events where import Data.Aeson (FromJSON (..), ToJSON (..)) import qualified Data.Aeson.TH as J import Simplex.Chat.Types +import Simplex.Chat.Types.Shared import Simplex.Messaging.Agent.Protocol (RatchetSyncState (..), SwitchPhase (..)) import Simplex.Messaging.Parsers (dropPrefix, singleFieldJSON, sumTypeJSON) import Simplex.Messaging.Crypto.Ratchet (PQEncryption) diff --git a/src/Simplex/Chat/Protocol.hs b/src/Simplex/Chat/Protocol.hs index 8727a592a7..e262de0e74 100644 --- a/src/Simplex/Chat/Protocol.hs +++ b/src/Simplex/Chat/Protocol.hs @@ -45,6 +45,7 @@ import Database.SQLite.Simple.FromField (FromField (..)) import Database.SQLite.Simple.ToField (ToField (..)) import Simplex.Chat.Call import Simplex.Chat.Types +import Simplex.Chat.Types.Shared import Simplex.Chat.Types.Util import Simplex.Messaging.Agent.Protocol (VersionSMPA, pqdrSMPAgentVersion) import Simplex.Messaging.Compression (compress1, decompressBatch) diff --git a/src/Simplex/Chat/Store/Groups.hs b/src/Simplex/Chat/Store/Groups.hs index 832b928012..cd62f17f4c 100644 --- a/src/Simplex/Chat/Store/Groups.hs +++ b/src/Simplex/Chat/Store/Groups.hs @@ -124,6 +124,7 @@ import Control.Monad import Control.Monad.Except import Control.Monad.IO.Class import Crypto.Random (ChaChaDRG) +import Data.Bifunctor (second) import Data.Either (rights) import Data.Int (Int64) import Data.List (partition, sortOn) @@ -139,6 +140,7 @@ import Simplex.Chat.Store.Direct import Simplex.Chat.Store.Shared import Simplex.Chat.Types import Simplex.Chat.Types.Preferences +import Simplex.Chat.Types.Shared import Simplex.Messaging.Agent.Protocol (ConnId, UserId) import Simplex.Messaging.Agent.Store.SQLite (firstRow, maybeFirstRow) import qualified Simplex.Messaging.Agent.Store.SQLite.DB as DB @@ -668,13 +670,13 @@ getGroupSummary db User {userId} groupId = do (userId, groupId, GSMemRemoved, GSMemLeft, GSMemUnknown, GSMemInvited) pure GroupSummary {currentMembers = fromMaybe 0 currentMembers_} -getContactGroupPreferences :: DB.Connection -> User -> Contact -> IO [FullGroupPreferences] +getContactGroupPreferences :: DB.Connection -> User -> Contact -> IO [(GroupMemberRole, FullGroupPreferences)] getContactGroupPreferences db User {userId} Contact {contactId} = do - map (mergeGroupPreferences . fromOnly) + map (second mergeGroupPreferences) <$> DB.query db [sql| - SELECT gp.preferences + SELECT m.member_role, gp.preferences FROM groups g JOIN group_profiles gp USING (group_profile_id) JOIN group_members m USING (group_id) diff --git a/src/Simplex/Chat/Store/Profiles.hs b/src/Simplex/Chat/Store/Profiles.hs index 512c857b23..0e2445572c 100644 --- a/src/Simplex/Chat/Store/Profiles.hs +++ b/src/Simplex/Chat/Store/Profiles.hs @@ -81,6 +81,7 @@ import Simplex.Chat.Store.Direct import Simplex.Chat.Store.Shared import Simplex.Chat.Types import Simplex.Chat.Types.Preferences +import Simplex.Chat.Types.Shared import Simplex.Messaging.Agent.Protocol (ACorrId, ConnId, UserId) import Simplex.Messaging.Agent.Store.SQLite (firstRow, maybeFirstRow) import qualified Simplex.Messaging.Agent.Store.SQLite.DB as DB diff --git a/src/Simplex/Chat/Types.hs b/src/Simplex/Chat/Types.hs index e419f8c4cb..f7174a635b 100644 --- a/src/Simplex/Chat/Types.hs +++ b/src/Simplex/Chat/Types.hs @@ -30,7 +30,6 @@ import qualified Data.Aeson.TH as JQ import qualified Data.Aeson.Types as JT import qualified Data.Attoparsec.ByteString.Char8 as A import Data.ByteString.Char8 (ByteString, pack, unpack) -import qualified Data.ByteString.Char8 as B import Data.Int (Int64) import Data.Maybe (isJust) import Data.Text (Text) @@ -45,6 +44,7 @@ import Database.SQLite.Simple.Internal (Field (..)) import Database.SQLite.Simple.Ok import Database.SQLite.Simple.ToField (ToField (..)) import Simplex.Chat.Types.Preferences +import Simplex.Chat.Types.Shared import Simplex.Chat.Types.Util import Simplex.FileTransfer.Description (FileDigest) import Simplex.Messaging.Agent.Protocol (ACommandTag (..), ACorrId, AParty (..), APartyCmdTag (..), ConnId, ConnectionMode (..), ConnectionRequestUri, InvitationId, RcvFileId, SAEntity (..), SndFileId, UserId) @@ -439,9 +439,13 @@ featureAllowed feature forWhom Contact {mergedPreferences} = let ContactUserPreference {enabled} = getContactUserPreference feature mergedPreferences in forWhom enabled -groupFeatureAllowed :: GroupFeatureI f => SGroupFeature f -> GroupInfo -> Bool +groupFeatureAllowed :: GroupFeatureNoRoleI f => SGroupFeature f -> GroupInfo -> Bool groupFeatureAllowed feature gInfo = groupFeatureAllowed' feature $ fullGroupPreferences gInfo +groupFeatureMemberAllowed :: GroupFeatureRoleI f => SGroupFeature f -> GroupMember -> GroupInfo -> Bool +groupFeatureMemberAllowed feature GroupMember {memberRole} = + groupFeatureMemberAllowed' feature memberRole . fullGroupPreferences + mergeUserChatPrefs :: User -> Contact -> FullPreferences mergeUserChatPrefs user ct = mergeUserChatPrefs' user (contactConnIncognito ct) (userPreferences ct) @@ -796,41 +800,6 @@ fromInvitedBy userCtId = \case IBContact ctId -> Just ctId IBUser -> Just userCtId -data GroupMemberRole - = GRObserver -- connects to all group members and receives all messages, can't send messages - | GRAuthor -- reserved, unused - | GRMember -- + can send messages to all group members - | GRAdmin -- + add/remove members, change member role (excl. Owners) - | GROwner -- + delete and change group information, add/remove/change roles for Owners - deriving (Eq, Show, Ord) - -instance FromField GroupMemberRole where fromField = fromBlobField_ strDecode - -instance ToField GroupMemberRole where toField = toField . strEncode - -instance StrEncoding GroupMemberRole where - strEncode = \case - GROwner -> "owner" - GRAdmin -> "admin" - GRMember -> "member" - GRAuthor -> "author" - GRObserver -> "observer" - strDecode = \case - "owner" -> Right GROwner - "admin" -> Right GRAdmin - "member" -> Right GRMember - "author" -> Right GRAuthor - "observer" -> Right GRObserver - r -> Left $ "bad GroupMemberRole " <> B.unpack r - strP = strDecode <$?> A.takeByteString - -instance FromJSON GroupMemberRole where - parseJSON = strParseJSON "GroupMemberRole" - -instance ToJSON GroupMemberRole where - toJSON = strToJSON - toEncoding = strToJEncoding - data GroupMemberSettings = GroupMemberSettings { showMessages :: Bool } diff --git a/src/Simplex/Chat/Types/Preferences.hs b/src/Simplex/Chat/Types/Preferences.hs index 2286ae8f40..4cf9f862d2 100644 --- a/src/Simplex/Chat/Types/Preferences.hs +++ b/src/Simplex/Chat/Types/Preferences.hs @@ -10,6 +10,7 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-} +{-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilyDependencies #-} @@ -31,6 +32,7 @@ import qualified Data.Text as T import Database.SQLite.Simple.FromField (FromField (..)) import Database.SQLite.Simple.ToField (ToField (..)) import GHC.Records.Compat +import Simplex.Chat.Types.Shared import Simplex.Chat.Types.Util import Simplex.Messaging.Encoding.String import Simplex.Messaging.Parsers (defaultJSON, dropPrefix, enumJSON, fromTextField_, sumTypeJSON) @@ -148,6 +150,7 @@ data GroupFeature | GFReactions | GFVoice | GFFiles + | GFSimplexLinks | GFHistory deriving (Show) @@ -158,14 +161,23 @@ data SGroupFeature (f :: GroupFeature) where SGFReactions :: SGroupFeature 'GFReactions SGFVoice :: SGroupFeature 'GFVoice SGFFiles :: SGroupFeature 'GFFiles + SGFSimplexLinks :: SGroupFeature 'GFSimplexLinks SGFHistory :: SGroupFeature 'GFHistory deriving instance Show (SGroupFeature f) data AGroupFeature = forall f. GroupFeatureI f => AGF (SGroupFeature f) +data AGroupFeatureNoRole = forall f. GroupFeatureNoRoleI f => AGFNR (SGroupFeature f) + +data AGroupFeatureRole = forall f. GroupFeatureRoleI f => AGFR (SGroupFeature f) + deriving instance Show AGroupFeature +deriving instance Show AGroupFeatureNoRole + +deriving instance Show AGroupFeatureRole + groupFeatureNameText :: GroupFeature -> Text groupFeatureNameText = \case GFTimedMessages -> "Disappearing messages" @@ -174,15 +186,21 @@ groupFeatureNameText = \case GFReactions -> "Message reactions" GFVoice -> "Voice messages" GFFiles -> "Files and media" + GFSimplexLinks -> "SimpleX links" GFHistory -> "Recent history" groupFeatureNameText' :: SGroupFeature f -> Text groupFeatureNameText' = groupFeatureNameText . toGroupFeature -groupFeatureAllowed' :: GroupFeatureI f => SGroupFeature f -> FullGroupPreferences -> Bool +groupFeatureAllowed' :: GroupFeatureNoRoleI f => SGroupFeature f -> FullGroupPreferences -> Bool groupFeatureAllowed' feature prefs = getField @"enable" (getGroupPreference feature prefs) == FEOn +groupFeatureMemberAllowed' :: GroupFeatureRoleI f => SGroupFeature f -> GroupMemberRole -> FullGroupPreferences -> Bool +groupFeatureMemberAllowed' feature role prefs = + let pref = getGroupPreference feature prefs + in getField @"enable" pref == FEOn && maybe True (role >=) (getField @"role" pref) + allGroupFeatures :: [AGroupFeature] allGroupFeatures = [ AGF SGFTimedMessages, @@ -191,17 +209,19 @@ allGroupFeatures = AGF SGFReactions, AGF SGFVoice, AGF SGFFiles, + AGF SGFSimplexLinks, AGF SGFHistory ] groupPrefSel :: SGroupFeature f -> GroupPreferences -> Maybe (GroupFeaturePreference f) -groupPrefSel f GroupPreferences {timedMessages, directMessages, fullDelete, reactions, voice, files, history} = case f of +groupPrefSel f GroupPreferences {timedMessages, directMessages, fullDelete, reactions, voice, files, simplexLinks, history} = case f of SGFTimedMessages -> timedMessages SGFDirectMessages -> directMessages SGFFullDelete -> fullDelete SGFReactions -> reactions SGFVoice -> voice SGFFiles -> files + SGFSimplexLinks -> simplexLinks SGFHistory -> history toGroupFeature :: SGroupFeature f -> GroupFeature @@ -212,6 +232,7 @@ toGroupFeature = \case SGFReactions -> GFReactions SGFVoice -> GFVoice SGFFiles -> GFFiles + SGFSimplexLinks -> GFSimplexLinks SGFHistory -> GFHistory class GroupPreferenceI p where @@ -224,13 +245,14 @@ instance GroupPreferenceI (Maybe GroupPreferences) where getGroupPreference pt prefs = fromMaybe (getGroupPreference pt defaultGroupPrefs) (groupPrefSel pt =<< prefs) instance GroupPreferenceI FullGroupPreferences where - getGroupPreference f FullGroupPreferences {timedMessages, directMessages, fullDelete, reactions, voice, files, history} = case f of + getGroupPreference f FullGroupPreferences {timedMessages, directMessages, fullDelete, reactions, voice, files, simplexLinks, history} = case f of SGFTimedMessages -> timedMessages SGFDirectMessages -> directMessages SGFFullDelete -> fullDelete SGFReactions -> reactions SGFVoice -> voice SGFFiles -> files + SGFSimplexLinks -> simplexLinks SGFHistory -> history {-# INLINE getGroupPreference #-} @@ -242,17 +264,25 @@ data GroupPreferences = GroupPreferences reactions :: Maybe ReactionsGroupPreference, voice :: Maybe VoiceGroupPreference, files :: Maybe FilesGroupPreference, + simplexLinks :: Maybe SimplexLinksGroupPreference, history :: Maybe HistoryGroupPreference } deriving (Eq, Show) -setGroupPreference :: forall f. GroupFeatureI f => SGroupFeature f -> GroupFeatureEnabled -> Maybe GroupPreferences -> GroupPreferences +setGroupPreference :: forall f. GroupFeatureNoRoleI f => SGroupFeature f -> GroupFeatureEnabled -> Maybe GroupPreferences -> GroupPreferences setGroupPreference f enable prefs_ = setGroupPreference_ f pref prefs where prefs = mergeGroupPreferences prefs_ pref :: GroupFeaturePreference f pref = setField @"enable" (getGroupPreference f prefs) enable +setGroupPreferenceRole :: forall f. GroupFeatureRoleI f => SGroupFeature f -> GroupFeatureEnabled -> Maybe GroupMemberRole -> Maybe GroupPreferences -> GroupPreferences +setGroupPreferenceRole f enable role prefs_ = setGroupPreference_ f pref prefs + where + prefs = mergeGroupPreferences prefs_ + pref :: GroupFeaturePreference f + pref = setField @"role" (setField @"enable" (getGroupPreference f prefs) enable) role + setGroupPreference' :: SGroupFeature f -> GroupFeaturePreference f -> Maybe GroupPreferences -> GroupPreferences setGroupPreference' f pref prefs_ = setGroupPreference_ f pref prefs where @@ -267,6 +297,7 @@ setGroupPreference_ f pref prefs = SGFReactions -> prefs {reactions = pref} SGFVoice -> prefs {voice = pref} SGFFiles -> prefs {files = pref} + SGFSimplexLinks -> prefs {simplexLinks = pref} SGFHistory -> prefs {history = pref} setGroupTimedMessagesPreference :: TimedMessagesGroupPreference -> Maybe GroupPreferences -> GroupPreferences @@ -295,6 +326,7 @@ data FullGroupPreferences = FullGroupPreferences reactions :: ReactionsGroupPreference, voice :: VoiceGroupPreference, files :: FilesGroupPreference, + simplexLinks :: SimplexLinksGroupPreference, history :: HistoryGroupPreference } deriving (Eq, Show) @@ -346,16 +378,17 @@ defaultGroupPrefs :: FullGroupPreferences defaultGroupPrefs = FullGroupPreferences { timedMessages = TimedMessagesGroupPreference {enable = FEOff, ttl = Just 86400}, - directMessages = DirectMessagesGroupPreference {enable = FEOff}, + directMessages = DirectMessagesGroupPreference {enable = FEOff, role = Nothing}, fullDelete = FullDeleteGroupPreference {enable = FEOff}, reactions = ReactionsGroupPreference {enable = FEOn}, - voice = VoiceGroupPreference {enable = FEOn}, - files = FilesGroupPreference {enable = FEOn}, + voice = VoiceGroupPreference {enable = FEOn, role = Nothing}, + files = FilesGroupPreference {enable = FEOn, role = Nothing}, + simplexLinks = SimplexLinksGroupPreference {enable = FEOn, role = Nothing}, history = HistoryGroupPreference {enable = FEOff} } emptyGroupPrefs :: GroupPreferences -emptyGroupPrefs = GroupPreferences Nothing Nothing Nothing Nothing Nothing Nothing Nothing +emptyGroupPrefs = GroupPreferences Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing data TimedMessagesPreference = TimedMessagesPreference { allow :: FeatureAllowed, @@ -431,7 +464,7 @@ data TimedMessagesGroupPreference = TimedMessagesGroupPreference deriving (Eq, Show) data DirectMessagesGroupPreference = DirectMessagesGroupPreference - {enable :: GroupFeatureEnabled} + {enable :: GroupFeatureEnabled, role :: Maybe GroupMemberRole} deriving (Eq, Show) data FullDeleteGroupPreference = FullDeleteGroupPreference @@ -443,11 +476,15 @@ data ReactionsGroupPreference = ReactionsGroupPreference deriving (Eq, Show) data VoiceGroupPreference = VoiceGroupPreference - {enable :: GroupFeatureEnabled} + {enable :: GroupFeatureEnabled, role :: Maybe GroupMemberRole} deriving (Eq, Show) data FilesGroupPreference = FilesGroupPreference - {enable :: GroupFeatureEnabled} + {enable :: GroupFeatureEnabled, role :: Maybe GroupMemberRole} + deriving (Eq, Show) + +data SimplexLinksGroupPreference = SimplexLinksGroupPreference + {enable :: GroupFeatureEnabled, role :: Maybe GroupMemberRole} deriving (Eq, Show) data HistoryGroupPreference = HistoryGroupPreference @@ -458,6 +495,11 @@ class (Eq (GroupFeaturePreference f), HasField "enable" (GroupFeaturePreference type GroupFeaturePreference (f :: GroupFeature) = p | p -> f sGroupFeature :: SGroupFeature f groupPrefParam :: GroupFeaturePreference f -> Maybe Int + groupPrefRole :: GroupFeaturePreference f -> Maybe GroupMemberRole + +class GroupFeatureI f => GroupFeatureNoRoleI f + +class (GroupFeatureI f, HasField "role" (GroupFeaturePreference f) (Maybe GroupMemberRole)) => GroupFeatureRoleI f instance HasField "enable" GroupPreference GroupFeatureEnabled where hasField p@GroupPreference {enable} = (\e -> p {enable = e}, enable) @@ -480,6 +522,9 @@ instance HasField "enable" VoiceGroupPreference GroupFeatureEnabled where instance HasField "enable" FilesGroupPreference GroupFeatureEnabled where hasField p@FilesGroupPreference {enable} = (\e -> p {enable = e}, enable) +instance HasField "enable" SimplexLinksGroupPreference GroupFeatureEnabled where + hasField p@SimplexLinksGroupPreference {enable} = (\e -> p {enable = e}, enable) + instance HasField "enable" HistoryGroupPreference GroupFeatureEnabled where hasField p@HistoryGroupPreference {enable} = (\e -> p {enable = e}, enable) @@ -487,42 +532,84 @@ instance GroupFeatureI 'GFTimedMessages where type GroupFeaturePreference 'GFTimedMessages = TimedMessagesGroupPreference sGroupFeature = SGFTimedMessages groupPrefParam TimedMessagesGroupPreference {ttl} = ttl + groupPrefRole _ = Nothing instance GroupFeatureI 'GFDirectMessages where type GroupFeaturePreference 'GFDirectMessages = DirectMessagesGroupPreference sGroupFeature = SGFDirectMessages groupPrefParam _ = Nothing + groupPrefRole DirectMessagesGroupPreference {role} = role instance GroupFeatureI 'GFFullDelete where type GroupFeaturePreference 'GFFullDelete = FullDeleteGroupPreference sGroupFeature = SGFFullDelete groupPrefParam _ = Nothing + groupPrefRole _ = Nothing instance GroupFeatureI 'GFReactions where type GroupFeaturePreference 'GFReactions = ReactionsGroupPreference sGroupFeature = SGFReactions groupPrefParam _ = Nothing + groupPrefRole _ = Nothing instance GroupFeatureI 'GFVoice where type GroupFeaturePreference 'GFVoice = VoiceGroupPreference sGroupFeature = SGFVoice groupPrefParam _ = Nothing + groupPrefRole VoiceGroupPreference {role} = role instance GroupFeatureI 'GFFiles where type GroupFeaturePreference 'GFFiles = FilesGroupPreference sGroupFeature = SGFFiles groupPrefParam _ = Nothing + groupPrefRole FilesGroupPreference {role} = role + +instance GroupFeatureI 'GFSimplexLinks where + type GroupFeaturePreference 'GFSimplexLinks = SimplexLinksGroupPreference + sGroupFeature = SGFSimplexLinks + groupPrefParam _ = Nothing + groupPrefRole SimplexLinksGroupPreference {role} = role instance GroupFeatureI 'GFHistory where type GroupFeaturePreference 'GFHistory = HistoryGroupPreference sGroupFeature = SGFHistory groupPrefParam _ = Nothing + groupPrefRole _ = Nothing -groupPrefStateText :: HasField "enable" p GroupFeatureEnabled => GroupFeature -> p -> Maybe Int -> Text -groupPrefStateText feature pref param = +instance GroupFeatureNoRoleI 'GFTimedMessages + +instance GroupFeatureNoRoleI 'GFFullDelete + +instance GroupFeatureNoRoleI 'GFReactions + +instance GroupFeatureNoRoleI 'GFHistory + +instance HasField "role" DirectMessagesGroupPreference (Maybe GroupMemberRole) where + hasField p@DirectMessagesGroupPreference {role} = (\r -> p {role = r}, role) + +instance HasField "role" VoiceGroupPreference (Maybe GroupMemberRole) where + hasField p@VoiceGroupPreference {role} = (\r -> p {role = r}, role) + +instance HasField "role" FilesGroupPreference (Maybe GroupMemberRole) where + hasField p@FilesGroupPreference {role} = (\r -> p {role = r}, role) + +instance HasField "role" SimplexLinksGroupPreference (Maybe GroupMemberRole) where + hasField p@SimplexLinksGroupPreference {role} = (\r -> p {role = r}, role) + +instance GroupFeatureRoleI 'GFDirectMessages + +instance GroupFeatureRoleI 'GFVoice + +instance GroupFeatureRoleI 'GFFiles + +instance GroupFeatureRoleI 'GFSimplexLinks + +groupPrefStateText :: HasField "enable" p GroupFeatureEnabled => GroupFeature -> p -> Maybe Int -> Maybe GroupMemberRole -> Text +groupPrefStateText feature pref param role = let enabled = getField @"enable" pref paramText = if enabled == FEOn then groupParamText_ feature param else "" - in groupFeatureNameText feature <> ": " <> safeDecodeUtf8 (strEncode enabled) <> paramText + roleText = maybe "" (\r -> " for " <> safeDecodeUtf8 (strEncode r) <> "s") role + in groupFeatureNameText feature <> ": " <> safeDecodeUtf8 (strEncode enabled) <> paramText <> roleText groupParamText_ :: GroupFeature -> Maybe Int -> Text groupParamText_ feature param = case feature of @@ -532,7 +619,7 @@ groupParamText_ feature param = case feature of groupPreferenceText :: forall f. GroupFeatureI f => GroupFeaturePreference f -> Text groupPreferenceText pref = let feature = toGroupFeature $ sGroupFeature @f - in groupPrefStateText feature pref $ groupPrefParam pref + in groupPrefStateText feature pref (groupPrefParam pref) (groupPrefRole pref) timedTTLText :: Int -> Text timedTTLText 0 = "0 sec" @@ -602,7 +689,7 @@ instance StrEncoding GroupFeatureEnabled where "on" -> Right FEOn "off" -> Right FEOff r -> Left $ "bad GroupFeatureEnabled " <> B.unpack r - strP = strDecode <$?> A.takeByteString + strP = strDecode <$?> A.takeTill (== ' ') instance FromJSON GroupFeatureEnabled where parseJSON = strParseJSON "GroupFeatureEnabled" @@ -611,11 +698,13 @@ instance ToJSON GroupFeatureEnabled where toJSON = strToJSON toEncoding = strToJEncoding -groupFeatureState :: GroupFeatureI f => GroupFeaturePreference f -> (GroupFeatureEnabled, Maybe Int) +groupFeatureState :: GroupFeatureI f => GroupFeaturePreference f -> (GroupFeatureEnabled, Maybe Int, Maybe GroupMemberRole) groupFeatureState p = let enable = getField @"enable" p - param = if enable == FEOn then groupPrefParam p else Nothing - in (enable, param) + (param, role) + | enable == FEOn = (groupPrefParam p, groupPrefRole p) + | otherwise = (Nothing, Nothing) + in (enable, param, role) mergePreferences :: Maybe Preferences -> Maybe Preferences -> FullPreferences mergePreferences contactPrefs userPreferences = @@ -641,6 +730,7 @@ mergeGroupPreferences groupPreferences = reactions = pref SGFReactions, voice = pref SGFVoice, files = pref SGFFiles, + simplexLinks = pref SGFSimplexLinks, history = pref SGFHistory } where @@ -656,6 +746,7 @@ toGroupPreferences groupPreferences = reactions = pref SGFReactions, voice = pref SGFVoice, files = pref SGFFiles, + simplexLinks = pref SGFSimplexLinks, history = pref SGFHistory } where @@ -762,6 +853,8 @@ $(J.deriveJSON defaultJSON ''VoiceGroupPreference) $(J.deriveJSON defaultJSON ''FilesGroupPreference) +$(J.deriveJSON defaultJSON ''SimplexLinksGroupPreference) + $(J.deriveJSON defaultJSON ''HistoryGroupPreference) $(J.deriveJSON defaultJSON ''GroupPreferences) diff --git a/src/Simplex/Chat/Types/Shared.hs b/src/Simplex/Chat/Types/Shared.hs new file mode 100644 index 0000000000..f44457160f --- /dev/null +++ b/src/Simplex/Chat/Types/Shared.hs @@ -0,0 +1,48 @@ +{-# LANGUAGE LambdaCase #-} +{-# LANGUAGE OverloadedStrings #-} + +module Simplex.Chat.Types.Shared where + +import Data.Aeson (FromJSON (..), ToJSON (..)) +import qualified Data.Attoparsec.ByteString.Char8 as A +import qualified Data.ByteString.Char8 as B +import Database.SQLite.Simple.FromField (FromField (..)) +import Database.SQLite.Simple.ToField (ToField (..)) +import Simplex.Chat.Types.Util +import Simplex.Messaging.Encoding.String +import Simplex.Messaging.Util ((<$?>)) + +data GroupMemberRole + = GRObserver -- connects to all group members and receives all messages, can't send messages + | GRAuthor -- reserved, unused + | GRMember -- + can send messages to all group members + | GRAdmin -- + add/remove members, change member role (excl. Owners) + | GROwner -- + delete and change group information, add/remove/change roles for Owners + deriving (Eq, Show, Ord) + +instance FromField GroupMemberRole where fromField = fromBlobField_ strDecode + +instance ToField GroupMemberRole where toField = toField . strEncode + +instance StrEncoding GroupMemberRole where + strEncode = \case + GROwner -> "owner" + GRAdmin -> "admin" + GRMember -> "member" + GRAuthor -> "author" + GRObserver -> "observer" + strDecode = \case + "owner" -> Right GROwner + "admin" -> Right GRAdmin + "member" -> Right GRMember + "author" -> Right GRAuthor + "observer" -> Right GRObserver + r -> Left $ "bad GroupMemberRole " <> B.unpack r + strP = strDecode <$?> A.takeByteString + +instance FromJSON GroupMemberRole where + parseJSON = strParseJSON "GroupMemberRole" + +instance ToJSON GroupMemberRole where + toJSON = strToJSON + toEncoding = strToJEncoding diff --git a/src/Simplex/Chat/View.hs b/src/Simplex/Chat/View.hs index 550fe97b18..55e0078d0d 100644 --- a/src/Simplex/Chat/View.hs +++ b/src/Simplex/Chat/View.hs @@ -49,6 +49,7 @@ import Simplex.Chat.Store (AutoAccept (..), StoreError (..), UserContactLink (.. import Simplex.Chat.Styled import Simplex.Chat.Types import Simplex.Chat.Types.Preferences +import Simplex.Chat.Types.Shared import qualified Simplex.FileTransfer.Transport as XFTPTransport import Simplex.Messaging.Agent.Client (ProtocolTestFailure (..), ProtocolTestStep (..), SubscriptionsInfo (..)) import Simplex.Messaging.Agent.Env.SQLite (NetworkConfig (..)) diff --git a/tests/Bots/DirectoryTests.hs b/tests/Bots/DirectoryTests.hs index b78d36f489..fbabccfb54 100644 --- a/tests/Bots/DirectoryTests.hs +++ b/tests/Bots/DirectoryTests.hs @@ -19,7 +19,8 @@ import Simplex.Chat.Bot.KnownContacts import Simplex.Chat.Controller (ChatConfig (..)) import Simplex.Chat.Core import Simplex.Chat.Options (CoreChatOpts (..)) -import Simplex.Chat.Types (GroupMemberRole (..), Profile (..)) +import Simplex.Chat.Types (Profile (..)) +import Simplex.Chat.Types.Shared (GroupMemberRole (..)) import System.FilePath (()) import Test.Hspec hiding (it) diff --git a/tests/ChatTests/Groups.hs b/tests/ChatTests/Groups.hs index 77bac11145..a7a646c17b 100644 --- a/tests/ChatTests/Groups.hs +++ b/tests/ChatTests/Groups.hs @@ -15,7 +15,8 @@ import qualified Data.Text as T import Simplex.Chat.Controller (ChatConfig (..)) import Simplex.Chat.Protocol (supportedChatVRange) import Simplex.Chat.Store (agentStoreFile, chatStoreFile) -import Simplex.Chat.Types (GroupMemberRole (..), VersionRangeChat) +import Simplex.Chat.Types (VersionRangeChat) +import Simplex.Chat.Types.Shared (GroupMemberRole (..)) import qualified Simplex.Messaging.Agent.Store.SQLite.DB as DB import Simplex.Messaging.Crypto.Ratchet (pattern PQSupportOff) import System.Directory (copyFile) @@ -1509,6 +1510,7 @@ testGroupDescription = testChat4 aliceProfile bobProfile cathProfile danProfile alice <## "Message reactions: on" alice <## "Voice messages: on" alice <## "Files and media: on" + alice <## "SimpleX links: on" alice <## "Recent history: on" bobAddedDan :: HasCallStack => TestCC -> IO () bobAddedDan cc = do diff --git a/tests/ChatTests/Profiles.hs b/tests/ChatTests/Profiles.hs index 8a9191c988..a6cc491456 100644 --- a/tests/ChatTests/Profiles.hs +++ b/tests/ChatTests/Profiles.hs @@ -13,7 +13,8 @@ import qualified Data.Attoparsec.ByteString.Char8 as A import qualified Data.ByteString.Char8 as B import qualified Data.Text as T import Simplex.Chat.Store.Shared (createContact) -import Simplex.Chat.Types (ConnStatus (..), GroupMemberRole (..), Profile (..)) +import Simplex.Chat.Types (ConnStatus (..), Profile (..)) +import Simplex.Chat.Types.Shared (GroupMemberRole (..)) import Simplex.Messaging.Encoding.String (StrEncoding (..)) import System.Directory (copyFile, createDirectoryIfMissing) import Test.Hspec hiding (it) @@ -68,6 +69,10 @@ chatProfileTests = do it "enable timed messages in group" testEnableTimedMessagesGroup xit'' "timed messages enabled globally, contact turns on" testTimedMessagesEnabledGlobally it "update multiple user preferences for multiple contacts" testUpdateMultipleUserPrefs + describe "group preferences for specific member role" $ do + it "direct messages" testGroupPrefsDirectForRole + it "files & media" testGroupPrefsFilesForRole + it "SimpleX links" testGroupPrefsSimplexLinksForRole testUpdateProfile :: HasCallStack => FilePath -> IO () testUpdateProfile = @@ -1903,3 +1908,122 @@ testUpdateMultipleUserPrefs = testChat3 aliceProfile bobProfile cathProfile $ alice #$> ("/_get chat @2 count=100", chat, chatFeatures <> [(1, "hi bob"), (1, "Full deletion: enabled for contact"), (1, "Message reactions: off")]) alice #$> ("/_get chat @3 count=100", chat, chatFeatures <> [(1, "hi cath"), (1, "Full deletion: enabled for contact"), (1, "Message reactions: off")]) + +testGroupPrefsDirectForRole :: HasCallStack => FilePath -> IO () +testGroupPrefsDirectForRole = testChat4 aliceProfile bobProfile cathProfile danProfile $ + \alice bob cath dan -> do + createGroup3 "team" alice bob cath + threadDelay 1000000 + alice ##> "/set direct #team on owner" + alice <## "updated group preferences:" + alice <## "Direct messages: on for owners" + directForOwners bob + directForOwners cath + threadDelay 1000000 + bob ##> "@cath hello again" + bob <## "bad chat command: direct messages not allowed" + (cath "/j #team" + concurrentlyN_ + [ cath <## "#team: dan joined the group", + do + dan <## "#team: you joined the group" + dan + <### [ "#team: member alice (Alice) is connected", + "#team: member bob (Bob) is connected" + ], + do + alice <## "#team: cath added dan (Daniel) to the group (connecting...)" + alice <## "#team: new member dan is connected", + do + bob <## "#team: cath added dan (Daniel) to the group (connecting...)" + bob <## "#team: new member dan is connected" + ] + -- dan cannot send direct messages to alice (owner) + dan ##> "@alice hello alice" + dan <## "bad chat command: direct messages not allowed" + (alice hello dan" + dan <## "alice (Alice): contact is connected" + -- and now dan can too + dan #> "@alice hi alice" + alice <# "dan> hi alice" + where + directForOwners :: HasCallStack => TestCC -> IO () + directForOwners cc = do + cc <## "alice updated group #team:" + cc <## "updated group preferences:" + cc <## "Direct messages: on for owners" + +testGroupPrefsFilesForRole :: HasCallStack => FilePath -> IO () +testGroupPrefsFilesForRole = testChat3 aliceProfile bobProfile cathProfile $ + \alice bob cath -> withXFTPServer $ do + alice #$> ("/_files_folder ./tests/tmp/alice", id, "ok") + bob #$> ("/_files_folder ./tests/tmp/bob", id, "ok") + createDirectoryIfMissing True "./tests/tmp/alice" + createDirectoryIfMissing True "./tests/tmp/bob" + copyFile "./tests/fixtures/test.txt" "./tests/tmp/alice/test1.txt" + copyFile "./tests/fixtures/test.txt" "./tests/tmp/bob/test2.txt" + createGroup3 "team" alice bob cath + threadDelay 1000000 + alice ##> "/set files #team on owner" + alice <## "updated group preferences:" + alice <## "Files and media: on for owners" + filesForOwners bob + filesForOwners cath + threadDelay 1000000 + bob ##> "/f #team test2.txt" + bob <## "bad chat command: feature not allowed Files and media" + (alice "/f #team test1.txt" + alice <## "use /fc 1 to cancel sending" + alice <## "completed uploading file 1 (test1.txt) for #team" + bob <# "#team alice> sends file test1.txt (11 bytes / 11 bytes)" + bob <## "use /fr 1 [/ | ] to receive it" + cath <# "#team alice> sends file test1.txt (11 bytes / 11 bytes)" + cath <## "use /fr 1 [/ | ] to receive it" + where + filesForOwners :: HasCallStack => TestCC -> IO () + filesForOwners cc = do + cc <## "alice updated group #team:" + cc <## "updated group preferences:" + cc <## "Files and media: on for owners" + +testGroupPrefsSimplexLinksForRole :: HasCallStack => FilePath -> IO () +testGroupPrefsSimplexLinksForRole = testChat3 aliceProfile bobProfile cathProfile $ + \alice bob cath -> withXFTPServer $ do + createGroup3 "team" alice bob cath + threadDelay 1000000 + alice ##> "/set links #team on owner" + alice <## "updated group preferences:" + alice <## "SimpleX links: on for owners" + linksForOwners bob + linksForOwners cath + threadDelay 1000000 + bob ##> "/c" + inv <- getInvitation bob + bob ##> ("#team " <> inv) + bob <## "bad chat command: feature not allowed SimpleX links" + (alice ("#team " <> inv) + bob <# ("#team alice> " <> inv) + cath <# ("#team alice> " <> inv) + where + linksForOwners :: HasCallStack => TestCC -> IO () + linksForOwners cc = do + cc <## "alice updated group #team:" + cc <## "updated group preferences:" + cc <## "SimpleX links: on for owners" diff --git a/tests/ChatTests/Utils.hs b/tests/ChatTests/Utils.hs index 3b0748e7d0..98227fcd0c 100644 --- a/tests/ChatTests/Utils.hs +++ b/tests/ChatTests/Utils.hs @@ -30,6 +30,7 @@ import Simplex.Chat.Store.NoteFolders (createNoteFolder) import Simplex.Chat.Store.Profiles (getUserContactProfiles) import Simplex.Chat.Types import Simplex.Chat.Types.Preferences +import Simplex.Chat.Types.Shared import Simplex.FileTransfer.Client.Main (xftpClientCLI) import Simplex.Messaging.Agent.Store.SQLite (maybeFirstRow, withTransaction) import qualified Simplex.Messaging.Agent.Store.SQLite.DB as DB @@ -315,6 +316,7 @@ groupFeatures'' = ((0, "Message reactions: on"), Nothing, Nothing), ((0, "Voice messages: on"), Nothing, Nothing), ((0, "Files and media: on"), Nothing, Nothing), + ((0, "SimpleX links: on"), Nothing, Nothing), ((0, "Recent history: on"), Nothing, Nothing) ] diff --git a/tests/ProtocolTests.hs b/tests/ProtocolTests.hs index 082af825e5..18fb677be2 100644 --- a/tests/ProtocolTests.hs +++ b/tests/ProtocolTests.hs @@ -12,6 +12,7 @@ import Data.Time.Clock.System (SystemTime (..), systemToUTCTime) import Simplex.Chat.Protocol import Simplex.Chat.Types import Simplex.Chat.Types.Preferences +import Simplex.Chat.Types.Shared import Simplex.Messaging.Agent.Protocol import qualified Simplex.Messaging.Crypto as C import Simplex.Messaging.Crypto.Ratchet @@ -99,7 +100,7 @@ testChatPreferences :: Maybe Preferences testChatPreferences = Just Preferences {voice = Just VoicePreference {allow = FAYes}, fullDelete = Nothing, timedMessages = Nothing, calls = Nothing, reactions = Just ReactionsPreference {allow = FAYes}} testGroupPreferences :: Maybe GroupPreferences -testGroupPreferences = Just GroupPreferences {timedMessages = Nothing, directMessages = Nothing, reactions = Just ReactionsGroupPreference {enable = FEOn}, voice = Just VoiceGroupPreference {enable = FEOn}, files = Nothing, fullDelete = Nothing, history = Nothing} +testGroupPreferences = Just GroupPreferences {timedMessages = Nothing, directMessages = Nothing, reactions = Just ReactionsGroupPreference {enable = FEOn}, voice = Just VoiceGroupPreference {enable = FEOn, role = Nothing}, files = Nothing, fullDelete = Nothing, simplexLinks = Nothing, history = Nothing} testProfile :: Profile testProfile = Profile {displayName = "alice", fullName = "Alice", image = Just (ImageData "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII="), contactLink = Nothing, preferences = testChatPreferences} From 0d7a32877f77367ab5f57d43bc8b3ede0a9c2c44 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Fri, 5 Apr 2024 12:24:34 +0100 Subject: [PATCH 09/60] ci: build armv7a with 8.10.7 in the main branches (master, stable) (#3733) Co-authored-by: Moritz Angermann --- flake.nix | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/flake.nix b/flake.nix index 91cf43d0fe..748b5a4f2d 100644 --- a/flake.nix +++ b/flake.nix @@ -29,8 +29,8 @@ }; in # `appendOverlays` with a singleton is identical to `extend`. let pkgs = haskellNix.legacyPackages.${system}.appendOverlays [android26]; in - let drv' = { extra-modules, pkgs', ... }: pkgs'.haskell-nix.project { - compiler-nix-name = "ghc963"; + let drv' = { extra-modules, pkgs', compiler-nix-name, ... }: pkgs'.haskell-nix.project { + inherit compiler-nix-name; index-state = "2023-12-12T00:00:00Z"; # We need this, to specify we want the cabal project. # If the stack.yaml was dropped, this would not be necessary. @@ -51,7 +51,7 @@ })] ++ extra-modules; }; in # by defualt we don't need to pass extra-modules. - let drv = pkgs': drv' { extra-modules = []; inherit pkgs'; }; in + let drv = pkgs': drv' { extra-modules = []; inherit pkgs'; compiler-nix-name = "ghc964"; }; in # This will package up all *.a in $out into a pkg.zip that can # be downloaded from hydra. let withHydraLibPkg = pkg: pkg.overrideAttrs (old: { @@ -262,7 +262,7 @@ # STATIC aarch64-linux "${pkgs.pkgsCross.aarch64-multiplatform-musl.hostPlatform.system}-static:exe:simplex-chat" = (drv pkgs.pkgsCross.aarch64-multiplatform-musl).simplex-chat.components.exes.simplex-chat; - "armv7a-android:lib:support" = (drv android32Pkgs).android-support.components.library.override (p: { + "armv7a-android:lib:support" = (drv' { extra-modules = []; pkgs' = android32Pkgs; compiler-nix-name = "ghc8107"; } ).android-support.components.library.override (p: { smallAddressSpace = true; # we won't want -dyamic (see aarch64-android:lib:simplex-chat) enableShared = false; @@ -325,6 +325,7 @@ ''; }); "armv7a-android:lib:simplex-chat" = (drv' { + compiler-nix-name = "ghc8107"; pkgs' = android32Pkgs; extra-modules = [{ packages.text.flags.simdutf = false; @@ -340,7 +341,7 @@ ]; # 32 bit patches packages.basement.patches = [ - ./scripts/nix/basement-pr-573.patch + # ./scripts/nix/basement-pr-573.patch ]; packages.memory.patches = [ ./scripts/nix/memory-pr-99.patch @@ -433,6 +434,7 @@ ''; }); "aarch64-android:lib:simplex-chat" = (drv' { + compiler-nix-name = "ghc964"; pkgs' = androidPkgs; extra-modules = [{ packages.text.flags.simdutf = false; From 6133993cfe56d8c8e9347d68cd8ce73030566c39 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Fri, 5 Apr 2024 21:29:41 +0700 Subject: [PATCH 10/60] android, desktop: fix build error related to JVM version (#3995) --- apps/multiplatform/android/build.gradle.kts | 5 ----- apps/multiplatform/build.gradle.kts | 24 +++++++++++++++++++++ apps/multiplatform/common/build.gradle.kts | 4 ---- apps/multiplatform/gradle.properties | 1 + 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/apps/multiplatform/android/build.gradle.kts b/apps/multiplatform/android/build.gradle.kts index e89abc5d41..0a8b5ec91a 100644 --- a/apps/multiplatform/android/build.gradle.kts +++ b/apps/multiplatform/android/build.gradle.kts @@ -48,12 +48,7 @@ android { proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") } } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 - } kotlinOptions { - jvmTarget = "11" freeCompilerArgs += "-opt-in=kotlinx.coroutines.DelicateCoroutinesApi" freeCompilerArgs += "-opt-in=androidx.compose.foundation.ExperimentalFoundationApi" freeCompilerArgs += "-opt-in=androidx.compose.ui.text.ExperimentalTextApi" diff --git a/apps/multiplatform/build.gradle.kts b/apps/multiplatform/build.gradle.kts index 9c72456d98..a0cd35b3ca 100644 --- a/apps/multiplatform/build.gradle.kts +++ b/apps/multiplatform/build.gradle.kts @@ -83,6 +83,30 @@ plugins { id("org.jetbrains.kotlin.plugin.serialization") apply false } +// https://raymondctc.medium.com/configuring-your-sourcecompatibility-targetcompatibility-and-kotlinoptions-jvmtarget-all-at-once-66bf2198145f +val jvmVersion: Provider = providers.gradleProperty("kotlin.jvm.target") + +configure(subprojects) { + // Apply compileOptions to subprojects + plugins.withType().configureEach { + extensions.findByType()?.apply { + jvmVersion.map { JavaVersion.toVersion(it) }.orNull?.let { + compileOptions { + sourceCompatibility = it + targetCompatibility = it + } + } + } + } + + // Apply kotlinOptions.jvmTarget to subprojects + tasks.withType().configureEach { + kotlinOptions { + if (jvmVersion.isPresent) jvmTarget = jvmVersion.get() + } + } +} + tasks.register("clean", Delete::class) { delete(rootProject.buildDir) } diff --git a/apps/multiplatform/common/build.gradle.kts b/apps/multiplatform/common/build.gradle.kts index 9a7b7fb2e3..42e4ac2591 100644 --- a/apps/multiplatform/common/build.gradle.kts +++ b/apps/multiplatform/common/build.gradle.kts @@ -117,10 +117,6 @@ android { } testOptions.targetSdk = 33 lint.targetSdk = 33 - compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 - } val isAndroid = gradle.startParameter.taskNames.find { val lower = it.lowercase() lower.contains("release") || lower.startsWith("assemble") || lower.startsWith("install") diff --git a/apps/multiplatform/gradle.properties b/apps/multiplatform/gradle.properties index fbbab0ffab..9918dadee1 100644 --- a/apps/multiplatform/gradle.properties +++ b/apps/multiplatform/gradle.properties @@ -24,6 +24,7 @@ android.nonTransitiveRClass=true # Automatically convert third-party libraries to use AndroidX android.enableJetifier=true kotlin.mpp.androidSourceSetLayoutVersion=2 +kotlin.jvm.target=11 android.version_name=5.6.1 android.version_code=193 From 2968cd046079b5c92224d764e387ca5f1b8be54d Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Fri, 5 Apr 2024 16:46:37 +0100 Subject: [PATCH 11/60] rfc: protocol extensions for channels/super-peers (#3980) --- docs/rfcs/2024-04-01-super-peers-2.md | 262 ++++++++++++++++++++++++++ 1 file changed, 262 insertions(+) create mode 100644 docs/rfcs/2024-04-01-super-peers-2.md diff --git a/docs/rfcs/2024-04-01-super-peers-2.md b/docs/rfcs/2024-04-01-super-peers-2.md new file mode 100644 index 0000000000..1ebd72bc41 --- /dev/null +++ b/docs/rfcs/2024-04-01-super-peers-2.md @@ -0,0 +1,262 @@ +# Large public grups / channels + +This document describes specific design elements for the MVP of [the groups based on super-peers](./2024-03-14-super-peers.md). + +## Super-peer members + +There are two possible design approaches for super-peer members: + +1. Separate non-participating members that can only be added as a super-peers and do not have their own roles in the group, can't send their own messages or administer the group. + +2. Super-peer being a function of any member, irrespective of their role. + +While approach 1 can be simpler, it has its downsides: +- more complex migration of the existing groups - e.g., directory service cannot become a super-peer while remaining group admin (or moderator, if we add a new role). +- less usable clients - users can have desktop clients with good internet connectivity and sufficient computing resources to effectively host several medium size groups, even with SQLite database. +- it makes super-peers more like servers, being both unusable as clients and also requiring larger concurrency, and therefore increasing centralization. + +Therefore, the approach 2 looks more attractive, when super-peers must have some role in the group, and the super peers that cannot send messages will have observer role. + +As a side note, it also implies that it is beneficial to see the permission to moderate messages not as a role somewhere between Member and Admin, but as a separate privilege that admins and owners have by default for the messages from the members up to their role, but in general it's a separate member profile setting that allows to moderate messages up to a certain role. That approach would help automatic moderation as well, when moderators may be allowed to moderate messages of admins, without being able to remove members. + +Proposed protocol modifications: + +```haskell +-- this type is used in XGrpMemNew, XGrpMemIntro and XGrpMemFwd for member introductions +data MemberInfo = MemberInfo + { memberId :: MemberId, + memberRole :: GroupMemberRole, + rank :: Maybe Word8, -- new field, 0 for usual members, 1 for super-peers, allows to build additional distribution hierarhies if needed. + perms :: Maybe MemberPermissions, -- new field + v :: Maybe ChatVersionRange, + profile :: Profile + } + +-- this type is used in XGrpInv (in GroupInvitation) and XGrpLinkInv (in GroupLinkInvitation) +-- to invite members to the group +data MemberIdRole = MemberIdRole + { memberId :: MemberId, + memberRole :: GroupMemberRole, + rank :: Maybe Word8, -- new field + perms :: Maybe MemberPermissions -- new field + } + +-- new type +data MemberPermissions = MemberPermissions + { moderate :: MemberPermissionTarget -- could be extended to array in the future + } + +-- new type +data MemberPermissionTarget = MemberPermissionTarget + { maxRole :: Maybe GroupMemberRole -- if absent, can moderate all messages + } +``` + +For backwards compatibility, `admin` role implies `{moderate: {maxRole: admin}}` permission and `owner` - `{moderate: {maxRole: owner}}`, which probably can be overridden with `{moderate: {maxRole: observer}}`. + +It is also proposed to migrate `memberId` and `memberRole` to `id` and `role` in the parser (in a forward/backward compatible way), without changing serializers. + +## Group routing mode + +Irrespective of the presense of super peers in the group, the group itself has to be switched to super-peers routing at some point via a group profile update. + +```haskell +data GroupProfile = GroupProfile + { displayName :: GroupName, + fullName :: Text, + description :: Maybe Text, + image :: Maybe ImageData, + groupPreferences :: Maybe GroupPreferences, + rank :: Maybe Int, -- new field, 0 for flat groups, 1 for groups with super peers + redundancy :: Maybe GroupRedundancy, -- new field, only used when rank > 0 + consensus :: Maybe GroupConsensus -- new field, see below in + } + +-- each field defines an average number of super-peers that will deliver messages (events) related to a specific scope, +-- by default all super peers will deliver the events in that scope. +data GroupRedundancy = GroupRedundancy + { messages :: Maybe Double, -- messages and message changes, including reactions and comments + members :: Maybe Double, -- member additions and permission changes + group :: Maybe Double -- group profile and other changes + } +``` + +## Decisions about message or another event delivery + +In groups with rank 0 (current groups) all members aim to establish connections with all other members, making it hard to scale. Admins who added the members play a temporary role of forwarding messages, but only until members are connected. + +In groups with rank 1 super-peers connect to all members, but each message or event may be delivered by some rather than by all super-peers, to avoid substantial traffic increase. E.g., in groups with 2 super-peers it would be desirable to deliver each message 1.33 (4/3) times on average, while for groups with 3 super peers it can be 2 or 1.667 (5/3) times. + +The decision whether a given super peer should deliver the message would depend on these factors: +- deterministic (see below) message hash, `h`. +- receiving member ID, `r`. +- super-peer member ID, `s`. +- target message redundancy `d` (the desired number of super-peers to deliver the message). +- number of super-peers connected to member `r` (and known as connected to super-peer making the decision), `n`. +- 0-based index of the current super-peer in the sorted array of known super peer IDs, `i`. It does not require sorting all peer IDs, it's enough to count how many peers have smaller or larger IDs. + +The assumption here is that member ID is unique within the group, and that message hashes are also unique. Also, message hashes rather than sending member IDs are used to ensure that the decision is made differently for the same sender/recipient pairs, allowing recipients to identify integrity violations (e.g., if some of the super-peers decides to change the messages or fail to deliver it). + +For simplicity, all parameters are normalized to 0..1 range from their respective binary ranges. + +The algorithm to decide whether the message should be delivered by a given super-peer: + +``` +if (d >= n || n == 1) deliver; +else + prob = d/n ; delivery probability based on target delivery redundancy + point = (h + r)/2 ; as member ID and message hash are uniformly random in 0..1 range, `point` will also be uniformly random in 0..1 range + start = (1 - prob) * i / (n - 1) ; `start` for the peer with `i == 0` will be `0` and with `i == n - 1` will be `1 - prob` + end = start + prob ; `end` for peer 0 will be `prob` and for peer `n - 1` will be 1 + ; for all peers the range `start..end` will have width `prob` + if (point >= start && point < end) deliver + else skip; +``` + +This algorithm can be proven to result in target average delivery redundancy. + +It also requires all super peers to inform other super peers about: +- establishing or losing the connection with other members (e.g., when AUTH is received). +- informing about their decision to stop being super peers in advance. +- most likely using delivery receipts in communications between super-peers that would include message hashes in RCVD info. + +## Authorising administrative changes + +As members no longer send messages directly to other members, in addition to the risk of the initial MITM by admin (which is now mitigated by having multiple super-peers) there is a risk of super-peers being compromised at a later stage, and in case of administrative changes (member or group level changes) we have these options: + +1. have all members postpone these changes until they are communicated by a sufficient number of super-peers (that would require configuring consensus on the group level). +2. have admins and owners sign administrative changes with the public key included in their profile during member introduction. + +The downside of approach 1 is that administrative actions will be delayed and have to be executed not at the time the message is delivered, but at the time message is confirmed by other super-peers. That is separate and in addition to member consensus for some changes (see below). That also means that groups with one super-peer will have no defence mechanism against super-peer being compromised. That also means that groups with two super-peers will either also have no such defence (in case required consensus level is 1) or will require that both super-peers are available, and no administrative actions will be executed unless both super-peers are available. + +The downside of approach 2 is the lack of repudiation, in fact, there is a non-repudiation quality of such administrative changes as role changes, member additions and deletions, and group changes. + +Overall, while repudiation of sent messages appears as important, it seems much less important for administrative changes, and signing member and group changes while relying on Merkle DAG for message history integrity appears to be an optimal tradeoff. + +To support this functionality the `admin` and `owner` members have to add public keys to their profiles and communicate profile updates to all members (before or after group is switched to super-peers, but probably before is better). + +The middle ground here is moderation, and trade-off here is more nuanced. Practically, whether message is fully removed or marked as removed is the group policy decision, and it can be made based on whether it's more important to preserve content or to remove undesirable content without trace, and also given that super-peers are likely to be give automatic moderation capabilities anyway, preserving deniability for moderation events and relying on Merkle DAG to identify integrity violation seems a better alternative than signing moderation messages. Although it can also be a part of group policy whether to require signing moderation events. + +The change to member profile will be: + +```haskell +data Profile = Profile + { displayName :: ContactName, + fullName :: Text, + image :: Maybe ImageData, + contactLink :: Maybe ConnReqContact, + preferences :: Maybe Preferences, + authKey :: Maybe AuthKey -- new field + } + +-- this is rather ad hoc and tries to allow two things: +-- - verify that the member has the private key. +-- - allow key rotations on profile changes, without signing the whole profile change. +-- A better option could be to use certificates, although they are much large in size, +-- and also to simply sign profile changes that include key change (then prevKeySignature won't be needed) +data AuthKey = AuthKey + { key :: PublicKeyEd25519, + signature :: SignatureEd25519, -- signature of the key itself + prevKeySignature :: Maybe SignatureEd25519 + } +``` + +## Role, rank and moderation permission changes of members and group profile changes + +There are two problems with the current approach to changing permission, when a single member makes this decision: +- member whose role changes may disagree. E.g., the member may not be willing to have owner or admin role in some groups. Even more so, the member may be unable to perform super-peer functions (have rank 1). +- other owners or admins may disagree with the change or it may have been made by mistake. + +With the move to super-peers it is additionally complicated by the fact that super-peers will be forwarding these messages, and they could be compromised, thus disrupting group functioning - this risk currently exists with the existing group directory that plays admin role and in case it is compromised it can remove all members from the group. + +Part of this problem is addressed in the previous point by requiring to sign administrative changes. + +Another part is about the members agreeing to changes that affect them when additional privileges are granted, and also by requiring the consensus between group owners and admins for any privilege changes. + +There are 2 options for proposals/acceptance/approvals flow design: +1. introduce additional protocol messages for each stage, and for each type of change to complement existing messages. +2. manage these stages in orthogonal way, by adding these stages on the top level of the protocol. + +The option 2 is likely to result in a more concise protocol as it will separate approval from from the events, also allowing to include authorizations in a standardized way. This also fits well in `XGrpMsgForward` event that includes that message inside, so all authorizations will be forwarded. + +```haskell +-- fields are the number of member approvals required for actions with that role. +-- As target member acceptance is required only for privilege increases it won't be among approvals required for consensus. +-- For example, for group with consensus = {admin: 3, owners: 2}, a new member can be made admin with the decision of 3 other admins or with the decision of single owner (as owner role is higher), or the group can be removed, a new admin is added or group consensus changed with the decision of 2 admins. +-- Owners leaving without changing the consensus can result in consensus becoming unreachable - this is not different from losing a single member, and it only prevents accidental or malicious destructive actions, but does not prevent losing access. +data GroupConsensus = GroupConsensus + { admin :: Maybe Word16, -- possibly, this field is not needed + owner :: Maybe Word16 -- 1 by default + } + +-- alternatively, the type could be more flexible than that, but it can be extended if needed. + +data ChatMessage e = ChatMessage + { chatVRange :: VersionRangeChat, + msgId :: Maybe SharedMsgId, + chatMsgEvent :: ChatMsgEvent e, + stage :: Maybe MessageStage, -- new field, Nothing for broadcasted messages + bcast :: Maybe MessageBroadcast, -- new field instructing super-peers how to broadcast the message + auth :: Maybe (Either MemberApproval [MemberApproval]) -- approvals for broadcasted messages from members, Either won't be in encoding + } + +data MessageStage = MSProposed | MSApproved + +-- possibly, this could include approval stage but it is implied by the context, message needs to be approved by: +-- - the sender with the sufficient permissions +-- - the target of the change when privileges are granted +-- - other admins or owners as required by `consensus` property in group profile. +data MemberApproval = MemberApproval + { memberId :: MemberId, -- can be encoded as id? + auth :: SignatureEd25519 + } + +data MessageBroadcast = MessageBroadcast + { from :: Maybe MessageFrom, -- MFSender by default + auth :: Maybe Bool, -- whether to keep auth if present, True by default, False means to validate and remove auth + schedule :: Maybe MessageSchedule + } + +data MessageFrom = MFSender | MFApprovers + +data MessageSchedule = MessageSchedule + { deliverAt :: Maybe UTCTime, -- when received by super-peer by default + minDelay :: Maybe Int, -- seconds, added to start, 0 by default + maxDelay :: Maybe Int -- seconds, added to start, 0 by default + } + +-- e.g., to deliver at least 2 hours after received by super-peer, the MessageSchedule would be {minDelay :: 7200} +-- or, to deliver all messages 20-40 seconds after it is received, to complicate traffic correlation it would be {minDelay: 20, maxDelay: 40} +-- or, to deliver at a scheduled time {deliverAt: "2024-04-01T00:00:00Z"} +``` + +The signature is computed over deterministic message hash excluding `auth` property. This structure would also allow asking super-peers to forward the message as originating from multiple owners or admins without showing who originated the message, as long as necessary approvals are present. + +That will require extending `XGrpMsgForward` to support array of MemberId and allow UI to show multiple senders of the message: + +```haskell + | XGrpMsgForward :: [MemberId] -> ChatMessage 'Json -> UTCTime -> ChatMsgEvent 'Json +``` + +The messages send from multiple owners can have the benefit of avoiding targeted attacks on the member who originated it - it will only be known to other members sending the message, but not to other members, creating mutual responsibility for some changes and/or announcements. + +## Choosing MVP scope + +With all these ideas for improvements, the challenge is to choose some valuable MVP shippable in the shortest time. + +From the UX point of view, the most lacking parts are: + +- broadcasting messages via super-peers, including: + - protocol to accept and approve role changes is necessary, as it should not be possible to unilaterally appoint some member to be a super-peer. + - computing deterministic message hashes and signatures (and only member with the key in profile can be made super-peer). + - protocol to communicate connections with members between super-peers, yet TBD. + - algorithm to make decision whether to deliver message. +- an equivalent of Telegram channels - groups where members can only send comments and set reactions, but cannot send messages. Protocol extensions yet TBD. + +Optionally, we could include: +- Merkle tree integrity validation. +- Owners/admins consensus. +- Messages from multiple members (don't have to be owners, can be any members, irrespective of the need for consensus). +- Delayed messages. + +None of this optional list is required to launch. From 5b0c8e0f76c83385bbe6f1db845cf321ba7d0ef8 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Mon, 8 Apr 2024 18:16:29 +0400 Subject: [PATCH 12/60] core: improve some tests (#4000) --- tests/ChatTests/Groups.hs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/ChatTests/Groups.hs b/tests/ChatTests/Groups.hs index a7a646c17b..4108f799df 100644 --- a/tests/ChatTests/Groups.hs +++ b/tests/ChatTests/Groups.hs @@ -2503,6 +2503,7 @@ testPlanHostContactDeletedGroupLinkKnown = testPlanGroupLinkOwn :: HasCallStack => FilePath -> IO () testPlanGroupLinkOwn tmp = withNewTestChatCfg tmp testCfgGroupLinkViaContact "alice" aliceProfile $ \alice -> do + threadDelay 100000 alice ##> "/g team" alice <## "group #team is created" alice <## "to add members use /a team or /create link #team" @@ -5186,7 +5187,11 @@ testGroupHistoryWelcomeMessage = cath ##> "/_get chat #1 count=100" r <- chat <$> getTermLine cath - r `shouldContain` [(0, "hello"), (0, "hey!"), (0, "welcome to team")] + -- sometimes there are "connected" and feature items in between, + -- so we filter them out; `shouldContain` then checks order is correct + let expected = [(0, "hello"), (0, "hey!"), (0, "welcome to team")] + r' = filter (`elem` expected) r + r' `shouldContain` expected -- message delivery works after sending history alice #> "#team 1" From f8e6a78a3b51b57ae8d60f71fa7c2d634df58992 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Tue, 9 Apr 2024 08:15:29 +0100 Subject: [PATCH 13/60] core: fix nix config (#4003) * bump * more compilers * i686 32bit only 8.10.7 --------- Co-authored-by: Moritz Angermann --- flake.lock | 95 ++++++++++++++++++++++++++++++++++++++++++------------ flake.nix | 7 ++++ 2 files changed, 81 insertions(+), 21 deletions(-) diff --git a/flake.lock b/flake.lock index a11e01683e..7bd372b5c6 100644 --- a/flake.lock +++ b/flake.lock @@ -175,11 +175,11 @@ "ghc99": { "flake": false, "locked": { - "lastModified": 1697054644, - "narHash": "sha256-kKarOuXUaAH3QWv7ASx+gGFMHaHKe0pK5Zu37ky2AL4=", + "lastModified": 1701580282, + "narHash": "sha256-drA01r3JrXnkKyzI+owMZGxX0JameMzjK0W5jJE/+V4=", "ref": "refs/heads/master", - "rev": "f383a242c76f90bcca8a4d7ee001dcb49c172a9a", - "revCount": 62040, + "rev": "f5eb0f2982e9cf27515e892c4bdf634bcfb28459", + "revCount": 62197, "submodules": true, "type": "git", "url": "https://gitlab.haskell.org/ghc/ghc" @@ -225,6 +225,8 @@ "hls-2.2": "hls-2.2", "hls-2.3": "hls-2.3", "hls-2.4": "hls-2.4", + "hls-2.5": "hls-2.5", + "hls-2.6": "hls-2.6", "hpc-coveralls": "hpc-coveralls", "hydra": "hydra", "iserv-proxy": "iserv-proxy", @@ -238,16 +240,17 @@ "nixpkgs-2205": "nixpkgs-2205", "nixpkgs-2211": "nixpkgs-2211", "nixpkgs-2305": "nixpkgs-2305", + "nixpkgs-2311": "nixpkgs-2311", "nixpkgs-unstable": "nixpkgs-unstable", "old-ghc-nix": "old-ghc-nix", "stackage": "stackage" }, "locked": { - "lastModified": 1701163700, - "narHash": "sha256-sOrewUS3LnzV09nGr7+3R6Q6zsgU4smJc61QsHq+4DE=", + "lastModified": 1705833500, + "narHash": "sha256-rUIr6JNbCedt1g4gVYVvE9t0oFU6FUspCA0DS5cA8Bg=", "owner": "input-output-hk", "repo": "haskell.nix", - "rev": "2808bfe3e62e9eb4ee8974cd623a00e1611f302b", + "rev": "d0c35e75cbbc6858770af42ac32b0b85495fbd71", "type": "github" }, "original": { @@ -328,16 +331,50 @@ "hls-2.4": { "flake": false, "locked": { - "lastModified": 1696939266, - "narHash": "sha256-VOMf5+kyOeOmfXTHlv4LNFJuDGa7G3pDnOxtzYR40IU=", + "lastModified": 1699862708, + "narHash": "sha256-YHXSkdz53zd0fYGIYOgLt6HrA0eaRJi9mXVqDgmvrjk=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "362fdd1293efb4b82410b676ab1273479f6d17ee", + "rev": "54507ef7e85fa8e9d0eb9a669832a3287ffccd57", "type": "github" }, "original": { "owner": "haskell", - "ref": "2.4.0.0", + "ref": "2.4.0.1", + "repo": "haskell-language-server", + "type": "github" + } + }, + "hls-2.5": { + "flake": false, + "locked": { + "lastModified": 1701080174, + "narHash": "sha256-fyiR9TaHGJIIR0UmcCb73Xv9TJq3ht2ioxQ2mT7kVdc=", + "owner": "haskell", + "repo": "haskell-language-server", + "rev": "27f8c3d3892e38edaef5bea3870161815c4d014c", + "type": "github" + }, + "original": { + "owner": "haskell", + "ref": "2.5.0.0", + "repo": "haskell-language-server", + "type": "github" + } + }, + "hls-2.6": { + "flake": false, + "locked": { + "lastModified": 1705325287, + "narHash": "sha256-+P87oLdlPyMw8Mgoul7HMWdEvWP/fNlo8jyNtwME8E8=", + "owner": "haskell", + "repo": "haskell-language-server", + "rev": "6e0b342fa0327e628610f2711f8c3e4eaaa08b1e", + "type": "github" + }, + "original": { + "owner": "haskell", + "ref": "2.6.0.0", "repo": "haskell-language-server", "type": "github" } @@ -552,11 +589,11 @@ }, "nixpkgs-2305": { "locked": { - "lastModified": 1695416179, - "narHash": "sha256-610o1+pwbSu+QuF3GE0NU5xQdTHM3t9wyYhB9l94Cd8=", + "lastModified": 1701362232, + "narHash": "sha256-GVdzxL0lhEadqs3hfRLuj+L1OJFGiL/L7gCcelgBlsw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "715d72e967ec1dd5ecc71290ee072bcaf5181ed6", + "rev": "d2332963662edffacfddfad59ff4f709dde80ffe", "type": "github" }, "original": { @@ -566,6 +603,22 @@ "type": "github" } }, + "nixpkgs-2311": { + "locked": { + "lastModified": 1701386440, + "narHash": "sha256-xI0uQ9E7JbmEy/v8kR9ZQan6389rHug+zOtZeZFiDJk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "293822e55ec1872f715a66d0eda9e592dc14419f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-23.11-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs-lib": { "locked": { "dir": "lib", @@ -602,17 +655,17 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1695318763, - "narHash": "sha256-FHVPDRP2AfvsxAdc+AsgFJevMz5VBmnZglFUMlxBkcY=", + "lastModified": 1694822471, + "narHash": "sha256-6fSDCj++lZVMZlyqOe9SIOL8tYSBz1bI8acwovRwoX8=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e12483116b3b51a185a33a272bf351e357ba9a99", + "rev": "47585496bcb13fb72e4a90daeea2f434e2501998", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixpkgs-unstable", "repo": "nixpkgs", + "rev": "47585496bcb13fb72e4a90daeea2f434e2501998", "type": "github" } }, @@ -664,11 +717,11 @@ "stackage": { "flake": false, "locked": { - "lastModified": 1699834215, - "narHash": "sha256-g/JKy0BCvJaxPuYDl3QVc4OY8cFEomgG+hW/eEV470M=", + "lastModified": 1705709369, + "narHash": "sha256-HWgwM8v0g6ZBkRVCStsPaMUDf26WDOGV0q+AxyGlcBQ=", "owner": "input-output-hk", "repo": "stackage.nix", - "rev": "47aacd04abcce6bad57f43cbbbd133538380248e", + "rev": "f7e9bff9f7582d06c4237d183dafaccc33cfa5d4", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 748b5a4f2d..e5e635a223 100644 --- a/flake.nix +++ b/flake.nix @@ -141,6 +141,7 @@ "${pkgs.pkgsCross.musl64.hostPlatform.system}-static:exe:simplex-chat" = (drv pkgs.pkgsCross.musl64).simplex-chat.components.exes.simplex-chat; # STATIC i686-linux "${pkgs.pkgsCross.musl32.hostPlatform.system}-static:exe:simplex-chat" = (drv' { + compiler-nix-name = "ghc810"; pkgs' = pkgs.pkgsCross.musl32; extra-modules = [{ # 32 bit patches @@ -154,6 +155,7 @@ }).simplex-chat.components.exes.simplex-chat; # WINDOWS x86_64-mingwW64 "${pkgs.pkgsCross.mingwW64.hostPlatform.system}:exe:simplex-chat" = (drv' { + compiler-nix-name = "ghc964"; pkgs' = pkgs.pkgsCross.mingwW64; extra-modules = [{ packages.direct-sqlcipher.flags.openssl = true; @@ -186,6 +188,7 @@ ''; }; "${pkgs.pkgsCross.mingwW64.hostPlatform.system}:lib:simplex-chat" = (drv' rec { + compiler-nix-name = "ghc964"; pkgs' = pkgs.pkgsCross.mingwW64; extra-modules = [{ packages.direct-sqlcipher.flags.openssl = true; @@ -543,6 +546,7 @@ "aarch64-darwin" = { # aarch64-darwin iOS build (to be patched with mac2ios) "aarch64-darwin-ios:lib:simplex-chat" = (drv' { + compiler-nix-name = "ghc964"; pkgs' = pkgs; extra-modules = [{ packages.simplex-chat.flags.swift = true; @@ -559,6 +563,7 @@ ); # aarch64-darwin build with tagged JSON format (for Mac & Flutter) "aarch64-darwin:lib:simplex-chat" = (drv' { + compiler-nix-name = "ghc964"; pkgs' = pkgs; extra-modules = [{ packages.direct-sqlcipher.flags.commoncrypto = true; @@ -574,6 +579,7 @@ "x86_64-darwin" = { # x86_64-darwin iOS simulator build (to be patched with mac2ios) "x86_64-darwin-ios:lib:simplex-chat" = (drv' { + compiler-nix-name = "ghc964"; pkgs' = pkgs; extra-modules = [{ packages.simplex-chat.flags.swift = true; @@ -589,6 +595,7 @@ ); # x86_64-darwin build with tagged JSON format (for Mac & Flutter iOS simulator) "x86_64-darwin:lib:simplex-chat" = (drv' { + compiler-nix-name = "ghc964"; pkgs' = pkgs; extra-modules = [{ packages.direct-sqlcipher.flags.commoncrypto = true; From a5db36469daeeafa112ccdd22a4aef30f41b3c83 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Tue, 9 Apr 2024 13:02:59 +0100 Subject: [PATCH 14/60] core: api to forward messages (#3968) * wip * wip * test * mute * tests * simplify (only bool flag) * re-encrypt file * tests * more tests (wip) * fix relative paths, refactor * more tests * more locks * fix, tests * more tests * rework (revert from bool to ids) * update schema * more tests * add to info * ForwardedMsg container * Revert "ForwardedMsg container" This reverts commit bb57f12151a862c164dbcdde8ee3d81dcf25c30f. * parser * more tests * rework api * more locks * test * move * remove from * view * prohibit editing * item info view --------- Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> --- simplex-chat.cabal | 2 + src/Simplex/Chat.hs | 393 ++++++++----- src/Simplex/Chat/Controller.hs | 5 + src/Simplex/Chat/Messages.hs | 69 ++- src/Simplex/Chat/Messages/CIContent.hs | 2 + .../Migrations/M20240402_item_forwarded.hs | 36 ++ src/Simplex/Chat/Migrations/chat_schema.sql | 15 +- src/Simplex/Chat/Protocol.hs | 1 + src/Simplex/Chat/Store/Messages.hs | 86 ++- src/Simplex/Chat/Store/Migrations.hs | 4 +- src/Simplex/Chat/Terminal/Input.hs | 3 + src/Simplex/Chat/View.hs | 104 ++-- tests/ChatTests.hs | 2 + tests/ChatTests/Files.hs | 16 +- tests/ChatTests/Forward.hs | 523 ++++++++++++++++++ tests/ChatTests/Local.hs | 2 + tests/ChatTests/Utils.hs | 9 + 17 files changed, 1061 insertions(+), 211 deletions(-) create mode 100644 src/Simplex/Chat/Migrations/M20240402_item_forwarded.hs create mode 100644 tests/ChatTests/Forward.hs diff --git a/simplex-chat.cabal b/simplex-chat.cabal index 005fbe10a9..dcf9061370 100644 --- a/simplex-chat.cabal +++ b/simplex-chat.cabal @@ -140,6 +140,7 @@ library Simplex.Chat.Migrations.M20240228_pq Simplex.Chat.Migrations.M20240313_drop_agent_ack_cmd_id Simplex.Chat.Migrations.M20240324_custom_data + Simplex.Chat.Migrations.M20240402_item_forwarded Simplex.Chat.Mobile Simplex.Chat.Mobile.File Simplex.Chat.Mobile.Shared @@ -575,6 +576,7 @@ test-suite simplex-chat-test ChatTests.ChatList ChatTests.Direct ChatTests.Files + ChatTests.Forward ChatTests.Groups ChatTests.Local ChatTests.Profiles diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index d075c6cf70..41f8828b26 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -82,7 +82,7 @@ import Simplex.Chat.Types import Simplex.Chat.Types.Preferences import Simplex.Chat.Types.Shared import Simplex.Chat.Types.Util -import Simplex.Chat.Util (encryptFile, shuffle) +import Simplex.Chat.Util (encryptFile, liftIOEither, shuffle) import Simplex.FileTransfer.Client.Main (maxFileSize, maxFileSizeHard) import Simplex.FileTransfer.Client.Presets (defaultXFTPServers) import Simplex.FileTransfer.Description (FileDescriptionURI (..), ValidFileDescription) @@ -705,105 +705,28 @@ processChatCommand' vr = \case [] -> pure Nothing memStatuses -> pure $ Just $ map (uncurry MemberDeliveryStatus) memStatuses _ -> pure Nothing - pure $ CRChatItemInfo user aci ChatItemInfo {itemVersions, memberDeliveryStatuses} - APISendMessage (ChatRef cType chatId) live itemTTL (ComposedMessage file_ quotedItemId_ mc) -> withUser $ \user -> case cType of - CTDirect -> withContactLock "sendMessage" chatId $ do - ct@Contact {contactId, contactUsed} <- withStore $ \db -> getContact db vr user chatId - assertDirectAllowed user MDSnd ct XMsgNew_ - unless contactUsed $ withStore' $ \db -> updateContactUsed db user ct - if isVoice mc && not (featureAllowed SCFVoice forUser ct) - then pure $ chatCmdError (Just user) ("feature not allowed " <> T.unpack (chatFeatureNameText CFVoice)) - else do - (fInv_, ciFile_) <- L.unzip <$> setupSndFileTransfer ct - timed_ <- sndContactCITimed live ct itemTTL - (msgContainer, quotedItem_) <- prepareMsg fInv_ timed_ - (msg, _) <- sendDirectContactMessage user ct (XMsgNew msgContainer) - ci <- saveSndChatItem' user (CDDirectSnd ct) msg (CISndMsgContent mc) ciFile_ quotedItem_ timed_ live - forM_ (timed_ >>= timedDeleteAt') $ - startProximateTimedItemThread user (ChatRef CTDirect contactId, chatItemId' ci) - pure $ CRNewChatItem user (AChatItem SCTDirect SMDSnd (DirectChat ct) ci) - where - setupSndFileTransfer :: Contact -> CM (Maybe (FileInvitation, CIFile 'MDSnd)) - setupSndFileTransfer ct = forM file_ $ \file -> do - fileSize <- checkSndFile file - xftpSndFileTransfer user file fileSize 1 $ CGContact ct - prepareMsg :: Maybe FileInvitation -> Maybe CITimed -> CM (MsgContainer, Maybe (CIQuote 'CTDirect)) - prepareMsg fInv_ timed_ = case quotedItemId_ of - Nothing -> pure (MCSimple (ExtMsgContent mc fInv_ (ttl' <$> timed_) (justTrue live)), Nothing) - Just quotedItemId -> do - CChatItem _ qci@ChatItem {meta = CIMeta {itemTs, itemSharedMsgId}, formattedText, file} <- - withStore $ \db -> getDirectChatItem db user chatId quotedItemId - (origQmc, qd, sent) <- quoteData qci - let msgRef = MsgRef {msgId = itemSharedMsgId, sentAt = itemTs, sent, memberId = Nothing} - qmc = quoteContent mc origQmc file - quotedItem = CIQuote {chatDir = qd, itemId = Just quotedItemId, sharedMsgId = itemSharedMsgId, sentAt = itemTs, content = qmc, formattedText} - pure (MCQuote QuotedMsg {msgRef, content = qmc} (ExtMsgContent mc fInv_ (ttl' <$> timed_) (justTrue live)), Just quotedItem) - where - quoteData :: ChatItem c d -> CM (MsgContent, CIQDirection 'CTDirect, Bool) - quoteData ChatItem {meta = CIMeta {itemDeleted = Just _}} = throwChatError CEInvalidQuote - quoteData ChatItem {content = CISndMsgContent qmc} = pure (qmc, CIQDirectSnd, True) - quoteData ChatItem {content = CIRcvMsgContent qmc} = pure (qmc, CIQDirectRcv, False) - quoteData _ = throwChatError CEInvalidQuote - CTGroup -> withGroupLock "sendMessage" chatId $ do - g@(Group gInfo _) <- withStore $ \db -> getGroup db vr user chatId - assertUserGroupRole gInfo GRAuthor - send g - where - send g@(Group gInfo@GroupInfo {groupId, membership} ms) = - case prohibitedGroupContent gInfo membership mc file_ of - Just f -> notAllowedError f - Nothing -> do - (fInv_, ciFile_) <- L.unzip <$> setupSndFileTransfer g (length $ filter memberCurrent ms) - timed_ <- sndGroupCITimed live gInfo itemTTL - (msgContainer, quotedItem_) <- prepareGroupMsg user gInfo mc quotedItemId_ fInv_ timed_ live - (msg, sentToMembers) <- sendGroupMessage user gInfo ms (XMsgNew msgContainer) - ci <- saveSndChatItem' user (CDGroupSnd gInfo) msg (CISndMsgContent mc) ciFile_ quotedItem_ timed_ live - withStore' $ \db -> - forM_ sentToMembers $ \GroupMember {groupMemberId} -> - createGroupSndStatus db (chatItemId' ci) groupMemberId CISSndNew - forM_ (timed_ >>= timedDeleteAt') $ - startProximateTimedItemThread user (ChatRef CTGroup groupId, chatItemId' ci) - pure $ CRNewChatItem user (AChatItem SCTGroup SMDSnd (GroupChat gInfo) ci) - notAllowedError f = pure $ chatCmdError (Just user) ("feature not allowed " <> T.unpack (groupFeatureNameText f)) - setupSndFileTransfer :: Group -> Int -> CM (Maybe (FileInvitation, CIFile 'MDSnd)) - setupSndFileTransfer g n = forM file_ $ \file -> do - fileSize <- checkSndFile file - xftpSndFileTransfer user file fileSize n $ CGGroup g + forwardedFromChatItem <- getForwardedFromItem user ci + pure $ CRChatItemInfo user aci ChatItemInfo {itemVersions, memberDeliveryStatuses, forwardedFromChatItem} + where + getForwardedFromItem :: User -> ChatItem c d -> CM (Maybe AChatItem) + getForwardedFromItem user ChatItem {meta = CIMeta {itemForwarded}} = case itemForwarded of + Just (CIFFContact _ _ (Just ctId) (Just fwdItemId)) -> + Just <$> withStore (\db -> getAChatItem db vr user (ChatRef CTDirect ctId) fwdItemId) + Just (CIFFGroup _ _ (Just gId) (Just fwdItemId)) -> + Just <$> withStore (\db -> getAChatItem db vr user (ChatRef CTGroup gId) fwdItemId) + _ -> pure Nothing + APISendMessage (ChatRef cType chatId) live itemTTL cm -> withUser $ \user -> case cType of + CTDirect -> + withContactLock "sendMessage" chatId $ + sendContactContentMessage user chatId live itemTTL cm Nothing + CTGroup -> + withGroupLock "sendMessage" chatId $ + sendGroupContentMessage user chatId live itemTTL cm Nothing CTLocal -> pure $ chatCmdError (Just user) "not supported" CTContactRequest -> pure $ chatCmdError (Just user) "not supported" CTContactConnection -> pure $ chatCmdError (Just user) "not supported" - where - xftpSndFileTransfer :: User -> CryptoFile -> Integer -> Int -> ContactOrGroup -> CM (FileInvitation, CIFile 'MDSnd) - xftpSndFileTransfer user file fileSize n contactOrGroup = do - (fInv, ciFile, ft) <- xftpSndFileTransfer_ user file fileSize n $ Just contactOrGroup - case contactOrGroup of - CGContact Contact {activeConn} -> forM_ activeConn $ \conn -> - withStore' $ \db -> createSndFTDescrXFTP db user Nothing conn ft dummyFileDescr - CGGroup (Group _ ms) -> forM_ ms $ \m -> saveMemberFD m `catchChatError` (toView . CRChatError (Just user)) - where - -- we are not sending files to pending members, same as with inline files - saveMemberFD m@GroupMember {activeConn = Just conn@Connection {connStatus}} = - when ((connStatus == ConnReady || connStatus == ConnSndReady) && not (connDisabled conn)) $ - withStore' $ - \db -> createSndFTDescrXFTP db user (Just m) conn ft dummyFileDescr - saveMemberFD _ = pure () - pure (fInv, ciFile) - APICreateChatItem folderId (ComposedMessage file_ quotedItemId_ mc) -> withUser $ \user -> do - forM_ quotedItemId_ $ \_ -> throwError $ ChatError $ CECommandError "not supported" - nf <- withStore $ \db -> getNoteFolder db user folderId - createdAt <- liftIO getCurrentTime - let content = CISndMsgContent mc - let cd = CDLocalSnd nf - ciId <- createLocalChatItem user cd content createdAt - ciFile_ <- forM file_ $ \cf@CryptoFile {filePath, cryptoArgs} -> do - fsFilePath <- lift $ toFSFilePath filePath - fileSize <- liftIO $ CF.getFileContentsSize $ CryptoFile fsFilePath cryptoArgs - chunkSize <- asks $ fileChunkSize . config - withStore' $ \db -> do - fileId <- createLocalFile CIFSSndStored db user nf ciId createdAt cf fileSize chunkSize - pure CIFile {fileId, fileName = takeFileName filePath, fileSize, fileSource = Just cf, fileStatus = CIFSSndStored, fileProtocol = FPLocal} - let ci = mkChatItem cd ciId content ciFile_ Nothing Nothing Nothing False createdAt Nothing createdAt - pure . CRNewChatItem user $ AChatItem SCTLocal SMDSnd (LocalChat nf) ci + APICreateChatItem folderId cm -> withUser $ \user -> + createNoteFolderContentItem user folderId cm Nothing APIUpdateChatItem (ChatRef cType chatId) itemId live mc -> withUser $ \user -> case cType of CTDirect -> withContactLock "updateChatItem" chatId $ do ct@Contact {contactId} <- withStore $ \db -> getContact db vr user chatId @@ -948,6 +871,91 @@ processChatCommand' vr = \case throwChatError (CECommandError $ "reaction already " <> if add then "added" else "removed") when (add && length rs >= maxMsgReactions) $ throwChatError (CECommandError "too many reactions") + APIForwardChatItem (ChatRef toCType toChatId) (ChatRef fromCType fromChatId) itemId -> withUser $ \user -> case toCType of + CTDirect -> do + (cm, ciff) <- prepareForward user + withContactLock "forwardChatItem, to contact" toChatId $ + sendContactContentMessage user toChatId False Nothing cm ciff + CTGroup -> do + (cm, ciff) <- prepareForward user + withGroupLock "forwardChatItem, to group" toChatId $ + sendGroupContentMessage user toChatId False Nothing cm ciff + CTLocal -> do + (cm, ciff) <- prepareForward user + createNoteFolderContentItem user toChatId cm ciff + CTContactRequest -> pure $ chatCmdError (Just user) "not supported" + CTContactConnection -> pure $ chatCmdError (Just user) "not supported" + where + prepareForward :: User -> CM (ComposedMessage, Maybe CIForwardedFrom) + prepareForward user = case fromCType of + CTDirect -> withContactLock "forwardChatItem, from contact" fromChatId $ do + (ct, CChatItem _ ci) <- withStore $ \db -> do + ct <- getContact db vr user fromChatId + cci <- getDirectChatItem db user fromChatId itemId + pure (ct, cci) + (mc, mDir) <- forwardMC ci + file <- forwardCryptoFile ci `catchChatError` (\e -> toView (CRChatError (Just user) e) $> Nothing) + let ciff = forwardCIFF ci $ Just (CIFFContact (forwardName ct) mDir (Just fromChatId) (Just itemId)) + pure (ComposedMessage file Nothing mc, ciff) + where + forwardName :: Contact -> ContactName + forwardName Contact {profile = LocalProfile {displayName, localAlias}} + | localAlias /= "" = localAlias + | otherwise = displayName + CTGroup -> withGroupLock "forwardChatItem, from group" fromChatId $ do + (gInfo, CChatItem _ ci) <- withStore $ \db -> do + gInfo <- getGroupInfo db vr user fromChatId + cci <- getGroupChatItem db user fromChatId itemId + pure (gInfo, cci) + (mc, mDir) <- forwardMC ci + file <- forwardCryptoFile ci `catchChatError` (\e -> toView (CRChatError (Just user) e) $> Nothing) + let ciff = forwardCIFF ci $ Just (CIFFGroup (forwardName gInfo) mDir (Just fromChatId) (Just itemId)) + pure (ComposedMessage file Nothing mc, ciff) + where + forwardName :: GroupInfo -> ContactName + forwardName GroupInfo {groupProfile = GroupProfile {displayName}} = displayName + CTLocal -> do + (CChatItem _ ci) <- withStore $ \db -> getLocalChatItem db user fromChatId itemId + (mc, _) <- forwardMC ci + file <- forwardCryptoFile ci `catchChatError` (\e -> toView (CRChatError (Just user) e) $> Nothing) + let ciff = forwardCIFF ci Nothing + pure (ComposedMessage file Nothing mc, ciff) + CTContactRequest -> throwChatError $ CECommandError "not supported" + CTContactConnection -> throwChatError $ CECommandError "not supported" + where + forwardMC :: ChatItem c d -> CM (MsgContent, MsgDirection) + forwardMC ChatItem {meta = CIMeta {itemDeleted = Just _}} = throwChatError CEInvalidForward + forwardMC ChatItem {content = CISndMsgContent fmc} = pure (fmc, MDSnd) + forwardMC ChatItem {content = CIRcvMsgContent fmc} = pure (fmc, MDRcv) + forwardMC _ = throwChatError CEInvalidForward + forwardCIFF :: ChatItem c d -> Maybe CIForwardedFrom -> Maybe CIForwardedFrom + forwardCIFF ChatItem {meta = CIMeta {itemForwarded = Just ciff}} _ = Just ciff + forwardCIFF _ ciff = ciff + forwardCryptoFile :: ChatItem c d -> CM (Maybe CryptoFile) + forwardCryptoFile ChatItem {file = Just CIFile {fileName, fileStatus, fileSource = Just fromCF@CryptoFile {filePath}}} + | ciFileLoaded fileStatus = + chatReadVar filesFolder >>= \case + Nothing -> + ifM (doesFileExist filePath) (pure $ Just fromCF) (pure Nothing) + Just filesFolder -> do + let fsFromPath = filesFolder filePath + ifM + (doesFileExist fsFromPath) + ( do + fsNewPath <- liftIO $ filesFolder `uniqueCombine` fileName + liftIO $ B.writeFile fsNewPath "" -- create empty file + encrypt <- chatReadVar encryptLocalFiles + cfArgs <- if encrypt then Just <$> (atomically . CF.randomArgs =<< asks random) else pure Nothing + let toCF = CryptoFile fsNewPath cfArgs + -- to keep forwarded file in case original is deleted + liftIOEither $ runExceptT $ withExceptT (ChatError . CEInternalError . show) $ do + lb <- CF.readFile (fromCF {filePath = fsFromPath} :: CryptoFile) + CF.writeFile toCF lb + pure $ Just (toCF {filePath = takeFileName fsNewPath} :: CryptoFile) + ) + (pure Nothing) + | otherwise = pure Nothing + forwardCryptoFile _ = pure Nothing APIUserRead userId -> withUserId userId $ \user -> withStore' (`setUserChatsRead` user) >> ok user UserRead -> withUser $ \User {userId} -> processChatCommand $ APIUserRead userId APIChatRead (ChatRef cType chatId) fromToIds -> withUser $ \_ -> case cType of @@ -1554,6 +1562,21 @@ processChatCommand' vr = \case RejectContact cName -> withUser $ \User {userId} -> do connReqId <- withStore $ \db -> getContactRequestIdByName db userId cName processChatCommand $ APIRejectContact connReqId + ForwardMessage toChatName fromContactName forwardedMsg -> withUser $ \user -> do + contactId <- withStore $ \db -> getContactIdByName db user fromContactName + forwardedItemId <- withStore $ \db -> getDirectChatItemIdByText' db user contactId forwardedMsg + toChatRef <- getChatRef user toChatName + processChatCommand $ APIForwardChatItem toChatRef (ChatRef CTDirect contactId) forwardedItemId + ForwardGroupMessage toChatName fromGroupName fromMemberName_ forwardedMsg -> withUser $ \user -> do + groupId <- withStore $ \db -> getGroupIdByName db user fromGroupName + forwardedItemId <- withStore $ \db -> getGroupChatItemIdByText db user groupId fromMemberName_ forwardedMsg + toChatRef <- getChatRef user toChatName + processChatCommand $ APIForwardChatItem toChatRef (ChatRef CTGroup groupId) forwardedItemId + ForwardLocalMessage toChatName forwardedMsg -> withUser $ \user -> do + folderId <- withStore (`getUserNoteFolderId` user) + forwardedItemId <- withStore $ \db -> getLocalChatItemIdByText' db user folderId forwardedMsg + toChatRef <- getChatRef user toChatName + processChatCommand $ APIForwardChatItem toChatRef (ChatRef CTLocal folderId) forwardedItemId SendMessage (ChatName cType name) msg -> withUser $ \user -> do let mc = MCText msg case cType of @@ -1638,7 +1661,7 @@ processChatCommand' vr = \case combineResults _ _ (Left e) = Left e createCI :: DB.Connection -> User -> UTCTime -> (Contact, SndMessage) -> IO () createCI db user createdAt (ct, sndMsg) = - void $ createNewSndChatItem db user (CDDirectSnd ct) sndMsg (CISndMsgContent mc) Nothing Nothing False createdAt + void $ createNewSndChatItem db user (CDDirectSnd ct) sndMsg (CISndMsgContent mc) Nothing Nothing Nothing False createdAt SendMessageQuote cName (AMsgDirection msgDir) quotedMsg msg -> withUser $ \user@User {userId} -> do contactId <- withStore $ \db -> getContactIdByName db user cName quotedItemId <- withStore $ \db -> getDirectChatItemIdByText db userId contactId msgDir quotedMsg @@ -2060,7 +2083,7 @@ processChatCommand' vr = \case p {groupPreferences = Just . setGroupPreference f enabled $ groupPreferences p} SetGroupFeatureRole (AGFR f) gName enabled role -> updateGroupProfileByName gName $ \p -> - p {groupPreferences = Just . setGroupPreferenceRole f enabled role $ groupPreferences p} + p {groupPreferences = Just . setGroupPreferenceRole f enabled role $ groupPreferences p} SetUserTimedMessages onOff -> withUser $ \user@User {profile} -> do let allowed = if onOff then FAYes else FANo pref = TimedMessagesPreference allowed Nothing @@ -2587,6 +2610,104 @@ processChatCommand' vr = \case let aciContent = ACIContent SMDRcv $ CIRcvGroupInvitation ciGroupInv {status = newStatus} memRole updateDirectChatItemView user ct itemId aciContent False Nothing _ -> pure () -- prohibited + sendContactContentMessage :: User -> ContactId -> Bool -> Maybe Int -> ComposedMessage -> Maybe CIForwardedFrom -> CM ChatResponse + sendContactContentMessage user contactId live itemTTL (ComposedMessage file_ quotedItemId_ mc) itemForwarded = do + ct@Contact {contactUsed} <- withStore $ \db -> getContact db vr user contactId + assertDirectAllowed user MDSnd ct XMsgNew_ + unless contactUsed $ withStore' $ \db -> updateContactUsed db user ct + if isVoice mc && not (featureAllowed SCFVoice forUser ct) + then pure $ chatCmdError (Just user) ("feature not allowed " <> T.unpack (chatFeatureNameText CFVoice)) + else do + (fInv_, ciFile_) <- L.unzip <$> setupSndFileTransfer ct + timed_ <- sndContactCITimed live ct itemTTL + (msgContainer, quotedItem_) <- prepareMsg fInv_ timed_ + (msg, _) <- sendDirectContactMessage user ct (XMsgNew msgContainer) + ci <- saveSndChatItem' user (CDDirectSnd ct) msg (CISndMsgContent mc) ciFile_ quotedItem_ itemForwarded timed_ live + forM_ (timed_ >>= timedDeleteAt') $ + startProximateTimedItemThread user (ChatRef CTDirect contactId, chatItemId' ci) + pure $ CRNewChatItem user (AChatItem SCTDirect SMDSnd (DirectChat ct) ci) + where + setupSndFileTransfer :: Contact -> CM (Maybe (FileInvitation, CIFile 'MDSnd)) + setupSndFileTransfer ct = forM file_ $ \file -> do + fileSize <- checkSndFile file + xftpSndFileTransfer user file fileSize 1 $ CGContact ct + prepareMsg :: Maybe FileInvitation -> Maybe CITimed -> CM (MsgContainer, Maybe (CIQuote 'CTDirect)) + prepareMsg fInv_ timed_ = case (quotedItemId_, itemForwarded) of + (Nothing, Nothing) -> pure (MCSimple (ExtMsgContent mc fInv_ (ttl' <$> timed_) (justTrue live)), Nothing) + (Nothing, Just _) -> pure (MCForward (ExtMsgContent mc fInv_ (ttl' <$> timed_) (justTrue live)), Nothing) + (Just quotedItemId, Nothing) -> do + CChatItem _ qci@ChatItem {meta = CIMeta {itemTs, itemSharedMsgId}, formattedText, file} <- + withStore $ \db -> getDirectChatItem db user contactId quotedItemId + (origQmc, qd, sent) <- quoteData qci + let msgRef = MsgRef {msgId = itemSharedMsgId, sentAt = itemTs, sent, memberId = Nothing} + qmc = quoteContent mc origQmc file + quotedItem = CIQuote {chatDir = qd, itemId = Just quotedItemId, sharedMsgId = itemSharedMsgId, sentAt = itemTs, content = qmc, formattedText} + pure (MCQuote QuotedMsg {msgRef, content = qmc} (ExtMsgContent mc fInv_ (ttl' <$> timed_) (justTrue live)), Just quotedItem) + (Just _, Just _) -> throwChatError CEInvalidQuote + where + quoteData :: ChatItem c d -> CM (MsgContent, CIQDirection 'CTDirect, Bool) + quoteData ChatItem {meta = CIMeta {itemDeleted = Just _}} = throwChatError CEInvalidQuote + quoteData ChatItem {content = CISndMsgContent qmc} = pure (qmc, CIQDirectSnd, True) + quoteData ChatItem {content = CIRcvMsgContent qmc} = pure (qmc, CIQDirectRcv, False) + quoteData _ = throwChatError CEInvalidQuote + sendGroupContentMessage :: User -> GroupId -> Bool -> Maybe Int -> ComposedMessage -> Maybe CIForwardedFrom -> CM ChatResponse + sendGroupContentMessage user groupId live itemTTL (ComposedMessage file_ quotedItemId_ mc) itemForwarded = do + g@(Group gInfo _) <- withStore $ \db -> getGroup db vr user groupId + assertUserGroupRole gInfo GRAuthor + send g + where + send g@(Group gInfo@GroupInfo {membership} ms) = + case prohibitedGroupContent gInfo membership mc file_ of + Just f -> notAllowedError f + Nothing -> do + (fInv_, ciFile_) <- L.unzip <$> setupSndFileTransfer g (length $ filter memberCurrent ms) + timed_ <- sndGroupCITimed live gInfo itemTTL + (msgContainer, quotedItem_) <- prepareGroupMsg user gInfo mc quotedItemId_ itemForwarded fInv_ timed_ live + (msg, sentToMembers) <- sendGroupMessage user gInfo ms (XMsgNew msgContainer) + ci <- saveSndChatItem' user (CDGroupSnd gInfo) msg (CISndMsgContent mc) ciFile_ quotedItem_ itemForwarded timed_ live + withStore' $ \db -> + forM_ sentToMembers $ \GroupMember {groupMemberId} -> + createGroupSndStatus db (chatItemId' ci) groupMemberId CISSndNew + forM_ (timed_ >>= timedDeleteAt') $ + startProximateTimedItemThread user (ChatRef CTGroup groupId, chatItemId' ci) + pure $ CRNewChatItem user (AChatItem SCTGroup SMDSnd (GroupChat gInfo) ci) + notAllowedError f = pure $ chatCmdError (Just user) ("feature not allowed " <> T.unpack (groupFeatureNameText f)) + setupSndFileTransfer :: Group -> Int -> CM (Maybe (FileInvitation, CIFile 'MDSnd)) + setupSndFileTransfer g n = forM file_ $ \file -> do + fileSize <- checkSndFile file + xftpSndFileTransfer user file fileSize n $ CGGroup g + xftpSndFileTransfer :: User -> CryptoFile -> Integer -> Int -> ContactOrGroup -> CM (FileInvitation, CIFile 'MDSnd) + xftpSndFileTransfer user file fileSize n contactOrGroup = do + (fInv, ciFile, ft) <- xftpSndFileTransfer_ user file fileSize n $ Just contactOrGroup + case contactOrGroup of + CGContact Contact {activeConn} -> forM_ activeConn $ \conn -> + withStore' $ \db -> createSndFTDescrXFTP db user Nothing conn ft dummyFileDescr + CGGroup (Group _ ms) -> forM_ ms $ \m -> saveMemberFD m `catchChatError` (toView . CRChatError (Just user)) + where + -- we are not sending files to pending members, same as with inline files + saveMemberFD m@GroupMember {activeConn = Just conn@Connection {connStatus}} = + when ((connStatus == ConnReady || connStatus == ConnSndReady) && not (connDisabled conn)) $ + withStore' $ + \db -> createSndFTDescrXFTP db user (Just m) conn ft dummyFileDescr + saveMemberFD _ = pure () + pure (fInv, ciFile) + createNoteFolderContentItem :: User -> NoteFolderId -> ComposedMessage -> Maybe CIForwardedFrom -> CM ChatResponse + createNoteFolderContentItem user folderId (ComposedMessage file_ quotedItemId_ mc) itemForwarded = do + forM_ quotedItemId_ $ \_ -> throwError $ ChatError $ CECommandError "not supported" + nf <- withStore $ \db -> getNoteFolder db user folderId + createdAt <- liftIO getCurrentTime + let content = CISndMsgContent mc + let cd = CDLocalSnd nf + ciId <- createLocalChatItem user cd content itemForwarded createdAt + ciFile_ <- forM file_ $ \cf@CryptoFile {filePath, cryptoArgs} -> do + fsFilePath <- lift $ toFSFilePath filePath + fileSize <- liftIO $ CF.getFileContentsSize $ CryptoFile fsFilePath cryptoArgs + chunkSize <- asks $ fileChunkSize . config + withStore' $ \db -> do + fileId <- createLocalFile CIFSSndStored db user nf ciId createdAt cf fileSize chunkSize + pure CIFile {fileId, fileName = takeFileName filePath, fileSize, fileSource = Just cf, fileStatus = CIFSSndStored, fileProtocol = FPLocal} + let ci = mkChatItem cd ciId content ciFile_ Nothing Nothing itemForwarded Nothing False createdAt Nothing createdAt + pure . CRNewChatItem user $ AChatItem SCTLocal SMDSnd (LocalChat nf) ci toggleNtf :: User -> GroupMember -> Bool -> CM () toggleNtf user m ntfOn = @@ -2601,10 +2722,11 @@ data ChangedProfileContact = ChangedProfileContact conn :: Connection } -prepareGroupMsg :: User -> GroupInfo -> MsgContent -> Maybe ChatItemId -> Maybe FileInvitation -> Maybe CITimed -> Bool -> CM (MsgContainer, Maybe (CIQuote 'CTGroup)) -prepareGroupMsg user GroupInfo {groupId, membership} mc quotedItemId_ fInv_ timed_ live = case quotedItemId_ of - Nothing -> pure (MCSimple (ExtMsgContent mc fInv_ (ttl' <$> timed_) (justTrue live)), Nothing) - Just quotedItemId -> do +prepareGroupMsg :: User -> GroupInfo -> MsgContent -> Maybe ChatItemId -> Maybe CIForwardedFrom -> Maybe FileInvitation -> Maybe CITimed -> Bool -> CM (MsgContainer, Maybe (CIQuote 'CTGroup)) +prepareGroupMsg user GroupInfo {groupId, membership} mc quotedItemId_ itemForwarded fInv_ timed_ live = case (quotedItemId_, itemForwarded) of + (Nothing, Nothing) -> pure (MCSimple (ExtMsgContent mc fInv_ (ttl' <$> timed_) (justTrue live)), Nothing) + (Nothing, Just _) -> pure (MCForward (ExtMsgContent mc fInv_ (ttl' <$> timed_) (justTrue live)), Nothing) + (Just quotedItemId, Nothing) -> do CChatItem _ qci@ChatItem {meta = CIMeta {itemTs, itemSharedMsgId}, formattedText, file} <- withStore $ \db -> getGroupChatItem db user groupId quotedItemId (origQmc, qd, sent, GroupMember {memberId}) <- quoteData qci membership @@ -2612,6 +2734,7 @@ prepareGroupMsg user GroupInfo {groupId, membership} mc quotedItemId_ fInv_ time qmc = quoteContent mc origQmc file quotedItem = CIQuote {chatDir = qd, itemId = Just quotedItemId, sharedMsgId = itemSharedMsgId, sentAt = itemTs, content = qmc, formattedText} pure (MCQuote QuotedMsg {msgRef, content = qmc} (ExtMsgContent mc fInv_ (ttl' <$> timed_) (justTrue live)), Just quotedItem) + (Just _, Just _) -> throwChatError CEInvalidQuote where quoteData :: ChatItem c d -> GroupMember -> CM (MsgContent, CIQDirection 'CTGroup, Bool, GroupMember) quoteData ChatItem {meta = CIMeta {itemDeleted = Just _}} _ = throwChatError CEInvalidQuote @@ -4049,7 +4172,7 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = let CIMeta {itemTs, itemSharedMsgId, itemTimed} = meta quotedItemId_ = quoteItemId =<< quotedItem fInv_ = fst <$> fInvDescr_ - (msgContainer, _) <- prepareGroupMsg user gInfo mc quotedItemId_ fInv_ itemTimed False + (msgContainer, _) <- prepareGroupMsg user gInfo mc quotedItemId_ Nothing fInv_ itemTimed False let senderVRange = memberChatVRange' sender xMsgNewChatMsg = ChatMessage {chatVRange = senderVRange, msgId = itemSharedMsgId, chatMsgEvent = XMsgNew msgContainer} fileDescrEvents <- case (snd <$> fInvDescr_, itemSharedMsgId) of @@ -4669,18 +4792,19 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = updateRcvChatItem = do cci <- withStore $ \db -> getDirectChatItemBySharedMsgId db user contactId sharedMsgId case cci of - CChatItem SMDRcv ci@ChatItem {meta = CIMeta {itemLive}, content = CIRcvMsgContent oldMC} -> do - let changed = mc /= oldMC - if changed || fromMaybe False itemLive - then do - ci' <- withStore' $ \db -> do - when changed $ - addInitialAndNewCIVersions db (chatItemId' ci) (chatItemTs' ci, oldMC) (brokerTs, mc) - reactions <- getDirectCIReactions db ct sharedMsgId - updateDirectChatItem' db user contactId ci {reactions} content live $ Just msgId - toView $ CRChatItemUpdated user (AChatItem SCTDirect SMDRcv (DirectChat ct) ci') - startUpdatedTimedItemThread user (ChatRef CTDirect contactId) ci ci' - else toView $ CRChatItemNotChanged user (AChatItem SCTDirect SMDRcv (DirectChat ct) ci) + CChatItem SMDRcv ci@ChatItem {meta = CIMeta {itemForwarded, itemLive}, content = CIRcvMsgContent oldMC} + | isNothing itemForwarded -> do + let changed = mc /= oldMC + if changed || fromMaybe False itemLive + then do + ci' <- withStore' $ \db -> do + when changed $ + addInitialAndNewCIVersions db (chatItemId' ci) (chatItemTs' ci, oldMC) (brokerTs, mc) + reactions <- getDirectCIReactions db ct sharedMsgId + updateDirectChatItem' db user contactId ci {reactions} content live $ Just msgId + toView $ CRChatItemUpdated user (AChatItem SCTDirect SMDRcv (DirectChat ct) ci') + startUpdatedTimedItemThread user (ChatRef CTDirect contactId) ci ci' + else toView $ CRChatItemNotChanged user (AChatItem SCTDirect SMDRcv (DirectChat ct) ci) _ -> messageError "x.msg.update: contact attempted invalid message update" messageDelete :: Contact -> SharedMsgId -> RcvMessage -> MsgMeta -> CM () @@ -6441,17 +6565,17 @@ saveGroupFwdRcvMsg user groupId forwardingMember refAuthorMember@GroupMember {me _ -> throwError e saveSndChatItem :: ChatTypeI c => User -> ChatDirection c 'MDSnd -> SndMessage -> CIContent 'MDSnd -> CM (ChatItem c 'MDSnd) -saveSndChatItem user cd msg content = saveSndChatItem' user cd msg content Nothing Nothing Nothing False +saveSndChatItem user cd msg content = saveSndChatItem' user cd msg content Nothing Nothing Nothing Nothing False -saveSndChatItem' :: ChatTypeI c => User -> ChatDirection c 'MDSnd -> SndMessage -> CIContent 'MDSnd -> Maybe (CIFile 'MDSnd) -> Maybe (CIQuote c) -> Maybe CITimed -> Bool -> CM (ChatItem c 'MDSnd) -saveSndChatItem' user cd msg@SndMessage {sharedMsgId} content ciFile quotedItem itemTimed live = do +saveSndChatItem' :: ChatTypeI c => User -> ChatDirection c 'MDSnd -> SndMessage -> CIContent 'MDSnd -> Maybe (CIFile 'MDSnd) -> Maybe (CIQuote c) -> Maybe CIForwardedFrom -> Maybe CITimed -> Bool -> CM (ChatItem c 'MDSnd) +saveSndChatItem' user cd msg@SndMessage {sharedMsgId} content ciFile quotedItem itemForwarded itemTimed live = do createdAt <- liftIO getCurrentTime ciId <- withStore' $ \db -> do when (ciRequiresAttention content) $ updateChatTs db user cd createdAt - ciId <- createNewSndChatItem db user cd msg content quotedItem itemTimed live createdAt + ciId <- createNewSndChatItem db user cd msg content quotedItem itemForwarded itemTimed live createdAt forM_ ciFile $ \CIFile {fileId} -> updateFileTransferChatItemId db fileId ciId createdAt pure ciId - pure $ mkChatItem cd ciId content ciFile quotedItem (Just sharedMsgId) itemTimed live createdAt Nothing createdAt + pure $ mkChatItem cd ciId content ciFile quotedItem (Just sharedMsgId) itemForwarded itemTimed live createdAt Nothing createdAt saveRcvChatItem :: (ChatTypeI c, ChatTypeQuotable c) => User -> ChatDirection c 'MDRcv -> RcvMessage -> UTCTime -> CIContent 'MDRcv -> CM (ChatItem c 'MDRcv) saveRcvChatItem user cd msg@RcvMessage {sharedMsgId_} brokerTs content = @@ -6460,18 +6584,18 @@ saveRcvChatItem user cd msg@RcvMessage {sharedMsgId_} brokerTs content = saveRcvChatItem' :: (ChatTypeI c, ChatTypeQuotable c) => User -> ChatDirection c 'MDRcv -> RcvMessage -> Maybe SharedMsgId -> UTCTime -> CIContent 'MDRcv -> Maybe (CIFile 'MDRcv) -> Maybe CITimed -> Bool -> CM (ChatItem c 'MDRcv) saveRcvChatItem' user cd msg@RcvMessage {forwardedByMember} sharedMsgId_ brokerTs content ciFile itemTimed live = do createdAt <- liftIO getCurrentTime - (ciId, quotedItem) <- withStore' $ \db -> do + (ciId, quotedItem, itemForwarded) <- withStore' $ \db -> do when (ciRequiresAttention content) $ updateChatTs db user cd createdAt - (ciId, quotedItem) <- createNewRcvChatItem db user cd msg sharedMsgId_ content itemTimed live brokerTs createdAt + r@(ciId, _, _) <- createNewRcvChatItem db user cd msg sharedMsgId_ content itemTimed live brokerTs createdAt forM_ ciFile $ \CIFile {fileId} -> updateFileTransferChatItemId db fileId ciId createdAt - pure (ciId, quotedItem) - pure $ mkChatItem cd ciId content ciFile quotedItem sharedMsgId_ itemTimed live brokerTs forwardedByMember createdAt + pure r + pure $ mkChatItem cd ciId content ciFile quotedItem sharedMsgId_ itemForwarded itemTimed live brokerTs forwardedByMember createdAt -mkChatItem :: (ChatTypeI c, MsgDirectionI d) => ChatDirection c d -> ChatItemId -> CIContent d -> Maybe (CIFile d) -> Maybe (CIQuote c) -> Maybe SharedMsgId -> Maybe CITimed -> Bool -> ChatItemTs -> Maybe GroupMemberId -> UTCTime -> ChatItem c d -mkChatItem cd ciId content file quotedItem sharedMsgId itemTimed live itemTs forwardedByMember currentTs = +mkChatItem :: (ChatTypeI c, MsgDirectionI d) => ChatDirection c d -> ChatItemId -> CIContent d -> Maybe (CIFile d) -> Maybe (CIQuote c) -> Maybe SharedMsgId -> Maybe CIForwardedFrom -> Maybe CITimed -> Bool -> ChatItemTs -> Maybe GroupMemberId -> UTCTime -> ChatItem c d +mkChatItem cd ciId content file quotedItem sharedMsgId itemForwarded itemTimed live itemTs forwardedByMember currentTs = let itemText = ciContentToText content itemStatus = ciCreateStatus content - meta = mkCIMeta ciId content itemText itemStatus sharedMsgId Nothing False itemTimed (justTrue live) currentTs itemTs forwardedByMember currentTs currentTs + meta = mkCIMeta ciId content itemText itemStatus sharedMsgId itemForwarded Nothing False itemTimed (justTrue live) currentTs itemTs forwardedByMember currentTs currentTs in ChatItem {chatDir = toCIDirection cd, meta, content, formattedText = parseMaybeMarkdownList itemText, quotedItem, reactions = [], file} deleteDirectCI :: MsgDirectionI d => User -> Contact -> ChatItem 'CTDirect d -> Bool -> Bool -> CM ChatResponse @@ -6732,17 +6856,17 @@ createInternalItemsForChats user itemTs_ dirsCIContents = do createACIs :: DB.Connection -> UTCTime -> UTCTime -> ChatDirection c d -> [CIContent d] -> [IO AChatItem] createACIs db itemTs createdAt cd = map $ \content -> do ciId <- createNewChatItemNoMsg db user cd content itemTs createdAt - let ci = mkChatItem cd ciId content Nothing Nothing Nothing Nothing False itemTs Nothing createdAt + let ci = mkChatItem cd ciId content Nothing Nothing Nothing Nothing Nothing False itemTs Nothing createdAt pure $ AChatItem (chatTypeI @c) (msgDirection @d) (toChatInfo cd) ci -createLocalChatItem :: MsgDirectionI d => User -> ChatDirection 'CTLocal d -> CIContent d -> UTCTime -> CM ChatItemId -createLocalChatItem user cd content createdAt = do +createLocalChatItem :: MsgDirectionI d => User -> ChatDirection 'CTLocal d -> CIContent d -> Maybe CIForwardedFrom -> UTCTime -> CM ChatItemId +createLocalChatItem user cd content itemForwarded createdAt = do gVar <- asks random withStore $ \db -> do liftIO $ updateChatTs db user cd createdAt createWithRandomId gVar $ \sharedMsgId -> let smi_ = Just (SharedMsgId sharedMsgId) - in createNewChatItem_ db user cd Nothing smi_ content (Nothing, Nothing, Nothing, Nothing, Nothing) Nothing False createdAt Nothing createdAt + in createNewChatItem_ db user cd Nothing smi_ content (Nothing, Nothing, Nothing, Nothing, Nothing) itemForwarded Nothing False createdAt Nothing createdAt withUser' :: (User -> CM ChatResponse) -> CM ChatResponse withUser' action = @@ -6869,6 +6993,7 @@ chatCommandP = "/_delete item " *> (APIDeleteChatItem <$> chatRefP <* A.space <*> A.decimal <* A.space <*> ciDeleteMode), "/_delete member item #" *> (APIDeleteMemberChatItem <$> A.decimal <* A.space <*> A.decimal <* A.space <*> A.decimal), "/_reaction " *> (APIChatItemReaction <$> chatRefP <* A.space <*> A.decimal <* A.space <*> onOffP <* A.space <*> jsonP), + "/_forward " *> (APIForwardChatItem <$> chatRefP <* A.space <*> chatRefP <* A.space <*> A.decimal), "/_read user " *> (APIUserRead <$> A.decimal), "/read user" $> UserRead, "/_read chat " *> (APIChatRead <$> chatRefP <*> optional (A.space *> ((,) <$> ("from=" *> A.decimal) <* A.space <*> ("to=" *> A.decimal)))), @@ -7010,6 +7135,10 @@ chatCommandP = "/_set incognito :" *> (APISetConnectionIncognito <$> A.decimal <* A.space <*> onOffP), ("/connect" <|> "/c") *> (Connect <$> incognitoP <* A.space <*> ((Just <$> strP) <|> A.takeTill isSpace $> Nothing)), ("/connect" <|> "/c") *> (AddContact <$> incognitoP), + ForwardMessage <$> chatNameP <* " <- @" <*> displayName <* A.space <*> msgTextP, + ForwardGroupMessage <$> chatNameP <* " <- #" <*> displayName <* A.space <* A.char '@' <*> (Just <$> displayName) <* A.space <*> msgTextP, + ForwardGroupMessage <$> chatNameP <* " <- #" <*> displayName <*> pure Nothing <* A.space <*> msgTextP, + ForwardLocalMessage <$> chatNameP <* " <- * " <*> msgTextP, SendMessage <$> chatNameP <* A.space <*> msgTextP, "/* " *> (SendMessage (ChatName CTLocal "") <$> msgTextP), "@#" *> (SendMemberContactMessage <$> displayName <* A.space <* char_ '@' <*> displayName <* A.space <*> msgTextP), diff --git a/src/Simplex/Chat/Controller.hs b/src/Simplex/Chat/Controller.hs index 85d93a7d88..5295541697 100644 --- a/src/Simplex/Chat/Controller.hs +++ b/src/Simplex/Chat/Controller.hs @@ -292,6 +292,7 @@ data ChatCommand | APIDeleteChatItem ChatRef ChatItemId CIDeleteMode | APIDeleteMemberChatItem GroupId GroupMemberId ChatItemId | APIChatItemReaction {chatRef :: ChatRef, chatItemId :: ChatItemId, add :: Bool, reaction :: MsgReaction} + | APIForwardChatItem {toChatRef :: ChatRef, fromChatRef :: ChatRef, chatItemId :: ChatItemId} | APIUserRead UserId | UserRead | APIChatRead ChatRef (Maybe (ChatItemId, ChatItemId)) @@ -408,6 +409,9 @@ data ChatCommand | AddressAutoAccept (Maybe AutoAccept) | AcceptContact IncognitoEnabled ContactName | RejectContact ContactName + | ForwardMessage {toChatName :: ChatName, fromContactName :: ContactName, forwardedMsg :: Text} + | ForwardGroupMessage {toChatName :: ChatName, fromGroupName :: GroupName, fromMemberName_ :: Maybe ContactName, forwardedMsg :: Text} + | ForwardLocalMessage {toChatName :: ChatName, forwardedMsg :: Text} | SendMessage ChatName Text | SendMemberContactMessage GroupName ContactName Text | SendLiveMessage ChatName Text @@ -1114,6 +1118,7 @@ data ChatErrorType | CEFallbackToSMPProhibited {fileId :: FileTransferId} | CEInlineFileProhibited {fileId :: FileTransferId} | CEInvalidQuote + | CEInvalidForward | CEInvalidChatItemUpdate | CEInvalidChatItemDelete | CEHasCurrentCall diff --git a/src/Simplex/Chat/Messages.hs b/src/Simplex/Chat/Messages.hs index b29543cf74..2aa781d45e 100644 --- a/src/Simplex/Chat/Messages.hs +++ b/src/Simplex/Chat/Messages.hs @@ -339,6 +339,7 @@ data CIMeta (c :: ChatType) (d :: MsgDirection) = CIMeta itemText :: Text, itemStatus :: CIStatus d, itemSharedMsgId :: Maybe SharedMsgId, + itemForwarded :: Maybe CIForwardedFrom, itemDeleted :: Maybe (CIDeleted c), itemEdited :: Bool, itemTimed :: Maybe CITimed, @@ -350,15 +351,15 @@ data CIMeta (c :: ChatType) (d :: MsgDirection) = CIMeta } deriving (Show) -mkCIMeta :: forall c d. ChatTypeI c => ChatItemId -> CIContent d -> Text -> CIStatus d -> Maybe SharedMsgId -> Maybe (CIDeleted c) -> Bool -> Maybe CITimed -> Maybe Bool -> UTCTime -> ChatItemTs -> Maybe GroupMemberId -> UTCTime -> UTCTime -> CIMeta c d -mkCIMeta itemId itemContent itemText itemStatus itemSharedMsgId itemDeleted itemEdited itemTimed itemLive currentTs itemTs forwardedByMember createdAt updatedAt = +mkCIMeta :: forall c d. ChatTypeI c => ChatItemId -> CIContent d -> Text -> CIStatus d -> Maybe SharedMsgId -> Maybe CIForwardedFrom -> Maybe (CIDeleted c) -> Bool -> Maybe CITimed -> Maybe Bool -> UTCTime -> ChatItemTs -> Maybe GroupMemberId -> UTCTime -> UTCTime -> CIMeta c d +mkCIMeta itemId itemContent itemText itemStatus itemSharedMsgId itemForwarded itemDeleted itemEdited itemTimed itemLive currentTs itemTs forwardedByMember createdAt updatedAt = let editable = case itemContent of CISndMsgContent _ -> case chatTypeI @c of - SCTLocal -> isNothing itemDeleted - _ -> diffUTCTime currentTs itemTs < nominalDay && isNothing itemDeleted + SCTLocal -> isNothing itemDeleted && isNothing itemForwarded + _ -> diffUTCTime currentTs itemTs < nominalDay && isNothing itemDeleted && isNothing itemForwarded _ -> False - in CIMeta {itemId, itemTs, itemText, itemStatus, itemSharedMsgId, itemDeleted, itemEdited, itemTimed, itemLive, editable, forwardedByMember, createdAt, updatedAt} + in CIMeta {itemId, itemTs, itemText, itemStatus, itemSharedMsgId, itemForwarded, itemDeleted, itemEdited, itemTimed, itemLive, editable, forwardedByMember, createdAt, updatedAt} dummyMeta :: ChatItemId -> UTCTime -> Text -> CIMeta c 'MDSnd dummyMeta itemId ts itemText = @@ -368,6 +369,7 @@ dummyMeta itemId ts itemText = itemText, itemStatus = CISSndNew, itemSharedMsgId = Nothing, + itemForwarded = Nothing, itemDeleted = Nothing, itemEdited = False, itemTimed = Nothing, @@ -548,6 +550,21 @@ ciFileEnded = \case CIFSRcvError -> True CIFSInvalid {} -> True +ciFileLoaded :: CIFileStatus d -> Bool +ciFileLoaded = \case + CIFSSndStored -> True + CIFSSndTransfer {} -> True + CIFSSndComplete -> True + CIFSSndCancelled -> True + CIFSSndError -> True + CIFSRcvInvitation -> False + CIFSRcvAccepted -> False + CIFSRcvTransfer {} -> False + CIFSRcvCancelled -> False + CIFSRcvComplete -> True + CIFSRcvError -> False + CIFSInvalid {} -> False + data ACIFileStatus = forall d. MsgDirectionI d => AFS (SMsgDirection d) (CIFileStatus d) deriving instance Show ACIFileStatus @@ -981,11 +998,43 @@ itemDeletedTs = \case CIBlockedByAdmin ts -> ts CIModerated ts _ -> ts +data CIForwardedFrom + = CIFFUnknown + | CIFFContact {chatName :: Text, msgDir :: MsgDirection, contactId :: Maybe ContactId, chatItemId :: Maybe ChatItemId} + | CIFFGroup {chatName :: Text, msgDir :: MsgDirection, groupId :: Maybe GroupId, chatItemId :: Maybe ChatItemId} + deriving (Show) + +cmForwardedFrom :: AChatMsgEvent -> Maybe CIForwardedFrom +cmForwardedFrom = \case + ACME _ (XMsgNew (MCForward _)) -> Just CIFFUnknown + _ -> Nothing + +data CIForwardedFromTag + = CIFFUnknown_ + | CIFFContact_ + | CIFFGroup_ + +instance FromField CIForwardedFromTag where fromField = fromTextField_ textDecode + +instance ToField CIForwardedFromTag where toField = toField . textEncode + +instance TextEncoding CIForwardedFromTag where + textDecode = \case + "unknown" -> Just CIFFUnknown_ + "contact" -> Just CIFFContact_ + "group" -> Just CIFFGroup_ + _ -> Nothing + textEncode = \case + CIFFUnknown_ -> "unknown" + CIFFContact_ -> "contact" + CIFFGroup_ -> "group" + data ChatItemInfo = ChatItemInfo { itemVersions :: [ChatItemVersion], - memberDeliveryStatuses :: Maybe [MemberDeliveryStatus] + memberDeliveryStatuses :: Maybe [MemberDeliveryStatus], + forwardedFromChatItem :: Maybe AChatItem } - deriving (Eq, Show) + deriving (Show) data ChatItemVersion = ChatItemVersion { chatItemVersionId :: Int64, @@ -1043,6 +1092,8 @@ instance ChatTypeI c => ToJSON (CIDeleted c) where toJSON = J.toJSON . jsonCIDeleted toEncoding = J.toEncoding . jsonCIDeleted +$(JQ.deriveJSON (sumTypeJSON $ dropPrefix "CIFF") ''CIForwardedFrom) + $(JQ.deriveJSON defaultJSON ''CITimed) $(JQ.deriveJSON (enumJSON $ dropPrefix "SSP") ''SndCIStatusProgress) @@ -1066,8 +1117,6 @@ $(JQ.deriveJSON defaultJSON ''MemberDeliveryStatus) $(JQ.deriveJSON defaultJSON ''ChatItemVersion) -$(JQ.deriveJSON defaultJSON ''ChatItemInfo) - instance (ChatTypeI c, MsgDirectionI d) => FromJSON (CIMeta c d) where parseJSON = $(JQ.mkParseJSON defaultJSON ''CIMeta) @@ -1157,6 +1206,8 @@ instance ChatTypeI c => ToJSON (CChatItem c) where toJSON (CChatItem _ ci) = J.toJSON ci toEncoding (CChatItem _ ci) = J.toEncoding ci +$(JQ.deriveJSON defaultJSON ''ChatItemInfo) + $(JQ.deriveJSON defaultJSON ''ChatStats) instance ChatTypeI c => ToJSON (Chat c) where diff --git a/src/Simplex/Chat/Messages/CIContent.hs b/src/Simplex/Chat/Messages/CIContent.hs index 9266a0c1ca..13aa7ace10 100644 --- a/src/Simplex/Chat/Messages/CIContent.hs +++ b/src/Simplex/Chat/Messages/CIContent.hs @@ -43,6 +43,8 @@ $(JQ.deriveJSON (enumJSON $ dropPrefix "MD") ''MsgDirection) instance FromField AMsgDirection where fromField = fromIntField_ $ fmap fromMsgDirection . msgDirectionIntP +instance FromField MsgDirection where fromField = fromIntField_ msgDirectionIntP + instance ToField MsgDirection where toField = toField . msgDirectionInt data SMsgDirection (d :: MsgDirection) where diff --git a/src/Simplex/Chat/Migrations/M20240402_item_forwarded.hs b/src/Simplex/Chat/Migrations/M20240402_item_forwarded.hs new file mode 100644 index 0000000000..850c8be2d9 --- /dev/null +++ b/src/Simplex/Chat/Migrations/M20240402_item_forwarded.hs @@ -0,0 +1,36 @@ +{-# LANGUAGE QuasiQuotes #-} + +module Simplex.Chat.Migrations.M20240402_item_forwarded where + +import Database.SQLite.Simple (Query) +import Database.SQLite.Simple.QQ (sql) + +m20240402_item_forwarded :: Query +m20240402_item_forwarded = + [sql| +ALTER TABLE chat_items ADD COLUMN fwd_from_tag TEXT; +ALTER TABLE chat_items ADD COLUMN fwd_from_chat_name TEXT; +ALTER TABLE chat_items ADD COLUMN fwd_from_msg_dir INTEGER; +ALTER TABLE chat_items ADD COLUMN fwd_from_contact_id INTEGER REFERENCES contacts ON DELETE SET NULL; +ALTER TABLE chat_items ADD COLUMN fwd_from_group_id INTEGER REFERENCES groups ON DELETE SET NULL; +ALTER TABLE chat_items ADD COLUMN fwd_from_chat_item_id INTEGER REFERENCES chat_items ON DELETE SET NULL; + +CREATE INDEX idx_chat_items_fwd_from_contact_id ON chat_items(fwd_from_contact_id); +CREATE INDEX idx_chat_items_fwd_from_group_id ON chat_items(fwd_from_group_id); +CREATE INDEX idx_chat_items_fwd_from_chat_item_id ON chat_items(fwd_from_chat_item_id); +|] + +down_m20240402_item_forwarded :: Query +down_m20240402_item_forwarded = + [sql| +DROP INDEX idx_chat_items_fwd_from_contact_id; +DROP INDEX idx_chat_items_fwd_from_group_id; +DROP INDEX idx_chat_items_fwd_from_chat_item_id; + +ALTER TABLE chat_items DROP COLUMN fwd_from_tag; +ALTER TABLE chat_items DROP COLUMN fwd_from_chat_name; +ALTER TABLE chat_items DROP COLUMN fwd_from_msg_dir; +ALTER TABLE chat_items DROP COLUMN fwd_from_contact_id; +ALTER TABLE chat_items DROP COLUMN fwd_from_group_id; +ALTER TABLE chat_items DROP COLUMN fwd_from_chat_item_id; +|] diff --git a/src/Simplex/Chat/Migrations/chat_schema.sql b/src/Simplex/Chat/Migrations/chat_schema.sql index 11cbd8ae89..f2d8e59ca7 100644 --- a/src/Simplex/Chat/Migrations/chat_schema.sql +++ b/src/Simplex/Chat/Migrations/chat_schema.sql @@ -382,7 +382,13 @@ CREATE TABLE chat_items( item_deleted_ts TEXT, forwarded_by_group_member_id INTEGER REFERENCES group_members ON DELETE SET NULL, item_content_tag TEXT, - note_folder_id INTEGER DEFAULT NULL REFERENCES note_folders ON DELETE CASCADE + note_folder_id INTEGER DEFAULT NULL REFERENCES note_folders ON DELETE CASCADE, + fwd_from_tag TEXT, + fwd_from_chat_name TEXT, + fwd_from_msg_dir INTEGER, + fwd_from_contact_id INTEGER REFERENCES contacts ON DELETE SET NULL, + fwd_from_group_id INTEGER REFERENCES groups ON DELETE SET NULL, + fwd_from_chat_item_id INTEGER REFERENCES chat_items ON DELETE SET NULL ); CREATE TABLE chat_item_messages( chat_item_id INTEGER NOT NULL REFERENCES chat_items ON DELETE CASCADE, @@ -860,3 +866,10 @@ CREATE INDEX idx_chat_items_notes_item_status on chat_items( item_status ); CREATE INDEX idx_files_redirect_file_id on files(redirect_file_id); +CREATE INDEX idx_chat_items_fwd_from_contact_id ON chat_items( + fwd_from_contact_id +); +CREATE INDEX idx_chat_items_fwd_from_group_id ON chat_items(fwd_from_group_id); +CREATE INDEX idx_chat_items_fwd_from_chat_item_id ON chat_items( + fwd_from_chat_item_id +); diff --git a/src/Simplex/Chat/Protocol.hs b/src/Simplex/Chat/Protocol.hs index e262de0e74..6cdc52a499 100644 --- a/src/Simplex/Chat/Protocol.hs +++ b/src/Simplex/Chat/Protocol.hs @@ -588,6 +588,7 @@ parseMsgContainer :: J.Object -> JT.Parser MsgContainer parseMsgContainer v = MCQuote <$> v .: "quote" <*> mc <|> (v .: "forward" >>= \f -> (if f then MCForward else MCSimple) <$> mc) + <|> (MCForward <$> ((v .: "forward" :: JT.Parser J.Object) *> mc)) <|> MCSimple <$> mc where mc = ExtMsgContent <$> v .: "content" <*> v .:? "file" <*> v .:? "ttl" <*> v .:? "live" diff --git a/src/Simplex/Chat/Store/Messages.hs b/src/Simplex/Chat/Store/Messages.hs index fe89d7f506..11068ff5cb 100644 --- a/src/Simplex/Chat/Store/Messages.hs +++ b/src/Simplex/Chat/Store/Messages.hs @@ -145,8 +145,8 @@ import Simplex.Messaging.Agent.Protocol (AgentMsgId, ConnId, MsgMeta (..), UserI import Simplex.Messaging.Agent.Store.SQLite (firstRow, firstRow', maybeFirstRow) import qualified Simplex.Messaging.Agent.Store.SQLite.DB as DB import qualified Simplex.Messaging.Crypto as C -import Simplex.Messaging.Crypto.Ratchet (PQSupport) import Simplex.Messaging.Crypto.File (CryptoFile (..), CryptoFileArgs (..)) +import Simplex.Messaging.Crypto.Ratchet (PQSupport) import Simplex.Messaging.Util (eitherToMaybe) import UnliftIO.STM @@ -330,9 +330,9 @@ updateChatTs db User {userId} chatDirection chatTs = case toChatInfo chatDirecti (chatTs, userId, noteFolderId) _ -> pure () -createNewSndChatItem :: DB.Connection -> User -> ChatDirection c 'MDSnd -> SndMessage -> CIContent 'MDSnd -> Maybe (CIQuote c) -> Maybe CITimed -> Bool -> UTCTime -> IO ChatItemId -createNewSndChatItem db user chatDirection SndMessage {msgId, sharedMsgId} ciContent quotedItem timed live createdAt = - createNewChatItem_ db user chatDirection createdByMsgId (Just sharedMsgId) ciContent quoteRow timed live createdAt Nothing createdAt +createNewSndChatItem :: DB.Connection -> User -> ChatDirection c 'MDSnd -> SndMessage -> CIContent 'MDSnd -> Maybe (CIQuote c) -> Maybe CIForwardedFrom -> Maybe CITimed -> Bool -> UTCTime -> IO ChatItemId +createNewSndChatItem db user chatDirection SndMessage {msgId, sharedMsgId} ciContent quotedItem itemForwarded timed live createdAt = + createNewChatItem_ db user chatDirection createdByMsgId (Just sharedMsgId) ciContent quoteRow itemForwarded timed live createdAt Nothing createdAt where createdByMsgId = if msgId == 0 then Nothing else Just msgId quoteRow :: NewQuoteRow @@ -346,12 +346,13 @@ createNewSndChatItem db user chatDirection SndMessage {msgId, sharedMsgId} ciCon CIQGroupRcv (Just GroupMember {memberId}) -> (Just False, Just memberId) CIQGroupRcv Nothing -> (Just False, Nothing) -createNewRcvChatItem :: ChatTypeQuotable c => DB.Connection -> User -> ChatDirection c 'MDRcv -> RcvMessage -> Maybe SharedMsgId -> CIContent 'MDRcv -> Maybe CITimed -> Bool -> UTCTime -> UTCTime -> IO (ChatItemId, Maybe (CIQuote c)) +createNewRcvChatItem :: ChatTypeQuotable c => DB.Connection -> User -> ChatDirection c 'MDRcv -> RcvMessage -> Maybe SharedMsgId -> CIContent 'MDRcv -> Maybe CITimed -> Bool -> UTCTime -> UTCTime -> IO (ChatItemId, Maybe (CIQuote c), Maybe CIForwardedFrom) createNewRcvChatItem db user chatDirection RcvMessage {msgId, chatMsgEvent, forwardedByMember} sharedMsgId_ ciContent timed live itemTs createdAt = do - ciId <- createNewChatItem_ db user chatDirection (Just msgId) sharedMsgId_ ciContent quoteRow timed live itemTs forwardedByMember createdAt + ciId <- createNewChatItem_ db user chatDirection (Just msgId) sharedMsgId_ ciContent quoteRow itemForwarded timed live itemTs forwardedByMember createdAt quotedItem <- mapM (getChatItemQuote_ db user chatDirection) quotedMsg - pure (ciId, quotedItem) + pure (ciId, quotedItem, itemForwarded) where + itemForwarded = cmForwardedFrom chatMsgEvent quotedMsg = cmToQuotedMsg chatMsgEvent quoteRow :: NewQuoteRow quoteRow = case quotedMsg of @@ -364,13 +365,13 @@ createNewRcvChatItem db user chatDirection RcvMessage {msgId, chatMsgEvent, forw createNewChatItemNoMsg :: forall c d. MsgDirectionI d => DB.Connection -> User -> ChatDirection c d -> CIContent d -> UTCTime -> UTCTime -> IO ChatItemId createNewChatItemNoMsg db user chatDirection ciContent itemTs = - createNewChatItem_ db user chatDirection Nothing Nothing ciContent quoteRow Nothing False itemTs Nothing + createNewChatItem_ db user chatDirection Nothing Nothing ciContent quoteRow Nothing Nothing False itemTs Nothing where quoteRow :: NewQuoteRow quoteRow = (Nothing, Nothing, Nothing, Nothing, Nothing) -createNewChatItem_ :: forall c d. MsgDirectionI d => DB.Connection -> User -> ChatDirection c d -> Maybe MessageId -> Maybe SharedMsgId -> CIContent d -> NewQuoteRow -> Maybe CITimed -> Bool -> UTCTime -> Maybe GroupMemberId -> UTCTime -> IO ChatItemId -createNewChatItem_ db User {userId} chatDirection msgId_ sharedMsgId ciContent quoteRow timed live itemTs forwardedByMember createdAt = do +createNewChatItem_ :: forall c d. MsgDirectionI d => DB.Connection -> User -> ChatDirection c d -> Maybe MessageId -> Maybe SharedMsgId -> CIContent d -> NewQuoteRow -> Maybe CIForwardedFrom -> Maybe CITimed -> Bool -> UTCTime -> Maybe GroupMemberId -> UTCTime -> IO ChatItemId +createNewChatItem_ db User {userId} chatDirection msgId_ sharedMsgId ciContent quoteRow itemForwarded timed live itemTs forwardedByMember createdAt = do DB.execute db [sql| @@ -381,10 +382,12 @@ createNewChatItem_ db User {userId} chatDirection msgId_ sharedMsgId ciContent q item_sent, item_ts, item_content, item_content_tag, item_text, item_status, shared_msg_id, forwarded_by_group_member_id, created_at, updated_at, item_live, timed_ttl, timed_delete_at, -- quote - quoted_shared_msg_id, quoted_sent_at, quoted_content, quoted_sent, quoted_member_id - ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) + quoted_shared_msg_id, quoted_sent_at, quoted_content, quoted_sent, quoted_member_id, + -- forwarded from + fwd_from_tag, fwd_from_chat_name, fwd_from_msg_dir, fwd_from_contact_id, fwd_from_group_id, fwd_from_chat_item_id + ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) |] - ((userId, msgId_) :. idsRow :. itemRow :. quoteRow) + ((userId, msgId_) :. idsRow :. itemRow :. quoteRow :. forwardedFromRow) ciId <- insertedRowId db forM_ msgId_ $ \msgId -> insertChatItemMessage_ db ciId msgId createdAt pure ciId @@ -399,6 +402,16 @@ createNewChatItem_ db User {userId} chatDirection msgId_ sharedMsgId ciContent q CDGroupSnd GroupInfo {groupId} -> (Nothing, Just groupId, Nothing, Nothing) CDLocalRcv NoteFolder {noteFolderId} -> (Nothing, Nothing, Nothing, Just noteFolderId) CDLocalSnd NoteFolder {noteFolderId} -> (Nothing, Nothing, Nothing, Just noteFolderId) + forwardedFromRow :: (Maybe CIForwardedFromTag, Maybe Text, Maybe MsgDirection, Maybe Int64, Maybe Int64, Maybe Int64) + forwardedFromRow = case itemForwarded of + Nothing -> + (Nothing, Nothing, Nothing, Nothing, Nothing, Nothing) + Just CIFFUnknown -> + (Just CIFFUnknown_, Nothing, Nothing, Nothing, Nothing, Nothing) + Just CIFFContact {chatName, msgDir, contactId, chatItemId} -> + (Just CIFFContact_, Just chatName, Just msgDir, contactId, Nothing, chatItemId) + Just CIFFGroup {chatName, msgDir, groupId, chatItemId} -> + (Just CIFFContact_, Just chatName, Just msgDir, Nothing, groupId, chatItemId) ciTimedRow :: Maybe CITimed -> (Maybe Int, Maybe UTCTime) ciTimedRow (Just CITimed {ttl, deleteAt}) = (Just ttl, deleteAt) @@ -794,7 +807,7 @@ getLocalChatPreview_ db user (LocalChatPD _ noteFolderId lastItemId_ stats) = do -- this function can be changed so it never fails, not only avoid failure on invalid json toLocalChatItem :: UTCTime -> ChatItemRow -> Either StoreError (CChatItem 'CTLocal) -toLocalChatItem currentTs ((itemId, itemTs, AMsgDirection msgDir, itemContentText, itemText, itemStatus, sharedMsgId) :. (itemDeleted, deletedTs, itemEdited, createdAt, updatedAt) :. (timedTTL, timedDeleteAt, itemLive) :. (fileId_, fileName_, fileSize_, filePath, fileKey, fileNonce, fileStatus_, fileProtocol_)) = +toLocalChatItem currentTs ((itemId, itemTs, AMsgDirection msgDir, itemContentText, itemText, itemStatus, sharedMsgId) :. (itemDeleted, deletedTs, itemEdited, createdAt, updatedAt) :. forwardedFromRow :. (timedTTL, timedDeleteAt, itemLive) :. (fileId_, fileName_, fileSize_, filePath, fileKey, fileNonce, fileStatus_, fileProtocol_)) = chatItem $ fromRight invalid $ dbParseACIContent itemContentText where invalid = ACIContent msgDir $ CIInvalidJSON itemContentText @@ -826,7 +839,8 @@ toLocalChatItem currentTs ((itemId, itemTs, AMsgDirection msgDir, itemContentTex DBCINotDeleted -> Nothing _ -> Just (CIDeleted @CTLocal deletedTs) itemEdited' = fromMaybe False itemEdited - in mkCIMeta itemId content itemText status sharedMsgId itemDeleted' itemEdited' ciTimed itemLive currentTs itemTs Nothing createdAt updatedAt + itemForwarded = toCIForwardedFrom forwardedFromRow + in mkCIMeta itemId content itemText status sharedMsgId itemForwarded itemDeleted' itemEdited' ciTimed itemLive currentTs itemTs Nothing createdAt updatedAt ciTimed :: Maybe CITimed ciTimed = timedTTL >>= \ttl -> Just CITimed {ttl, deleteAt = timedDeleteAt} @@ -1391,7 +1405,14 @@ type MaybeCIFIleRow = (Maybe Int64, Maybe String, Maybe Integer, Maybe FilePath, type ChatItemModeRow = (Maybe Int, Maybe UTCTime, Maybe Bool) -type ChatItemRow = (Int64, ChatItemTs, AMsgDirection, Text, Text, ACIStatus, Maybe SharedMsgId) :. (Int, Maybe UTCTime, Maybe Bool, UTCTime, UTCTime) :. ChatItemModeRow :. MaybeCIFIleRow +type ChatItemForwardedFromRow = (Maybe CIForwardedFromTag, Maybe Text, Maybe MsgDirection, Maybe Int64, Maybe Int64, Maybe Int64) + +type ChatItemRow = + (Int64, ChatItemTs, AMsgDirection, Text, Text, ACIStatus, Maybe SharedMsgId) + :. (Int, Maybe UTCTime, Maybe Bool, UTCTime, UTCTime) + :. ChatItemForwardedFromRow + :. ChatItemModeRow + :. MaybeCIFIleRow type QuoteRow = (Maybe ChatItemId, Maybe SharedMsgId, Maybe UTCTime, Maybe MsgContent, Maybe Bool) @@ -1406,7 +1427,7 @@ toQuote (quotedItemId, quotedSharedMsgId, quotedSentAt, quotedMsgContent, _) dir -- this function can be changed so it never fails, not only avoid failure on invalid json toDirectChatItem :: UTCTime -> ChatItemRow :. QuoteRow -> Either StoreError (CChatItem 'CTDirect) -toDirectChatItem currentTs (((itemId, itemTs, AMsgDirection msgDir, itemContentText, itemText, itemStatus, sharedMsgId) :. (itemDeleted, deletedTs, itemEdited, createdAt, updatedAt) :. (timedTTL, timedDeleteAt, itemLive) :. (fileId_, fileName_, fileSize_, filePath, fileKey, fileNonce, fileStatus_, fileProtocol_)) :. quoteRow) = +toDirectChatItem currentTs (((itemId, itemTs, AMsgDirection msgDir, itemContentText, itemText, itemStatus, sharedMsgId) :. (itemDeleted, deletedTs, itemEdited, createdAt, updatedAt) :. forwardedFromRow :. (timedTTL, timedDeleteAt, itemLive) :. (fileId_, fileName_, fileSize_, filePath, fileKey, fileNonce, fileStatus_, fileProtocol_)) :. quoteRow) = chatItem $ fromRight invalid $ dbParseACIContent itemContentText where invalid = ACIContent msgDir $ CIInvalidJSON itemContentText @@ -1438,10 +1459,19 @@ toDirectChatItem currentTs (((itemId, itemTs, AMsgDirection msgDir, itemContentT DBCINotDeleted -> Nothing _ -> Just (CIDeleted @CTDirect deletedTs) itemEdited' = fromMaybe False itemEdited - in mkCIMeta itemId content itemText status sharedMsgId itemDeleted' itemEdited' ciTimed itemLive currentTs itemTs Nothing createdAt updatedAt + itemForwarded = toCIForwardedFrom forwardedFromRow + in mkCIMeta itemId content itemText status sharedMsgId itemForwarded itemDeleted' itemEdited' ciTimed itemLive currentTs itemTs Nothing createdAt updatedAt ciTimed :: Maybe CITimed ciTimed = timedTTL >>= \ttl -> Just CITimed {ttl, deleteAt = timedDeleteAt} +toCIForwardedFrom :: ChatItemForwardedFromRow -> Maybe CIForwardedFrom +toCIForwardedFrom (fwdFromTag, fwdFromChatName, fwdFromMsgDir, fwdFromContactId, fwdFromGroupId, fwdFromChatItemId) = + case (fwdFromTag, fwdFromChatName, fwdFromMsgDir, fwdFromContactId, fwdFromGroupId, fwdFromChatItemId) of + (Just CIFFUnknown_, Nothing, Nothing, Nothing, Nothing, Nothing) -> Just CIFFUnknown + (Just CIFFContact_, Just chatName, Just msgDir, contactId, Nothing, chatId) -> Just $ CIFFContact chatName msgDir contactId chatId + (Just CIFFGroup_, Just chatName, Just msgDir, Nothing, groupId, chatId) -> Just $ CIFFGroup chatName msgDir groupId chatId + _ -> Nothing + type GroupQuoteRow = QuoteRow :. MaybeGroupMemberRow toGroupQuote :: QuoteRow -> Maybe GroupMember -> Maybe (CIQuote 'CTGroup) @@ -1454,7 +1484,7 @@ toGroupQuote qr@(_, _, _, _, quotedSent) quotedMember_ = toQuote qr $ direction -- this function can be changed so it never fails, not only avoid failure on invalid json toGroupChatItem :: UTCTime -> Int64 -> ChatItemRow :. Only (Maybe GroupMemberId) :. MaybeGroupMemberRow :. GroupQuoteRow :. MaybeGroupMemberRow -> Either StoreError (CChatItem 'CTGroup) -toGroupChatItem currentTs userContactId (((itemId, itemTs, AMsgDirection msgDir, itemContentText, itemText, itemStatus, sharedMsgId) :. (itemDeleted, deletedTs, itemEdited, createdAt, updatedAt) :. (timedTTL, timedDeleteAt, itemLive) :. (fileId_, fileName_, fileSize_, filePath, fileKey, fileNonce, fileStatus_, fileProtocol_)) :. Only forwardedByMember :. memberRow_ :. (quoteRow :. quotedMemberRow_) :. deletedByGroupMemberRow_) = do +toGroupChatItem currentTs userContactId (((itemId, itemTs, AMsgDirection msgDir, itemContentText, itemText, itemStatus, sharedMsgId) :. (itemDeleted, deletedTs, itemEdited, createdAt, updatedAt) :. forwardedFromRow :. (timedTTL, timedDeleteAt, itemLive) :. (fileId_, fileName_, fileSize_, filePath, fileKey, fileNonce, fileStatus_, fileProtocol_)) :. Only forwardedByMember :. memberRow_ :. (quoteRow :. quotedMemberRow_) :. deletedByGroupMemberRow_) = do chatItem $ fromRight invalid $ dbParseACIContent itemContentText where member_ = toMaybeGroupMember userContactId memberRow_ @@ -1491,7 +1521,8 @@ toGroupChatItem currentTs userContactId (((itemId, itemTs, AMsgDirection msgDir, DBCIBlockedByAdmin -> Just (CIBlockedByAdmin deletedTs) _ -> Just (maybe (CIDeleted @CTGroup deletedTs) (CIModerated deletedTs) deletedByGroupMember_) itemEdited' = fromMaybe False itemEdited - in mkCIMeta itemId content itemText status sharedMsgId itemDeleted' itemEdited' ciTimed itemLive currentTs itemTs forwardedByMember createdAt updatedAt + itemForwarded = toCIForwardedFrom forwardedFromRow + in mkCIMeta itemId content itemText status sharedMsgId itemForwarded itemDeleted' itemEdited' ciTimed itemLive currentTs itemTs forwardedByMember createdAt updatedAt ciTimed :: Maybe CITimed ciTimed = timedTTL >>= \ttl -> Just CITimed {ttl, deleteAt = timedDeleteAt} @@ -1726,7 +1757,10 @@ getDirectChatItem db User {userId} contactId itemId = ExceptT $ do [sql| SELECT -- ChatItem - i.chat_item_id, i.item_ts, i.item_sent, i.item_content, i.item_text, i.item_status, i.shared_msg_id, i.item_deleted, i.item_deleted_ts, i.item_edited, i.created_at, i.updated_at, i.timed_ttl, i.timed_delete_at, i.item_live, + i.chat_item_id, i.item_ts, i.item_sent, i.item_content, i.item_text, i.item_status, i.shared_msg_id, + i.item_deleted, i.item_deleted_ts, i.item_edited, i.created_at, i.updated_at, + i.fwd_from_tag, i.fwd_from_chat_name, i.fwd_from_msg_dir, i.fwd_from_contact_id, i.fwd_from_group_id, i.fwd_from_chat_item_id, + i.timed_ttl, i.timed_delete_at, i.item_live, -- CIFile f.file_id, f.file_name, f.file_size, f.file_path, f.file_crypto_key, f.file_crypto_nonce, f.ci_file_status, f.protocol, -- DirectQuote @@ -1966,7 +2000,10 @@ getGroupChatItem db User {userId, userContactId} groupId itemId = ExceptT $ do [sql| SELECT -- ChatItem - i.chat_item_id, i.item_ts, i.item_sent, i.item_content, i.item_text, i.item_status, i.shared_msg_id, i.item_deleted, i.item_deleted_ts, i.item_edited, i.created_at, i.updated_at, i.timed_ttl, i.timed_delete_at, i.item_live, + i.chat_item_id, i.item_ts, i.item_sent, i.item_content, i.item_text, i.item_status, i.shared_msg_id, + i.item_deleted, i.item_deleted_ts, i.item_edited, i.created_at, i.updated_at, + i.fwd_from_tag, i.fwd_from_chat_name, i.fwd_from_msg_dir, i.fwd_from_contact_id, i.fwd_from_group_id, i.fwd_from_chat_item_id, + i.timed_ttl, i.timed_delete_at, i.item_live, -- CIFile f.file_id, f.file_name, f.file_size, f.file_path, f.file_crypto_key, f.file_crypto_nonce, f.ci_file_status, f.protocol, -- CIMeta forwardedByMember @@ -2067,7 +2104,10 @@ getLocalChatItem db User {userId} folderId itemId = ExceptT $ do [sql| SELECT -- ChatItem - i.chat_item_id, i.item_ts, i.item_sent, i.item_content, i.item_text, i.item_status, i.shared_msg_id, i.item_deleted, i.item_deleted_ts, i.item_edited, i.created_at, i.updated_at, i.timed_ttl, i.timed_delete_at, i.item_live, + i.chat_item_id, i.item_ts, i.item_sent, i.item_content, i.item_text, i.item_status, i.shared_msg_id, + i.item_deleted, i.item_deleted_ts, i.item_edited, i.created_at, i.updated_at, + i.fwd_from_tag, i.fwd_from_chat_name, i.fwd_from_msg_dir, i.fwd_from_contact_id, i.fwd_from_group_id, i.fwd_from_chat_item_id, + i.timed_ttl, i.timed_delete_at, i.item_live, -- CIFile f.file_id, f.file_name, f.file_size, f.file_path, f.file_crypto_key, f.file_crypto_nonce, f.ci_file_status, f.protocol FROM chat_items i diff --git a/src/Simplex/Chat/Store/Migrations.hs b/src/Simplex/Chat/Store/Migrations.hs index e351f0f27a..7a3fb75da3 100644 --- a/src/Simplex/Chat/Store/Migrations.hs +++ b/src/Simplex/Chat/Store/Migrations.hs @@ -104,6 +104,7 @@ import Simplex.Chat.Migrations.M20240226_users_restrict import Simplex.Chat.Migrations.M20240228_pq import Simplex.Chat.Migrations.M20240313_drop_agent_ack_cmd_id import Simplex.Chat.Migrations.M20240324_custom_data +import Simplex.Chat.Migrations.M20240402_item_forwarded import Simplex.Messaging.Agent.Store.SQLite.Migrations (Migration (..)) schemaMigrations :: [(String, Query, Maybe Query)] @@ -207,7 +208,8 @@ schemaMigrations = ("20240226_users_restrict", m20240226_users_restrict, Just down_m20240226_users_restrict), ("20240228_pq", m20240228_pq, Just down_m20240228_pq), ("20240313_drop_agent_ack_cmd_id", m20240313_drop_agent_ack_cmd_id, Just down_m20240313_drop_agent_ack_cmd_id), - ("20240324_custom_data", m20240324_custom_data, Just down_m20240324_custom_data) + ("20240324_custom_data", m20240324_custom_data, Just down_m20240324_custom_data), + ("20240402_item_forwarded", m20240402_item_forwarded, Just down_m20240402_item_forwarded) ] -- | The list of migrations in ascending order by date diff --git a/src/Simplex/Chat/Terminal/Input.hs b/src/Simplex/Chat/Terminal/Input.hs index 7b96abc1ce..5c36994190 100644 --- a/src/Simplex/Chat/Terminal/Input.hs +++ b/src/Simplex/Chat/Terminal/Input.hs @@ -86,7 +86,10 @@ runInputLoop ct@ChatTerminal {termState, liveMessageState} cc = forever $ do Right SendLiveMessage {} -> True Right SendFile {} -> True Right SendMessageQuote {} -> True + Right ForwardMessage {} -> True + Right ForwardLocalMessage {} -> True Right SendGroupMessageQuote {} -> True + Right ForwardGroupMessage {} -> True Right SendMessageBroadcast {} -> True _ -> False startLiveMessage :: Either a ChatCommand -> ChatResponse -> IO () diff --git a/src/Simplex/Chat/View.hs b/src/Simplex/Chat/View.hs index 55e0078d0d..c136300bc5 100644 --- a/src/Simplex/Chat/View.hs +++ b/src/Simplex/Chat/View.hs @@ -536,60 +536,68 @@ viewChats ts tz = concatMap chatPreview . reverse _ -> [] viewChatItem :: forall c d. MsgDirectionI d => ChatInfo c -> ChatItem c d -> Bool -> CurrentTime -> TimeZone -> [StyledString] -viewChatItem chat ci@ChatItem {chatDir, meta = meta@CIMeta {forwardedByMember}, content, quotedItem, file} doShow ts tz = +viewChatItem chat ci@ChatItem {chatDir, meta = meta@CIMeta {itemForwarded, forwardedByMember}, content, quotedItem, file} doShow ts tz = withGroupMsgForwarded . withItemDeleted <$> viewCI where viewCI = case chat of DirectChat c -> case chatDir of CIDirectSnd -> case content of - CISndMsgContent mc -> hideLive meta $ withSndFile to $ sndMsg to quote mc + CISndMsgContent mc -> hideLive meta $ withSndFile to $ sndMsg to context mc CISndGroupEvent {} -> showSndItemProhibited to _ -> showSndItem to where to = ttyToContact' c CIDirectRcv -> case content of - CIRcvMsgContent mc -> withRcvFile from $ rcvMsg from quote mc + CIRcvMsgContent mc -> withRcvFile from $ rcvMsg from context mc CIRcvIntegrityError err -> viewRcvIntegrityError from err ts tz meta CIRcvGroupEvent {} -> showRcvItemProhibited from _ -> showRcvItem from where from = ttyFromContact c where - quote = maybe [] (directQuote chatDir) quotedItem + context = + maybe + (maybe [] forwardedFrom itemForwarded) + (directQuote chatDir) + quotedItem GroupChat g -> case chatDir of CIGroupSnd -> case content of - CISndMsgContent mc -> hideLive meta $ withSndFile to $ sndMsg to quote mc + CISndMsgContent mc -> hideLive meta $ withSndFile to $ sndMsg to context mc CISndGroupInvitation {} -> showSndItemProhibited to _ -> showSndItem to where to = ttyToGroup g CIGroupRcv m -> case content of - CIRcvMsgContent mc -> withRcvFile from $ rcvMsg from quote mc + CIRcvMsgContent mc -> withRcvFile from $ rcvMsg from context mc CIRcvIntegrityError err -> viewRcvIntegrityError from err ts tz meta CIRcvGroupInvitation {} -> showRcvItemProhibited from - CIRcvModerated {} -> receivedWithTime_ ts tz (ttyFromGroup g m) quote meta [plainContent content] False - CIRcvBlocked {} -> receivedWithTime_ ts tz (ttyFromGroup g m) quote meta [plainContent content] False + CIRcvModerated {} -> receivedWithTime_ ts tz (ttyFromGroup g m) context meta [plainContent content] False + CIRcvBlocked {} -> receivedWithTime_ ts tz (ttyFromGroup g m) context meta [plainContent content] False _ -> showRcvItem from where from = ttyFromGroup g m where - quote = maybe [] (groupQuote g) quotedItem + context = + maybe + (maybe [] forwardedFrom itemForwarded) + (groupQuote g) + quotedItem LocalChat _ -> case chatDir of CILocalSnd -> case content of - CISndMsgContent mc -> hideLive meta $ withLocalFile to $ sndMsg to quote mc + CISndMsgContent mc -> hideLive meta $ withLocalFile to $ sndMsg to context mc CISndGroupEvent {} -> showSndItemProhibited to _ -> showSndItem to where to = "* " CILocalRcv -> case content of - CIRcvMsgContent mc -> withLocalFile from $ rcvMsg from quote mc + CIRcvMsgContent mc -> withLocalFile from $ rcvMsg from context mc CIRcvIntegrityError err -> viewRcvIntegrityError from err ts tz meta CIRcvGroupEvent {} -> showRcvItemProhibited from _ -> showRcvItem from where from = "* " where - quote = [] + context = maybe [] forwardedFrom itemForwarded ContactRequest {} -> [] ContactConnection {} -> [] withItemDeleted item = case chatItemDeletedText ci (chatInfoMembership chat) of @@ -604,10 +612,10 @@ viewChatItem chat ci@ChatItem {chatDir, meta = meta@CIMeta {forwardedByMember}, withFile view dir l = maybe l (\f -> l <> view dir f ts tz meta) file sndMsg = msg viewSentMessage rcvMsg = msg viewReceivedMessage - msg view dir quote mc = case (msgContentText mc, file, quote) of + msg view dir context mc = case (msgContentText mc, file, context) of ("", Just _, []) -> [] - ("", Just CIFile {fileName}, _) -> view dir quote (MCText $ T.pack fileName) ts tz meta - _ -> view dir quote mc ts tz meta + ("", Just CIFile {fileName}, _) -> view dir context (MCText $ T.pack fileName) ts tz meta + _ -> view dir context mc ts tz meta showSndItem to = showItem $ sentWithTime_ ts tz [to <> plainContent content] meta showRcvItem from = showItem $ receivedWithTime_ ts tz from [] meta [plainContent content] False showSndItemProhibited to = showItem $ sentWithTime_ ts tz [to <> plainContent content <> " " <> prohibited] meta @@ -617,11 +625,12 @@ viewChatItem chat ci@ChatItem {chatDir, meta = meta@CIMeta {forwardedByMember}, prohibited = styled (colored Red) ("[unexpected chat item created, please report to developers]" :: String) viewChatItemInfo :: AChatItem -> ChatItemInfo -> TimeZone -> [StyledString] -viewChatItemInfo (AChatItem _ msgDir _ ChatItem {meta = CIMeta {itemTs, itemTimed, createdAt}}) ChatItemInfo {itemVersions} tz = +viewChatItemInfo (AChatItem _ msgDir _ ChatItem {meta = CIMeta {itemTs, itemTimed, createdAt}}) ChatItemInfo {itemVersions, forwardedFromChatItem} tz = ["sent at: " <> ts itemTs] <> receivedAt <> toBeDeletedAt <> versions + <> forwardedFrom' where ts = styleTime . localTs tz receivedAt = case msgDir of @@ -634,7 +643,21 @@ viewChatItemInfo (AChatItem _ msgDir _ ChatItem {meta = CIMeta {itemTs, itemTime if null itemVersions then [] else ["message history:"] <> concatMap version itemVersions - version ChatItemVersion {msgContent, itemVersionTs} = prependFirst (ts itemVersionTs <> styleTime ": ") $ ttyMsgContent msgContent + where + version ChatItemVersion {msgContent, itemVersionTs} = prependFirst (ts itemVersionTs <> styleTime ": ") $ ttyMsgContent msgContent + forwardedFrom' = + case forwardedFromChatItem of + Just fwdACI@(AChatItem _ fwdMsgDir fwdChatInfo _) -> + [plain $ "forwarded from: " <> maybe "" (<> ", ") fwdDir_ <> fwdItemId] + where + fwdDir_ = case (fwdMsgDir, fwdChatInfo) of + (SMDSnd, DirectChat ct) -> Just $ "you @" <> viewContactName ct + (SMDRcv, DirectChat ct) -> Just $ "@" <> viewContactName ct + (SMDSnd, GroupChat gInfo) -> Just $ "you #" <> viewGroupName gInfo + (SMDRcv, GroupChat gInfo) -> Just $ "#" <> viewGroupName gInfo + _ -> Nothing + fwdItemId = "chat item id: " <> (T.pack . show $ aChatItemId fwdACI) + _ -> [] localTs :: TimeZone -> UTCTime -> String localTs tz ts = do @@ -666,37 +689,45 @@ viewDeliveryReceipt = \case MRBadMsgHash -> ttyError' "⩗!" viewItemUpdate :: MsgDirectionI d => ChatInfo c -> ChatItem c d -> Bool -> CurrentTime -> TimeZone -> [StyledString] -viewItemUpdate chat ChatItem {chatDir, meta = meta@CIMeta {itemEdited, itemLive}, content, quotedItem} liveItems ts tz = case chat of +viewItemUpdate chat ChatItem {chatDir, meta = meta@CIMeta {itemForwarded, itemEdited, itemLive}, content, quotedItem} liveItems ts tz = case chat of DirectChat c -> case chatDir of CIDirectRcv -> case content of CIRcvMsgContent mc | itemLive == Just True && not liveItems -> [] - | otherwise -> viewReceivedUpdatedMessage from quote mc ts tz meta + | otherwise -> viewReceivedUpdatedMessage from context mc ts tz meta _ -> [] where from = if itemEdited then ttyFromContactEdited c else ttyFromContact c CIDirectSnd -> case content of - CISndMsgContent mc -> hideLive meta $ viewSentMessage to quote mc ts tz meta + CISndMsgContent mc -> hideLive meta $ viewSentMessage to context mc ts tz meta _ -> [] where to = if itemEdited then ttyToContactEdited' c else ttyToContact' c where - quote = maybe [] (directQuote chatDir) quotedItem + context = + maybe + (maybe [] forwardedFrom itemForwarded) + (directQuote chatDir) + quotedItem GroupChat g -> case chatDir of CIGroupRcv m -> case content of CIRcvMsgContent mc | itemLive == Just True && not liveItems -> [] - | otherwise -> viewReceivedUpdatedMessage from quote mc ts tz meta + | otherwise -> viewReceivedUpdatedMessage from context mc ts tz meta _ -> [] where from = if itemEdited then ttyFromGroupEdited g m else ttyFromGroup g m CIGroupSnd -> case content of - CISndMsgContent mc -> hideLive meta $ viewSentMessage to quote mc ts tz meta + CISndMsgContent mc -> hideLive meta $ viewSentMessage to context mc ts tz meta _ -> [] where to = if itemEdited then ttyToGroupEdited g else ttyToGroup g where - quote = maybe [] (groupQuote g) quotedItem + context = + maybe + (maybe [] forwardedFrom itemForwarded) + (groupQuote g) + quotedItem _ -> [] hideLive :: CIMeta c d -> [StyledString] -> [StyledString] @@ -778,6 +809,14 @@ directQuote _ CIQuote {content = qmc, chatDir = quoteDir} = groupQuote :: GroupInfo -> CIQuote 'CTGroup -> [StyledString] groupQuote g CIQuote {content = qmc, chatDir = quoteDir} = quoteText qmc . ttyQuotedMember $ sentByMember g quoteDir +forwardedFrom :: CIForwardedFrom -> [StyledString] +forwardedFrom = \case + CIFFUnknown -> ["-> forwarded"] + CIFFContact c MDSnd _ _ -> ["<- you @" <> (plain . viewName) c] + CIFFContact c MDRcv _ _ -> ["<- @" <> (plain . viewName) c] + CIFFGroup g MDSnd _ _ -> ["<- you #" <> (plain . viewName) g] + CIFFGroup g MDRcv _ _ -> ["<- #" <> (plain . viewName) g] + sentByMember :: GroupInfo -> CIQDirection 'CTGroup -> Maybe GroupMember sentByMember GroupInfo {membership} = \case CIQGroupSnd -> Just membership @@ -836,7 +875,9 @@ viewChatCleared :: AChatInfo -> [StyledString] viewChatCleared (AChatInfo _ chatInfo) = case chatInfo of DirectChat ct -> [ttyContact' ct <> ": all messages are removed locally ONLY"] GroupChat gi -> [ttyGroup' gi <> ": all messages are removed locally ONLY"] - _ -> [] + LocalChat _ -> ["notes: all messages are removed"] + ContactRequest _ -> [] + ContactConnection _ -> [] viewContactsList :: [Contact] -> [StyledString] viewContactsList = @@ -1484,17 +1525,17 @@ viewReceivedUpdatedMessage :: StyledString -> [StyledString] -> MsgContent -> Cu viewReceivedUpdatedMessage = viewReceivedMessage_ True viewReceivedMessage_ :: Bool -> StyledString -> [StyledString] -> MsgContent -> CurrentTime -> TimeZone -> CIMeta c d -> [StyledString] -viewReceivedMessage_ updated from quote mc ts tz meta = receivedWithTime_ ts tz from quote meta (ttyMsgContent mc) updated +viewReceivedMessage_ updated from context mc ts tz meta = receivedWithTime_ ts tz from context meta (ttyMsgContent mc) updated viewReceivedReaction :: StyledString -> [StyledString] -> StyledString -> CurrentTime -> TimeZone -> UTCTime -> [StyledString] viewReceivedReaction from styledMsg reactionText ts tz reactionTs = prependFirst (ttyMsgTime ts tz reactionTs <> " " <> from) (styledMsg <> [" " <> reactionText]) receivedWithTime_ :: CurrentTime -> TimeZone -> StyledString -> [StyledString] -> CIMeta c d -> [StyledString] -> Bool -> [StyledString] -receivedWithTime_ ts tz from quote CIMeta {itemId, itemTs, itemEdited, itemDeleted, itemLive} styledMsg updated = do - prependFirst (ttyMsgTime ts tz itemTs <> " " <> from) (quote <> prependFirst (indent <> live) styledMsg) +receivedWithTime_ ts tz from context CIMeta {itemId, itemTs, itemEdited, itemDeleted, itemLive} styledMsg updated = do + prependFirst (ttyMsgTime ts tz itemTs <> " " <> from) (context <> prependFirst (indent <> live) styledMsg) where - indent = if null quote then "" else " " + indent = if null context then "" else " " live | itemEdited || isJust itemDeleted = "" | otherwise = case itemLive of @@ -1522,9 +1563,9 @@ recent now tz time = do || (localNow < currentDay12 && localTime >= previousDay18 && localTimeDay < localNowDay) viewSentMessage :: StyledString -> [StyledString] -> MsgContent -> CurrentTime -> TimeZone -> CIMeta c d -> [StyledString] -viewSentMessage to quote mc ts tz meta@CIMeta {itemEdited, itemDeleted, itemLive} = sentWithTime_ ts tz (prependFirst to $ quote <> prependFirst (indent <> live) (ttyMsgContent mc)) meta +viewSentMessage to context mc ts tz meta@CIMeta {itemEdited, itemDeleted, itemLive} = sentWithTime_ ts tz (prependFirst to $ context <> prependFirst (indent <> live) (ttyMsgContent mc)) meta where - indent = if null quote then "" else " " + indent = if null context then "" else " " live | itemEdited || isJust itemDeleted = "" | otherwise = case itemLive of @@ -1926,6 +1967,7 @@ viewChatError logLevel testView = \case CEFallbackToSMPProhibited fileId -> ["recipient tried to accept file " <> sShow fileId <> " via old protocol, prohibited"] CEInlineFileProhibited _ -> ["A small file sent without acceptance - you can enable receiving such files with -f option."] CEInvalidQuote -> ["cannot reply to this message"] + CEInvalidForward -> ["cannot forward this message"] CEInvalidChatItemUpdate -> ["cannot update this item"] CEInvalidChatItemDelete -> ["cannot delete this item"] CEHasCurrentCall -> ["call already in progress"] diff --git a/tests/ChatTests.hs b/tests/ChatTests.hs index 77d256a240..e8f3838eb6 100644 --- a/tests/ChatTests.hs +++ b/tests/ChatTests.hs @@ -3,6 +3,7 @@ module ChatTests where import ChatTests.ChatList import ChatTests.Direct import ChatTests.Files +import ChatTests.Forward import ChatTests.Groups import ChatTests.Local import ChatTests.Profiles @@ -11,6 +12,7 @@ import Test.Hspec hiding (it) chatTests :: SpecWith FilePath chatTests = do describe "direct tests" chatDirectTests + describe "forward tests" chatForwardTests describe "group tests" chatGroupTests describe "local chats tests" chatLocalChatsTests describe "file tests" chatFileTests diff --git a/tests/ChatTests/Files.hs b/tests/ChatTests/Files.hs index e50b20844a..572d9294a9 100644 --- a/tests/ChatTests/Files.hs +++ b/tests/ChatTests/Files.hs @@ -617,20 +617,8 @@ testXFTPWithRelativePaths = withXFTPServer $ do -- agent is passed xftp work directory only on chat start, -- so for test we work around by stopping and starting chat - alice ##> "/_stop" - alice <## "chat stopped" - alice #$> ("/_files_folder ./tests/fixtures", id, "ok") - alice #$> ("/_temp_folder ./tests/tmp/alice_xftp", id, "ok") - alice ##> "/_start" - alice <## "chat started" - - bob ##> "/_stop" - bob <## "chat stopped" - bob #$> ("/_files_folder ./tests/tmp/bob_files", id, "ok") - bob #$> ("/_temp_folder ./tests/tmp/bob_xftp", id, "ok") - bob ##> "/_start" - bob <## "chat started" - + setRelativePaths alice "./tests/fixtures" "./tests/tmp/alice_xftp" + setRelativePaths bob "./tests/tmp/bob_files" "./tests/tmp/bob_xftp" connectUsers alice bob alice #> "/f @bob test.pdf" diff --git a/tests/ChatTests/Forward.hs b/tests/ChatTests/Forward.hs new file mode 100644 index 0000000000..6aea8447b9 --- /dev/null +++ b/tests/ChatTests/Forward.hs @@ -0,0 +1,523 @@ +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE PostfixOperators #-} + +module ChatTests.Forward where + +import ChatClient +import ChatTests.Utils +import qualified Data.ByteString.Char8 as B +import System.Directory (copyFile, doesFileExist) +import Test.Hspec hiding (it) + +chatForwardTests :: SpecWith FilePath +chatForwardTests = do + describe "forward messages" $ do + it "from contact to contact" testForwardContactToContact + it "from contact to group" testForwardContactToGroup + it "from contact to notes" testForwardContactToNotes + it "from group to contact" testForwardGroupToContact + it "from group to group" testForwardGroupToGroup + it "from group to notes" testForwardGroupToNotes + it "from notes to contact" testForwardNotesToContact + it "from notes to group" testForwardNotesToGroup + it "from notes to notes" testForwardNotesToNotes -- TODO forward between different folders when supported + describe "interactions with forwarded messages" $ do + it "preserve original forward info" testForwardPreserveInfo + it "quoted message is not included" testForwardQuotedMsg + it "editing is prohibited" testForwardEditProhibited + describe "forward files" $ do + it "from contact to contact" testForwardFileNoFilesFolder + it "with relative paths: from contact to contact" testForwardFileContactToContact + it "with relative paths: from group to notes" testForwardFileGroupToNotes + it "with relative paths: from notes to group" testForwardFileNotesToGroup + +testForwardContactToContact :: HasCallStack => FilePath -> IO () +testForwardContactToContact = + testChat3 aliceProfile bobProfile cathProfile $ + \alice bob cath -> do + connectUsers alice bob + connectUsers alice cath + connectUsers bob cath + + alice #> "@bob hi" + bob <# "alice> hi" + msgId <- lastItemId alice + bob #> "@alice hey" + alice <# "bob> hey" + + alice ##> ("/_forward @3 @2 " <> msgId) + alice <# "@cath <- you @bob" + alice <## " hi" + cath <# "alice> -> forwarded" + cath <## " hi" + + alice `send` "@cath <- @bob hey" + alice <# "@cath <- @bob" + alice <## " hey" + cath <# "alice> -> forwarded" + cath <## " hey" + + -- read chat + alice ##> "/tail @cath 2" + alice <# "@cath <- you @bob" + alice <## " hi" + alice <# "@cath <- @bob" + alice <## " hey" + + cath ##> "/tail @alice 2" + cath <# "alice> -> forwarded" + cath <## " hi" + cath <# "alice> -> forwarded" + cath <## " hey" + + -- item info + alice ##> "/item info @cath hey" + alice <##. "sent at: " + alice <## "message history:" + alice .<## ": hey" + alice <##. "forwarded from: @bob, chat item id:" + +testForwardContactToGroup :: HasCallStack => FilePath -> IO () +testForwardContactToGroup = + testChat3 aliceProfile bobProfile cathProfile $ + \alice bob cath -> do + connectUsers alice bob + createGroup2 "team" alice cath + + alice #> "@bob hi" + bob <# "alice> hi" + bob #> "@alice hey" + alice <# "bob> hey" + + alice `send` "#team <- @bob hi" + alice <# "#team <- you @bob" + alice <## " hi" + cath <# "#team alice> -> forwarded" + cath <## " hi" + + alice `send` "#team <- @bob hey" + alice <# "#team <- @bob" + alice <## " hey" + cath <# "#team alice> -> forwarded" + cath <## " hey" + +testForwardContactToNotes :: HasCallStack => FilePath -> IO () +testForwardContactToNotes = + testChat2 aliceProfile bobProfile $ + \alice bob -> do + createCCNoteFolder alice + connectUsers alice bob + + alice #> "@bob hi" + bob <# "alice> hi" + bob #> "@alice hey" + alice <# "bob> hey" + + alice `send` "* <- @bob hi" + alice <# "* <- you @bob" + alice <## " hi" + + alice `send` "* <- @bob hey" + alice <# "* <- @bob" + alice <## " hey" + +testForwardGroupToContact :: HasCallStack => FilePath -> IO () +testForwardGroupToContact = + testChat3 aliceProfile bobProfile cathProfile $ + \alice bob cath -> do + createGroup2 "team" alice bob + connectUsers alice cath + + alice #> "#team hi" + bob <# "#team alice> hi" + bob #> "#team hey" + alice <# "#team bob> hey" + + alice `send` "@cath <- #team hi" + alice <# "@cath <- you #team" + alice <## " hi" + cath <# "alice> -> forwarded" + cath <## " hi" + + alice `send` "@cath <- #team @bob hey" + alice <# "@cath <- #team" + alice <## " hey" + cath <# "alice> -> forwarded" + cath <## " hey" + +testForwardGroupToGroup :: HasCallStack => FilePath -> IO () +testForwardGroupToGroup = + testChat3 aliceProfile bobProfile cathProfile $ + \alice bob cath -> do + createGroup2 "team" alice bob + createGroup2 "club" alice cath + + alice #> "#team hi" + bob <# "#team alice> hi" + bob #> "#team hey" + alice <# "#team bob> hey" + + alice `send` "#club <- #team hi" + alice <# "#club <- you #team" + alice <## " hi" + cath <# "#club alice> -> forwarded" + cath <## " hi" + + alice `send` "#club <- #team hey" + alice <# "#club <- #team" + alice <## " hey" + cath <# "#club alice> -> forwarded" + cath <## " hey" + +testForwardGroupToNotes :: HasCallStack => FilePath -> IO () +testForwardGroupToNotes = + testChat2 aliceProfile bobProfile $ + \alice bob -> do + createCCNoteFolder alice + createGroup2 "team" alice bob + + alice #> "#team hi" + bob <# "#team alice> hi" + bob #> "#team hey" + alice <# "#team bob> hey" + + alice `send` "* <- #team hi" + alice <# "* <- you #team" + alice <## " hi" + + alice `send` "* <- #team hey" + alice <# "* <- #team" + alice <## " hey" + +testForwardNotesToContact :: HasCallStack => FilePath -> IO () +testForwardNotesToContact = + testChat2 aliceProfile cathProfile $ + \alice cath -> do + createCCNoteFolder alice + connectUsers alice cath + + alice /* "hi" + + alice `send` "@cath <- * hi" + alice <# "@cath hi" + cath <# "alice> hi" + +testForwardNotesToGroup :: HasCallStack => FilePath -> IO () +testForwardNotesToGroup = + testChat2 aliceProfile cathProfile $ + \alice cath -> do + createCCNoteFolder alice + createGroup2 "team" alice cath + + alice /* "hi" + + alice `send` "#team <- * hi" + alice <# "#team hi" + cath <# "#team alice> hi" + +testForwardNotesToNotes :: HasCallStack => FilePath -> IO () +testForwardNotesToNotes tmp = + withNewTestChat tmp "alice" aliceProfile $ \alice -> do + createCCNoteFolder alice + + alice /* "hi" + + alice `send` "* <- * hi" + alice <# "* hi" + + alice ##> "/tail * 2" + alice <# "* hi" + alice <# "* hi" + +testForwardPreserveInfo :: HasCallStack => FilePath -> IO () +testForwardPreserveInfo = + testChat4 aliceProfile bobProfile cathProfile danProfile $ + \alice bob cath dan -> do + createCCNoteFolder alice + connectUsers alice bob + connectUsers alice cath + createGroup2 "team" alice dan + + bob #> "@alice hey" + alice <# "bob> hey" + + alice `send` "* <- @bob hey" + alice <# "* <- @bob" + alice <## " hey" + + alice `send` "@cath <- * hey" + alice <# "@cath <- @bob" + alice <## " hey" + cath <# "alice> -> forwarded" + cath <## " hey" + + alice `send` "#team <- @cath hey" + alice <# "#team <- @bob" + alice <## " hey" + dan <# "#team alice> -> forwarded" + dan <## " hey" + +testForwardQuotedMsg :: HasCallStack => FilePath -> IO () +testForwardQuotedMsg = + testChat3 aliceProfile bobProfile cathProfile $ + \alice bob cath -> do + connectUsers alice bob + connectUsers alice cath + + alice #> "@bob hi" + bob <# "alice> hi" + bob `send` "> @alice (hi) hey" + bob <# "@alice > hi" + bob <## " hey" + alice <# "bob> > hi" + alice <## " hey" + + alice `send` "@cath <- @bob hey" + alice <# "@cath <- @bob" + alice <## " hey" + cath <# "alice> -> forwarded" + cath <## " hey" + + -- read chat + alice ##> "/tail @cath 1" + alice <# "@cath <- @bob" + alice <## " hey" + + cath ##> "/tail @alice 1" + cath <# "alice> -> forwarded" + cath <## " hey" + +testForwardEditProhibited :: HasCallStack => FilePath -> IO () +testForwardEditProhibited = + testChat3 aliceProfile bobProfile cathProfile $ + \alice bob cath -> do + connectUsers alice bob + connectUsers alice cath + + bob #> "@alice hey" + alice <# "bob> hey" + + alice `send` "@cath <- @bob hey" + alice <# "@cath <- @bob" + alice <## " hey" + cath <# "alice> -> forwarded" + cath <## " hey" + + msgId <- lastItemId alice + alice ##> ("/_update item @3 " <> msgId <> " text hey edited") + alice <## "cannot update this item" + +testForwardFileNoFilesFolder :: HasCallStack => FilePath -> IO () +testForwardFileNoFilesFolder = + testChat3 aliceProfile bobProfile cathProfile $ + \alice bob cath -> withXFTPServer $ do + connectUsers alice bob + connectUsers bob cath + + -- send original file + alice ##> "/_send @2 json {\"filePath\": \"./tests/fixtures/test.pdf\", \"msgContent\": {\"type\": \"text\", \"text\": \"hi\"}}" + alice <# "@bob hi" + alice <# "/f @bob ./tests/fixtures/test.pdf" + alice <## "use /fc 1 to cancel sending" + bob <# "alice> hi" + bob <# "alice> sends file test.pdf (266.0 KiB / 272376 bytes)" + bob <## "use /fr 1 [/ | ] to receive it" + + bob ##> "/fr 1 ./tests/tmp" + concurrentlyN_ + [ alice <## "completed uploading file 1 (test.pdf) for bob", + bob + <### [ "saving file 1 from alice to ./tests/tmp/test.pdf", + "started receiving file 1 (test.pdf) from alice" + ] + ] + bob <## "completed receiving file 1 (test.pdf) from alice" + + src <- B.readFile "./tests/fixtures/test.pdf" + dest <- B.readFile "./tests/tmp/test.pdf" + dest `shouldBe` src + + -- forward file + bob `send` "@cath <- @alice hi" + bob <# "@cath <- @alice" + bob <## " hi" + bob <# "/f @cath ./tests/tmp/test.pdf" + bob <## "use /fc 2 to cancel sending" + cath <# "bob> -> forwarded" + cath <## " hi" + cath <# "bob> sends file test.pdf (266.0 KiB / 272376 bytes)" + cath <## "use /fr 1 [/ | ] to receive it" + + cath ##> "/fr 1 ./tests/tmp" + concurrentlyN_ + [ bob <## "completed uploading file 2 (test.pdf) for cath", + cath + <### [ "saving file 1 from bob to ./tests/tmp/test_1.pdf", + "started receiving file 1 (test.pdf) from bob" + ] + ] + cath <## "completed receiving file 1 (test.pdf) from bob" + + dest2 <- B.readFile "./tests/tmp/test_1.pdf" + dest2 `shouldBe` src + +testForwardFileContactToContact :: HasCallStack => FilePath -> IO () +testForwardFileContactToContact = + testChat3 aliceProfile bobProfile cathProfile $ + \alice bob cath -> withXFTPServer $ do + setRelativePaths alice "./tests/fixtures" "./tests/tmp/alice_xftp" + setRelativePaths bob "./tests/tmp/bob_files" "./tests/tmp/bob_xftp" + setRelativePaths cath "./tests/tmp/cath_files" "./tests/tmp/cath_xftp" + connectUsers alice bob + connectUsers bob cath + + -- send original file + alice ##> "/_send @2 json {\"filePath\": \"test.pdf\", \"msgContent\": {\"type\": \"text\", \"text\": \"hi\"}}" + alice <# "@bob hi" + alice <# "/f @bob test.pdf" + alice <## "use /fc 1 to cancel sending" + bob <# "alice> hi" + bob <# "alice> sends file test.pdf (266.0 KiB / 272376 bytes)" + bob <## "use /fr 1 [/ | ] to receive it" + + bob ##> "/fr 1" + concurrentlyN_ + [ alice <## "completed uploading file 1 (test.pdf) for bob", + bob + <### [ "saving file 1 from alice to test.pdf", + "started receiving file 1 (test.pdf) from alice" + ] + ] + bob <## "completed receiving file 1 (test.pdf) from alice" + + src <- B.readFile "./tests/fixtures/test.pdf" + dest <- B.readFile "./tests/tmp/bob_files/test.pdf" + dest `shouldBe` src + + -- forward file + bob `send` "@cath <- @alice hi" + bob <# "@cath <- @alice" + bob <## " hi" + bob <# "/f @cath test_1.pdf" + bob <## "use /fc 2 to cancel sending" + cath <# "bob> -> forwarded" + cath <## " hi" + cath <# "bob> sends file test_1.pdf (266.0 KiB / 272376 bytes)" + cath <## "use /fr 1 [/ | ] to receive it" + + cath ##> "/fr 1" + concurrentlyN_ + [ bob <## "completed uploading file 2 (test_1.pdf) for cath", + cath + <### [ "saving file 1 from bob to test_1.pdf", + "started receiving file 1 (test_1.pdf) from bob" + ] + ] + cath <## "completed receiving file 1 (test_1.pdf) from bob" + + src2 <- B.readFile "./tests/tmp/bob_files/test_1.pdf" + src2 `shouldBe` dest + dest2 <- B.readFile "./tests/tmp/cath_files/test_1.pdf" + dest2 `shouldBe` src2 + + -- deleting original file doesn't delete forwarded file + checkActionDeletesFile "./tests/tmp/bob_files/test.pdf" $ do + bob ##> "/clear alice" + bob <## "alice: all messages are removed locally ONLY" + fwdFileExists <- doesFileExist "./tests/tmp/bob_files/test_1.pdf" + fwdFileExists `shouldBe` True + +testForwardFileGroupToNotes :: HasCallStack => FilePath -> IO () +testForwardFileGroupToNotes = + testChat2 aliceProfile cathProfile $ + \alice cath -> withXFTPServer $ do + setRelativePaths alice "./tests/fixtures" "./tests/tmp/alice_xftp" + setRelativePaths cath "./tests/tmp/cath_files" "./tests/tmp/cath_xftp" + createGroup2 "team" alice cath + createCCNoteFolder cath + + -- send original file + alice ##> "/_send #1 json {\"filePath\": \"test.pdf\", \"msgContent\": {\"type\": \"text\", \"text\": \"hi\"}}" + alice <# "#team hi" + alice <# "/f #team test.pdf" + alice <## "use /fc 1 to cancel sending" + cath <# "#team alice> hi" + cath <# "#team alice> sends file test.pdf (266.0 KiB / 272376 bytes)" + cath <## "use /fr 1 [/ | ] to receive it" + + cath ##> "/fr 1" + concurrentlyN_ + [ alice <## "completed uploading file 1 (test.pdf) for #team", + cath + <### [ "saving file 1 from alice to test.pdf", + "started receiving file 1 (test.pdf) from alice" + ] + ] + cath <## "completed receiving file 1 (test.pdf) from alice" + + src <- B.readFile "./tests/fixtures/test.pdf" + dest <- B.readFile "./tests/tmp/cath_files/test.pdf" + dest `shouldBe` src + + -- forward file + cath `send` "* <- #team hi" + cath <# "* <- #team" + cath <## " hi" + cath <# "* file 2 (test_1.pdf)" + + dest2 <- B.readFile "./tests/tmp/cath_files/test_1.pdf" + dest2 `shouldBe` dest + + -- deleting original file doesn't delete forwarded file + checkActionDeletesFile "./tests/tmp/cath_files/test.pdf" $ do + cath ##> "/clear #team" + cath <## "#team: all messages are removed locally ONLY" + fwdFileExists <- doesFileExist "./tests/tmp/cath_files/test_1.pdf" + fwdFileExists `shouldBe` True + +testForwardFileNotesToGroup :: HasCallStack => FilePath -> IO () +testForwardFileNotesToGroup = + testChat2 aliceProfile cathProfile $ + \alice cath -> withXFTPServer $ do + setRelativePaths alice "./tests/tmp/alice_files" "./tests/tmp/alice_xftp" + setRelativePaths cath "./tests/tmp/cath_files" "./tests/tmp/cath_xftp" + copyFile "./tests/fixtures/test.pdf" "./tests/tmp/alice_files/test.pdf" + createCCNoteFolder alice + createGroup2 "team" alice cath + + -- create original file + alice ##> "/_create *1 json {\"filePath\": \"test.pdf\", \"msgContent\": {\"type\": \"text\", \"text\": \"hi\"}}" + alice <# "* hi" + alice <# "* file 1 (test.pdf)" + + -- forward file + alice `send` "#team <- * hi" + alice <# "#team hi" + alice <# "/f #team test_1.pdf" + alice <## "use /fc 2 to cancel sending" + cath <# "#team alice> hi" + cath <# "#team alice> sends file test_1.pdf (266.0 KiB / 272376 bytes)" + cath <## "use /fr 1 [/ | ] to receive it" + + cath ##> "/fr 1" + concurrentlyN_ + [ alice <## "completed uploading file 2 (test_1.pdf) for #team", + cath + <### [ "saving file 1 from alice to test_1.pdf", + "started receiving file 1 (test_1.pdf) from alice" + ] + ] + cath <## "completed receiving file 1 (test_1.pdf) from alice" + + src <- B.readFile "./tests/tmp/alice_files/test.pdf" + src2 <- B.readFile "./tests/tmp/alice_files/test_1.pdf" + src2 `shouldBe` src + dest2 <- B.readFile "./tests/tmp/cath_files/test_1.pdf" + dest2 `shouldBe` src2 + + -- deleting original file doesn't delete forwarded file + checkActionDeletesFile "./tests/tmp/alice_files/test.pdf" $ do + alice ##> "/clear *" + alice <## "notes: all messages are removed" + fwdFileExists <- doesFileExist "./tests/tmp/alice_files/test_1.pdf" + fwdFileExists `shouldBe` True diff --git a/tests/ChatTests/Local.hs b/tests/ChatTests/Local.hs index 40ebe51b83..5562d517ac 100644 --- a/tests/ChatTests/Local.hs +++ b/tests/ChatTests/Local.hs @@ -150,6 +150,7 @@ testFiles tmp = withNewTestChat tmp "alice" aliceProfile $ \alice -> do doesFileExist stored `shouldReturn` True alice ##> "/clear *" + alice <## "notes: all messages are removed" alice ##> "/fs 1" alice <## "file 1 not found" alice ##> "/tail" @@ -180,6 +181,7 @@ testOtherFiles = bob ##> "/tail *" bob <# "* test" bob ##> "/clear *" + bob <## "notes: all messages are removed" bob ##> "/tail *" bob ##> "/fs 1" bob <## "receiving file 1 (test.jpg) complete, path: test.jpg" diff --git a/tests/ChatTests/Utils.hs b/tests/ChatTests/Utils.hs index 98227fcd0c..aa6579efee 100644 --- a/tests/ChatTests/Utils.hs +++ b/tests/ChatTests/Utils.hs @@ -723,3 +723,12 @@ linkAnotherSchema link xftpCLI :: [String] -> IO [String] xftpCLI params = lines <$> capture_ (withArgs params xftpClientCLI) + +setRelativePaths :: HasCallStack => TestCC -> String -> String -> IO () +setRelativePaths cc filesFolder tempFolder = do + cc ##> "/_stop" + cc <## "chat stopped" + cc #$> ("/_files_folder " <> filesFolder, id, "ok") + cc #$> ("/_temp_folder " <> tempFolder, id, "ok") + cc ##> "/_start" + cc <## "chat started" From 72611084d3a4f3459bd672f6d65b071f2647315e Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Tue, 9 Apr 2024 17:31:52 +0100 Subject: [PATCH 15/60] core: debug events (#4006) --- src/Simplex/Chat.hs | 2 ++ src/Simplex/Chat/Controller.hs | 1 + 2 files changed, 3 insertions(+) diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index 41f8828b26..a0f8d335a4 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -2151,6 +2151,7 @@ processChatCommand' vr = \case CLGroup gId -> "Group " <> show gId CLUserContact ucId -> "UserContact " <> show ucId CLFile fId -> "File " <> show fId + DebugEvent event -> toView event >> ok_ GetAgentWorkers -> lift $ CRAgentWorkersSummary <$> withAgent' getAgentWorkersSummary GetAgentWorkersDetails -> lift $ CRAgentWorkersDetails <$> withAgent' getAgentWorkersDetails GetAgentStats -> lift $ CRAgentStats . map stat <$> withAgent' getAgentStats @@ -7225,6 +7226,7 @@ chatCommandP = ("/quit" <|> "/q" <|> "/exit") $> QuitChat, ("/version" <|> "/v") $> ShowVersion, "/debug locks" $> DebugLocks, + "/debug event " *> (DebugEvent <$> jsonP), "/get stats" $> GetAgentStats, "/reset stats" $> ResetAgentStats, "/get subs" $> GetAgentSubs, diff --git a/src/Simplex/Chat/Controller.hs b/src/Simplex/Chat/Controller.hs index 5295541697..51b652d6d2 100644 --- a/src/Simplex/Chat/Controller.hs +++ b/src/Simplex/Chat/Controller.hs @@ -492,6 +492,7 @@ data ChatCommand | QuitChat | ShowVersion | DebugLocks + | DebugEvent ChatResponse | GetAgentStats | ResetAgentStats | GetAgentSubs From 1fa79a2654fca724ae799672422ba19330c312da Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Tue, 9 Apr 2024 18:18:11 +0100 Subject: [PATCH 16/60] android, desktop: fix incorrect event type for critical/internal error alerts --- .../commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt index 3811bca170..38619cfef2 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt @@ -2119,7 +2119,7 @@ object ChatController { if (active(r.user)) { chatModel.updateContact(rhId, r.contact) } - is CR.ChatCmdError -> when { + is CR.ChatRespError -> when { r.chatError is ChatError.ChatErrorAgent && r.chatError.agentError is AgentErrorType.CRITICAL -> { chatModel.processedCriticalError.newError(r.chatError.agentError, r.chatError.agentError.offerRestart) } From 36f86beafd18a41dc7c184df30aa011ac6546b86 Mon Sep 17 00:00:00 2001 From: Narasimha-sc <166327228+Narasimha-sc@users.noreply.github.com> Date: Tue, 9 Apr 2024 19:30:08 +0000 Subject: [PATCH 17/60] docs: device linking info on downloads page #4004 --- docs/DOWNLOADS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/DOWNLOADS.md b/docs/DOWNLOADS.md index b394c9dd27..0432b0f92e 100644 --- a/docs/DOWNLOADS.md +++ b/docs/DOWNLOADS.md @@ -19,7 +19,7 @@ You can get the latest beta releases from [GitHub](https://github.com/simplex-ch desktop app -Using the same profile as on mobile device is not yet supported – you need to create a separate profile to use desktop apps. +You can link your mobile device with desktop to use the same profile remotely, but this is only possible when both devices are connected to the same local network. **Linux**: [AppImage](https://github.com/simplex-chat/simplex-chat/releases/latest/download/simplex-desktop-x86_64.AppImage) (most Linux distros), [Ubuntu 20.04](https://github.com/simplex-chat/simplex-chat/releases/latest/download/simplex-desktop-ubuntu-20_04-x86_64.deb) (and Debian-based distros), [Ubuntu 22.04](https://github.com/simplex-chat/simplex-chat/releases/latest/download/simplex-desktop-ubuntu-22_04-x86_64.deb). From 005d99ad502bf683be8eedd09de1c7c8fc0f61b9 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Tue, 9 Apr 2024 21:45:48 +0100 Subject: [PATCH 18/60] docs: trasparency reports (#4007) --- docs/TRANSPARENCY.md | 29 ++++++++++++++++++++++++++++ website/langs/en.json | 1 + website/src/_data/docs_dropdown.json | 4 ++++ website/src/_data/docs_sidebar.json | 3 ++- 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 docs/TRANSPARENCY.md diff --git a/docs/TRANSPARENCY.md b/docs/TRANSPARENCY.md new file mode 100644 index 0000000000..55808c83c8 --- /dev/null +++ b/docs/TRANSPARENCY.md @@ -0,0 +1,29 @@ +--- +title: Transparency Reports +permalink: /transparency/index.html +revision: 09.04.2024 +--- + +# Transparency Reports + +**Updated**: Apr 9, 2024 + +SimpleX Chat Ltd. is a company registered in the UK – it develops communication software enabling users to operate and communicate via SimpleX network, without user profile identifiers of any kind, and without having their data hosted by any network infrastructure operators. + +This page will include any and all reports on requests for user data. + +*To date, we received none*. + +Our objective is to consistently ensure that no user data and absolute minimum of the metadata required for the network to function is available for disclosure by any infrastructure operators, under any circumstances. + +**Helpful resources**: +- [Privacy policy](https://github.com/simplex-chat/simplex-chat/blob/stable/PRIVACY.md) +- [Privacy and security: technical details and limitations](https://github.com/simplex-chat/simplex-chat?tab=readme-ov-file#privacy-and-security-technical-details-and-limitations) +- Whitepaper: + - [Trust in servers](https://github.com/simplex-chat/simplexmq/blob/stable/protocol/overview-tjr.md#trust-in-servers) + - [Encryption Primitives Used](https://github.com/simplex-chat/simplexmq/blob/stable/protocol/overview-tjr.md#encryption-primitives-used) + - [Threat model](https://github.com/simplex-chat/simplexmq/blob/stable/protocol/overview-tjr.md#threat-model) + +Have a more specific question? Reach out to us via [SimpleX Chat](https://simplex.chat/contact#/?v=1&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FK1rslx-m5bpXVIdMZg9NLUZ_8JBm8xTt%23%2F%3Fv%3D1%26dh%3DMCowBQYDK2VuAyEALDeVe-sG8mRY22LsXlPgiwTNs9dbiLrNuA7f3ZMAJ2w%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion) or via email [chat@simplex.chat](mailto:chat@simplex.chat). + +For any sensitive questions please use SimpleX Chat or encrypted email messages using the key for this address from [keys.openpgp.org](https://keys.openpgp.org/search?q=chat%40simplex.chat) (its fingerprint is `FB44 AF81 A45B DE32 7319 797C 8510 7E35 7D4A 17FC`) and make your key available for a secure reply. diff --git a/website/langs/en.json b/website/langs/en.json index 10db2dd4ed..32db4f3c47 100644 --- a/website/langs/en.json +++ b/website/langs/en.json @@ -235,6 +235,7 @@ "docs-dropdown-7": "Translate SimpleX Chat", "docs-dropdown-8": "SimpleX Directory Service", "docs-dropdown-9": "Downloads", + "docs-dropdown-10": "Transparency", "newer-version-of-eng-msg": "There is a newer version of this page in English.", "click-to-see": "Click to see", "menu": "Menu", diff --git a/website/src/_data/docs_dropdown.json b/website/src/_data/docs_dropdown.json index a8c6e634b2..610be49221 100644 --- a/website/src/_data/docs_dropdown.json +++ b/website/src/_data/docs_dropdown.json @@ -35,6 +35,10 @@ { "title": "docs-dropdown-9", "url": "/downloads/" + }, + { + "title": "docs-dropdown-10", + "url": "/transparency/" } ] } \ No newline at end of file diff --git a/website/src/_data/docs_sidebar.json b/website/src/_data/docs_sidebar.json index 857684661b..a2b15de7e4 100644 --- a/website/src/_data/docs_sidebar.json +++ b/website/src/_data/docs_sidebar.json @@ -26,7 +26,8 @@ "TRANSLATIONS.md", "WEBRTC.md", "XFTP-SERVER.md", - "DOWNLOADS.md" + "DOWNLOADS.md", + "TRANSPARENCY.md" ] }, { From 4be6c69633bf017fee1acaac29473cb84d5bfa06 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Wed, 10 Apr 2024 08:49:06 +0100 Subject: [PATCH 19/60] core: update simplexmq --- cabal.project | 2 +- scripts/nix/sha256map.nix | 2 +- src/Simplex/Chat/Remote/RevHTTP.hs | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cabal.project b/cabal.project index 4e8cfd22ee..60ef47f4ac 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: 791368c7beb3996ab4a10f25dbf8cad1e289b413 + tag: b994fd9f0fe8e5e0df1d667ed2a687de5154e76a source-repository-package type: git diff --git a/scripts/nix/sha256map.nix b/scripts/nix/sha256map.nix index a671f28751..4ad78ed06d 100644 --- a/scripts/nix/sha256map.nix +++ b/scripts/nix/sha256map.nix @@ -1,5 +1,5 @@ { - "https://github.com/simplex-chat/simplexmq.git"."791368c7beb3996ab4a10f25dbf8cad1e289b413" = "0wbxk69lv6h17b5rdqskxwhc1wfvn1zi8q4a4w57qfzkzyaxkymk"; + "https://github.com/simplex-chat/simplexmq.git"."b994fd9f0fe8e5e0df1d667ed2a687de5154e76a" = "0lbvl8xnmsp8x0lfa7nn6im3xdv3969srkfcl8djklpzclrh7yvx"; "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/src/Simplex/Chat/Remote/RevHTTP.hs b/src/Simplex/Chat/Remote/RevHTTP.hs index 44f3e50b0d..4df5bcac2a 100644 --- a/src/Simplex/Chat/Remote/RevHTTP.hs +++ b/src/Simplex/Chat/Remote/RevHTTP.hs @@ -21,9 +21,9 @@ attachRevHTTP2Client disconnected = attachHTTP2Client config ANY_ADDR_V4 "0" dis attachHTTP2Server :: TLS -> (HTTP2Request -> IO ()) -> IO () attachHTTP2Server tls processRequest = - runHTTP2ServerWith defaultHTTP2BufferSize ($ tls) $ \sessionId r sendResponse -> do + runHTTP2ServerWith defaultHTTP2BufferSize ($ tls) $ \sessionId sessionALPN r sendResponse -> do reqBody <- getHTTP2Body r doNotPrefetchHead - processRequest HTTP2Request {sessionId, request = r, reqBody, sendResponse} + processRequest HTTP2Request {sessionId, sessionALPN, request = r, reqBody, sendResponse} -- | Suppress storing initial chunk in bodyHead, forcing clients and servers to stream chunks doNotPrefetchHead :: Int From b3a4ea8e578715cf777f619e12554f949e305634 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Wed, 10 Apr 2024 23:32:55 +0100 Subject: [PATCH 20/60] core: api to update user network state (#3998) * core: api to update user network state * simplexmq * update simplexmq * simplexmq --- cabal.project | 2 +- scripts/nix/sha256map.nix | 2 +- src/Simplex/Chat.hs | 2 ++ src/Simplex/Chat/Controller.hs | 3 ++- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/cabal.project b/cabal.project index 60ef47f4ac..3b04d5dd99 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: b994fd9f0fe8e5e0df1d667ed2a687de5154e76a + tag: 8fa9ed63171df4a4e7a76ee8b8e7c1c4465c16bb source-repository-package type: git diff --git a/scripts/nix/sha256map.nix b/scripts/nix/sha256map.nix index 4ad78ed06d..c0a864b1a1 100644 --- a/scripts/nix/sha256map.nix +++ b/scripts/nix/sha256map.nix @@ -1,5 +1,5 @@ { - "https://github.com/simplex-chat/simplexmq.git"."b994fd9f0fe8e5e0df1d667ed2a687de5154e76a" = "0lbvl8xnmsp8x0lfa7nn6im3xdv3969srkfcl8djklpzclrh7yvx"; + "https://github.com/simplex-chat/simplexmq.git"."8fa9ed63171df4a4e7a76ee8b8e7c1c4465c16bb" = "0bj6vzcm7w6q47fqa4jmx9781j293d9ib83flz6w88pc7599pd0h"; "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/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index a0f8d335a4..ffb04dc9c3 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -1277,6 +1277,7 @@ processChatCommand' vr = \case APISetNetworkConfig cfg -> withUser' $ \_ -> lift (withAgent' (`setNetworkConfig` cfg)) >> ok_ APIGetNetworkConfig -> withUser' $ \_ -> lift $ CRNetworkConfig <$> withAgent' getNetworkConfig + APISetNetworkInfo info -> lift (withAgent' (`setUserNetworkInfo` info)) >> ok_ ReconnectAllServers -> withUser' $ \_ -> lift (withAgent' reconnectAllServers) >> ok_ APISetChatSettings (ChatRef cType chatId) chatSettings -> withUser $ \user -> case cType of CTDirect -> do @@ -7046,6 +7047,7 @@ chatCommandP = "/ttl " *> (SetChatItemTTL <$> ciTTL), "/_ttl " *> (APIGetChatItemTTL <$> A.decimal), "/ttl" $> GetChatItemTTL, + "/_network info " *> (APISetNetworkInfo <$> jsonP), "/_network " *> (APISetNetworkConfig <$> jsonP), ("/network " <|> "/net ") *> (APISetNetworkConfig <$> netCfgP), ("/network" <|> "/net") $> APIGetNetworkConfig, diff --git a/src/Simplex/Chat/Controller.hs b/src/Simplex/Chat/Controller.hs index 51b652d6d2..dffaa72ab3 100644 --- a/src/Simplex/Chat/Controller.hs +++ b/src/Simplex/Chat/Controller.hs @@ -66,7 +66,7 @@ import Simplex.Chat.Types.Shared import Simplex.Chat.Util (liftIOEither) import Simplex.FileTransfer.Description (FileDescriptionURI) import Simplex.Messaging.Agent (AgentClient, SubscriptionsInfo) -import Simplex.Messaging.Agent.Client (AgentLocks, AgentWorkersDetails (..), AgentWorkersSummary (..), ProtocolTestFailure) +import Simplex.Messaging.Agent.Client (AgentLocks, AgentWorkersDetails (..), AgentWorkersSummary (..), ProtocolTestFailure, UserNetworkInfo) import Simplex.Messaging.Agent.Env.SQLite (AgentConfig, NetworkConfig) import Simplex.Messaging.Agent.Lock import Simplex.Messaging.Agent.Protocol @@ -347,6 +347,7 @@ data ChatCommand | GetChatItemTTL | APISetNetworkConfig NetworkConfig | APIGetNetworkConfig + | APISetNetworkInfo UserNetworkInfo | ReconnectAllServers | APISetChatSettings ChatRef ChatSettings | APISetMemberSettings GroupId GroupMemberId GroupMemberSettings From 8a3710482b3a8270c9a3a48156ad663daca2d20d Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Thu, 11 Apr 2024 10:47:51 +0100 Subject: [PATCH 21/60] core: update simplexmq --- cabal.project | 2 +- scripts/nix/sha256map.nix | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cabal.project b/cabal.project index 3b04d5dd99..f60b834a84 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: 8fa9ed63171df4a4e7a76ee8b8e7c1c4465c16bb + tag: 3b1dd6dff924d915274963f27e053c95741caf07 source-repository-package type: git diff --git a/scripts/nix/sha256map.nix b/scripts/nix/sha256map.nix index c0a864b1a1..54e52c723c 100644 --- a/scripts/nix/sha256map.nix +++ b/scripts/nix/sha256map.nix @@ -1,5 +1,5 @@ { - "https://github.com/simplex-chat/simplexmq.git"."8fa9ed63171df4a4e7a76ee8b8e7c1c4465c16bb" = "0bj6vzcm7w6q47fqa4jmx9781j293d9ib83flz6w88pc7599pd0h"; + "https://github.com/simplex-chat/simplexmq.git"."3b1dd6dff924d915274963f27e053c95741caf07" = "1b61n33nbbx7bqgwscvv0a8yy628b4y397s7ydyg22hdw3dg009q"; "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"; From a9c0f356b458038e40524d02b216b7e047d5dfdc Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Thu, 11 Apr 2024 11:25:06 +0100 Subject: [PATCH 22/60] ios: update core library --- apps/ios/SimpleX.xcodeproj/project.pbxproj | 40 +++++++++++----------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index 6443c21b9e..6cd181940a 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -94,6 +94,11 @@ 5CB346E52868AA7F001FD2EF /* SuspendChat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB346E42868AA7F001FD2EF /* SuspendChat.swift */; }; 5CB346E72868D76D001FD2EF /* NotificationsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB346E62868D76D001FD2EF /* NotificationsView.swift */; }; 5CB346E92869E8BA001FD2EF /* PushEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB346E82869E8BA001FD2EF /* PushEnvironment.swift */; }; + 5CB39FD52BC7F13A0000FE16 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CB39FD02BC7F13A0000FE16 /* libgmp.a */; }; + 5CB39FD62BC7F13A0000FE16 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CB39FD12BC7F13A0000FE16 /* libffi.a */; }; + 5CB39FD72BC7F13A0000FE16 /* libHSsimplex-chat-5.6.1.1-CxOyGEtPyjQ6Yv6ZFTxGdP.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CB39FD22BC7F13A0000FE16 /* libHSsimplex-chat-5.6.1.1-CxOyGEtPyjQ6Yv6ZFTxGdP.a */; }; + 5CB39FD82BC7F13A0000FE16 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CB39FD32BC7F13A0000FE16 /* libgmpxx.a */; }; + 5CB39FD92BC7F13A0000FE16 /* libHSsimplex-chat-5.6.1.1-CxOyGEtPyjQ6Yv6ZFTxGdP-ghc9.6.4.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CB39FD42BC7F13A0000FE16 /* libHSsimplex-chat-5.6.1.1-CxOyGEtPyjQ6Yv6ZFTxGdP-ghc9.6.4.a */; }; 5CB634A829E437960066AD6B /* PasscodeEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB634A729E437960066AD6B /* PasscodeEntry.swift */; }; 5CB634AD29E46CF70066AD6B /* LocalAuthView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB634AC29E46CF70066AD6B /* LocalAuthView.swift */; }; 5CB634AF29E4BB7D0066AD6B /* SetAppPasscodeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB634AE29E4BB7D0066AD6B /* SetAppPasscodeView.swift */; }; @@ -111,11 +116,6 @@ 5CC2C0FC2809BF11000C35E3 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5CC2C0FA2809BF11000C35E3 /* Localizable.strings */; }; 5CC2C0FF2809BF11000C35E3 /* SimpleX--iOS--InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5CC2C0FD2809BF11000C35E3 /* SimpleX--iOS--InfoPlist.strings */; }; 5CC868F329EB540C0017BBFD /* CIRcvDecryptionError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CC868F229EB540C0017BBFD /* CIRcvDecryptionError.swift */; }; - 5CC932F52BBDD9F9008A1EB6 /* libHSsimplex-chat-5.6.1.1-KSjuZv7tE7cHRWd28F1Zto-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CC932F02BBDD9F9008A1EB6 /* libHSsimplex-chat-5.6.1.1-KSjuZv7tE7cHRWd28F1Zto-ghc9.6.3.a */; }; - 5CC932F62BBDD9F9008A1EB6 /* libHSsimplex-chat-5.6.1.1-KSjuZv7tE7cHRWd28F1Zto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CC932F12BBDD9F9008A1EB6 /* libHSsimplex-chat-5.6.1.1-KSjuZv7tE7cHRWd28F1Zto.a */; }; - 5CC932F72BBDD9FA008A1EB6 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CC932F22BBDD9F9008A1EB6 /* libgmpxx.a */; }; - 5CC932F82BBDD9FA008A1EB6 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CC932F32BBDD9F9008A1EB6 /* libgmp.a */; }; - 5CC932F92BBDD9FA008A1EB6 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CC932F42BBDD9F9008A1EB6 /* libffi.a */; }; 5CCB939C297EFCB100399E78 /* NavStackCompat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CCB939B297EFCB100399E78 /* NavStackCompat.swift */; }; 5CD67B8F2B0E858A00C510B1 /* hs_init.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CD67B8D2B0E858A00C510B1 /* hs_init.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5CD67B902B0E858A00C510B1 /* hs_init.c in Sources */ = {isa = PBXBuildFile; fileRef = 5CD67B8E2B0E858A00C510B1 /* hs_init.c */; }; @@ -382,6 +382,11 @@ 5CB346E42868AA7F001FD2EF /* SuspendChat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuspendChat.swift; sourceTree = ""; }; 5CB346E62868D76D001FD2EF /* NotificationsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationsView.swift; sourceTree = ""; }; 5CB346E82869E8BA001FD2EF /* PushEnvironment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushEnvironment.swift; sourceTree = ""; }; + 5CB39FD02BC7F13A0000FE16 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; }; + 5CB39FD12BC7F13A0000FE16 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; }; + 5CB39FD22BC7F13A0000FE16 /* libHSsimplex-chat-5.6.1.1-CxOyGEtPyjQ6Yv6ZFTxGdP.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.6.1.1-CxOyGEtPyjQ6Yv6ZFTxGdP.a"; sourceTree = ""; }; + 5CB39FD32BC7F13A0000FE16 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; }; + 5CB39FD42BC7F13A0000FE16 /* libHSsimplex-chat-5.6.1.1-CxOyGEtPyjQ6Yv6ZFTxGdP-ghc9.6.4.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.6.1.1-CxOyGEtPyjQ6Yv6ZFTxGdP-ghc9.6.4.a"; sourceTree = ""; }; 5CB634A729E437960066AD6B /* PasscodeEntry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasscodeEntry.swift; sourceTree = ""; }; 5CB634AC29E46CF70066AD6B /* LocalAuthView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalAuthView.swift; sourceTree = ""; }; 5CB634AE29E4BB7D0066AD6B /* SetAppPasscodeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetAppPasscodeView.swift; sourceTree = ""; }; @@ -402,11 +407,6 @@ 5CC2C0FB2809BF11000C35E3 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; 5CC2C0FE2809BF11000C35E3 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = "ru.lproj/SimpleX--iOS--InfoPlist.strings"; sourceTree = ""; }; 5CC868F229EB540C0017BBFD /* CIRcvDecryptionError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIRcvDecryptionError.swift; sourceTree = ""; }; - 5CC932F02BBDD9F9008A1EB6 /* libHSsimplex-chat-5.6.1.1-KSjuZv7tE7cHRWd28F1Zto-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.6.1.1-KSjuZv7tE7cHRWd28F1Zto-ghc9.6.3.a"; sourceTree = ""; }; - 5CC932F12BBDD9F9008A1EB6 /* libHSsimplex-chat-5.6.1.1-KSjuZv7tE7cHRWd28F1Zto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.6.1.1-KSjuZv7tE7cHRWd28F1Zto.a"; sourceTree = ""; }; - 5CC932F22BBDD9F9008A1EB6 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; }; - 5CC932F32BBDD9F9008A1EB6 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; }; - 5CC932F42BBDD9F9008A1EB6 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; }; 5CCB939B297EFCB100399E78 /* NavStackCompat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavStackCompat.swift; sourceTree = ""; }; 5CD67B8D2B0E858A00C510B1 /* hs_init.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = hs_init.h; sourceTree = ""; }; 5CD67B8E2B0E858A00C510B1 /* hs_init.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = hs_init.c; sourceTree = ""; }; @@ -521,13 +521,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 5CB39FD82BC7F13A0000FE16 /* libgmpxx.a in Frameworks */, 5CE2BA93284534B000EC33A6 /* libiconv.tbd in Frameworks */, - 5CC932F72BBDD9FA008A1EB6 /* libgmpxx.a in Frameworks */, - 5CC932F62BBDD9F9008A1EB6 /* libHSsimplex-chat-5.6.1.1-KSjuZv7tE7cHRWd28F1Zto.a in Frameworks */, - 5CC932F52BBDD9F9008A1EB6 /* libHSsimplex-chat-5.6.1.1-KSjuZv7tE7cHRWd28F1Zto-ghc9.6.3.a in Frameworks */, - 5CC932F92BBDD9FA008A1EB6 /* libffi.a in Frameworks */, - 5CC932F82BBDD9FA008A1EB6 /* libgmp.a in Frameworks */, + 5CB39FD72BC7F13A0000FE16 /* libHSsimplex-chat-5.6.1.1-CxOyGEtPyjQ6Yv6ZFTxGdP.a in Frameworks */, + 5CB39FD52BC7F13A0000FE16 /* libgmp.a in Frameworks */, 5CE2BA94284534BB00EC33A6 /* libz.tbd in Frameworks */, + 5CB39FD62BC7F13A0000FE16 /* libffi.a in Frameworks */, + 5CB39FD92BC7F13A0000FE16 /* libHSsimplex-chat-5.6.1.1-CxOyGEtPyjQ6Yv6ZFTxGdP-ghc9.6.4.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -590,11 +590,11 @@ 5C764E5C279C70B7000C6508 /* Libraries */ = { isa = PBXGroup; children = ( - 5CC932F42BBDD9F9008A1EB6 /* libffi.a */, - 5CC932F32BBDD9F9008A1EB6 /* libgmp.a */, - 5CC932F22BBDD9F9008A1EB6 /* libgmpxx.a */, - 5CC932F02BBDD9F9008A1EB6 /* libHSsimplex-chat-5.6.1.1-KSjuZv7tE7cHRWd28F1Zto-ghc9.6.3.a */, - 5CC932F12BBDD9F9008A1EB6 /* libHSsimplex-chat-5.6.1.1-KSjuZv7tE7cHRWd28F1Zto.a */, + 5CB39FD12BC7F13A0000FE16 /* libffi.a */, + 5CB39FD02BC7F13A0000FE16 /* libgmp.a */, + 5CB39FD32BC7F13A0000FE16 /* libgmpxx.a */, + 5CB39FD42BC7F13A0000FE16 /* libHSsimplex-chat-5.6.1.1-CxOyGEtPyjQ6Yv6ZFTxGdP-ghc9.6.4.a */, + 5CB39FD22BC7F13A0000FE16 /* libHSsimplex-chat-5.6.1.1-CxOyGEtPyjQ6Yv6ZFTxGdP.a */, ); path = Libraries; sourceTree = ""; From d8b52ee0d355a5762bce182a8176885550769d7a Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Thu, 11 Apr 2024 17:31:30 +0700 Subject: [PATCH 23/60] ios: network observer (#3996) * ios: network observer * update * remove metered * update tcpTimeoutPerKb * network connection in settings --------- Co-authored-by: Evgeny Poberezkin --- apps/ios/Shared/Model/ChatModel.swift | 1 + apps/ios/Shared/Model/NetworkObserver.swift | 73 +++++++++++++++++++ apps/ios/Shared/Model/SimpleXAPI.swift | 7 ++ apps/ios/Shared/Views/Call/WebRTCClient.swift | 2 +- .../Views/Chat/ChatItem/CIVideoView.swift | 2 +- .../AdvancedNetworkSettings.swift | 2 +- .../UserSettings/NetworkAndServers.swift | 9 +++ apps/ios/SimpleX.xcodeproj/project.pbxproj | 4 + apps/ios/SimpleXChat/APITypes.swift | 35 ++++++++- .../chat/simplex/common/model/SimpleXAPI.kt | 4 +- .../usersettings/AdvancedNetworkSettings.kt | 2 +- 11 files changed, 133 insertions(+), 8 deletions(-) create mode 100644 apps/ios/Shared/Model/NetworkObserver.swift diff --git a/apps/ios/Shared/Model/ChatModel.swift b/apps/ios/Shared/Model/ChatModel.swift index 462699e407..90a9406627 100644 --- a/apps/ios/Shared/Model/ChatModel.swift +++ b/apps/ios/Shared/Model/ChatModel.swift @@ -103,6 +103,7 @@ final class ChatModel: ObservableObject { // tracks keyboard height via subscription in AppDelegate @Published var keyboardHeight: CGFloat = 0 @Published var pasteboardHasStrings: Bool = UIPasteboard.general.hasStrings + @Published var networkInfo = UserNetworkInfo(networkType: .other, online: true) var messageDelivery: Dictionary Void> = [:] diff --git a/apps/ios/Shared/Model/NetworkObserver.swift b/apps/ios/Shared/Model/NetworkObserver.swift new file mode 100644 index 0000000000..84c35afa07 --- /dev/null +++ b/apps/ios/Shared/Model/NetworkObserver.swift @@ -0,0 +1,73 @@ +// +// NetworkObserver.swift +// SimpleX (iOS) +// +// Created by Avently on 05.04.2024. +// Copyright © 2024 SimpleX Chat. All rights reserved. +// + +import Foundation +import Network +import SimpleXChat + +class NetworkObserver { + static let shared = NetworkObserver() + private let queue: DispatchQueue = DispatchQueue(label: "chat.simplex.app.NetworkObserver") + private var prevInfo: UserNetworkInfo? = nil + private var monitor: NWPathMonitor? + private let monitorLock: DispatchQueue = DispatchQueue(label: "chat.simplex.app.monitorLock") + + func restartMonitor() { + monitorLock.sync { + monitor?.cancel() + let mon = NWPathMonitor() + mon.pathUpdateHandler = { [weak self] path in + self?.networkPathChanged(path: path) + } + mon.start(queue: queue) + monitor = mon + } + } + + private func networkPathChanged(path: NWPath) { + let info = UserNetworkInfo( + networkType: networkTypeFromPath(path), + online: path.status == .satisfied + ) + if (prevInfo != info) { + prevInfo = info + setNetworkInfo(info) + } + } + + private func networkTypeFromPath(_ path: NWPath) -> UserNetworkType { + if path.usesInterfaceType(.wiredEthernet) { + .ethernet + } else if path.usesInterfaceType(.wifi) { + .wifi + } else if path.usesInterfaceType(.cellular) { + .cellular + } else if path.usesInterfaceType(.other) { + .other + } else { + .none + } + } + + private static var networkObserver: NetworkObserver? = nil + + private func setNetworkInfo(_ info: UserNetworkInfo) { + logger.debug("setNetworkInfo Network changed: \(String(describing: info))") + DispatchQueue.main.sync { + ChatModel.shared.networkInfo = info + } + if !hasChatCtrl() { return } + self.monitorLock.sync { + do { + try apiSetNetworkInfo(info) + } catch let err { + logger.error("setNetworkInfo error: \(responseError(err))") + } + } + } +} diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift index a099069f77..94a424d319 100644 --- a/apps/ios/Shared/Model/SimpleXAPI.swift +++ b/apps/ios/Shared/Model/SimpleXAPI.swift @@ -534,6 +534,12 @@ func setNetworkConfig(_ cfg: NetCfg, ctrl: chat_ctrl? = nil) throws { throw r } +func apiSetNetworkInfo(_ networkInfo: UserNetworkInfo) throws { + let r = chatSendCmdSync(.apiSetNetworkInfo(networkInfo: networkInfo)) + if case .cmdOk = r { return } + throw r +} + func reconnectAllServers() async throws { try await sendCommandOkResp(.reconnectAllServers) } @@ -1297,6 +1303,7 @@ func initializeChat(start: Bool, confirmStart: Bool = false, dbKey: String? = ni defer { m.ctrlInitInProgress = false } (m.chatDbEncrypted, m.chatDbStatus) = chatMigrateInit(dbKey, confirmMigrations: confirmMigrations) if m.chatDbStatus != .ok { return } + NetworkObserver.shared.restartMonitor() // If we migrated successfully means previous re-encryption process on database level finished successfully too if encryptionStartedDefault.get() { encryptionStartedDefault.set(false) diff --git a/apps/ios/Shared/Views/Call/WebRTCClient.swift b/apps/ios/Shared/Views/Call/WebRTCClient.swift index 1806984d64..834af4a2c1 100644 --- a/apps/ios/Shared/Views/Call/WebRTCClient.swift +++ b/apps/ios/Shared/Views/Call/WebRTCClient.swift @@ -49,7 +49,7 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg } private let rtcAudioSession = RTCAudioSession.sharedInstance() - private let audioQueue = DispatchQueue(label: "audio") + private let audioQueue = DispatchQueue(label: "chat.simplex.app.audio") private var sendCallResponse: (WVAPIMessage) async -> Void var activeCall: Binding private var localRendererAspectRatio: Binding diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CIVideoView.swift b/apps/ios/Shared/Views/Chat/ChatItem/CIVideoView.swift index a3918e17bc..b4b190a43a 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/CIVideoView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/CIVideoView.swift @@ -126,7 +126,7 @@ struct CIVideoView: View { if !decryptionInProgress { Button { decrypt(file: file) { - if let decrypted = urlDecrypted { + if urlDecrypted != nil { videoPlaying = true player?.play() } diff --git a/apps/ios/Shared/Views/UserSettings/AdvancedNetworkSettings.swift b/apps/ios/Shared/Views/UserSettings/AdvancedNetworkSettings.swift index 9da3bac00b..9f03b95321 100644 --- a/apps/ios/Shared/Views/UserSettings/AdvancedNetworkSettings.swift +++ b/apps/ios/Shared/Views/UserSettings/AdvancedNetworkSettings.swift @@ -53,7 +53,7 @@ struct AdvancedNetworkSettings: View { timeoutSettingPicker("TCP connection timeout", selection: $netCfg.tcpConnectTimeout, values: [7_500000, 10_000000, 15_000000, 20_000000, 30_000000, 45_000000], label: secondsLabel) timeoutSettingPicker("Protocol timeout", selection: $netCfg.tcpTimeout, values: [5_000000, 7_000000, 10_000000, 15_000000, 20_000000, 30_000000], label: secondsLabel) - timeoutSettingPicker("Protocol timeout per KB", selection: $netCfg.tcpTimeoutPerKb, values: [15_000, 30_000, 45_000, 60_000, 90_000, 120_000], label: secondsLabel) + timeoutSettingPicker("Protocol timeout per KB", selection: $netCfg.tcpTimeoutPerKb, values: [2_500, 5_000, 10_000, 15_000, 20_000, 30_000], label: secondsLabel) timeoutSettingPicker("PING interval", selection: $netCfg.smpPingInterval, values: [120_000000, 300_000000, 600_000000, 1200_000000, 2400_000000, 3600_000000], label: secondsLabel) intSettingPicker("PING count", selection: $netCfg.smpPingCount, values: [1, 2, 3, 5, 8], label: "") Toggle("Enable TCP keep-alive", isOn: $enableKeepAlive) diff --git a/apps/ios/Shared/Views/UserSettings/NetworkAndServers.swift b/apps/ios/Shared/Views/UserSettings/NetworkAndServers.swift index d721cfad50..a6702b1821 100644 --- a/apps/ios/Shared/Views/UserSettings/NetworkAndServers.swift +++ b/apps/ios/Shared/Views/UserSettings/NetworkAndServers.swift @@ -24,6 +24,7 @@ private enum NetworkAlert: Identifiable { } struct NetworkAndServers: View { + @EnvironmentObject var m: ChatModel @AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false @State private var cfgLoaded = false @State private var currentNetCfg = NetCfg.defaults @@ -82,6 +83,14 @@ struct NetworkAndServers: View { Text("WebRTC ICE servers") } } + + Section("Network connection") { + HStack { + Text(m.networkInfo.networkType.text) + Spacer() + Image(systemName: "circle.fill").foregroundColor(m.networkInfo.online ? .green : .red) + } + } } } .onAppear { diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index 6cd181940a..d7ca3e1cb5 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -187,6 +187,7 @@ 8C69FE7D2B8C7D2700267E38 /* AppSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C69FE7C2B8C7D2700267E38 /* AppSettings.swift */; }; 8C7D949A2B88952700B7B9E1 /* MigrateToDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C7D94992B88952700B7B9E1 /* MigrateToDevice.swift */; }; 8C7DF3202B7CDB0A00C886D0 /* MigrateFromDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C7DF31F2B7CDB0A00C886D0 /* MigrateFromDevice.swift */; }; + 8CC956EE2BC0041000412A11 /* NetworkObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CC956ED2BC0041000412A11 /* NetworkObserver.swift */; }; D7197A1829AE89660055C05A /* WebRTC in Frameworks */ = {isa = PBXBuildFile; productRef = D7197A1729AE89660055C05A /* WebRTC */; }; D72A9088294BD7A70047C86D /* NativeTextEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72A9087294BD7A70047C86D /* NativeTextEditor.swift */; }; D741547829AF89AF0022400A /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741547729AF89AF0022400A /* StoreKit.framework */; }; @@ -480,6 +481,7 @@ 8C69FE7C2B8C7D2700267E38 /* AppSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppSettings.swift; sourceTree = ""; }; 8C7D94992B88952700B7B9E1 /* MigrateToDevice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MigrateToDevice.swift; sourceTree = ""; }; 8C7DF31F2B7CDB0A00C886D0 /* MigrateFromDevice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MigrateFromDevice.swift; sourceTree = ""; }; + 8CC956ED2BC0041000412A11 /* NetworkObserver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkObserver.swift; sourceTree = ""; }; D72A9087294BD7A70047C86D /* NativeTextEditor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NativeTextEditor.swift; sourceTree = ""; }; D741547729AF89AF0022400A /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.1.sdk/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; }; D741547929AF90B00022400A /* PushKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PushKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.1.sdk/System/Library/Frameworks/PushKit.framework; sourceTree = DEVELOPER_DIR; }; @@ -623,6 +625,7 @@ 5CB346E82869E8BA001FD2EF /* PushEnvironment.swift */, 5C93293E2928E0FD0090FFF9 /* AudioRecPlay.swift */, 5CBD2859295711D700EC2CF4 /* ImageUtils.swift */, + 8CC956ED2BC0041000412A11 /* NetworkObserver.swift */, ); path = Model; sourceTree = ""; @@ -1176,6 +1179,7 @@ 5C9A5BDB2871E05400A5B906 /* SetNotificationsMode.swift in Sources */, 5CB0BA8E2827126500B3292C /* OnboardingView.swift in Sources */, 6442E0BE2880182D00CEC0F9 /* GroupChatInfoView.swift in Sources */, + 8CC956EE2BC0041000412A11 /* NetworkObserver.swift in Sources */, 5C2E261227A30FEA00F70299 /* TerminalView.swift in Sources */, 5C9FD96E27A5D6ED0075386C /* SendMessageView.swift in Sources */, 5CA7DFC329302AF000F7FDDE /* AppSheet.swift in Sources */, diff --git a/apps/ios/SimpleXChat/APITypes.swift b/apps/ios/SimpleXChat/APITypes.swift index b18022cfec..c0ff697a1d 100644 --- a/apps/ios/SimpleXChat/APITypes.swift +++ b/apps/ios/SimpleXChat/APITypes.swift @@ -77,6 +77,7 @@ public enum ChatCommand { case apiGetChatItemTTL(userId: Int64) case apiSetNetworkConfig(networkConfig: NetCfg) case apiGetNetworkConfig + case apiSetNetworkInfo(networkInfo: UserNetworkInfo) case reconnectAllServers case apiSetChatSettings(type: ChatType, id: Int64, chatSettings: ChatSettings) case apiSetMemberSettings(groupId: Int64, groupMemberId: Int64, memberSettings: GroupMemberSettings) @@ -221,6 +222,7 @@ public enum ChatCommand { case let .apiGetChatItemTTL(userId): return "/_ttl \(userId)" case let .apiSetNetworkConfig(networkConfig): return "/_network \(encodeJSON(networkConfig))" case .apiGetNetworkConfig: return "/network" + case let .apiSetNetworkInfo(networkInfo): return "/_network info \(encodeJSON(networkInfo))" case .reconnectAllServers: return "/reconnect" case let .apiSetChatSettings(type, id, chatSettings): return "/_settings \(ref(type, id)) \(encodeJSON(chatSettings))" case let .apiSetMemberSettings(groupId, groupMemberId, memberSettings): return "/_member settings #\(groupId) \(groupMemberId) \(encodeJSON(memberSettings))" @@ -368,6 +370,7 @@ public enum ChatCommand { case .apiGetChatItemTTL: return "apiGetChatItemTTL" case .apiSetNetworkConfig: return "apiSetNetworkConfig" case .apiGetNetworkConfig: return "apiGetNetworkConfig" + case .apiSetNetworkInfo: return "apiSetNetworkInfo" case .reconnectAllServers: return "reconnectAllServers" case .apiSetChatSettings: return "apiSetChatSettings" case .apiSetMemberSettings: return "apiSetMemberSettings" @@ -1261,7 +1264,7 @@ public struct NetCfg: Codable, Equatable { sessionMode: TransportSessionMode.user, tcpConnectTimeout: 20_000_000, tcpTimeout: 15_000_000, - tcpTimeoutPerKb: 45_000, + tcpTimeoutPerKb: 10_000, tcpKeepAlive: KeepAliveOpts.defaults, smpPingInterval: 1200_000_000, smpPingCount: 3, @@ -1273,7 +1276,7 @@ public struct NetCfg: Codable, Equatable { sessionMode: TransportSessionMode.user, tcpConnectTimeout: 30_000_000, tcpTimeout: 20_000_000, - tcpTimeoutPerKb: 60_000, + tcpTimeoutPerKb: 15_000, tcpKeepAlive: KeepAliveOpts.defaults, smpPingInterval: 1200_000_000, smpPingCount: 3, @@ -2086,3 +2089,31 @@ public enum AppSettingsLockScreenCalls: String, Codable { case show case accept } + +public struct UserNetworkInfo: Codable, Equatable { + public let networkType: UserNetworkType + public let online: Bool + + public init(networkType: UserNetworkType, online: Bool) { + self.networkType = networkType + self.online = online + } +} + +public enum UserNetworkType: String, Codable { + case none + case cellular + case wifi + case ethernet + case other + + public var text: LocalizedStringKey { + switch self { + case .none: "No network connection" + case .cellular: "Cellular" + case .wifi: "WiFi" + case .ethernet: "Wired ethernet" + case .other: "Other" + } + } +} diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt index 38619cfef2..3ce9b68b5e 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt @@ -3035,7 +3035,7 @@ data class NetCfg( sessionMode = TransportSessionMode.User, tcpConnectTimeout = 20_000_000, tcpTimeout = 15_000_000, - tcpTimeoutPerKb = 45_000, + tcpTimeoutPerKb = 10_000, tcpKeepAlive = KeepAliveOpts.defaults, smpPingInterval = 1200_000_000, smpPingCount = 3 @@ -3049,7 +3049,7 @@ data class NetCfg( sessionMode = TransportSessionMode.User, tcpConnectTimeout = 30_000_000, tcpTimeout = 20_000_000, - tcpTimeoutPerKb = 60_000, + tcpTimeoutPerKb = 15_000, tcpKeepAlive = KeepAliveOpts.defaults, smpPingInterval = 1200_000_000, smpPingCount = 3 diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/AdvancedNetworkSettings.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/AdvancedNetworkSettings.kt index a2ea5959c3..c031a0fcb7 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/AdvancedNetworkSettings.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/AdvancedNetworkSettings.kt @@ -167,7 +167,7 @@ fun AdvancedNetworkSettingsView(chatModel: ChatModel) { // can't be higher than 130ms to avoid overflow on 32bit systems TimeoutSettingRow( stringResource(MR.strings.network_option_protocol_timeout_per_kb), networkTCPTimeoutPerKb, - listOf(15_000, 30_000, 45_000, 60_000, 90_000, 120_000), secondsLabel + listOf(2_500, 5_000, 10_000, 15_000, 20_000, 30_000), secondsLabel ) } SectionItemView { From e560b49d14c363d0ace0a4abf574a0e606c77c78 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Thu, 11 Apr 2024 18:02:41 +0700 Subject: [PATCH 24/60] ios: sound prompts and vibration during calls (#4005) * ios: sound prompts and vibration * awaiting call receipt * update --------- Co-authored-by: Evgeny Poberezkin --- apps/ios/Shared/Model/SimpleXAPI.swift | 5 ++ .../Shared/Views/Call/ActiveCallView.swift | 38 +++++++++++ apps/ios/Shared/Views/Call/SoundPlayer.swift | 61 ++++++++++++++++++ apps/ios/sounds/connecting_call.mp3 | Bin 0 -> 7104 bytes apps/ios/sounds/in_call.mp3 | Bin 0 -> 63425 bytes 5 files changed, 104 insertions(+) create mode 100644 apps/ios/sounds/connecting_call.mp3 create mode 100644 apps/ios/sounds/in_call.mp3 diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift index 94a424d319..69b660ad3c 100644 --- a/apps/ios/Shared/Model/SimpleXAPI.swift +++ b/apps/ios/Shared/Model/SimpleXAPI.swift @@ -1469,6 +1469,8 @@ class ChatReceiver { private var receiveMessages = true private var _lastMsgTime = Date.now + var messagesChannel: ((ChatResponse) -> Void)? = nil + static let shared = ChatReceiver() var lastMsgTime: Date { get { _lastMsgTime } } @@ -1486,6 +1488,9 @@ class ChatReceiver { if let msg = await chatRecvMsg() { self._lastMsgTime = .now await processReceivedMsg(msg) + if let messagesChannel { + messagesChannel(msg) + } } _ = try? await Task.sleep(nanoseconds: 7_500_000) } diff --git a/apps/ios/Shared/Views/Call/ActiveCallView.swift b/apps/ios/Shared/Views/Call/ActiveCallView.swift index 9f246f63f3..cffdefaaa2 100644 --- a/apps/ios/Shared/Views/Call/ActiveCallView.swift +++ b/apps/ios/Shared/Views/Call/ActiveCallView.swift @@ -9,6 +9,7 @@ import SwiftUI import WebKit import SimpleXChat +import AVFoundation struct ActiveCallView: View { @EnvironmentObject var m: ChatModel @@ -21,6 +22,7 @@ struct ActiveCallView: View { @Binding var canConnectCall: Bool @State var prevColorScheme: ColorScheme = .dark @State var pipShown = false + @State var wasConnected = false var body: some View { ZStack(alignment: .topLeading) { @@ -69,6 +71,11 @@ struct ActiveCallView: View { Task { await m.callCommand.setClient(nil) } AppDelegate.keepScreenOn(false) client?.endCall() + CallSoundsPlayer.shared.stop() + try? AVAudioSession.sharedInstance().setCategory(.soloAmbient) + if (wasConnected) { + CallSoundsPlayer.shared.vibrate(long: true) + } } .background(m.activeCallViewIsCollapsed ? .clear : .black) // Quite a big delay when opening/closing the view when a scheme changes (globally) this way. It's not needed when CallKit is used since status bar is green with white text on it @@ -103,6 +110,11 @@ struct ActiveCallView: View { call.callState = .invitationSent call.localCapabilities = capabilities } + if call.supportsVideo { + try? AVAudioSession.sharedInstance().setCategory(.playback, options: .defaultToSpeaker) + } + CallSoundsPlayer.shared.startConnectingCallSound() + activeCallWaitDeliveryReceipt() } case let .offer(offer, iceCandidates, capabilities): Task { @@ -126,6 +138,8 @@ struct ActiveCallView: View { } await MainActor.run { call.callState = .negotiated + CallSoundsPlayer.shared.stop() + try? AVAudioSession.sharedInstance().setCategory(.soloAmbient) } } case let .ice(iceCandidates): @@ -144,6 +158,10 @@ struct ActiveCallView: View { : CallController.shared.reportIncomingCall(call: call, connectedAt: nil) call.callState = .connected call.connectedAt = .now + if !wasConnected { + CallSoundsPlayer.shared.vibrate(long: false) + wasConnected = true + } } if state.connectionState == "closed" { closeCallView(client) @@ -161,6 +179,10 @@ struct ActiveCallView: View { call.callState = .connected call.connectionInfo = connectionInfo call.connectedAt = .now + if !wasConnected { + CallSoundsPlayer.shared.vibrate(long: false) + wasConnected = true + } case .ended: closeCallView(client) call.callState = .ended @@ -187,6 +209,22 @@ struct ActiveCallView: View { } } + private func activeCallWaitDeliveryReceipt() { + ChatReceiver.shared.messagesChannel = { msg in + guard let call = ChatModel.shared.activeCall, call.callState == .invitationSent else { + ChatReceiver.shared.messagesChannel = nil + return + } + if case let .chatItemStatusUpdated(_, msg) = msg, + msg.chatInfo.id == call.contact.id, + case .sndCall = msg.chatItem.content, + case .sndRcvd = msg.chatItem.meta.itemStatus { + CallSoundsPlayer.shared.startInCallSound() + ChatReceiver.shared.messagesChannel = nil + } + } + } + private func closeCallView(_ client: WebRTCClient) { if m.activeCall != nil { m.showCallView = false diff --git a/apps/ios/Shared/Views/Call/SoundPlayer.swift b/apps/ios/Shared/Views/Call/SoundPlayer.swift index 17c13ab403..c7803a0cb8 100644 --- a/apps/ios/Shared/Views/Call/SoundPlayer.swift +++ b/apps/ios/Shared/Views/Call/SoundPlayer.swift @@ -8,6 +8,7 @@ import Foundation import AVFoundation +import UIKit class SoundPlayer { static let shared = SoundPlayer() @@ -43,3 +44,63 @@ class SoundPlayer { audioPlayer = nil } } + +class CallSoundsPlayer { + static let shared = CallSoundsPlayer() + private var audioPlayer: AVAudioPlayer? + private var playerTask: Task = Task {} + + private func start(_ soundName: String, delayMs: Double) { + audioPlayer?.stop() + playerTask.cancel() + logger.debug("start \(soundName)") + guard let path = Bundle.main.path(forResource: soundName, ofType: "mp3", inDirectory: "sounds") else { + logger.debug("start: file not found") + return + } + do { + let player = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: path)) + if player.prepareToPlay() { + audioPlayer = player + } + } catch { + logger.debug("start: AVAudioPlayer error \(error.localizedDescription)") + } + + playerTask = Task { + while let player = audioPlayer { + player.play() + do { + try await Task.sleep(nanoseconds: UInt64((player.duration * 1_000_000_000) + delayMs * 1_000_000)) + } catch { + break + } + } + } + } + + func startConnectingCallSound() { + start("connecting_call", delayMs: 0) + } + + func startInCallSound() { + // Taken from https://github.com/TelegramOrg/Telegram-Android + // https://github.com/TelegramOrg/Telegram-Android/blob/master/LICENSE + start("in_call", delayMs: 1000) + } + + func stop() { + playerTask.cancel() + audioPlayer?.stop() + audioPlayer = nil + } + + func vibrate(long: Bool) { + // iOS just don't want to vibrate more than once after a short period of time, and all 'styles' feel the same + if long { + AudioServicesPlayAlertSound(kSystemSoundID_Vibrate) + } else { + UIImpactFeedbackGenerator(style: .heavy).impactOccurred() + } + } +} diff --git a/apps/ios/sounds/connecting_call.mp3 b/apps/ios/sounds/connecting_call.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..fc425bab97663f579a8274758bb5a7a580441b70 GIT binary patch literal 7104 zcmeZtF=l1}0WmO%LHvKLZ~!RC6a$jk!m^QpVNwnQ!>a#O2S9rQVfJ7e&Z6MNW3YmQ z`HA`j{^$0Oo+z}<-`&_?AjZb(FeCFp@|C3jrOVg^oi9k7<2{ftg|)F^gC850gZxVo zcWKGljVoCl*hJ@7$VMkD0QqMP6VyKmk*^!?&&pz3c_jb;gCriq#^wSov1zIdKUf>% z|Nor1b9oZOwo@uA7NwYM+S}pu=a4{K(9GP~eL}^-ZgZDyIvgxgz{{cZ?Cy=!zrEgT z%hseB>podJW%`x_3MvdBd;W_ZV2WXM0Qzc%2>T2T!5J|UGb&tro7F@ZGQM;koun67 zF-5Z6(%|j9Z2iAarv&#$9)N=^4U zw^=pMDS(BG>xzSdp^4?BKrxU#@1z>5sv-}*VE(n`+U_4-i$ia6#j6J&W8th%51*Jh z%`$bmWkpnWkwBx=nVBnCrn5Rud^yqi((6dk|5N{;0VW^5m(zTBCBJ`ux8d*eHP*or zd9@enb@sj4_)f+vW6ScU^*^fxxv9Fz?cU)F`HWSfG8?A{KuMt{Xr2LH67drNKl438U?7#|05r(P`u*>gwYW8P#5Hj{}8dwtTL@xk~jbF>G@BA`uTNPt0m2y)-Nn%-!oXxw4+4T>m#m(!Qa%8zZ zzZa|0;$0`@E1wmrPCR9}&Cir!!)~4(i4vi#f41KQ*>hPkF{@gFrDB50x>py2LN`uI zzBYNLIx~w*pm)FK&gog7H_dD-Wzk8`HB4H2Guw26>&ru{Ivl2UsU1n}|I)=+KE0bK z#PzQ8q~@ik;;ndQ9?b07Wvw`sznHV=%+8rth1MCcHk}07b3!6AYqA7)$pmGUQ}e7U zR(tO5+)}YzCt(G<&Y4MN^Ol8gK3soC`_g%PK53f-t&S~B;>Nu}%q;!P3l^>3vh3^f ztsPpjt@|g)csYx=DPOv2-SPYQqD>Y@jz))ZGceQ{`<|WuX%WbtgW`;7%@W*Y6W9M= zeZD@qa^uP!Gqj8}_!{-D2n$R+omsHGFZx+{uHD+s#tkl?*jbJ(NIjv(qL6SgQE!Uq zQmgzUt^X?GkMF!&yZF;7jVo>v&G%V6CF`5F;`gZp4HVrkc@k!weH*L`K7nm{7u0GqS=BG|EU702)_@ Ok6Tj3MC^vp%N_vuAz$nO literal 0 HcmV?d00001 diff --git a/apps/ios/sounds/in_call.mp3 b/apps/ios/sounds/in_call.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..1049be4462aa3b39240ffc4e958179748250b2ab GIT binary patch literal 63425 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

v^nb|m1 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 literal 0 HcmV?d00001 From 94851f177bf8f9f6a45bfab864378f9e2db644fb Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Thu, 11 Apr 2024 18:05:01 +0700 Subject: [PATCH 25/60] ios: noRcvUser handling while downloading a file in migration process (#4012) --- apps/ios/Shared/Views/Migration/MigrateToDevice.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/ios/Shared/Views/Migration/MigrateToDevice.swift b/apps/ios/Shared/Views/Migration/MigrateToDevice.swift index 9afd0dd406..e290537b46 100644 --- a/apps/ios/Shared/Views/Migration/MigrateToDevice.swift +++ b/apps/ios/Shared/Views/Migration/MigrateToDevice.swift @@ -448,6 +448,9 @@ struct MigrateToDevice: View { case .rcvFileError: alert = .error(title: "Download failed", error: "File was deleted or link is invalid") migrationState = .downloadFailed(totalBytes: totalBytes, link: link, archivePath: archivePath) + case .chatError(_, .error(.noRcvFileUser)): + alert = .error(title: "Download failed", error: "File was deleted or link is invalid") + migrationState = .downloadFailed(totalBytes: totalBytes, link: link, archivePath: archivePath) default: logger.debug("unsupported event: \(msg.responseType)") } From 34dee32def7c57f0d4a55f0ae72394e0608bdce4 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Thu, 11 Apr 2024 19:19:00 +0700 Subject: [PATCH 26/60] android, desktop: sound prompts and vibration (#3997) * android, desktop: sound prompts and vibration * moved audio playing to js * Revert "moved audio playing to js" This reverts commit a9355c2d88261a5f3a3e25f5c95b02956eab4e4c. * sound from speaker/earpiece * better * changes * license of audio * reorder lines * loop fix * awaiting call receipt * desktop * new line --- .../simplex/common/helpers/SoundPlayer.kt | 90 ++++++++++++++++-- .../common/platform/RecAndPlay.android.kt | 1 + .../common/views/call/CallView.android.kt | 19 +++- .../androidMain/res/raw/connecting_call.mp3 | Bin 0 -> 7104 bytes .../src/androidMain/res/raw/in_call.mp3 | Bin 0 -> 63425 bytes .../chat/simplex/common/model/SimpleXAPI.kt | 4 + .../simplex/common/platform/RecAndPlay.kt | 9 ++ .../simplex/common/views/call/CallView.kt | 20 ++++ .../common/platform/RecAndPlay.desktop.kt | 36 ++++++- .../common/views/call/CallView.desktop.kt | 20 +--- .../resources/media/connecting_call.mp3 | Bin 0 -> 7104 bytes .../desktopMain/resources/media/in_call.mp3 | Bin 0 -> 63425 bytes 12 files changed, 175 insertions(+), 24 deletions(-) create mode 100644 apps/multiplatform/common/src/androidMain/res/raw/connecting_call.mp3 create mode 100644 apps/multiplatform/common/src/androidMain/res/raw/in_call.mp3 create mode 100644 apps/multiplatform/common/src/desktopMain/resources/media/connecting_call.mp3 create mode 100644 apps/multiplatform/common/src/desktopMain/resources/media/in_call.mp3 diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/helpers/SoundPlayer.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/helpers/SoundPlayer.kt index ff83c10df3..d567b3f7f9 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/helpers/SoundPlayer.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/helpers/SoundPlayer.kt @@ -2,17 +2,16 @@ package chat.simplex.common.helpers import android.media.* import android.net.Uri -import android.os.VibrationEffect -import android.os.Vibrator +import android.os.* import androidx.core.content.ContextCompat import chat.simplex.common.R -import chat.simplex.common.platform.SoundPlayerInterface -import chat.simplex.common.platform.androidAppContext +import chat.simplex.common.platform.* +import chat.simplex.common.views.helpers.withApi import kotlinx.coroutines.* object SoundPlayer: SoundPlayerInterface { private var player: MediaPlayer? = null - var playing = false + private var playing = false override fun start(scope: CoroutineScope, sound: Boolean) { player?.reset() @@ -32,7 +31,7 @@ object SoundPlayer: SoundPlayerInterface { scope.launch { while (playing) { if (sound) player?.start() - vibrator?.vibrate(effect) + vibrator?.vibrateApiVersionAware(effect) delay(3500) } } @@ -43,3 +42,82 @@ object SoundPlayer: SoundPlayerInterface { player?.stop() } } + +object CallSoundsPlayer: CallSoundsPlayerInterface { + private var player: MediaPlayer? = null + private var playingJob: Job? = null + + private fun start(soundPath: String, delay: Long, scope: CoroutineScope) { + playingJob?.cancel() + player?.reset() + player = MediaPlayer().apply { + setAudioAttributes( + AudioAttributes.Builder() + .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) + .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION_SIGNALLING) + .build() + ) + setDataSource(androidAppContext, Uri.parse(soundPath)) + prepare() + } + if (delay < 1000) { + player?.isLooping = true + player?.start() + return + } + playingJob = scope.launch { + while (isActive) { + player?.start() + delay(delay) + } + } + } + + override fun startConnectingCallSound(scope: CoroutineScope) { + // Taken from https://github.com/TelegramOrg/Telegram-Android + // https://github.com/TelegramOrg/Telegram-Android/blob/master/LICENSE + start("android.resource://" + androidAppContext.packageName + "/" + R.raw.connecting_call, 0, scope) + } + + override fun startInCallSound(scope: CoroutineScope) { + start("android.resource://" + androidAppContext.packageName + "/" + R.raw.in_call, 2000, scope) + } + + override fun vibrate(times: Int) { + val vibrator = ContextCompat.getSystemService(androidAppContext, Vibrator::class.java) + val effect = VibrationEffect.createOneShot(20, VibrationEffect.DEFAULT_AMPLITUDE) + vibrator?.vibrateApiVersionAware(effect) + repeat(times - 1) { + withApi { + delay(50) + vibrator?.vibrateApiVersionAware(effect) + } + } + } + + override fun stop() { + playingJob?.cancel() + player?.stop() + } +} + +private fun Vibrator.vibrateApiVersionAware(effect: VibrationEffect) { + if (Build.VERSION.SDK_INT >= 33) { + vibrate( + effect, + VibrationAttributes.Builder() + .setUsage(VibrationAttributes.USAGE_ALARM) + .build() + ) + } else if (Build.VERSION.SDK_INT >= 29) { + vibrate( + effect, + AudioAttributes.Builder() + .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) + .setUsage(AudioAttributes.USAGE_ALARM) + .build() + ) + } else { + vibrate(effect) + } +} diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/RecAndPlay.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/RecAndPlay.android.kt index 5b0d3c778f..5cb10ff070 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/RecAndPlay.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/RecAndPlay.android.kt @@ -296,6 +296,7 @@ actual object AudioPlayer: AudioPlayerInterface { } actual typealias SoundPlayer = chat.simplex.common.helpers.SoundPlayer +actual typealias CallSoundsPlayer = chat.simplex.common.helpers.CallSoundsPlayer class CryptoMediaSource(val data: ByteArray) : MediaDataSource() { override fun readAt(position: Long, buffer: ByteArray, offset: Int, size: Int): Int { diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/call/CallView.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/call/CallView.android.kt index b0c4beded0..af261e2a98 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/call/CallView.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/call/CallView.android.kt @@ -69,6 +69,8 @@ fun activeCallDestroyWebView() = withApi { @SuppressLint("SourceLockedOrientationActivity") @Composable actual fun ActiveCallView() { + val call = remember { chatModel.activeCall }.value + val scope = rememberCoroutineScope() val audioViaBluetooth = rememberSaveable { mutableStateOf(false) } val proximityLock = remember { val pm = (androidAppContext.getSystemService(Context.POWER_SERVICE) as PowerManager) @@ -78,6 +80,13 @@ actual fun ActiveCallView() { null } } + val wasConnected = rememberSaveable { mutableStateOf(false) } + LaunchedEffect(call) { + if (call?.callState == CallState.Connected && !wasConnected.value) { + CallSoundsPlayer.vibrate(2) + wasConnected.value = true + } + } DisposableEffect(Unit) { val am = androidAppContext.getSystemService(Context.AUDIO_SERVICE) as AudioManager var btDeviceCount = 0 @@ -107,6 +116,10 @@ actual fun ActiveCallView() { } am.registerAudioDeviceCallback(audioCallback, null) onDispose { + CallSoundsPlayer.stop() + if (wasConnected.value) { + CallSoundsPlayer.vibrate() + } dropAudioManagerOverrides() am.unregisterAudioDeviceCallback(audioCallback) if (proximityLock?.isHeld == true) { @@ -122,8 +135,6 @@ actual fun ActiveCallView() { if (proximityLock?.isHeld == false) proximityLock.acquire() } } - val scope = rememberCoroutineScope() - val call = chatModel.activeCall.value Box(Modifier.fillMaxSize()) { WebRTCView(chatModel.callCommand) { apiMsg -> Log.d(TAG, "received from WebRTCView: $apiMsg") @@ -136,6 +147,9 @@ actual fun ActiveCallView() { val callType = CallType(call.localMedia, r.capabilities) chatModel.controller.apiSendCallInvitation(callRh, call.contact, callType) updateActiveCall(call) { it.copy(callState = CallState.InvitationSent, localCapabilities = r.capabilities) } + setCallSound(call.soundSpeaker, audioViaBluetooth) + CallSoundsPlayer.startConnectingCallSound(scope) + activeCallWaitDeliveryReceipt(scope) } is WCallResponse.Offer -> withBGApi { chatModel.controller.apiSendCallOffer(callRh, call.contact, r.offer, r.iceCandidates, call.localMedia, r.capabilities) @@ -144,6 +158,7 @@ actual fun ActiveCallView() { is WCallResponse.Answer -> withBGApi { chatModel.controller.apiSendCallAnswer(callRh, call.contact, r.answer, r.iceCandidates) updateActiveCall(call) { it.copy(callState = CallState.Negotiated) } + CallSoundsPlayer.stop() } is WCallResponse.Ice -> withBGApi { chatModel.controller.apiSendCallExtraInfo(callRh, call.contact, r.iceCandidates) diff --git a/apps/multiplatform/common/src/androidMain/res/raw/connecting_call.mp3 b/apps/multiplatform/common/src/androidMain/res/raw/connecting_call.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..fc425bab97663f579a8274758bb5a7a580441b70 GIT binary patch literal 7104 zcmeZtF=l1}0WmO%LHvKLZ~!RC6a$jk!m^QpVNwnQ!>a#O2S9rQVfJ7e&Z6MNW3YmQ z`HA`j{^$0Oo+z}<-`&_?AjZb(FeCFp@|C3jrOVg^oi9k7<2{ftg|)F^gC850gZxVo zcWKGljVoCl*hJ@7$VMkD0QqMP6VyKmk*^!?&&pz3c_jb;gCriq#^wSov1zIdKUf>% z|Nor1b9oZOwo@uA7NwYM+S}pu=a4{K(9GP~eL}^-ZgZDyIvgxgz{{cZ?Cy=!zrEgT z%hseB>podJW%`x_3MvdBd;W_ZV2WXM0Qzc%2>T2T!5J|UGb&tro7F@ZGQM;koun67 zF-5Z6(%|j9Z2iAarv&#$9)N=^4U zw^=pMDS(BG>xzSdp^4?BKrxU#@1z>5sv-}*VE(n`+U_4-i$ia6#j6J&W8th%51*Jh z%`$bmWkpnWkwBx=nVBnCrn5Rud^yqi((6dk|5N{;0VW^5m(zTBCBJ`ux8d*eHP*or zd9@enb@sj4_)f+vW6ScU^*^fxxv9Fz?cU)F`HWSfG8?A{KuMt{Xr2LH67drNKl438U?7#|05r(P`u*>gwYW8P#5Hj{}8dwtTL@xk~jbF>G@BA`uTNPt0m2y)-Nn%-!oXxw4+4T>m#m(!Qa%8zZ zzZa|0;$0`@E1wmrPCR9}&Cir!!)~4(i4vi#f41KQ*>hPkF{@gFrDB50x>py2LN`uI zzBYNLIx~w*pm)FK&gog7H_dD-Wzk8`HB4H2Guw26>&ru{Ivl2UsU1n}|I)=+KE0bK z#PzQ8q~@ik;;ndQ9?b07Wvw`sznHV=%+8rth1MCcHk}07b3!6AYqA7)$pmGUQ}e7U zR(tO5+)}YzCt(G<&Y4MN^Ol8gK3soC`_g%PK53f-t&S~B;>Nu}%q;!P3l^>3vh3^f ztsPpjt@|g)csYx=DPOv2-SPYQqD>Y@jz))ZGceQ{`<|WuX%WbtgW`;7%@W*Y6W9M= zeZD@qa^uP!Gqj8}_!{-D2n$R+omsHGFZx+{uHD+s#tkl?*jbJ(NIjv(qL6SgQE!Uq zQmgzUt^X?GkMF!&yZF;7jVo>v&G%V6CF`5F;`gZp4HVrkc@k!weH*L`K7nm{7u0GqS=BG|EU702)_@ Ok6Tj3MC^vp%N_vuAz$nO literal 0 HcmV?d00001 diff --git a/apps/multiplatform/common/src/androidMain/res/raw/in_call.mp3 b/apps/multiplatform/common/src/androidMain/res/raw/in_call.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..1049be4462aa3b39240ffc4e958179748250b2ab GIT binary patch literal 63425 zcmeI42Uru^+NjeY0YYz~haw`PP7=D5(2D_SD%c1F5v(W{tVswUV31}BhysF&ii&`W zWlKU6BvJ%>13^SZrP)BpodLIdpZomz?|<((JNumbWIY<NqVuyx|O!*=7LA+{)I@(b?6*ld{k+aB=Xml~h{9 z>b2`OZr-we=WcpDD=B&ZfsE|KoTJC{PZXa%TY9m);_CGqw|KP;jm<5s9S$d1WZ2Sj&aFD;NfBJvV|38fSA0PKWi9fjB z|Fr(0fBjnjf1J>N%sZ>STb_Tv9~|EZ`;p_NGnm>YkCR*}9lpv)FBl$UTWT!PhEma) zvEzHJ9OA{=FRssdfAL%T=GHJinWpjs^4GG zl#F04M#L&*^aeTLt!Y`#p$*^*Z@P z1W+o5sqFnba~c$4RaWHfl(Las|FxcBruC!0Hibq1s#IQxzpoIUqQqUN7xf+;Oe?B? zHm`{ZBt2U$-5`VM24-2A;=*B#8hf@QGW=F0mLAu3Qx6H*{k4~;q4t@?#`l@rupU*~ ztoiguluQr3bl0zgs+q!*VK7^=gObfw#UN`{wseD<`l%H;?k!5EF-pco36UI?q^igOLw1)ad|4bSAIIh@T0Ph}2FL~{|3Q`ld4g0R9mHK{ISlXrOJ7>xhh>)mynzM;BskQh`)e=^fEj^vTe+WHrmv% zIz&l^+#kfZKgSF_CW9Ni%%JFc1AciZ$>4X^x5z+HT+A`V5o0ZUY6}%(ESo2zY;C%} zrGD$XZFE7M1`K8`p^9mW*p0o29q2l)Nm=pc(S*zq+0_>YI`1y+Y){w6w!fiv&&+5I z=zQ47dF-6Q%S3Sj6CT4ZN_UHh zx)VCmb>?S0%|7pQX~`m=6~j9yr)US9ce5)Led>;-^;uz6RVWfDHUj3qo}iJSMc8|H z&2{M&5ln8Fozsid*L=Xa3}BQ|aW|mz^)XEL>|AB7?cT zC~NLlM6a_%H}e_NpD}=PVj3Zs3<}J}V!`Ka@=R*YE_x$fAou{hh(`cxT$>5+y&Z|4 zJS)u02kDN?FFw}eA^Xkq`H6&w&fP#_T_OSEKfoZCsOh@c;|7D`13zy}v6g0=o}Nc9 zhTBRWT=Z#_;aryu3^<xjT4c0$nk>Gey2U|ewidn|HP ziG=K(fs`VfRj3p@7{d8?1HJVwR>0Sxk?<%4P2CgALM@l8*kxBAE5SjBQE>)+uweL_ z4DKh`bCtQ{g0J9*p8%-~-UF7rErh_tHsBcS3h{gm8PJxJHJ94W100#&Gho(rQ4%U# zbr|{C`5ATGH84+W7{!}w5S@gKlX#asD(D9fF}6rJ=>K;^3K()X19M??z}}fg5XfvI z-Z^>HG21S3s5l((+rXbnJ&AE$!f6!Ne&Q`98E( z1F?s1W&-b-w~F>#(@y0VsnW9{q$j1DIR(^ z9_HSSj`_rZq0RIq!5AwI?lS^X%(8jdd5KCUFu zs3$E)4<|oFzTmYEcnX$4$e{6AQaZ^dxi40IAM8pbv6hZ*@cU|PK%UoteWbDayzBaf z?gwtI!Zd_p%sf2lpXpO`z!!fR|EduVo+poU3J>HQe(s`IEZN7&V_-Yh+J8A{+Ww#QL03eE(tn8t$cjPD#p?hwu>Je0HU*%BRZv@eI|)POUl z)*U~x>7k?c9j_beTB+PoyZFcX?UVTnr}a*x{^EaDWP@bNxb2q>%QL7&4EU0iwVGL& z8A_xT)kS^}vS+c2^icTver&v=-s^Bm?sxFRLj3FGhpwS(SRj8(#@8~CKRQDnB`aVs z-lBA!ss|MEr_N`!;0H5*QBq_wN3QD!PQ!T)$LEEomQ9Hv$5{Uq4#T*TE8%}lM%xoV zyY7W|Q*rUb=VOjj6DL~*-;u$WWD}JEic=l1Eis*#u*2JNu=O{ftELZF2iGA4vdC7J zpAEP8TidjoyxkDmM6Y-%5NzBin8+6_bjm39KbY8*|8}TqNlxZPhfSX)SM1oAB;Ov- zmpF5Uh0}k0^t7h4#>x8qGZ(nzUz`X9O+Tb~;@`yn{9&;O#X&?WjWilztyoJ)?W}X$ z?+o#8kRQ5>abo57E7)|SGh)Y4=mdR~9G%MOLB3$V9Ppe+z;fGw6^uQ$qzWAmg1e!D zJrF!ZT~j(ie+QoDgH?)`3MGu+D(ewVX@(iryH_yU!m=26Y7q?Bvc`DjDe4_3T4u7^ z)~)%aDoz>-Dw>GEJZzALj%j*+et|S6p331^!ItWkKE7C%>o;+V%}tg`m_3_-jB zy?o{zlwOUvRQ2@D=m7591=W1jSIcqHU9UOw$=h_(qOVrvmbV`{n&XPQp@yY%veTK6VtmX9|^q#uyor@`p4tQLg zW#HvmWgPnzj9U)6UQHi5GQIvyyS{Q`$CV@pK>H&ICqH3L*`FKF1%mB#a6!@E6Fo-M z1^_&-8K5OB22RKAu$|R{18QsE18d=1>|ZM9)2&~-?3!nFGPA@>hw&BkhDB2-1d|1jDFgOj4w-|wOaV*vi>x%3(MB_jU7TlW*uVLc`}Pqz z|Nr9ZnwKZsKi|U$ZSA>3)HXljD4AACa6*uPDDIdQO<5M=e_MX2AI(G3yYRM5bjC(- z{o^738%~DoPwRk!imkiy5>HE$?wKK5|IzsxV6siUd&rp`%you(XV;TH2j|x+WXw>O z=#?%QycbkN_Ayssd9p#@dwbjwv?ziK@UNh_q0sIQ0chj(_6|}TQJx7CFEG?PB}6Z; z2^RM;16x?uu0fgM2{$rB27j9Nr$uVWz!^^5Msp(B_i3~O2KTV9~dow{C`Uys)Ov$qYNvjDgP@OJiY$!gZ>w^KhU{AW3osJ?t*vk za8PhbT9<7A7ZiQ{meQeAqGu=>p-AewWmUooTSbbfwa-wqDs~*J7SN|-c|i$ph3xhL z?kjXKZ5C1z#hoY>o!?$pu zUW|U(?)b9?A^UbTwb%1^X~aL%BrxAepLw%IyCSoRbF`qnx=`M&ao)&y^-Jipg5$I4 zFa9EPzmOtQE~hC|8TJF;180ys;EwNDq%@Q=%G{a-x6>F|*hVlB&y6=Ah~NMn>8OVDVh#3|T=#ZuozFSa zRS9|(C--r7h56!4$x(S4?Wt5d4w9HIHGG-AlGL%28Z|bB_51Y$UQbkmfw2I(*97gq`2QDnL1ZFA zX#kPB#9Vu`HMq)J?#^|*<$i+@?1Wd6=^Y5*|K$I8YW?GF;nV)tL~qLeyg=zf{`X{_ zKZB=2*|tjiY{loPTRViU-<{12DJ*oVPtZ6(L}Us~wP)>*MCPzCh)X?}bG6RwBdV$K zNOPX_UwjXRuTzQNWI4+}f1l)tU;glJTEoSqdy6w;!p-70Q2XHQJ=^-Oe~H4n+a6za z&%pUmJv|fzI9?6D2tpF5*V2)N$NNKS4uz$om99;!S=yZ%sqmOpDW(6uC(kVUB1z+H z(@F0X?Z5WKuJKmb`#gf zyMh!J)fqu@)pb9pa6__s;h4SNl>Lz(O8gmrc1^{fl6BMZ|EuZvM=-ht#PC57ouL$- z!Ga&e2O?uU4HahQR3w*9vKDrSGq*(L`+8FSzb6XM^PKJ)?1zw$x<8wRfb2?Uw~ z`d={qd_V1fS%5FM)T+2bOWPtb*2>nRF>F=HHpj=4F9py5gLGqO`BO`>8j|%^WA7x{ z^=_Ow?(dOgSU~8L^+fG+ErSIRPsYv)Hjic+=B}exOjLs_+Yy{OMyYf%k869LsQl#` zf1RQ1!u`})6ldyup3{EqtnNc|z(N}8+Z@!%6V;Ex3sy#O6eQ#22-=h#RE5@IUM$6j zJeQ(bHp{o0+@^_L#NLFdi#R?%Z6fqNcxcFW2|7i){{OhiVsyjYd8;%rCIE5PRAa`2k*^*_+OJBx`A;uKi(VI!hLR^=CU)v;!CV6nOMc6jgezN z(bm6At-P^S;o_YVN^!%KY1Jq8_~LZP0wn=`M2|tr?T;=UGTnzTc2rih0xSGg#Ku zy055Lt=6$pC5O_JQjkwExC?PrR=N%UaNQED+$ME^jI*I3-bH z(;%IZXl&|uY@gW^DPygu;3QPWoLAQHceVSpEo&;63v>@;JlWn`Jv9*oGKM{5%&sKd zRbF(!@(g8tPK$iD5}V>P$i!-qiM~c;p4?p>YWu;vYAPX1mugQZchKC)9>Ye~ywnPB z|DGcz%J{`{ML+Vkb*Kzz*Gfc5m1*K;EaxxAz7689ay@Wn^W;k~NC1r`IQsvt_5a76 z@DJ~ZC0%WZkk0wiB%sf{ycPU@5bO^bB?1 zgcP8Lec?vp3EYk(=Rgiy`{Llh)Eo6U41=IO&=d}NQJ?(${f5wnkCr%;oiYFLM zoHX?#M>jqc=d|a?(aF^TdNU6lRd}y+F}mgYF@zKE@KNTs(c%N#U892O?Dwfa5M6M% zZ{vQPJRHT*I}wj_Sm||CzVQT3ig}YG%RQ(y5nYwWy6ua?bjx6hBbMZk(IJ3>Nhtqa zFwbY6CO`o5U#jbIVA%GwEi9`XFhy1aGkM{}S^jH!5_GH;iw*>7re%iEd+DGyaDaEf z-&Owkby(%m}z(?+tAb}j1rvGMNJtrx>m*ml%K6x^Wl z0Wz7Z!j4|o*pAJ`dmiS@m`+k5OcQ;6S~&yj);ooK3wO7KJ)GGDo8_)uCY9i1lUJ^o zX@UuG_f7C)Uk&Yy(8owUL)_C{t{MJGVfpUGlFmB`)@yMGR^i*i7?srIT#PKN*f3NT zG;}}5faur%G{IOwUQAsu`f?dl8yNhbF!wd}Ymk1NMY!fM8dB;IZwK z`53ubz-8nuV5QRy`<9}DWZOmA@s?JL3!|z|mMt8mpYDL>fg|i#z4R`Q6zo0D(7=|% zT+ykO=W&zc>vRf-r#2l|XSQ2vzs>ngPOGV1W%qRbd1~5f!QWDUo-+96(rtYI4tO2j z5UH>*TlI8lZLphBhlGli3p`F$S+CN{0FT>rLo#oc##H|W^uOhx{{`(2*xj7Ue}nWT zWd&5mo9X)VA@vo1E+zX{%6eG<7B!Z@`ouFt8TxYDu0S-h>V|a zbC__}sn8mjCswetUrzZ#(Rad>so?% z+m~7yCEb^=W^{5+^Ee&!^;2UE8>`7aXh0dVlkGZ1aruf%XAODqJMO+iI1!9h5J~Bg!?@IjC~E1T*r__y_F2 zfc)|EozM)>|4I((Px;^H3A#}IM?*=vcO=M1CkRujwm^rqVo}H#zueTEq0$u=J1WmU z)IQPrDkGQg9V1K8WGKt~bl!VL35%P1O8>}O^^o7|2q2Hr8UWkCw7wgNeSW8)&TXyP z*j3H8It|nSuLk+;!^quZqqh&RFJtc%)+f(SoywS}@V^IKXA&|Pq!lx*#(W9htByG8 zG{+O%YV3iHOgo3&fy{lDZnX=1EHIf7UU5+QdAnfZB{Wmy^=HC~b+!I3h&;nU35774 zdi9HnsyPP8n>&^L^n1wd6?2+LboTYkaEUca8alDrgF2OXz~sxnsQ><7uI>LuNEl=hBQB75hUQ<+62?pBIao`{0d z3BViRB{Xx4eG1bk;7b+6VigE}lzFX>4>Z>v<}c_PU~83yE<9KD)=2I*%BuruuQPV; zRa~b$q4yT-{!Tyz*NTZGIt=?BkcU?SL{~TvVYAJ0Ci^|mjMN5fdB54M?K!a0CaWR_ zZ&`jK>YBuedhbxBaGpN%X(3{(SZ<;e=gH zTM+HqI#sgP8n^J-J1_(&XDg0`@dvUzCaoy${O=ob1e2* z5~WSfIX;uBBG|xR0-;>4H4~7|g!qI0_uaJr{TY9v&8PF<*O341S18fTH7z``K*pq* zML!3vXYe)vi@Yyr1@|HzqgG!!9wReAV_8n_(ZW!}9T4}Zd5qng$qd&XBY$FLk!Gse zjNjY8AW^XD94tpk!=xPV$hhaCfh5V?e%T3RZnW2T4lM`f#V-Rtc#!M7K37+z9s{A%JMX>4@ z|NkaF`Ir9+3uvOUHm+*_@i5XYLUrGVcGJjNF{bX=Z`yC}daloG7@mx{Pp-!dv-RhV^D?3@A-soqGv7hY->C?6vIyH)E7=xnphxo*1R|Gp8kV1d zXIDEQy_PC_E3?e@A?Ld&>&4gN>v^yCI<0H%7c4vtRxd$!Gm$?)%#Gr;Rlwr(Y7wsf zB&6Yc!|=B%Box=)5Sf5eKGAPuYE6Nas@?J)J&VyWzAtPB)8|V`jo;LgV@K%0$?R_ zl&WX4cR%N?@&4TbgG@l*&B8a*W~BzY__NYaD{C23Yx{~%Wy=Q1^ho&0#I9E}@{+!+ z5ieCxlcpc?>C5z932@>l?wz@YCplMoy*9p!Q~zO1?^4lz4u^UVM;q^PNu5l#HA(sKGVFq^F zvMp8TTC$QBX0+P-z{V?{w6w=p_QW6b z3wKOdNo_?0?;W41rMrRMa3VF@?^UzX;KK1g9QV>+_D7T^AKU<85{MlHG@R}NL8v;Q zdMClgv!xHXQM(85fhX7rVsmV)T#B~Nv8o&DPl5Pz(}ya4`rm>n|BJSR{BJxN%zq*O ztC9anu>A(Kq`(UhnJE{(hpZ4ok#bUF%jg>W%&NGBRW0k}%X9@FSYq_DvjvEG=Hk=1 zC0EH~SM|%ONszZFZCgOHx{XD18GPkSiEPUQbMJoZMPX-CE9&7}NKY!lkXB^nSZ!-p zgvnz?P~p@7v#(DUhAQ_r8zM9CBy_1yt;W%;5$;=gmRtcb7G|3dk%NBk17`rL&~;An>B8|9j27J17Ubd*K z3lE0#35eY$XwUF)_$%rOM&-u%22@74XCE<{mVu}>zfE5<#xJojkBfT&3;bMwjphLh z4|j!8oVw)s8VX9Sa864OR(AOz*f~^JDwI1+k1x1nX;#LFeS#s&KUS1SI>8w7vUpM?F3?^QkbhPB@BOd2)am$h_jLcam317-e}5tvi{}lo zXJ{NvWnTX+I_=oHu+g}nlmQi|tEM3Z9`H=mru3d!`{6_TBgkddW@x?fYS3$sPtEl| zT%+N5jj1g+6u-gXOiE!_SWDH8S&3CT@c1X#S^c}U4?1<6JlcNgw==Q}>gPZ{^iSDu zXb>*mfr>y`Q)N>xP&4<~Mg72kp{~JTscTppwyoSpezxWHX{eExF+;oAkPpoO1-wa)#3D(oTAt2SK4YLK-? z)v5yGU!Oj7ecJxmP(lAYp@5E?u0MZ7P1S$0OrmAK{wW1!d0$NPQU$aBejqeqJAtyZ z!S1*A8Nh%`8Q=%kLk!xuE_`1*@J#SkOGmZx6S$Xo>LP$Zz@5zc2NOe1%<`{lf1LgX zv+1+3OG@%)MP_`bME~W-2%EgK8uz@8*6i2$eIFGxb3)QKEh$JLGBw9T$=TTTDQTa; z^GcsSW}drTfx^tCo5RhFjXNWxjUDG2*)N&SnA$q(;F;SN&MIo1qIUE4EfFXe>ul1{`M1_s=4 z44s+)zI^6bVmXg&HOhA#^>@L2jCq}(R8)n_r9S4&f$h=td3=SJThpF*I;S}5(#f*c z_fQS_D;=CSSplny#mOM89&{xA#?sR5js3FxT#-uWtU$?Nm0H1w?UIhYD=qE^E>BUT z9*L))|D*nVLB#w4Mc7eEgf-PN!IF9s^C)cM+k@E1f**9;Q

v^nb|m1 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 literal 0 HcmV?d00001 diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt index 3ce9b68b5e..7848f9942e 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt @@ -20,6 +20,7 @@ import com.charleskorn.kaml.YamlConfiguration import chat.simplex.res.MR import com.russhwolf.settings.Settings import kotlinx.coroutines.* +import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.sync.withLock import kotlinx.datetime.Clock import kotlinx.datetime.Instant @@ -350,6 +351,8 @@ object ChatController { var ctrl: ChatCtrl? = -1 val appPrefs: AppPreferences by lazy { AppPreferences() } + val messagesChannel: Channel = Channel() + val chatModel = ChatModel private var receiverStarted = false var lastMsgReceivedTimestamp: Long = System.currentTimeMillis() @@ -481,6 +484,7 @@ object ChatController { if (msg != null) { val finishedWithoutTimeout = withTimeoutOrNull(60_000L) { processReceivedMsg(msg) + messagesChannel.trySend(msg) } if (finishedWithoutTimeout == null) { Log.e(TAG, "Timeout reached while processing received message: " + msg.resp.responseType) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/RecAndPlay.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/RecAndPlay.kt index 0e0f769487..1e902b5d88 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/RecAndPlay.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/RecAndPlay.kt @@ -39,4 +39,13 @@ interface SoundPlayerInterface { fun stop() } +interface CallSoundsPlayerInterface { + fun startConnectingCallSound(scope: CoroutineScope) + fun startInCallSound(scope: CoroutineScope) + fun stop() + fun vibrate(times: Int = 1) +} + expect object SoundPlayer: SoundPlayerInterface + +expect object CallSoundsPlayer: CallSoundsPlayerInterface diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/call/CallView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/call/CallView.kt index 2f4ffbb836..e4a6691d49 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/call/CallView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/call/CallView.kt @@ -1,6 +1,26 @@ package chat.simplex.common.views.call import androidx.compose.runtime.Composable +import chat.simplex.common.model.* +import chat.simplex.common.model.ChatModel.controller +import chat.simplex.common.platform.* +import kotlinx.coroutines.* @Composable expect fun ActiveCallView() + +fun activeCallWaitDeliveryReceipt(scope: CoroutineScope) = scope.launch(Dispatchers.Default) { + for (apiResp in controller.messagesChannel) { + val call = chatModel.activeCall.value + if (call == null || call.callState > CallState.InvitationSent) break + val msg = apiResp.resp + if (apiResp.remoteHostId == call.remoteHostId && + msg is CR.ChatItemStatusUpdated && + msg.chatItem.chatInfo.id == call.contact.id && + msg.chatItem.chatItem.content is CIContent.SndCall && + msg.chatItem.chatItem.meta.itemStatus is CIStatus.SndRcvd) { + CallSoundsPlayer.startInCallSound(scope) + break + } + } +} diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/RecAndPlay.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/RecAndPlay.desktop.kt index 50d143aaf5..21a2ccd196 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/RecAndPlay.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/RecAndPlay.desktop.kt @@ -213,7 +213,7 @@ actual object SoundPlayer: SoundPlayerInterface { override fun start(scope: CoroutineScope, sound: Boolean) { val tmpFile = File(tmpDir, UUID.randomUUID().toString()) tmpFile.deleteOnExit() - SoundPlayer::class.java.getResource("/media/ring_once.mp3").openStream()!!.use { it.copyTo(tmpFile.outputStream()) } + SoundPlayer::class.java.getResource("/media/ring_once.mp3")!!.openStream()!!.use { it.copyTo(tmpFile.outputStream()) } playing = true scope.launch { while (playing && sound) { @@ -228,3 +228,37 @@ actual object SoundPlayer: SoundPlayerInterface { AudioPlayer.stop() } } + +actual object CallSoundsPlayer: CallSoundsPlayerInterface { + private var playingJob: Job? = null + + private fun start(soundPath: String, delay: Long, scope: CoroutineScope) { + playingJob?.cancel() + val tmpFile = File(tmpDir, UUID.randomUUID().toString()) + tmpFile.deleteOnExit() + SoundPlayer::class.java.getResource(soundPath)!!.openStream()!!.use { it.copyTo(tmpFile.outputStream()) } + playingJob = scope.launch { + while (isActive) { + AudioPlayer.play(CryptoFile.plain(tmpFile.absolutePath), mutableStateOf(true), mutableStateOf(0), mutableStateOf(0), true) + delay(delay) + } + } + } + + override fun startConnectingCallSound(scope: CoroutineScope) { + // Taken from https://github.com/TelegramOrg/Telegram-Android + // https://github.com/TelegramOrg/Telegram-Android/blob/master/LICENSE + start("/media/connecting_call.mp3", 3000, scope) + } + + override fun startInCallSound(scope: CoroutineScope) { + start("/media/in_call.mp3", 5000, scope) + } + + override fun vibrate(times: Int) {} + + override fun stop() { + playingJob?.cancel() + AudioPlayer.stop() + } +} diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/call/CallView.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/call/CallView.desktop.kt index 87c2d3e8f2..d3bf1bf01e 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/call/CallView.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/call/CallView.desktop.kt @@ -1,30 +1,15 @@ package chat.simplex.common.views.call -import androidx.compose.foundation.* -import androidx.compose.foundation.layout.* -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.* import androidx.compose.runtime.* import androidx.compose.runtime.snapshots.SnapshotStateList -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip -import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalUriHandler -import androidx.compose.ui.text.AnnotatedString -import androidx.compose.ui.unit.dp import chat.simplex.common.model.* import chat.simplex.common.platform.* -import chat.simplex.common.ui.theme.* -import chat.simplex.common.views.chat.item.ItemAction import chat.simplex.common.views.helpers.* import chat.simplex.res.MR -import dev.icerock.moko.resources.compose.painterResource -import dev.icerock.moko.resources.compose.stringResource import kotlinx.coroutines.delay import kotlinx.coroutines.flow.* import kotlinx.datetime.Clock -import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString import org.nanohttpd.protocols.http.IHTTPSession import org.nanohttpd.protocols.http.response.Response @@ -45,6 +30,7 @@ actual fun ActiveCallView() { if (call != null) withBGApi { chatModel.callManager.endCall(call) } } BackHandler(onBack = endCall) + val scope = rememberCoroutineScope() WebRTCController(chatModel.callCommand) { apiMsg -> Log.d(TAG, "received from WebRTCController: $apiMsg") val call = chatModel.activeCall.value @@ -56,6 +42,8 @@ actual fun ActiveCallView() { val callType = CallType(call.localMedia, r.capabilities) chatModel.controller.apiSendCallInvitation(callRh, call.contact, callType) chatModel.activeCall.value = call.copy(callState = CallState.InvitationSent, localCapabilities = r.capabilities) + CallSoundsPlayer.startConnectingCallSound(scope) + activeCallWaitDeliveryReceipt(scope) } is WCallResponse.Offer -> withBGApi { chatModel.controller.apiSendCallOffer(callRh, call.contact, r.offer, r.iceCandidates, call.localMedia, r.capabilities) @@ -64,6 +52,7 @@ actual fun ActiveCallView() { is WCallResponse.Answer -> withBGApi { chatModel.controller.apiSendCallAnswer(callRh, call.contact, r.answer, r.iceCandidates) chatModel.activeCall.value = call.copy(callState = CallState.Negotiated) + CallSoundsPlayer.stop() } is WCallResponse.Ice -> withBGApi { chatModel.controller.apiSendCallExtraInfo(callRh, call.contact, r.iceCandidates) @@ -121,6 +110,7 @@ actual fun ActiveCallView() { // After the first call, End command gets added to the list which prevents making another calls chatModel.callCommand.removeAll { it is WCallCommand.End } onDispose { + CallSoundsPlayer.stop() chatModel.activeCallViewIsVisible.value = false chatModel.callCommand.clear() } diff --git a/apps/multiplatform/common/src/desktopMain/resources/media/connecting_call.mp3 b/apps/multiplatform/common/src/desktopMain/resources/media/connecting_call.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..fc425bab97663f579a8274758bb5a7a580441b70 GIT binary patch literal 7104 zcmeZtF=l1}0WmO%LHvKLZ~!RC6a$jk!m^QpVNwnQ!>a#O2S9rQVfJ7e&Z6MNW3YmQ z`HA`j{^$0Oo+z}<-`&_?AjZb(FeCFp@|C3jrOVg^oi9k7<2{ftg|)F^gC850gZxVo zcWKGljVoCl*hJ@7$VMkD0QqMP6VyKmk*^!?&&pz3c_jb;gCriq#^wSov1zIdKUf>% z|Nor1b9oZOwo@uA7NwYM+S}pu=a4{K(9GP~eL}^-ZgZDyIvgxgz{{cZ?Cy=!zrEgT z%hseB>podJW%`x_3MvdBd;W_ZV2WXM0Qzc%2>T2T!5J|UGb&tro7F@ZGQM;koun67 zF-5Z6(%|j9Z2iAarv&#$9)N=^4U zw^=pMDS(BG>xzSdp^4?BKrxU#@1z>5sv-}*VE(n`+U_4-i$ia6#j6J&W8th%51*Jh z%`$bmWkpnWkwBx=nVBnCrn5Rud^yqi((6dk|5N{;0VW^5m(zTBCBJ`ux8d*eHP*or zd9@enb@sj4_)f+vW6ScU^*^fxxv9Fz?cU)F`HWSfG8?A{KuMt{Xr2LH67drNKl438U?7#|05r(P`u*>gwYW8P#5Hj{}8dwtTL@xk~jbF>G@BA`uTNPt0m2y)-Nn%-!oXxw4+4T>m#m(!Qa%8zZ zzZa|0;$0`@E1wmrPCR9}&Cir!!)~4(i4vi#f41KQ*>hPkF{@gFrDB50x>py2LN`uI zzBYNLIx~w*pm)FK&gog7H_dD-Wzk8`HB4H2Guw26>&ru{Ivl2UsU1n}|I)=+KE0bK z#PzQ8q~@ik;;ndQ9?b07Wvw`sznHV=%+8rth1MCcHk}07b3!6AYqA7)$pmGUQ}e7U zR(tO5+)}YzCt(G<&Y4MN^Ol8gK3soC`_g%PK53f-t&S~B;>Nu}%q;!P3l^>3vh3^f ztsPpjt@|g)csYx=DPOv2-SPYQqD>Y@jz))ZGceQ{`<|WuX%WbtgW`;7%@W*Y6W9M= zeZD@qa^uP!Gqj8}_!{-D2n$R+omsHGFZx+{uHD+s#tkl?*jbJ(NIjv(qL6SgQE!Uq zQmgzUt^X?GkMF!&yZF;7jVo>v&G%V6CF`5F;`gZp4HVrkc@k!weH*L`K7nm{7u0GqS=BG|EU702)_@ Ok6Tj3MC^vp%N_vuAz$nO literal 0 HcmV?d00001 diff --git a/apps/multiplatform/common/src/desktopMain/resources/media/in_call.mp3 b/apps/multiplatform/common/src/desktopMain/resources/media/in_call.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..1049be4462aa3b39240ffc4e958179748250b2ab GIT binary patch literal 63425 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

v^nb|m1 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 literal 0 HcmV?d00001 From b84ef0ce353dfd8df4416a74a50a59ab6789846d Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Thu, 11 Apr 2024 19:26:24 +0700 Subject: [PATCH 27/60] android: network observer (#3992) * android: network observer * removed unused code * rename * rename * new line * rename * changes in logic * adapted to ios logic * change * change * change * networkLost * item in settings * reorder * changes --------- Co-authored-by: Evgeny Poberezkin --- .../main/java/chat/simplex/app/SimplexApp.kt | 7 +- .../src/androidMain/AndroidManifest.xml | 1 + .../simplex/common/helpers/NetworkObserver.kt | 104 ++++++++++++++++++ .../chat/simplex/common/model/ChatModel.kt | 1 + .../chat/simplex/common/model/SimpleXAPI.kt | 31 ++++++ .../chat/simplex/common/platform/Core.kt | 2 +- .../chat/simplex/common/platform/Platform.kt | 1 + .../simplex/common/views/helpers/Utils.kt | 1 - .../views/usersettings/NetworkAndServers.kt | 15 ++- .../commonMain/resources/MR/base/strings.xml | 8 ++ 10 files changed, 165 insertions(+), 6 deletions(-) create mode 100644 apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/helpers/NetworkObserver.kt diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexApp.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexApp.kt index f29aa39607..83105c678a 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexApp.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexApp.kt @@ -16,8 +16,7 @@ import androidx.work.* import chat.simplex.app.model.NtfManager import chat.simplex.app.model.NtfManager.AcceptCallAction import chat.simplex.app.views.call.CallActivity -import chat.simplex.common.helpers.APPLICATION_ID -import chat.simplex.common.helpers.requiresIgnoringBattery +import chat.simplex.common.helpers.* import chat.simplex.common.model.* import chat.simplex.common.model.ChatController.appPrefs import chat.simplex.common.model.ChatModel.updatingChatsMutex @@ -291,6 +290,10 @@ class SimplexApp: Application(), LifecycleEventObserver { activeCallDestroyWebView() } + override fun androidRestartNetworkObserver() { + NetworkObserver.shared.restartNetworkObserver() + } + @SuppressLint("SourceLockedOrientationActivity") @Composable override fun androidLockPortraitOrientation() { diff --git a/apps/multiplatform/common/src/androidMain/AndroidManifest.xml b/apps/multiplatform/common/src/androidMain/AndroidManifest.xml index 74520465ae..eeb822503d 100644 --- a/apps/multiplatform/common/src/androidMain/AndroidManifest.xml +++ b/apps/multiplatform/common/src/androidMain/AndroidManifest.xml @@ -1,4 +1,5 @@ + diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/helpers/NetworkObserver.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/helpers/NetworkObserver.kt new file mode 100644 index 0000000000..825bc8b846 --- /dev/null +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/helpers/NetworkObserver.kt @@ -0,0 +1,104 @@ +package chat.simplex.common.helpers + +import android.net.* +import android.util.Log +import androidx.core.content.getSystemService +import chat.simplex.common.model.ChatModel.controller +import chat.simplex.common.model.UserNetworkInfo +import chat.simplex.common.model.UserNetworkType +import chat.simplex.common.platform.* +import chat.simplex.common.views.helpers.withBGApi +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay + +class NetworkObserver { + private var prevInfo: UserNetworkInfo? = null + + // When having both mobile and Wi-Fi networks enabled with Wi-Fi being active, then disabling Wi-Fi, network reports its offline (which is true) + // but since it will be online after switching to mobile, there is no need to inform backend about such temporary change. + // But if it will not be online after some seconds, report it and apply required measures + private var noNetworkJob = Job() as Job + private val networkCallback = object: ConnectivityManager.NetworkCallback() { + override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) = networkCapabilitiesChanged(networkCapabilities) + override fun onLost(network: Network) = networkLost() + } + private val connectivityManager: ConnectivityManager? = androidAppContext.getSystemService() + + fun restartNetworkObserver() { + if (connectivityManager == null) { + Log.e(TAG, "Connectivity manager is unavailable, network observer is disabled") + val info = UserNetworkInfo( + networkType = UserNetworkType.OTHER, + online = true, + ) + prevInfo = info + setNetworkInfo(info) + return + } + try { + connectivityManager.unregisterNetworkCallback(networkCallback) + } catch (e: Exception) { + // do nothing + } + val initialCapabilities = connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork) + if (initialCapabilities != null) { + networkCapabilitiesChanged(initialCapabilities) + } else { + networkLost() + } + try { + connectivityManager.registerDefaultNetworkCallback(networkCallback) + } catch (e: Exception) { + Log.e(TAG, "Error registering network callback: ${e.stackTraceToString()}") + } + } + + private fun networkCapabilitiesChanged(capabilities: NetworkCapabilities) { + connectivityManager ?: return + val info = UserNetworkInfo( + networkType = networkTypeFromCapabilities(capabilities), + online = capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED), + ) + if (prevInfo != info) { + prevInfo = info + setNetworkInfo(info) + } + } + + private fun networkLost() { + Log.d(TAG, "Network changed: lost") + val none = UserNetworkInfo(networkType = UserNetworkType.NONE, false) + prevInfo = none + setNetworkInfo(none) + } + + private fun setNetworkInfo(info: UserNetworkInfo) { + Log.d(TAG, "Network changed: $info") + noNetworkJob.cancel() + if (info.online) { + withBGApi { + if (controller.hasChatCtrl() && controller.apiSetNetworkInfo(info)) { + chatModel.networkInfo.value = info + } + } + } else { + noNetworkJob = withBGApi { + delay(3000) + if (controller.hasChatCtrl() && controller.apiSetNetworkInfo(info)) { + chatModel.networkInfo.value = info + } + } + } + } + + private fun networkTypeFromCapabilities(capabilities: NetworkCapabilities): UserNetworkType = when { + capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> UserNetworkType.ETHERNET + capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> UserNetworkType.WIFI + capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> UserNetworkType.CELLULAR + else -> UserNetworkType.OTHER + } + + companion object { + val shared = NetworkObserver() + } +} 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 a8a5797d71..0e15079ac5 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 @@ -118,6 +118,7 @@ object ChatModel { val simplexLinkMode by lazy { mutableStateOf(ChatController.appPrefs.simplexLinkMode.get()) } val clipboardHasText = mutableStateOf(false) + val networkInfo = mutableStateOf(UserNetworkInfo(networkType = UserNetworkType.OTHER, online = true)) val updatingChatsMutex: Mutex = Mutex() val changingActiveUserMutex: Mutex = Mutex() diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt index 7848f9942e..484990bfc0 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt @@ -358,6 +358,8 @@ object ChatController { var lastMsgReceivedTimestamp: Long = System.currentTimeMillis() private set + fun hasChatCtrl() = ctrl != -1L && ctrl != null + private suspend fun currentUserId(funcName: String): Long = changingActiveUserMutex.withLock { val userId = chatModel.currentUser.value?.userId if (userId == null) { @@ -879,6 +881,9 @@ object ChatController { } } + suspend fun apiSetNetworkInfo(networkInfo: UserNetworkInfo): Boolean = + sendCommandOkResp(null, CC.APISetNetworkInfo(networkInfo)) + suspend fun apiSetMemberSettings(rh: Long?, groupId: Long, groupMemberId: Long, memberSettings: GroupMemberSettings): Boolean = sendCommandOkResp(rh, CC.ApiSetMemberSettings(groupId, groupMemberId, memberSettings)) @@ -2413,6 +2418,7 @@ sealed class CC { class APIGetChatItemTTL(val userId: Long): CC() class APISetNetworkConfig(val networkConfig: NetCfg): CC() class APIGetNetworkConfig: CC() + class APISetNetworkInfo(val networkInfo: UserNetworkInfo): CC() class APISetChatSettings(val type: ChatType, val id: Long, val chatSettings: ChatSettings): CC() class ApiSetMemberSettings(val groupId: Long, val groupMemberId: Long, val memberSettings: GroupMemberSettings): CC() class APIContactInfo(val contactId: Long): CC() @@ -2555,6 +2561,7 @@ sealed class CC { is APIGetChatItemTTL -> "/_ttl $userId" is APISetNetworkConfig -> "/_network ${json.encodeToString(networkConfig)}" is APIGetNetworkConfig -> "/network" + is APISetNetworkInfo -> "/_network info ${json.encodeToString(networkInfo)}" is APISetChatSettings -> "/_settings ${chatRef(type, id)} ${json.encodeToString(chatSettings)}" is ApiSetMemberSettings -> "/_member settings #$groupId $groupMemberId ${json.encodeToString(memberSettings)}" is APIContactInfo -> "/_info @$contactId" @@ -2692,6 +2699,7 @@ sealed class CC { is APIGetChatItemTTL -> "apiGetChatItemTTL" is APISetNetworkConfig -> "apiSetNetworkConfig" is APIGetNetworkConfig -> "apiGetNetworkConfig" + is APISetNetworkInfo -> "apiSetNetworkInfo" is APISetChatSettings -> "apiSetChatSettings" is ApiSetMemberSettings -> "apiSetMemberSettings" is APIContactInfo -> "apiContactInfo" @@ -5531,3 +5539,26 @@ enum class AppSettingsLockScreenCalls { } } } + +@Serializable +data class UserNetworkInfo( + val networkType: UserNetworkType, + val online: Boolean, +) + +enum class UserNetworkType { + @SerialName("none") NONE, + @SerialName("cellular") CELLULAR, + @SerialName("wifi") WIFI, + @SerialName("ethernet") ETHERNET, + @SerialName("other") OTHER; + + val text: String + get() = when (this) { + NONE -> generalGetString(MR.strings.network_type_no_network_connection) + CELLULAR -> generalGetString(MR.strings.network_type_cellular) + WIFI -> generalGetString(MR.strings.network_type_network_wifi) + ETHERNET -> generalGetString(MR.strings.network_type_ethernet) + OTHER -> generalGetString(MR.strings.network_type_other) + } +} diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Core.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Core.kt index f1a6d35e45..00370f5231 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Core.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Core.kt @@ -9,7 +9,6 @@ import chat.simplex.common.views.helpers.DatabaseUtils.randomDatabasePassword import chat.simplex.common.views.onboarding.OnboardingStage import chat.simplex.res.MR import kotlinx.coroutines.* -import kotlinx.serialization.decodeFromString import java.io.File import java.nio.ByteBuffer @@ -88,6 +87,7 @@ suspend fun initChatController(useKey: String? = null, confirmMigrations: Migrat Log.d(TAG, "Unable to migrate successfully: $res") return } + platform.androidRestartNetworkObserver() controller.apiSetTempFolder(coreTmpDir.absolutePath) controller.apiSetFilesFolder(appFilesDir.absolutePath) if (appPlatform.isDesktop) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Platform.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Platform.kt index 5ca6dbdeb3..f61c5bc83e 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Platform.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Platform.kt @@ -23,6 +23,7 @@ interface PlatformInterface { fun androidStartCallActivity(acceptCall: Boolean, remoteHostId: Long? = null, chatId: ChatId? = null) {} fun androidPictureInPictureAllowed(): Boolean = true fun androidCallEnded() {} + fun androidRestartNetworkObserver() {} @Composable fun androidLockPortraitOrientation() {} suspend fun androidAskToAllowBackgroundCalls(): Boolean = true @Composable fun desktopScrollBarComponents(): Triple, Modifier, MutableState> = remember { Triple(Animatable(0f), Modifier, mutableStateOf(Job())) } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Utils.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Utils.kt index ae09163591..182861c0d6 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Utils.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Utils.kt @@ -15,7 +15,6 @@ import chat.simplex.res.MR import com.charleskorn.kaml.decodeFromStream import dev.icerock.moko.resources.StringResource import kotlinx.coroutines.* -import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString import java.io.* import java.net.URI diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/NetworkAndServers.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/NetworkAndServers.kt index e1f050b0b6..4d33040e29 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/NetworkAndServers.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/NetworkAndServers.kt @@ -2,6 +2,7 @@ package chat.simplex.common.views.usersettings import SectionBottomSpacer import SectionCustomFooter +import SectionDividerSpaced import SectionItemView import SectionItemWithValue import SectionView @@ -21,12 +22,12 @@ import androidx.compose.ui.text.* import androidx.compose.ui.text.font.* import androidx.compose.ui.text.input.* import androidx.compose.desktop.ui.tooling.preview.Preview +import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import chat.simplex.common.model.* -import chat.simplex.common.platform.ColumnWithScrollBar -import chat.simplex.common.platform.chatModel +import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.chat.item.ClickableText import chat.simplex.common.views.helpers.* @@ -190,6 +191,16 @@ fun NetworkAndServersView() { SectionView(generalGetString(MR.strings.settings_section_title_calls)) { SettingsActionItem(painterResource(MR.images.ic_electrical_services), stringResource(MR.strings.webrtc_ice_servers), { ModalManager.start.showModal { RTCServersView(m) } }) } + + if (appPlatform.isAndroid) { + SectionDividerSpaced() + SectionView(generalGetString(MR.strings.settings_section_title_network_connection).uppercase()) { + val info = remember { chatModel.networkInfo }.value + SettingsActionItemWithContent(icon = null, info.networkType.text) { + Icon(painterResource(MR.images.ic_circle_filled), stringResource(MR.strings.icon_descr_server_status_connected), tint = if (info.online) Color.Green else MaterialTheme.colors.error) + } + } + } SectionBottomSpacer() } } diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index 5595f319ea..eafe959640 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -1017,6 +1017,7 @@ THEMES MESSAGES AND FILES CALLS + Network connection Incognito mode EXPERIMENTAL Use from desktop @@ -1925,4 +1926,11 @@ Check your internet connection and try again Warning: the archive will be deleted.]]> Error verifying passphrase: + + + No network connection + Cellular + WiFi + Wired ethernet + Other \ No newline at end of file From 0deb6a4eb1cfbb163e32a078b250ee3585017d3c Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Thu, 11 Apr 2024 16:58:56 +0400 Subject: [PATCH 28/60] ui: forward types (#4008) * ios: forward types * android * move --- apps/ios/SimpleXChat/APITypes.swift | 1 + apps/ios/SimpleXChat/ChatTypes.swift | 13 +++++++++++++ .../chat/simplex/common/model/ChatModel.kt | 17 ++++++++++++++++- .../chat/simplex/common/model/SimpleXAPI.kt | 2 ++ 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/apps/ios/SimpleXChat/APITypes.swift b/apps/ios/SimpleXChat/APITypes.swift index c0ff697a1d..c599b720ae 100644 --- a/apps/ios/SimpleXChat/APITypes.swift +++ b/apps/ios/SimpleXChat/APITypes.swift @@ -1717,6 +1717,7 @@ public enum ChatErrorType: Decodable { case fallbackToSMPProhibited(fileId: Int64) case inlineFileProhibited(fileId: Int64) case invalidQuote + case invalidForward case invalidChatItemUpdate case invalidChatItemDelete case hasCurrentCall diff --git a/apps/ios/SimpleXChat/ChatTypes.swift b/apps/ios/SimpleXChat/ChatTypes.swift index ed62b5c9ac..7d8ae53ce0 100644 --- a/apps/ios/SimpleXChat/ChatTypes.swift +++ b/apps/ios/SimpleXChat/ChatTypes.swift @@ -2546,6 +2546,7 @@ public struct CIMeta: Decodable { public var itemStatus: CIStatus public var createdAt: Date public var updatedAt: Date + public var itemForwarded: CIForwardedFrom? public var itemDeleted: CIDeleted? public var itemEdited: Bool public var itemTimed: CITimed? @@ -2713,6 +2714,17 @@ public enum CIDeleted: Decodable { } } +public enum MsgDirection: Decodable { + case rcv + case snd +} + +public enum CIForwardedFrom: Decodable { + case unknown + case contact(chatName: String, msgDir: MsgDirection, contactId: Int64?, chatItemId: Int64?) + case group(chatName: String, msgDir: MsgDirection, groupId: Int64?, chatItemId: Int64?) +} + public enum CIDeleteMode: String, Decodable { case cidmBroadcast = "broadcast" case cidmInternal = "internal" @@ -3751,6 +3763,7 @@ public enum ChatItemTTL: Hashable, Identifiable, Comparable { public struct ChatItemInfo: Decodable { public var itemVersions: [ChatItemVersion] public var memberDeliveryStatuses: [MemberDeliveryStatus]? + public var forwardedFromChatItem: AChatItem? } public struct ChatItemVersion: Decodable { 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 0e15079ac5..9636199a14 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 @@ -1884,6 +1884,7 @@ data class ChatItem ( status: CIStatus = CIStatus.SndNew(), quotedItem: CIQuote? = null, file: CIFile? = null, + itemForwarded: CIForwardedFrom? = null, itemDeleted: CIDeleted? = null, itemEdited: Boolean = false, itemTimed: CITimed? = null, @@ -2258,6 +2259,19 @@ sealed class CIDeleted { @Serializable @SerialName("moderated") class Moderated(val deletedTs: Instant?, val byGroupMember: GroupMember): CIDeleted() } +@Serializable +enum class MsgDirection { + @SerialName("rcv") Rcv, + @SerialName("snd") Snd; +} + +@Serializable +sealed class CIForwardedFrom { + @Serializable @SerialName("unknown") object Unknown: CIForwardedFrom() + @Serializable @SerialName("contact") class Contact(val chatName: String, val msgDir: MsgDirection, val contactId: Long? = null, val chatItemId: Long? = null): CIForwardedFrom() + @Serializable @SerialName("group") class Group(val chatName: String, val msgDir: MsgDirection, val groupId: Long? = null, val chatItemId: Long? = null): CIForwardedFrom() +} + @Serializable enum class CIDeleteMode(val deleteMode: String) { @SerialName("internal") cidmInternal("internal"), @@ -3252,7 +3266,8 @@ sealed class ChatItemTTL: Comparable { @Serializable class ChatItemInfo( val itemVersions: List, - val memberDeliveryStatuses: List? + val memberDeliveryStatuses: List?, + val forwardedFromChatItem: AChatItem? ) @Serializable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt index 484990bfc0..b70c970623 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt @@ -4772,6 +4772,7 @@ sealed class ChatErrorType { is FallbackToSMPProhibited -> "fallbackToSMPProhibited" is InlineFileProhibited -> "inlineFileProhibited" is InvalidQuote -> "invalidQuote" + is InvalidForward -> "invalidForward" is InvalidChatItemUpdate -> "invalidChatItemUpdate" is InvalidChatItemDelete -> "invalidChatItemDelete" is HasCurrentCall -> "hasCurrentCall" @@ -4850,6 +4851,7 @@ sealed class ChatErrorType { @Serializable @SerialName("fallbackToSMPProhibited") class FallbackToSMPProhibited(val fileId: Long): ChatErrorType() @Serializable @SerialName("inlineFileProhibited") class InlineFileProhibited(val fileId: Long): ChatErrorType() @Serializable @SerialName("invalidQuote") object InvalidQuote: ChatErrorType() + @Serializable @SerialName("invalidForward") object InvalidForward: ChatErrorType() @Serializable @SerialName("invalidChatItemUpdate") object InvalidChatItemUpdate: ChatErrorType() @Serializable @SerialName("invalidChatItemDelete") object InvalidChatItemDelete: ChatErrorType() @Serializable @SerialName("hasCurrentCall") object HasCurrentCall: ChatErrorType() From ee53377070833feafa1eaa0e383f4839fedb93c8 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Fri, 12 Apr 2024 12:55:04 +0400 Subject: [PATCH 29/60] core: fix forwarded item deletion (#4018) --- src/Simplex/Chat.hs | 8 ++++---- src/Simplex/Chat/Messages.hs | 11 +++++++---- src/Simplex/Chat/Store/Messages.hs | 4 ++-- tests/ChatTests/Forward.hs | 22 ++++++++++++++++++++++ 4 files changed, 35 insertions(+), 10 deletions(-) diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index ffb04dc9c3..441b7994b6 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -787,8 +787,8 @@ processChatCommand' vr = \case CTContactConnection -> pure $ chatCmdError (Just user) "not supported" APIDeleteChatItem (ChatRef cType chatId) itemId mode -> withUser $ \user -> case cType of CTDirect -> withContactLock "deleteChatItem" chatId $ do - (ct, CChatItem msgDir ci@ChatItem {meta = CIMeta {itemSharedMsgId, editable}}) <- withStore $ \db -> (,) <$> getContact db vr user chatId <*> getDirectChatItem db user chatId itemId - case (mode, msgDir, itemSharedMsgId, editable) of + (ct, CChatItem msgDir ci@ChatItem {meta = CIMeta {itemSharedMsgId, deletable}}) <- withStore $ \db -> (,) <$> getContact db vr user chatId <*> getDirectChatItem db user chatId itemId + case (mode, msgDir, itemSharedMsgId, deletable) of (CIDMInternal, _, _, _) -> deleteDirectCI user ct ci True False (CIDMBroadcast, SMDSnd, Just itemSharedMId, True) -> do assertDirectAllowed user MDSnd ct XMsgDel_ @@ -799,8 +799,8 @@ processChatCommand' vr = \case (CIDMBroadcast, _, _, _) -> throwChatError CEInvalidChatItemDelete CTGroup -> withGroupLock "deleteChatItem" chatId $ do Group gInfo ms <- withStore $ \db -> getGroup db vr user chatId - CChatItem msgDir ci@ChatItem {meta = CIMeta {itemSharedMsgId, editable}} <- withStore $ \db -> getGroupChatItem db user chatId itemId - case (mode, msgDir, itemSharedMsgId, editable) of + CChatItem msgDir ci@ChatItem {meta = CIMeta {itemSharedMsgId, deletable}} <- withStore $ \db -> getGroupChatItem db user chatId itemId + case (mode, msgDir, itemSharedMsgId, deletable) of (CIDMInternal, _, _, _) -> deleteGroupCI user gInfo ci True False Nothing =<< liftIO getCurrentTime (CIDMBroadcast, SMDSnd, Just itemSharedMId, True) -> do assertUserGroupRole gInfo GRObserver -- can still delete messages sent earlier diff --git a/src/Simplex/Chat/Messages.hs b/src/Simplex/Chat/Messages.hs index 2aa781d45e..a6d5761b5f 100644 --- a/src/Simplex/Chat/Messages.hs +++ b/src/Simplex/Chat/Messages.hs @@ -344,6 +344,7 @@ data CIMeta (c :: ChatType) (d :: MsgDirection) = CIMeta itemEdited :: Bool, itemTimed :: Maybe CITimed, itemLive :: Maybe Bool, + deletable :: Bool, editable :: Bool, forwardedByMember :: Maybe GroupMemberId, createdAt :: UTCTime, @@ -353,13 +354,14 @@ data CIMeta (c :: ChatType) (d :: MsgDirection) = CIMeta mkCIMeta :: forall c d. ChatTypeI c => ChatItemId -> CIContent d -> Text -> CIStatus d -> Maybe SharedMsgId -> Maybe CIForwardedFrom -> Maybe (CIDeleted c) -> Bool -> Maybe CITimed -> Maybe Bool -> UTCTime -> ChatItemTs -> Maybe GroupMemberId -> UTCTime -> UTCTime -> CIMeta c d mkCIMeta itemId itemContent itemText itemStatus itemSharedMsgId itemForwarded itemDeleted itemEdited itemTimed itemLive currentTs itemTs forwardedByMember createdAt updatedAt = - let editable = case itemContent of + let deletable = case itemContent of CISndMsgContent _ -> case chatTypeI @c of - SCTLocal -> isNothing itemDeleted && isNothing itemForwarded - _ -> diffUTCTime currentTs itemTs < nominalDay && isNothing itemDeleted && isNothing itemForwarded + SCTLocal -> isNothing itemDeleted + _ -> diffUTCTime currentTs itemTs < nominalDay && isNothing itemDeleted _ -> False - in CIMeta {itemId, itemTs, itemText, itemStatus, itemSharedMsgId, itemForwarded, itemDeleted, itemEdited, itemTimed, itemLive, editable, forwardedByMember, createdAt, updatedAt} + editable = deletable && isNothing itemForwarded + in CIMeta {itemId, itemTs, itemText, itemStatus, itemSharedMsgId, itemForwarded, itemDeleted, itemEdited, itemTimed, itemLive, deletable, editable, forwardedByMember, createdAt, updatedAt} dummyMeta :: ChatItemId -> UTCTime -> Text -> CIMeta c 'MDSnd dummyMeta itemId ts itemText = @@ -374,6 +376,7 @@ dummyMeta itemId ts itemText = itemEdited = False, itemTimed = Nothing, itemLive = Nothing, + deletable = False, editable = False, forwardedByMember = Nothing, createdAt = ts, diff --git a/src/Simplex/Chat/Store/Messages.hs b/src/Simplex/Chat/Store/Messages.hs index 11068ff5cb..2e4ee6e48f 100644 --- a/src/Simplex/Chat/Store/Messages.hs +++ b/src/Simplex/Chat/Store/Messages.hs @@ -1874,7 +1874,7 @@ updateGroupChatItemModerated db User {userId} GroupInfo {groupId} ci m@GroupMemb WHERE user_id = ? AND group_id = ? AND chat_item_id = ? |] (deletedTs, groupMemberId, toContent, toText, currentTs, userId, groupId, itemId) - pure $ ci {content = toContent, meta = (meta ci) {itemText = toText, itemDeleted = Just (CIModerated (Just deletedTs) m), editable = False}, formattedText = Nothing} + pure $ ci {content = toContent, meta = (meta ci) {itemText = toText, itemDeleted = Just (CIModerated (Just deletedTs) m), editable = False, deletable = False}, formattedText = Nothing} updateGroupCIBlockedByAdmin :: DB.Connection -> User -> GroupInfo -> ChatItem 'CTGroup d -> UTCTime -> IO (ChatItem 'CTGroup d) updateGroupCIBlockedByAdmin db User {userId} GroupInfo {groupId} ci deletedTs = do @@ -1891,7 +1891,7 @@ updateGroupCIBlockedByAdmin db User {userId} GroupInfo {groupId} ci deletedTs = WHERE user_id = ? AND group_id = ? AND chat_item_id = ? |] (DBCIBlockedByAdmin, deletedTs, currentTs, userId, groupId, itemId) - pure $ ci {meta = (meta ci) {itemDeleted = Just (CIBlockedByAdmin $ Just deletedTs), editable = False}, formattedText = Nothing} + pure $ ci {meta = (meta ci) {itemDeleted = Just (CIBlockedByAdmin $ Just deletedTs), editable = False, deletable = False}, formattedText = Nothing} pattern DBCINotDeleted :: Int pattern DBCINotDeleted = 0 diff --git a/tests/ChatTests/Forward.hs b/tests/ChatTests/Forward.hs index 6aea8447b9..4bd75d0e5b 100644 --- a/tests/ChatTests/Forward.hs +++ b/tests/ChatTests/Forward.hs @@ -25,6 +25,7 @@ chatForwardTests = do it "preserve original forward info" testForwardPreserveInfo it "quoted message is not included" testForwardQuotedMsg it "editing is prohibited" testForwardEditProhibited + it "delete for other" testForwardDeleteForOther describe "forward files" $ do it "from contact to contact" testForwardFileNoFilesFolder it "with relative paths: from contact to contact" testForwardFileContactToContact @@ -307,6 +308,27 @@ testForwardEditProhibited = alice ##> ("/_update item @3 " <> msgId <> " text hey edited") alice <## "cannot update this item" +testForwardDeleteForOther :: HasCallStack => FilePath -> IO () +testForwardDeleteForOther = + testChat3 aliceProfile bobProfile cathProfile $ + \alice bob cath -> do + connectUsers alice bob + connectUsers alice cath + + bob #> "@alice hey" + alice <# "bob> hey" + + alice `send` "@cath <- @bob hey" + alice <# "@cath <- @bob" + alice <## " hey" + cath <# "alice> -> forwarded" + cath <## " hey" + + msgId <- lastItemId alice + alice ##> ("/_delete item @3 " <> msgId <> " broadcast") + alice <## "message marked deleted" + cath <# "alice> [marked deleted] hey" + testForwardFileNoFilesFolder :: HasCallStack => FilePath -> IO () testForwardFileNoFilesFolder = testChat3 aliceProfile bobProfile cathProfile $ From 29941729d2078b8a1facf852278e816c61f65e17 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Fri, 12 Apr 2024 12:56:09 +0400 Subject: [PATCH 30/60] ui: forwarded item header (#4017) --- apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift | 6 ++++-- apps/ios/Shared/Views/Chat/ChatItemView.swift | 2 +- apps/ios/Shared/Views/Chat/ChatView.swift | 2 +- .../kotlin/chat/simplex/common/model/ChatModel.kt | 9 +++++++-- .../kotlin/chat/simplex/common/views/chat/ChatView.kt | 2 +- .../chat/simplex/common/views/chat/item/ChatItemView.kt | 2 +- .../simplex/common/views/chat/item/FramedItemView.kt | 9 +++++++-- .../common/src/commonMain/resources/MR/base/strings.xml | 1 + .../src/commonMain/resources/MR/images/ic_forward.svg | 1 + 9 files changed, 24 insertions(+), 10 deletions(-) create mode 100644 apps/multiplatform/common/src/commonMain/resources/MR/images/ic_forward.svg diff --git a/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift b/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift index 3475e7a8b6..3e292c131b 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift @@ -65,6 +65,8 @@ struct FramedItemView: View { } } } + } else if chatItem.meta.itemForwarded != nil { + framedItemHeader(icon: "arrowshape.turn.up.forward", caption: Text("forwarded").italic()) } ChatItemContentView(chat: chat, chatItem: chatItem, revealed: $revealed, msgContentView: framedMsgContentView) @@ -353,9 +355,9 @@ private struct MetaColorPreferenceKey: PreferenceKey { func onlyImageOrVideo(_ ci: ChatItem) -> Bool { if case let .image(text, _) = ci.content.msgContent { - return ci.meta.itemDeleted == nil && !ci.meta.isLive && ci.quotedItem == nil && text == "" + return ci.meta.itemDeleted == nil && !ci.meta.isLive && ci.quotedItem == nil && ci.meta.itemForwarded == nil && text == "" } else if case let .video(text, _, _) = ci.content.msgContent { - return ci.meta.itemDeleted == nil && !ci.meta.isLive && ci.quotedItem == nil && text == "" + return ci.meta.itemDeleted == nil && !ci.meta.isLive && ci.quotedItem == nil && ci.meta.itemForwarded == nil && text == "" } return false } diff --git a/apps/ios/Shared/Views/Chat/ChatItemView.swift b/apps/ios/Shared/Views/Chat/ChatItemView.swift index da9dc523e1..8fe2b71d09 100644 --- a/apps/ios/Shared/Views/Chat/ChatItemView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItemView.swift @@ -46,7 +46,7 @@ struct ChatItemView: View { let ci = chatItem if chatItem.meta.itemDeleted != nil && (!revealed || chatItem.isDeletedContent) { MarkedDeletedItemView(chat: chat, chatItem: chatItem, revealed: $revealed) - } else if ci.quotedItem == nil && ci.meta.itemDeleted == nil && !ci.meta.isLive { + } else if ci.quotedItem == nil && ci.meta.itemForwarded == nil && ci.meta.itemDeleted == nil && !ci.meta.isLive { if let mc = ci.content.msgContent, mc.isText && isShortEmoji(ci.content.text) { EmojiItemView(chat: chat, chatItem: ci) } else if ci.content.text.isEmpty, case let .voice(_, duration) = ci.content.msgContent { diff --git a/apps/ios/Shared/Views/Chat/ChatView.swift b/apps/ios/Shared/Views/Chat/ChatView.swift index cd2aa55bc3..21b9fa00b3 100644 --- a/apps/ios/Shared/Views/Chat/ChatView.swift +++ b/apps/ios/Shared/Views/Chat/ChatView.swift @@ -296,7 +296,7 @@ struct ChatView: View { } private func voiceWithoutFrame(_ ci: ChatItem) -> Bool { - ci.content.msgContent?.isVoice == true && ci.content.text.count == 0 && ci.quotedItem == nil + ci.content.msgContent?.isVoice == true && ci.content.text.count == 0 && ci.quotedItem == nil && ci.meta.itemForwarded == nil } private func chatItemsList() -> some View { 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 9636199a14..bdda519c2b 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 @@ -1892,7 +1892,7 @@ data class ChatItem ( ) = ChatItem( chatDir = dir, - meta = CIMeta.getSample(id, ts, text, status, itemDeleted, itemEdited, itemTimed, editable), + meta = CIMeta.getSample(id, ts, text, status, itemForwarded, itemDeleted, itemEdited, itemTimed, editable), content = CIContent.SndMsgContent(msgContent = MsgContent.MCText(text)), quotedItem = quotedItem, reactions = listOf(), @@ -1976,6 +1976,7 @@ data class ChatItem ( itemStatus = CIStatus.RcvRead(), createdAt = Clock.System.now(), updatedAt = Clock.System.now(), + itemForwarded = null, itemDeleted = null, itemEdited = false, itemTimed = null, @@ -1997,6 +1998,7 @@ data class ChatItem ( itemStatus = CIStatus.RcvRead(), createdAt = Clock.System.now(), updatedAt = Clock.System.now(), + itemForwarded = null, itemDeleted = null, itemEdited = false, itemTimed = null, @@ -2097,6 +2099,7 @@ data class CIMeta ( val itemStatus: CIStatus, val createdAt: Instant, val updatedAt: Instant, + val itemForwarded: CIForwardedFrom?, val itemDeleted: CIDeleted?, val itemEdited: Boolean, val itemTimed: CITimed?, @@ -2120,7 +2123,7 @@ data class CIMeta ( companion object { fun getSample( id: Long, ts: Instant, text: String, status: CIStatus = CIStatus.SndNew(), - itemDeleted: CIDeleted? = null, itemEdited: Boolean = false, itemTimed: CITimed? = null, itemLive: Boolean = false, editable: Boolean = true + itemForwarded: CIForwardedFrom? = null, itemDeleted: CIDeleted? = null, itemEdited: Boolean = false, itemTimed: CITimed? = null, itemLive: Boolean = false, editable: Boolean = true ): CIMeta = CIMeta( itemId = id, @@ -2129,6 +2132,7 @@ data class CIMeta ( itemStatus = status, createdAt = ts, updatedAt = ts, + itemForwarded = itemForwarded, itemDeleted = itemDeleted, itemEdited = itemEdited, itemTimed = itemTimed, @@ -2145,6 +2149,7 @@ data class CIMeta ( itemStatus = CIStatus.SndNew(), createdAt = Clock.System.now(), updatedAt = Clock.System.now(), + itemForwarded = null, itemDeleted = null, itemEdited = false, itemTimed = null, diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt index 702dd9fec5..4761b938b9 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt @@ -962,7 +962,7 @@ fun BoxWithConstraintsScope.ChatItemsList( @Composable fun ChatItemView(cItem: ChatItem, range: IntRange?, prevItem: ChatItem?) { - val voiceWithTransparentBack = cItem.content.msgContent is MsgContent.MCVoice && cItem.content.text.isEmpty() && cItem.quotedItem == null + val voiceWithTransparentBack = cItem.content.msgContent is MsgContent.MCVoice && cItem.content.text.isEmpty() && cItem.quotedItem == null && cItem.meta.itemForwarded == null if (chat.chatInfo is ChatInfo.Group) { if (cItem.chatDir is CIDirection.GroupRcv) { val member = cItem.chatDir.groupMember diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt index 64741f7466..b4f7410da2 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt @@ -304,7 +304,7 @@ fun ChatItemView( MarkedDeletedItemView(cItem, cInfo.timedMessagesTTL, revealed) MarkedDeletedItemDropdownMenu() } else { - if (cItem.quotedItem == null && cItem.meta.itemDeleted == null && !cItem.meta.isLive) { + if (cItem.quotedItem == null && cItem.meta.itemForwarded == null && cItem.meta.itemDeleted == null && !cItem.meta.isLive) { if (mc is MsgContent.MCText && isShortEmoji(cItem.content.text)) { EmojiItemView(cItem, cInfo.timedMessagesTTL) } else if (mc is MsgContent.MCVoice && cItem.content.text.isEmpty()) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/FramedItemView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/FramedItemView.kt index 641e6affab..3535c8fe26 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/FramedItemView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/FramedItemView.kt @@ -96,6 +96,7 @@ fun FramedItemView( .fillMaxWidth() .padding(start = 8.dp, top = 6.dp, end = 12.dp, bottom = if (ci.quotedItem == null) 6.dp else 0.dp), horizontalArrangement = Arrangement.spacedBy(4.dp), + verticalAlignment = Alignment.CenterVertically ) { if (icon != null) { Icon( @@ -184,7 +185,7 @@ fun FramedItemView( } val transparentBackground = (ci.content.msgContent is MsgContent.MCImage || ci.content.msgContent is MsgContent.MCVideo) && - !ci.meta.isLive && ci.content.text.isEmpty() && ci.quotedItem == null + !ci.meta.isLive && ci.content.text.isEmpty() && ci.quotedItem == null && ci.meta.itemForwarded == null val sentColor = CurrentColors.collectAsState().value.appColors.sentMessage val receivedColor = CurrentColors.collectAsState().value.appColors.receivedMessage @@ -219,7 +220,11 @@ fun FramedItemView( } else if (ci.meta.isLive) { FramedItemHeader(stringResource(MR.strings.live), false) } - ci.quotedItem?.let { ciQuoteView(it) } + if (ci.quotedItem != null) { + ciQuoteView(ci.quotedItem) + } else if (ci.meta.itemForwarded != null) { + FramedItemHeader(stringResource(MR.strings.forwarded_description), true, painterResource(MR.images.ic_forward)) + } if (ci.file == null && ci.formattedText == null && !ci.meta.isLive && isShortEmoji(ci.content.text)) { Box(Modifier.padding(vertical = 6.dp, horizontal = 12.dp)) { Column( diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index eafe959640..c4d9e191c6 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -46,6 +46,7 @@ invalid message format LIVE moderated + forwarded invalid chat invalid data error showing message diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_forward.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_forward.svg new file mode 100644 index 0000000000..7ad0b14b70 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_forward.svg @@ -0,0 +1 @@ + \ No newline at end of file From e10c63dc64f37fed61f5b23cd322e58d66a3d3fb Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Fri, 12 Apr 2024 13:10:47 +0400 Subject: [PATCH 31/60] ui: deletable field (#4019) --- apps/ios/Shared/Views/Chat/ChatView.swift | 2 +- apps/ios/SimpleXChat/ChatTypes.swift | 11 ++++++++--- .../kotlin/chat/simplex/common/model/ChatModel.kt | 11 +++++++++-- .../simplex/common/views/chat/item/ChatItemView.kt | 2 +- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/apps/ios/Shared/Views/Chat/ChatView.swift b/apps/ios/Shared/Views/Chat/ChatView.swift index 21b9fa00b3..34565193ff 100644 --- a/apps/ios/Shared/Views/Chat/ChatView.swift +++ b/apps/ios/Shared/Views/Chat/ChatView.swift @@ -667,7 +667,7 @@ struct ChatView: View { Button("Delete for me", role: .destructive) { deleteMessage(.cidmInternal) } - if let di = deletingItem, di.meta.editable && !di.localNote { + if let di = deletingItem, di.meta.deletable && !di.localNote { Button(broadcastDeleteButtonText, role: .destructive) { deleteMessage(.cidmBroadcast) } diff --git a/apps/ios/SimpleXChat/ChatTypes.swift b/apps/ios/SimpleXChat/ChatTypes.swift index 7d8ae53ce0..7990f1caea 100644 --- a/apps/ios/SimpleXChat/ChatTypes.swift +++ b/apps/ios/SimpleXChat/ChatTypes.swift @@ -2372,10 +2372,10 @@ public struct ChatItem: Identifiable, Decodable { } } - public static func getSample (_ id: Int64, _ dir: CIDirection, _ ts: Date, _ text: String, _ status: CIStatus = .sndNew, quotedItem: CIQuote? = nil, file: CIFile? = nil, itemDeleted: CIDeleted? = nil, itemEdited: Bool = false, itemLive: Bool = false, editable: Bool = true) -> ChatItem { + public static func getSample (_ id: Int64, _ dir: CIDirection, _ ts: Date, _ text: String, _ status: CIStatus = .sndNew, quotedItem: CIQuote? = nil, file: CIFile? = nil, itemDeleted: CIDeleted? = nil, itemEdited: Bool = false, itemLive: Bool = false, deletable: Bool = true, editable: Bool = true) -> ChatItem { ChatItem( chatDir: dir, - meta: CIMeta.getSample(id, ts, text, status, itemDeleted: itemDeleted, itemEdited: itemEdited, itemLive: itemLive, editable: editable), + meta: CIMeta.getSample(id, ts, text, status, itemDeleted: itemDeleted, itemEdited: itemEdited, itemLive: itemLive, deletable: deletable, editable: editable), content: .sndMsgContent(msgContent: .text(text)), quotedItem: quotedItem, file: file @@ -2466,6 +2466,7 @@ public struct ChatItem: Identifiable, Decodable { itemDeleted: nil, itemEdited: false, itemLive: false, + deletable: false, editable: false ), content: .rcvDeleted(deleteMode: .cidmBroadcast), @@ -2487,6 +2488,7 @@ public struct ChatItem: Identifiable, Decodable { itemDeleted: nil, itemEdited: false, itemLive: true, + deletable: false, editable: false ), content: .sndMsgContent(msgContent: .text("")), @@ -2551,6 +2553,7 @@ public struct CIMeta: Decodable { public var itemEdited: Bool public var itemTimed: CITimed? public var itemLive: Bool? + public var deletable: Bool public var editable: Bool public var timestampText: Text { get { formatTimestampText(itemTs) } } @@ -2567,7 +2570,7 @@ public struct CIMeta: Decodable { itemStatus.statusIcon(metaColor) } - public static func getSample(_ id: Int64, _ ts: Date, _ text: String, _ status: CIStatus = .sndNew, itemDeleted: CIDeleted? = nil, itemEdited: Bool = false, itemLive: Bool = false, editable: Bool = true) -> CIMeta { + public static func getSample(_ id: Int64, _ ts: Date, _ text: String, _ status: CIStatus = .sndNew, itemDeleted: CIDeleted? = nil, itemEdited: Bool = false, itemLive: Bool = false, deletable: Bool = true, editable: Bool = true) -> CIMeta { CIMeta( itemId: id, itemTs: ts, @@ -2578,6 +2581,7 @@ public struct CIMeta: Decodable { itemDeleted: itemDeleted, itemEdited: itemEdited, itemLive: itemLive, + deletable: deletable, editable: editable ) } @@ -2593,6 +2597,7 @@ public struct CIMeta: Decodable { itemDeleted: nil, itemEdited: false, itemLive: false, + deletable: false, editable: false ) } 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 bdda519c2b..8233a7cc5d 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 @@ -1888,11 +1888,12 @@ data class ChatItem ( itemDeleted: CIDeleted? = null, itemEdited: Boolean = false, itemTimed: CITimed? = null, + deletable: Boolean = true, editable: Boolean = true ) = ChatItem( chatDir = dir, - meta = CIMeta.getSample(id, ts, text, status, itemForwarded, itemDeleted, itemEdited, itemTimed, editable), + meta = CIMeta.getSample(id, ts, text, status, itemForwarded, itemDeleted, itemEdited, itemTimed, deletable, editable), content = CIContent.SndMsgContent(msgContent = MsgContent.MCText(text)), quotedItem = quotedItem, reactions = listOf(), @@ -1981,6 +1982,7 @@ data class ChatItem ( itemEdited = false, itemTimed = null, itemLive = false, + deletable = false, editable = false ), content = CIContent.RcvDeleted(deleteMode = CIDeleteMode.cidmBroadcast), @@ -2003,6 +2005,7 @@ data class ChatItem ( itemEdited = false, itemTimed = null, itemLive = true, + deletable = false, editable = false ), content = CIContent.SndMsgContent(MsgContent.MCText("")), @@ -2104,6 +2107,7 @@ data class CIMeta ( val itemEdited: Boolean, val itemTimed: CITimed?, val itemLive: Boolean?, + val deletable: Boolean, val editable: Boolean ) { val timestampText: String get() = getTimestampText(itemTs) @@ -2123,7 +2127,8 @@ data class CIMeta ( companion object { fun getSample( id: Long, ts: Instant, text: String, status: CIStatus = CIStatus.SndNew(), - itemForwarded: CIForwardedFrom? = null, itemDeleted: CIDeleted? = null, itemEdited: Boolean = false, itemTimed: CITimed? = null, itemLive: Boolean = false, editable: Boolean = true + itemForwarded: CIForwardedFrom? = null, itemDeleted: CIDeleted? = null, itemEdited: Boolean = false, + itemTimed: CITimed? = null, itemLive: Boolean = false, deletable: Boolean = true, editable: Boolean = true ): CIMeta = CIMeta( itemId = id, @@ -2137,6 +2142,7 @@ data class CIMeta ( itemEdited = itemEdited, itemTimed = itemTimed, itemLive = itemLive, + deletable = deletable, editable = editable ) @@ -2154,6 +2160,7 @@ data class CIMeta ( itemEdited = false, itemTimed = null, itemLive = false, + deletable = false, editable = false ) } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt index b4f7410da2..6f6deeb6a4 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt @@ -724,7 +724,7 @@ fun deleteMessageAlertDialog(chatItem: ChatItem, questionText: String, deleteMes deleteMessage(chatItem.id, CIDeleteMode.cidmInternal) AlertManager.shared.hideAlert() }) { Text(stringResource(MR.strings.for_me_only), color = MaterialTheme.colors.error) } - if (chatItem.meta.editable && !chatItem.localNote) { + if (chatItem.meta.deletable && !chatItem.localNote) { Spacer(Modifier.padding(horizontal = 4.dp)) TextButton(onClick = { deleteMessage(chatItem.id, CIDeleteMode.cidmBroadcast) From 182225a5b10cb93130ac3cff189f1ec6d4a7be53 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Fri, 12 Apr 2024 11:29:58 +0100 Subject: [PATCH 32/60] ios: role-based preferences, SimpleX links preference (#4021) * ios: role-based preferences, SimpleX links preference * disable some options --- apps/ios/Shared/Model/ChatModel.swift | 18 +++ .../Chat/ChatItem/CIChatFeatureView.swift | 11 +- apps/ios/Shared/Views/Chat/ChatItemView.swift | 8 +- .../Chat/ComposeMessage/ComposeView.swift | 67 +++++++-- .../Chat/ComposeMessage/SendMessageView.swift | 4 +- .../Chat/Group/GroupMemberInfoView.swift | 4 +- .../Chat/Group/GroupPreferencesView.swift | 42 +++++- apps/ios/SimpleXChat/ChatTypes.swift | 138 ++++++++++++++---- 8 files changed, 235 insertions(+), 57 deletions(-) diff --git a/apps/ios/Shared/Model/ChatModel.swift b/apps/ios/Shared/Model/ChatModel.swift index 90a9406627..a4651e1d42 100644 --- a/apps/ios/Shared/Model/ChatModel.swift +++ b/apps/ios/Shared/Model/ChatModel.swift @@ -779,6 +779,24 @@ final class Chat: ObservableObject, Identifiable { var viewId: String { get { "\(chatInfo.id) \(created.timeIntervalSince1970)" } } + func groupFeatureEnabled(_ feature: GroupFeature) -> Bool { + if case let .group(groupInfo) = self.chatInfo { + let p = groupInfo.fullGroupPreferences + return switch feature { + case .timedMessages: p.timedMessages.on + case .directMessages: p.directMessages.on(for: groupInfo.membership) + case .fullDelete: p.fullDelete.on + case .reactions: p.reactions.on + case .voice: p.voice.on(for: groupInfo.membership) + case .files: p.files.on(for: groupInfo.membership) + case .simplexLinks: p.simplexLinks.on(for: groupInfo.membership) + case .history: p.history.on + } + } else { + return true + } + } + public static var sampleData: Chat = Chat(chatInfo: ChatInfo.sampleData.direct, chatItems: []) } diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CIChatFeatureView.swift b/apps/ios/Shared/Views/Chat/ChatItem/CIChatFeatureView.swift index 03afa30331..5c9ea0f6d8 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/CIChatFeatureView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/CIChatFeatureView.swift @@ -11,6 +11,7 @@ import SimpleXChat struct CIChatFeatureView: View { @EnvironmentObject var m: ChatModel + @ObservedObject var chat: Chat var chatItem: ChatItem @Binding var revealed: Bool var feature: Feature @@ -18,7 +19,7 @@ struct CIChatFeatureView: View { var iconColor: Color var body: some View { - if !revealed, let fs = mergedFeautures() { + if !revealed, let fs = mergedFeatures() { HStack { ForEach(fs, content: featureIconView) } @@ -47,7 +48,7 @@ struct CIChatFeatureView: View { } } - private func mergedFeautures() -> [FeatureInfo]? { + private func mergedFeatures() -> [FeatureInfo]? { var fs: [FeatureInfo] = [] var icons: Set = [] if var i = m.getChatItemIndex(chatItem) { @@ -67,8 +68,8 @@ struct CIChatFeatureView: View { switch ci.content { case let .rcvChatFeature(feature, enabled, param): FeatureInfo(feature, enabled.iconColor, param) case let .sndChatFeature(feature, enabled, param): FeatureInfo(feature, enabled.iconColor, param) - case let .rcvGroupFeature(feature, preference, param): FeatureInfo(feature, preference.enable.iconColor, param) - case let .sndGroupFeature(feature, preference, param): FeatureInfo(feature, preference.enable.iconColor, param) + case let .rcvGroupFeature(feature, preference, param, role): FeatureInfo(feature, preference.enabled(role, for: chat.chatInfo.groupInfo?.membership).iconColor, param) + case let .sndGroupFeature(feature, preference, param, role): FeatureInfo(feature, preference.enabled(role, for: chat.chatInfo.groupInfo?.membership).iconColor, param) default: nil } } @@ -103,6 +104,6 @@ struct CIChatFeatureView: View { struct CIChatFeatureView_Previews: PreviewProvider { static var previews: some View { let enabled = FeatureEnabled(forUser: false, forContact: false) - CIChatFeatureView(chatItem: ChatItem.getChatFeatureSample(.fullDelete, enabled), revealed: Binding.constant(true), feature: ChatFeature.fullDelete, iconColor: enabled.iconColor) + CIChatFeatureView(chat: Chat.sampleData, chatItem: ChatItem.getChatFeatureSample(.fullDelete, enabled), revealed: Binding.constant(true), feature: ChatFeature.fullDelete, iconColor: enabled.iconColor) } } diff --git a/apps/ios/Shared/Views/Chat/ChatItemView.swift b/apps/ios/Shared/Views/Chat/ChatItemView.swift index 8fe2b71d09..c2adcacbfe 100644 --- a/apps/ios/Shared/Views/Chat/ChatItemView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItemView.swift @@ -102,9 +102,9 @@ struct ChatItemContentView: View { case let .rcvChatPreference(feature, allowed, param): CIFeaturePreferenceView(chat: chat, chatItem: chatItem, feature: feature, allowed: allowed, param: param) case let .sndChatPreference(feature, _, _): - CIChatFeatureView(chatItem: chatItem, revealed: $revealed, feature: feature, icon: feature.icon, iconColor: .secondary) - case let .rcvGroupFeature(feature, preference, _): chatFeatureView(feature, preference.enable.iconColor) - case let .sndGroupFeature(feature, preference, _): chatFeatureView(feature, preference.enable.iconColor) + CIChatFeatureView(chat: chat, chatItem: chatItem, revealed: $revealed, feature: feature, icon: feature.icon, iconColor: .secondary) + case let .rcvGroupFeature(feature, preference, _, role): chatFeatureView(feature, preference.enabled(role, for: chat.chatInfo.groupInfo?.membership).iconColor) + case let .sndGroupFeature(feature, preference, _, role): chatFeatureView(feature, preference.enabled(role, for: chat.chatInfo.groupInfo?.membership).iconColor) case let .rcvChatFeatureRejected(feature): chatFeatureView(feature, .red) case let .rcvGroupFeatureRejected(feature): chatFeatureView(feature, .red) case .sndModerated: deletedItemView() @@ -149,7 +149,7 @@ struct ChatItemContentView: View { } private func chatFeatureView(_ feature: Feature, _ iconColor: Color) -> some View { - CIChatFeatureView(chatItem: chatItem, revealed: $revealed, feature: feature, iconColor: iconColor) + CIChatFeatureView(chat: chat, chatItem: chatItem, revealed: $revealed, feature: feature, iconColor: iconColor) } private var mergedGroupEventText: Text? { diff --git a/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift b/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift index 604e0a276d..24fe983661 100644 --- a/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift +++ b/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift @@ -161,6 +161,16 @@ struct ComposeState { } } + var attachmentPreview: Bool { + switch preview { + case .noPreview: false + case .linkPreview: false + case let .mediaPreviews(mediaPreviews): !mediaPreviews.isEmpty + case .voicePreview: false + case .filePreview: true + } + } + var empty: Bool { message == "" && noPreview } @@ -234,6 +244,7 @@ struct ComposeView: View { @Binding var keyboardVisible: Bool @State var linkUrl: URL? = nil + @State var hasSimplexLink: Bool = false @State var prevLinkUrl: URL? = nil @State var pendingLinkUrl: URL? = nil @State var cancelledLinks: Set = [] @@ -260,6 +271,16 @@ struct ComposeView: View { if chat.chatInfo.contact?.nextSendGrpInv ?? false { ContextInvitingContactMemberView() } + let simplexLinkProhibited = hasSimplexLink && !chat.groupFeatureEnabled(.simplexLinks) + let fileProhibited = composeState.attachmentPreview && !chat.groupFeatureEnabled(.files) + let voiceProhibited = composeState.voicePreview && !chat.chatInfo.featureEnabled(.voice) + if simplexLinkProhibited { + msgNotAllowedView("SimpleX links not allowed", icon: "link") + } else if fileProhibited { + msgNotAllowedView("Files and media not allowed", icon: "doc") + } else if voiceProhibited { + msgNotAllowedView("Voice messages not allowed", icon: "mic") + } contextItemView() switch (composeState.editing, composeState.preview) { case (true, .filePreview): EmptyView() @@ -278,7 +299,7 @@ struct ComposeView: View { .padding(.bottom, 12) .padding(.leading, 12) if case let .group(g) = chat.chatInfo, - !g.fullGroupPreferences.files.on { + !g.fullGroupPreferences.files.on(for: g.membership) { b.disabled(true).onTapGesture { AlertManager.shared.showAlertMsg( title: "Files and media prohibited!", @@ -303,6 +324,7 @@ struct ComposeView: View { }, nextSendGrpInv: chat.chatInfo.contact?.nextSendGrpInv ?? false, voiceMessageAllowed: chat.chatInfo.featureEnabled(.voice), + disableSendButton: simplexLinkProhibited || fileProhibited || voiceProhibited, showEnableVoiceMessagesAlert: chat.chatInfo.showEnableVoiceMessagesAlert, startVoiceMessageRecording: { Task { @@ -337,13 +359,18 @@ struct ComposeView: View { } } } - .onChange(of: composeState.message) { _ in + .onChange(of: composeState.message) { msg in if composeState.linkPreviewAllowed { - if composeState.message.count > 0 { - showLinkPreview(composeState.message) + if msg.count > 0 { + showLinkPreview(msg) } else { resetLinkPreview() + hasSimplexLink = false } + } else if msg.count > 0 && !chat.groupFeatureEnabled(.simplexLinks) { + (_, hasSimplexLink) = parseMessage(msg) + } else { + hasSimplexLink = false } } .onChange(of: chat.userCanSend) { canSend in @@ -610,6 +637,18 @@ struct ComposeView: View { } } + private func msgNotAllowedView(_ reason: LocalizedStringKey, icon: String) -> some View { + HStack { + Image(systemName: icon).foregroundColor(.secondary) + Text(reason).italic() + } + .padding(12) + .frame(minHeight: 50) + .frame(maxWidth: .infinity, alignment: .leading) + .background(Color(uiColor: .tertiarySystemGroupedBackground)) + .padding(.top, 8) + } + @ViewBuilder private func contextItemView() -> some View { switch composeState.contextItem { case .noContextItem: @@ -818,7 +857,7 @@ struct ComposeView: View { func checkLinkPreview() -> MsgContent { switch (composeState.preview) { case let .linkPreview(linkPreview: linkPreview): - if let url = parseMessage(msgText), + if let url = parseMessage(msgText).url, let linkPreview = linkPreview, url == linkPreview.uri { return .link(text: msgText, preview: linkPreview) @@ -947,7 +986,7 @@ struct ComposeView: View { private func showLinkPreview(_ s: String) { prevLinkUrl = linkUrl - linkUrl = parseMessage(s) + (linkUrl, hasSimplexLink) = parseMessage(s) if let url = linkUrl { if url != composeState.linkPreview?.uri && url != pendingLinkUrl { pendingLinkUrl = url @@ -964,13 +1003,17 @@ struct ComposeView: View { } } - private func parseMessage(_ msg: String) -> URL? { - let parsedMsg = parseSimpleXMarkdown(msg) - let uri = parsedMsg?.first(where: { ft in + private func parseMessage(_ msg: String) -> (url: URL?, hasSimplexLink: Bool) { + guard let parsedMsg = parseSimpleXMarkdown(msg) else { return (nil, false) } + let url: URL? = if let uri = parsedMsg.first(where: { ft in ft.format == .uri && !cancelledLinks.contains(ft.text) && !isSimplexLink(ft.text) - }) - if let uri = uri { return URL(string: uri.text) } - else { return nil } + }) { + URL(string: uri.text) + } else { + nil + } + let simplexLink = parsedMsg.contains(where: { ft in ft.format?.isSimplexLink ?? false }) + return (url, simplexLink) } private func isSimplexLink(_ link: String) -> Bool { diff --git a/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift b/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift index 8f7b23c888..f9e5b1c2b1 100644 --- a/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift +++ b/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift @@ -20,6 +20,7 @@ struct SendMessageView: View { var nextSendGrpInv: Bool = false var showVoiceMessageButton: Bool = true var voiceMessageAllowed: Bool = true + var disableSendButton = false var showEnableVoiceMessagesAlert: ChatInfo.ShowEnableVoiceMessagesAlert = .other var startVoiceMessageRecording: (() -> Void)? = nil var finishVoiceMessageRecording: (() -> Void)? = nil @@ -184,7 +185,8 @@ struct SendMessageView: View { !composeState.sendEnabled || composeState.inProgress || (!voiceMessageAllowed && composeState.voicePreview) || - composeState.endLiveDisabled + composeState.endLiveDisabled || + disableSendButton ) .frame(width: 29, height: 29) .contextMenu{ diff --git a/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift b/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift index 999617dde7..766aaf6577 100644 --- a/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift +++ b/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift @@ -83,7 +83,7 @@ struct GroupMemberInfoView: View { Section { if let contactId = member.memberContactId, let chat = knownDirectChat(contactId) { knownDirectChatButton(chat) - } else if groupInfo.fullGroupPreferences.directMessages.on { + } else if groupInfo.fullGroupPreferences.directMessages.on(for: groupInfo.membership) { if let contactId = member.memberContactId { newDirectChatButton(contactId) } else if member.activeConn?.peerChatVRange.isCompatibleRange(CREATE_MEMBER_CONTACT_VRANGE) ?? false { @@ -110,7 +110,7 @@ struct GroupMemberInfoView: View { Label("Share address", systemImage: "square.and.arrow.up") } if let contactId = member.memberContactId { - if knownDirectChat(contactId) == nil && !groupInfo.fullGroupPreferences.directMessages.on { + if knownDirectChat(contactId) == nil && !groupInfo.fullGroupPreferences.directMessages.on(for: groupInfo.membership) { connectViaAddressButton(contactLink) } } else { diff --git a/apps/ios/Shared/Views/Chat/Group/GroupPreferencesView.swift b/apps/ios/Shared/Views/Chat/Group/GroupPreferencesView.swift index 7ab4bf4ece..b4e1992848 100644 --- a/apps/ios/Shared/Views/Chat/Group/GroupPreferencesView.swift +++ b/apps/ios/Shared/Views/Chat/Group/GroupPreferencesView.swift @@ -9,6 +9,12 @@ import SwiftUI import SimpleXChat +private let featureRoles: [(role: GroupMemberRole?, text: LocalizedStringKey)] = [ + (nil, "all members"), + (.admin, "admins"), + (.owner, "owners") +] + struct GroupPreferencesView: View { @Environment(\.dismiss) var dismiss: DismissAction @EnvironmentObject var chatModel: ChatModel @@ -24,10 +30,12 @@ struct GroupPreferencesView: View { List { featureSection(.timedMessages, $preferences.timedMessages.enable) featureSection(.fullDelete, $preferences.fullDelete.enable) - featureSection(.directMessages, $preferences.directMessages.enable) + featureSection(.directMessages, $preferences.directMessages.enable, $preferences.directMessages.role) featureSection(.reactions, $preferences.reactions.enable) - featureSection(.voice, $preferences.voice.enable) - featureSection(.files, $preferences.files.enable) + featureSection(.voice, $preferences.voice.enable, $preferences.voice.role) + featureSection(.files, $preferences.files.enable, $preferences.files.role) + // TODO enable simplexLinks preference in 5.8 + // featureSection(.simplexLinks, $preferences.simplexLinks.enable, $preferences.simplexLinks.role) featureSection(.history, $preferences.history.enable) if groupInfo.canEdit { @@ -64,7 +72,7 @@ struct GroupPreferencesView: View { } } - private func featureSection(_ feature: GroupFeature, _ enableFeature: Binding) -> some View { + private func featureSection(_ feature: GroupFeature, _ enableFeature: Binding, _ enableForRole: Binding? = nil) -> some View { Section { let color: Color = enableFeature.wrappedValue == .on ? .green : .secondary let icon = enableFeature.wrappedValue == .on ? feature.iconFilled : feature.icon @@ -87,6 +95,16 @@ struct GroupPreferencesView: View { ) .frame(height: 36) } + if enableFeature.wrappedValue == .on, let enableForRole { + Picker("Enabled for", selection: enableForRole) { + ForEach(featureRoles, id: \.role) { fr in + Text(fr.text) + } + } + .frame(height: 36) + // remove in v5.8 + .disabled(true) + } } else { settingsRow(icon, color: color) { infoRow(Text(feature.text), enableFeature.wrappedValue.text) @@ -94,10 +112,26 @@ struct GroupPreferencesView: View { if timedOn { infoRow("Delete after", timeText(preferences.timedMessages.ttl)) } + if enableFeature.wrappedValue == .on, let enableForRole { + HStack { + Text("Enabled for").foregroundColor(.secondary) + Spacer() + Text( + featureRoles.first(where: { fr in fr.role == enableForRole.wrappedValue })?.text + ?? "all members" + ) + .foregroundColor(.secondary) + } + } } } footer: { Text(feature.enableDescription(enableFeature.wrappedValue, groupInfo.canEdit)) } + .onChange(of: enableFeature.wrappedValue) { enabled in + if case .off = enabled { + enableForRole?.wrappedValue = nil + } + } } private func savePreferences() { diff --git a/apps/ios/SimpleXChat/ChatTypes.swift b/apps/ios/SimpleXChat/ChatTypes.swift index 7990f1caea..9db0468d95 100644 --- a/apps/ios/SimpleXChat/ChatTypes.swift +++ b/apps/ios/SimpleXChat/ChatTypes.swift @@ -543,6 +543,7 @@ public protocol Feature { var iconFilled: String { get } var iconScale: CGFloat { get } var hasParam: Bool { get } + var hasRole: Bool { get } var text: String { get } } @@ -569,6 +570,8 @@ public enum ChatFeature: String, Decodable, Feature { } } + public var hasRole: Bool { false } + public var text: String { switch self { case .timedMessages: return NSLocalizedString("Disappearing messages", comment: "chat feature") @@ -694,6 +697,7 @@ public enum GroupFeature: String, Decodable, Feature { case reactions case voice case files + case simplexLinks case history public var id: Self { self } @@ -705,6 +709,19 @@ public enum GroupFeature: String, Decodable, Feature { } } + public var hasRole: Bool { + switch self { + case .timedMessages: false + case .directMessages: true + case .fullDelete: false + case .reactions: false + case .voice: true + case .files: true + case .simplexLinks: true + case .history: false + } + } + public var text: String { switch self { case .timedMessages: return NSLocalizedString("Disappearing messages", comment: "chat feature") @@ -713,6 +730,7 @@ public enum GroupFeature: String, Decodable, Feature { case .reactions: return NSLocalizedString("Message reactions", comment: "chat feature") case .voice: return NSLocalizedString("Voice messages", comment: "chat feature") case .files: return NSLocalizedString("Files and media", comment: "chat feature") + case .simplexLinks: return NSLocalizedString("SimpleX links", comment: "chat feature") case .history: return NSLocalizedString("Visible history", comment: "chat feature") } } @@ -725,6 +743,7 @@ public enum GroupFeature: String, Decodable, Feature { case .reactions: return "face.smiling" case .voice: return "mic" case .files: return "doc" + case .simplexLinks: return "link.circle" case .history: return "clock" } } @@ -737,6 +756,7 @@ public enum GroupFeature: String, Decodable, Feature { case .reactions: return "face.smiling.fill" case .voice: return "mic.fill" case .files: return "doc.fill" + case .simplexLinks: return "link.circle.fill" case .history: return "clock.fill" } } @@ -781,6 +801,11 @@ public enum GroupFeature: String, Decodable, Feature { case .on: return "Allow to send files and media." case .off: return "Prohibit sending files and media." } + case .simplexLinks: + switch enabled { + case .on: return "Allow to send SimpleX links." + case .off: return "Prohibit sending SimpleX links." + } case .history: switch enabled { case .on: return "Send up to 100 last messages to new members." @@ -819,6 +844,11 @@ public enum GroupFeature: String, Decodable, Feature { case .on: return "Group members can send files and media." case .off: return "Files and media are prohibited in this group." } + case .simplexLinks: + switch enabled { + case .on: return "Group members can send SimpleX links." + case .off: return "SimpleX links are prohibited in this group." + } case .history: switch enabled { case .on: return "Up to 100 last messages are sent to new members." @@ -958,20 +988,22 @@ public enum FeatureAllowed: String, Codable, Identifiable { public struct FullGroupPreferences: Decodable, Equatable { public var timedMessages: TimedMessagesGroupPreference - public var directMessages: GroupPreference + public var directMessages: RoleGroupPreference public var fullDelete: GroupPreference public var reactions: GroupPreference - public var voice: GroupPreference - public var files: GroupPreference + public var voice: RoleGroupPreference + public var files: RoleGroupPreference + public var simplexLinks: RoleGroupPreference public var history: GroupPreference public init( timedMessages: TimedMessagesGroupPreference, - directMessages: GroupPreference, + directMessages: RoleGroupPreference, fullDelete: GroupPreference, reactions: GroupPreference, - voice: GroupPreference, - files: GroupPreference, + voice: RoleGroupPreference, + files: RoleGroupPreference, + simplexLinks: RoleGroupPreference, history: GroupPreference ) { self.timedMessages = timedMessages @@ -980,36 +1012,40 @@ public struct FullGroupPreferences: Decodable, Equatable { self.reactions = reactions self.voice = voice self.files = files + self.simplexLinks = simplexLinks self.history = history } public static let sampleData = FullGroupPreferences( timedMessages: TimedMessagesGroupPreference(enable: .off), - directMessages: GroupPreference(enable: .off), + directMessages: RoleGroupPreference(enable: .off, role: nil), fullDelete: GroupPreference(enable: .off), reactions: GroupPreference(enable: .on), - voice: GroupPreference(enable: .on), - files: GroupPreference(enable: .on), + voice: RoleGroupPreference(enable: .on, role: nil), + files: RoleGroupPreference(enable: .on, role: nil), + simplexLinks: RoleGroupPreference(enable: .on, role: nil), history: GroupPreference(enable: .on) ) } public struct GroupPreferences: Codable { public var timedMessages: TimedMessagesGroupPreference? - public var directMessages: GroupPreference? + public var directMessages: RoleGroupPreference? public var fullDelete: GroupPreference? public var reactions: GroupPreference? - public var voice: GroupPreference? - public var files: GroupPreference? + public var voice: RoleGroupPreference? + public var files: RoleGroupPreference? + public var simplexLinks: RoleGroupPreference? public var history: GroupPreference? public init( timedMessages: TimedMessagesGroupPreference? = nil, - directMessages: GroupPreference? = nil, + directMessages: RoleGroupPreference? = nil, fullDelete: GroupPreference? = nil, reactions: GroupPreference? = nil, - voice: GroupPreference? = nil, - files: GroupPreference? = nil, + voice: RoleGroupPreference? = nil, + files: RoleGroupPreference? = nil, + simplexLinks: RoleGroupPreference? = nil, history: GroupPreference? = nil ) { self.timedMessages = timedMessages @@ -1018,16 +1054,18 @@ public struct GroupPreferences: Codable { self.reactions = reactions self.voice = voice self.files = files + self.simplexLinks = simplexLinks self.history = history } public static let sampleData = GroupPreferences( timedMessages: TimedMessagesGroupPreference(enable: .off), - directMessages: GroupPreference(enable: .off), + directMessages: RoleGroupPreference(enable: .off, role: nil), fullDelete: GroupPreference(enable: .off), reactions: GroupPreference(enable: .on), - voice: GroupPreference(enable: .on), - files: GroupPreference(enable: .on), + voice: RoleGroupPreference(enable: .on, role: nil), + files: RoleGroupPreference(enable: .on, role: nil), + simplexLinks: RoleGroupPreference(enable: .on, role: nil), history: GroupPreference(enable: .on) ) } @@ -1040,6 +1078,7 @@ public func toGroupPreferences(_ fullPreferences: FullGroupPreferences) -> Group reactions: fullPreferences.reactions, voice: fullPreferences.voice, files: fullPreferences.files, + simplexLinks: fullPreferences.simplexLinks, history: fullPreferences.history ) } @@ -1051,11 +1090,37 @@ public struct GroupPreference: Codable, Equatable { enable == .on } + public func enabled(_ role: GroupMemberRole?, for m: GroupMember?) -> GroupFeatureEnabled { + switch enable { + case .off: .off + case .on: + if let role, let m { + m.memberRole >= role ? .on : .off + } else { + .on + } + } + } + public init(enable: GroupFeatureEnabled) { self.enable = enable } } +public struct RoleGroupPreference: Codable, Equatable { + public var enable: GroupFeatureEnabled + public var role: GroupMemberRole? + + public func on(for m: GroupMember) -> Bool { + enable == .on && m.memberRole >= (role ?? .observer) + } + + public init(enable: GroupFeatureEnabled, role: GroupMemberRole?) { + self.enable = enable + self.role = role + } +} + public struct TimedMessagesGroupPreference: Codable, Equatable { public var enable: GroupFeatureEnabled public var ttl: Int? @@ -1280,7 +1345,7 @@ public enum ChatInfo: Identifiable, Decodable, NamedChat { case .timedMessages: return prefs.timedMessages.on case .fullDelete: return prefs.fullDelete.on case .reactions: return prefs.reactions.on - case .voice: return prefs.voice.on + case .voice: return prefs.voice.on(for: groupInfo.membership) case .calls: return false } case .local: @@ -1323,7 +1388,7 @@ public enum ChatInfo: Identifiable, Decodable, NamedChat { return .other } case let .group(groupInfo): - if !groupInfo.fullGroupPreferences.voice.on { + if !groupInfo.fullGroupPreferences.voice.on(for: groupInfo.membership) { return .groupOwnerCan } else { return .other @@ -1975,7 +2040,7 @@ public struct GroupMemberIds: Decodable { var groupId: Int64 } -public enum GroupMemberRole: String, Identifiable, CaseIterable, Comparable, Decodable { +public enum GroupMemberRole: String, Identifiable, CaseIterable, Comparable, Codable { case observer = "observer" case author = "author" case member = "member" @@ -2759,8 +2824,8 @@ public enum CIContent: Decodable, ItemContent { case sndChatFeature(feature: ChatFeature, enabled: FeatureEnabled, param: Int?) case rcvChatPreference(feature: ChatFeature, allowed: FeatureAllowed, param: Int?) case sndChatPreference(feature: ChatFeature, allowed: FeatureAllowed, param: Int?) - case rcvGroupFeature(groupFeature: GroupFeature, preference: GroupPreference, param: Int?) - case sndGroupFeature(groupFeature: GroupFeature, preference: GroupPreference, param: Int?) + case rcvGroupFeature(groupFeature: GroupFeature, preference: GroupPreference, param: Int?, memberRole_: GroupMemberRole?) + case sndGroupFeature(groupFeature: GroupFeature, preference: GroupPreference, param: Int?, memberRole_: GroupMemberRole?) case rcvChatFeatureRejected(feature: ChatFeature) case rcvGroupFeatureRejected(groupFeature: GroupFeature) case sndModerated @@ -2794,8 +2859,8 @@ public enum CIContent: Decodable, ItemContent { case let .sndChatFeature(feature, enabled, param): return CIContent.featureText(feature, enabled.text, param) case let .rcvChatPreference(feature, allowed, param): return CIContent.preferenceText(feature, allowed, param) case let .sndChatPreference(feature, allowed, param): return CIContent.preferenceText(feature, allowed, param) - case let .rcvGroupFeature(feature, preference, param): return CIContent.featureText(feature, preference.enable.text, param) - case let .sndGroupFeature(feature, preference, param): return CIContent.featureText(feature, preference.enable.text, param) + case let .rcvGroupFeature(feature, preference, param, role): return CIContent.featureText(feature, preference.enable.text, param, role) + case let .sndGroupFeature(feature, preference, param, role): return CIContent.featureText(feature, preference.enable.text, param, role) case let .rcvChatFeatureRejected(feature): return String.localizedStringWithFormat("%@: received, prohibited", feature.text) case let .rcvGroupFeatureRejected(groupFeature): return String.localizedStringWithFormat("%@: received, prohibited", groupFeature.text) case .sndModerated: return NSLocalizedString("moderated", comment: "moderated chat item") @@ -2820,10 +2885,25 @@ public enum CIContent: Decodable, ItemContent { NSLocalizedString("This chat is protected by end-to-end encryption.", comment: "E2EE info chat item") } - static func featureText(_ feature: Feature, _ enabled: String, _ param: Int?) -> String { - feature.hasParam - ? "\(feature.text): \(timeText(param))" - : "\(feature.text): \(enabled)" + static func featureText(_ feature: Feature, _ enabled: String, _ param: Int?, _ role: GroupMemberRole? = nil) -> String { + ( + feature.hasParam + ? "\(feature.text): \(timeText(param))" + : "\(feature.text): \(enabled)" + ) + + ( + feature.hasRole && role != nil + ? " (\(roleText(role)))" + : "" + ) + } + + private static func roleText(_ role: GroupMemberRole?) -> String { + switch role { + case .owner: NSLocalizedString("owners", comment: "feature role") + case .admin: NSLocalizedString("admins", comment: "feature role") + default: NSLocalizedString("all members", comment: "feature role") + } } public static func preferenceText(_ feature: Feature, _ allowed: FeatureAllowed, _ param: Int?) -> String { From 86fe2212c3a8eb16c563e7ee8d4124b9a92f023a Mon Sep 17 00:00:00 2001 From: Alexander Bondarenko <486682+dpwiz@users.noreply.github.com> Date: Sat, 13 Apr 2024 11:32:43 +0300 Subject: [PATCH 33/60] chat: forward files with streaming re-encryption (#4022) * chat: forward files with streaming re-encryption * refactor --- src/Simplex/Chat.hs | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index 441b7994b6..92dc294d4b 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -83,6 +83,7 @@ import Simplex.Chat.Types.Preferences import Simplex.Chat.Types.Shared import Simplex.Chat.Types.Util import Simplex.Chat.Util (encryptFile, liftIOEither, shuffle) +import qualified Simplex.Chat.Util as U import Simplex.FileTransfer.Client.Main (maxFileSize, maxFileSizeHard) import Simplex.FileTransfer.Client.Presets (defaultXFTPServers) import Simplex.FileTransfer.Description (FileDescriptionURI (..), ValidFileDescription) @@ -932,7 +933,7 @@ processChatCommand' vr = \case forwardCIFF ChatItem {meta = CIMeta {itemForwarded = Just ciff}} _ = Just ciff forwardCIFF _ ciff = ciff forwardCryptoFile :: ChatItem c d -> CM (Maybe CryptoFile) - forwardCryptoFile ChatItem {file = Just CIFile {fileName, fileStatus, fileSource = Just fromCF@CryptoFile {filePath}}} + forwardCryptoFile ChatItem {file = Just CIFile {fileName, fileStatus, fileSource = Just fromCF@CryptoFile {filePath, cryptoArgs = fromArgs}}} | ciFileLoaded fileStatus = chatReadVar filesFolder >>= \case Nothing -> @@ -948,14 +949,31 @@ processChatCommand' vr = \case cfArgs <- if encrypt then Just <$> (atomically . CF.randomArgs =<< asks random) else pure Nothing let toCF = CryptoFile fsNewPath cfArgs -- to keep forwarded file in case original is deleted - liftIOEither $ runExceptT $ withExceptT (ChatError . CEInternalError . show) $ do - lb <- CF.readFile (fromCF {filePath = fsFromPath} :: CryptoFile) - CF.writeFile toCF lb + liftIOEither $ runExceptT $ withExceptT (ChatError . CEInternalError . show) $ copyCryptoFile (fromCF {filePath = fsFromPath} :: CryptoFile) toCF pure $ Just (toCF {filePath = takeFileName fsNewPath} :: CryptoFile) ) (pure Nothing) | otherwise = pure Nothing forwardCryptoFile _ = pure Nothing + copyCryptoFile :: CryptoFile -> CryptoFile -> ExceptT CF.FTCryptoError IO () + copyCryptoFile fromCF@CryptoFile {filePath = fsFromPath, cryptoArgs = fromArgs} toCF@CryptoFile {cryptoArgs = toArgs} = do + fromSizeFull <- getFileSize fsFromPath + let fromSize = fromSizeFull - maybe 0 (const $ toInteger C.authTagSize) fromArgs + CF.withFile fromCF ReadMode $ \fromH -> + CF.withFile toCF WriteMode $ \toH -> do + copyChunks fromH toH fromSize + forM_ fromArgs $ \_ -> CF.hGetTag fromH + forM_ toArgs $ \_ -> liftIO $ CF.hPutTag toH + where + copyChunks :: CF.CryptoFileHandle -> CF.CryptoFileHandle -> Integer -> ExceptT CF.FTCryptoError IO () + copyChunks r w size = do + let chSize = min size U.chunkSize + chSize' = fromIntegral chSize + size' = size - chSize + ch <- liftIO $ CF.hGet r chSize' + when (B.length ch /= chSize') $ throwError $ CF.FTCEFileIOError "encrypting file: unexpected EOF" + liftIO . CF.hPut w $ LB.fromStrict ch + when (size' > 0) $ copyChunks r w size' APIUserRead userId -> withUserId userId $ \user -> withStore' (`setUserChatsRead` user) >> ok user UserRead -> withUser $ \User {userId} -> processChatCommand $ APIUserRead userId APIChatRead (ChatRef cType chatId) fromToIds -> withUser $ \_ -> case cType of From 433b3652fbae16faf91c8aa0ed2167e4d8cedab0 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Fri, 12 Apr 2024 23:28:52 +0100 Subject: [PATCH 34/60] core: simplexmq 5.6.2.2 --- cabal.project | 2 +- scripts/nix/sha256map.nix | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cabal.project b/cabal.project index f60b834a84..af464c7320 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: 3b1dd6dff924d915274963f27e053c95741caf07 + tag: 5e783396e05ced83b22914c172d2f2e8e14e5be2 source-repository-package type: git diff --git a/scripts/nix/sha256map.nix b/scripts/nix/sha256map.nix index 54e52c723c..cc8003b551 100644 --- a/scripts/nix/sha256map.nix +++ b/scripts/nix/sha256map.nix @@ -1,5 +1,5 @@ { - "https://github.com/simplex-chat/simplexmq.git"."3b1dd6dff924d915274963f27e053c95741caf07" = "1b61n33nbbx7bqgwscvv0a8yy628b4y397s7ydyg22hdw3dg009q"; + "https://github.com/simplex-chat/simplexmq.git"."5e783396e05ced83b22914c172d2f2e8e14e5be2" = "1bxbhy5vddczspan0xzcwk2jvkial6n84m0s5wznqbg03i4y7j1y"; "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"; From de81434b36060b0066e9833a7ce1d657c6874d84 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Sat, 13 Apr 2024 17:51:10 +0700 Subject: [PATCH 35/60] android, desktop: role-based preferences, SimpleX links preference (#4023) * android, desktop: role-based preferences, SimpleX links preference * disable for now * different way of disabling send button * mic icon filled * icons * braces * colors --------- Co-authored-by: Evgeny Poberezkin --- .../chat/simplex/common/model/ChatModel.kt | 44 ++++++++-- .../chat/simplex/common/model/SimpleXAPI.kt | 75 ++++++++++++++--- .../chat/simplex/common/views/TerminalView.kt | 1 + .../simplex/common/views/chat/ComposeView.kt | 80 +++++++++++++++---- .../simplex/common/views/chat/SendMsgView.kt | 9 ++- .../views/chat/group/GroupMemberInfoView.kt | 4 +- .../views/chat/group/GroupPreferences.kt | 75 ++++++++++++----- .../views/chat/item/CIChatFeatureView.kt | 13 +-- .../common/views/chat/item/ChatItemView.kt | 14 ++-- .../simplex/common/views/helpers/Section.kt | 4 +- .../commonMain/resources/MR/base/strings.xml | 12 +++ 11 files changed, 258 insertions(+), 73 deletions(-) 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 8233a7cc5d..d0a02c332f 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 @@ -805,6 +805,24 @@ data class Chat( val id: String get() = chatInfo.id + fun groupFeatureEnabled(feature: GroupFeature): Boolean = + if (chatInfo is ChatInfo.Group) { + val groupInfo = chatInfo.groupInfo + val p = groupInfo.fullGroupPreferences + when (feature) { + GroupFeature.TimedMessages -> p.timedMessages.on + GroupFeature.DirectMessages -> p.directMessages.on(groupInfo.membership) + GroupFeature.FullDelete -> p.fullDelete.on + GroupFeature.Reactions -> p.reactions.on + GroupFeature.Voice -> p.voice.on(groupInfo.membership) + GroupFeature.Files -> p.files.on(groupInfo.membership) + GroupFeature.SimplexLinks -> p.simplexLinks.on(groupInfo.membership) + GroupFeature.History -> p.history.on + } + } else { + true + } + @Serializable data class ChatStats(val unreadCount: Int = 0, val minUnreadItemId: Long = 0, val unreadChat: Boolean = false) @@ -1240,7 +1258,7 @@ data class GroupInfo ( ChatFeature.TimedMessages -> fullGroupPreferences.timedMessages.on ChatFeature.FullDelete -> fullGroupPreferences.fullDelete.on ChatFeature.Reactions -> fullGroupPreferences.reactions.on - ChatFeature.Voice -> fullGroupPreferences.voice.on + ChatFeature.Voice -> fullGroupPreferences.voice.on(membership) ChatFeature.Calls -> false } override val timedMessagesTTL: Int? get() = with(fullGroupPreferences.timedMessages) { if (on) ttl else null } @@ -2319,8 +2337,8 @@ sealed class CIContent: ItemContent { @Serializable @SerialName("sndChatFeature") class SndChatFeature(val feature: ChatFeature, val enabled: FeatureEnabled, val param: Int? = null): CIContent() { override val msgContent: MsgContent? get() = null } @Serializable @SerialName("rcvChatPreference") class RcvChatPreference(val feature: ChatFeature, val allowed: FeatureAllowed, val param: Int? = null): CIContent() { override val msgContent: MsgContent? get() = null } @Serializable @SerialName("sndChatPreference") class SndChatPreference(val feature: ChatFeature, val allowed: FeatureAllowed, val param: Int? = null): CIContent() { override val msgContent: MsgContent? get() = null } - @Serializable @SerialName("rcvGroupFeature") class RcvGroupFeature(val groupFeature: GroupFeature, val preference: GroupPreference, val param: Int? = null): CIContent() { override val msgContent: MsgContent? get() = null } - @Serializable @SerialName("sndGroupFeature") class SndGroupFeature(val groupFeature: GroupFeature, val preference: GroupPreference, val param: Int? = null): CIContent() { override val msgContent: MsgContent? get() = null } + @Serializable @SerialName("rcvGroupFeature") class RcvGroupFeature(val groupFeature: GroupFeature, val preference: GroupPreference, val param: Int? = null, val memberRole_: GroupMemberRole?): CIContent() { override val msgContent: MsgContent? get() = null } + @Serializable @SerialName("sndGroupFeature") class SndGroupFeature(val groupFeature: GroupFeature, val preference: GroupPreference, val param: Int? = null, val memberRole_: GroupMemberRole?): CIContent() { override val msgContent: MsgContent? get() = null } @Serializable @SerialName("rcvChatFeatureRejected") class RcvChatFeatureRejected(val feature: ChatFeature): CIContent() { override val msgContent: MsgContent? get() = null } @Serializable @SerialName("rcvGroupFeatureRejected") class RcvGroupFeatureRejected(val groupFeature: GroupFeature): CIContent() { override val msgContent: MsgContent? get() = null } @Serializable @SerialName("sndModerated") object SndModerated: CIContent() { override val msgContent: MsgContent? get() = null } @@ -2352,8 +2370,8 @@ sealed class CIContent: ItemContent { is SndChatFeature -> featureText(feature, enabled.text, param) is RcvChatPreference -> preferenceText(feature, allowed, param) is SndChatPreference -> preferenceText(feature, allowed, param) - is RcvGroupFeature -> featureText(groupFeature, preference.enable.text, param) - is SndGroupFeature -> featureText(groupFeature, preference.enable.text, param) + is RcvGroupFeature -> featureText(groupFeature, preference.enable.text, param, memberRole_) + is SndGroupFeature -> featureText(groupFeature, preference.enable.text, param, memberRole_) is RcvChatFeatureRejected -> "${feature.text}: ${generalGetString(MR.strings.feature_received_prohibited)}" is RcvGroupFeatureRejected -> "${groupFeature.text}: ${generalGetString(MR.strings.feature_received_prohibited)}" is SndModerated -> generalGetString(MR.strings.moderated_description) @@ -2390,11 +2408,23 @@ sealed class CIContent: ItemContent { private val e2eeInfoNoPQStr: String = generalGetString(MR.strings.e2ee_info_no_pq_short) - fun featureText(feature: Feature, enabled: String, param: Int?): String = - if (feature.hasParam) { + fun featureText(feature: Feature, enabled: String, param: Int?, role: GroupMemberRole? = null): String = + (if (feature.hasParam) { "${feature.text}: ${timeText(param)}" } else { "${feature.text}: $enabled" + }) + ( + if (feature.hasRole && role != null) + " (${roleText(role)})" + else + "" + ) + + private fun roleText(role: GroupMemberRole?): String = + when (role) { + GroupMemberRole.Owner -> generalGetString(MR.strings.feature_roles_owners) + GroupMemberRole.Admin -> generalGetString(MR.strings.feature_roles_admins) + else -> generalGetString(MR.strings.feature_roles_all_members) } fun preferenceText(feature: Feature, allowed: FeatureAllowed, param: Int?): String = when { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt index b70c970623..4e239598fb 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt @@ -3430,6 +3430,7 @@ interface Feature { @Composable fun iconFilled(): Painter val hasParam: Boolean + val hasRole: Boolean } @Serializable @@ -3449,6 +3450,7 @@ enum class ChatFeature: Feature { TimedMessages -> true else -> false } + override val hasRole: Boolean = false override val text: String get() = when(this) { @@ -3549,6 +3551,7 @@ enum class GroupFeature: Feature { @SerialName("reactions") Reactions, @SerialName("voice") Voice, @SerialName("files") Files, + @SerialName("simplexLinks") SimplexLinks, @SerialName("history") History; override val hasParam: Boolean get() = when(this) { @@ -3556,6 +3559,18 @@ enum class GroupFeature: Feature { else -> false } + override val hasRole: Boolean + get() = when (this) { + TimedMessages -> false + DirectMessages -> true + FullDelete -> false + Reactions -> false + Voice -> true + Files -> true + SimplexLinks -> true + History -> false + } + override val text: String get() = when(this) { TimedMessages -> generalGetString(MR.strings.timed_messages) @@ -3564,6 +3579,7 @@ enum class GroupFeature: Feature { Reactions -> generalGetString(MR.strings.message_reactions) Voice -> generalGetString(MR.strings.voice_messages) Files -> generalGetString(MR.strings.files_and_media) + SimplexLinks -> generalGetString(MR.strings.simplex_links) History -> generalGetString(MR.strings.recent_history) } @@ -3575,6 +3591,7 @@ enum class GroupFeature: Feature { Reactions -> painterResource(MR.images.ic_add_reaction) Voice -> painterResource(MR.images.ic_keyboard_voice) Files -> painterResource(MR.images.ic_draft) + SimplexLinks -> painterResource(MR.images.ic_link) History -> painterResource(MR.images.ic_schedule) } @@ -3586,6 +3603,7 @@ enum class GroupFeature: Feature { Reactions -> painterResource(MR.images.ic_add_reaction_filled) Voice -> painterResource(MR.images.ic_keyboard_voice_filled) Files -> painterResource(MR.images.ic_draft_filled) + SimplexLinks -> painterResource(MR.images.ic_link) History -> painterResource(MR.images.ic_schedule_filled) } @@ -3616,6 +3634,10 @@ enum class GroupFeature: Feature { GroupFeatureEnabled.ON -> generalGetString(MR.strings.allow_to_send_files) GroupFeatureEnabled.OFF -> generalGetString(MR.strings.prohibit_sending_files) } + SimplexLinks -> when(enabled) { + GroupFeatureEnabled.ON -> generalGetString(MR.strings.allow_to_send_simplex_links) + GroupFeatureEnabled.OFF -> generalGetString(MR.strings.prohibit_sending_simplex_links) + } History -> when(enabled) { GroupFeatureEnabled.ON -> generalGetString(MR.strings.enable_sending_recent_history) GroupFeatureEnabled.OFF -> generalGetString(MR.strings.disable_sending_recent_history) @@ -3647,6 +3669,10 @@ enum class GroupFeature: Feature { GroupFeatureEnabled.ON -> generalGetString(MR.strings.group_members_can_send_files) GroupFeatureEnabled.OFF -> generalGetString(MR.strings.files_are_prohibited_in_group) } + SimplexLinks -> when(enabled) { + GroupFeatureEnabled.ON -> generalGetString(MR.strings.group_members_can_send_simplex_links) + GroupFeatureEnabled.OFF -> generalGetString(MR.strings.simplex_links_are_prohibited_in_group) + } History -> when(enabled) { GroupFeatureEnabled.ON -> generalGetString(MR.strings.recent_history_is_sent_to_new_members) GroupFeatureEnabled.OFF -> generalGetString(MR.strings.recent_history_is_not_sent_to_new_members) @@ -3760,11 +3786,12 @@ enum class FeatureAllowed { @Serializable data class FullGroupPreferences( val timedMessages: TimedMessagesGroupPreference, - val directMessages: GroupPreference, + val directMessages: RoleGroupPreference, val fullDelete: GroupPreference, val reactions: GroupPreference, - val voice: GroupPreference, - val files: GroupPreference, + val voice: RoleGroupPreference, + val files: RoleGroupPreference, + val simplexLinks: RoleGroupPreference, val history: GroupPreference, ) { fun toGroupPreferences(): GroupPreferences = @@ -3775,17 +3802,19 @@ data class FullGroupPreferences( reactions = reactions, voice = voice, files = files, + simplexLinks = simplexLinks, history = history ) companion object { val sampleData = FullGroupPreferences( timedMessages = TimedMessagesGroupPreference(GroupFeatureEnabled.OFF), - directMessages = GroupPreference(GroupFeatureEnabled.OFF), + directMessages = RoleGroupPreference(GroupFeatureEnabled.OFF, role = null), fullDelete = GroupPreference(GroupFeatureEnabled.OFF), reactions = GroupPreference(GroupFeatureEnabled.ON), - voice = GroupPreference(GroupFeatureEnabled.ON), - files = GroupPreference(GroupFeatureEnabled.ON), + voice = RoleGroupPreference(GroupFeatureEnabled.ON, role = null), + files = RoleGroupPreference(GroupFeatureEnabled.ON, role = null), + simplexLinks = RoleGroupPreference(GroupFeatureEnabled.ON, role = null), history = GroupPreference(GroupFeatureEnabled.ON), ) } @@ -3794,21 +3823,23 @@ data class FullGroupPreferences( @Serializable data class GroupPreferences( val timedMessages: TimedMessagesGroupPreference? = null, - val directMessages: GroupPreference? = null, + val directMessages: RoleGroupPreference? = null, val fullDelete: GroupPreference? = null, val reactions: GroupPreference? = null, - val voice: GroupPreference? = null, - val files: GroupPreference? = null, + val voice: RoleGroupPreference? = null, + val files: RoleGroupPreference? = null, + val simplexLinks: RoleGroupPreference? = null, val history: GroupPreference? = null, ) { companion object { val sampleData = GroupPreferences( timedMessages = TimedMessagesGroupPreference(GroupFeatureEnabled.OFF), - directMessages = GroupPreference(GroupFeatureEnabled.OFF), + directMessages = RoleGroupPreference(GroupFeatureEnabled.OFF, role = null), fullDelete = GroupPreference(GroupFeatureEnabled.OFF), reactions = GroupPreference(GroupFeatureEnabled.ON), - voice = GroupPreference(GroupFeatureEnabled.ON), - files = GroupPreference(GroupFeatureEnabled.ON), + voice = RoleGroupPreference(GroupFeatureEnabled.ON, role = null), + files = RoleGroupPreference(GroupFeatureEnabled.ON, role = null), + simplexLinks = RoleGroupPreference(GroupFeatureEnabled.ON, role = null), history = GroupPreference(GroupFeatureEnabled.ON), ) } @@ -3819,6 +3850,26 @@ data class GroupPreference( val enable: GroupFeatureEnabled ) { val on: Boolean get() = enable == GroupFeatureEnabled.ON + + fun enabled(role: GroupMemberRole?, m: GroupMember?): GroupFeatureEnabled = + when (enable) { + GroupFeatureEnabled.OFF -> GroupFeatureEnabled.OFF + GroupFeatureEnabled.ON -> + if (role != null && m != null) { + if (m.memberRole >= role) GroupFeatureEnabled.ON else GroupFeatureEnabled.OFF + } else { + GroupFeatureEnabled.ON + } + } +} + +@Serializable +data class RoleGroupPreference( + val enable: GroupFeatureEnabled, + val role: GroupMemberRole? = null, +) { + fun on(m: GroupMember): Boolean = + enable == GroupFeatureEnabled.ON && m.memberRole >= (role ?: GroupMemberRole.Observer) } @Serializable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/TerminalView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/TerminalView.kt index 1cd85ae7f9..1f49a98728 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/TerminalView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/TerminalView.kt @@ -85,6 +85,7 @@ fun TerminalLayout( isDirectChat = false, liveMessageAlertShown = SharedPreference(get = { false }, set = {}), sendMsgEnabled = true, + sendButtonEnabled = true, nextSendGrpInv = false, needToAllowVoiceToContact = false, allowedVoiceByPrefs = false, diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeView.kt index a438ea2bfc..1c8b32d467 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeView.kt @@ -1,6 +1,7 @@ @file:UseSerializers(UriSerializer::class) package chat.simplex.common.views.chat +import androidx.compose.foundation.background import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.* @@ -11,6 +12,8 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.ui.text.font.FontStyle import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.unit.dp @@ -18,8 +21,7 @@ import chat.simplex.common.model.* import chat.simplex.common.model.ChatModel.controller import chat.simplex.common.model.ChatModel.filesToDelete import chat.simplex.common.platform.* -import chat.simplex.common.ui.theme.Indigo -import chat.simplex.common.ui.theme.isSystemInDarkTheme +import chat.simplex.common.ui.theme.* import chat.simplex.common.views.chat.item.* import chat.simplex.common.views.helpers.* import chat.simplex.res.MR @@ -115,6 +117,15 @@ data class ComposeState( } } + val attachmentPreview: Boolean + get() = when (preview) { + ComposePreview.NoPreview -> false + is ComposePreview.CLinkPreview -> false + is ComposePreview.MediaPreview -> preview.content.isNotEmpty() + is ComposePreview.VoicePreview -> false + is ComposePreview.FilePreview -> true + } + val empty: Boolean get() = message.isEmpty() && preview is ComposePreview.NoPreview && contextItem is ComposeContextItem.NoContextItem @@ -243,10 +254,23 @@ fun ComposeView( attachmentOption: MutableState, showChooseAttachment: () -> Unit ) { + val cancelledLinks = rememberSaveable { mutableSetOf() } + fun isSimplexLink(link: String): Boolean = + link.startsWith("https://simplex.chat", true) || link.startsWith("http://simplex.chat", true) + + fun parseMessage(msg: String): Pair { + if (msg.isBlank()) return null to false + val parsedMsg = parseToMarkdown(msg) ?: return null to false + val link = parsedMsg.firstOrNull { ft -> ft.format is Format.Uri && !cancelledLinks.contains(ft.text) && !isSimplexLink(ft.text) } + val simplexLink = parsedMsg.any { ft -> ft.format is Format.SimplexLink } + return link?.text to simplexLink + } + val linkUrl = rememberSaveable { mutableStateOf(null) } + // default value parsed because of draft + val hasSimplexLink = rememberSaveable { mutableStateOf(parseMessage(composeState.value.message).second) } val prevLinkUrl = rememberSaveable { mutableStateOf(null) } val pendingLinkUrl = rememberSaveable { mutableStateOf(null) } - val cancelledLinks = rememberSaveable { mutableSetOf() } val useLinkPreviews = chatModel.controller.appPrefs.privacyLinkPreviews.get() val saveLastDraft = chatModel.controller.appPrefs.privacySaveLastDraft.get() val smallFont = MaterialTheme.typography.body1.copy(color = MaterialTheme.colors.onBackground) @@ -255,15 +279,6 @@ fun ComposeView( AttachmentSelection(composeState, attachmentOption, composeState::processPickedFile) { uris, text -> CoroutineScope(Dispatchers.IO).launch { composeState.processPickedMedia(uris, text) } } - fun isSimplexLink(link: String): Boolean = - link.startsWith("https://simplex.chat", true) || link.startsWith("http://simplex.chat", true) - - fun parseMessage(msg: String): String? { - val parsedMsg = parseToMarkdown(msg) - val link = parsedMsg?.firstOrNull { ft -> ft.format is Format.Uri && !cancelledLinks.contains(ft.text) && !isSimplexLink(ft.text) } - return link?.text - } - fun loadLinkPreview(url: String, wait: Long? = null) { if (pendingLinkUrl.value == url) { composeState.value = composeState.value.copy(preview = ComposePreview.CLinkPreview(null)) @@ -283,7 +298,9 @@ fun ComposeView( fun showLinkPreview(s: String) { prevLinkUrl.value = linkUrl.value - linkUrl.value = parseMessage(s) + val parsed = parseMessage(s) + linkUrl.value = parsed.first + hasSimplexLink.value = parsed.second val url = linkUrl.value if (url != null) { if (url != composeState.value.linkPreview?.uri && url != pendingLinkUrl.value) { @@ -387,7 +404,7 @@ fun ComposeView( fun checkLinkPreview(): MsgContent { return when (val composePreview = cs.preview) { is ComposePreview.CLinkPreview -> { - val url = parseMessage(msgText) + val url = parseMessage(msgText).first val lp = composePreview.linkPreview if (lp != null && url == lp.uri) { MsgContent.MCLink(msgText, preview = lp) @@ -563,8 +580,16 @@ fun ComposeView( } else { textStyle.value = smallFont if (composeState.value.linkPreviewAllowed) { - if (s.isNotEmpty()) showLinkPreview(s) - else resetLinkPreview() + if (s.isNotEmpty()) { + showLinkPreview(s) + } else { + resetLinkPreview() + hasSimplexLink.value = false + } + } else if (s.isNotEmpty() && !chat.groupFeatureEnabled(GroupFeature.SimplexLinks)) { + hasSimplexLink.value = parseMessage(s).second + } else { + hasSimplexLink.value = false } } } @@ -700,6 +725,16 @@ fun ComposeView( } } + @Composable + fun MsgNotAllowedView(reason: String, icon: Painter) { + val color = CurrentColors.collectAsState().value.appColors.receivedMessage + Row(Modifier.padding(top = 5.dp).fillMaxWidth().background(color).padding(horizontal = DEFAULT_PADDING_HALF, vertical = DEFAULT_PADDING_HALF * 1.5f), verticalAlignment = Alignment.CenterVertically) { + Icon(icon, null, tint = MaterialTheme.colors.secondary) + Spacer(Modifier.width(DEFAULT_PADDING_HALF)) + Text(reason, fontStyle = FontStyle.Italic) + } + } + @Composable fun contextItemView() { when (val contextItem = composeState.value.contextItem) { @@ -743,7 +778,17 @@ fun ComposeView( if (nextSendGrpInv.value) { ComposeContextInvitingContactMemberView() } + val simplexLinkProhibited = hasSimplexLink.value && !chat.groupFeatureEnabled(GroupFeature.SimplexLinks) + val fileProhibited = composeState.value.attachmentPreview && !chat.groupFeatureEnabled(GroupFeature.Files) + val voiceProhibited = composeState.value.preview is ComposePreview.VoicePreview && !chat.chatInfo.featureEnabled(ChatFeature.Voice) if (composeState.value.preview !is ComposePreview.VoicePreview || composeState.value.editing) { + if (simplexLinkProhibited) { + MsgNotAllowedView(generalGetString(MR.strings.simplex_links_not_allowed), icon = painterResource(MR.images.ic_link)) + } else if (fileProhibited) { + MsgNotAllowedView(generalGetString(MR.strings.files_and_media_not_allowed), icon = painterResource(MR.images.ic_draft)) + } else if (voiceProhibited) { + MsgNotAllowedView(generalGetString(MR.strings.voice_messages_not_allowed), icon = painterResource(MR.images.ic_mic)) + } contextItemView() when { composeState.value.editing && composeState.value.preview is ComposePreview.VoicePreview -> {} @@ -764,7 +809,7 @@ fun ComposeView( modifier = Modifier.padding(end = 8.dp), verticalAlignment = Alignment.Bottom, ) { - val isGroupAndProhibitedFiles = chat.chatInfo is ChatInfo.Group && !chat.chatInfo.groupInfo.fullGroupPreferences.files.on + val isGroupAndProhibitedFiles = chat.chatInfo is ChatInfo.Group && !chat.chatInfo.groupInfo.fullGroupPreferences.files.on(chat.chatInfo.groupInfo.membership) val attachmentClicked = if (isGroupAndProhibitedFiles) { { AlertManager.shared.showAlertMsg( @@ -871,6 +916,7 @@ fun ComposeView( chat.chatInfo is ChatInfo.Direct, liveMessageAlertShown = chatModel.controller.appPrefs.liveMessageAlertShown, sendMsgEnabled = sendMsgEnabled.value, + sendButtonEnabled = sendMsgEnabled.value && !(simplexLinkProhibited || fileProhibited || voiceProhibited), nextSendGrpInv = nextSendGrpInv.value, needToAllowVoiceToContact, allowedVoiceByPrefs, diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/SendMsgView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/SendMsgView.kt index 456e2a538b..14bcf7dfb7 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/SendMsgView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/SendMsgView.kt @@ -39,6 +39,7 @@ fun SendMsgView( isDirectChat: Boolean, liveMessageAlertShown: SharedPreference, sendMsgEnabled: Boolean, + sendButtonEnabled: Boolean, nextSendGrpInv: Boolean, needToAllowVoiceToContact: Boolean, allowedVoiceByPrefs: Boolean, @@ -75,7 +76,8 @@ fun SendMsgView( val showDeleteTextButton = rememberSaveable { mutableStateOf(false) } val sendMsgButtonDisabled = !sendMsgEnabled || !cs.sendEnabled() || (!allowedVoiceByPrefs && cs.preview is ComposePreview.VoicePreview) || - cs.endLiveDisabled + cs.endLiveDisabled || + !sendButtonEnabled PlatformTextField(composeState, sendMsgEnabled, sendMsgButtonDisabled, textStyle, showDeleteTextButton, userIsObserver, onMessageChange, editPrevMessage, onFilesPasted) { if (!cs.inProgress) { sendMessage(null) @@ -430,7 +432,7 @@ private fun SendMsgButton( .padding(4.dp) .alpha(alpha.value) .clip(CircleShape) - .background(if (enabled) sendButtonColor else MaterialTheme.colors.secondary) + .background(if (enabled) sendButtonColor else MaterialTheme.colors.secondary.copy(alpha = 0.75f)) .padding(3.dp) ) } @@ -552,6 +554,7 @@ fun PreviewSendMsgView() { isDirectChat = true, liveMessageAlertShown = SharedPreference(get = { true }, set = { }), sendMsgEnabled = true, + sendButtonEnabled = true, nextSendGrpInv = false, needToAllowVoiceToContact = false, allowedVoiceByPrefs = true, @@ -586,6 +589,7 @@ fun PreviewSendMsgViewEditing() { isDirectChat = true, liveMessageAlertShown = SharedPreference(get = { true }, set = { }), sendMsgEnabled = true, + sendButtonEnabled = true, nextSendGrpInv = false, needToAllowVoiceToContact = false, allowedVoiceByPrefs = true, @@ -620,6 +624,7 @@ fun PreviewSendMsgViewInProgress() { isDirectChat = true, liveMessageAlertShown = SharedPreference(get = { true }, set = { }), sendMsgEnabled = true, + sendButtonEnabled = true, nextSendGrpInv = false, needToAllowVoiceToContact = false, allowedVoiceByPrefs = true, diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupMemberInfoView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupMemberInfoView.kt index ebb35a4468..e90efa7d1b 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupMemberInfoView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupMemberInfoView.kt @@ -309,7 +309,7 @@ fun GroupMemberInfoLayout( SectionView { if (contactId != null && knownDirectChat(contactId) != null) { OpenChatButton(onClick = { openDirectChat(contactId) }) - } else if (groupInfo.fullGroupPreferences.directMessages.on) { + } else if (groupInfo.fullGroupPreferences.directMessages.on(groupInfo.membership)) { if (contactId != null) { OpenChatButton(onClick = { openDirectChat(contactId) }) } else if (member.activeConn?.peerChatVRange?.isCompatibleRange(CREATE_MEMBER_CONTACT_VRANGE) == true) { @@ -335,7 +335,7 @@ fun GroupMemberInfoLayout( val clipboard = LocalClipboardManager.current ShareAddressButton { clipboard.shareText(simplexChatLink(member.contactLink)) } if (contactId != null) { - if (knownDirectChat(contactId) == null && !groupInfo.fullGroupPreferences.directMessages.on) { + if (knownDirectChat(contactId) == null && !groupInfo.fullGroupPreferences.directMessages.on(groupInfo.membership)) { ConnectViaAddressButton(onClick = { connectViaAddress(member.contactLink) }) } } else { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupPreferences.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupPreferences.kt index 607efb9a3b..265d0cdeae 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupPreferences.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupPreferences.kt @@ -6,7 +6,6 @@ import SectionDividerSpaced import SectionItemView import SectionTextFooter import SectionView -import androidx.compose.foundation.* import androidx.compose.foundation.layout.* import androidx.compose.material.MaterialTheme import androidx.compose.material.Text @@ -20,13 +19,20 @@ import chat.simplex.common.views.usersettings.PreferenceToggleWithIcon import chat.simplex.common.model.* import chat.simplex.common.platform.ColumnWithScrollBar import chat.simplex.res.MR +import dev.icerock.moko.resources.compose.painterResource + +private val featureRoles: List> = listOf( + null to generalGetString(MR.strings.feature_roles_all_members), + GroupMemberRole.Admin to generalGetString(MR.strings.feature_roles_admins), + GroupMemberRole.Owner to generalGetString(MR.strings.feature_roles_owners) +) @Composable -fun GroupPreferencesView(m: ChatModel, rhId: Long?, chatId: String, close: () -> Unit,) { +fun GroupPreferencesView(m: ChatModel, rhId: Long?, chatId: String, close: () -> Unit) { val groupInfo = remember { derivedStateOf { val ch = m.getChat(chatId) val g = (ch?.chatInfo as? ChatInfo.Group)?.groupInfo - if (g == null || ch?.remoteHostId != rhId) null else g + if (g == null || ch.remoteHostId != rhId) null else g }} val gInfo = groupInfo.value ?: return var preferences by rememberSaveable(gInfo, stateSaver = serializableSaver()) { mutableStateOf(gInfo.fullGroupPreferences) } @@ -81,7 +87,7 @@ private fun GroupPreferencesLayout( val onTTLUpdated = { ttl: Int? -> applyPrefs(preferences.copy(timedMessages = preferences.timedMessages.copy(ttl = ttl))) } - FeatureSection(GroupFeature.TimedMessages, timedMessages, groupInfo, preferences, onTTLUpdated) { enable -> + FeatureSection(GroupFeature.TimedMessages, timedMessages, null, groupInfo, preferences, onTTLUpdated) { enable, _ -> if (enable == GroupFeatureEnabled.ON) { applyPrefs(preferences.copy(timedMessages = TimedMessagesGroupPreference(enable = enable, ttl = preferences.timedMessages.ttl ?: 86400))) } else { @@ -90,33 +96,45 @@ private fun GroupPreferencesLayout( } SectionDividerSpaced(true, maxBottomPadding = false) val allowDirectMessages = remember(preferences) { mutableStateOf(preferences.directMessages.enable) } - FeatureSection(GroupFeature.DirectMessages, allowDirectMessages, groupInfo, preferences, onTTLUpdated) { - applyPrefs(preferences.copy(directMessages = GroupPreference(enable = it))) + val directMessagesRole = remember(preferences) { mutableStateOf(preferences.directMessages.role) } + FeatureSection(GroupFeature.DirectMessages, allowDirectMessages, directMessagesRole, groupInfo, preferences, onTTLUpdated) { enable, role -> + applyPrefs(preferences.copy(directMessages = RoleGroupPreference(enable = enable, role))) } SectionDividerSpaced(true, maxBottomPadding = false) val allowFullDeletion = remember(preferences) { mutableStateOf(preferences.fullDelete.enable) } - FeatureSection(GroupFeature.FullDelete, allowFullDeletion, groupInfo, preferences, onTTLUpdated) { - applyPrefs(preferences.copy(fullDelete = GroupPreference(enable = it))) + FeatureSection(GroupFeature.FullDelete, allowFullDeletion, null, groupInfo, preferences, onTTLUpdated) { enable, _ -> + applyPrefs(preferences.copy(fullDelete = GroupPreference(enable = enable))) } SectionDividerSpaced(true, maxBottomPadding = false) val allowReactions = remember(preferences) { mutableStateOf(preferences.reactions.enable) } - FeatureSection(GroupFeature.Reactions, allowReactions, groupInfo, preferences, onTTLUpdated) { - applyPrefs(preferences.copy(reactions = GroupPreference(enable = it))) + FeatureSection(GroupFeature.Reactions, allowReactions, null, groupInfo, preferences, onTTLUpdated) { enable, _ -> + applyPrefs(preferences.copy(reactions = GroupPreference(enable = enable))) } SectionDividerSpaced(true, maxBottomPadding = false) val allowVoice = remember(preferences) { mutableStateOf(preferences.voice.enable) } - FeatureSection(GroupFeature.Voice, allowVoice, groupInfo, preferences, onTTLUpdated) { - applyPrefs(preferences.copy(voice = GroupPreference(enable = it))) + val voiceRole = remember(preferences) { mutableStateOf(preferences.voice.role) } + FeatureSection(GroupFeature.Voice, allowVoice, voiceRole, groupInfo, preferences, onTTLUpdated) { enable, role -> + applyPrefs(preferences.copy(voice = RoleGroupPreference(enable = enable, role))) } SectionDividerSpaced(true, maxBottomPadding = false) val allowFiles = remember(preferences) { mutableStateOf(preferences.files.enable) } - FeatureSection(GroupFeature.Files, allowFiles, groupInfo, preferences, onTTLUpdated) { - applyPrefs(preferences.copy(files = GroupPreference(enable = it))) + val filesRole = remember(preferences) { mutableStateOf(preferences.files.role) } + FeatureSection(GroupFeature.Files, allowFiles, filesRole, groupInfo, preferences, onTTLUpdated) { enable, role -> + applyPrefs(preferences.copy(files = RoleGroupPreference(enable = enable, role))) } + + // TODO enable simplexLinks preference in 5.8 +// SectionDividerSpaced(true, maxBottomPadding = false) +// val allowSimplexLinks = remember(preferences) { mutableStateOf(preferences.simplexLinks.enable) } +// val simplexLinksRole = remember(preferences) { mutableStateOf(preferences.simplexLinks.role) } +// FeatureSection(GroupFeature.SimplexLinks, allowSimplexLinks, simplexLinksRole, groupInfo, preferences, onTTLUpdated) { enable, role -> +// applyPrefs(preferences.copy(simplexLinks = RoleGroupPreference(enable = enable, role))) +// } + SectionDividerSpaced(true, maxBottomPadding = false) val enableHistory = remember(preferences) { mutableStateOf(preferences.history.enable) } - FeatureSection(GroupFeature.History, enableHistory, groupInfo, preferences, onTTLUpdated) { - applyPrefs(preferences.copy(history = GroupPreference(enable = it))) + FeatureSection(GroupFeature.History, enableHistory, null, groupInfo, preferences, onTTLUpdated) { enable, _ -> + applyPrefs(preferences.copy(history = GroupPreference(enable = enable))) } if (groupInfo.canEdit) { SectionDividerSpaced(maxTopPadding = true, maxBottomPadding = false) @@ -134,10 +152,11 @@ private fun GroupPreferencesLayout( private fun FeatureSection( feature: GroupFeature, enableFeature: State, + enableForRole: State? = null, groupInfo: GroupInfo, preferences: FullGroupPreferences, onTTLUpdated: (Int?) -> Unit, - onSelected: (GroupFeatureEnabled) -> Unit + onSelected: (GroupFeatureEnabled, GroupMemberRole?) -> Unit ) { SectionView { val on = enableFeature.value == GroupFeatureEnabled.ON @@ -151,7 +170,7 @@ private fun FeatureSection( iconTint, enableFeature.value == GroupFeatureEnabled.ON, ) { checked -> - onSelected(if (checked) GroupFeatureEnabled.ON else GroupFeatureEnabled.OFF) + onSelected(if (checked) GroupFeatureEnabled.ON else GroupFeatureEnabled.OFF, enableForRole?.value) } if (timedOn) { val ttl = rememberSaveable(preferences.timedMessages) { mutableStateOf(preferences.timedMessages.ttl) } @@ -165,6 +184,18 @@ private fun FeatureSection( onSelected = onTTLUpdated ) } + if (enableFeature.value == GroupFeatureEnabled.ON && enableForRole != null) { + ExposedDropDownSettingRow( + generalGetString(MR.strings.feature_enabled_for), + featureRoles, + enableForRole, + // remove in v5.8 + enabled = remember { mutableStateOf(false) }, + onSelected = { value -> + onSelected(enableFeature.value, value) + } + ) + } } else { InfoRow( feature.text, @@ -175,6 +206,14 @@ private fun FeatureSection( if (timedOn) { InfoRow(generalGetString(MR.strings.delete_after), timeText(preferences.timedMessages.ttl)) } + if (enableFeature.value == GroupFeatureEnabled.ON && enableForRole != null) { + InfoRow(generalGetString(MR.strings.feature_enabled_for), featureRoles.firstOrNull { it.first == enableForRole.value }?.second ?: generalGetString(MR.strings.feature_roles_all_members), textColor = MaterialTheme.colors.secondary) + } + } + } + KeyChangeEffect(enableFeature.value) { + if (enableFeature.value == GroupFeatureEnabled.OFF) { + onSelected(enableFeature.value, null) } } SectionTextFooter(feature.enableDescription(enableFeature.value, groupInfo.canEdit)) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIChatFeatureView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIChatFeatureView.kt index a9a4963c96..68a8eb44a4 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIChatFeatureView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIChatFeatureView.kt @@ -16,6 +16,7 @@ import chat.simplex.common.platform.onRightClick @Composable fun CIChatFeatureView( + chatInfo: ChatInfo, chatItem: ChatItem, feature: Feature, iconColor: Color, @@ -23,7 +24,7 @@ fun CIChatFeatureView( revealed: MutableState, showMenu: MutableState, ) { - val merged = if (!revealed.value) mergedFeatures(chatItem) else emptyList() + val merged = if (!revealed.value) mergedFeatures(chatItem, chatInfo) else emptyList() Box( Modifier .combinedClickable( @@ -70,7 +71,7 @@ private fun Feature.toFeatureInfo(color: Color, param: Int?, type: String): Feat ) @Composable -private fun mergedFeatures(chatItem: ChatItem): List? { +private fun mergedFeatures(chatItem: ChatItem, chatInfo: ChatInfo): List? { val m = ChatModel val fs: ArrayList = arrayListOf() val icons: MutableSet = mutableSetOf() @@ -78,7 +79,7 @@ private fun mergedFeatures(chatItem: ChatItem): List? { if (i != null) { val reversedChatItems = m.chatItems.asReversed() while (i < reversedChatItems.size) { - val f = featureInfo(reversedChatItems[i]) ?: break + val f = featureInfo(reversedChatItems[i], chatInfo) ?: break if (!icons.contains(f.icon)) { fs.add(0, f) icons.add(f.icon) @@ -90,12 +91,12 @@ private fun mergedFeatures(chatItem: ChatItem): List? { } @Composable -private fun featureInfo(ci: ChatItem): FeatureInfo? = +private fun featureInfo(ci: ChatItem, chatInfo: ChatInfo): FeatureInfo? = when (ci.content) { is CIContent.RcvChatFeature -> ci.content.feature.toFeatureInfo(ci.content.enabled.iconColor, ci.content.param, ci.content.feature.name) is CIContent.SndChatFeature -> ci.content.feature.toFeatureInfo(ci.content.enabled.iconColor, ci.content.param, ci.content.feature.name) - is CIContent.RcvGroupFeature -> ci.content.groupFeature.toFeatureInfo(ci.content.preference.enable.iconColor, ci.content.param, ci.content.groupFeature.name) - is CIContent.SndGroupFeature -> ci.content.groupFeature.toFeatureInfo(ci.content.preference.enable.iconColor, ci.content.param, ci.content.groupFeature.name) + is CIContent.RcvGroupFeature -> ci.content.groupFeature.toFeatureInfo(ci.content.preference.enabled(ci.content.memberRole_, (chatInfo as ChatInfo.Group).groupInfo.membership).iconColor, ci.content.param, ci.content.groupFeature.name) + is CIContent.SndGroupFeature -> ci.content.groupFeature.toFeatureInfo(ci.content.preference.enabled(ci.content.memberRole_, (chatInfo as ChatInfo.Group).groupInfo.membership).iconColor, ci.content.param, ci.content.groupFeature.name) else -> null } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt index 6f6deeb6a4..fe70139d91 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt @@ -442,11 +442,11 @@ fun ChatItemView( MsgContentItemDropdownMenu() } is CIContent.RcvChatFeature -> { - CIChatFeatureView(cItem, c.feature, c.enabled.iconColor, revealed = revealed, showMenu = showMenu) + CIChatFeatureView(cInfo, cItem, c.feature, c.enabled.iconColor, revealed = revealed, showMenu = showMenu) MsgContentItemDropdownMenu() } is CIContent.SndChatFeature -> { - CIChatFeatureView(cItem, c.feature, c.enabled.iconColor, revealed = revealed, showMenu = showMenu) + CIChatFeatureView(cInfo, cItem, c.feature, c.enabled.iconColor, revealed = revealed, showMenu = showMenu) MsgContentItemDropdownMenu() } is CIContent.RcvChatPreference -> { @@ -454,23 +454,23 @@ fun ChatItemView( CIFeaturePreferenceView(cItem, ct, c.feature, c.allowed, acceptFeature) } is CIContent.SndChatPreference -> { - CIChatFeatureView(cItem, c.feature, MaterialTheme.colors.secondary, icon = c.feature.icon, revealed, showMenu = showMenu) + CIChatFeatureView(cInfo, cItem, c.feature, MaterialTheme.colors.secondary, icon = c.feature.icon, revealed, showMenu = showMenu) MsgContentItemDropdownMenu() } is CIContent.RcvGroupFeature -> { - CIChatFeatureView(cItem, c.groupFeature, c.preference.enable.iconColor, revealed = revealed, showMenu = showMenu) + CIChatFeatureView(cInfo, cItem, c.groupFeature, c.preference.enabled(c.memberRole_, (cInfo as ChatInfo.Group).groupInfo.membership).iconColor, revealed = revealed, showMenu = showMenu) MsgContentItemDropdownMenu() } is CIContent.SndGroupFeature -> { - CIChatFeatureView(cItem, c.groupFeature, c.preference.enable.iconColor, revealed = revealed, showMenu = showMenu) + CIChatFeatureView(cInfo, cItem, c.groupFeature, c.preference.enabled(c.memberRole_, (cInfo as ChatInfo.Group).groupInfo.membership).iconColor, revealed = revealed, showMenu = showMenu) MsgContentItemDropdownMenu() } is CIContent.RcvChatFeatureRejected -> { - CIChatFeatureView(cItem, c.feature, Color.Red, revealed = revealed, showMenu = showMenu) + CIChatFeatureView(cInfo, cItem, c.feature, Color.Red, revealed = revealed, showMenu = showMenu) MsgContentItemDropdownMenu() } is CIContent.RcvGroupFeatureRejected -> { - CIChatFeatureView(cItem, c.groupFeature, Color.Red, revealed = revealed, showMenu = showMenu) + CIChatFeatureView(cInfo, cItem, c.groupFeature, Color.Red, revealed = revealed, showMenu = showMenu) MsgContentItemDropdownMenu() } is CIContent.SndModerated -> DeletedItem() diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Section.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Section.kt index d930a2841e..c96a277fb8 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Section.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Section.kt @@ -254,12 +254,12 @@ fun TextIconSpaced(extraPadding: Boolean = false) { } @Composable -fun InfoRow(title: String, value: String, icon: Painter? = null, iconTint: Color? = null) { +fun InfoRow(title: String, value: String, icon: Painter? = null, iconTint: Color? = null, textColor: Color = MaterialTheme.colors.onBackground) { SectionItemViewSpaceBetween { Row { val iconSize = with(LocalDensity.current) { 21.sp.toDp() } if (icon != null) Icon(icon, title, Modifier.padding(end = 8.dp).size(iconSize), tint = iconTint ?: MaterialTheme.colors.secondary) - Text(title) + Text(title, color = textColor) } Text(value, color = MaterialTheme.colors.secondary) } diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index c4d9e191c6..b0287ed9fc 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -348,6 +348,9 @@ Files and media prohibited! Only group owners can enable files and media. Send direct message to connect + SimpleX links not allowed + Files and media not allowed + Voice messages not allowed Image @@ -1532,6 +1535,7 @@ Message reactions Voice messages Files and media + SimpleX links Visible history Audio/video calls \nAvailable in v5.1 @@ -1589,6 +1593,8 @@ Prohibit messages reactions. Allow to send files and media. Prohibit sending files and media. + Allow to send SimpleX links. + Prohibit sending SimpleX links Send up to 100 last messages to new members. Do not send history to new members. Group members can send disappearing messages. @@ -1603,6 +1609,8 @@ Message reactions are prohibited in this group. Group members can send files and media. Files and media are prohibited in this group. + Group members can send SimpleX links. + SimpleX links are prohibited in this group. Up to 100 last messages are sent to new members. History is not sent to new members. Delete after @@ -1625,6 +1633,10 @@ offered %s offered %s: %2s cancelled %s + all members + admins + owners + Enabled for What\'s new From 638fd3756a8fe2fef699a936bcf016b75f2febdf Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Sat, 13 Apr 2024 14:52:39 +0400 Subject: [PATCH 36/60] core: correctly populate data for items forwarded from groups (#4025) --- src/Simplex/Chat/Store/Messages.hs | 6 +++--- tests/ChatTests/Forward.hs | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/Simplex/Chat/Store/Messages.hs b/src/Simplex/Chat/Store/Messages.hs index 2e4ee6e48f..2b31a215da 100644 --- a/src/Simplex/Chat/Store/Messages.hs +++ b/src/Simplex/Chat/Store/Messages.hs @@ -411,7 +411,7 @@ createNewChatItem_ db User {userId} chatDirection msgId_ sharedMsgId ciContent q Just CIFFContact {chatName, msgDir, contactId, chatItemId} -> (Just CIFFContact_, Just chatName, Just msgDir, contactId, Nothing, chatItemId) Just CIFFGroup {chatName, msgDir, groupId, chatItemId} -> - (Just CIFFContact_, Just chatName, Just msgDir, Nothing, groupId, chatItemId) + (Just CIFFGroup_, Just chatName, Just msgDir, Nothing, groupId, chatItemId) ciTimedRow :: Maybe CITimed -> (Maybe Int, Maybe UTCTime) ciTimedRow (Just CITimed {ttl, deleteAt}) = (Just ttl, deleteAt) @@ -1468,8 +1468,8 @@ toCIForwardedFrom :: ChatItemForwardedFromRow -> Maybe CIForwardedFrom toCIForwardedFrom (fwdFromTag, fwdFromChatName, fwdFromMsgDir, fwdFromContactId, fwdFromGroupId, fwdFromChatItemId) = case (fwdFromTag, fwdFromChatName, fwdFromMsgDir, fwdFromContactId, fwdFromGroupId, fwdFromChatItemId) of (Just CIFFUnknown_, Nothing, Nothing, Nothing, Nothing, Nothing) -> Just CIFFUnknown - (Just CIFFContact_, Just chatName, Just msgDir, contactId, Nothing, chatId) -> Just $ CIFFContact chatName msgDir contactId chatId - (Just CIFFGroup_, Just chatName, Just msgDir, Nothing, groupId, chatId) -> Just $ CIFFGroup chatName msgDir groupId chatId + (Just CIFFContact_, Just chatName, Just msgDir, contactId, Nothing, ciId) -> Just $ CIFFContact chatName msgDir contactId ciId + (Just CIFFGroup_, Just chatName, Just msgDir, Nothing, groupId, ciId) -> Just $ CIFFGroup chatName msgDir groupId ciId _ -> Nothing type GroupQuoteRow = QuoteRow :. MaybeGroupMemberRow diff --git a/tests/ChatTests/Forward.hs b/tests/ChatTests/Forward.hs index 4bd75d0e5b..8638076ab2 100644 --- a/tests/ChatTests/Forward.hs +++ b/tests/ChatTests/Forward.hs @@ -5,6 +5,7 @@ module ChatTests.Forward where import ChatClient import ChatTests.Utils +import Control.Concurrent (threadDelay) import qualified Data.ByteString.Char8 as B import System.Directory (copyFile, doesFileExist) import Test.Hspec hiding (it) @@ -158,18 +159,35 @@ testForwardGroupToGroup = bob #> "#team hey" alice <# "#team bob> hey" + threadDelay 1000000 + alice `send` "#club <- #team hi" alice <# "#club <- you #team" alice <## " hi" cath <# "#club alice> -> forwarded" cath <## " hi" + threadDelay 1000000 + alice `send` "#club <- #team hey" alice <# "#club <- #team" alice <## " hey" cath <# "#club alice> -> forwarded" cath <## " hey" + -- read chat + alice ##> "/tail #club 2" + alice <# "#club <- you #team" + alice <## " hi" + alice <# "#club <- #team" + alice <## " hey" + + cath ##> "/tail #club 2" + cath <# "#club alice> -> forwarded" + cath <## " hi" + cath <# "#club alice> -> forwarded" + cath <## " hey" + testForwardGroupToNotes :: HasCallStack => FilePath -> IO () testForwardGroupToNotes = testChat2 aliceProfile bobProfile $ From fe639eed4818a365e2a8029fc82108b5cf7c99f4 Mon Sep 17 00:00:00 2001 From: artur Date: Sat, 13 Apr 2024 13:12:21 +0200 Subject: [PATCH 37/60] docs: Add Polish translation (#4001) * docs: Add polish translation * README: Add link to polish translation * docs: Polish version of README - Fix links * docs: Add links to polish translation, fix * docs: Fix polish translation thanks to support team * docs: Add links to polish translation in english version of docs * fix links --------- Co-authored-by: Evgeny Poberezkin --- README.md | 2 +- docs/ANDROID.md | 2 +- docs/CLI.md | 2 +- docs/CONTRIBUTING.md | 2 +- docs/SERVER.md | 2 +- docs/SIMPLEX.md | 2 +- docs/TRANSLATIONS.md | 2 +- docs/WEBRTC.md | 2 +- docs/lang/cs/ANDROID.md | 2 +- docs/lang/cs/CLI.md | 2 +- docs/lang/cs/CONTRIBUTING.md | 2 +- docs/lang/cs/README.md | 2 +- docs/lang/cs/SERVER.md | 2 +- docs/lang/cs/SIMPLEX.md | 2 +- docs/lang/cs/TRANSLATIONS.md | 2 +- docs/lang/cs/WEBRTC.md | 2 +- docs/lang/fr/ANDROID.md | 2 +- docs/lang/fr/CLI.md | 2 +- docs/lang/fr/CONTRIBUTING.md | 2 +- docs/lang/fr/README.md | 2 +- docs/lang/fr/SERVER.md | 2 +- docs/lang/fr/SIMPLEX.md | 2 +- docs/lang/fr/TRANSLATIONS.md | 2 +- docs/lang/fr/WEBRTC.md | 2 +- docs/lang/pl/ANDROID.md | 58 +++++ docs/lang/pl/CLI.md | 244 ++++++++++++++++++ docs/lang/pl/CONTRIBUTING.md | 121 +++++++++ docs/lang/pl/README.md | 435 +++++++++++++++++++++++++++++++ docs/lang/pl/SERVER.md | 485 +++++++++++++++++++++++++++++++++++ docs/lang/pl/SIMPLEX.md | 102 ++++++++ docs/lang/pl/TRANSLATIONS.md | 104 ++++++++ docs/lang/pl/WEBRTC.md | 158 ++++++++++++ 32 files changed, 1731 insertions(+), 24 deletions(-) create mode 100644 docs/lang/pl/ANDROID.md create mode 100644 docs/lang/pl/CLI.md create mode 100644 docs/lang/pl/CONTRIBUTING.md create mode 100644 docs/lang/pl/README.md create mode 100644 docs/lang/pl/SERVER.md create mode 100644 docs/lang/pl/SIMPLEX.md create mode 100644 docs/lang/pl/TRANSLATIONS.md create mode 100644 docs/lang/pl/WEBRTC.md diff --git a/README.md b/README.md index 28b40d0c1b..d1ac0b676d 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![Join on Reddit](https://img.shields.io/reddit/subreddit-subscribers/SimpleXChat?style=social)](https://www.reddit.com/r/SimpleXChat) ![Follow on Mastodon](https://img.shields.io/mastodon/follow/108619463746856738?domain=https%3A%2F%2Fmastodon.social&style=social) -| 30/03/2023 | EN, [FR](/docs/lang/fr/README.md), [CZ](/docs/lang/cs/README.md) | +| 30/03/2023 | EN, [FR](/docs/lang/fr/README.md), [CZ](/docs/lang/cs/README.md), [PL](/docs/lang/pl/README.md) | SimpleX logo diff --git a/docs/ANDROID.md b/docs/ANDROID.md index fa8921c827..61f81d1a40 100644 --- a/docs/ANDROID.md +++ b/docs/ANDROID.md @@ -3,7 +3,7 @@ title: Accessing files in Android app revision: 07.02.2023 --- -| 07.02.2023 | EN, [CZ](/docs/lang/cs/ANDROID.md), [FR](/docs/lang/fr/ANDROID.md) | +| 07.02.2023 | EN, [CZ](/docs/lang/cs/ANDROID.md), [FR](/docs/lang/fr/ANDROID.md), [PL](/docs/lang/pl/ANDROID.md) | # Accessing files in Android app diff --git a/docs/CLI.md b/docs/CLI.md index baf79bb3bc..d4f799c7af 100644 --- a/docs/CLI.md +++ b/docs/CLI.md @@ -3,7 +3,7 @@ title: Terminal CLI revision: 31.01.2023 --- -| Updated 31.01.2023 | Languages: EN, [FR](/docs/lang/fr/CLI.md), [CZ](/docs/lang/cs/CLI.md) | +| Updated 31.01.2023 | Languages: EN, [FR](/docs/lang/fr/CLI.md), [CZ](/docs/lang/cs/CLI.md), [PL](/docs/lang/pl/CLI.md) | # SimpleX Chat terminal (console) app for Linux/MacOS/Windows diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index aaf452af00..bc013cd7eb 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -3,7 +3,7 @@ title: Contributing guide revision: 31.01.2023 --- -| Updated 31.01.2023 | Languages: EN, [FR](/docs/lang/fr/CONTRIBUTING.md), [CZ](/docs/lang/cs/CONTRIBUTING.md) | +| Updated 31.01.2023 | Languages: EN, [FR](/docs/lang/fr/CONTRIBUTING.md), [CZ](/docs/lang/cs/CONTRIBUTING.md), [PL](/docs/lang/pl/CONTRIBUTING.md) | # Contributing guide diff --git a/docs/SERVER.md b/docs/SERVER.md index e476c7250c..c29a805452 100644 --- a/docs/SERVER.md +++ b/docs/SERVER.md @@ -3,7 +3,7 @@ title: Hosting your own SMP Server revision: 31.07.2023 --- -| Updated 05.06.2023 | Languages: EN, [FR](/docs/lang/fr/SERVER.md), [CZ](/docs/lang/cs/SERVER.md) | +| Updated 05.06.2023 | Languages: EN, [FR](/docs/lang/fr/SERVER.md), [CZ](/docs/lang/cs/SERVER.md), [PL](/docs/lang/pl/SERVER.md) | # Hosting your own SMP Server diff --git a/docs/SIMPLEX.md b/docs/SIMPLEX.md index 7ed01efa3c..ec25afaf88 100644 --- a/docs/SIMPLEX.md +++ b/docs/SIMPLEX.md @@ -3,7 +3,7 @@ title: SimpleX platform revision: 07.02.2023 --- -| Updated 07.02.2023 | Languages: EN, [FR](/docs/lang/fr/SIMPLEX.md), [CZ](/docs/lang/cs/SIMPLEX.md) | +| Updated 07.02.2023 | Languages: EN, [FR](/docs/lang/fr/SIMPLEX.md), [CZ](/docs/lang/cs/SIMPLEX.md), [PL](/docs/lang/pl/SIMPLEX.md) | # SimpleX platform - motivation and comparison ## Problems diff --git a/docs/TRANSLATIONS.md b/docs/TRANSLATIONS.md index 85b24b368e..d5c1cdef0b 100644 --- a/docs/TRANSLATIONS.md +++ b/docs/TRANSLATIONS.md @@ -3,7 +3,7 @@ title: Contributing translations to SimpleX Chat revision: 19.03.2023 --- -| 19.03.2023 | EN, [CZ](/docs/lang/cs/TRANSLATIONS.md), [FR](/docs/lang/fr/TRANSLATIONS.md) | +| 19.03.2023 | EN, [CZ](/docs/lang/cs/TRANSLATIONS.md), [FR](/docs/lang/fr/TRANSLATIONS.md), [PL](/docs/lang/pl/TRANSLATIONS.md) | # Contributing translations to SimpleX Chat diff --git a/docs/WEBRTC.md b/docs/WEBRTC.md index 7978d21ec7..8ce31bf959 100644 --- a/docs/WEBRTC.md +++ b/docs/WEBRTC.md @@ -3,7 +3,7 @@ title: Using custom WebRTC ICE servers in SimpleX Chat revision: 31.01.2023 --- -| Updated 31.01.2023 | Languages: EN, [FR](/docs/lang/fr/WEBRTC.md), [CZ](/docs/lang/cs/WEBRTC.md) | +| Updated 31.01.2023 | Languages: EN, [FR](/docs/lang/fr/WEBRTC.md), [CZ](/docs/lang/cs/WEBRTC.md), [PL](/docs/lang/pl/WEBRTC.md) | # Using custom WebRTC ICE servers in SimpleX Chat diff --git a/docs/lang/cs/ANDROID.md b/docs/lang/cs/ANDROID.md index 4edfc3018c..3c401f1d1b 100644 --- a/docs/lang/cs/ANDROID.md +++ b/docs/lang/cs/ANDROID.md @@ -2,7 +2,7 @@ title: Přístup k souborům v aplikaci Android revision: 07.02.2023 --- -| Aktualizováno 07.02.2023 | Jazyky: CZ, [EN](/docs/ANDROID.md) | +| Aktualizováno 07.02.2023 | Jazyky: CZ, [EN](/docs/ANDROID.md), [PL](/docs/lang/pl/ANDROID.md) | # Přístup k souborům v aplikaci Android diff --git a/docs/lang/cs/CLI.md b/docs/lang/cs/CLI.md index aa5a2ba281..9cbce8e6fe 100644 --- a/docs/lang/cs/CLI.md +++ b/docs/lang/cs/CLI.md @@ -2,7 +2,7 @@ title: SimpleX Chat terminálová revision: 31.01.2023 --- -| Aktualizováno 31.01.2023 | Jazyky: CZ, [EN](/docs/CLI.md), [FR](/docs/lang/fr/CLI.md) | +| Aktualizováno 31.01.2023 | Jazyky: CZ, [EN](/docs/CLI.md), [FR](/docs/lang/fr/CLI.md), [PL](/docs/lang/pl/CLI.md) | # SimpleX Chat terminálová (konzolová) aplikace pro Linux/MacOS/Windows diff --git a/docs/lang/cs/CONTRIBUTING.md b/docs/lang/cs/CONTRIBUTING.md index 26c746e7d2..17574bed4a 100644 --- a/docs/lang/cs/CONTRIBUTING.md +++ b/docs/lang/cs/CONTRIBUTING.md @@ -2,7 +2,7 @@ title: Průvodce přispíváním revision: 31.01.2023 --- -| Aktualizováno 31.01.2023 | Jazyky: CZ, [EN](/docs/CONTRIBUTING.md), [FR](/docs/lang/fr/CONTRIBUTING.md) | +| Aktualizováno 31.01.2023 | Jazyky: CZ, [EN](/docs/CONTRIBUTING.md), [FR](/docs/lang/fr/CONTRIBUTING.md), [PL](/docs/lang/pl/CONTRIBUTING.md) | # Průvodce přispíváním diff --git a/docs/lang/cs/README.md b/docs/lang/cs/README.md index 9423cc96b8..764499cdae 100644 --- a/docs/lang/cs/README.md +++ b/docs/lang/cs/README.md @@ -1,4 +1,4 @@ -| Aktualizováno 07.02.2023 | Jazyky: CZ, [EN](/docs/README.md), [FR](/docs/lang/fr/README.md) | +| Aktualizováno 07.02.2023 | Jazyky: CZ, [EN](/docs/README.md), [FR](/docs/lang/fr/README.md), [PL](/docs/lang/pl/README.md) | SimpleX logo diff --git a/docs/lang/cs/SERVER.md b/docs/lang/cs/SERVER.md index f8258909bc..3dd2f3780c 100644 --- a/docs/lang/cs/SERVER.md +++ b/docs/lang/cs/SERVER.md @@ -2,7 +2,7 @@ title: Hostování vlastního serveru SMP revision: 05.06.2023 --- -| Aktualizováno 05.06.2023 | Jazyky: CZ, [EN](/docs/SERVER.md), [FR](/docs/lang/fr/SERVER.md) | +| Aktualizováno 05.06.2023 | Jazyky: CZ, [EN](/docs/SERVER.md), [FR](/docs/lang/fr/SERVER.md), [PL](/docs/lang/pl/SERVER.md) | # Hostování vlastního serveru SMP diff --git a/docs/lang/cs/SIMPLEX.md b/docs/lang/cs/SIMPLEX.md index 33d45cec65..0d32fd06d9 100644 --- a/docs/lang/cs/SIMPLEX.md +++ b/docs/lang/cs/SIMPLEX.md @@ -2,7 +2,7 @@ title: Platforma SimpleX revision: 07.02.2023 --- -| Aktualizováno 07.02.2023 | Jazyky: CZ, [EN](/docs/SIMPLEX.md), [FR](/docs/lang/fr/SIMPLEX.md) | +| Aktualizováno 07.02.2023 | Jazyky: CZ, [EN](/docs/SIMPLEX.md), [FR](/docs/lang/fr/SIMPLEX.md), [PL](/docs/lang/pl/SIMPLEX.md) | # Platforma SimpleX - motivace a srovnání diff --git a/docs/lang/cs/TRANSLATIONS.md b/docs/lang/cs/TRANSLATIONS.md index b260bd12a6..c22979bdfc 100644 --- a/docs/lang/cs/TRANSLATIONS.md +++ b/docs/lang/cs/TRANSLATIONS.md @@ -2,7 +2,7 @@ title: Přispívání překladů do SimpleX Chat revision: 07.02.2023 --- -| Aktualizováno 07.02.2023 | Jazyky: CZ, [EN](/docs/TRANSLATIONS.md) | +| Aktualizováno 07.02.2023 | Jazyky: CZ, [EN](/docs/TRANSLATIONS.md), [PL](/docs/lang/pl/TRANSLATIONS.md) | # Přispívání překladů do SimpleX Chat diff --git a/docs/lang/cs/WEBRTC.md b/docs/lang/cs/WEBRTC.md index 77df920255..df63c3205e 100644 --- a/docs/lang/cs/WEBRTC.md +++ b/docs/lang/cs/WEBRTC.md @@ -2,7 +2,7 @@ title: Použití vlastních serverů WebRTC ICE v SimpleX Chat revision: 31.01.2023 --- -| Aktualizováno 31.01.2023 | Jazyky: CZ, [EN](/docs/WEBRTC.md), [FR](/docs/lang/fr/WEBRTC.md) | +| Aktualizováno 31.01.2023 | Jazyky: CZ, [EN](/docs/WEBRTC.md), [FR](/docs/lang/fr/WEBRTC.md), [PL](/docs/lang/pl/WEBRTC.md) | # Použití vlastních serverů WebRTC ICE v SimpleX Chat diff --git a/docs/lang/fr/ANDROID.md b/docs/lang/fr/ANDROID.md index 0f710542a8..1d100c5c04 100644 --- a/docs/lang/fr/ANDROID.md +++ b/docs/lang/fr/ANDROID.md @@ -2,7 +2,7 @@ title: Accès aux fichiers dans l'application Android revision: 07.02.2023 --- -| 07.02.2023 | FR, [EN](/docs/ANDROID.md), [CZ](/docs/lang/cs/ANDROID.md) | +| 07.02.2023 | FR, [EN](/docs/ANDROID.md), [CZ](/docs/lang/cs/ANDROID.md), [PL](/docs/lang/pl/ANDROID.md) | # Accès aux fichiers dans l'application Android diff --git a/docs/lang/fr/CLI.md b/docs/lang/fr/CLI.md index 6fe9c86d75..bb596491f1 100644 --- a/docs/lang/fr/CLI.md +++ b/docs/lang/fr/CLI.md @@ -2,7 +2,7 @@ title: Application de terminal revision: 31.01.2023 --- -| 31.01.2023 | FR, [EN](/docs/CLI.md), [CZ](/docs/lang/cs/CLI.md) | +| 31.01.2023 | FR, [EN](/docs/CLI.md), [CZ](/docs/lang/cs/CLI.md), [PL](/docs/lang/pl/CLI.md) | # Application de terminal (console) SimpleX Chat pour Linux/MacOS/Windows diff --git a/docs/lang/fr/CONTRIBUTING.md b/docs/lang/fr/CONTRIBUTING.md index 81515b09b2..ea6dcb5ca3 100644 --- a/docs/lang/fr/CONTRIBUTING.md +++ b/docs/lang/fr/CONTRIBUTING.md @@ -2,7 +2,7 @@ title: Guide pour contribuer revision: 31.01.2023 --- -| 31.01.2023 | FR, [EN](/docs/CONTRIBUTING.md), [CZ](/docs/lang/cs/CONTRIBUTING.md) | +| 31.01.2023 | FR, [EN](/docs/CONTRIBUTING.md), [CZ](/docs/lang/cs/CONTRIBUTING.md), [PL](/docs/lang/pl/CONTRIBUTING.md) | # Guide pour contribuer diff --git a/docs/lang/fr/README.md b/docs/lang/fr/README.md index 2f11fe9539..1a69630e03 100644 --- a/docs/lang/fr/README.md +++ b/docs/lang/fr/README.md @@ -4,7 +4,7 @@ [![Join on Reddit](https://img.shields.io/reddit/subreddit-subscribers/SimpleXChat?style=social)](https://www.reddit.com/r/SimpleXChat) [![Follow on Mastodon](https://img.shields.io/mastodon/follow/108619463746856738?domain=https%3A%2F%2Fmastodon.social&style=social)](https://mastodon.social/@simplex) -| 30/03/2023 | FR, [EN](/README.md), [CZ](/docs/lang/cs/README.md) | +| 30/03/2023 | FR, [EN](/README.md), [CZ](/docs/lang/cs/README.md), [PL](/docs/lang/pl/README.md) | SimpleX logo diff --git a/docs/lang/fr/SERVER.md b/docs/lang/fr/SERVER.md index ac9cec7eb9..7bbe315273 100644 --- a/docs/lang/fr/SERVER.md +++ b/docs/lang/fr/SERVER.md @@ -2,7 +2,7 @@ title: Héberger votre propre serveur SMP revision: 05.06.2023 --- -| 05.06.2023 | FR, [EN](/docs/SERVER.md), [CZ](/docs/lang/cs/SERVER.md) | +| 05.06.2023 | FR, [EN](/docs/SERVER.md), [CZ](/docs/lang/cs/SERVER.md), [PL](/docs/lang/pl/SERVER.md) | # Héberger votre propre serveur SMP diff --git a/docs/lang/fr/SIMPLEX.md b/docs/lang/fr/SIMPLEX.md index a7134205d0..aacc645054 100644 --- a/docs/lang/fr/SIMPLEX.md +++ b/docs/lang/fr/SIMPLEX.md @@ -2,7 +2,7 @@ title: Plateforme SimpleX revision: 07.02.2023 --- -| 07.02.2023 | FR, [EN](/docs/SIMPLEX.md), [CZ](/docs/lang/cs/SIMPLEX.md) | +| 07.02.2023 | FR, [EN](/docs/SIMPLEX.md), [CZ](/docs/lang/cs/SIMPLEX.md), [PL](/docs/lang/pl/SIMPLEX.md) | # Plateforme SimpleX - motivation et comparaison diff --git a/docs/lang/fr/TRANSLATIONS.md b/docs/lang/fr/TRANSLATIONS.md index e85a4a8513..1e216900e7 100644 --- a/docs/lang/fr/TRANSLATIONS.md +++ b/docs/lang/fr/TRANSLATIONS.md @@ -2,7 +2,7 @@ title: Contribuer aux traductions de SimpleX Chat revision: 19.03.2023 --- -| 19.03.2023 | FR, [EN](/docs/TRANSLATIONS.md), [CZ](/docs/lang/cs/TRANSLATIONS.md) | +| 19.03.2023 | FR, [EN](/docs/TRANSLATIONS.md), [CZ](/docs/lang/cs/TRANSLATIONS.md), [PL](/docs/lang/pl/TRANSLATIONS.md) | # Contribuer aux traductions de SimpleX Chat diff --git a/docs/lang/fr/WEBRTC.md b/docs/lang/fr/WEBRTC.md index 47296274b3..381677b3f6 100644 --- a/docs/lang/fr/WEBRTC.md +++ b/docs/lang/fr/WEBRTC.md @@ -2,7 +2,7 @@ title: Utilisation de serveurs WebRTC ICE personnalisés dans SimpleX Chat revision: 31.01.2023 --- -| 31.01.2023 | FR, [EN](/docs/WEBRTC.md), [CZ](/docs/lang/cs/WEBRTC.md) | +| 31.01.2023 | FR, [EN](/docs/WEBRTC.md), [CZ](/docs/lang/cs/WEBRTC.md), [PL](/docs/lang/pl/WEBRTC.md) | # Utilisation de serveurs WebRTC ICE personnalisés dans SimpleX Chat diff --git a/docs/lang/pl/ANDROID.md b/docs/lang/pl/ANDROID.md new file mode 100644 index 0000000000..ce422ab3b5 --- /dev/null +++ b/docs/lang/pl/ANDROID.md @@ -0,0 +1,58 @@ +--- +title: Dostęp do plików w aplikacji Androidowej +revision: 07.02.2023 +--- + +| 07.02.2023 | PL, [EN](/docs/ANDROID.md), [CZ](/docs/lang/cs/ANDROID.md), [FR](/docs/lang/fr/ANDROID.md) | + +# Dostęp do plików w aplikacji Androidowej + +SimpleX wykorzystuje bazy danych i przechowuje ustawienia w prywatnym katalogu w systemie Android. Katalog ten zawiera: + +- bazy danych +- wysłane i odebrane pliki +- pliki tymczasowe, które zostaną usunięte, gdy nie są już potrzebne +- ustawienia użytkownika. + +Jeśli chcesz zobaczyć, co jest przechowywane w katalogu SimpleX, musisz mieć: + +- System operacyjny oparty na systemie Unix (lub [MinGW](https://www.mingw-w64.org/downloads/) na Windowsie) +- narzędzie ADB (Android Debug Bridge) zainstalowane na komputerze ([pobierz je tutaj](https://developer.android.com/studio/releases/platform-tools) i zainstaluj) +- urządzenie podłączone przez USB lub Wi-Fi do komputera. + +## Proces: + +- otwórz SimpleX, przejdź do `Hasło do bazy danych i eksport`, włącz `Kopia zapasowa danych aplikacji`. To sprawi, że następne kroki będą działać. +- _opcjonalnie_: jeśli chcesz wyświetlić zawartość bazy danych, zmień hasło bazy danych z losowego na swoje. Aby to zrobić, zatrzymaj czat na ekranie `Hasło do bazy danych i eksport`, otwórz `Hasło do bazy danych`, wprowadź nowe hasło i potwierdź je, a następnie zatwierdź. Nie zapomnij go, w przeciwnym razie utracisz wszystkie dane w przypadku, gdy zostaniesz ponownie poproszony o hasło. +- otwórz emulator terminala (Windows CMD/Powershell nie zadziała) i zmień katalog na ten, którego chcesz użyć do przechowywania kopii zapasowej: + +```bash +cd /tmp # to tylko przykład +``` +Następne uruchom: +```bash +adb -d backup -f chat.ab -noapk chat.simplex.app && +tail -n +5 chat.ab > chat.dat && +printf "\x1f\x8b\x08\x00\x00\x00\x00\x00" | cat - chat.dat > chat.gz && +tar -xvzf chat.gz +``` + +Teraz odblokuj urządzenie i potwierdź operację tworzenia kopii zapasowej bez użycia hasła do szyfrowania, w przeciwnym razie polecenia nie będą działać. + +Po tym kopia zapasowa powinna zostać zrobiona. Jeśli pojawi się błąd `tar: Error is not recoverable: exiting now`, ale wcześniej pojawiło się kilka nazw plików, nie martw się, wszystko jest w porządku. + +Teraz zapisane pliki będą w `./apps/chat.simplex.app/`. + +Pamiętaj, że jeśli korzystasz z nowej wersji SimpleX, bazy danych będą zaszyfrowane i nie będziesz w stanie przeglądać ich zawartości bez użycia aplikacji `sqlcipher` oraz gdy nie znasz hasła deszyfrującego (musisz najpierw zmienić je na swoje z losowo wygenerowanego w aplikacji). + +## Odszyfrowywanie baz danych + +Aby wyświetlić dane bazy danych, należy je najpierw odszyfrować. Zainstaluj `sqlcipher` używając ulubionego menedżera pakietów i uruchom następujące polecenia w katalogu z bazami danych: +```bash +sqlcipher files_chat.db +pragma key="youDecryptionPassphrase"; +# Upewnij się, że to działa +select * from users; +``` + +Jeśli zobaczysz `Parse error: no such table: users`, upewnij się, że wprowadzono prawidłowe hasło i zostało ono zmienione z losowego w aplikacji na Androida (jeśli oczywiście pobrano tę bazę danych z urządzenia z Androidem). diff --git a/docs/lang/pl/CLI.md b/docs/lang/pl/CLI.md new file mode 100644 index 0000000000..585eca3e31 --- /dev/null +++ b/docs/lang/pl/CLI.md @@ -0,0 +1,244 @@ +--- +title: Aplikacja konsolowa +revision: 31.01.2023 +--- + +| Updated 31.01.2023 | Języki: PL, [EN](/docs/CLI.md), [FR](/docs/lang/fr/CLI.md), [CZ](/docs/lang/cs/CLI.md) | + +# Terminalowa (konsolowa) aplikacja SimpleX Chat dla systemów Linux/MacOS/Windows + +## Spis treści + +- [Funkcje czatu w terminalu](#funkcje-czatu-w-terminalu) +- [Instalacja](#🚀-instalacja) + - [Pobieranie klienta czatu](#pobieranie-klienta-czatu) + - [Linux i MacOS](#linux-i-macos) + - [Windows](#windows) + - [Budowanie z kodu źródłowego](#budowanie-z-kodu-źródłowego) + - [Używając dockera](#using-docker) + - [Używając Haskella na dowolnym systemie operacyjnym](#używając-haskella-na-dowolnym-systemie-operacyjnym) +- [Używanie](#używanie) + - [Używanie klienta czatu](#używanie-klienta-czatu) + - [Dostęp do serwerów wiadomości przez Tor](#dostęp-do-serwerów-wiadomości-przez-tor) + - [Jak używać czatu SimpleX](#jak-używać-czatu-simplex) + - [Grupy](#grupy) + - [Wysyłanie plików](#wysyłanie-plików) + - [Adresy kontaktowe użytkowników](#adresy-kontaktowe-użytkowników) + +## Funkcje czatu w terminalu + +- Konwersacje 1 na 1 z wieloma osobami w tym samym oknie terminala. +- Wiadomości grupowe. +- Wysyłanie plików do kontaktów i grup. +- Adresy kontaktowe użytkowników - nawiązywanie połączeń za pomocą linków kontaktowych wielokrotnego użytku. +- Wiadomości przechowywane w lokalnej bazie danych SQLite. +- Automatycznie wypełniana nazwa odbiorcy - po nawiązaniu połączenia wystarczy po prostu napisać wiadomość, aby odpowiedzieć nadawcy. +- Dostępne wstępnie skonfigurowane przykładowe serwery SMP - można też użyć [własnego serwera](https://github.com/simplex-chat/simplexmq#using-smp-server-and-smp-agent). +- Żadna globalna tożsamość ani nazwy użytkowników nie są widoczne dla serwera (serwerów), co zapewnia pełną prywatność kontaktów i rozmów. +- Dwie warstwy szyfrowania E2E (double-ratchet dla połączeń dwukierunkowych, przy użyciu negocjacji klucza X3DH z efemerycznymi kluczami Curve448 i NaCl crypto_box dla kolejek SMP, przy użyciu kluczy Curve25519) oraz przekazywanie kluczy odbiorców za pomocą komunikacji out-of-band (zobacz [Jak używać czatu SimpleX](#how-to-use-simplex-chat)). +- Weryfikacja integralności wiadomości (poprzez uwzględnienie hashu poprzedniej wiadomości). +- Uwierzytelnianie każdego polecenia/wiadomości przez serwery SMP za pomocą automatycznie generowanych kluczy Ed448. +- Szyfrowanie transmisji przy użyciu TLS 1.3. +- Dodatkowe szyfrowanie wiadomości z serwera SMP do odbiorcy aby utrudnić możliwość korelacji ruchu. + +Klucze publiczne biorące udział podczas wymiany kluczy nie są używane jako tożsamość, są one generowane losowo dla każdego kontaktu. + +Aby uzyskać szczegółowe informacje techniczne zobacz [używane metody szyfrowania](https://github.com/simplex-chat/simplexmq/blob/master/protocol/overview-tjr.md#encryption-primitives-used). + + + +## 🚀 Instalacja + +### Pobieranie klienta czatu + +#### Linux i MacOS + +By **zainstalować** lub **zaktualizować** `simplex-chat`, należy uruchomić skrypt instalacyjny. Aby to zrobić, użyj następującego polecenia cURL lub Wget: + +```sh +curl -o- https://raw.githubusercontent.com/simplex-chat/simplex-chat/stable/install.sh | bash +``` + +```sh +wget -qO- https://raw.githubusercontent.com/simplex-chat/simplex-chat/stable/install.sh | bash +``` + +Po pobraniu klienta czatu można go uruchomić za pomocą polecenia `simplex-chat`. + +Możesz również ręcznie pobrać plik binarny czatu dla swojego systemu z [najnowszej stabilnej wersji](https://github.com/simplex-chat/simplex-chat/releases) i uczynić go uruchamialnym w sposób pokazany poniżej. + +```sh +chmod +x +mv ~/.local/bin/simplex-chat +``` + +(lub użyj innej preferowanej lokalizacji w `PATH`). + +Na MacOS musisz również [zezwolić Gatekeeperowi, by go uruchomić](https://support.apple.com/en-us/HT202491). + +#### Windows + +```sh +move %APPDATA%/local/bin/simplex-chat.exe +``` + +### Budowanie z kodu źródłowego + +> **Uwaga:** aby zbudować aplikację użyj [wersji stabilnej](https://github.com/simplex-chat/simplex-chat/tree/stable). + +#### Używając Dockera + +Na Linuxie, aby zbudować plik wykonywalny możesz użyć [docker build z customowym outputem](https://docs.docker.com/engine/reference/commandline/build/#custom-build-outputs): + +```shell +git clone git@github.com:simplex-chat/simplex-chat.git +cd simplex-chat +git checkout stable +DOCKER_BUILDKIT=1 docker build --output ~/.local/bin . +``` + +> **Uwaga:** Jeśli napotkasz błąd `` version `GLIBC_2.28' not found ``, przebuduj go z obrazem bazowym `haskell:8.10.7-stretch` (zmień go w Twoim lokalnym pliku [Dockerfile](Dockerfile)). + +#### Używając Haskella na dowolnym systemie operacyjnym + +1. Zainstaluj [Haskell GHCup](https://www.haskell.org/ghcup/), GHC 9.6.3 i cabal 3.10.1.0: + +```shell +curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh +``` + +Możesz użyć polecenia `ghcup tui`, aby sprawdzić lub dodać wersje GHC i cabal. + +2. Sklonuj kod źródłowy: + +```shell +git clone git@github.com:simplex-chat/simplex-chat.git +cd simplex-chat +git checkout stable +# lub aby zbudować konkretną wersję: +# git checkout v5.3.0-beta.8 +``` + +`master` to branch deweloperski, może on zawierać niestabilny kod. + +3. Przygotowywanie systemu: + +Na Linuxie: + +```shell +apt-get update && apt-get install -y build-essential libgmp3-dev zlib1g-dev +cp scripts/cabal.project.local.linux cabal.project.local +``` + +Na Macu: + +``` +brew install openssl@1.1 +cp scripts/cabal.project.local.mac cabal.project.local +``` + +Może być konieczna zmiana cabal.project.local, aby wskazać poprawną lokalizację openssl + +4. Budowanie aplikacji: + +```shell +cabal update +cabal install simplex-chat +``` + +## Używanie + +### Używanie klienta czatu + +Aby uruchomić klienta, uruchom w terminalu polecenie `simplex-chat`. + +Domyślnie katalog z danymi aplikacji jest tworzony w katalogu domowym (`~/.simplex`, lub `%APPDATA%/simplex` na Windowsie), a dwa pliki danych SQLite `simplex_v1_chat.db` i `simplex_v1_agent.db` są w nim zainicjowane. + +Aby wskazać inny prefiks ścieżki dla plików bazy danych, należy użyć polecenia `-d`: + +```shell +$ simplex-chat -d alice +``` + +Uruchomienie powyższego przykładu spowoduje utworzenie plików baz danych `alice_v1_chat.db` i `alice_v1_agent.db` w bieżącym katalogu. + +Trzy domyślne serwery SMP są hostowane na Linode - są one [wstępnie skonfigurowane w aplikacji](https://github.com/simplex-chat/simplex-chat/blob/stable/src/Simplex/Chat/Options.hs#L42). + +Jeśli posiadasz własny serwer(y) SMP, możesz skonfigurować klienta poprzez opcję `-s`: + +```shell +$ simplex-chat -s smp://LcJUMfVhwD8yxjAiSaDzzGF3-kLG4Uh0Fl_ZIjrRwjI=@smp.example.com +``` + +Ciąg zakodowany w Base64url poprzedzający adres serwera to odcisk palca certyfikatu offline serwera, który jest weryfikowany przez klienta podczas handshake'a TLS. + +Po konfiguracji innego serwera w swoim kliencie nadal możesz rozmawiać z ludźmi używającymi domyślnego lub dowolnego innego serwera - ustawienie to wpływa tylko na lokalizację kolejki wiadomości podczas nawiązywania połączenia (a kolejka odpowiedzi może znajdować się na zupełnie innym serwerze, zgodnie z ustawieniami klienta rozmówcy). + +Polecenie `simplex-chat -h` pokazuje wszystkie dostępne opcje. + +### Dostęp do serwerów wiadomości przez Tor + +Zainstaluj Tor i uruchom go jako proxy SOCKS5 na porcie 9050, przykład dla MacOS: + +``` +brew install tor +brew services start tor +``` + +Użyj opcji `-x`, aby uzyskać dostęp do serwerów przez Tor: + +``` +simplex-chat -x +``` + +Możesz także użyć opcji `--socks-proxy=ipv4:port` lub `--socks-proxy=:port`, aby skonfigurować adres i port serwera proxy SOCKS5, przykładowo jeśli uruchamiasz go na innym hoście lub porcie. + +### Jak używać czatu SimpleX + +Po uruchomieniu czatu zostaniesz poproszony o podanie swojej "nazwy wyświetlanej" oraz opcjonalnej "pełnej nazwy" w celu utworzenia lokalnego profilu czatu. Nazwa wyświetlana jest aliasem, za pomocą którego kontakty mogą się do ciebie odnosić - nie jest ona unikalna i nie służy jako globalna tożsamość. Jeśli kilka kontaktów wybrało tę samą nazwę wyświetlaną, klient czatu dodaje numeryczną końcówkę (sufiks) do ich lokalnej nazwy wyświetlanej. + +Poniższy schemat przedstawia sposób łączenia się z kontaktem i wysyłania do niego wiadomości: + +

+ +
+ +Gdy już skonfigurujesz swój profil lokalny, wpisz `/c` (oznaczające `/connect`), aby utworzyć nowe połączenie i wygenerować zaproszenie. Wyślij to zaproszenie do swojego kontaktu za pośrednictwem dowolnego innego kanału komunikacji. + +Możesz utworzyć wiele zaproszeń, kilkukrotnie wpisując `/connect` i wysłać te zaproszenia do kontaktów, z którymi chcesz się połączyć. + +Zaproszenie może być użyte tylko jeden raz i nawet jeśli zostanie ono przechwycone, atakujący nie będzie mógł go użyć do wysłania do Ciebie wiadomości za pośrednictwem tej kolejki, gdy Twój kontakt potwierdzi, że połączenie zostało nawiązane. Zobacz omówienie protokołu agenta dla [formatu zaproszeń](https://github.com/simplex-chat/simplexmq/blob/master/protocol/agent-protocol.md#connection-request). + +Kontakt, który otrzymał zaproszenie powinien wpisać `/c `, aby zaakceptować połączenie. Spowoduje to nawiązanie połączenia, a obie strony zostaną o tym powiadomione. + +Następnie można użyć komendy `@ ` do wysłania wiadomości. Możesz także po prostu zacząć pisać wiadomość, aby wysłać ją do kontaktu, który był ostatni. + +Użyj `/help` na czacie, by uzyskać listę pozostałych dostępnych komend. + +### Grupy + +Aby utworzyć grupę, użyj `/g `, a następnie dodaj do niej kontakty za pomocą `/a `. Możesz wysyłać wiadomości do grupy wpisując `# `. Użyj `/help groups`, by uzyskać listę pozostałych dostępnych komend. + +![simplex-chat](../images/groups.gif) + +> **Uwaga**: informacje o grupach nie są przechowywane na żadnym serwerze, są one zapisywane jako lista członków w bazie danych aplikacji klientów, do których będą wysyłane wiadomości. + +### Wysyłanie plików + +Możesz wysłać plik do kontaktu za pomocą `/f @ <ścieżka_do_pliku>` - odbiorca będzie musiał go zaakceptować przed rozpoczęciem wysyłania. Użyj `/help files`, by uzyskać listę pozostałych dostępnych komend. + +![simplex-chat](../images/files.gif) + +Możesz wysyłać pliki do grupy za pomocą `/f # <ścieżka_do_pliku>`. + +### Adresy kontaktowe użytkowników + +Alternatywą dla jednorazowych linków zapraszających są adresy długoterminowe. Możesz je utworzyć za pomocą `/ad` (oznaczające `/address`). Utworzony adres może być następnie udostępniony za pośrednictwem dowolnego innego kanału komunikacji i użyty przez innych użytkowników jako link do prośby o kontakt używając `/c `. + +Prośby o kontakt możesz przyjąć za pomocą komendy `/ac ` oraz odrzucić za pomocą `/rc `. + +"Długoterminowy" adres użytkownika jest długoterminowy w tym sensie, że jest to link wielokrotnego użytku - może być używany do momentu usunięcia go przez użytkownika. Po usunięciu wszystkie nawiązane połączenia pozostaną aktywne (w przeciwieństwie do tego, jak działa to w przypadku poczty e-mail, gdy zmiana adresu powoduje, że ludzie nie mogą już wysyłać do siebie wiadomości). + +Użyj `/help address`, by uzyskać listę pozostałych dostępnych komend. + +![simplex-chat](../images/user-addresses.gif) diff --git a/docs/lang/pl/CONTRIBUTING.md b/docs/lang/pl/CONTRIBUTING.md new file mode 100644 index 0000000000..4f62217479 --- /dev/null +++ b/docs/lang/pl/CONTRIBUTING.md @@ -0,0 +1,121 @@ +--- +title: Poradnik wspierania projektu +revision: 31.01.2023 +--- + +| Updated 31.01.2023 | Języki: PL, [EN](/docs/CONTRIBUTING.md) [FR](/docs/lang/fr/CONTRIBUTING.md), [CZ](/docs/lang/cs/CONTRIBUTING.md) | + +# Poradnik wspierania projektu + +## Kompilacja z włączonym szyfrowaniem SQLCipher + +Dodaj `cabal.project.local` do katalogu głównego projektu z lokalizacją nagłówków i bibliotek OpenSSL oraz flagą ustawiającą tryb szyfrowania: + +``` +cp scripts/cabal.project.local.mac cabal.project.local +# lub +# cp scripts/cabal.project.local.linux cabal.project.local +``` + +## OpenSSL na MacOS + +MacOS ma domyślnie zainstalowany LibreSSL, OpenSSL musi być zainstalowany, aby skompilować SimpleX z kodu źródłowego. + +OpenSSL można zainstalować za pomocą `brew install openssl@1.1` + +Będziesz musiał dodać `/opt/homebrew/opt/openssl@1.1/bin` do swojego PATH, aby wszystko działało poprawnie + + +## Branche projektu + +**W repo simplex-chat** + + +- `stable` - stabilne wydanie aplikacji, może być używane do aktualizacji poprzedniego stabilnego wydania (GHC 9.6.3). + +- `stable-android` - używane do budowania stabilnej biblioteki rdzenia Androida z Nix (GHC 8.10.7) - tylko dla Androida armv7a. + +- `stable-ios` - używane do budowania stabilnej biblioteki rdzenia iOS z Nix (GHC 8.10.7) - ten branch powinien być taki sam jak `stable-android` z wyjątkiem plików konfiguracyjnych Nix. Przestarzałe. + +- `master` - branch dla wydań wersji beta (GHC 9.6.3). + +- `master-ghc8107` - branch dla wydań wersji beta (GHC 8.10.7). Przestarzałe. + +- `master-android` - używane do budowania biblioteki rdzenia Androida w wersji beta z Nix (GHC 8.10.7) - tylko dla Androida armv7a. + +- `master-ios` - służy do budowania biblioteki rdzenia beta iOS z Nix (GHC 8.10.7). Przestarzałe. + +- `windows-ghc8107` - branch do kompilacji głównej biblioteki Windows (GHC 8.10.7). Przestarzałe? + +Branche `master-ios` i `windows-ghc8107` powinny być takie same jak `master-ghc8107` z wyjątkiem plików konfiguracyjnych Nix. + +**W repo simplexmq** + +- `master` - używa GHC 9.6.3, jego commit powinien być użyty w branchu `master` repo simplex-chat. + +- `master-ghc8107` - jego commit powinien być użyty w branchu `master-android` (i `master-ios`) repo simplex-chat. Przestarzałe. + +## Development i proces wydawania + +1. Tworzenie PR-ów do brancha `master` _tylko_ dla repozytoriów simplex-chat i simplexmq. + +2. Jeśli repozytorium simplexmq zostało zmienione, aby skompilować mobilne biblioteki rdzenia należy połączyć jego branch `master` z branchem `master-ghc8107`. + +3. Aby skompilować podstawowe biblioteki dla Androida, iOS i Windows: + +- scal branch `master` z branchem `master-android`. + +- Zaktualizuj kod, aby był kompatybilny z GHC 8.10.7 (patrz niżej). + +- push do GitHuba. + +4. Wszystkie biblioteki powinny być budowane z brancha `master`, Android armv7a - z brancha `master-android`. + +5. Aby zbudować aplikacje Desktop i CLI, należy utworzyć tag w branchu `master`, pliki APK powinny być dołączone do wydania. + +6. Po publicznym wydaniu w App Store i Play Store, scal: + +- `master` do `stable` + +- `master` do `master-android` (i skompiluj/zaktualizuj kod) + +- `master-android` do `stable-android`. + +7. Branch `master` repo simplexmq powinien zostać niezależnie scalony z branchem `stable` w wydaniach stabilnych. + + +## Różnice pomiędzy GHC 8.10.7 i GHC 9.6.3 + +1. Główna różnica związana jest z rozszerzeniem `DuplicateRecordFields`. + +W GHC 9.6.3 nie jest już możliwe określenie typu podczas korzystania z selektorów, zamiast tego używane jest rozszerzenie OverloadedRecordDot i składnia, które muszą zostać usunięte w GHC 8.10.7: + +```haskell +{-# LANGUAGE DuplicateRecordFields #-} +-- Użyj tego w GHC 9.6.3, gdy jest to potrzebne +{-# LANGUAGE OverloadedRecordDot #-} + +-- syntax GHC 9.6.3 +let x = record.field + +-- syntax GHC 8.10.7 usunięty w GHC 9.6.3 +let x = field (record :: Record) +``` + +Nadal możliwe jest określenie typu podczas korzystania ze składni aktualizacji rekordu, użyj tej reguły, aby wyłączyć ostrzeżenie kompilatora: + +```haskell +-- Użyj tego w GHC 9.6.3, gdy jest to potrzebne +{-# OPTIONS_GHC -fno-warn-ambiguous-fields #-} + +let r' = (record :: Record) {field = value} +``` + +2. Większość funkcji monad musi być teraz importowana z `Control.Monad`, a nie z konkretnych modułów monad (np. `Control.Monad.Except`). + +```haskell +-- Użyj tego w GHC 9.6.3, gdy jest to potrzebne +import Control.Monad +``` + +[Ten PR](https://github.com/simplex-chat/simplex-chat/pull/2975/files) opisuje wszystkie różnice. diff --git a/docs/lang/pl/README.md b/docs/lang/pl/README.md new file mode 100644 index 0000000000..1fa9aa20eb --- /dev/null +++ b/docs/lang/pl/README.md @@ -0,0 +1,435 @@ +[![build](https://github.com/simplex-chat/simplex-chat/actions/workflows/build.yml/badge.svg?branch=stable)](https://github.com/simplex-chat/simplex-chat/actions/workflows/build.yml) +[![Pobieranie z GitHuba](https://img.shields.io/github/downloads/simplex-chat/simplex-chat/total)](https://github.com/simplex-chat/simplex-chat/releases) +[![Wydanie na Githubie](https://img.shields.io/github/v/release/simplex-chat/simplex-chat)](https://github.com/simplex-chat/simplex-chat/releases) +[![Dołącz na Reddicie](https://img.shields.io/reddit/subreddit-subscribers/SimpleXChat?style=social)](https://www.reddit.com/r/SimpleXChat) +![Śledź na Mastodonie](https://img.shields.io/mastodon/follow/108619463746856738?domain=https%3A%2F%2Fmastodon.social&style=social) + +| 30/03/2023 | PL, [EN](/README.md), [FR](/docs/lang/fr/README.md), [CZ](/docs/lang/cs/README.md) | + +SimpleX logo + +# SimpleX - pierwszy komunikator bez jakichkolwiek identyfikatorów użytkowników - w 100% prywatny z założenia! + +[](http://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html)     [](https://www.privacyguides.org/en/real-time-communication/#simplex-chat)     [](https://www.kuketz-blog.de/simplex-eindruecke-vom-messenger-ohne-identifier/) + +## Witamy w SimpleX Chat! + +1. 📲 [Zainstaluj aplikację](#zainstaluj-aplikację). +2. ↔️ [Połącz się z naszym zespołem](#połącz-się-z-naszym-zespołem), [dołącz do grup użytkowników](#dołącz-do-grup-użytkowników) oraz [śledź nasze aktualizacje](#śledź-nasze-aktualizacje). +3. 🤝 [Wykonaj prywatne połączenie](#wykonaj-prywatne-połączenie) ze znajomym. +4. 🔤 [Pomóż w tłumaczeniu SimpleX Chat](#pomóż-nam-przetłumaczyć-simplex-chat). +5. ⚡️ [Kontrybuuj](#kontrybuuj) i [wesprzyj nas dotacjami](#wesprzyj-nas-dotacjami). + +[Dowiedz się więcej na temat SimpleX Chat](#informacje). + +## Zainstaluj aplikację + +[Aplikacja iOS](https://apps.apple.com/us/app/simplex-chat/id1605771084) +  +[![Android app](https://github.com/simplex-chat/.github/blob/master/profile/images/google_play.svg)](https://play.google.com/store/apps/details?id=chat.simplex.app) +  +[F-Droid](https://app.simplex.chat) +  +[iOS TestFlight](https://testflight.apple.com/join/DWuT2LQu) +  +[APK](https://github.com/simplex-chat/simplex-chat/releases/latest/download/simplex.apk) + +- 🖲 Chroni Twoje wiadomości i metadane - z kim rozmawiasz i kiedy. +- 🔐 Szyfrowanie end-to-end double ratchet, z dodatkową warstwą szyfrowania. +- 📱 Aplikacje mobilne dla Androida ([Google Play](https://play.google.com/store/apps/details?id=chat.simplex.app), [APK](https://github.com/simplex-chat/simplex-chat/releases/latest/download/simplex.apk)) oraz [iOS](https://apps.apple.com/us/app/simplex-chat/id1605771084). +- 🚀 [TestFlight dla iOS](https://testflight.apple.com/join/DWuT2LQu) z nowymi funkcjami na tydzień-dwa wcześniej - **limitowane do 10,000 użytkowników**! +- 🖥 Dostępny jako terminalowa (konsolowa) [aplikacja / CLI](#zap-quick-installation-of-a-terminal-app) na Linuxa, MacOSa, Windowsa. + +## Połącz się z naszym zespołem + +Możesz połączyć się z naszym zespołem za pośrednictwem aplikacji, korzystając z przycisku "czat z deweloperami" który dostępny jest w przypadku gdy nie masz konwersacji na swoim profilu, opcji "wysyłaj pytania i pomysły" w ustawieniach aplikacji lub za pośrednictwem naszego [adresu SimpleX](https://simplex.chat/contact#/?v=1&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FK1rslx-m5bpXVIdMZg9NLUZ_8JBm8xTt%23%2F%3Fv%3D1%26dh%3DMCowBQYDK2VuAyEALDeVe-sG8mRY22LsXlPgiwTNs9dbiLrNuA7f3ZMAJ2w%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion). Please connect to: + +- by zadać dowolne pytania +- by zasugerować dowolne ulepszenia +- by udostępnić nam wszystko co istotne + +Odpowiadamy na pytania manualnie, więc nie jest to natychmiastowe - może to potrwać do 24 godzin. + +Jeśli jesteś zainteresowany pomocą w integracji otwartoźródłowych modeli językowych i [dołączeniem do naszego zespołu](./docs/lang/pl/JOIN_TEAM.md), skontaktuj się z nami. + +## Dołącz do grup użytkowników + +Możesz dołączyć do grup utworzonych przez innych użytkowników za pośrednictwem nowej [usługi katalogowej](https://simplex.chat/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion). Nie jesteśmy odpowiedzialni za treści udostępniane w tych grupach. + +**Uwaga**: Poniższe grupy zostały utworzone, aby użytkownicy mogli zadawać pytania, zgłaszać sugestie i zadawać pytania dotyczące wyłącznie SimpleX Chat. + +Możesz również: +- krytykować aplikację i dokonywać porównań z innymi komunikatorami. +- udostępniać nowe komunikatory, które Twoim zdaniem mogą być interesujące z punktu widzenia prywatności, o ile nie spamujesz. +- udostępniać niektóre publikacje związane z prywatnością, raczej dość rzadko. +- po wstępnym zatwierdzeniu przez administratora w prywatnej wiadomości, udostępnić link do utworzonej grupy, ale tylko raz. Gdy grupa ma więcej niż 10 członków, może zostać przesłana do [SimpleX Directory Service](./docs/DIRECTORY.md), gdzie nowi użytkownicy będą mogli ją odkryć. + +Musisz: +- być uprzejmym wobec innych użytkowników. +- unikać spamu (zbyt częstych wiadomości, nawet jeśli są istotne). +- unikać ataków osobistych lub wrogiego nastawienia. +- unikać dzielenia się treściami, które nie są związane z powyższymi kwestiami (co obejmuje między innymi dyskusje na temat polityki lub innych aspektów życia społecznego niż prywatność, bezpieczeństwo, technologia i komunikacja, dzielenie się treściami, które mogą zostać uznane za obraźliwe przez innych użytkowników itp.). + +Wiadomości nieprzestrzegające tych zasad będą usuwane, prawo do wysyłania wiadomości może zostać odebrane ich autorom, a dostęp nowych członków do grupy może zostać tymczasowo ograniczony, aby zapobiec ponownemu dołączeniu pod inną nazwą - nasza niedoskonała moderacja grupy nie ma obecnie lepszego rozwiązania. + +Jeśli chcesz zadać jakieś pytania, możesz dołączyć do anglojęzycznej grupy użytkowników: [#SimpleX users group](https://simplex.chat/contact#/?v=1-4&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2Fos8FftfoV8zjb2T89fUEjJtF7y64p5av%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAQqMgh0fw2lPhjn3PDIEfAKA_E0-gf8Hr8zzhYnDivRs%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22lBPiveK2mjfUH43SN77R0w%3D%3D%22%7D) + +Istnieje również [#simplex-devs](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2F6eHqy7uAbZPOcA6qBtrQgQquVlt4Ll91%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAqV_pg3FF00L98aCXp4D3bOs4Sxv_UmSd-gb0juVoQVs%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22XonlixcHBIb2ijCehbZoiw%3D%3D%22%7D) dla deweloperów, którzy na bazie platformy SimpleX tworzą: + +- czatboty i automatyzacje +- integracje z innymi aplikacjami +- aplikacje społecznościowe i serwisy +- itp. + +Istnieją grupy w innych językach, na które przetłumaczyliśmy interfejs aplikacji. Grupy te służą do testowania i zadawania pytań innym użytkownikom SimpleX Chat: + +[\#SimpleX-DE](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FkIEl7OQzcp-J6aDmjdlQbRJwqkcZE7XR%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAR16PCu02MobRmKAsjzhDWMZcWP9hS8l5AUZi-Gs8z18%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22puYPMCQt11yPUvgmI5jCiw%3D%3D%22%7D) (German-speaking), [\#SimpleX-ES](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FaJ8O1O8A8GbeoaHTo_V8dcefaCl7ouPb%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEA034qWTA3sWcTsi6aWhNf9BA34vKVCFaEBdP2R66z6Ao%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22wiZ1v_wNjLPlT-nCSB-bRA%3D%3D%22%7D) (Spanish-speaking), [\#SimpleX-FR](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fhpq7_4gGJiilmz5Rf-CswuU5kZGkm_zOIooSw6yALRg%3D%40smp5.simplex.im%2FvIHQDxTor53nwnWWTy5cHNwQQAdWN5Hw%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAPdgK1eBnETmgiqEQufbUkydKBJafoRx4iRrtrC2NAGc%253D%26srv%3Djjbyvoemxysm7qxap7m5d5m35jzv5qq6gnlv7s4rsn7tdwwmuqciwpid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%221FyUryBPza-1ZFFE80Ekbg%3D%3D%22%7D) (French-speaking), [\#SimpleX-RU](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FXZyt3hJmWsycpN7Dqve_wbrAqb6myk1R%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAMFVIoytozTEa_QXOgoZFq_oe0IwZBYKvW50trSFXzXo%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22xz05ngjA3pNIxLZ32a8Vxg%3D%3D%22%7D) (Russian-speaking), [\#SimpleX-IT](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2F0weR-ZgDUl7ruOtI_8TZwEsnJP6UiImA%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAq4PSThO9Fvb5ydF48wB0yNbpzCbuQJCW3vZ9BGUfcxk%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22e-iceLA0SctC62eARgYDWg%3D%3D%22%7D) (Italian-speaking). + +Możesz do nich dołączyć otwierając te linki w aplikacji lub otwierając je w przeglądarce na komputerze i skanując kod QR. + +## Śledź nasze aktualizacje + +Nasze aktualizacje i wydania publikujemy za pośrednictwem: + +- [Reddita](https://www.reddit.com/r/SimpleXChat/), [Twittera](https://twitter.com/SimpleXChat), [Lemmy](https://lemmy.ml/c/simplex), [Mastodona](https://mastodon.social/@simplex) oraz [Nostr](https://snort.social/p/npub1exv22uulqnmlluszc4yk92jhs2e5ajcs6mu3t00a6avzjcalj9csm7d828). +- [profilu zespołu](#connect-to-the-team) w aplikacji SimpleX. +- [bloga](https://simplex.chat/blog/) oraz [feedu RSS](https://simplex.chat/feed.rss). +- [listy mailingowej](https://simplex.chat/#join-simplex), bardzo rzadko. + +## Wykonaj prywatne połączenie + +Aby nawiązać połączenie i rozpocząć wysyłanie wiadomości, należy udostępnić znajomemu łącze lub zeskanować kod QR z jego telefonu, osobiście lub podczas połączenia wideo. + +Kanał, za pośrednictwem którego udostępniasz link, nie musi być bezpieczny - wystarczy, że możesz potwierdzić, kto wysłał Ci wiadomość i że połączenie SimpleX zostało nawiązane. + +Wykonaj prywatne połączenie Conversation Połączenie wideo + +Po wykonaniu połączenia możesz [zweryfikować kod bezpieczeństwa połączenia](./blog/20230103-simplex-chat-v4.4-disappearing-messages.md#connection-security-verification). + +## Poradnik dla użytkownika (NOWE) + +Przeczytaj o funkcjach i ustawieniach aplikacji w nowym [Przewodniku użytkownika](./docs/guide/README.md). + +## Pomóż nam przetłumaczyć SimpleX Chat + +Dzięki naszym użytkownikom i [Weblate](https://hosted.weblate.org/engage/simplex-chat/), aplikacje SimpleX Chat, strona internetowa i dokumenty są tłumaczone na wiele innych języków. + +Dołącz do naszych tłumaczy, aby pomóc SimpleX w rozwoju! + +|region|język |kontrybutor|[Android](https://play.google.com/store/apps/details?id=chat.simplex.app) i [iOS](https://apps.apple.com/us/app/simplex-chat/id1605771084)|[strona](https://simplex.chat)|dokumenty na GitHubie| +|:----:|:-------:|:---------:|:---------:|:---------:|:---------:| +|🇬🇧 en|English | |✓|✓|✓|✓| +|ar|العربية |[jermanuts](https://github.com/jermanuts)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/ar/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/ar/)
-|[![website](https://hosted.weblate.org/widgets/simplex-chat/ar/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/ar/)|| +|🇧🇬 bg|Български | |[![android app](https://hosted.weblate.org/widgets/simplex-chat/bg/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/bg/)
[![ios app](https://hosted.weblate.org/widget/simplex-chat/ios/bg/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/bg/)||| +|🇨🇿 cs|Čeština |[zen0bit](https://github.com/zen0bit)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/cs/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/cs/)
[![ios app](https://hosted.weblate.org/widgets/simplex-chat/cs/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/cs/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/cs/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/cs/)|[✓](https://github.com/simplex-chat/simplex-chat/tree/master/docs/lang/cs)| +|🇩🇪 de|Deutsch |[mlanp](https://github.com/mlanp)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/de/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/de/)
[![ios app](https://hosted.weblate.org/widgets/simplex-chat/de/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/de/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/de/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/de/)|| +|🇪🇸 es|Español |[Mateyhv](https://github.com/Mateyhv)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/es/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/es/)
[![ios app](https://hosted.weblate.org/widgets/simplex-chat/es/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/es/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/es/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/es/)|| +|🇫🇮 fi|Suomi | |[![android app](https://hosted.weblate.org/widgets/simplex-chat/fi/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/fi/)
[![ios app](https://hosted.weblate.org/widgets/simplex-chat/fi/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/fi/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/fi/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/fi/)|| +|🇫🇷 fr|Français |[ishi_sama](https://github.com/ishi-sama)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/fr/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/fr/)
[![ios app](https://hosted.weblate.org/widgets/simplex-chat/fr/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/fr/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/fr/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/fr/)|[✓](https://github.com/simplex-chat/simplex-chat/tree/master/docs/lang/fr)| +|🇮🇱 he|עִברִית | |[![android app](https://hosted.weblate.org/widgets/simplex-chat/he/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/he/)
-||| +|🇭🇺 hu|Magyar | |[![android app](https://hosted.weblate.org/widgets/simplex-chat/hu/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/hu/)
-||| +|🇮🇹 it|Italiano |[unbranched](https://github.com/unbranched)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/it/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/it/)
[![ios app](https://hosted.weblate.org/widgets/simplex-chat/it/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/it/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/it/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/it/)|| +|🇯🇵 ja|日本語 | |[![android app](https://hosted.weblate.org/widgets/simplex-chat/ja/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/ja/)
[![ios app](https://hosted.weblate.org/widgets/simplex-chat/ja/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/ja/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/ja/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/ja/)|| +|🇳🇱 nl|Nederlands|[mika-nl](https://github.com/mika-nl)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/nl/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/nl/)
[![ios app](https://hosted.weblate.org/widgets/simplex-chat/nl/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/nl/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/nl/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/nl/)|| +|🇵🇱 pl|Polski |[BxOxSxS](https://github.com/BxOxSxS)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/pl/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/pl/)
[![ios app](https://hosted.weblate.org/widgets/simplex-chat/pl/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/pl/)||| +|🇧🇷 pt-BR|Português||[![android app](https://hosted.weblate.org/widgets/simplex-chat/pt_BR/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/pt_BR/)
-|[![website](https://hosted.weblate.org/widgets/simplex-chat/pt_BR/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/pt_BR/)|| +|🇷🇺 ru|Русский ||[![android app](https://hosted.weblate.org/widgets/simplex-chat/ru/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/ru/)
[![ios app](https://hosted.weblate.org/widgets/simplex-chat/ru/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/ru/)||| +|🇹🇭 th|ภาษาไทย |[titapa-punpun](https://github.com/titapa-punpun)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/th/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/th/)
[![ios app](https://hosted.weblate.org/widgets/simplex-chat/th/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/th/)||| +|🇹🇷 tr|Türkçe | |[![android app](https://hosted.weblate.org/widgets/simplex-chat/tr/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/tr/)
[![ios app](https://hosted.weblate.org/widgets/simplex-chat/tr/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/tr/)||| +|🇺🇦 uk|Українська| |[![android app](https://hosted.weblate.org/widgets/simplex-chat/uk/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/uk/)
[![ios app](https://hosted.weblate.org/widgets/simplex-chat/uk/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/uk/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/uk/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/uk/)|| +|🇨🇳 zh-CHS|简体中文|[sith-on-mars](https://github.com/sith-on-mars)

[Float-hu](https://github.com/Float-hu)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/zh_Hans/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/)
[![ios app](https://hosted.weblate.org/widgets/simplex-chat/zh_Hans/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/)
 |

[![website](https://hosted.weblate.org/widgets/simplex-chat/zh_Hans/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/zh_Hans/)|| + +Trwają prace nad wersjami językowymi: Arabski, japoński, koreański, portugalski i [inne](https://hosted.weblate.org/projects/simplex-chat/#languages). Będziemy dodawać kolejne języki, gdy niektóre z już dodanych zostaną ukończone - zasugeruj nowe języki, przejrzyj [przewodnik po tłumaczeniach](./docs/lang/pl/TRANSLATIONS.md) i skontaktuj się z nami! + +## Kontrybuuj + +Chcielibyśmy, abyś przyczynił się do naszego rozwoju! Możesz nam pomóc: + +- [dzieląc się motywem kolorystycznym](./docs/THEMES.md), którego używasz w aplikacji na Androida! +- pisząc samouczki lub poradniki, które dotyczą hostowania serwerów, automatyzacji czatbotów itp. +- współtworząc bazy wiedzy SimpleX Chat. +- rozwijając funkcje - skontaktuj się z nami za pośrednictwem czatu, abyśmy mogli pomóc Ci zacząć. + +## Wesprzyj nas dotacjami + +Ogromne podziękowania dla wszystkich, którzy wsparli projekt SimpleX Chat! + +Na pierwszym miejscu stawiamy prywatność i bezpieczeństwo użytkowników - byłoby to niemożliwe bez waszego wsparcia. + +Naszą obietnicą wobec użytkowników jest to, że protokoły SimpleX są i pozostaną otwarte i w domenie publicznej - tak więc każdy może stworzyć przyszłe implementacje klientów i serwerów. Budujemy platformę SimpleX opartą na tych samych zasadach, co poczta e-mail i Internet, ale znacznie bardziej prywatną i bezpieczną. + +Twoje darowizny pomogą nam zebrać więcej funduszy - każda kwota, nawet koszt filiżanki kawy, będzie dla nas ogromną pomocą. + +Możesz nas wesprzeć za pomocą: + +- [GitHuba](https://github.com/sponsors/simplex-chat) - jest to dla nas wolne od prowizji. +- [OpenCollective](https://opencollective.com/simplex-chat) - pobiera prowizję, a także przyjmuje darowizny w kryptowalutach. +- Monero: 8568eeVjaJ1RQ65ZUn9PRQ8ENtqeX9VVhcCYYhnVLxhV4JtBqw42so2VEUDQZNkFfsH5sXCuV7FN8VhRQ21DkNibTZP57Qt +- Bitcoin: 1bpefFkzuRoMY3ZuBbZNZxycbg7NYPYTG +- BCH: 1bpefFkzuRoMY3ZuBbZNZxycbg7NYPYTG +- USDT: + - BNB Smart Chain: 0x83fd788f7241a2be61780ea9dc72d2151e6843e2 + - Tron: TNnTrKLBmdy2Wn3cAQR98dAVvWhLskQGfW +- Ethereum: 0x83fd788f7241a2be61780ea9dc72d2151e6843e2 +- Solana: 43tWFWDczgAcn4Rzwkpqg2mqwnQETSiTwznmCgA2tf1L + +Dziękuję, + +Evgeny + +Twórca SimpleX Chat. + +## Informacje + +- [Dlaczego prywatność ma znaczenie](#dlaczego-prywatność-ma-znaczenie) +- [Podejście SimpleXa do problemu prywatności i bezpieczeństwa](#podejście-simplexa-do-problemu-prywatności-i-bezpieczeństwa) + - [Kompletna prywatność Twojej tożsamości, profilu, kontaktów i metadanych.](#kompletna-prywatność-twojej-tożsamości-profilu-kontaktów-i-metadanych) + - [Najlepsza ochrona przed spamem i nadużyciami](#najlepsza-ochrona-przed-spamem-i-nadużyciami) + - [Pełna kontrola i bezpieczeństwo Twoich danych](#pełna-kontrola-i-bezpieczeństwo-twoich-danych) + - [Użytkownicy są właścicielami sieci SimpleX](#użytkownicy-są-właścicielami-sieci-simplex) +- [Często zadawane pytania](#często-zadawane-pytania) +- [Newsy i aktualizacje](#newsy-i-aktualizacje) +- [Szybka instalacja terminalowej wersji aplikacji](#zap-szybka-instalacja-terminalowej-wersji-aplikacji) +- [Budowa Platformy SimpleX](#budowa-platformy-simplex) +- [Prywatność i bezpieczeństwo: szczegóły techniczne i ograniczenia](#prywatność-i-bezpieczeństwo-szczegóły-techniczne-i-ograniczenia) +- [Dla deweloperów](#dla-deweloperów) +- [Roadmapa](#roadmapa) +- [Ostrzeżenia, Kontakt w sprawie bezpieczeństwa, Licencja](#ostrzeżenia) + +## Dlaczego prywatność ma znaczenie + +Każdy powinien dbać o prywatność i bezpieczeństwo swojej komunikacji - nieszkodliwe rozmowy mogą narazić Cię na niebezpieczeństwo, nawet jeśli nie masz nic do ukrycia. + +Jedną z najbardziej wstrząsających historii jest doświadczenie [Mohamedou Ould Salahi](https://en.wikipedia.org/wiki/Mohamedou_Ould_Slahi). opisane w jego pamiętniku i pokazane w filmie Mauretańczyk (2021). Został on umieszczony w obozie Guantanamo, bez procesu, i był tam torturowany przez 15 lat po telefonie do swojego krewnego w Afganistanie, pod zarzutem udziału w atakach 9/11, mimo że przez poprzednie 10 lat mieszkał w Niemczech. + +Używanie szyfrowanego komunikatora end-to-end nie jest wystarczające. Powinniśmy używać komunikatorów, które zapewniają prywatność naszym powiązaniom, czyli tym z kim jesteśmy jakkolwiek połączeni. + +## Podejście SimpleXa do problemu prywatności i bezpieczeństwa + +### Kompletna prywatność Twojej tożsamości, profilu, kontaktów i metadanych. + +**W przeciwieństwie do innych komunikatorów, SimpleX nie posiada żadnych identyfikatorów przypisanych do użytkowników**. Nie posiada nawet numerów generowanych losowo. Zapewnia to prywatność tego, z kim się komunikujesz, ukrywając jego tożsamość oraz fakt komunikacji przed serwerami platformy SimpleX i wszelkimi obserwatorami [Czytaj więcej](./docs/lang/pl/SIMPLEX.md#full-privacy-of-your-identity-profile-contacts-and-metadata). + +### Najlepsza ochrona przed spamem i nadużyciami + +Ponieważ na platformie SimpleX nie masz identyfikatora ani stałego adresu, nikt nie może się z Tobą skontaktować, chyba że udostępnisz jednorazowy lub tymczasowy adres użytkownika, w postaci kodu QR lub linku. [Czytaj więcej](./docs/lang/pl/SIMPLEX.md#the-best-protection-against-spam-and-abuse). + +### Pełna kontrola i bezpieczeństwo Twoich danych + +SimpleX przechowuje wszystkie dane użytkownika na urządzeniach klienckich, wiadomości są przechowywane tymczasowo na serwerach przekaźnikowych SimpleX do momentu ich odebrania, po czym są trwale usuwane. [Czytaj więcej](./docs/lang/pl/SIMPLEX.md#complete-ownership-control-and-security-of-your-data). + +### Użytkownicy są właścicielami sieci SimpleX + +Możesz używać SimpleX na własnych serwerach i nadal komunikować się z ludźmi za pomocą serwerów, które są wstępnie skonfigurowane w aplikacjach lub z dowolnymi innymi serwerami SimpleX. [Czytaj więcej](./docs/lang/pl/SIMPLEX.md#users-own-simplex-network). + +## Często zadawane pytania + +1. _W jaki sposób SimpleX może dostarczać wiadomości bez jakichkolwiek identyfikatorów użytkownika?_ Zobacz [ogłoszenie wydania v2](./blog/20220511-simplex-chat-v2-images-files.md#the-first-messaging-platform-without-user-identifiers) wyjaśniające jak SimpleX działa. + +2. _Dlaczego po prostu nie mogę używać Signal?_ Signal to scentralizowana platforma, która wykorzystuje numery telefonów do identyfikacji użytkowników i ich kontaktów. Oznacza to, że podczas gdy treść wiadomości w Signal jest chroniona solidnym szyfrowaniem end-to-end, istnieje duża ilość metadanych widocznych dla Signal - to, z kim rozmawiasz i kiedy. + +3. _Czym to się różni od Matrix, Session, Ricochet, Cwtch itp., które również nie wymagają tożsamości użytkownika?_ Mimo że te platformy nie wymagają _prawdziwej tożsamości_, to polegają na anonimowych tożsamościach użytkowników w celu dostarczania wiadomości - może to być na przykład klucz tożsamości lub liczba losowa. Korzystanie z trwałej tożsamości użytkownika, nawet anonimowej, stwarza ryzyko, że informacje na temat powiązań użytkownika staną się znane obserwatorom i/lub dostawcom usług, co może prowadzić do deanonimizacji poszczególnych użytkowników. Jeśli ten sam profil użytkownika jest używany do łączenia się z dwiema różnymi osobami za pośrednictwem dowolnego komunikatora innego niż SimpleX, wspomniane dwie osoby mogą stwierdzić, czy są rozmawiają z tą samą osobą - w wiadomościach używają tego samego identyfikatora użytkownika. W SimpleX nie ma metadanych wspólnych dla rozmów z różnymi kontaktami - jest to cecha, której nie ma żaden inny komunikator. + +## Newsy i aktualizacje + +Najnowsze i ważne wiadomości: + +[Mar 23, 2024. SimpleX network: real privacy and stable profits, non-profits for protocols, v5.6 released with quantum resistant e2e encryption and simple profile migration.](./blog/20240323-simplex-network-privacy-non-profit-v5-6-quantum-resistant-e2e-encryption-simple-migration.md) + +[Mar 14, 2024. SimpleX Chat v5.6 beta: adding quantum resistance to Signal double ratchet algorithm.](./blog/20240314-simplex-chat-v5-6-quantum-resistance-signal-double-ratchet-algorithm.md) + +[Jan 24, 2024. SimpleX Chat: free infrastructure from Linode, v5.5 released with private notes, group history and a simpler UX to connect.](./blog/20240124-simplex-chat-infrastructure-costs-v5-5-simplex-ux-private-notes-group-history.md) + +[Nov 25, 2023. SimpleX Chat v5.4 released: link mobile and desktop apps via quantum resistant protocol, and much better groups](./blog/20231125-simplex-chat-v5-4-link-mobile-desktop-quantum-resistant-better-groups.md). + +[Sep 25, 2023. SimpleX Chat v5.3 released: desktop app, local file encryption, improved groups and directory service](./blog/20230925-simplex-chat-v5-3-desktop-app-local-file-encryption-directory-service.md). + +[Jul 22, 2023. SimpleX Chat: v5.2 released with message delivery receipts](./blog/20230722-simplex-chat-v5-2-message-delivery-receipts.md). + +[May 23, 2023. SimpleX Chat: v5.1 released with message reactions and self-destruct passcode](./blog/20230523-simplex-chat-v5-1-message-reactions-self-destruct-passcode.md). + +[Apr 22, 2023. SimpleX Chat: vision and funding, v5.0 released with videos and files up to 1gb](./blog/20230422-simplex-chat-vision-funding-v5-videos-files-passcode.md). + +[Mar 1, 2023. SimpleX File Transfer Protocol – send large files efficiently, privately and securely, soon to be integrated into SimpleX Chat apps.](./blog/20230301-simplex-file-transfer-protocol.md). + +[Nov 8, 2022. Security audit by Trail of Bits, the new website and v4.2 released](./blog/20221108-simplex-chat-v4.2-security-audit-new-website.md). + +[Sep 28, 2022. v4.0: encrypted local chat database and many other changes](./blog/20220928-simplex-chat-v4-encrypted-database.md). + +[All updates](./blog) + +## :zap: Szybka instalacja terminalowej wersji aplikacji + +```sh +curl -o- https://raw.githubusercontent.com/simplex-chat/simplex-chat/stable/install.sh | bash +``` + +Po pobraniu klienta czatu można go uruchomić za pomocą polecenia `simplex-chat`. + +![simplex-chat](./images/connection.gif) + +Przeczytaj więcej o [instalowaniu i używaniu terminalowej wersji czatu](./docs/lang/pl/CLI.md). + +## Budowa Platformy SimpleX + +SimpleX to sieć typu klient-serwer z unikatową topologią sieciową, która wykorzystuje redundantne, jednorazowe węzły przekazywania wiadomości do asynchronicznego przekazywania wiadomości za pośrednictwem jednokierunkowych (simpleksowych) kolejek wiadomości, zapewniając anonimowość odbiorcy i nadawcy. + +W przeciwieństwie do sieci P2P, wszystkie wiadomości są przekazywane przez jeden lub kilka węzłów serwera, które nawet nie muszą być trwałe. Obecna implementacja [serwera SMP](https://github.com/simplex-chat/simplexmq#smp-server) wykorzystuje przechowywanie wiadomości w pamięci, utrzymując jedynie rejestr kolejki. SimpleX zapewnia lepszą ochronę metadanych niż projekty P2P, ponieważ żadne globalne identyfikatory uczestników nie są używane do dostarczania wiadomości i pozwala to uniknąć [różnych problemów związanych z sieciami P2P](./docs/lang/pl/SIMPLEX.md#comparison-with-p2p-messaging-protocols). + +W przeciwieństwie do sieci sfederowanych, węzły serwera **nie posiadają danych użytkowników**, **nie komunikują się ze sobą** i **nie przechowują wiadomości** po ich dostarczeniu do odbiorców. Nie ma możliwości na odkrycie pełnej listy serwerów działających w sieci SimpleX. Taka konstrukcja pozwala uniknąć problemu związanego z widocznością metadanych, z którym borykają się wszystkie sieci sfederowane i pozwala ona na lepszą ochronę przed atakami obejmującymi całą sieć. + +Informacje o użytkownikach, ich kontaktach i grupach znajdują się wyłącznie na urządzeniach klienckich. + +Przeczytaj [whitepaper SimpleX](https://github.com/simplex-chat/simplexmq/blob/stable/protocol/overview-tjr.md) po więcej informacji o zadaniach platformy oraz by dowiedzieć się jak wygląda koncepcja techniczna modelu. + +Zobacz [Protokół Czatu SimpleX](./docs/protocol/simplex-chat.md) by dowiedzieć się o formacie wiadomości wysyłanych między klientem czatu za pośrednictwem [Protokołu Wiadomości SimpleX](https://github.com/simplex-chat/simplexmq/blob/stable/protocol/simplex-messaging.md). + +## Prywatność i bezpieczeństwo: szczegóły techniczne i ograniczenia + +Prace nad SimpleX Chat wciąż trwają - udostępniamy nowe ulepszenia, gdy tylko będą gotowe. To Ty musisz zdecydować, czy obecny stan jest wystarczająco dobry dla Twojego przypadku zastosowania. + +Stworzyliśmy [słownik pojęć](./docs/GLOSSARY.md) używany do opisu systemów komunikacyjnych, aby pomóc zrozumieć niektóre z poniższych pojęć oraz aby pomóc Ci w porównaniu zalet i wad różnych systemów komunikacyjnych. + +Co zostało już wprowadzone: + +1. Zamiast identyfikatorów użytkownika używanych przez wszystkie inne platformy, nawet te najbardziej prywatne, SimpleX używa [pairwise per-queue identifiers](./docs/GLOSSARY.md#pairwise-pseudonymous-identifier) (2 adresy dla każdej jednokierunkowej kolejki wiadomości, z opcjonalnym trzecim adresem dla powiadomień push na iOS, 2 kolejki w każdym połączeniu między użytkownikami). Sprawia to, że trudniej jest w ten sposób obserwować przebieg połączeń sieciowych na poziomie aplikacji, ponieważ dla `n` użytkowników może istnieć do `n * (n-1)` kolejek wiadomości. +2. [Szyfrowanie end-to-end](./docs/GLOSSARY.md#end-to-end-encryption) w każdej kolejce wiadomości używając [cryptoboxa NaCl](https://nacl.cr.yp.to/box.html). Zostało to dodane, aby umożliwić redundancję w przyszłości (przekazywanie każdej wiadomości przez kilka serwerów), aby uniknąć posiadania tego samego ciphertext w różnych kolejkach (które byłyby widoczne tylko dla atakującego, w przypadku przejęcia TLS). Klucze szyfrujące używane do tego szyfrowania nie są rotowane, zamiast tego planujemy rotować kolejki. Do negocjacji kluczy używane są klucze Curve25519. +3. Szyfrowanie end-to-end [double ratchet](./docs/GLOSSARY.md#double-ratchet-algorithm) w każdej rozmowie między dwoma użytkownikami (lub członkami grupy). Jest to ten sam algorytm, który jest używany w Signal i wielu innych komunikatorach; zapewnia on komunikację OTR z [forward secrecy](./docs/GLOSSARY.md#forward-secrecy) (każda wiadomość jest szyfrowana własnym kluczem efemerycznym) i [break-in recovery](./docs/GLOSSARY.md#post-compromise-security) (klucze są często renegocjowane w ramach wymiany wiadomości). Dwie pary kluczy Curve448 są używane do początkowego [key agreement](./docs/GLOSSARY.md#key-agreement-protocol), strona inicjująca przekazuje te klucze przez link połączenia, a strona akceptująca - w nagłówku wiadomości potwierdzającej. +4. Dodatkowa warstwa szyfrowania przy użyciu NaCL cryptobox dla wiadomości dostarczanych z serwera do odbiorcy. Warstwa ta pozwala uniknąć wspólnego szyfrogramu między wysyłanym i odbieranym ruchem serwera wewnątrz TLS (i nie ma też wspólnych identyfikatorów). +5. Kilka poziomów [content padding](./docs/GLOSSARY.md#message-padding) w celu utrudnienia ataków na rozmiar wiadomości. +6. Wszystkie metadane wiadomości, w tym czas odebrania wiadomości przez serwer (zaokrąglony do sekundy), są wysyłane do odbiorców w zaszyfrowanej postaci, więc nawet jeśli TLS zostanie przejęty, nie można ich zobaczyć. +7. Dozwolone są tylko TLS 1.2/1.3 dla połączeń klient-serwer, z ograniczeniem do algorytmów kryptograficznych: CHACHA20POLY1305_SHA256, Ed25519/Ed448, Curve25519/Curve448. +8. Aby zapobiec atakom typu replay, serwery SimpleX wymagają [tlsunique channel binding](https://www.rfc-editor.org/rfc/rfc5929.html) jako identyfikatora sesji w każdym poleceniu klienta podpisanym kluczem efemerycznym dla każdej kolejki. +9. Aby ochronić swój adres IP, wszystkie klienty SimpleX Chat obsługują dostęp do serwerów komunikacyjnych za pośrednictwem Tora - zobacz [v3.1 release announcement](./blog/20220808-simplex-chat-v3.1-chat-groups.md) po więcej szczegółów. +10. Lokalne szyfrowanie bazy danych z hasłem - kontakty, grupy oraz wszystkie wysłane i odebrane wiadomości są przechowywane w postaci zaszyfrowanej. Jeśli korzystałeś z SimpleX Chat przed wersją v4.0, musisz włączyć szyfrowanie w ustawieniach aplikacji. +11. Izolacja transportu - różne połączenia TCP i obwody Tor używane są dla ruchu różnych profili użytkowników, opcjonalnie - dla różnych kontaktów i połączeń członków grupy. +12. Ręczne obracanie kolejki wiadomości w celu przeniesienia konwersacji do innego przekaźnika SMP. +13. Wysyłanie zaszyfrowanych plików end-to-end przy użyciu [protokołu XFTP](https://simplex.chat/blog/20230301-simplex-file-transfer-protocol.html). +14. Szyfrowanie plików lokalnych. + +Planujemy dodać: + +1. Przekaźniki SMP nadawców i przekaźniki XFTP odbiorców w celu zmniejszenia ruchu i w celu ukrycia adresów IP przed przekaźnikami wybranymi i potencjalnie kontrolowanymi przez drugą stronę. +2. Post-kwantowa wymiana kluczy w protokole Double Ratchet. +3. Automatyczna rotacja kolejek wiadomości i redundancja. Obecnie kolejki utworzone między dwoma użytkownikami są używane, dopóki kolejka nie zostanie ręcznie zmieniona przez użytkownika lub dopóki kontakt nie zostanie usunięty. Planujemy dodać automatyczną rotację kolejek, aby te identyfikatory były tymczasowe i rotowały w oparciu o pewien harmonogram TBC (np. co X wiadomości lub co X godzin/dni). +4. "Mieszanie" wiadomości - dodanie opóźnienia do dostarczania wiadomości, w celu ochrony przed korelacją ruchu według czasu wiadomości. +5. Reprodukowalne kompilacje - ograniczeniem jest tu stos deweloperski, ale będziemy starali się rozwiązać ten problem. Użytkownicy nadal mogą tworzyć wszystkie aplikacje i usługi z kodu źródłowego. + +## Dla deweloperów + +Możesz: + +- korzystać z biblioteki SimpleX Chat w celu zintegrowania funkcji czatu z aplikacjami mobilnymi. +- tworzyć boty i usługi czatu w języku Haskell - zobacz [prosty](./apps/simplex-bot/) i bardziej [zaawansowany przykład bota czatu](./apps/simplex-bot-advanced/). +- tworzenie chat botów i usług w dowolnym języku z wykorzystaniem terminala CLI SimpleX Chat jako lokalnego serwera WebSocket. Zobacz [TypeScript SimpleX Chat client](./packages/simplex-chat-client/) i [JavaScript chat bot example](./packages/simplex-chat-client/typescript/examples/squaring-bot.js). +- uruchomić [simplex-chat w terminal ](./docs/lang/pl/CLI.md), aby wykonywać poszczególne polecenia czatu, np. wysyłać wiadomości w ramach wykonywania skryptu powłoki. + +Jeśli chcesz rozwijać platformę SimpleX, skontaktuj się z nami, aby uzyskać porady i wsparcie. + +Dołącz również do grupy [#simplex-devs](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2F6eHqy7uAbZPOcA6qBtrQgQquVlt4Ll91%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAqV_pg3FF00L98aCXp4D3bOs4Sxv_UmSd-gb0juVoQVs%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22XonlixcHBIb2ijCehbZoiw%3D%3D%22%7D), aby zadawać pytania i dzielić się swoimi sukcesami. + +## Roadmapa + +- ✅ Łatwy do utworzenia serwer SimpleX z przechowywaniem wiadomości w pamięci, bez żadnych dependency. +- ✅ Terminalowa (konsolowa) wersja klienta z obsługą grup oraz plików. +- ✅ Utworzenie serwera SimpleX na Linode zaledwie jednym kliknięciem. +- ✅ Szyfrowanie end-to-end używając protokołu double-ratchet z dodatkową warstwą szyfrowania. +- ✅ Pierwsza wersja aplikacji na Androida i iOS. +- ✅ Zachowujące prywatność natychmiastowe powiadomienia na Androida przy użyciu usługi działającej w tle. +- ✅ Przykłady czatbota w Haskellu. +- ✅ v2.0 - wsparcie dla zdjęć oraz plików w aplikacjach mobilnych. +- ✅ Manualne usuwanie historii czatu. +- ✅ Szyfrowane end-to-end encrypted audio oraz wideo rozmowy przy użyciu WebRTC w aplikacjach mobilnych. +- ✅ Zachowujące prywatność natychmiastowe powiadomienia na iOS przy użyciu usługi Apple Push Notification. +- ✅ Eksportowanie oraz importowanie bazy danych czatu. +- ✅ Konwersacje grupowe w aplikacjach mmobilnych. +- ✅ Łączenie się z serwerami wiadomości przez Tor. +- ✅ Podwójne adresy serwerów w celu uzyskania dostępu do serwerów wiadomości jako ukrytych usług v3. +- ✅ Serwer czatu i SDK klienta w języku TypeScript do tworzenia interfejsów czatu, integracji i botów czatu (gotowe do ogłoszenia). +- ✅ Tryb incognito do udostępniania nowej losowej nazwy każdemu kontaktowi. +- ✅ Szyfrowanie bazy danych czatu. +- ✅ Automatyczne usuwanie historii czatu. +- ✅ Linki umożliwiające dołączanie do grup i poprawienie ich stabilności. +- ✅ Wiadomości głosowe (z opcją rezygnacji odbiorcy dla każdego kontaktu). +- ✅ Podstawowe uwierzytelnianie dla serwerów SMP (w celu autoryzacji tworzenia nowych kolejek). +- ✅ Wyświetlanie usuniętych wiadomości, pełne usuwanie wiadomości przez nadawcę (z wyrażeniem zgody przez odbiorcę dla każdego kontaktu). +- ✅ Blokowanie zrzutów ekranu i wyświetlania zawartości aplikacji w "ostatnich aplikacjach". +- ✅ Zaawansowana konfiguracja serwera. +- ✅ Znikające wiadomości (z możliwością wyboru przez odbiorcę dla każdego kontaktu). +- ✅ Wiadomości "na żywo". +- ✅ Weryfikacja kontaktu za pośrednictwem oddzielnego kanału out-of-band. +- ✅ Wiele profili użytkowników w tej samej bazie danych czatu. +- ✅ Opcjonalnie unikanie ponownego użycia tej samej sesji TCP dla wielu połączeń. +- ✅ Zachowywanie wersji roboczych wiadomości. +- ✅ Serwer plików do optymalizacji wydajnego i prywatnego wysyłania dużych plików. +- ✅ Ulepszone połączenia audio i wideo. +- ✅ Obsługa starszego systemu operacyjnego Android i 32-bitowych procesorów. +- ✅ Ukryte profile czatu. +- ✅ Wysyłanie i odbieranie dużych plików przez [protokół XFTP](./blog/20230301-simplex-file-transfer-protocol.md). +- ✅ Wiadomości wideo. +- ✅ Kod dostępu do aplikacji. +- ✅ Ulepszenie interfejsu Androidowej aplikacji. +- ✅ Opcjonalne alternatywne hasło dostępu. +- ✅ Reakcje na wiadomości +- ✅ Historia edytowania wiadomości +- ✅ Zmniejszenie zużycia baterii i transferu danych w dużych grupach. +- ✅ Potwierdzenie dostarczenia wiadomości (z opcją rezygnacji nadawcy dla każdego kontaktu). +- ✅ Klient desktopowy. +- ✅ Szyfrowanie plików lokalnych przechowywanych w aplikacji. +- ✅ Korzystanie z profili mobilnych z poziomu aplikacji komputerowej. +- ✅ Prywatne notatki. +- ✅ Usprawnienie wysyłania filmów (w tym szyfrowanie lokalnie przechowywanych filmów). +- ✅ Post-kwantowa wymiana kluczy w protokole double ratchet. +- 🏗 Poprawienie stabilności i zmniejszenie zużycia baterii. +- 🏗 Poprawienie odczuć dla nowych użytkowników. +- 🏗 Duże grupy, społeczności i kanały publiczne. +- 🏗 Przekaźnik dostarczania wiadomości dla nadawców (w celu ukrycia adresu IP przed serwerami odbiorców i zmniejszenia ruchu). +- Suwak prywatności i bezpieczeństwa - prosty sposób na ustawienie wszystkich ustawień za jednym zamachem. +- Redundancja i rotacja kolejek SMP (obsługiwana ręcznie). +- Dołączanie opcjonalnej wiadomości do żądania połączenia wysyłanego za pośrednictwem adresu kontaktowego. +- Ulepszona nawigacja i wyszukiwanie w konwersacji (rozwijanie i przewijanie do cytowanej wiadomości, przewijanie do wyników wyszukiwania itp.) +- Kanały/transmisje. +- Efemeryczne/znikające/jednorazowe konwersacje z istniejącymi kontaktami. +- Prywatne udostępnianie swojej lokalizacji. +- Widżety internetowe dla niestandardowej interaktywności w czatach. +- Programowalne automatyzacje czatów / reguły (automatyczne odpowiedzi / przekazywanie / usuwanie / wysyłanie, przypomnienia itp.) +- Chroniący prywatność serwer tożsamości dla opcjonalnych adresów kontaktów/grup opartych na DNS w celu uproszczenia połączenia i odnajdywania, ale nieużywany do dostarczania wiadomości: + - zachowanie wszystkich kontaktów i grup nawet w przypadku utraty domeny. + - Serwer nie posiada informacji o kontaktach i grupach użytkownika. +- Wielowęzłowe przekaźniki SMP o dużej pojemności. + +## Ostrzeżenia + +[Protokoły i model bezpieczeństwa SimpleX](https://github.com/simplex-chat/simplexmq/blob/master/protocol/overview-tjr.md) zostały poddane przeglądowi i zawierały wiele istotnych zmian i ulepszeń w wersji v1.0.0. + +Audyt bezpieczeństwa został przeprowadzony w październiku 2022 r. przez [Trail of Bits](https://www.trailofbits.com/about), a większość poprawek została wydana w wersji 4.2.0 - zobacz [ogłoszenie](./blog/20221108-simplex-chat-v4.2-security-audit-new-website.md). + +SimpleX Chat jest nadal na stosunkowo wczesnym etapie rozwoju (aplikacje mobilne zostały wydane w marcu 2022 r.), więc możesz odkryć pewne błędy i brakujące funkcje. Będziemy bardzo wdzięczni za poinformowanie nas o wszystkim, co wymaga naprawy lub ulepszenia. + +Domyślne serwery skonfigurowane w aplikacji są dostarczane na zasadzie najlepszych starań. Obecnie nie gwarantujemy żadnych umów SLA, chociaż historycznie nasze serwery miały ponad 99,9% czasu pracy. + +Nigdy nie udostępnialiśmy ani nie byliśmy proszeni o dostęp do naszych serwerów lub jakichkolwiek informacji z naszych serwerów przez osoby trzecie. Jeśli kiedykolwiek zostaniemy poproszeni o zapewnienie takiego dostępu lub informacji, będziemy postępować zgodnie z odpowiednim procesem prawnym. + +Nie rejestrujemy adresów IP użytkowników i nie przeprowadzamy żadnej korelacji ruchu na naszych serwerach. Jeśli bezpieczeństwo na poziomie transportu jest krytyczne, musisz użyć Tor lub innej podobnej sieci, aby uzyskać dostęp do serwerów wiadomości. Będziemy ulepszać aplikacje klienckie, aby zmniejszyć możliwości korelacji ruchu. + +Więcej informacji można znaleźć w [Warunkach i polityce prywatności](./PRIVACY.md). + +## Kontakt w sprawie bezpieczeństwa + +Aby zgłosić podatność wyślij nam wiadomość e-mail na adres chat@simplex.chat. Będziemy wspólnie pracować nad poprawką i ujawnieniem szczegółów. NIE zgłaszaj luk w zabezpieczeniach za pośrednictwem zgłoszeń GitHub. + +Prosimy o traktowanie wszelkich ustaleń dotyczących możliwych ataków korelacji ruchu umożliwiających skorelowanie dwóch różnych konwersacji z tym samym użytkownikiem, innych niż objęte [modelem zagrożeń](https://github.com/simplex-chat/simplexmq/blob/stable/protocol/overview-tjr.md#threat-model), jako luk w zabezpieczeniach i postępowanie zgodnie z tym procesem ujawniania. + +## Licencja + +[AGPL v3](./LICENSE) + +[iOS app](https://apps.apple.com/us/app/simplex-chat/id1605771084) +  +[![Android app](https://github.com/simplex-chat/.github/blob/master/profile/images/google_play.svg)](https://play.google.com/store/apps/details?id=chat.simplex.app) +  +[F-Droid](https://app.simplex.chat) +  +[iOS TestFlight](https://testflight.apple.com/join/DWuT2LQu) +  +[APK](https://github.com/simplex-chat/simplex-chat/releases/latest/download/simplex.apk) diff --git a/docs/lang/pl/SERVER.md b/docs/lang/pl/SERVER.md new file mode 100644 index 0000000000..72cb51a4bf --- /dev/null +++ b/docs/lang/pl/SERVER.md @@ -0,0 +1,485 @@ +--- +title: Hostowanie własnego serwera SMP +revision: 31.07.2023 +--- + +| Updated 05.06.2023 | Języki: PL, [EN](/docs/SERVER.md), [FR](/docs/lang/fr/SERVER.md), [CZ](/docs/lang/cs/SERVER.md) | + +# Hostowanie własnego serwera SMP + +## Informacje ogólne + +Serwer SMP to serwer przekaźnikowy używany do przekazywania wiadomości w sieci SimpleX. Aplikacje SimpleX Chat mają wstępnie ustawione serwery (dla aplikacji mobilnych są to smp11, smp12 i smp14.simplex.im), ale można łatwo zmienić konfigurację aplikacji, aby korzystać z innych serwerów. + +Klienty SimpleX określają tylko, który serwer jest używany do odbierania wiadomości, oddzielnie dla każdego kontaktu (lub połączenia grupowego z członkiem grupy), a serwery te są tylko tymczasowe, ponieważ adres dostawy może ulec zmianie. + +_Uwaga_: gdy zmienisz serwery w ustawieniach aplikacji, wpłynie to tylko na to, który serwer będzie używany dla nowych kontaktów, istniejące kontakty nie zostaną automatycznie przeniesione na nowe serwery, ale możesz przenieść je ręcznie za pomocą przycisku ["Zmień adres odbiorczy"](../blog/20221108-simplex-chat-v4.2-security-audit-new-website.md#change-your-delivery-address-beta) na stronie z informacjami kontaktu/członka - wkrótce zostanie to zautomatyzowane. + +## Instalacja + +1. Najpierw zainstaluj `smp-server`: + + - Manualna instalacja (patrz niżej) + + - Półautomatyczna instalacja: + - [Oficjalny skrypt instalacyjny](https://github.com/simplex-chat/simplexmq#using-installation-script) + - [Kontener Dockera](https://github.com/simplex-chat/simplexmq#using-docker) + - [Linode Marketplace](https://www.linode.com/marketplace/apps/simplex-chat/simplex-chat/) + +Instalacja ręczna wymaga kilku kroków wstępnych: + +1. Zainstaluj binarkę: + + - Używając oficjalnych binarek: + + ```sh + curl -L https://github.com/simplex-chat/simplexmq/releases/latest/download/smp-server-ubuntu-20_04-x86-64 -o /usr/local/bin/smp-server && chmod +x /usr/local/bin/smp-server + ``` + + - Budowanie z kodu źródłowego: + + Zobacz [Build from source: Using your distribution](https://github.com/simplex-chat/simplexmq#using-your-distribution) + +2. Utwórz użytkownika i grupę dla `smp-server`: + + ```sh + sudo useradd -m smp + ``` + +3. Utwórz niezbędne katalogi i przypisz uprawnienia: + + ```sh + sudo mkdir -p /var/opt/simplex /etc/opt/simplex + sudo chown smp:smp /var/opt/simplex /etc/opt/simplex + ``` + +4. Zezwól na port `smp-server` w firewallu: + + ```sh + # Dla Ubuntu + sudo ufw allow 5223/tcp + # Dla Fedory + sudo firewall-cmd --permanent --add-port=5223/tcp && \ + sudo firewall-cmd --reload + ``` + +5. **Opcjonalnie** - Jeśli używasz dystrybucji z `systemd`, utwórz plik `/etc/systemd/system/smp-server.service` z następującą zawartością: + + ```sh + [Unit] + Description=SMP server systemd service + + [Service] + User=smp + Group=smp + Type=simple + ExecStart=/usr/local/bin/smp-server start +RTS -N -RTS + ExecStopPost=/usr/bin/env sh -c '[ -e "/var/opt/simplex/smp-server-store.log" ] && cp "/var/opt/simplex/smp-server-store.log" "/var/opt/simplex/smp-server-store.log.bak"' + LimitNOFILE=65535 + KillSignal=SIGINT + TimeoutStopSec=infinity + + [Install] + WantedBy=multi-user.target + ``` + + I uruchom `sudo systemctl daemon-reload`. + +## Instalacja Tora + +smp-server można również zainstalować jako serwer działający w sieci [tor](https://www.torproject.org). Uruchom następujące polecenia jako użytkownik `root`. + +1. Zainstaluj Tor: + + Zakładamy, że używasz dystrybucji opartych na Ubuntu/Debian. Jeśli nie, zapoznaj się z [oficjalną dokumentacją tor](https://community.torproject.org/onion-services/setup/install/) lub poradnikiem dla Twojej dystrybucji. + + - Skonfiguruj oficjalne repozytorium Tor PPA: + + ```sh + CODENAME="$(lsb_release -c | awk '{print $2}')" + echo "deb [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org ${CODENAME} main + deb-src [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org ${CODENAME} main" > /etc/apt/sources.list.d/tor.list + ``` + + - Zimportuj klucz repozytorium: + + ```sh + curl --proto '=https' --tlsv1.2 -sSf https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --dearmor | tee /usr/share/keyrings/tor-archive-keyring.gpg >/dev/null + ``` + + - Zaktualizuj indeks repozytorium: + + ```sh + apt update + ``` + + - Zainstaluj paczkę `tor`: + + ```sh + apt install -y tor deb.torproject.org-keyring + ``` + +2. Skonfiguruj tor: + + - Konfiguracja pliku: + + Otwórz konfigurację tora w wybranym edytorze (`nano`,`vim`,`emacs`, itp.): + + ```sh + vim /etc/tor/torrc + ``` + + I umieść następujące linie na dole konfiguracji. Zwróć uwagę na linie zaczynające się od `#`: są to komentarze dotyczące poszczególnych opcji. + + ```sh + # Włącz logowanie (w przeciwnym razie tor nie wyda adresu onion). + Log notice file /var/log/tor/notices.log + # Włącz routowanie single hop (2 opcje poniżej są zależne od trzeciej). Zmniejszy to opóźnienie w zamian za anonimowość (jako że tor działa równolegle z serwerem smp i adres onion będzie wyświetlany w klientach, jest to całkowicie w porządku). + SOCKSPort 0 + HiddenServiceNonAnonymousMode 1 + HiddenServiceSingleHopMode 1 + # Katalog hostów i mapowanie portów usługi ukrytej smp-server + HiddenServiceDir /var/lib/tor/simplex-smp/ + HiddenServicePort 5223 localhost:5223 + ``` + + - Utwórz katalogi: + + ```sh + mkdir /var/lib/tor/simplex-smp/ && chown debian-tor:debian-tor /var/lib/tor/simplex-smp/ && chmod 700 /var/lib/tor/simplex-smp/ + ``` + +3. Uruchom tor: + + Włącz usługę `systemd` oraz uruchom tor. Oficjalny `tor` jest nieco kłopotliwy przy pierwszym uruchomieniu i może nie utworzyć adresu hosta cebuli, więc na wszelki wypadek uruchamiamy go ponownie. + + ```sh + systemctl enable tor && systemctl start tor && systemctl restart tor + ``` + +4. Wyświetla onionowego hosta: + + Wykonaj następujące polecenie, aby wyświetlić adres onionowego hosta: + + ```sh + cat /var/lib/tor/simplex-smp/hostname + ``` + +## Configuration + +Aby zobaczyć, jakie opcje są dostępne, wykonaj `smp-server` bez flag: + +```sh +sudo su smp -c smp-server + +... +Available commands: + init Initialize server - creates /etc/opt/simplex and + /var/opt/simplex directories and configuration files + start Start server (configuration: + /etc/opt/simplex/smp-server.ini) + delete Delete configuration and log files +``` + +Możesz uzyskać dalszą pomoc, wykonując polecenie `sudo su smp -c "smp-server -h"` + +Następnie musimy skonfigurować `smp-server`: + +### Interaktywnie + +Wykonaj poniższe polecenie: + +```sh +sudo su smp -c "smp-server init" +``` + +Istnieje kilka opcji, które należy rozważyć: + +- `Enable store log to restore queues and messages on server restart (Yn):` + + Wpisz `y`, aby włączyć zapisywanie i przywracanie połączeń i wiadomości po ponownym uruchomieniu serwera. + + _Uwaga_: ważne jest, aby użyć SIGINT do ponownego uruchomienia serwera, ponieważ w przeciwnym razie niedostarczone wiadomości nie zostaną przywrócone. Połączenia zostaną przywrócone niezależnie od sposobu ponownego uruchomienia serwera, ponieważ w przeciwieństwie do wiadomości są one dodawane do dziennika append-only. + +- `Enable logging daily statistics (yN):` + + Wpisz `y`, aby włączyć logowanie statystyk w formacie CSV, mogą one być przykładowo użyte do pokazania wykresów użycia w `Grafana`. + +Statystyki te obejmują dzienną liczbę utworzonych, zabezpieczonych i usuniętych kolejek, wysłanych i odebranych wiadomości, a także dzienną, tygodniową i miesięczną liczbę aktywnych kolejek (tj. kolejek, które były używane do wysyłania wiadomości). Uważamy, że informacje te nie zawierają niczego, co pozwoliłoby na skorelowanie różnych kolejek jako należących bezpośrednio do użytkowników, ale prosimy o poufne poinformowanie nas, jeśli uważasz, że można to w jakikolwiek sposób nadużyć. + +- `Require a password to create new messaging queues?` + + Wpisz `r` lub dowolne hasło, aby zabezpieczyć hasłem `smp-server`, lub `n`, aby wyłączyć ochronę hasłem. + +- `Enter server FQDN or IP address for certificate (127.0.0.1):` + + Wprowadź domenę lub adres IP, na którym działa Twój smp-server - zostanie on zamieszczony w certyfikatach serwera, a także wyświetlony jako część adresu serwera. + +### Za pomocą opcji wiersza poleceń + +Wykonaj poniższe polecenie: + +```sh +sudo su smp -c "smp-server init -h" + +... +Available options: + -l,--store-log Enable store log for persistence + -s,--daily-stats Enable logging daily server statistics + -a,--sign-algorithm ALG Signature algorithm used for TLS certificates: + ED25519, ED448 (default: ED448) + --ip IP Server IP address, used as Common Name for TLS online + certificate if FQDN is not supplied + (default: "127.0.0.1") + -n,--fqdn FQDN Server FQDN used as Common Name for TLS online + certificate + --no-password Allow creating new queues without password + --password PASSWORD Set password to create new messaging queues + -y,--yes Non-interactive initialization using command-line + options + -h,--help Show this help text +``` + +Powinieneś określić, które flagi są potrzebne dla Twojego zastosowania, a następnie wykonać `smp-server init` z flagą `-y` dla nieinteraktywnej inicjalizacji: + +```sh +sudo su smp -c "smp-server init -y - " +``` + +Przykładowo, uruchom: + +```sh +sudo su smp -c "smp-server init -y -l --ip 192.168.1.5 --password test" +``` + +aby zainicjować konfigurację `smp-server` z: + +- przywracaniem połączeń i wiadomości po ponownym uruchomieniu serwera (flaga `-l`), +- adresem IP `192.168.1.5`, +- zabezpieczeniem `smp-server` hasłem `test`. + +--- + +Po tym instalacja jest ukończona i powinieneś zobaczyć coś takiego: + +```sh +Certificate request self-signature ok +subject=CN = 127.0.0.1 +Server initialized, you can modify configuration in /etc/opt/simplex/smp-server.ini. +Run `smp-server start` to start server. +---------- +You should store CA private key securely and delete it from the server. +If server TLS credential is compromised this key can be used to sign a new one, keeping the same server identity and established connections. +CA private key location: /etc/opt/simplex/ca.key +---------- +SMP server v3.4.0 +Fingerprint: d5fcsc7hhtPpexYUbI2XPxDbyU2d3WsVmROimcL90ss= +Server address: smp://d5fcsc7hhtPpexYUbI2XPxDbyU2d3WsVmROimcL90ss=:V8ONoJ6ICwnrZnTC_QuSHfCEYq53uLaJKQ_oIC6-ve8=@ +``` + +Powyższy adres serwera powinien być użyty w konfiguracji klienta, a jeśli dodałeś hasło serwera, powinno ono być udostępnione innym osobom tylko wtedy, gdy chcesz zezwolić im na korzystanie z Twojego serwera do odbierania wiadomości (wszystkie Twoje kontakty będą mogły wysyłać wiadomości, ponieważ nie wymaga to hasła). Jeśli podałeś adres IP lub nazwę hosta podczas instalacji, zostanie to wyświetlone jako część adresu serwera, w przeciwnym razie zastąp `` rzeczywistymi adresami serwerów. + +## Dokumentacja + +Wszystkie niezbędne pliki dla `smp-server` znajdują się w folderze `/etc/opt/simplex/`. + +Przechowywane wiadomości, połączenia, statystyki i dziennik serwera znajdują się w folderze `/var/opt/simplex/`. + +### Adres serwera SMP + +Adres serwera SMP ma następujący format: + +``` +smp://[:]@[,] +``` + +- `` + + To odcisk palca certyfikatu Twojego `smp-server`. Odcisk palca certyfikatu możesz sprawdzić w `/etc/opt/simplex/fingerprint`. + +- **opcjonalnie** `` + + To ustawione przez Ciebie hasło Twojego `smp-server`. Możesz sprawdzić to hasło w pliku `/etc/opt/simplex/smp-server.ini`, w sekcji `[AUTH]` w polu `create_password:`. + +- ``, **optional** `` + + To skonfigurowane przez Ciebie nazwy hosta Twojego `smp-server`. Nazwy hostów możesz sprawdzić w pliku `/etc/opt/simplex/smp-server.ini`, w sekcji `[TRANSPORT]` w polu `host:`. + +### Komendy systemd + +Aby uruchomić `smp-server` przy starcie hosta, uruchom: + +```sh +sudo systemctl enable smp-server.service + +Created symlink /etc/systemd/system/multi-user.target.wants/smp-server.service → /etc/systemd/system/smp-server.service. +``` + +Aby uruchomić `smp-server`, uruchom: + +```sh +sudo systemctl start smp-server.service +``` + +Aby sprawdzić status `smp-server`, uruchom: + +```sh +sudo systemctl status smp-server.service + +● smp-server.service - SMP server + Loaded: loaded (/etc/systemd/system/smp-server.service; enabled; vendor preset: enabled) + Active: active (running) since Sat 2022-11-23 19:23:21 UTC; 1min 48s ago + Main PID: 30878 (smp-server) + CGroup: /docker/5588ab759e80546b4296a7c50ffebbb1fb7b55b8401300e9201313b720989aa8/system.slice/smp-server.service + └─30878 smp-server start + +Nov 23 19:23:21 5588ab759e80 systemd[1]: Started SMP server. +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: SMP server v3.4.0 +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: Fingerprint: d5fcsc7hhtPpexYUbI2XPxDbyU2d3WsVmROimcL90ss= +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: Server address: smp://d5fcsc7hhtPpexYUbI2XPxDbyU2d3WsVmROimcL90ss=:V8ONoJ6ICwnrZnTC_QuSHfCEYq53uLaJKQ_oIC6-ve8=@ +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: Store log: /var/opt/simplex/smp-server-store.log +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: Listening on port 5223 (TLS)... +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: not expiring inactive clients +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: creating new queues requires password +``` + +Aby zatrzymać `smp-server`, uruchom: + +```sh +sudo systemctl stop smp-server.service +``` + +Aby sprawdzić zawartość dziennika `smp-server`, uruchom: + +```sh +sudo journalctl -fu smp-server.service + +Nov 23 19:23:21 5588ab759e80 systemd[1]: Started SMP server. +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: SMP server v3.4.0 +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: Fingerprint: d5fcsc7hhtPpexYUbI2XPxDbyU2d3WsVmROimcL90ss= +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: Server address: smp://d5fcsc7hhtPpexYUbI2XPxDbyU2d3WsVmROimcL90ss=:V8ONoJ6ICwnrZnTC_QuSHfCEYq53uLaJKQ_oIC6-ve8=@ +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: Store log: /var/opt/simplex/smp-server-store.log +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: Listening on port 5223 (TLS)... +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: not expiring inactive clients +Nov 23 19:23:21 5588ab759e80 smp-server[30878]: creating new queues requires password +``` + +### Monitorowanie + +Możesz włączyć statystyki `smp-server` dla dashboardu `Grafana` ustawiając wartość `on` w `/etc/opt/simplex/smp-server.ini`, w sekcji `[STORE_LOG]` w polu `log_stats:`. + +Logi będą przechowywane jako plik `csv` w `/var/opt/simplex/smp-server-stats.daily.log`. Pola dla pliku `csv` to: + +```sh +fromTime,qCreated,qSecured,qDeleted,msgSent,msgRecv,dayMsgQueues,weekMsgQueues,monthMsgQueues +``` + +- `fromTime` - timestamp; data i godzina zdarzenia + +- `qCreated` - int; utworzone kolejki + +- `qSecured` - int; ustanowione kolejki + +- `qDeleted` - int; usunięte queues + +- `msgSent` - int; wysłane wiadomości + +- `msgRecv` - int; odebrane wiadomości + +- `dayMsgQueues` - int; aktywnych kolejek podczas dnia + +- `weekMsgQueues` - int; aktywnych kolejek w tygodniu + +- `monthMsgQueues` - int; aktywnych kolejek w miesiącu + +Aby zaimportować `csv` do `Grafana` należy: + +1. Zainstalować wtyczkę Grafana: [Grafana - CSV datasource](https://grafana.com/grafana/plugins/marcusolsson-csv-datasource/) + +2. Zezwolić na tryb lokalny, dołączając następujące elementy: + + ```sh + [plugin.marcusolsson-csv-datasource] + allow_local_mode = true + ``` + + ... do `/etc/grafana/grafana.ini` + +3. Dodaj źródło danych CSV: + + - W menu bocznym kliknij zakładkę Configuration (ikona koła zębatego) + - Kliknij Add data source (Dodaj źródło danych) w prawym górnym rogu zakładki Data Sources (Źródła danych). + - Wpisz "CSV" w polu wyszukiwania, aby znaleźć źródło danych CSV. + - Kliknij wynik wyszukiwania z napisem "CSV". + - W polu URL wprowadź plik wskazujący na zawartość CSV. + +4. Gotowe! Teraz możesz utworzyć własny pulpit nawigacyjny ze statystykami. + +Dalsza dokumentacja znajduje się na stronie: [CSV Data Source for Grafana - Documentation](https://grafana.github.io/grafana-csv-datasource/). + +# Aktualizowanie twojego serwera SMP + +Aby zaktualizować smp-server do najnowszej wersji, wybierz metodę instalacji i postępuj zgodnie z instrukcjami: + + - Manualnie + 1. Zatrzymaj serwer: + ```sh + sudo systemctl stop smp-server + ``` + 2. Zaktualizuj binarkę: + ```sh + curl -L https://github.com/simplex-chat/simplexmq/releases/latest/download/smp-server-ubuntu-20_04-x86-64 -o /usr/local/bin/smp-server && chmod +x /usr/local/bin/smp-server + ``` + 3. Uruchom serwer: + ```sh + sudo systemctl start smp-server + ``` + + - Używając [oficjalnego skryptu instalacyjnego](https://github.com/simplex-chat/simplexmq#using-installation-script) + 1. Uruchom: + ```sh + sudo simplex-servers-update + ``` + 2. Gotowe! + + - Używając [kontenera Dockera](https://github.com/simplex-chat/simplexmq#using-docker) + 1. Zatrzymaj i usuń kontener: + ```sh + docker rm $(docker stop $(docker ps -a -q --filter ancestor=simplexchat/smp-server --format="\{\{.ID\}\}")) + ``` + 2. Pobierz najnowszą wersję kontenera: + ```sh + docker pull simplexchat/smp-server:latest + ``` + 3. Uruchom nowy kontener: + ```sh + docker run -d \ + -p 5223:5223 \ + -v $HOME/simplex/smp/config:/etc/opt/simplex:z \ + -v $HOME/simplex/smp/logs:/var/opt/simplex:z \ + simplexchat/smp-server:latest + ``` + + - [Linode Marketplace](https://www.linode.com/marketplace/apps/simplex-chat/simplex-chat/) + 1. Pobierz najnowsze obrazy: + ```sh + docker-compose --project-directory /etc/docker/compose/simplex pull + ``` + 2. Zrestartuj kontenery: + ```sh + docker-compose --project-directory /etc/docker/compose/simplex up -d --remove-orphans + ``` + 3. Usuń niepotrzebne obrazy: + ```sh + docker image prune + ``` + +### Konfigurowanie aplikacji do korzystania z serwera + +Aby skonfigurować aplikację do korzystania z serwera wiadomości, skopiuj jego pełny adres, w tym hasło, i dodaj go do aplikacji. Możesz używać swojego serwera razem z predefiniowanymi serwerami lub bez nich - możesz je usunąć lub wyłączyć. + +Możliwe jest również udostępnienie adresu swojego serwera znajomym, pozwalając im zeskanować kod QR z ustawień serwera - będzie on zawierał hasło serwera, dzięki czemu będą mogli również otrzymywać wiadomości za pośrednictwem twojego serwera. + +_Uwaga_: Do obsługi haseł wymagany jest serwer SMP w wersji 4.0. Jeśli już posiadasz serwer, możesz dodać hasło do niego poprzez wpisanie hasła do pliku INI serwera. + +       diff --git a/docs/lang/pl/SIMPLEX.md b/docs/lang/pl/SIMPLEX.md new file mode 100644 index 0000000000..ff7106d84c --- /dev/null +++ b/docs/lang/pl/SIMPLEX.md @@ -0,0 +1,102 @@ +--- +title: Platfoma SimpleX +revision: 07.02.2023 +--- + +| Updated 07.02.2023 | Języki: PL, [EN](/docs/SIMPLEX.md), [FR](/docs/lang/fr/SIMPLEX.md), [CZ](/docs/lang/cs/SIMPLEX.md) | +# Platfoma SimpleX - motywacja i porównanie + +## Problemy + +Istniejące komunikatory oraz protokoły borykają się ze wszystkimi lub kilkoma podanymi problemami: + +- Brak zachowania prywatności profilu i kontaktów użytkownika (zachowanie poufności metadanych). +- Brak ochrony (lub jedynie opcjonalna ochrona) przed atakami MITM przez dostawcę usług przy użyciu szyfrowania [end to end](1) +- Niechciane wiadomości (spam i nadużycia). +- Brak własności danych i ich ochrony. +- Dla nietechnicznych użytkowników używanie niescentralizowanych protokołów jest skomplikowane. + +Koncentracja komunikacji na niewielkiej liczbie scentralizowanych platform sprawia, że rozwiązanie tych problemów jest dość trudne. + +## Proponowane rozwiązanie + +Proponowany zestaw protokołów pozwala rozwiązać te problemy poprzez przechowywanie zarówno wiadomości, jak i kontaktów wyłącznie na urządzeniach klienckich, redukując rolę serwerów do zwykłych przekaźników wiadomości. Wymagają one jedynie autoryzacji wiadomości wysyłanych do kolejek, ale NIE wymagają uwierzytelniania użytkowników - dzięki temu chronione są nie tylko wiadomości, ale także metadane, ponieważ użytkownicy nie mają przypisanych do siebie żadnych identyfikatorów - w przeciwieństwie do innych platform. + +Zobacz [whitepaper](https://github.com/simplex-chat/simplexmq/blob/master/protocol/overview-tjr.md) po więcej informacji o zadaniach platformy oraz by dowiedzieć się jak wygląda koncepcja techniczna modelu. + +## Dlaczego SimpleX + +## SimpleX podchodzi do problemu prywatności i bezpieczeństwa w unikalny sposób + +Każdy powinien zwracać uwagę na prywatność i bezpieczeństwo swojej komunikacji - nawet zwykłe rozmowy mogą narazić Cię na niebezpieczeństwo. + +### Pełna prywatność Twojej tożsamości, profilu, kontaktu i metadanych + +**W przeciwieństwie do innych komunikatorów, SimpleX nie posiada żadnych identyfikatorów przypisanych do użytkowników** - nie wymaga użycia numeru telefonu (jak Signal czy Whatsapp), adresu opartego o domenę (jak email, XMPP czy Matrix), nazw użytkownika (jak Telegram), kluczy publicznych czy nawet losowych numerów (jak pozostałe komunikatory) do identyfikowania użytkowników - nie wiemy nawet ile osób używa SimpleX. + +Do dostarczania wiadomości zamiast identyfikatorów użytkowników, których używają wszystkie inne platformy, SimpleX wykorzystuje adresy jednokierunkowych (simpleksowych) kolejek wiadomości. Korzystanie z SimpleX jest jak posiadanie innego adresu e-mail lub numeru telefonu dla każdego kontaktu, ale bez kłopotów z zarządzaniem tymi wszystkimi adresami. W niedalekiej przyszłości aplikacje SimpleX będą również automatycznie zmieniać kolejki wiadomości, przenosząc konwersacje z jednego serwera na drugi, aby zapewnić użytkownikom jeszcze lepszą prywatność. + +Takie podejście chroni prywatność tego, z kim się komunikujesz, ukrywając jego tożsamość oraz fakt komunikacji przed serwerami platformy SimpleX i wszelkimi obserwatorami. Prywatność komunikacji można dodatkowo zwiększyć, konfigurując dostęp do sieci w taki sposób, by łączyć się z serwerami SimpleX za pośrednictwem sieci transportowej typu overlay, np. sieci Tor. + +### Najlepsza ochrona przed spamem i nadużyciami + +Ponieważ nie masz żadnego identyfikatora na platformie SimpleX, nie można się z Tobą skontaktować, chyba że udostępnisz jednorazowy link z zaproszeniem lub opcjonalny tymczasowy adres użytkownika. Nawet przy użyciu opcjonalnych adresów użytkownika, które mogą być wykorzystywane do wysyłania spamu z prośbami o kontakt, można je zmienić lub całkowicie usunąć bez utraty jakichkolwiek połączeń (kontaktów). + +### Pełna kontrola i bezpieczeństwo Twoich danych + +SimpleX przechowuje wszystkie dane użytkownika na urządzeniach klienckich, wiadomości są przetrzymywane tylko tymczasowo na serwerach przekaźnikowych SimpleX do momentu ich odebrania, po czym są trwale usuwane. + +Używamy przenośnego formatu bazy danych, który może być używany na wszystkich obsługiwanych urządzeniach - wkrótce dodamy możliwość eksportu bazy danych czatu z aplikacji mobilnej, aby można było jej używać na innym urządzeniu. + +W przeciwieństwie do serwerów sieci federowanych (e-mail, XMPP lub Matrix), serwery SimpleX nie przechowują kont użytkowników, a jedynie przekazują wiadomości do odbiorców, chroniąc prywatność obu stron. Nie ma żadnych identyfikatorów ani zaszyfrowanych wiadomości występujących wspólnie z wysłanym i odbieranym ruchem serwera, dzięki dodatkowej warstwie szyfrowania dostarczanych wiadomości. Jeśli więc ktoś obserwuje ruch na serwerze, nie może łatwo określić, kto komunikuje się z kim (sprawdź [SimpleX whitepaper](https://github.com/simplex-chat/simplexmq/blob/master/protocol/overview-tjr.md) by dowiedzieć się o znanych atakach korelacji ruchu). + +### Użytkownicy są właścicielami sieci SimpleX + +Możesz używać SimpleX na własnych serwerach i nadal komunikować się z ludźmi za pomocą serwerów, które są wstępnie skonfigurowane w aplikacjach lub z dowolnymi innymi serwerami SimpleX. + +Platforma SimpleX korzysta z otwartego protokołu i zapewnia zestaw SDK do tworzenia czatbotów, umożliwiając implementację usług, z którymi użytkownicy mogą wchodzić w interakcje za pośrednictwem aplikacji SimpleX Chat - naprawdę nie możemy się doczekać, aby zobaczyć, jakie usługi oparte o SimpleX można stworzyć. + +Jeśli rozważasz stworzenie czegoś w oparciu o platformę SimpleX, niezależnie od tego, czy chodzi o usługi czatbotów dla użytkowników aplikacji SimpleX, czy też integrację biblioteki SimpleX Chat z aplikacjami mobilnymi, skontaktuj się z nami, aby uzyskać porady i wsparcie. + +## Porównanie z innymi protokołami + +| | SimpleX Chat | Signal, duże platformy | XMPP, Matrix | Protokoły P2P | +| :---------------------------------------------------------- | :----------------------: | :--------------------: | :-------------: | :-------------: | +| Wymaga identyfikatorów użytkownika | Nie = prywatny | Tak1 | Tak2 | Tak3 | +| Możliwość ataku MITM | Nie = bezpieczny | Tak4 | Tak | Tak | +| Polega na DNS | Nie = odporny na cenzurę | Tak | Tak | Nie | +| Pojedynczy operator lub sieć | Nie = zdecentralizowany | Tak | Nie | Tak5 | +| Scentralizowanie lub możliwość ataku obejmującego całą sieć | Nie = odporny na cenzurę | Tak | Tak2 | Tak6 | + +1. Zwykle opiera się na numerze telefonu, w niektórych przypadkach na nazwie użytkownika. +2. Bazuje na DNS. +3. Klucz publiczny lub inny globalnie unikalny identyfikator. +4. Jeśli serwery operatora zostaną przejęte. +5. Mimo że sieci P2P i sieci oparte na kryptowalutach są rozproszone, nie są w pełni zdecentralizowane - działają jako pojedyncza sieć, z pojedynczą przestrzenią nazw adresów użytkowników. +6. Sieci P2P albo mają jakiś centralny serwer, albo cała sieć może zostać przejęta - patrz następna sekcja. + +## Porównanie z komunikatorami [P2P][9] + +Istnieje kilka protokołów czatu/wiadomości P2P i implementacji, które mają na celu rozwiązanie problemu prywatności i centralizacji, ale mają one swój własny szereg problemów, które sprawiają, że są mniej niezawodne niż proponowany projekt, są bardziej skomplikowane w implementacji i analizie oraz są bardziej podatne na ataki. + +1. Sieci [P2P][9] korzystają z jakiegoś rodzaju [DHT][10] do routowania wiadomości/zapytań po sieci. Implementacje DHT mają złożone konstrukcje, muszą równoważyć niezawodność, gwarancję dostawy i czas oczekiwania. Proponowany model zapewnia zarówno większą gwarancję dostarczalności, jak i mniejsze opóźnienia (wiadomość jest przekazywana wiele razy równolegle, za każdym razem przez jeden węzeł, przy użyciu serwerów wybranych przez odbiorcę, podczas gdy w sieciach P2P wiadomość jest przekazywana przez `O(log N)` węzłów sekwencyjnie, przy użyciu węzłów wybranych przez algorytm). + +2. Proponowany model, w przeciwieństwie do większości sieci P2P, nie posiada żadnych globalnych identyfikatorów użytkowników, nawet tymczasowych. + +3. P2P samo w sobie nie rozwiązuje problemu [ataku MITM][2], a większość istniejących rozwiązań nie wykorzystuje komunikacji out-of-band do początkowej wymiany kluczy. Proponowany projekt wykorzystuje wiadomości out-of-band lub (w niektórych przypadkach) istniejące wcześniej bezpieczne i zaufane połączenia do początkowej wymiany kluczy. + +4. Implementacje P2P mogą być blokowane przez niektórych dostawców Internetu (tak jak [BitTorrent][11]). Proponowany model jest niezależny od rodzaju transmisji - może działać na standardowych protokołach sieciowych, a serwery mogą działać na tych samych domenach, co strony internetowe. + +5. Wszystkie znane sieci P2P mogą być podatne na [atak typu Sybil][12], ponieważ każdy węzeł jest wykrywalny, a sieć działa jako całość. Znane środki mające na celu zmniejszenie prawdopodobieństwa ataku typu Sybil wymagają zastosowania scentralizowanego komponentu lub kosztownego [proof of work][13]. Proponowany model, przeciwnie, nie ma możliwości wykrycia serwera - serwery nie są połączone, nie są znane sobie nawzajem i wszystkim klientom. Sieć SimpleX jest pofragmentowana i działa jako wiele odizolowanych połączeń. Uniemożliwia to ataki na całą sieć SimpleX - nawet jeśli niektóre serwery są zagrożone, inne części sieci mogą działać normalnie, a dotknięci atakiem użytkownicy mogą przełączyć się na inne serwery bez utraty kontaktów lub wiadomości. + +6. Sieci P2P są prawdopodobnie [podatne][14] na [atak DRDoS][15]. W proponowanym modelu klienci przekazują tylko ruch ze znanych zaufanych połączeń i nie mogą być wykorzystywani do odbijania i wzmacniania ruchu w całej sieci. + +[1]: https://pl.wikipedia.org/wiki/Szyfrowanie_od_ko%C5%84ca_do_ko%C5%84ca +[2]: https://pl.wikipedia.org/wiki/Atak_man_in_the_middle +[9]: https://pl.wikipedia.org/wiki/Peer-to-peer +[10]: https://pl.wikipedia.org/wiki/Rozproszona_tablica_mieszaj%C4%85ca +[11]: https://pl.wikipedia.org/wiki/BitTorrent +[12]: https://en.wikipedia.org/wiki/Sybil_attack +[13]: https://pl.wikipedia.org/wiki/Proof_of_Work +[14]: https://www.usenix.org/conference/woot15/workshop-program/presentation/p2p-file-sharing-hell-exploiting-bittorrent +[15]: https://pl.wikipedia.org/wiki/DRDoS diff --git a/docs/lang/pl/TRANSLATIONS.md b/docs/lang/pl/TRANSLATIONS.md new file mode 100644 index 0000000000..36daa5a148 --- /dev/null +++ b/docs/lang/pl/TRANSLATIONS.md @@ -0,0 +1,104 @@ +--- +title: Współtworzenie tłumaczenia SimpleX Chat +revision: 19.03.2023 +--- + +| 19.03.2023 | PL, [EN](/docs/TRANSLATIONS.md), [CZ](/docs/lang/cs/TRANSLATIONS.md), [FR](/docs/lang/fr/TRANSLATIONS.md)| + +# Współtworzenie tłumaczenia SimpleX Chat + +Dziękujemy za zainteresowanie się tłumaczeniem SimpleX Chat - to bardzo pomaga w uczynieniu go dostępnym dla szerszego grona użytkowników i naprawdę doceniamy Twoją pomoc. + +Wymaga to znacznej inwestycji czasu - większość ludzi tego początkowo nie docenia - oraz stałej opieki w miarę rozwoju aplikacji. + +Ten dokument został stworzony, po to by przyspieszyć ten proces i podzielić się kilkoma ważnymi "gafami", które odkryliśmy podczas pracy z Weblate - platformą, której używamy do tłumaczeń interfejsu. + +## Zanim rozpoczniesz tłumaczenie + +1. Utwórz konto w Weblate, używając tego samego adresu e-mail, którego używasz na platformie GitHub - dzięki temu Twój wkład będzie powiązany z kontem GitHub, co może okazać się dla Ciebie przydatne w niektórych przypadkach. Gdy tłumaczenie zostanie udostępnione użytkownikom, dodamy nazwę twojego konta do [listy tłumaczy] (https://github.com/simplex-chat/simplex-chat#translate-the-apps), chyba że poprosisz nas, abyśmy tego nie robili. + +2. Przed rozpoczęciem tłumaczenia należy podpisać prostą umowę licencyjną za pośrednictwem Weblate - ma to na celu uniknięcie konfliktów związanych z prawami własności intelektualnej. Kopia tej umowy jest również [dostępna tutaj](https://github.com/simplex-chat/cla/blob/master/CLA.md). + +3. Możemy również dodać Cię do grupy tłumaczy w przypadku jakichkolwiek pytań i aktualizacji - skontaktuj się z programistami za pośrednictwem czatu (po zainstalowaniu aplikacji lub później, poprzez "Wyślij pytania i pomysły" w ustawieniach aplikacji). + +## Proces tłumaczenia + +Najłatwiej jest najpierw przetłumaczyć aplikację na Androida, a dopiero później aplikację na iOS, ponieważ przetłumaczone ciągi Androidowej aplikacji są skonfigurowane jako słownik dla iOS. + +Kroki są następujące: + +1. [Tłumaczysz aplikację na Androida](#translating-android-app) w Weblate. +2. [Sprawdzamy i publikujemy tłumaczenia aplikacji na Androida](#releasing-android-app-translations). +3. Sprawdzasz tłumaczenia w aplikacji i poprawiasz ewentualne błędy. +4. [Tłumaczysz aplikację iOS w Weblate](#translating-ios-app). +5. Sprawdzamy i publikujemy tłumaczenia aplikacji iOS. + +### Tłumaczenie aplikacji na Androida + +1. Zacznij od [aplikacji na Androida](https://hosted.weblate.org/projects/simplex-chat/android/), zarówno podczas wykonywania najbardziej czasochłonnego tłumaczenia wstępnego, jak i dodawania ciągów później. Ze względu na to, że po pierwsze, ciągi w systemie iOS mogą pojawiać się w Weblate z pewnym opóźnieniem, ponieważ wymagają ręcznego zatwierdzenia z naszej strony, zanim będą widoczne, a po drugie, aplikacja na Androida jest skonfigurowana jako słownik dla aplikacji na iOS. 2/3 wszystkich ciągów wymaga tylko kliknięcia, aby przenieść je z Androida na iOS (nadal zajmuje to trochę czasu, Weblate niestety tego nie automatyzuje). + +2. Niektóre ciągi nie wymagają tłumaczenia, ale nadal trzeba je skopiować - w interfejsie użytkownika weblate znajduje się odpowiedni przycisk: + +weblate: copy source to translation + +3. Weblate posiada również automatyczne sugestie, które mogą przyspieszyć ten proces. Czasami mogą być używane w niezmienionej formie, a czasami wymagają edycji - kliknij, aby użyć ich w tłumaczeniach. + +4. Zwróć również uwagę na Klucz ciągu (znajduje się po prawej stronie ekranu) - może on dać ci podpowiedź, co ten ciąg oznacza, gdy jego znaczenie jest niejasne. Przykładowo, klucz dla " Dodatkowy akcent" ( nie wiadomo) to "color_primary_variant" (nieco bardziej jasne, że odnosi się do koloru używanego w aplikacji). + +5. Gdy wszystkie ciągi w aplikacji na Androida zostaną przetłumaczone, przejrzyj je, aby zapewnić spójny styl i język, tak aby te same słowa były konsekwentnie używane do podobnych działań użytkownika, tak samo jak w języku angielskim. Czasami będziesz musiał użyć różnych słów w przypadkach, gdy angielski ma tylko jedno, spróbuj użyć tych wyborów spójnie w podobnych kontekstach, aby uprościć obsługę użytkownikom końcowym. + +Prosimy również o sprawdzenie tłumaczeń przy użyciu przeglądarki Chrome i funkcji *Tłumacz na angielski* w trybie _Przeglądaj_ w weblate - tak będziemy sprawdzać tłumaczenia przed ich opublikowaniem. Popraw wszelkie błędy i dodaj komentarze w przypadkach, gdy uzasadnione jest użycie różnych tłumaczeń - znacznie przyspieszy to weryfikację. + +### Udostępnianie tłumaczeń dla aplikacji na Androida + +Gdy aplikacja na Androida zostanie przetłumaczona, poinformuj nas o tym. + +My wtedy: + - przejrzymy wszystkie tłumaczenia i zasugerujemy ewentualne poprawki - to również zajmie trochę czasu :) + - scalimy je z kodem źródłowym - w tym czasie weblate będzie ustawiony na blokadę zmian. + - stworzymy wersje beta aplikacji na iOS i Androida - możemy również dodać Cię do wewnętrznych grup testerów, abyś mógł zainstalować aplikacje przed innymi. + - udostępnimy ją naszym użytkownikom korzystającym z wersji beta - już ponad tysiąc osób korzysta z wersji beta. + - wydamy aplikację i uwzględnimy nowy język w ogłoszeniu. + +### Tłumaczenie aplikacji iOS + +1. Podczas tłumaczenia [aplikacji iOS](https://hosted.weblate.org/projects/simplex-chat/ios/) duża część ciągów jest dokładnie taka sama - można je skopiować jednym kliknięciem w sekcji słowniczka. Wskazówką jest podświetlenie całego ciągu źródłowego na żółto. Wiele innych ciągów jest bardzo do siebie podobnych, różnią się jedynie składnią lub sposobem pogrubienia czcionki - wymagają one minimalnej edycji. Istnieją jednak pewne ciągi które są unikalne dla platformy iOS - należy je przetłumaczyć osobno + +2. Przejrzyj tłumaczenia na iOS w taki sam sposób jak na Androida i daj nam znać, kiedy będą gotowe do sprawdzenia - powtórzymy ten sam proces dla aplikacji na iOS. + +Serdecznie dziękujemy! To ogromny wysiłek i wielka pomoc dla rozwoju sieci SimpleX. + +weblate: automatic suggestions + +## Częste błędy w tłumaczeniu + +1. Słowo "chat" jest używane w kilku znaczeniach, w zależności od kontekstu. Może ono oznaczać "aplikację SimpleX Chat" (np. w opcji Rozpocznij/zatrzymaj czat) lub "pojedynczą rozmowę". Jeśli nie jest to jasne, zapytaj się nas, a my dodamy więcej uwag dotyczących tłumaczenia. + +2. Prosimy o używanie liczby mnogiej i pojedynczej tak jak w oryginalnych ciągach, w przeciwnym razie może to zmienić ich znaczenie. Przykładowo, niektóre ustawienia mają zastosowanie do wszystkich kontaktów, a niektóre tylko do jednego kontaktu, będzie to mylące dla użytkownika, jeśli użyjesz liczby mnogiej w obu przypadkach. + +3. Aplikacja używa "Passcode" do zapewnienia dostępu, a nie "hasła" ("password") - w wielu językach jest to tłumaczone jako "kod dostępu". Baza danych używa "Passphrase" - w wielu językach jest to tłumaczone jako "hasło". Prosimy o spójne używanie tych słów. + +4. "Rola" użytkownika. To słowo odnosi się do zestawu uprawnień posiadanych przez użytkownika, może to być "właściciel", "administrator", "członek" lub "obserwator" (najniższe uprawnienie, które pozwala tylko na czytanie wiadomości i dodawanie reakcji na wiadomości). Tłumaczenie tego jako "tożsamość" lub "funkcja" może być nieprawidłowe. + +5. "Moderate" / "moderated" ("moderować" / "zmoderowany"). Te słowa oznaczają odpowiednio "usunięcie wiadomości innego użytkownika" i "usunięcie przez administratora". Ta funkcja jest używana, gdy członek wysyła wiadomość, która nie jest odpowiednia dla grupy. Wiele języków ma podobne słowa. + +## Jak sprawdzamy tłumaczenia + +Aby zweryfikować poprawność tłumaczeń, sprawdzamy tłumaczenia poprzez przeglądanie stron Weblate w przeglądarce Google Chrome w trybie "Tłumacz na angielski". Na przykład, aby sprawdzić niemieckie tłumaczenia interfejsu Androida, ktoś z naszego zespołu przewinął [te 68 stron] (https://hosted.weblate.org/browse/simplex-chat/android/de/). + +Nie oczekujemy, że odwrócone tłumaczenie będzie dokładnie takie samo jak oryginał, rzadko się to zdarza, ale że będzie ogólnie poprawne. + +Znacznie ułatwiłoby to recenzję, gdybyś mógł wcześniej sprawdzić to w ten sam sposób i skomentować wszystkie przypadki, w których odwrócone tłumaczenia są zupełnie inne (mogą istnieć uzasadnione przypadki). + +## Co dalej + +1. W miarę aktualizowania aplikacji będziemy publikować aktualizacje w grupie tłumaczy. Nie masz absolutnie żadnego obowiązku tłumaczenia tych dodatkowych ciągów. Niemniej jednak bardzo docenimy, jeśli to zrobisz, ponieważ sprawia to, że użytkownicy mają o wiele lepsze wrażenia, gdy polegają na Twoich tłumaczeniach, niż gdyby jakaś nowa część aplikacji nie została przetłumaczona. + +2. Możesz jeszcze bardziej pomóc w popularyzacji SimpleX w swoim kraju / grupie językowej, tłumacząc [naszą stronę internetową](https://simplex.chat) (również [przez weblate](https://hosted.weblate.org/projects/simplex-chat/website/)) i/lub [dokumenty GitHub](https://github.com/simplex-chat/simplex-chat/tree/master/docs/lang) (jest to możliwe tylko przez git)! + +3. Ponadto, jeśli chcesz być moderatorem / administratorem grupy użytkowników w swoim języku, po przetłumaczeniu aplikacji możemy hostować taką grupę - przygotowujemy wytyczne dla społeczności i dodajemy kilka narzędzi moderacyjnych do aplikacji, która zostanie wydana w wersji 4.6 w marcu. + + +Jeszcze raz bardzo dziękujemy za pomoc w rozwoju SimpleX Chat! + +Evgeny, założyciel SimpleX Chat. diff --git a/docs/lang/pl/WEBRTC.md b/docs/lang/pl/WEBRTC.md new file mode 100644 index 0000000000..d279491fb8 --- /dev/null +++ b/docs/lang/pl/WEBRTC.md @@ -0,0 +1,158 @@ +--- +title: Korzystanie z niestandardowych serwerów WebRTC ICE w SimpleX Chat +revision: 31.01.2023 +--- + +| Updated 31.01.2023 | Języki: PL, [EN](/docs/WEBRTC.md), [FR](/docs/lang/fr/WEBRTC.md), [CZ](/docs/lang/cs/WEBRTC.md) | + +# Korzystanie z niestandardowych serwerów WebRTC ICE w SimpleX Chat + +## Instalacja serwera STUN/TURN + +W tym poradniku będziemy używać najbardziej funkcjonalnej i przetestowanej w boju implementacji serwera STUN/TURN - [`coturn`](https://github.com/coturn/coturn) i [Ubuntu 20.04 LTS`](https://ubuntu.com/download/server) dystrybucji Linuksa. + +0. Uzyskaj certyfikaty `stun.$TWOJA_DOMENA` i `turn.$TWOJA_DOMENA`. + + Używamy [Let's Encrypt](https://letsencrypt.org/getting-started/). + +1. Zainstaluj pakiet `coturn` z głównego repozytorium. + +```sh +apt update && apt install coturn` +``` + +2. Odkomentuj `TURNSERVER_ENABLED=1` z `/etc/default/coturn`: + +```sh +sed -i '/TURN/s/^#//g' /etc/default/coturn +``` + +3. Skonfiguruj `coturn` w `/etc/turnserver.conf`: + + Zobacz również komentarze dotyczące poszczególnych opcji. + +```sh +# Nasłuchuj również na porcie 443 dla tls +alt-tls-listening-port=443 +# Używaj odcisków palców w komunikatach TURN +fingerprint +# Użyj mechanizmu poświadczeń długoterminowych +lt-cred-mech +# Twoje poświadczenia +user=$YOUR_LOGIN:$YOUR_PASSWORD +# Domena Twojego serwera +server-name=$YOUR_DOMAIN +# Domyślny obszar, który ma być używany dla użytkowników, gdy nie znaleziono wyraźnej relacji pochodzenie/obszar +realm=$YOUR_DOMAIN +# Ścieżka do Twoich certyfikatów. Upewnij się, że są one czytelne dla użytkownika/grupy procesu cotun. +cert=/var/lib/turn/cert.pem +pkey=/var/lib/turn/key.pem +# Użyj predefiniowanego klucza DH TLS o długości 2066 bitów +dh2066 +# Logowanie do journalctl +syslog +# Użytkownik/grupa, która będzie uruchamiać usługę coturn +proc-user=turnserver +proc-group=turnserver +# Wyłącz słabe szyfrowanie +no-tlsv1 +no-tlsv1_1 +no-tlsv1_2 +``` + +4. Uruchom i włącz serwis `coturn`: + +```sh +systemctl enable coturn && systemctl start coturn +``` + +5. Opcjonalnie, jeśli używasz firewalla `ufw`, otwórz odpowiednie porty: + +- **3478** – "czysty" TURN/STUN; +- **5349** – TURN/STUN over TLS; +- **443** – TURN/STUN over TLS, który może omijać firewalle; +- **49152:65535** – zakres portów, który Coturn będzie domyślnie wykorzystywał dla przekaźnika TURN. + +```sh +# Dla Ubuntu +sudo ufw allow 3478 && \ +sudo ufw allow 443 && \ +sudo ufw allow 5349 && \ +sudo ufw allow 49152:65535/tcp && \ +sudo ufw allow 49152:65535/udp + +# Dla Fedory +sudo firewall-cmd --permanent --add-port=443/tcp && \ +sudo firewall-cmd --permanent --add-port=443/udp && \ +sudo firewall-cmd --permanent --add-port=5349/tcp && \ +sudo firewall-cmd --permanent --add-port=5349/udp && \ +sudo firewall-cmd --permanent --add-port=49152:65535/tcp && \ +sudo firewall-cmd --permanent --add-port=49152:65535/udp && \ +sudo firewall-cmd --reload +``` + +## Konfiguracja aplikacji mobilnych + +Aby skonfigurować aplikację mobilną do korzystania z serwera: + +1. Otwórz `Ustawienia / Sieć i serwery / Serwery WebRTC ICE` i przełącz przełącznik `Konfiguruj serwery ICE`. + +2. Wprowadź wszystkie adresy serwerów w polu, po jednym na linię, na przykład jeśli serwery znajdują się na porcie 5349: + +``` +stun:stun.example.com:5349 +turn:username:password@turn.example.com:5349 +``` + +To tyle - teraz możesz wykonywać połączenia audio i wideo za pośrednictwem własnego serwera, bez udostępniania jakichkolwiek danych naszym serwerom (poza wymianą kluczy z kontaktem w szyfrowanych wiadomościach E2E). + +## Rozwiązywanie problemów + +- **Określ czy Twój serwer jest dostępny**: + + Uruchom to polecenie w terminalu: + + ```sh + ping + ``` + + Jeśli pakiety są transmitowane, serwer działa! + +- **Określ czy porty są otwarte**: + + Uruchom to polecenie w terminalu: + + ```sh + nc -zvw10 443 5349 + ``` + + Powinno się pojawić: + + ``` + Connection to 443 port [tcp/https] succeeded! + Connection to 5349 port [tcp/*] succeeded! + ``` + +- **Test połączenia STUN/TURN**: + + 1. Wejdź na [IceTest](https://icetest.info/). + + 2. W sekcji **Build up ICE Server List** dodaj: + + + + - `STUN: stun::` kliknij `Add STUN` + - `TURN: turn::`, `Username: `, `Credential: ` kliknij `Add TURN` + + Gdzie `` to 443 lub 5349. + + 3. Powinieneś zobaczyć swoje serwery w sekcji **ICE server list**. Jeśli wszystko jest skonfigurowane poprawnie, naciśnij `Start test`: + + + + 4. W sekcji **Results** powinieneś zobaczyć coś takiego: + + + + Jeśli wyniki pokazują `srflx` i `relay`, wszystko jest skonfigurowane poprawnie! + From 76a33a374312a65750b2d016e386bb2b2bf3d87a Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Sun, 14 Apr 2024 16:12:34 +0100 Subject: [PATCH 38/60] Force include hs_init_with_rtsopts (#4028) Co-authored-by: Moritz Angermann --- flake.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/flake.nix b/flake.nix index e5e635a223..420f4c70df 100644 --- a/flake.nix +++ b/flake.nix @@ -367,6 +367,7 @@ "-threaded" # "-debug" "-optl-lffi" + "-optl-lHSrts_thr" ] # This is fairly idiotic. LLD will strip out foreign exported # symbols (a GHC bug? Codegen bug?). So we need to pass `-u ` @@ -391,6 +392,8 @@ "chat_valid_name" "chat_json_length" "chat_write_file" + # We also need to keep the rts init method around. + "hs_init_with_rtsopts" ]; postInstall = '' set -x From 35b7f2cb1c013470d44f1bf42eb2c59eb51b7a55 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Sun, 14 Apr 2024 22:42:04 +0700 Subject: [PATCH 39/60] scripts: ghc version update (#4010) --- .github/workflows/build.yml | 8 ++++---- Dockerfile | 2 +- docs/CLI.md | 2 +- docs/CONTRIBUTING.md | 20 ++++++++++---------- scripts/desktop/build-lib-linux.sh | 2 +- scripts/desktop/build-lib-mac.sh | 2 +- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a5a07a8722..0b11716605 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -55,22 +55,22 @@ jobs: ghc: "8.10.7" cache_path: ~/.cabal/store - os: ubuntu-20.04 - ghc: "9.6.3" + ghc: "9.6.4" cache_path: ~/.cabal/store asset_name: simplex-chat-ubuntu-20_04-x86-64 desktop_asset_name: simplex-desktop-ubuntu-20_04-x86_64.deb - os: ubuntu-22.04 - ghc: "9.6.3" + ghc: "9.6.4" cache_path: ~/.cabal/store asset_name: simplex-chat-ubuntu-22_04-x86-64 desktop_asset_name: simplex-desktop-ubuntu-22_04-x86_64.deb - os: macos-latest - ghc: "9.6.3" + ghc: "9.6.4" cache_path: ~/.cabal/store asset_name: simplex-chat-macos-x86-64 desktop_asset_name: simplex-desktop-macos-x86_64.dmg - os: windows-latest - ghc: "9.6.3" + ghc: "9.6.4" cache_path: C:/cabal asset_name: simplex-chat-windows-x86-64 desktop_asset_name: simplex-desktop-windows-x86_64.msi diff --git a/Dockerfile b/Dockerfile index 6c60195f97..29f3381726 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,7 +8,7 @@ FROM ubuntu:${TAG} AS build RUN apt-get update && apt-get install -y curl git build-essential libgmp3-dev zlib1g-dev llvm-12 llvm-12-dev libnuma-dev libssl-dev # Specify bootstrap Haskell versions -ENV BOOTSTRAP_HASKELL_GHC_VERSION=9.6.3 +ENV BOOTSTRAP_HASKELL_GHC_VERSION=9.6.4 ENV BOOTSTRAP_HASKELL_CABAL_VERSION=3.10.1.0 # Install ghcup diff --git a/docs/CLI.md b/docs/CLI.md index d4f799c7af..cc74d29db9 100644 --- a/docs/CLI.md +++ b/docs/CLI.md @@ -102,7 +102,7 @@ DOCKER_BUILDKIT=1 docker build --output ~/.local/bin . #### In any OS -1. Install [Haskell GHCup](https://www.haskell.org/ghcup/), GHC 9.6.3 and cabal 3.10.1.0: +1. Install [Haskell GHCup](https://www.haskell.org/ghcup/), GHC 9.6.4 and cabal 3.10.1.0: ```shell curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index bc013cd7eb..d6c11daf7f 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -30,13 +30,13 @@ You will have to add `/opt/homebrew/opt/openssl@1.1/bin` to your PATH in order t **In simplex-chat repo** -- `stable` - stable release of the apps, can be used for updates to the previous stable release (GHC 9.6.3). +- `stable` - stable release of the apps, can be used for updates to the previous stable release (GHC 9.6.4). - `stable-android` - used to build stable Android core library with Nix (GHC 8.10.7) - only for Android armv7a. - `stable-ios` - used to build stable iOS core library with Nix (GHC 8.10.7) – this branch should be the same as `stable-android` except Nix configuration files. Deprecated. -- `master` - branch for beta version releases (GHC 9.6.3). +- `master` - branch for beta version releases (GHC 9.6.4). - `master-ghc8107` - branch for beta version releases (GHC 8.10.7). Deprecated. @@ -50,7 +50,7 @@ You will have to add `/opt/homebrew/opt/openssl@1.1/bin` to your PATH in order t **In simplexmq repo** -- `master` - uses GHC 9.6.3 its commit should be used in `master` branch of simplex-chat repo. +- `master` - uses GHC 9.6.4 its commit should be used in `master` branch of simplex-chat repo. - `master-ghc8107` - its commit should be used in `master-android` (and `master-ios`) branch of simplex-chat repo. Deprecated. @@ -77,28 +77,28 @@ You will have to add `/opt/homebrew/opt/openssl@1.1/bin` to your PATH in order t 7. Independently, `master` branch of simplexmq repo should be merged to `stable` branch on stable releases. -## Differences between GHC 8.10.7 and GHC 9.6.3 +## Differences between GHC 8.10.7 and GHC 9.6.4 1. The main difference is related to `DuplicateRecordFields` extension. -It is no longer possible in GHC 9.6.3 to specify type when using selectors, instead OverloadedRecordDot extension and syntax are used that need to be removed in GHC 8.10.7: +It is no longer possible in GHC 9.6.4 to specify type when using selectors, instead OverloadedRecordDot extension and syntax are used that need to be removed in GHC 8.10.7: ```haskell {-# LANGUAGE DuplicateRecordFields #-} --- use this in GHC 9.6.3 when needed +-- use this in GHC 9.6.4 when needed {-# LANGUAGE OverloadedRecordDot #-} --- GHC 9.6.3 syntax +-- GHC 9.6.4 syntax let x = record.field --- GHC 8.10.7 syntax removed in GHC 9.6.3 +-- GHC 8.10.7 syntax absent in GHC 9.6.4 let x = field (record :: Record) ``` It is still possible to specify type when using record update syntax, use this pragma to suppress compiler warning: ```haskell --- use this in GHC 9.6.3 when needed +-- use this in GHC 9.6.4 when needed {-# OPTIONS_GHC -fno-warn-ambiguous-fields #-} let r' = (record :: Record) {field = value} @@ -107,7 +107,7 @@ let r' = (record :: Record) {field = value} 2. Most monad functions now have to be imported from `Control.Monad`, and not from specific monad modules (e.g. `Control.Monad.Except`). ```haskell --- use this in GHC 9.6.3 when needed +-- use this in GHC 9.6.4 when needed import Control.Monad ``` diff --git a/scripts/desktop/build-lib-linux.sh b/scripts/desktop/build-lib-linux.sh index c27b672e40..528e7b9f91 100755 --- a/scripts/desktop/build-lib-linux.sh +++ b/scripts/desktop/build-lib-linux.sh @@ -8,7 +8,7 @@ function readlink() { OS=linux ARCH=${1:-`uname -a | rev | cut -d' ' -f2 | rev`} -GHC_VERSION=9.6.3 +GHC_VERSION=9.6.4 if [ "$ARCH" == "aarch64" ]; then COMPOSE_ARCH=arm64 diff --git a/scripts/desktop/build-lib-mac.sh b/scripts/desktop/build-lib-mac.sh index 2b0fd5376f..12067a9b53 100755 --- a/scripts/desktop/build-lib-mac.sh +++ b/scripts/desktop/build-lib-mac.sh @@ -5,7 +5,7 @@ set -e OS=mac ARCH="${1:-`uname -a | rev | cut -d' ' -f1 | rev`}" COMPOSE_ARCH=$ARCH -GHC_VERSION=9.6.3 +GHC_VERSION=9.6.4 if [ "$ARCH" == "arm64" ]; then ARCH=aarch64 From c6af2c285abdb9f6f34aa1e56d7cf4de6bda271a Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Sun, 14 Apr 2024 17:31:56 +0100 Subject: [PATCH 40/60] core: 5.7.0.0 (#4027) --- package.yaml | 2 +- simplex-chat.cabal | 2 +- src/Simplex/Chat/Remote.hs | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.yaml b/package.yaml index 3e187c5653..e844c52c26 100644 --- a/package.yaml +++ b/package.yaml @@ -1,5 +1,5 @@ name: simplex-chat -version: 5.6.1.1 +version: 5.7.0.0 #synopsis: #description: homepage: https://github.com/simplex-chat/simplex-chat#readme diff --git a/simplex-chat.cabal b/simplex-chat.cabal index dcf9061370..aac942c6b3 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: 5.6.1.1 +version: 5.7.0.0 category: Web, System, Services, Cryptography homepage: https://github.com/simplex-chat/simplex-chat#readme author: simplex.chat diff --git a/src/Simplex/Chat/Remote.hs b/src/Simplex/Chat/Remote.hs index 819c1cd670..75602c1e18 100644 --- a/src/Simplex/Chat/Remote.hs +++ b/src/Simplex/Chat/Remote.hs @@ -50,7 +50,7 @@ import Simplex.Chat.Store.Files import Simplex.Chat.Store.Remote import Simplex.Chat.Store.Shared import Simplex.Chat.Types -import Simplex.Chat.Util (liftIOEither, encryptFile) +import Simplex.Chat.Util (encryptFile, liftIOEither) import Simplex.FileTransfer.Description (FileDigest (..)) import Simplex.Messaging.Agent import Simplex.Messaging.Agent.Protocol (AgentErrorType (RCP)) @@ -76,7 +76,7 @@ minRemoteCtrlVersion = AppVersion [5, 6, 0, 0] -- when acting as controller minRemoteHostVersion :: AppVersion -minRemoteHostVersion = AppVersion [5, 6, 0, 0] +minRemoteHostVersion = AppVersion [5, 7, 0, 0] currentAppVersion :: AppVersion currentAppVersion = AppVersion SC.version From f606e5742c7af7b3abed91c2867400cf1813830d Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Sun, 14 Apr 2024 19:11:15 +0100 Subject: [PATCH 41/60] ios: update library --- apps/ios/SimpleX.xcodeproj/project.pbxproj | 40 +++++++++++----------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index d7ca3e1cb5..7c820893b5 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -94,11 +94,6 @@ 5CB346E52868AA7F001FD2EF /* SuspendChat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB346E42868AA7F001FD2EF /* SuspendChat.swift */; }; 5CB346E72868D76D001FD2EF /* NotificationsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB346E62868D76D001FD2EF /* NotificationsView.swift */; }; 5CB346E92869E8BA001FD2EF /* PushEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB346E82869E8BA001FD2EF /* PushEnvironment.swift */; }; - 5CB39FD52BC7F13A0000FE16 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CB39FD02BC7F13A0000FE16 /* libgmp.a */; }; - 5CB39FD62BC7F13A0000FE16 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CB39FD12BC7F13A0000FE16 /* libffi.a */; }; - 5CB39FD72BC7F13A0000FE16 /* libHSsimplex-chat-5.6.1.1-CxOyGEtPyjQ6Yv6ZFTxGdP.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CB39FD22BC7F13A0000FE16 /* libHSsimplex-chat-5.6.1.1-CxOyGEtPyjQ6Yv6ZFTxGdP.a */; }; - 5CB39FD82BC7F13A0000FE16 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CB39FD32BC7F13A0000FE16 /* libgmpxx.a */; }; - 5CB39FD92BC7F13A0000FE16 /* libHSsimplex-chat-5.6.1.1-CxOyGEtPyjQ6Yv6ZFTxGdP-ghc9.6.4.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CB39FD42BC7F13A0000FE16 /* libHSsimplex-chat-5.6.1.1-CxOyGEtPyjQ6Yv6ZFTxGdP-ghc9.6.4.a */; }; 5CB634A829E437960066AD6B /* PasscodeEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB634A729E437960066AD6B /* PasscodeEntry.swift */; }; 5CB634AD29E46CF70066AD6B /* LocalAuthView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB634AC29E46CF70066AD6B /* LocalAuthView.swift */; }; 5CB634AF29E4BB7D0066AD6B /* SetAppPasscodeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB634AE29E4BB7D0066AD6B /* SetAppPasscodeView.swift */; }; @@ -115,6 +110,11 @@ 5CC1C99527A6CF7F000D9FF6 /* ShareSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CC1C99427A6CF7F000D9FF6 /* ShareSheet.swift */; }; 5CC2C0FC2809BF11000C35E3 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5CC2C0FA2809BF11000C35E3 /* Localizable.strings */; }; 5CC2C0FF2809BF11000C35E3 /* SimpleX--iOS--InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5CC2C0FD2809BF11000C35E3 /* SimpleX--iOS--InfoPlist.strings */; }; + 5CC83D1A2BCC504B00A0C558 /* libHSsimplex-chat-5.7.0.0-AhbVfRKDsEZ5w5ND1HSTLv.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CC83D152BCC504B00A0C558 /* libHSsimplex-chat-5.7.0.0-AhbVfRKDsEZ5w5ND1HSTLv.a */; }; + 5CC83D1B2BCC504B00A0C558 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CC83D162BCC504B00A0C558 /* libgmpxx.a */; }; + 5CC83D1C2BCC504B00A0C558 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CC83D172BCC504B00A0C558 /* libgmp.a */; }; + 5CC83D1D2BCC504B00A0C558 /* libHSsimplex-chat-5.7.0.0-AhbVfRKDsEZ5w5ND1HSTLv-ghc9.6.4.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CC83D182BCC504B00A0C558 /* libHSsimplex-chat-5.7.0.0-AhbVfRKDsEZ5w5ND1HSTLv-ghc9.6.4.a */; }; + 5CC83D1E2BCC504B00A0C558 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CC83D192BCC504B00A0C558 /* libffi.a */; }; 5CC868F329EB540C0017BBFD /* CIRcvDecryptionError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CC868F229EB540C0017BBFD /* CIRcvDecryptionError.swift */; }; 5CCB939C297EFCB100399E78 /* NavStackCompat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CCB939B297EFCB100399E78 /* NavStackCompat.swift */; }; 5CD67B8F2B0E858A00C510B1 /* hs_init.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CD67B8D2B0E858A00C510B1 /* hs_init.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -383,11 +383,6 @@ 5CB346E42868AA7F001FD2EF /* SuspendChat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuspendChat.swift; sourceTree = ""; }; 5CB346E62868D76D001FD2EF /* NotificationsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationsView.swift; sourceTree = ""; }; 5CB346E82869E8BA001FD2EF /* PushEnvironment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushEnvironment.swift; sourceTree = ""; }; - 5CB39FD02BC7F13A0000FE16 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; }; - 5CB39FD12BC7F13A0000FE16 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; }; - 5CB39FD22BC7F13A0000FE16 /* libHSsimplex-chat-5.6.1.1-CxOyGEtPyjQ6Yv6ZFTxGdP.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.6.1.1-CxOyGEtPyjQ6Yv6ZFTxGdP.a"; sourceTree = ""; }; - 5CB39FD32BC7F13A0000FE16 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; }; - 5CB39FD42BC7F13A0000FE16 /* libHSsimplex-chat-5.6.1.1-CxOyGEtPyjQ6Yv6ZFTxGdP-ghc9.6.4.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.6.1.1-CxOyGEtPyjQ6Yv6ZFTxGdP-ghc9.6.4.a"; sourceTree = ""; }; 5CB634A729E437960066AD6B /* PasscodeEntry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasscodeEntry.swift; sourceTree = ""; }; 5CB634AC29E46CF70066AD6B /* LocalAuthView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalAuthView.swift; sourceTree = ""; }; 5CB634AE29E4BB7D0066AD6B /* SetAppPasscodeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetAppPasscodeView.swift; sourceTree = ""; }; @@ -407,6 +402,11 @@ 5CC1C99427A6CF7F000D9FF6 /* ShareSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareSheet.swift; sourceTree = ""; }; 5CC2C0FB2809BF11000C35E3 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; 5CC2C0FE2809BF11000C35E3 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = "ru.lproj/SimpleX--iOS--InfoPlist.strings"; sourceTree = ""; }; + 5CC83D152BCC504B00A0C558 /* libHSsimplex-chat-5.7.0.0-AhbVfRKDsEZ5w5ND1HSTLv.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.7.0.0-AhbVfRKDsEZ5w5ND1HSTLv.a"; sourceTree = ""; }; + 5CC83D162BCC504B00A0C558 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; }; + 5CC83D172BCC504B00A0C558 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; }; + 5CC83D182BCC504B00A0C558 /* libHSsimplex-chat-5.7.0.0-AhbVfRKDsEZ5w5ND1HSTLv-ghc9.6.4.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.7.0.0-AhbVfRKDsEZ5w5ND1HSTLv-ghc9.6.4.a"; sourceTree = ""; }; + 5CC83D192BCC504B00A0C558 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; }; 5CC868F229EB540C0017BBFD /* CIRcvDecryptionError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIRcvDecryptionError.swift; sourceTree = ""; }; 5CCB939B297EFCB100399E78 /* NavStackCompat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavStackCompat.swift; sourceTree = ""; }; 5CD67B8D2B0E858A00C510B1 /* hs_init.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = hs_init.h; sourceTree = ""; }; @@ -523,13 +523,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5CB39FD82BC7F13A0000FE16 /* libgmpxx.a in Frameworks */, + 5CC83D1D2BCC504B00A0C558 /* libHSsimplex-chat-5.7.0.0-AhbVfRKDsEZ5w5ND1HSTLv-ghc9.6.4.a in Frameworks */, + 5CC83D1B2BCC504B00A0C558 /* libgmpxx.a in Frameworks */, + 5CC83D1C2BCC504B00A0C558 /* libgmp.a in Frameworks */, + 5CC83D1A2BCC504B00A0C558 /* libHSsimplex-chat-5.7.0.0-AhbVfRKDsEZ5w5ND1HSTLv.a in Frameworks */, + 5CC83D1E2BCC504B00A0C558 /* libffi.a in Frameworks */, 5CE2BA93284534B000EC33A6 /* libiconv.tbd in Frameworks */, - 5CB39FD72BC7F13A0000FE16 /* libHSsimplex-chat-5.6.1.1-CxOyGEtPyjQ6Yv6ZFTxGdP.a in Frameworks */, - 5CB39FD52BC7F13A0000FE16 /* libgmp.a in Frameworks */, 5CE2BA94284534BB00EC33A6 /* libz.tbd in Frameworks */, - 5CB39FD62BC7F13A0000FE16 /* libffi.a in Frameworks */, - 5CB39FD92BC7F13A0000FE16 /* libHSsimplex-chat-5.6.1.1-CxOyGEtPyjQ6Yv6ZFTxGdP-ghc9.6.4.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -592,11 +592,11 @@ 5C764E5C279C70B7000C6508 /* Libraries */ = { isa = PBXGroup; children = ( - 5CB39FD12BC7F13A0000FE16 /* libffi.a */, - 5CB39FD02BC7F13A0000FE16 /* libgmp.a */, - 5CB39FD32BC7F13A0000FE16 /* libgmpxx.a */, - 5CB39FD42BC7F13A0000FE16 /* libHSsimplex-chat-5.6.1.1-CxOyGEtPyjQ6Yv6ZFTxGdP-ghc9.6.4.a */, - 5CB39FD22BC7F13A0000FE16 /* libHSsimplex-chat-5.6.1.1-CxOyGEtPyjQ6Yv6ZFTxGdP.a */, + 5CC83D192BCC504B00A0C558 /* libffi.a */, + 5CC83D172BCC504B00A0C558 /* libgmp.a */, + 5CC83D162BCC504B00A0C558 /* libgmpxx.a */, + 5CC83D182BCC504B00A0C558 /* libHSsimplex-chat-5.7.0.0-AhbVfRKDsEZ5w5ND1HSTLv-ghc9.6.4.a */, + 5CC83D152BCC504B00A0C558 /* libHSsimplex-chat-5.7.0.0-AhbVfRKDsEZ5w5ND1HSTLv.a */, ); path = Libraries; sourceTree = ""; From 24e3806b255693e7658214b8a2e420b22e279ff6 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Mon, 15 Apr 2024 01:18:12 +0700 Subject: [PATCH 42/60] webrtc: updated credentials (#4011) * webrtc: updated credentials * no udp * change * stuns * added stun back --------- Co-authored-by: Evgeny Poberezkin --- apps/ios/Shared/Views/Call/WebRTC.swift | 7 ++++--- apps/ios/Shared/Views/Call/WebRTCClient.swift | 8 ++++---- .../kotlin/chat/simplex/common/views/call/WebRTC.kt | 7 ++++--- .../common/src/commonMain/resources/assets/www/call.js | 5 +++-- packages/simplex-chat-webrtc/src/call.ts | 5 +++-- website/src/call/call.js | 3 ++- 6 files changed, 20 insertions(+), 15 deletions(-) diff --git a/apps/ios/Shared/Views/Call/WebRTC.swift b/apps/ios/Shared/Views/Call/WebRTC.swift index 919b1e14e7..333dc082d5 100644 --- a/apps/ios/Shared/Views/Call/WebRTC.swift +++ b/apps/ios/Shared/Views/Call/WebRTC.swift @@ -431,17 +431,18 @@ struct RTCIceServer: Codable, Equatable { } // the servers are expected in this format: -// stun:stun.simplex.im:443?transport=tcp -// turn:private:yleob6AVkiNI87hpR94Z@turn.simplex.im:443?transport=tcp +// stuns:stun.simplex.im:443?transport=tcp +// turns:private2:Hxuq2QxUjnhj96Zq2r4HjqHRj@turn.simplex.im:443?transport=tcp func parseRTCIceServer(_ str: String) -> RTCIceServer? { var s = replaceScheme(str, "stun:") + s = replaceScheme(s, "stuns:") s = replaceScheme(s, "turn:") s = replaceScheme(s, "turns:") if let u: URL = URL(string: s), let scheme = u.scheme, let host = u.host, let port = u.port, - u.path == "" && (scheme == "stun" || scheme == "turn" || scheme == "turns") { + u.path == "" && (scheme == "stun" || scheme == "stuns" || scheme == "turn" || scheme == "turns") { let query = u.query == nil || u.query == "" ? "" : "?" + (u.query ?? "") return RTCIceServer( urls: ["\(scheme):\(host):\(port)\(query)"], diff --git a/apps/ios/Shared/Views/Call/WebRTCClient.swift b/apps/ios/Shared/Views/Call/WebRTCClient.swift index 834af4a2c1..ff36241daf 100644 --- a/apps/ios/Shared/Views/Call/WebRTCClient.swift +++ b/apps/ios/Shared/Views/Call/WebRTCClient.swift @@ -65,14 +65,14 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg self.localRendererAspectRatio = localRendererAspectRatio rtcAudioSession.useManualAudio = CallController.useCallKit() rtcAudioSession.isAudioEnabled = !CallController.useCallKit() - logger.debug("WebRTCClient: rtcAudioSession has manual audio \(self.rtcAudioSession.useManualAudio) and audio enabled \(self.rtcAudioSession.isAudioEnabled)}") + logger.debug("WebRTCClient: rtcAudioSession has manual audio \(self.rtcAudioSession.useManualAudio) and audio enabled \(self.rtcAudioSession.isAudioEnabled)") super.init() } let defaultIceServers: [WebRTC.RTCIceServer] = [ - WebRTC.RTCIceServer(urlStrings: ["stun:stun.simplex.im:443"]), - WebRTC.RTCIceServer(urlStrings: ["turn:turn.simplex.im:443?transport=udp"], username: "private", credential: "yleob6AVkiNI87hpR94Z"), - WebRTC.RTCIceServer(urlStrings: ["turn:turn.simplex.im:443?transport=tcp"], username: "private", credential: "yleob6AVkiNI87hpR94Z"), + WebRTC.RTCIceServer(urlStrings: ["stuns:stun.simplex.im:443"]), + //WebRTC.RTCIceServer(urlStrings: ["turns:turn.simplex.im:443?transport=udp"], username: "private2", credential: "Hxuq2QxUjnhj96Zq2r4HjqHRj"), + WebRTC.RTCIceServer(urlStrings: ["turns:turn.simplex.im:443?transport=tcp"], username: "private2", credential: "Hxuq2QxUjnhj96Zq2r4HjqHRj"), ] func initializeCall(_ iceServers: [WebRTC.RTCIceServer]?, _ mediaType: CallMediaType, _ aesKey: String?, _ relay: Bool?) -> Call { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/call/WebRTC.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/call/WebRTC.kt index 754878e9fb..4991cf13bc 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/call/WebRTC.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/call/WebRTC.kt @@ -187,10 +187,11 @@ data class ConnectionState( ) // the servers are expected in this format: -// stun:stun.simplex.im:443?transport=tcp -// turn:private:yleob6AVkiNI87hpR94Z@turn.simplex.im:443?transport=tcp +// stuns:stun.simplex.im:443?transport=tcp +// turns:private2:Hxuq2QxUjnhj96Zq2r4HjqHRj@turn.simplex.im:443?transport=tcp fun parseRTCIceServer(str: String): RTCIceServer? { var s = replaceScheme(str, "stun:") + s = replaceScheme(s, "stuns:") s = replaceScheme(s, "turn:") s = replaceScheme(s, "turns:") val u = runCatching { URI(s) }.getOrNull() @@ -198,7 +199,7 @@ fun parseRTCIceServer(str: String): RTCIceServer? { val scheme = u.scheme val host = u.host val port = u.port - if (u.path == "" && (scheme == "stun" || scheme == "turn" || scheme == "turns")) { + if (u.path == "" && (scheme == "stun" || scheme == "stuns" || scheme == "turn" || scheme == "turns")) { val userInfo = u.userInfo?.split(":") val query = if (u.query == null || u.query == "") "" else "?${u.query}" return RTCIceServer( diff --git a/apps/multiplatform/common/src/commonMain/resources/assets/www/call.js b/apps/multiplatform/common/src/commonMain/resources/assets/www/call.js index 5ea2f062b0..a2cc4a2f27 100644 --- a/apps/multiplatform/common/src/commonMain/resources/assets/www/call.js +++ b/apps/multiplatform/common/src/commonMain/resources/assets/www/call.js @@ -36,9 +36,10 @@ var localizedState = ""; var localizedDescription = ""; const processCommand = (function () { const defaultIceServers = [ + { urls: ["stuns:stun.simplex.im:443"] }, { urls: ["stun:stun.simplex.im:443"] }, - { urls: ["turn:turn.simplex.im:443?transport=udp"], username: "private", credential: "yleob6AVkiNI87hpR94Z" }, - { urls: ["turn:turn.simplex.im:443?transport=tcp"], username: "private", credential: "yleob6AVkiNI87hpR94Z" }, + //{ urls: ["turns:turn.simplex.im:443?transport=udp"], username: "private2", credential: "Hxuq2QxUjnhj96Zq2r4HjqHRj" }, + { urls: ["turns:turn.simplex.im:443?transport=tcp"], username: "private2", credential: "Hxuq2QxUjnhj96Zq2r4HjqHRj" }, ]; function getCallConfig(encodedInsertableStreams, iceServers, relay) { return { diff --git a/packages/simplex-chat-webrtc/src/call.ts b/packages/simplex-chat-webrtc/src/call.ts index accbebb22d..f3b9af784b 100644 --- a/packages/simplex-chat-webrtc/src/call.ts +++ b/packages/simplex-chat-webrtc/src/call.ts @@ -245,9 +245,10 @@ const processCommand = (function () { } const defaultIceServers: RTCIceServer[] = [ + {urls: ["stuns:stun.simplex.im:443"]}, {urls: ["stun:stun.simplex.im:443"]}, - {urls: ["turn:turn.simplex.im:443?transport=udp"], username: "private", credential: "yleob6AVkiNI87hpR94Z"}, - {urls: ["turn:turn.simplex.im:443?transport=tcp"], username: "private", credential: "yleob6AVkiNI87hpR94Z"}, + //{urls: ["turns:turn.simplex.im:443?transport=udp"], username: "private2", credential: "Hxuq2QxUjnhj96Zq2r4HjqHRj"}, + {urls: ["turns:turn.simplex.im:443?transport=tcp"], username: "private2", credential: "Hxuq2QxUjnhj96Zq2r4HjqHRj"}, ] function getCallConfig(encodedInsertableStreams: boolean, iceServers?: RTCIceServer[], relay?: boolean): CallConfig { diff --git a/website/src/call/call.js b/website/src/call/call.js index b247431f4b..8104470686 100644 --- a/website/src/call/call.js +++ b/website/src/call/call.js @@ -24,8 +24,9 @@ var TransformOperation; let activeCall; const processCommand = (function () { const defaultIceServers = [ + { urls: ["stuns:stun.simplex.im:443"] }, { urls: ["stun:stun.simplex.im:443"] }, - { urls: ["turn:turn.simplex.im:443"], username: "private", credential: "yleob6AVkiNI87hpR94Z" }, + { urls: ["turns:turn.simplex.im:443"], username: "private2", credential: "Hxuq2QxUjnhj96Zq2r4HjqHRj" }, ]; function getCallConfig(encodedInsertableStreams, iceServers, relay) { return { From 0eae7f56f371062499583258c1b06ac53bcb9c0f Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Sun, 14 Apr 2024 21:14:15 +0100 Subject: [PATCH 43/60] 5.7-beta.0: ios 207, android 196, desktop 37 --- apps/ios/SimpleX.xcodeproj/project.pbxproj | 24 +++++++++++----------- apps/multiplatform/gradle.properties | 8 ++++---- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index 7c820893b5..9ed03affd7 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -1540,7 +1540,7 @@ CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 206; + CURRENT_PROJECT_VERSION = 207; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; @@ -1565,7 +1565,7 @@ "@executable_path/Frameworks", ); LLVM_LTO = YES_THIN; - MARKETING_VERSION = 5.6.1; + MARKETING_VERSION = 5.7; PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.app; PRODUCT_NAME = SimpleX; SDKROOT = iphoneos; @@ -1589,7 +1589,7 @@ CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 206; + CURRENT_PROJECT_VERSION = 207; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; @@ -1614,7 +1614,7 @@ "@executable_path/Frameworks", ); LLVM_LTO = YES; - MARKETING_VERSION = 5.6.1; + MARKETING_VERSION = 5.7; PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.app; PRODUCT_NAME = SimpleX; SDKROOT = iphoneos; @@ -1675,7 +1675,7 @@ CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 206; + CURRENT_PROJECT_VERSION = 207; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; GCC_OPTIMIZATION_LEVEL = s; @@ -1690,7 +1690,7 @@ "@executable_path/../../Frameworks", ); LLVM_LTO = YES; - MARKETING_VERSION = 5.6.1; + MARKETING_VERSION = 5.7; PRODUCT_BUNDLE_IDENTIFIER = "chat.simplex.app.SimpleX-NSE"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1712,7 +1712,7 @@ CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 206; + CURRENT_PROJECT_VERSION = 207; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; ENABLE_CODE_COVERAGE = NO; @@ -1727,7 +1727,7 @@ "@executable_path/../../Frameworks", ); LLVM_LTO = YES; - MARKETING_VERSION = 5.6.1; + MARKETING_VERSION = 5.7; PRODUCT_BUNDLE_IDENTIFIER = "chat.simplex.app.SimpleX-NSE"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1749,7 +1749,7 @@ CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES; CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 206; + CURRENT_PROJECT_VERSION = 207; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; DYLIB_COMPATIBILITY_VERSION = 1; @@ -1775,7 +1775,7 @@ "$(PROJECT_DIR)/Libraries/sim", ); LLVM_LTO = YES; - MARKETING_VERSION = 5.6.1; + MARKETING_VERSION = 5.7; PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.SimpleXChat; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; @@ -1800,7 +1800,7 @@ CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES; CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 206; + CURRENT_PROJECT_VERSION = 207; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; DYLIB_COMPATIBILITY_VERSION = 1; @@ -1826,7 +1826,7 @@ "$(PROJECT_DIR)/Libraries/sim", ); LLVM_LTO = YES; - MARKETING_VERSION = 5.6.1; + MARKETING_VERSION = 5.7; PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.SimpleXChat; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; diff --git a/apps/multiplatform/gradle.properties b/apps/multiplatform/gradle.properties index 9918dadee1..74629c8b9b 100644 --- a/apps/multiplatform/gradle.properties +++ b/apps/multiplatform/gradle.properties @@ -26,11 +26,11 @@ android.enableJetifier=true kotlin.mpp.androidSourceSetLayoutVersion=2 kotlin.jvm.target=11 -android.version_name=5.6.1 -android.version_code=193 +android.version_name=5.7-beta.0 +android.version_code=196 -desktop.version_name=5.6.1 -desktop.version_code=36 +desktop.version_name=5.7-beta.0 +desktop.version_code=37 kotlin.version=1.9.23 gradle.plugin.version=8.2.0 From bda09177873f2772b96e84d9782d2e7b3c7346bc Mon Sep 17 00:00:00 2001 From: sh <37271604+shumvgolove@users.noreply.github.com> Date: Mon, 15 Apr 2024 09:51:24 +0000 Subject: [PATCH 44/60] github: fix cla action (#4030) --- .github/workflows/cla.yml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/cla.yml b/.github/workflows/cla.yml index 72a7cf2b94..b396c9a289 100644 --- a/.github/workflows/cla.yml +++ b/.github/workflows/cla.yml @@ -5,14 +5,20 @@ on: pull_request_target: types: [opened, closed, synchronize] +permissions: + actions: write + contents: write + pull-requests: write + statuses: write + jobs: CLAssistant: runs-on: ubuntu-latest steps: - name: "CLA Assistant" - if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request' + if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target' # Beta Release - uses: cla-assistant/github-action@v2.1.3-beta + uses: cla-assistant/github-action@v2.3.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # the below token should have repo scope and must be manually added by you in the repository's secret @@ -33,4 +39,4 @@ jobs: #custom-pr-sign-comment: 'The signature to be committed in order to sign the CLA' #custom-allsigned-prcomment: 'pull request comment when all contributors has signed, defaults to **CLA Assistant Lite bot** All Contributors have signed the CLA.' #lock-pullrequest-aftermerge: false - if you don't want this bot to automatically lock the pull request after merging (default - true) - #use-dco-flag: true - If you are using DCO instead of CLA \ No newline at end of file + #use-dco-flag: true - If you are using DCO instead of CLA From 7ff4b05c9078cd91e6068df429583e71b6c86e4b Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:19:37 +0400 Subject: [PATCH 45/60] core: remember new origin for received forwarded messages (#4032) --- src/Simplex/Chat.hs | 8 +++++--- tests/ChatTests/Forward.hs | 29 +++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index 92dc294d4b..41c744850a 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -930,10 +930,12 @@ processChatCommand' vr = \case forwardMC ChatItem {content = CIRcvMsgContent fmc} = pure (fmc, MDRcv) forwardMC _ = throwChatError CEInvalidForward forwardCIFF :: ChatItem c d -> Maybe CIForwardedFrom -> Maybe CIForwardedFrom - forwardCIFF ChatItem {meta = CIMeta {itemForwarded = Just ciff}} _ = Just ciff - forwardCIFF _ ciff = ciff + forwardCIFF ChatItem {meta = CIMeta {itemForwarded}} ciff = case itemForwarded of + Nothing -> ciff + Just CIFFUnknown -> ciff + Just prevCIFF -> Just prevCIFF forwardCryptoFile :: ChatItem c d -> CM (Maybe CryptoFile) - forwardCryptoFile ChatItem {file = Just CIFile {fileName, fileStatus, fileSource = Just fromCF@CryptoFile {filePath, cryptoArgs = fromArgs}}} + forwardCryptoFile ChatItem {file = Just CIFile {fileName, fileStatus, fileSource = Just fromCF@CryptoFile {filePath}}} | ciFileLoaded fileStatus = chatReadVar filesFolder >>= \case Nothing -> diff --git a/tests/ChatTests/Forward.hs b/tests/ChatTests/Forward.hs index 8638076ab2..d49c6df955 100644 --- a/tests/ChatTests/Forward.hs +++ b/tests/ChatTests/Forward.hs @@ -24,6 +24,7 @@ chatForwardTests = do it "from notes to notes" testForwardNotesToNotes -- TODO forward between different folders when supported describe "interactions with forwarded messages" $ do it "preserve original forward info" testForwardPreserveInfo + it "received forwarded message is saved with new forward info" testForwardRcvMsgNewInfo it "quoted message is not included" testForwardQuotedMsg it "editing is prohibited" testForwardEditProhibited it "delete for other" testForwardDeleteForOther @@ -276,6 +277,34 @@ testForwardPreserveInfo = dan <# "#team alice> -> forwarded" dan <## " hey" +testForwardRcvMsgNewInfo :: HasCallStack => FilePath -> IO () +testForwardRcvMsgNewInfo = + testChat4 aliceProfile bobProfile cathProfile danProfile $ + \alice bob cath dan -> do + connectUsers bob dan + createCCNoteFolder alice + connectUsers alice bob + connectUsers alice cath + + dan #> "@bob hey" + bob <# "dan> hey" + + bob `send` "@alice <- @dan hey" + bob <# "@alice <- @dan" + bob <## " hey" + alice <# "bob> -> forwarded" + alice <## " hey" + + alice `send` "* <- @bob hey" + alice <# "* <- @bob" + alice <## " hey" + + alice `send` "@cath <- * hey" + alice <# "@cath <- @bob" + alice <## " hey" + cath <# "alice> -> forwarded" + cath <## " hey" + testForwardQuotedMsg :: HasCallStack => FilePath -> IO () testForwardQuotedMsg = testChat3 aliceProfile bobProfile cathProfile $ From c2169f7813d1c0d20ee261a2773764c38c77b782 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Tue, 16 Apr 2024 14:22:40 +0700 Subject: [PATCH 46/60] desktop: fix video calls in Firefox (#4034) * desktop: fix video calls in Firefox * one more play() --- .../common/src/commonMain/resources/assets/www/call.js | 10 ++++++++-- .../commonMain/resources/assets/www/desktop/call.html | 2 -- packages/simplex-chat-webrtc/src/call.ts | 8 +++++++- packages/simplex-chat-webrtc/src/desktop/call.html | 2 -- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/apps/multiplatform/common/src/commonMain/resources/assets/www/call.js b/apps/multiplatform/common/src/commonMain/resources/assets/www/call.js index a2cc4a2f27..9d9782e90c 100644 --- a/apps/multiplatform/common/src/commonMain/resources/assets/www/call.js +++ b/apps/multiplatform/common/src/commonMain/resources/assets/www/call.js @@ -38,7 +38,7 @@ const processCommand = (function () { const defaultIceServers = [ { urls: ["stuns:stun.simplex.im:443"] }, { urls: ["stun:stun.simplex.im:443"] }, - //{ urls: ["turns:turn.simplex.im:443?transport=udp"], username: "private2", credential: "Hxuq2QxUjnhj96Zq2r4HjqHRj" }, + //{urls: ["turns:turn.simplex.im:443?transport=udp"], username: "private2", credential: "Hxuq2QxUjnhj96Zq2r4HjqHRj"}, { urls: ["turns:turn.simplex.im:443?transport=tcp"], username: "private2", credential: "Hxuq2QxUjnhj96Zq2r4HjqHRj" }, ]; function getCallConfig(encodedInsertableStreams, iceServers, relay) { @@ -376,6 +376,9 @@ const processCommand = (function () { // setupVideoElement(videos.remote) videos.local.srcObject = call.localStream; videos.remote.srcObject = call.remoteStream; + // Without doing it manually Firefox shows black screen but video can be played in Picture-in-Picture + videos.local.play(); + videos.remote.play(); } async function setupEncryptionWorker(call) { if (call.aesKey) { @@ -448,7 +451,9 @@ const processCommand = (function () { codecs.splice(selectedCodecIndex, 1); codecs.unshift(selectedCodec); for (const t of call.connection.getTransceivers()) { - if (((_a = t.sender.track) === null || _a === void 0 ? void 0 : _a.kind) === "video") { + // Firefox doesn't have this function implemented: + // https://bugzilla.mozilla.org/show_bug.cgi?id=1396922 + if (((_a = t.sender.track) === null || _a === void 0 ? void 0 : _a.kind) === "video" && t.setCodecPreferences) { t.setCodecPreferences(codecs); } } @@ -486,6 +491,7 @@ const processCommand = (function () { replaceTracks(pc, videoTracks); call.localStream = localStream; videos.local.srcObject = localStream; + videos.local.play(); } function replaceTracks(pc, tracks) { if (!tracks.length) diff --git a/apps/multiplatform/common/src/commonMain/resources/assets/www/desktop/call.html b/apps/multiplatform/common/src/commonMain/resources/assets/www/desktop/call.html index 59ca2b58b0..2600062b02 100644 --- a/apps/multiplatform/common/src/commonMain/resources/assets/www/desktop/call.html +++ b/apps/multiplatform/common/src/commonMain/resources/assets/www/desktop/call.html @@ -10,7 +10,6 @@ diff --git a/packages/simplex-chat-webrtc/src/call.ts b/packages/simplex-chat-webrtc/src/call.ts index f3b9af784b..1d68b83f73 100644 --- a/packages/simplex-chat-webrtc/src/call.ts +++ b/packages/simplex-chat-webrtc/src/call.ts @@ -577,6 +577,9 @@ const processCommand = (function () { // setupVideoElement(videos.remote) videos.local.srcObject = call.localStream videos.remote.srcObject = call.remoteStream + // Without doing it manually Firefox shows black screen but video can be played in Picture-in-Picture + videos.local.play() + videos.remote.play() } async function setupEncryptionWorker(call: Call) { @@ -652,7 +655,9 @@ const processCommand = (function () { codecs.splice(selectedCodecIndex, 1) codecs.unshift(selectedCodec) for (const t of call.connection.getTransceivers()) { - if (t.sender.track?.kind === "video") { + // Firefox doesn't have this function implemented: + // https://bugzilla.mozilla.org/show_bug.cgi?id=1396922 + if (t.sender.track?.kind === "video" && t.setCodecPreferences) { t.setCodecPreferences(codecs) } } @@ -690,6 +695,7 @@ const processCommand = (function () { replaceTracks(pc, videoTracks) call.localStream = localStream videos.local.srcObject = localStream + videos.local.play() } function replaceTracks(pc: RTCPeerConnection, tracks: MediaStreamTrack[]) { diff --git a/packages/simplex-chat-webrtc/src/desktop/call.html b/packages/simplex-chat-webrtc/src/desktop/call.html index 59ca2b58b0..2600062b02 100644 --- a/packages/simplex-chat-webrtc/src/desktop/call.html +++ b/packages/simplex-chat-webrtc/src/desktop/call.html @@ -10,7 +10,6 @@ From 5e71d00acee466f7d9e5758f402336b600bf2409 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Tue, 16 Apr 2024 14:38:46 +0700 Subject: [PATCH 47/60] android, desktop: workaround of missing stuns support in calls (#4033) * android, desktop: workaround of missing stuns support in calls * const --- .../src/commonMain/resources/assets/www/call.js | 12 +++++++++++- packages/simplex-chat-webrtc/src/call.ts | 12 +++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/apps/multiplatform/common/src/commonMain/resources/assets/www/call.js b/apps/multiplatform/common/src/commonMain/resources/assets/www/call.js index 9d9782e90c..9e7d29189f 100644 --- a/apps/multiplatform/common/src/commonMain/resources/assets/www/call.js +++ b/apps/multiplatform/common/src/commonMain/resources/assets/www/call.js @@ -111,7 +111,17 @@ const processCommand = (function () { }); } async function initializeCall(config, mediaType, aesKey) { - const pc = new RTCPeerConnection(config.peerConnectionConfig); + var _a; + let pc; + try { + pc = new RTCPeerConnection(config.peerConnectionConfig); + } + catch (e) { + console.log("Error while constructing RTCPeerConnection, will try without 'stuns' specified: " + e); + const withoutStuns = (_a = config.peerConnectionConfig.iceServers) === null || _a === void 0 ? void 0 : _a.filter((elem) => typeof elem.urls === "string" ? !elem.urls.startsWith("stuns:") : !elem.urls.some((url) => url.startsWith("stuns:"))); + config.peerConnectionConfig.iceServers = withoutStuns; + pc = new RTCPeerConnection(config.peerConnectionConfig); + } const remoteStream = new MediaStream(); const localCamera = VideoCamera.User; const localStream = await getLocalMediaStream(mediaType, localCamera); diff --git a/packages/simplex-chat-webrtc/src/call.ts b/packages/simplex-chat-webrtc/src/call.ts index 1d68b83f73..41241e22c2 100644 --- a/packages/simplex-chat-webrtc/src/call.ts +++ b/packages/simplex-chat-webrtc/src/call.ts @@ -321,7 +321,17 @@ const processCommand = (function () { } async function initializeCall(config: CallConfig, mediaType: CallMediaType, aesKey?: string): Promise { - const pc = new RTCPeerConnection(config.peerConnectionConfig) + let pc: RTCPeerConnection + try { + pc = new RTCPeerConnection(config.peerConnectionConfig) + } catch (e) { + console.log("Error while constructing RTCPeerConnection, will try without 'stuns' specified: " + e) + const withoutStuns = config.peerConnectionConfig.iceServers?.filter((elem) => + typeof elem.urls === "string" ? !elem.urls.startsWith("stuns:") : !elem.urls.some((url) => url.startsWith("stuns:")) + ) + config.peerConnectionConfig.iceServers = withoutStuns + pc = new RTCPeerConnection(config.peerConnectionConfig) + } const remoteStream = new MediaStream() const localCamera = VideoCamera.User const localStream = await getLocalMediaStream(mediaType, localCamera) From 77f5c678d5a4af25abb1b90cd684e1c1dcad2cbc Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Tue, 16 Apr 2024 12:28:39 +0400 Subject: [PATCH 48/60] ios: forward ui (#4024) * wip * wip * fixes * improvements * info * fix * dont cleanup file * info design, text * text * rework with LazyVStack * delay * refactor * move delay * fix * refactor * refactor 2 * keep current message * forward with quote, context icons * info * preserve draft * remove newline * improve search * info * layout --------- Co-authored-by: Evgeny Poberezkin --- apps/ios/Shared/Model/SimpleXAPI.swift | 16 +- .../Views/Chat/ChatItem/FramedItemView.swift | 8 +- .../Views/Chat/ChatItemForwardingView.swift | 152 ++++++++++++++++++ .../Shared/Views/Chat/ChatItemInfoView.swift | 89 ++++++++++ apps/ios/Shared/Views/Chat/ChatView.swift | 34 +++- .../Chat/ComposeMessage/ComposeView.swift | 58 ++++++- .../Chat/ComposeMessage/ContextItemView.swift | 31 ++-- .../Chat/ComposeMessage/SendMessageView.swift | 4 +- .../ios/SimpleX NSE/NotificationService.swift | 3 - apps/ios/SimpleX.xcodeproj/project.pbxproj | 4 + apps/ios/SimpleXChat/APITypes.swift | 3 + apps/ios/SimpleXChat/ChatTypes.swift | 20 ++- 12 files changed, 391 insertions(+), 31 deletions(-) create mode 100644 apps/ios/Shared/Views/Chat/ChatItemForwardingView.swift diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift index 69b660ad3c..65e24eeb25 100644 --- a/apps/ios/Shared/Model/SimpleXAPI.swift +++ b/apps/ios/Shared/Model/SimpleXAPI.swift @@ -353,11 +353,20 @@ func apiGetChatItemInfo(type: ChatType, id: Int64, itemId: Int64) async throws - throw r } +func apiForwardChatItem(toChatType: ChatType, toChatId: Int64, fromChatType: ChatType, fromChatId: Int64, itemId: Int64) async -> ChatItem? { + let cmd: ChatCommand = .apiForwardChatItem(toChatType: toChatType, toChatId: toChatId, fromChatType: fromChatType, fromChatId: fromChatId, itemId: itemId) + return await processSendMessageCmd(toChatType: toChatType, cmd: cmd) +} + func apiSendMessage(type: ChatType, id: Int64, file: CryptoFile?, quotedItemId: Int64?, msg: MsgContent, live: Bool = false, ttl: Int? = nil) async -> ChatItem? { - let chatModel = ChatModel.shared let cmd: ChatCommand = .apiSendMessage(type: type, id: id, file: file, quotedItemId: quotedItemId, msg: msg, live: live, ttl: ttl) + return await processSendMessageCmd(toChatType: type, cmd: cmd) +} + +private func processSendMessageCmd(toChatType: ChatType, cmd: ChatCommand) async -> ChatItem? { + let chatModel = ChatModel.shared let r: ChatResponse - if type == .direct { + if toChatType == .direct { var cItem: ChatItem? = nil let endTask = beginBGTask({ if let cItem = cItem { @@ -397,7 +406,7 @@ func apiCreateChatItem(noteFolderId: Int64, file: CryptoFile?, msg: MsgContent) } private func sendMessageErrorAlert(_ r: ChatResponse) { - logger.error("apiSendMessage error: \(String(describing: r))") + logger.error("send message error: \(String(describing: r))") AlertManager.shared.showAlertMsg( title: "Error sending message", message: "Error: \(String(describing: r))" @@ -1803,7 +1812,6 @@ func processReceivedMsg(_ res: ChatResponse) async { } case let .sndFileCompleteXFTP(user, aChatItem, _): await chatItemSimpleUpdate(user, aChatItem) - Task { cleanupFile(aChatItem) } case let .sndFileError(user, aChatItem, _): if let aChatItem = aChatItem { await chatItemSimpleUpdate(user, aChatItem) diff --git a/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift b/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift index 3e292c131b..3b10bcad55 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift @@ -65,8 +65,8 @@ struct FramedItemView: View { } } } - } else if chatItem.meta.itemForwarded != nil { - framedItemHeader(icon: "arrowshape.turn.up.forward", caption: Text("forwarded").italic()) + } else if let itemForwarded = chatItem.meta.itemForwarded { + framedItemHeader(icon: "arrowshape.turn.up.forward", caption: Text(itemForwarded.text(chat.chatInfo.chatType)).italic(), pad: true) } ChatItemContentView(chat: chat, chatItem: chatItem, revealed: $revealed, msgContentView: framedMsgContentView) @@ -165,7 +165,7 @@ struct FramedItemView: View { ) } - @ViewBuilder func framedItemHeader(icon: String? = nil, caption: Text) -> some View { + @ViewBuilder func framedItemHeader(icon: String? = nil, caption: Text, pad: Bool = true) -> some View { let v = HStack(spacing: 6) { if let icon = icon { Image(systemName: icon) @@ -180,7 +180,7 @@ struct FramedItemView: View { .foregroundColor(.secondary) .padding(.horizontal, 12) .padding(.top, 6) - .padding(.bottom, chatItem.quotedItem == nil ? 6 : 0) // TODO think how to regroup + .padding(.bottom, pad || (chatItem.quotedItem == nil && chatItem.meta.itemForwarded == nil) ? 6 : 0) .overlay(DetermineWidth()) .frame(minWidth: msgWidth, alignment: .leading) .background(chatItemFrameContextColor(chatItem, colorScheme)) diff --git a/apps/ios/Shared/Views/Chat/ChatItemForwardingView.swift b/apps/ios/Shared/Views/Chat/ChatItemForwardingView.swift new file mode 100644 index 0000000000..f575b6f9a2 --- /dev/null +++ b/apps/ios/Shared/Views/Chat/ChatItemForwardingView.swift @@ -0,0 +1,152 @@ +// +// ChatItemForwardingView.swift +// SimpleX (iOS) +// +// Created by spaced4ndy on 12.04.2024. +// Copyright © 2024 SimpleX Chat. All rights reserved. +// + +import SwiftUI +import SimpleXChat + +struct ChatItemForwardingView: View { + @EnvironmentObject var chatModel: ChatModel + @Environment(\.dismiss) var dismiss + + var ci: ChatItem + var fromChatInfo: ChatInfo + @Binding var composeState: ComposeState + + @State private var searchText: String = "" + @FocusState private var searchFocused + + var body: some View { + NavigationView { + forwardListView() + .toolbar { + ToolbarItem(placement: .navigationBarLeading) { + Button("Cancel") { + dismiss() + } + } + ToolbarItem(placement: .principal) { + Text("Forward") + .bold() + } + } + } + } + + @ViewBuilder private func forwardListView() -> some View { + VStack(alignment: .leading) { + let chatsToForwardTo = filterChatsToForwardTo() + if !chatsToForwardTo.isEmpty { + ScrollView { + LazyVStack(alignment: .leading, spacing: 8) { + searchFieldView(text: $searchText, focussed: $searchFocused) + .padding(.leading, 2) + let s = searchText.trimmingCharacters(in: .whitespaces).localizedLowercase + let chats = s == "" ? chatsToForwardTo : chatsToForwardTo.filter { filterChatSearched($0, s) } + ForEach(chats) { chat in + Divider() + forwardListNavLinkView(chat) + .disabled(chatModel.deletedChats.contains(chat.chatInfo.id)) + } + } + .padding(.horizontal) + .padding(.vertical, 8) + .background(Color(uiColor: .systemBackground)) + .cornerRadius(12) + .padding(.horizontal) + } + .background(Color(.systemGroupedBackground)) + } else { + emptyList() + } + } + } + + private func filterChatsToForwardTo() -> [Chat] { + var filteredChats = chatModel.chats.filter({ canForwardToChat($0) }) + if let index = filteredChats.firstIndex(where: { $0.chatInfo.chatType == .local }) { + let privateNotes = filteredChats.remove(at: index) + filteredChats.insert(privateNotes, at: 0) + } + return filteredChats + } + + private func filterChatSearched(_ chat: Chat, _ searchStr: String) -> Bool { + let cInfo = chat.chatInfo + return switch cInfo { + case let .direct(contact): + viewNameContains(cInfo, searchStr) || + contact.profile.displayName.localizedLowercase.contains(searchStr) || + contact.fullName.localizedLowercase.contains(searchStr) + default: + viewNameContains(cInfo, searchStr) + } + + func viewNameContains(_ cInfo: ChatInfo, _ s: String) -> Bool { + cInfo.chatViewName.localizedLowercase.contains(s) + } + } + + private func canForwardToChat(_ chat: Chat) -> Bool { + switch chat.chatInfo { + case let .direct(contact): contact.sendMsgEnabled && !contact.nextSendGrpInv + case let .group(groupInfo): groupInfo.sendMsgEnabled + case let .local(noteFolder): noteFolder.sendMsgEnabled + case .contactRequest: false + case .contactConnection: false + case .invalidJSON: false + } + } + + private func emptyList() -> some View { + Text("No filtered chats") + .foregroundColor(.secondary) + .frame(maxWidth: .infinity) + } + + @ViewBuilder private func forwardListNavLinkView(_ chat: Chat) -> some View { + Button { + dismiss() + if chat.id == fromChatInfo.id { + composeState = ComposeState( + message: composeState.message, + preview: composeState.linkPreview != nil ? composeState.preview : .noPreview, + contextItem: .forwardingItem(chatItem: ci, fromChatInfo: fromChatInfo) + ) + } else { + composeState = ComposeState.init(forwardingItem: ci, fromChatInfo: fromChatInfo) + chatModel.chatId = chat.id + } + } label: { + HStack { + ChatInfoImage(chat: chat) + .frame(width: 30, height: 30) + .padding(.trailing, 2) + Text(chat.chatInfo.chatViewName) + .foregroundColor(.primary) + .lineLimit(1) + if chat.chatInfo.incognito { + Spacer() + Image(systemName: "theatermasks") + .resizable() + .scaledToFit() + .frame(width: 22, height: 22) + .foregroundColor(.secondary) + } + } + .frame(maxWidth: .infinity, alignment: .leading) + } + } +} + +#Preview { + ChatItemForwardingView( + ci: ChatItem.getSample(1, .directSnd, .now, "hello"), + fromChatInfo: .direct(contact: Contact.sampleData), + composeState: Binding.constant(ComposeState(message: "hello")) + ) +} diff --git a/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift b/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift index 8dd43cc01b..0d1f99f3bd 100644 --- a/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift @@ -11,6 +11,7 @@ import SimpleXChat struct ChatItemInfoView: View { @EnvironmentObject var chatModel: ChatModel + @Environment(\.dismiss) var dismiss @Environment(\.colorScheme) var colorScheme var ci: ChatItem @Binding var chatItemInfo: ChatItemInfo? @@ -21,6 +22,7 @@ struct ChatItemInfoView: View { enum CIInfoTab { case history case quote + case forwarded case delivery } @@ -68,9 +70,20 @@ struct ChatItemInfoView: View { if ci.quotedItem != nil { numTabs += 1 } + if chatItemInfo?.forwardedFromChatItem != nil { + numTabs += 1 + } return numTabs } + private var local: Bool { + switch ci.chatDir { + case .localSnd: true + case .localRcv: true + default: false + } + } + @ViewBuilder private func itemInfoView() -> some View { if numTabs > 1 { TabView(selection: $selection) { @@ -93,6 +106,13 @@ struct ChatItemInfoView: View { } .tag(CIInfoTab.quote) } + if let forwardedFromItem = chatItemInfo?.forwardedFromChatItem { + forwardedFromTab(forwardedFromItem) + .tabItem { + Label(local ? "Saved" : "Forwarded", systemImage: "arrowshape.turn.up.forward") + } + .tag(CIInfoTab.forwarded) + } } .onAppear { if chatItemInfo?.memberDeliveryStatuses != nil { @@ -275,6 +295,75 @@ struct ChatItemInfoView: View { : Color(uiColor: .tertiarySystemGroupedBackground) } + @ViewBuilder private func forwardedFromTab(_ forwardedFromItem: AChatItem) -> some View { + ScrollView { + VStack(alignment: .leading, spacing: 16) { + details() + Divider().padding(.vertical) + Text(local ? "Saved from" : "Forwarded from") + .font(.title2) + .padding(.bottom, 4) + forwardedFromView(forwardedFromItem) + } + .padding() + } + .frame(maxHeight: .infinity, alignment: .top) + } + + private func forwardedFromView(_ forwardedFromItem: AChatItem) -> some View { + VStack(alignment: .leading, spacing: 8) { + Button { + Task { + await MainActor.run { + chatModel.chatId = forwardedFromItem.chatInfo.id + dismiss() + } + } + } label: { + forwardedFromSender(forwardedFromItem) + } + + if !local { + Divider().padding(.top, 32) + Text("Recipient(s) can't see who this message is from.") + .font(.caption) + .foregroundColor(.secondary) + } + } + } + + @ViewBuilder private func forwardedFromSender(_ forwardedFromItem: AChatItem) -> some View { + HStack { + ChatInfoImage(chat: Chat(chatInfo: forwardedFromItem.chatInfo)) + .frame(width: 48, height: 48) + .padding(.trailing, 6) + + if forwardedFromItem.chatItem.chatDir.sent { + VStack(alignment: .leading) { + Text("you") + .italic() + .foregroundColor(.primary) + Text(forwardedFromItem.chatInfo.chatViewName) + .foregroundColor(.secondary) + .lineLimit(1) + } + } else if case let .groupRcv(groupMember) = forwardedFromItem.chatItem.chatDir { + VStack(alignment: .leading) { + Text(groupMember.chatViewName) + .foregroundColor(.primary) + .lineLimit(1) + Text(forwardedFromItem.chatInfo.chatViewName) + .foregroundColor(.secondary) + .lineLimit(1) + } + } else { + Text(forwardedFromItem.chatInfo.chatViewName) + .foregroundColor(.primary) + .lineLimit(1) + } + } + } + @ViewBuilder private func deliveryTab(_ memberDeliveryStatuses: [MemberDeliveryStatus]) -> some View { ScrollView { VStack(alignment: .leading, spacing: 16) { diff --git a/apps/ios/Shared/Views/Chat/ChatView.swift b/apps/ios/Shared/Views/Chat/ChatView.swift index 34565193ff..6651b7cc5a 100644 --- a/apps/ios/Shared/Views/Chat/ChatView.swift +++ b/apps/ios/Shared/Views/Chat/ChatView.swift @@ -83,7 +83,11 @@ struct ChatView: View { initChatView() } .onChange(of: chatModel.chatId) { cId in - if cId != nil { + showChatInfoSheet = false + if let cId { + if let c = chatModel.getChat(cId) { + chat = c + } initChatView() } else { dismiss() @@ -251,7 +255,8 @@ struct ChatView: View { } } } - if chatModel.draftChatId == cInfo.id, let draft = chatModel.draft { + if chatModel.draftChatId == cInfo.id && !composeState.forwarding, + let draft = chatModel.draft { composeState = draft } if chat.chatStats.unreadChat { @@ -342,8 +347,8 @@ struct ChatView: View { .onChange(of: searchText) { _ in loadChat(chat: chat, search: searchText) } - .onChange(of: chatModel.chatId) { _ in - if let chatId = chatModel.chatId, let c = chatModel.getChat(chatId) { + .onChange(of: chatModel.chatId) { chatId in + if let chatId, let c = chatModel.getChat(chatId) { chat = c showChatInfoSheet = false loadChat(chat: c) @@ -539,6 +544,7 @@ struct ChatView: View { @State private var revealed = false @State private var showChatItemInfoSheet: Bool = false @State private var chatItemInfo: ChatItemInfo? + @State private var showForwardingSheet: Bool = false @State private var allowMenu: Bool = true @@ -693,6 +699,14 @@ struct ChatView: View { }) { ChatItemInfoView(ci: ci, chatItemInfo: $chatItemInfo) } + .sheet(isPresented: $showForwardingSheet) { + if #available(iOS 16.0, *) { + ChatItemForwardingView(ci: ci, fromChatInfo: chat.chatInfo, composeState: $composeState) + .presentationDetents([.fraction(0.8)]) + } else { + ChatItemForwardingView(ci: ci, fromChatInfo: chat.chatInfo, composeState: $composeState) + } + } } private func showMemberImage(_ member: GroupMember, _ prevItem: ChatItem?) -> Bool { @@ -775,6 +789,9 @@ struct ChatView: View { if ci.meta.editable && !mc.isVoice && !live { menu.append(editAction(ci)) } + if ci.meta.itemDeleted == nil && !ci.isLiveDummy && !live { + menu.append(forwardUIAction(ci)) + } if !ci.isLiveDummy { menu.append(viewInfoUIAction(ci)) } @@ -826,6 +843,15 @@ struct ChatView: View { } } + private func forwardUIAction(_ ci: ChatItem) -> UIAction { + UIAction( + title: NSLocalizedString("Forward", comment: "chat item action"), + image: UIImage(systemName: "arrowshape.turn.up.forward") + ) { _ in + showForwardingSheet = true + } + } + private func reactionUIMenuPreiOS16(_ rs: [UIAction]) -> UIMenu { UIMenu( title: NSLocalizedString("React…", comment: "chat item menu"), diff --git a/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift b/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift index 24fe983661..6cf9df782b 100644 --- a/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift +++ b/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift @@ -23,6 +23,7 @@ enum ComposeContextItem { case noContextItem case quotedItem(chatItem: ChatItem) case editingItem(chatItem: ChatItem) + case forwardingItem(chatItem: ChatItem, fromChatInfo: ChatInfo) } enum VoiceMessageRecordingState { @@ -72,6 +73,13 @@ struct ComposeState { } } + init(forwardingItem: ChatItem, fromChatInfo: ChatInfo) { + self.message = "" + self.preview = .noPreview + self.contextItem = .forwardingItem(chatItem: forwardingItem, fromChatInfo: fromChatInfo) + self.voiceMessageRecordingState = .noRecording + } + func copy( message: String? = nil, liveMessage: LiveMessage? = nil, @@ -102,12 +110,19 @@ struct ComposeState { } } + var forwarding: Bool { + switch contextItem { + case .forwardingItem: return true + default: return false + } + } + var sendEnabled: Bool { switch preview { case let .mediaPreviews(media): return !media.isEmpty case .voicePreview: return voiceMessageRecordingState == .finished case .filePreview: return true - default: return !message.isEmpty || liveMessage != nil + default: return !message.isEmpty || forwarding || liveMessage != nil } } @@ -153,7 +168,7 @@ struct ComposeState { } var attachmentDisabled: Bool { - if editing || liveMessage != nil || inProgress { return true } + if editing || forwarding || liveMessage != nil || inProgress { return true } switch preview { case .noPreview: return false case .linkPreview: return false @@ -667,6 +682,14 @@ struct ComposeView: View { contextIcon: "pencil", cancelContextItem: { clearState() } ) + case let .forwardingItem(chatItem: forwardedItem, _): + ContextItemView( + chat: chat, + contextItem: forwardedItem, + contextIcon: "arrowshape.turn.up.forward", + cancelContextItem: { composeState = composeState.copy(contextItem: .noContextItem) }, + showSender: false + ) } } @@ -688,6 +711,11 @@ struct ComposeView: View { } if chat.chatInfo.contact?.nextSendGrpInv ?? false { await sendMemberContactInvitation() + } else if case let .forwardingItem(ci, fromChatInfo) = composeState.contextItem { + sent = await forwardItem(ci, fromChatInfo) + if !composeState.message.isEmpty { + sent = await send(checkLinkPreview(), quoted: sent?.id, live: false, ttl: nil) + } } else if case let .editingItem(ci) = composeState.contextItem { sent = await updateMessage(ci, live: live) } else if let liveMessage = liveMessage, liveMessage.sentMsg != nil { @@ -733,7 +761,15 @@ struct ComposeView: View { } } } - await MainActor.run { clearState(live: live) } + await MainActor.run { + let wasForwarding = composeState.forwarding + clearState(live: live) + if wasForwarding, + chatModel.draftChatId == chat.chatInfo.id, + let draft = chatModel.draft { + composeState = draft + } + } return sent func sending() async { @@ -854,6 +890,22 @@ struct ComposeView: View { return nil } + func forwardItem(_ forwardedItem: ChatItem, _ fromChatInfo: ChatInfo) async -> ChatItem? { + if let chatItem = await apiForwardChatItem( + toChatType: chat.chatInfo.chatType, + toChatId: chat.chatInfo.apiId, + fromChatType: fromChatInfo.chatType, + fromChatId: fromChatInfo.apiId, + itemId: forwardedItem.id + ) { + await MainActor.run { + chatModel.addChatItem(chat.chatInfo, chatItem) + } + return chatItem + } + return nil + } + func checkLinkPreview() -> MsgContent { switch (composeState.preview) { case let .linkPreview(linkPreview: linkPreview): diff --git a/apps/ios/Shared/Views/Chat/ComposeMessage/ContextItemView.swift b/apps/ios/Shared/Views/Chat/ComposeMessage/ContextItemView.swift index 3eb128cded..2777d8321c 100644 --- a/apps/ios/Shared/Views/Chat/ComposeMessage/ContextItemView.swift +++ b/apps/ios/Shared/Views/Chat/ComposeMessage/ContextItemView.swift @@ -15,6 +15,7 @@ struct ContextItemView: View { let contextItem: ChatItem let contextIcon: String let cancelContextItem: () -> Void + var showSender: Bool = true var body: some View { HStack { @@ -23,7 +24,7 @@ struct ContextItemView: View { .aspectRatio(contentMode: .fit) .frame(width: 16, height: 16) .foregroundColor(.secondary) - if let sender = contextItem.memberDisplayName { + if showSender, let sender = contextItem.memberDisplayName { VStack(alignment: .leading, spacing: 4) { Text(sender).font(.caption).foregroundColor(.secondary) msgContentView(lines: 2) @@ -48,14 +49,26 @@ struct ContextItemView: View { } private func msgContentView(lines: Int) -> some View { - MsgContentView( - chat: chat, - text: contextItem.text, - formattedText: contextItem.formattedText, - showSecrets: false - ) - .multilineTextAlignment(isRightToLeft(contextItem.text) ? .trailing : .leading) - .lineLimit(lines) + contextMsgPreview() + .multilineTextAlignment(isRightToLeft(contextItem.text) ? .trailing : .leading) + .lineLimit(lines) + } + + private func contextMsgPreview() -> Text { + return attachment() + messageText(contextItem.text, contextItem.formattedText, nil, preview: true, showSecrets: false) + + func attachment() -> Text { + switch contextItem.content.msgContent { + case .file: return image("doc.fill") + case .image: return image("photo") + case .voice: return image("play.fill") + default: return Text("") + } + } + + func image(_ s: String) -> Text { + Text(Image(systemName: s)).foregroundColor(Color(uiColor: .tertiaryLabel)) + Text(" ") + } } } diff --git a/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift b/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift index f9e5b1c2b1..ae0394475d 100644 --- a/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift +++ b/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift @@ -110,6 +110,7 @@ struct SendMessageView: View { } else if showVoiceMessageButton && composeState.message.isEmpty && !composeState.editing + && !composeState.forwarding && composeState.liveMessage == nil && ((composeState.noPreview && vmrs == .noRecording) || (vmrs == .recording && holdingVMR)) { @@ -225,7 +226,8 @@ struct SendMessageView: View { @ViewBuilder private func sendButtonContextMenuItems() -> some View { if composeState.liveMessage == nil, - !composeState.editing { + !composeState.editing, + !composeState.forwarding { if case .noContextItem = composeState.contextItem, !composeState.voicePreview, let send = sendLiveMessage, diff --git a/apps/ios/SimpleX NSE/NotificationService.swift b/apps/ios/SimpleX NSE/NotificationService.swift index efd8f33dd8..faa7f4f44c 100644 --- a/apps/ios/SimpleX NSE/NotificationService.swift +++ b/apps/ios/SimpleX NSE/NotificationService.swift @@ -586,9 +586,6 @@ func receivedMsgNtf(_ res: ChatResponse) async -> (String, NSENotification)? { cleanupDirectFile(aChatItem) } return nil - case let .sndFileCompleteXFTP(_, aChatItem, _): - cleanupFile(aChatItem) - return nil case let .callInvitation(invitation): // Do not post it without CallKit support, iOS will stop launching the app without showing CallKit return ( diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index 9ed03affd7..f3841f43cf 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -172,6 +172,7 @@ 646BB38E283FDB6D001CE359 /* LocalAuthenticationUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 646BB38D283FDB6D001CE359 /* LocalAuthenticationUtils.swift */; }; 647F090E288EA27B00644C40 /* GroupMemberInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 647F090D288EA27B00644C40 /* GroupMemberInfoView.swift */; }; 648010AB281ADD15009009B9 /* CIFileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 648010AA281ADD15009009B9 /* CIFileView.swift */; }; + 648679AB2BC96A74006456E7 /* ChatItemForwardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 648679AA2BC96A74006456E7 /* ChatItemForwardingView.swift */; }; 649BCDA0280460FD00C3A862 /* ComposeImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649BCD9F280460FD00C3A862 /* ComposeImageView.swift */; }; 649BCDA22805D6EF00C3A862 /* CIImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649BCDA12805D6EF00C3A862 /* CIImageView.swift */; }; 64AA1C6927EE10C800AC7277 /* ContextItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64AA1C6827EE10C800AC7277 /* ContextItemView.swift */; }; @@ -464,6 +465,7 @@ 646BB38D283FDB6D001CE359 /* LocalAuthenticationUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalAuthenticationUtils.swift; sourceTree = ""; }; 647F090D288EA27B00644C40 /* GroupMemberInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupMemberInfoView.swift; sourceTree = ""; }; 648010AA281ADD15009009B9 /* CIFileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIFileView.swift; sourceTree = ""; }; + 648679AA2BC96A74006456E7 /* ChatItemForwardingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatItemForwardingView.swift; sourceTree = ""; }; 6493D667280ED77F007A76FB /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 649BCD9F280460FD00C3A862 /* ComposeImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeImageView.swift; sourceTree = ""; }; 649BCDA12805D6EF00C3A862 /* CIImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIImageView.swift; sourceTree = ""; }; @@ -585,6 +587,7 @@ 5CBE6C11294487F7002D9531 /* VerifyCodeView.swift */, 5CBE6C132944CC12002D9531 /* ScanCodeView.swift */, 64C06EB42A0A4A7C00792D4D /* ChatItemInfoView.swift */, + 648679AA2BC96A74006456E7 /* ChatItemForwardingView.swift */, ); path = Chat; sourceTree = ""; @@ -1161,6 +1164,7 @@ 5C10D88828EED12E00E58BF0 /* ContactConnectionInfo.swift in Sources */, 5CBE6C12294487F7002D9531 /* VerifyCodeView.swift in Sources */, 3CDBCF4227FAE51000354CDD /* ComposeLinkView.swift in Sources */, + 648679AB2BC96A74006456E7 /* ChatItemForwardingView.swift in Sources */, 64466DC829FC2B3B00E3D48D /* CreateSimpleXAddress.swift in Sources */, 3CDBCF4827FF621E00354CDD /* CILinkView.swift in Sources */, 5C7505A827B6D34800BE3227 /* ChatInfoToolbar.swift in Sources */, diff --git a/apps/ios/SimpleXChat/APITypes.swift b/apps/ios/SimpleXChat/APITypes.swift index c599b720ae..e27e280e40 100644 --- a/apps/ios/SimpleXChat/APITypes.swift +++ b/apps/ios/SimpleXChat/APITypes.swift @@ -50,6 +50,7 @@ public enum ChatCommand { case apiDeleteChatItem(type: ChatType, id: Int64, itemId: Int64, mode: CIDeleteMode) case apiDeleteMemberChatItem(groupId: Int64, groupMemberId: Int64, itemId: Int64) case apiChatItemReaction(type: ChatType, id: Int64, itemId: Int64, add: Bool, reaction: MsgReaction) + case apiForwardChatItem(toChatType: ChatType, toChatId: Int64, fromChatType: ChatType, fromChatId: Int64, itemId: Int64) case apiGetNtfToken case apiRegisterToken(token: DeviceToken, notificationMode: NotificationsMode) case apiVerifyToken(token: DeviceToken, nonce: String, code: String) @@ -195,6 +196,7 @@ public enum ChatCommand { case let .apiDeleteChatItem(type, id, itemId, mode): return "/_delete item \(ref(type, id)) \(itemId) \(mode.rawValue)" case let .apiDeleteMemberChatItem(groupId, groupMemberId, itemId): return "/_delete member item #\(groupId) \(groupMemberId) \(itemId)" case let .apiChatItemReaction(type, id, itemId, add, reaction): return "/_reaction \(ref(type, id)) \(itemId) \(onOff(add)) \(encodeJSON(reaction))" + case let .apiForwardChatItem(toChatType, toChatId, fromChatType, fromChatId, itemId): return "/_forward \(ref(toChatType, toChatId)) \(ref(fromChatType, fromChatId)) \(itemId)" case .apiGetNtfToken: return "/_ntf get " case let .apiRegisterToken(token, notificationMode): return "/_ntf register \(token.cmdString) \(notificationMode.rawValue)" case let .apiVerifyToken(token, nonce, code): return "/_ntf verify \(token.cmdString) \(nonce) \(code)" @@ -343,6 +345,7 @@ public enum ChatCommand { case .apiConnectContactViaAddress: return "apiConnectContactViaAddress" case .apiDeleteMemberChatItem: return "apiDeleteMemberChatItem" case .apiChatItemReaction: return "apiChatItemReaction" + case .apiForwardChatItem: return "apiForwardChatItem" case .apiGetNtfToken: return "apiGetNtfToken" case .apiRegisterToken: return "apiRegisterToken" case .apiVerifyToken: return "apiVerifyToken" diff --git a/apps/ios/SimpleXChat/ChatTypes.swift b/apps/ios/SimpleXChat/ChatTypes.swift index 9db0468d95..d1f1fc06d1 100644 --- a/apps/ios/SimpleXChat/ChatTypes.swift +++ b/apps/ios/SimpleXChat/ChatTypes.swift @@ -2784,15 +2784,29 @@ public enum CIDeleted: Decodable { } } -public enum MsgDirection: Decodable { - case rcv - case snd +public enum MsgDirection: String, Decodable { + case rcv = "rcv" + case snd = "snd" } public enum CIForwardedFrom: Decodable { case unknown case contact(chatName: String, msgDir: MsgDirection, contactId: Int64?, chatItemId: Int64?) case group(chatName: String, msgDir: MsgDirection, groupId: Int64?, chatItemId: Int64?) + + var chatName: String { + switch self { + case .unknown: "" + case let .contact(chatName, _, _, _): chatName + case let .group(chatName, _, _, _): chatName + } + } + + public func text(_ chatType: ChatType) -> LocalizedStringKey { + chatType == .local + ? (chatName == "" ? "saved" : "saved from \(chatName)") + : "forwarded" + } } public enum CIDeleteMode: String, Decodable { From 4eafdc3723365899baf5c3e6c3a2a8c9a480a886 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Tue, 16 Apr 2024 20:18:22 +0100 Subject: [PATCH 49/60] blog: metadata in messengers (#4038) * blog: metadata in messengers * readme * call.js * picture * revert call.js --- ...40416-dangers-of-metadata-in-messengers.md | 52 ++++++++++++++++++ blog/README.md | 8 +++ blog/images/20240416-metadata.png | Bin 0 -> 104162 bytes blog/images/20240416-whatsapp.jpg | Bin 0 -> 1465896 bytes .../src/_includes/blog_previews/20240416.html | 5 ++ 5 files changed, 65 insertions(+) create mode 100644 blog/20240416-dangers-of-metadata-in-messengers.md create mode 100644 blog/images/20240416-metadata.png create mode 100644 blog/images/20240416-whatsapp.jpg create mode 100644 website/src/_includes/blog_previews/20240416.html diff --git a/blog/20240416-dangers-of-metadata-in-messengers.md b/blog/20240416-dangers-of-metadata-in-messengers.md new file mode 100644 index 0000000000..3b30003798 --- /dev/null +++ b/blog/20240416-dangers-of-metadata-in-messengers.md @@ -0,0 +1,52 @@ +--- +layout: layouts/article.html +title: "The dangers of metadata in messengers" +date: 2024-04-16 +previewBody: blog_previews/20240416.html +image: images/20240416-metadata.png +imageWide: true +permalink: "/blog/20240416-dangers-of-metadata-in-messengers.html" +--- + +# The dangers of metadata in messengers + +**Published:** Apr 16, 2024 + +_By [Esra'a al Shafei](https://mastodon.social/@alshafei)_ + +In many countries around the world, phone numbers are attached to biometrics data and personal IDs. Telecommunications companies are either government owned or are heavily regulated, privately owned monopolies who comply with most government requests for backdoors or user data. The idea that today, we still need to give out our phone numbers as primary identifiers to be able to use the leading messaging apps should be frowned upon and actively challenged. It’s necessary to advocate for private alternatives in messaging that do not rely on user IDs of any kind - and yes, it’s possible. + +Messaging is still not where it needs to be. Privacy is confused with security, when both are not synonymous, and there are major gaps in helping users understand the fundamental differences. + + + +For example, while WhatsApp messages are [end-to-end encrypted](https://faq.whatsapp.com/820124435853543), let’s consider what you give up when you use it, per its own listings in app stores: + +- App activity (app interactions, in-app search history, and other user-generated content) +- Location +- Financial information (user payment info and payment history) +- Contacts and their phone numbers +- Groups you’re a member of +- When you use the app and how often you use it +- Device and other IDs +- Personal info (email address, user IDs, phone number) + +This is called [metadata](https://en.wikipedia.org/wiki/Metadata). It reveals a wealth of information about you and your connections, and in the hands of a centralized monopoly, this can and does get misused in incredibly dangerous ways. Once such metadata is logged, it can create very detailed profiles about who you are, everywhere you’ve been, and everyone you’ve ever spoken to. In settling for apps that normalize this while giving you the illusion of privacy in their marketing, we are doing ourselves a disservice by accepting this as the default. Collectively, we aren’t doing enough to protect ourselves and our social graph from this invasive overreach. + +When stored, aggregated and analyzed, this metadata provides ample information that could potentially incriminate someone or be submitted to authorities. When WhatsApp and Facebook Messenger enabled end-to-end encryption for messages, of course it was a welcome and widely celebrated change. But it’s important to remember that not all end-to-end encryption utilizes the same standards, [some implementations are more secure](https://simplex.chat/blog/20240314-simplex-chat-v5-6-quantum-resistance-signal-double-ratchet-algorithm.html#how-secure-is-end-to-end-encryption-in-different-messengers) than others, so it’s something that shouldn’t necessarily be accepted at face value. More importantly: collecting and storing an obscene amount of metadata should invite global scrutiny, considering this data is often combined with whatever other information companies like Meta harvest about your identity (which is [a lot](https://www.vox.com/recode/23172691/meta-tracking-privacy-hospitals).) + + + +This is one of the many reasons why we need to resist giving out our phone numbers just to access an app, especially to do something as personal and intimate as private messaging. Even though users can sometimes mask their numbers with a username, their identity on the app is still fundamentally tied to their phone number. App operators have access to this, as well as user contacts. Additionally, with a simple modification to the app's source code, the contacts may also gain access in some cases. This should raise more concerns about privacy, and it makes the need for anonymity difficult to achieve. + +Everyone has a different threat model (and if you don’t yet, now is a good time to [create one](https://www.privacyguides.org/en/basics/threat-modeling/#creating-your-threat-model)). For many users today, WhatsApp and other apps may be sufficient for their specific needs, especially in connecting with families and friends who are already on the app and unlikely to migrate elsewhere. If that suits your life and needs, and if you’re aware and consciously accept the risks, great. + +But we also need to acknowledge that the world is becoming increasingly dangerous in the way AI is being used to [supercharge surveillance](https://www.forbes.com/sites/forbestechcouncil/2024/02/02/artificial-intelligence-the-new-eyes-of-surveillance/?sh=cd57bc214f27), and we need to be educated and aware of the risks this is already having on our lives and what it subjects others in your network to when you choose metadata-heavy apps as your primary form of communication. Having alternatives will always be important, even if it’s not what you default to for everyday messaging. Recognize who in your social circles might require the extra privacy, anonymity and security, so that you can play a role in protecting vulnerable individuals who need it most. The messaging app you choose implicates others as well, not just yourself, and while you personally may not require complete privacy, others might have their lives depend on it. + +End-to-end encryption is a solid start, but it's just the beginning of our pursuit for true privacy and security. True privacy means that even when legal demands come knocking, there's no useful metadata to hand over. It's not enough to just protect the content of messages; we need consistent innovation in protecting metadata too. + +Changing ingrained habits is tough, but your privacy is always worth the fight. Although giants like WhatsApp and Telegram may dominate global messaging for now, increasing concerns about data harvesting and AI-driven surveillance are fueling demand for alternatives. SimpleX Chat aims to be one of those strong alternatives, hence its radical focus on a decentralized framework with no user identifiers (in other words, nothing that uniquely identifies users on the protocol level to their contacts or to the relays) and extra optionality (self-hosting an [SMP server](https://simplex.chat/docs/server.html) or [XFTP server](https://simplex.chat/docs/xftp-server.html), access via Tor, [chat profiles](https://simplex.chat/docs/guide/chat-profiles.html) with incognito mode, etc.) + +As of today, most messaging alternatives, including SimpleX, will have some limitations. But with the limited resources we have, we are committed to daily progress towards creating a truly private messenger that anyone can use while maintaining the features that users have come to know and love in messaging interfaces. We want to be the prime example of a messenger that achieves genuine privacy without compromising it for convenience. We need to be able to reliably move away from small and niche use cases to endorsing and enforcing global standards for privacy and making it accessible for all users regardless of their technical expertise. + +We’re grateful for the users and [donors](https://github.com/simplex-chat/simplex-chat#help-us-with-donations) who have been following along on this journey thus far and helping with feedback, anything from bug reports to identifying potential risks. Building in the open has always been a necessity for transparency and ongoing [auditability](https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html), because we don’t want anyone to just take our word for it. [See for yourself](https://github.com/simplex-chat) and engage in the discussions. We fully expect you to hold us accountable to our word. diff --git a/blog/README.md b/blog/README.md index cf93260676..78cd0709ad 100644 --- a/blog/README.md +++ b/blog/README.md @@ -1,5 +1,13 @@ # Blog +Apr 16. 2024 [The dangers of metadata in messengers](./20240416-dangers-of-metadata-in-messengers.md) + +_By [Esra'a al Shafei](https://mastodon.social/@alshafei)_ + +It's important not to be complacent with the current standards of messaging, where metadata aggregation is still normalized in apps falsely and dangerously marketed as "private". This is a post exploring the fundamental differences between privacy and security. + +--- + Apr 4. 2024 [Why I joined SimpleX Chat](./20240404-why-i-joined-simplex-chat-esraa-al-shafei.md) _By [Esra'a al Shafei](https://mastodon.social/@alshafei)_ diff --git a/blog/images/20240416-metadata.png b/blog/images/20240416-metadata.png new file mode 100644 index 0000000000000000000000000000000000000000..743930bf15b4df60fc4b7c2b33e836431298016e GIT binary patch literal 104162 zcmd42RahKR(=|G{I}8p9?(XjH?ruSXySuwP1PwYk!JR;G2@o8DI|KrOz~6b_@9uo( zzc^RtB2Su3nC`uI)vC2tRmZBS$f6+=A%j35G7VsC6 zi=4hY2!w+D?+?_%X3z@=^!6q%C9dW3!m_w?@M&X`HC^&mh ztpJStw?i%z%xF?B_JMw3j|B-VhbRxh z@8;b0y*pGUOOm2Um7~Ir&G^FxH zew1Xi`EQjISs^MVaS6%EraeAQ`T6;^wP#oTZ|GN&aCt2=VW)oBC&KYPo8LiPf~JJ* z)QhSzA@`vo6(F=&o5^1$lu4+U+x?=dMM6MyL|zPp!eD*bx-lH_O!VC~cW|?R5X0`~ zfCTPg$=JvU1ffwWK=kGTWeM|k zOxP8E84)z}-+p0NOh@#-+&DQs&68CtlS#C&v?TnLDpy{I+3tH?w_CQ-AN*$6@v$k2 zZLyHiqT-BEiGa~KCX4+C+tbp;dI!0XPYTqJ7ULzQQZz4EXXmToXpH=xT$|4$b9Y+` ziV4yonG<+~j>E&lvxS1*z>~Ot?((_$gjBZ!+U^d(2Z0@B6N%usY1qJy@pz12Qqn?w zk@v^v7Q2nc-84a_Rf~i9_$)?d>nSNIT>ZEz;2EOHmr;CEG4(>Y!T7hoSHaifW~_d= z^5smPrt(y20Z+GhbZVf$Epcⅈl!ZT72)8-7LsvUY=Ie;ZQ&HT94u;+%k$5WhWlW zc9XHs`E-rNHpCW|MEwEUeG7>%OIo0Nyir+CXAPZEl3L1BL&=+L4kqP$2 z{^Nzo&ru=^z6kjZA6G$$jGo4js0@X z@>+{65Hat!_$^gQFUeV}6|-4fToA;sEq;DYb^AiHujfRLQ%n+4^>DH7eZJb%D|hju zExf+-+G)K#(%Z$bN`*9ClhLGykFDYYogECngQ|~N>!Wsmy39{RO_kc*xsQPHj%!v< zHz_Fz((8Gab)hp?K65VjkF?6=x;oPDjPL9{!Xwu7Z5^CFN z9ePUCz4)$L=td%!eDNhZTtmMA&N_&?SR~MX-oflbV<&dI$5-=3v#YC1LNQvD`n~`O z!lCTbQE%E$My6HGdRv8DY?#vB?Z4d@NUM}HAjfE#5NQfq2oDa4%z-mJN32})7ps~t z4u1VmHu;Sf5rYw2gsb&^3hVyy#*#RYuWr<=+i9KW5m)eCkBhr|x8FU3a2%CJ7BtwA z&}nM^n?A))mGHZDHCR_k+`FZZ5fG%_9otUq*a>=_Hw`t|Pc z#cqp9uit%JdC=cKgAWtwv|xSMeh1(nTwpu->R1vJ6WfZTAq7<`h4$a;a(xF&-jJ;M zf?oK@67Pc+58j72rc79c!=qW$%coLEzr4KE-B;Wct~8p?=5eF^nS}&T=W*`}{5n}g z=m7GF`$W2h9L1Y}%?#AT=duGD79r+QB1jnK*vf=dJI_bHM{IecsLHU ze^{&pGlJR8nhweHR@)p_ULW_99Tpe5JkQMhe}2XCh=X9U`0QR?nbsR{yK|UnSNlX@ zA;%h4TN1LH35OREq^DU{c-;P!Uyb(UxcN#cn>6y#JZ}Z;U(^3`i_)z?bAX!+)7jNE zv=aN*zSQ05pRrtXOBWe{PF|mV*(_V0C+}O9FuNWxdhBx&4%!6Zw*BoIkml>mq zb%31%=^l1T++gl(bgrtm%PuSIILYqNA}6Jukc#sI9j;oS~^VH^Bt zS9dPv|8O2Ei%72Jj|k(uhE6H~L08@%OH|Bch>VUT4!qp>vX{%iGO{L2#j*^06M2q3|f<`IF?5M5z{c(^XjB*cJgVC3vOS&5uWEJd=DnfuT zRWwo%3wY3N6#@v&y#{q!lF6v6Q>`Yh^yeB{vibaEvE=9kfC@ZDorq@whbjNxmrh$f zxzfsmD96Hjb;!yLti-7&YH()nzhyGombuAuvU9ncDi;aq3z5X$Ap87r8Rb*A!3T(* zXNWa+xHWqiLh+jQx2&d;M;@miF~#0E=ESI(#OvGJ+vMobn{1W_&3xv{1$8K}n@g*! zdVFv`uD3rY=rt?NM6;gU{?%w_0I>1eYjx_wHb0e>nG@sV+b$Gy-Jrh5-E-9&$9V27 z2pp^{NC}K8?5wJ?O?X!wQOZ^v^yjmWTvD%y&vl8@81{G#1~HG4kuS&W#)@gM6S~;B zomv!m@XJlhtVoNpx=S@s1XS1;69_qXPR)tUH6%tv9{EN798;#Js=)_e)9^?xxzh|x zlI#}3dgEp_?#GGU@`sH28GKI|Dz8=bCo0^ROM z=#gFNa#v6g$P6Ke6{0P5P_A$bpGeGL8NeA1>&68oH!GIy{eK+~CS4sJjrXo2V%3%~ zc|jBNIDVakzmL7JU+ck%*}%lc)~Hk>WG83iRRT)rvb|@X{vQaD)@Lof;_w=sdi!RK zfNucir67({Mtx}L4fVMHb)xyWo6-=6$N0V5+gZm+V%R*_7hPs zrlqAtcsjzD^Vc-*cFZPhA~Ek)lcg*G`K!X9#wO`9gF+A^P6Y2C0K&#Bpj8U^2E(Y= z>dZFyxwvqPRw|>RjSmaz`&4Ln1JUg z2uy$qpH7n!xk85<=XNm3K8^&+YU^~4XV<&-SkI}*F&VSaCx&<;i2uer6RR#$DH1}u zI==V&o@p)EqRA->y9yQkaNXS5*_pv&oEI5191raI51iAaD$`mWW}&|f+BG}b7CQ*f zj$&eBvDnljuT=o2q0dxcij|fKYm8#RI#M6{FjV#W`s}<)c%;574vEF`RvyJi(=^G= zURznw6=Ea8!h#wNx#DnTF>nyS&QS~MQS*r=5%56V`gMEj=I%bMXz*EsI(|TwVqmfp z!QpDF_px)xYo)<>?<2YY4tvN6fF_SU=5+%AGhQHB84lp7P{qS2wZr4VHwg9nYP)!MhOX!tfEhjMhm)#eiD`7%yWhW~4Pc(#=Pp`!GV`P; ztSQWzz)hz8K}M%;=ympC?V7dAL(ihGkCgF!Vff4jt&rV8Xz@mQAz0t5E#Y(p$@5eW z^)4c_4RTK1-4vrPf%HA$^)`p`KRyoM>q3zUC0SF%4cqK9ZFF5v%&=Cl)X+cpfKH6*Mo&trdS3VEt`j4S92?U|as3ZvfhhYDHFe~5f1`u6(kwSjI z>>fLXHE9TqcYiGmMWVD^KO~F3<`g2%C=O7|uvHgJYyzBWIvlP8S8)j~4ZE!#e#1X(0s=&vhd!-9+_ltj4u`-o7`8h`2^Oj` z_;^T4NX&Idd5&~!2ccZSSc>1ElZ#9hxmRDZ2W-9i1Ov!sGGK8dGuKPVZI7E@PvO;3 zXV{T6jXwO2_}E(i>~*&a1krl58nxiEFM^2U;k8#5scn> zo@0UBVBhg^b4NCUceYq`7MsGy$EPRg?~m6<qw-J5J zFQ=&f5C)yPoGr3>?KP*t)kemYHIb5EI`CDb4Ju1@o@%nvGp%KftHT8}Cu<95Qdc5SP?;w=fz{9Cr znzGynqu^tVmR*}p3q2mxO&BXHB=u54Y{8$$=2SqYtqzD<(iD)}I&s4k2!>0>IjYnp zGN5*-l|o(zKWkQXcIa}N-J^T-<08W~;}gerh@!#5)Nxo(mVX=k7KhvxqQww-iG`ap z%@vA|L#t9C?Ee6)-v$xe_KBGHBS}xc@10H37_xl%6g*Sj^w_up!Q=|@Z0MYW7Il48qvt;=vx2rvmi7$h~$r(bUfHv z(m6*EGm@~J4ZGH5cj#L-D}Hfh+oCPK4=C1gDREDLq!A*$@=j-kk3ZGgwlnxmq=6JR zcr*mFfHQ*d`htANG9ap1|gWe+!D(`|($wdlU z$a>ANAdZcLk=z9N8F%MvoHLgj`B%_-ju9w#$(*WN0Lkt%!aT&stj|@fa`X0y1S9j9(g^ z3OXya;*g3FKW^8Zlp4TB7|q9sZsDg7e171T-$`nM9@V5SdR%O=odrOv0Z6*`@nrIj z7G!_ffuY6_O*0k8^waKvb!=NG8$6G}Ft{(js03+J<=V+7Vqy^MtUz!({jaaDOqS#V zay#Z$EDZo!B$A6338%rpqe9q=XDG~e7oCps_*qSQAX!Q87lrls67Kuo{wBXqa@yq% z{h`E?Z3v71Qw5MT{_Ub~FPygS5};oZYhmO7B2nC5JW#m};>WjA}nC}O{3m@*K(y*>EWZcA?fTlZ_s z%p4DdLGS=KT890w)V|s69liB)Z#4d*(M6t0BQG;eqI3Y>e=3K)F6!p~9?l0_G-OUC znSdRdvJXh580Q}<6qdu`aCo>RPLJ2SluRe_tbHLDQE0?$dK8x8mk%)Dd}G-4P#A=` z@afWm&T}rWCnfL~1Sw$K8U6I@*j)S2{qnueSIzg`%%5s?8(GLSa92DZ&y;f5#Eo)w ztJO+1YJ`M^m07qc>&Fs_Tb78upuq)g!jch=2z-63<4EOt0L^2FKePtmj^?mx0e*M#5&RLXdVwjc0yzh)?YYRDp$ zQo{9i0lXwO8!M6)t;+%m3JMbV?(6zG@i6{%Pf0Peh$~QF=rgemQwU%>T$xQa-qX?1 zv1yl3>gTs5uwTOs_)#{Av z=AAS_y+ldrY5n9%=_YP4kdDU;Do7aU=xK#AjUs&jvmU>(TMfT zL{27dB%QDURFCrZP-JRKD~#$bL; z;3TGyV((65JU^KcWJd>$u*R=Xy^U^xS1KVT(vz4LJe2q>UyTBP(#+MU*iijHOq z_s`?GaACkC<$&sKH0?h;PZGe#d2a|sRwP;N=OP0667+O{pXK7YP%iJ%%vX{7Pqc4F zsxE#_rEHQQ;Iu)_&VvILao-6*rF#vT9?cdzW0>hHaUsVHBxN0H@So&aKd_K7d1T(7 zui+rahCq9M_?E?78s$h|4J>MoIid^K#F7-9`wr0Hj#Lg`r3N_o4e}m`5K*;&lfJoc z+78zS#P%1XqC*M_zVedA6CgfDed1u~l@3?qw!_@v?AA!2>y(a}ETZrNR+(%Fu^L;K zzqs4>C<_Y-mEhYoi@ei8b}`&<)f2J-Dz+nj**`Eh1so|Ie=?!?kVw<$*{Hv{8~QS_ zfLe)FhG)@lrlOs^D56V~DWlh_#uP~`4!Dig_}mIsRiH>+U<`0$N6zZgLQ<1*9~ zgo+P@`$ig~c;KRsfYIyB?#sHY=@e`t^?oGI4qU2M-{aE-8O7g2_{}x}+pZuj53NeCcA=?l z!M;t;@#P(l9m-zD~q@% za-G$#)iEb{=U8fLQDlefz25pE-N$K$*Lh1X9%_6YKO{jpB~{p9fvzu!tQf>bHYIn(+6|CQl&~R6VYNbZIS-zB#9!mncu7lZ?FH)Y3*+eJue$K zSt&I-To4z59TXnrJ7}?RdF^57UDpgu#v>rMkW@K`$(XV#q1ySHK!b?kM*1`wN-UGj zoQ|syD1<}oEik&i2*6gXCeoNb>+KFjHX41gcy8V=28AzVPLRg;0?ehoi?iTlrckin z8h1#{zjJZ5!iLoIlpnwa5wlp@y{7!zsa(#6h6W~6#FrJTEOL_CkK=@tneVOuw>b8?Ci z)~X2>*B3zn-6C5=NHU%$qS>D0Gj7pIej3Ku%!yS^sWt*xzdN>V|u z*21bdC@zoic~VgE>3Rq2mH{7T!fJGd^)_Hc;J6ZicbJ&-CI1uPdm~6=;JN$IZsiTQ z-3a)}kf`DF*}wUPyuKWLS;6M*P%I zpqX4hsq18G*J#Bue{@!{gc$b)@Y|4%Ks^V)K1G+s$YIm_gT4dI=KQn!r%#_;+(Z!5 zoouAZk%+GV4rq38a(Q`qbd-I#iu0hg-tH7nYOwmfMq803+wxG=VXc0yB}w}i(Bfb& zO7+cyhu52Oh%~mKUItj=4+StmC4K>i5Y_WX8_4t%1T9* zNOl}9P6s_9?%?+nOwZ>|ecu~+4$@*8|F~E z83Cf#fsh>;Qq?SIO=UR@Q8^!4d#6J@PGl)?_|bSiZ6JF>PA5jK=)JYB!J#xZD4Dk6ZX z$4`be5(D+c{ikH$R}OrG+S3~iK+2>ue?ucD=eEyy>a0RCQ!W-M45bW6y%5s#2@`WW z4~q|7|4{{bpTq5t#b^0ishscFEdg}XKKMfbkR2bZ*@fGf2B-|5->+kUn}vr5I$onM zRVd=KaQ8zd{>JfAETJ%|xcq~xTsdYDpE>?v0{5kV0{`WmKlJXtnCB{?r>iT_Uo6|{Vw>!P;Oy*N{j{sh~iF_5C{Sf=HU%%+8k@@rI369UQCak{d4MeJmtEC76`$5Jubr)71im-|5QA_U zRr5&Db>64Oo+k@%q~BZ+hLw?$aSZpOKHTh$<_s*V*kG5b<~b0#T&4Jr1t5wVBUp7C z1J3x*iFBYd0^Qzn!xh($UL^B~sB_S&f*zZp&%FRBnVf!F<$)ntRvw-#?nE&OOCJ6H?{&jAZ` zwXsFLeiwhbP%u03Z{X|GQ9(s{)VqQ|w(NpJVeeX@9hab^vDjC`E1bqsm}nwC|h=+*Fz$y9k=_0qdKw~wCw?7jETAXA__z~JLig6 zl|0B$rCNMw=Me^Cw3G;DotbA#jgF44syf0DeR0_tfFgn3*TC29h+^F*$_2_zsB$~sns?l|QOqvReE3Elo@ACV-zVI8mTE9Hrv>O85uZOGcSt3Wl@C~S; zksv?RK`#AyI4J0CeAW-V9>;2e>&CEU*Visa7AQ%afM*4!{aEH>J6jalN-35)+H-|4$*jF=}#krd0m=od;)^w%gdPt z(AWyL8J1bEW+FUk9UwuwT60rXx*Fe}-9yPKPH|nnmuScw*VOkhq{!NAB zVPg*o>4E77Unl{IY3924q4LAP?|Z+$S$S)nug;9sQP3)Db`M zVy%F#rI7%o|G82j+vDVWuSWD;q;Og1?$7z>*Gog=^})_ei$sm`ZHA&UuV9kBKX zK5X^+>uxB;)Qa%YuOd7+0!=ABy`02crNdXwg65UanzSzsU)+y=lxPdF+9j8CU`W0e%)8!q1&n4e`VW_z-A0(W^0mvSnsDS1^**+D@8KT8 zE^-^lDj)aX5tGrR??SJxc||`MBijg?!^VOb_gM;HIp-nxu~L3-%UFjB1V95u25}dc zlX#jeX=ebP({@HGSP5tkeQDj><5%~B3DBfTpI}CMg*7~!pLMx^d^P+?teLvNgzA=g z5rUb{J+go|pK5X`uUpQaMGJ#(L{dl5CtOWR^=~kyoP_m;1CSZtfmSWIzWSCyII_P= z9@ht8#e;)`53P+;iB@TE6M32u^-2X>nVV~}BX{Qe|zv31?QvU-uV895ol?~wiJ+qjSeu48>?0=?W4$RoA zo1=?I(pAn2swDnr#^wYDo08#qzgzzQ(|k-Fy>V{JRz6>zuH&gh$UC18P2Yu%LwUeH}CO)DPVBF;2Fc3Ydowa#%IaLViDnUq2 z21lYogF3y|ZD(sJJ%bR-a{2sjbIw;s3&MAtuOpdmmOW4nquni7=Ksclfa4Hhs>aSz zlVAFf0n#+PmLS82iwHHs#>dNoR#M+39LPH#);rjq zH{B^5zX=GLe}hnN1d943&*3YvNHT>oqyE)CMJb5y@E%yTN2GH0)sx^W6H4E|K?}QM zzczohpgw8Ok?R~0NHl0%Tz!>}Y5niKQpTqKqy?oD*O(+{qxwW-lqvMwfXrXF3VenZ zwlm`>B2CG`p^$~2uIjg|bV2c8MyRn!Qz?>L=^W|*%u&rKN>b zB;1%q`Sj|%PgI|@$ZRHf|5GR-vLIg)4@;Y8wo+nZ)Q{LkH@zU9NhxK zh&E5ybm9#>cV)7|`r~Fq&M(}!p&OC7l1b~-`}1+-r_!<~d@+M_GM{fhU#P~*N2HP@ zI{&j>ComrRy`$Q(NH_4p-^K`OC*NgOsy{A8^XJgDdFoyVu@)MP>J!ORZT%-8%QxV) zX^bjX?70}=T=2e4J&}(Yr5{w%`R{tg&3(|~38R zd|H9F8O`6=!fpBQk-ib?>Te+YsPPFmDboO{&_A7Pvfp;nwTEmPzB0J!r&`C8UKQ^zZ#^hw+h6D({oZV$s6&Hu3J+>;$q^MXzLqt@@(T1 zsTj)H;d^IfGTz_(cONRko0PWLCp4|m@)4`Py6JBrczi_4sc3t&Q%e;8PhfuNuDhP5 z689r5E=SHTVV~8MW|Dq@N~A)*@c9@w9d0`0mkRVAgRv(_6wQZ9@+eEb6K-4SgotCRS6e2d*u z+pvkP9rcA8yx7jA)?=vhu9$ykb|6vBvG$&wUA$K3Rv(Yb{P2u=J;t0CxXoiZTXEKa z;fuy1v<X@T3X&0g{6y1__PG3Z&~7~(K8AEFtD8Ai&mM=YEX*&T7R>$ zf&vFoB40~r5H~cFM#H_<+VLy2?&nO7DGgG5X~N}+udl>YLw#t5kvM*Wb}t+;NHRnM zQ{tIU78ak_JwsinnExyTBb8siJB(7lJ)>_o#_`%|xz!s?80ko9Sy`>w|6;>y*O;v&P`Nf}vLXo$4K)qC*9KbRv{N{r6oJs66jrm|YvVZfG)PpSPPUwH<0DMz1lIVh zDw-iJTaCvNf59bf_xI@DNkSs*@eeRubr($@M5o(e1k9aHX3*aOzOt0K$CrN(0$rm= zBbgM>dz`UA&_~WRc%MnBWCN{{E+dom_cNmoc8$&?ngm#26`6JE2ELd7L#pao?^7)( zKj$0rygfiLfI)~^%C8d>NbURM$+Wa!C@{UPd**~GnqQ%Kqq08E^@X_D9s@^nK{vXp z(diIUju2dttIxu&FYjkUIepy&Xl80ED#&lZP+0(Gk!rMS!N53P%;ex8)EtBJR?jt2 zJGEj~xoHI87`1#sHW@$jlnEEvD$%@VsbzDGg8RTFjz_5f(a1``dPLNSJ~5W}m|lpH zvBn78i*7V(q%%K14-hLmfLs=7K^YuiAraOB-tsR=OtVzCG0Bg8G$rg?AY(mWBQ8}f z`V%qwkA(^6!xAhbbyQfoSeDiby5MN&(QH>hA^`sE-LJZcciJUlLA1280me(4_0o&* z2*H1w;%t2bs(_g+4|YJ$@=ut;sRo42=XBBR81mP~)PDUcG9`rp(Vp0kFd7{DNmcv# z3h~Q%qvvRortM6@2{0~~&0>73r(vy{Eb0G!<4&NU8c|6@xK6W$0qWm&BDmnyVwSR2 zXfrM&>m%z*M{AA<5E8ESXNJtJ#HB|NdI-eN=Z@$-pyI|zt^jkBz{KbpK#bE%#a4Cd z)VwCbSiK#M+FhqD-tuMnFD#`;3S(?_m(+jTFIP*1NCVMC7=~a{r9NRnMKh@VFB`40 zWKf6E{G8I*`Z6;Z-XSO)r&P{4SaT6sa{ymFjtpk9+pBYPbNh3d|6v@%NlX5cXzwLm z8zVhKd{T~l;?7~7wReAOBf-ZjGYS#dk+rRGYOQ$G`hQ#Tl_Rf*OQJr-Eel#e)aobp zk&zibm5@*m;8?J*uvj$Q)*av6_r#hi6MNn^G8;+6@QkrO+$SDqo2aukgpc;@%_Fyq z8F#RdGwJux33MSsfEZqLQcCewqopATt^L`Q)^P-bt(%&fx;Cm;3C3$!tlp-m!N_b~ zeY!n^R5mz6;vL7pDv{Op23W1HIDf-GF$xA zv`UBj7ElSP%@|s{!Tf`Qq_bt(Mj3pp)$&Pd92^|Y9u=Mg0#aD`Xr3sJXnyqs)grKC z*w3{iQ0IVwT*z)IgC|Y{6Q+o-a`{ zqHnkS_z03aqVR<}WQ^(xmL->*xdd`{(m)>aBPnW<7z8Nb1NG{C;=BX*p65F^{emn$ zak@{LkE*o5fdf(s2vOxud$azAm6^-?zH8z+>?9auK5N1nsmt24D89FC??zWQkCBW^ z*#F#az&g^IhK7n@AI;354O>!k)Ey@F-}yAp)MqLfnBT5eOPQB5d86XzNoMl>?vg3H zd3X>36dWKhG}FT3=4vF@E4>@YI3~&LEMEqI1yO3P$uM#Orymw2_lDBkY$aJEDHWGl)tCNUyE#?wf;NrhF5*GMjQ z6!f%eM5zG@3>~0%^ELcm4&9PvUX!boY3$sZbD_)0JOmw!4~~1hIk2aenl+`d`Tb#% zwz~<{zq#?d`@uxq)uuNmponJAMsPhEiGmL}Ua7p!Ch64Bxs^(f=i^sLFRgBUG(ULd z31L?wknpDvV0XFChq2jL30QDpvRYa+`vRU`U+z?8f&fLKQTg1^3FIj|*0I8Q+owqY z!Gt>-smvQGBuzgJo>`S8DRL2bGWZZcwWM@>t-rr=DWyUsP^?n_u&fZSa`)YXqy_)Y zd^zu3Or})XJTPTb4Rm>d-aOZhZbbsTfPmMb`V!FwnUh*=j z^qir-%aRAeQd9lL1Hd;O0rqBkWCXTN1I&oTJz*!!Oirku4$F(2XDx!LR2_ z?k)mRAJHFin#fzJ(c2B0@upu07g;jsjfZBRStSelN3bn(LI0wXDQZ0(fJQ=c%%2hR zVeq}^HB^Uf6s;7L{>5O@8yb3(ZvPc8N7B;!X#_VHI<*oIPnN}UoxbJNacVI6^VyEG zKRW3n+Qq7AFvt_ihS0MnLW|Q5mtY7EG|r?evUykzXUl+3LmYS3HD%3|j*3EaNnWq> z40OVZ1w8-FXMjt6&9+%qW-sphAluI`&LGu4ozDyt#^$91XM9_GH$b5g%JDALp@cUL={M#~-SKAbi(h~*BbUtfN{IcI#noC6vMiWASH_dyl{x$-I!A-2?VkVH7SK;aN z`zh)iQKl>vu09+P%Guf39Ub0)n*&TBO#~6y($d0O7|TqKd}(vlI8J{$w54xubcdp(vv!T13fEsYQI7Azjl=d6 z#s$W5|0%`+t=LDV1F_R{9s6J6DAp#vHisfG&X+vx|NguB!#9KReiR~df41zxs==46 z4CTqsf0Ns(3`zKGm_5T7{5W%U$=q0r?`+gf@@pV_AG#}K`j;pih>9}W&(dGSd8Xm_%>vx2cZ}LK@NN_F16-6A- zsWS`yP4O|4@rHV^`;+Vn&mX>EGY%XKoiHJ@#UG7G{|fijY3H7XE(R{i4cKyf+BRz7QLb66^A7rE?He;7FWQCgUvwNh&sIC$I(k-aCW3x>IC<5 zFKvrsfR!!>$@8Gj?oWqYJULgwf&=%lJ2vfH^P+yF1upb>F2B1C&@33$U5)VA+(6d8 zVG?!IBR6dvMv4>jToN{-NU^Tvh^Bg3=OcQSmnbQ5!IP9+4$^S!W za(4#9PTv6}chZ6`^gW@z7mAzigoV9UV^aNQ6gfWiSD2x2)>QoM}F%`kX8laSBU zzaiX_57-9NZK6}p_J67^q~mcJb;_%|4JWXr>%TNJA@@=i6=hZ`7YcoxI!4+bi*Y>P zT;H0IVa~=a9x@pMi(#H7lJJJAa~)u^D;84S+T=zI9 zPi`PH>wMU~A*|zQXr1mxcqcHTSv)^<#TcFavznp)?0TqvZ^(&8a9r!bvPA@M7;Md` zB%!0DLvVtOm z>tZ<-1XPb-4IXd{pEH}%)Dk-0QBr=>38}~$|6ZdHlh*}IfNpmMVCG9^{YJ#U85O7g zF2+C^$ah}`)Trwn#@*S52$5dcE7M2YqZfTk{2*?!c6Zx^C$ISoooQlzetrQ#LH>A| zy1Ii_F4wUHLhjo$>AR!pT;bqLU6jM=(2LjJ?t7xq{-x3IY!foZ(3TVwSRAJ;QHp%A zoDYs!JJTFUp{khjM)5O;@?lfJwkKu?h!s&AdKJ( z4fozg{eE%|IH-?(Nc8c-Q?Ow71fRp$&Ddc5bFWhug!y7h3-?A!e|Az(ev1mx?goqY zEkc4WV0}R<&&~7jC}>p0^TY-p?Ggrmns-!`cC@nh6&$L^eI|GPQ+0iKH_-AP%GOl0 ztJ7*Qo3koFz0D1d-7D8`uzLSDz%oa;oBajl`lpzGM<@cgYub9|K&!z z@BXYIkF#03=bg-IpU(rINiCNhZY;crwXTwVWy5b%)+Pd^&T|4QFy4bgS&D@7ug9Bx z;0=ql4(IJz(Kn-ZM|}qe=&%~?`cALWm#W{Y+x<7$0FzR1!)IY-v7mhAUr^LFyH0n_ z8+W%!h;q&qb*Pg;T(^*o_wkBc6z1=Fvt=4Pp)_Q74S%$O_&CQX4uLkyjOc}CfMA4Y zj-0nE|DFzTFnHZqN?x3V8{`j4AE$#QWwO?V^vIVvDrs2!WI3I!cOi2@Kz71lzBr_M z9 zZYVTpFc1+ut-v?piVV@oX=fOgvd*$BoMi>3ZMQuymKcN{;}{mAzYOlc1y~MTSaLgP z%@m9FhldZRJ(<#c)_5^I;V5Bz+!T(S`1h_tlS)+?Q`x`iyDtg}I`)xDawB3M(lS|` zLV87b!jFTMkah6Ut}U`#(>Z90iZy5Pj7Tg;Ms5byFofBP_3>(Le|?s09p3BD*DS^= zZw%s%GCTKA z8sYR}QN+NuYD%AI6CKHV-|O!Fwq;t%#%##Ns$E0X^|_$1aMVZ}a1H|VX{PgeLhiI> z{!rD1?c@=Zzcxb*UB1*&>-*pnjgiaYc&Z{+biMy%C4!0)6u-P32nXlx>FMh7)$o(g zJZ%u|!EVRm{RO0jVowF2ixrA^(UNUW>se)IY!Rjz%I?it(sD!faho?fzso4 zSii=Zwd$xahw*NAS`tl$m2Jh_ps-{KOpX6lP zyz{NAtu|1rL%?xVr%Gq}&%M1~c)bi7vB%Z-Hp}RTLIE#K!y^?^b3qp|QGj=tief|= zBo;5^l-OoDE`7+vtMKqgi=2zbpvtiIjCCJ8oJ9kx^RqY;5-96h;1YR|* z%S4|21h7F~R??l;WKZ@Wmu7-@a4S@QDs(HwGM_TDBR7-413#>cZMk-sJ(qe9l~3ct zkJ?{aVZ&Qp$Ya?EhrDhum$I1i@;DTmtQ8Gtqk-XzIGsKDQF(cJhDfdYjKA?Z^BISL zM~3jz9%%d@57y{bb-jP+afKrikM?yRnqk4YHzr`*RRo!O5V_ zbfiBIBU^c{dvC8DjYj;V-?TXN?=w3w`%6oAN6+8DD}pwKARS6IT?$p>7)>$bxK6r4 z1!ODm3*WW+&R@^7pgM!LxJL*&x-Y3FWi2x9SJO6y(Kx)xz;3(A?O?}+u}6s}?)g4| z9LKVyzgsMw9Qrw^yVXc;YK2rgrHjEe3G;BFhg9M834h_+m=r5(%Vg=pwH7t#qOrfcazq{w1B$JbLhK3b`>316Lpp3q!SMRAd z+?8lQVVF+9mW)Qt<1^prWG@>}B>lTwNBCYftO!9=A#O!s$fQujHDEG3eFW({J4&rj z{Q>g9w+20)v#BO0khTj2;DCVQ=Rdhm2vlR6N_Nr!uFKrQYhi7g76!F*BN-i2(eNxw z0nZ1%4BxLIA4zDRZCPN@KnNmh%H-mM;zALMnl8%*^0TT~=x88ldRi_LFS61pO_9q%7Fd^Kho zf2gE)z5IC9m;1fcNfY0eb|s7jGCHNv(7SlWEP2fqYg5PBTWSQx3FOTgDQ;7YwWX5*Q!MIOoiAsfV?qE`JU`xhFgh|n zoGpH|8IKDuK(f?WYl8K7x*G{()#10JxzB-|pt}BtH`swVTA#gH(;ZTW!K?rHGhFZp zPpv-mO**?=@+k>SM-A!ec5{x~&4k9>&))SaYOpqDCVJ>$%#Qn(CO5wMT4~({hwPQ- zY0-D6H@CaKLBt*+R6BJ)pYDzG`}2ifIU)L*{m1k5^-peG7Ofnv-uyqOzb!Bh6o=G~ zC6e%Y?p*`)J|^&B`UCl0>}}+T`n>+t=Vp=8Sz?u!;*)|~e4sJ+!oSbh0 zeWa9V82ZvefrROW08%7aWWxFLQ=@=w_0RRCs0$oT0vXB8x&7vk<&as}Dl*kvfGQ=O zLFE+V|8r<37>sv=ad2>!6bPRhfVDxHU2J{9%j-&V%BQ~N9BMeS=xP@IV6Sl5kZqDM z-~uN+z*Ke)MRN(Qr~yx18)gDu`1aDWmC&RyS1Mgbi4deCyU9KB#7J=o(v?O+qUT`j zkfU7jm2e)>~!*q))%lE zpr`gDUP>dwNR9P$nX{V|{bSQs0yHt~7eJ3RQ6aRY+kND;#$tGBf+-Pg{ym{|=eR>A z%F%3SWrOh<4N_dl25v~EG(FX)SLKb&A(H`Bq}zdq`uulXzm9)A%q&Y@W9?u}@utS| z*K*vH??`zx1=%J!G5$0FW@@vO&sN56Rr9&R7KI0;UiOx0ixG+}8FzQ`A*xnim*Wn; z@$voibZ7MVIX5QIRs(JJg-`Hey^lj3%PvR|>mRXYvb6y^MQUFyEUDk7{Y=gkoro*% zVPFatK3h!zT*Iv=%an#Eb=ImZCO#~1BwjZqH895)5{J(SuUzP#I;1;uK0o$&c=>*) z&a4s80tJUR*YAZR`KYSSjvicpjO(YiFf4BB%J_;Mp);4P60a~Rs34xqwbS>I34bCV z`x0N^OAiytbVYY~0IenQ8&6cyV%s1oUay1Vpuf#QhZ`x7@?TizE@(3tP}?uZb*wNZ z`V=!!dx?CuVz>9LlMWX>S#~S>l$MC(*H%2s-0JWB5mxxRkUh};tuGM%*V*%0%3vvL zv8#O4YR8diT56zO3*w;AWTv7%-p7?1SZT43Xl}C$ax}`V&K)!LJ49eNW`c*GZX5Z; z>~F@$U4PP+jv!oA zUeY=8|8R5-4wW`tJR93)V>jEb&6`~}YqM?JHaDA_ZP#Xdv+eqx_xlg-b7$tvIX{hH zyHc6(3P1%p*=+HVdtBZ}(doKYrWJzt@1Q{OLCjW{plQNi2ZvJL!{_#p}#ELJH9fVS^cXO$htVrq)go{ zLUpnEK#9dA@(TX{-e$j`p{7qbW4YNH$w z`lVcpA;Bt7%eWDz7AUIX@t|K&pbq@K=G>9Mdr~m0?tI5Tm#uqi zh;3X(hQWKG94C7h1wlf19T3+KUb#EMXd3bBviw*3i|8$W&Rih8_<|qWj zQo#rsS}1gb3;&Kld1}cB3p6RvKk+uYZ;!xrdMHp&8-I;m4eI$kG>%}&5wN(f_q6W8 z&}XpSoi=|CTyj4*Q1`n%1Ry}iqWD2OOAMo&_iuH?4NCz(?t#>^HUg90;r&fOmTi)3 z;@uCEo-6&q>YeE1hp8zg)q@_a4@^(rV1uzi^TigIQi+=C#CeVqD&h=w4(53H>5+r6 z^z#;9eoR}aLe2rT(V2Pz%h4-2>wi#`z(9O2RDmK9K6x|;vUziwHVqG%N=ed?B_^Nr zvC6gP{xSOSC-=kB^*7%fUT?!~Kc8rPU+vEV50{uNA&GK_XBN!yWQ$wL&iHp8)YBCk zP|br8tjoK}4U;}a?eiY&B)%YAlj9Id7I*#Dgre;)=^Wzuo38~(~=1v6w< z4xiOT4+Dc-4D}bvr~Vis0Vq)%bX=(@K*9i__I&deFmSHLDXAv-{c!>IYhdu8&66U% z&r^+Si5aPEYHjr`yWG3kzH0-stJ%FpjzIHt6h8X^-&g?iVu2@RR6UrCV&;Ly-u04~ zU@A~WPDKXj1jIZ~+|ni6pniPuqv_O)DOMhBDRk>@Z?4wmIds1Nny0$PQFZ>Stgjk+ zJefhaO;oXVlQ0wcWYgovl3Kr~D~OIOzXwa^Co>665ap1(*$?TK#^L3Ux$dLe$s~hp zO*W_@VN@)u&T3tmn59`N(iPZ~UK({ZGivG0Tb@cO!VA)Iz%y2NqA+6mQ4&i4LcJ^{ zyR1KQ2Fr7A7$TEkx1EiXMo<=mCD`n)>yR)nq;2jC#$&Hk9&F&dP_7rP1K2nFatU(= z$hdkg`LlQ2L_x~`&S>pln$0}*pGE_%JiYmSdi}h@5oKl!LZFNsLhYF7z(VmUAKwb~J&sx_pa123g=B3*)cu}Iz9KL<}LrM+e_Y%^K z(naAKBOt;I&Ymd7T0#ydxS@!6*vK5CBl&IxYb;r^eMzG+vG?Osom9U2 z(?;Xd$J@GA1z^n(Fr93G?Z{9ia50~6aF`P9@yC+I^{j{62o^$)9t*dF8gE9ral(ii zKPuQL%yAgGT(5y;8YKL7Fw_0<^KXTDQruY}A(_=eN4(HU?rZUvdId|a#>$@`>5g-3 zaKYWAa-6Za%F~2fQ{{KWUD@!au)v_=-r;r4=H<9wzmievIX2P`lv+SNKp$KuV4Yit z^p&yJ$Og>7F8002s3@`En_35eu#f`ZHfF7mOfs@+eeU@>REaxhI+?~{w3-xrd+2hy z%I*8{HZ?VMAiBSMrn25?w?;wS_|YPFI^-PcwTcC@*cl*=d~UhC?rFUi18{gsyKhI-mDvC7q ziwAuT{65w(2%yu}sLi__Gj7<47KqBTZR6g%WL!r9gY71|Gnd-W zV_R(5RyV^`im}wHcB|1r2Y%fL5`bwlR7Nu> zqQUrqI9O9ABdl6%1@(ajOD=pg^sfG?onH0XH~*)7#06CB38K)seuH)(i~*QRD+!n; zLW!uEf085AKb3WVyjTK`zAf)ZLTP`a{I}=Z%n4lo2qVz+gL24Y2G>7j{Umbb5Xig< zw2)5|6Vz^%Hs(l1)6aaHYPT2wx4*OCu9o{5B_{5dOn8K#AdY{YS&G#6mU3)NXCRi^ zzBF}aY_jk3k_TQkh`4K%7BPp%F+cUQ9cKMb|<$A5j%*z6ztBo#-r!e@oXLLOn zl}J8W+*ZUg?W23`GM4(QLC_1!kykuf@bB_7V0!T=mvIU4K1&mJ%bw%Q5VWMb)!zWp zB!CJ@+uo2AEnlWW(^Ce-)x41(0f|Vm8Ekb~t~53J`P+9qs6B@gk>)lL&Xnw3=@N?H$<-a}-D$8GKY1DC z6ECmZ2bvhONee&R>4TH>xqHu)7XCgN}T z*bUbacL(cO9D0Iz%^ey!9g03tyP|^RQ(S3y+wnfl;4HJ%b=+)e(Iekc#@{xaZiT6> zM4k80;qH8$9o6%vW93uqA*k)>?EH_X+k}{XHh&gxcdR0wx|@T^ z)02~OWhwRuu8DB5|L`&>RBsuJ(Y z*n6Xo1h!#V^nGwu+Eh~sD(&U_`@KluF7f@Wt5b_k$~nyQ(c#`eck5Q0r1`sa0>B-L zuZ1FOCMdS1^H7@>GrLAely-J@ASO?O5>yz331cEU{O&w}VkDi~nu?SM_}BZc=Ws=g zw&Ex<4g3Q{fVF~y!{M-6&JzlRK_P(Cva}rkH+ia0B%xaFHe+}Z%rAv~xlyMv{UGb< zY_?e8J%`rGd!;c$c?Dm35QWQhd)}d}5${K{##0B%2}3ZJMwsqU-V*2xB!r|al z6po5Sw7}(Z9q)@2EuvpHhxG)b>`bW-eGjzx(WLfvui=Ln*EgobVCX?ff&p&A|LS!8 z;2r-qWn>o>I*^n1Q|R_!5)e+U2f?GmAmQk*VJ9={b&&<@Ahu%#Wt8ScD(|%|v^75$ zI!1=*XnL;~kzeKsOU!owv_v6%8FwjI6_eMANFJ3ZljYR1|5d(Ws}d+#y+V`y$v%#Z zAtIm-n6oxF0DZ=g^!sPClQ_Uy+P`lz=RP8OdT5|q8zA#)BR!qfS^p5EKx|-=gCLqk zd1+{u{`0Vxg=vTG{*xn%3+?sC0pZ}eHV|S{y z(bqAR(S3(yUBLDX@M4JA3{b#m44Cf#GQw9tXwjdh#!?7-7y>#^U3Gb(Xp-_i#B0^$ zqQ#$8{9#bi3y}ip0Gk6Q;;Vx~udnI*X(3wC@0ac0V{FF#r9NQUd$6w96sWhc-npCn zJE>6!zG8B8z_sP7oe<0l<*D~HDVdfsO>&$Vdpgw76<-R6L0KGNt1kAEB~ag(7uoP! z@48$RbUsn02k5Y@urVbrEL3ago;ou^p|bo7!1cjNtv71#thao1pLk$lLjmAXO2n3$ z%qwVSq8%s}3_4uT13P+A!qtv4nBczmtuAl^s`)Lveo1_9E-?@K%%AxTi)Ao6mT$8PQBYK*5!S^I=b57urbuY3@4-pR9i|O#Z#~Pw63JD|TSkUp;*6zg{ z->>f*_oqHGY^BuqRJh=a?KlKihpLE7Tbz&-6A*JPiW`EDRnn5MBy11$wQDz5yk)$Z z^e~s(V6g}J+~{1BM)=Y%Bn#&GUNu<<4Xj)|Sbo@DOP>Sl(&ODZs|8wGTtKkjV3V!x zM}ITx$~Edo8;=l?U+c&Y9GDhBdd0y;jva#2zRCUUS$S?41{bUIZy-4D4Y;u^@Ydt+ zPyps97wUsa0(4vlRXmSd9kS{(a5_Oj!T&COC%DUGAPwXGcy5?OuufZnt^T*^Yq8aJ766M$ApX8c@<^g<&d0Pe zA~$HkG8i{OW+ki*;!|3ZWjRTYdfaGpQlM`gH@);4mFPt!d@8F&@YH2(+uh>!wDQd7 zW156UC!ekX#|IEn7_UN$eS}{BLt!GFQnjLhC%;?M*!=|Ep>d*09cEhqNNM+ZMw#P< zM~Cc`Ra-Kk3w|ct-u6>ip+UvcdI^zT_+?^Li26Z;*nUs9EpwisYDbqWPfq`)WG9p` zJ2vrg;nxU^wf`aTp23b_sx+!VOdPWrk8e2vRQfzH_@z{86nWiC5#5)2#^C-np6IF8 zN2EY`Ho2)4>kII99KJS5aE+Ke{x*JQ_UOY-i6bHunO>l6-&R`gK!##T^>=2}r@* zujCP?@vw-U0$JB9Io5()SXBB%`UuH|i3NKXRa^LtvBO?7TN@jbUbzs^H;5=D_VB_z zY8kyt0qO@X%X8yXQ*v-F5~$Vk3NY?^%dv_NdC+>%@@o81aIHgcNfchY)uB?6SVWF7~4UKxxOk;9Tn1v#T+Y0l%m|h3Bld0g8v%6Cqat zw$R~fqq$PI?qtZlCHqsUNn|lH(Z*}&9A8t4rwrM|1)rl6?FW{^vB4~(6I74nu@ZWn z37Y6g@BQ;Q5_yzll)4Qfb(*9C6r58` zq?Dk@NI%%~L~&m2nKkG=GLzlGH9 z&rknqyKEr=6WZ0sl|WW+PnRF_N6TFru{PGvSt!?}U^4F>&I3YhDyJ#Lj9P5a>X)NV zs8|H(%K-NSH}MPA$UtBLpnSUZcnXw)9Vk+(tugY$P=Xm~NYQbKO}%d*!vhtZY+ z-px++fgmZVHP@b!_8iaon_h<03#fi z^&2F|?E>%sAo?|O07A_V`~GyX$4uq6PB?O2wOvisECJVaS%ltdC|Am1>C0hFcpIf= zTKaH2oB-oeAZ^LxAM+KQw9A@zLHp4f?CI>V-*+}P!89sVmbwW;$fr+R@2~;^pM)GO zp;?bi#>KFahp6}cnByipzXga_$J2N!W>#mw5)xEVLlFf^Ao@ru8ye>FTha4%Jt#7o2tRX@CsHId@)~ua3av;DN76p6O06)$D#WZMocv?fVa%AYNJ%}QY?d1|K(ekrz~)14Z{EY zmZP&U@N{f+NxazJe58IRQPM z!r4e%g-|AO0)Z5 zmoapTU?rA>f|5ziw>Mmspdr4urq!&M?9-4mjE!E?!=QvTQ;EME$QSq4a|El0a2OYBfpX|2y;qtg6Ms zAH~|>r5`XjRhW$Thx4%@K4la4+9$>F<=4Z{O@FU&`k#B^&Rcw4-=_!+KB%dfAW{NF zHUXst9DG~Qi1((Y8|;r-$It^lnuUrw*H?r*)zRBiyMPR{t;A4H$fLYhi<1EZJEgvL zNs^{e941(?rxpW3E*}%){yz8|0G?Qn#Gv>OOd5I010s-?y_3~jWOvN%?H#iCDi7D| zAgM=%V?a=N*&v*`opRR z7$e9d0FxB1$f8E(BSvLt_1xR_2e|%P6)oXa`mQ!2o;==K^&qD2p`<%@LR^#Imh(>$ zsVFs<>sxG7%1MiJqta9vG!Tax-UP7UAMmDMQxo2r*aI{c&0Ae5diXn%iZ39 zM0QEcgWa>cZt^)mcSrS9M2F-G^Zcd*1kC;$+}D%uCsyoGar`yXXehQ3bf)&a?FA?o zeb!!z{Lix)H^bTa2E)Y&65mBOuw{PQ8`j}{)`-CR*O~nvb?`VwU?vyB zxp#D?PdgAcnCMn5a&WI3KGKm2K$8~q5yVFA0^pdP>6-JcMvDa?CtV&-Ak{xOo(l{` zKx4k{v%!@}UvXU)C-yET-!I>fB&^df9|Ke94B;mlR1tMR@Mh6B{qRxKd`Y(Aw6y&2 znE@=%BFW21@ykxm%ghb##ak*o|AC+l)Ad8H#|M|k3m4zlskg0Xh#!X^xh1EOD-sVo z+gypV6{GPX5WbkTasTkf_lR^qZ6Z3@tTKx;92EQ-=AqzEE^MCb#iAC^%84A^wYe9i zS2XbV{4=P?HH3H=Yx{@|$ThRi{#ephBvV!NrX{xu92b82^+_4}o+=6Q*Q1`c0VWWi z=Z|kBwY~U;;8iY*MMMbBd;hk3TuZ*$mSOpi@VyTv8H&=8oy0UuG%G26hEsT zQvFtj%%*y44g)2AA0}mXjKV8wwudaJsH!}IrZ=1sf?U+guUH%l8k%h(?&hv!$=k=o zH?nthbg*~uabZ49R*^i6 zvKL6yq&)JwTNvWaZqlXc`+1F7l6!Z*eP&KgXW5txbp3obiHRetG8Em*jSMU@$W~rm zcHiDNi?<2n%y8P0+nk;TlQviKM~z&q3kL$aqJiVS;q&?S`Z|aAUC|QAUzM`o+*r*w z`$f%x4e3??`|kRyv$0BvzR%f+fZtb{(w&DdAL+=);xDvYLcPMz2ny6U2e>}79zF+m z)ROUs6}o&@be?Z)=WPKUNJU1})MJGF{}M5tEoBYZ3YhunA9nMh9k2AI!XkS;UaY2N zD!b_z1W(mUw{%qo^}phOd)Y`u1AKeltId7VJmrbT6wK!|1H<9Hq#m9nQU1~5o!VCB z1&VmJFwh{GcV%OfmdxlSxkLri@#|lyFg6TR_nPGbyy^Y$=4hw<*mdhxNawOkiY2f2 zmP<~}oT=D{b0Hw7w>4h=f*CV2yKOsK(86;(d$8h7BIWPjF{hbG<3>IV#mi-FG7#J2!cu#q^u2#Meja6q}e4~h;b_j@0ZO+fMe^R#h z_iV{vmxB z)2xR4a5~ejih>Mc(?>?AC0n=daJ50Puh%a79TkXRz@l9QFVB;(aKUEOx#WYa26Mp? zVshH}k23mj=RmWHTac5!x~sT8f}uZuPw+2INxL;DdtEWdyh?`aA)XjE{&Mf4=C6hR zP~Yd6WSel~kSFI*{@>r}R>^ZJM7fy0qqEwmp7&m#`~JJ@?e5e|e!?U<#qaQ?Nx9CJ zMKL@II~d&N>5}OBB0<4WKK!@LG(3UowP6hW#`fw{zEi`)i0#y5bQqqOrUZXOEkmN| z##&ijo4)SbOiPuf(SXB77vii)4=t}kS=!`(W)2q<^N0zG}R`30d~+aV2t zj}P#BgEe}*^rQkVU_-)tA;Dt}`oX|%0MW7IoPAR$plV|}M8V=#T!V3g%IlYhe%sqI zK#N z>%z4Et-pUj5sx~2%b00N*;Y0ENBiU>w-xT(-X|%)ZkC;MbFuWsXECWijxKMMx2w&= zO6y8%=pkMHe_&ZVg3hUein8<@Bn`AeTq24-g@q2eHs-$=v zPry)7IU8g&bh2mmW@H1=fTD*8DvaTkvJLhqjV!9^#FbPx@%N-#w~7)ChOQ$%q!ZJ~ z$ElED|82zeo%WCMV?FD26RUqgr~CPA<2cp>Hhu~t1VjOhTm59+_i=;U@@Z69j)kSa zCdf{2o{%=ECl%v}xrguwEWAS#xvbVBm~?FX2}wA-<=FJSxDKSf5t}RxZl!e8!7cD1L({%J-9puYeqso`M38=xAOueS`xku4w%O+)6~<8_&wO zuU{{L%s1HGTG2^W=sSYB2vOmnNJ3@-CK2ocbOWq;ia%rJR4fMmH>qcRaLt{f#2m98 z53L?y=`C-RAiMo$OGFxw0I%$~b*n}5vR!I%Nt=Y4PHLTS_6aAkQnjIqRGg|=m84{k zy{ht@n2ceU0&p2N?MhB=n~fh~Am;@qax7rqKv(1!{!mGBFI%%{GXVY;C^{jb4}tws z3C`(lJ3f-+gPSMxTqxwf_vtj;0q`kSG_jtCvgGU2__KWw**~#m!&_iYGii76rHCQh zMYo=>FBWVsbzZR!a2`MTqUls6%k3M*n4^vDldcbVm-JP;NOTv((i~cMs=3eW!N%yO zI@k0FF$KcO&03J7e-WRO+QXfqhroS%+Ff2Rtl$~Ps?up> zesi_f=rWtCs7JkV#7(P9GNl1asrOJWpBX7#oyFx$ue@WdeQg1(#$)webM);05r9zR9`vMjf{8>c8I0wRe zw9ybws_}W<@y+^IjuO6AHwJquImTWt z0XiP?5~Cv2^KueL0P$n0ZGLJssVzTEh==_S$>XO}?ZyOD zWiSmR?^=7io{Ot%|3cyr9bWBA_TN$O(FAgD2rQU*s&&gc*NRQEdK}A;03^i~k;V7F zWQ%dEDVdWL(744GgOm4CZ`fG>vbj~26m8aLdZM>{JDw*#Wd!eZO1?8zlkj3;gYsF% zeIKzXr8@;MEBUn+gFP>8%1bcmcs{BW)$RhW>%A{8bhvV)72-ZW8f{^}AtL|y3S6`m z>SlI8=G@Tlf%D1Y=(eauE44Hdo@>^+B@~$^Wug~ZGFU>W=Qy8W zB(9F{%#W_7HX;O&ZuOgDm35X^W)<|bWM>wn9r8)TVJZbM=$=e)aB%KY$p%_$I*-9! zwE~mzxY&&PZ^SlTD9j?oh82D%qnr1|tYSKMVPPI9=dfSTD#L2wY1%Q@4xcJNJN0s0euQjRmVKU-VzQfMxJ*m|1l z3Och@d-HLDzP(F12*`pklj$4nHK=znFJ)~QAq*s=hii%G*9iP$#Z(AWGs7%u4HfO0 zR@pnpJY0&}(#rJ!DlgG?td>Kt8bt_pH~3>~KOvBYEgp|{t|bbikUFXfF@7)|w{cjz zGWCn!vTtT(46KD-zqvK>c@=hPs+pa0KCXX**=#m{Z|hgUef`G90&a~Xt@AvurE+PC zuZT_Xf;QUcaH~;1S)W59rPwCVoLcfgu^_1nTgsr$$3E+Pirx1w9YHiz9!zWs#WZsNA$Bm~9KOm&W%jWf?K4f5AF zv%7P*%(#E%`%PybsbP$~?b2(u2hgaZJnFCulX3fBOA?fa>WV?8DB#9DnJkOh%@K~2&P-8H9lysJ7 zwB--LBWR=%Gw@I0{uoMP&;AjG#0pem=N&QMXmbWJ^o;lKTUg`N4hM{VHGEpl3~ATM ztkj99Zw^{Ev*ks{rfvIbY4(qH`g{n>V|AYX(g`~J?v$Y@_7PL;^)a!EKVhg1#H8C<$DdOOr~QfR1aRh1+JQPMvc>e!!cb6@Huks%@4 z8CLa{Q&IQ4DuumdjKw^twc!9q$)_QxuC9(Bxe0h>&fsf{E3IWVFRNmUWn@iYdTA{Q zLzCGBTMvZcKRoLdre&t(MzPD6;|;|_LL~L+m%py`c}l8EKNKf^I1LVg{0x~GV^-7& zI%}B5#uwCFBPI%S?8EFJC&6dhFze>QHlHd zt|fA8)bzDZy~soscRaOxH|DHvZB|UBJ38!*1Rf-cOz@YLR$no>l6`;hs->wO3Fp)} z)=H>CgH4~g8vzakm`3Lrtz#0r;`Y=8L+QOu;3qjPZsV3LKn~}#!9ML1S!P<5z2vYP z)|}Ryt5@5VM$&3Or58V5=JkJ6y!|9LX~op=U}rK>1W!}V#Y^&9DC^cWmsZ`k`+~*E ziH*9V^o>b>Ydj{UJ|EjDKQ89c8-uigtUVFOk^9*JjB!Lz!yj1xIjiB_dgYQ)aY4!rKCwAio3L5FHz{|mFO zbSDUw-|CQNbZ5}>Pgvf@0sBRh_*BYWSRZGL7Iz&KAEd&*4WyYd9O4<T@mBMm-tvMSd$OQk=14^+n$V61y=O!IJgfIPRHd-}>c zZ1+S3-z+THS~G=?k4k2tELzH&V)(+Y-7k**2VNJy*Z>uN(R`GBZFY2>~*A^R9`cAjCH zi3;__3Sq>%SxnzWu$u zZHxMAHG~A$7ymn#IndYnPD4WWrge_E*BWVaR3W?%n7P|d zloX*(2>UIZrf4QQ&}#KrEh6)aD1O@6MfDjRaA$0x&?}j*13P!6G}-5UyLA&uXh93N5NIYKcWHxm%17^TaD`mK%`h%yM`L5@jki(Q=bu(%I^y6uKN{s+d1eWkptB13pv*_b?FV`-f)4y2Ua`bKcul51_ zDwTT{!TTDDWdWg@xE>KAX++D`sB`C|erIug3-lN(^&dPj8R8N792Mm+s#+MzI$uyEXEJt1Hm*SiMWgjW0Z9w$#6<+$)Yyi~gdTXm{h;lTqg3_uYRbyO1)I!oSbj68dDDP?k*8>sHYD%R z9P}9$1aDX)Wv8bg|M4>3wy`Yy%@^3%lNEW}h~`y~F467wPdO38ZJ*Xs$cM-Rw})D) zes_Q8-`;-yD%$QIbOYtf`HWoaiAo{?RMx-{h%2I&hnnQ%4bYz}&dWA5UI%5GuOR=>JY`!X|bpeGkYd2 z#sN>jtn6ngqr1%e3h#-up#d-Wl5T@K$?_@q4enY@UO+O2d(MsBF?y~3tHGoOd@4m0 zcBrwaXpoK0M|s&9VJ6K3C2>l;%=6<<*M4M>mHYWnn}udC-mxFFGVk%r<;6veG02W# z*}98)Iew$kzj2j+eZk}XMr?v~E@SMKKt|%sPS}EJd$YUggLq@~f|iyvd?xWE-&v@cFW5R^Bqf-zor_kiDioM3!jA%9 zu%sY?+UA^_RlP{KW?d@oCISI6`?a8g<@-5p+q%6pHW+M9QdH&uMtdK~AyXo=b2yp9 zfiOsmHH62iDXJp+Q$;0>eLcGpHK--%<#K~~8xD==2LW1UI*YjP5V| zfjKkw$`BY(4MIfbRZ|fZ)d{p7Jd6ZpH%@#ctRtQe?m>|&l={EJprdfSUqknZpTTuH zXYc|w1?j}o)b8f+KF$n0Wm#I|nJ*1i?V0?F zFvJM(&g_QkN;}%PUptO*#&%`RT?@2DxinihHx6A^rC;;ZqwT!^ZVA}*TuH0$*3BH- z-8qkW$#?gIOBz4QTg6)}KKsLbJjbz5PYFhXhV~mA3x}SDj@7(x0RAg_(f1h*0@r{qi-OzswQ#?xrUoYTmh z)h0q^{4TYxd)X^9BvKEpV5RK-_E>`A^-$+)@>bN_4CYY-7Fq6od1ltHX_`?dUK$Xb z>*49i>+uauM5pk3Ul`qQ^Ggha*f8U!t-&$3NhKMvXe_ioj2++h)okZDl9}UJB!|+x z-r?7Y+Y686p=Tf0U$<}RN_Gr74Kmbyj_gbdrn*pl3POeQ21)Y3HdYots?+CJsp1-) z*me?wABqeF>S>qTzvv-O&YJ3Ip5lGT5M`$Dr~@=00H~SkZTH|Dm~(LfI0GL8bxa%H$Y5M*0_-1KE(+dcxEG3BKppGr-x=b z6FgVN`J><@V5F(MaIt(~vApmg;t3eS2PC@bRC0px-47}P&)G*mTk2N+(tzf(Zie%5 zErTG`BqU(LQmW`(LJoHi_wASKN$qOH1j(@GLNGp3Lo@NGWoX%x0H{~oDBzPu)4&uz z&GUlkq3#>cyO5g==k=DcW-gKTSLviUNIq~(9YG+~0DUozNQvk$m-tvDJvhNeRn)V0 z@$7x)qQaw1{tKr143h30e7B~~FHviKddqM0N# zrJtI=dLgd-q_DsK!rE5``mvPGZn~+s{{(wvgO_Zhd7YOXcG5R=7y%Z21`GT=cOiv?2)wQm@uB~l%PMjbu zuoJYIR%f#RHDWU^f{RPM?f@A!2S(RQr6$~paeOdB&(p=mfX$RN*)aZf&(jo^!NK=Y z*Q%OMfnE762@l<=zdzLB#)rDC%QL@JkZYx;#SZ^sJ!Q8(p< zmahrDtKgFvE%IwM7;&dd8kfyN0~?6h^W+!w3VcLj(JxA=)pQH-j}wJlJnd9GmH2JF zWSk$Zfhl(ms#M1Yc`tvqEw@0^*#iFXyu@Gfm+mjEcAm$eeAOsK*bzbJ$KLX|Wixj5 z!ErdWVbsDsEe~0>DV6WFVE5urUn}PVpz-EJ^c&AxckH__`ETovVUNQA*H5dTUKI5oKr{Zp!MqkmSFUmA+qSSSe z={(TR6oymu)(liyR>9ey%job@oL;Y0-0uG7WKvU%VoYYBiy|Weq?^h3 zp?nnNq)6Y@)4$m9sch*lOwfDW?tU(7C1dzepjc%iFeCibsNiPBfQ+m7(#$ke!FIfN zGdtE+9+47)C+^CNmR*I+j)~KlT%__!kJoVY1S^i_(rggVnx4DN>B*owqmO6C}w(@uZx@h z#J*a%jsu!PW8=c_1H(Q{h3FD`n%KZYruG*)5r#;rbPi=!omRnabFj`dBxJy1xI)CwD~QL~4KbwlG6n{W22&NuPd+-{V7wS)4jeCV;%U?AR{(;I3V*LU67{bg7q) z1E!z~bkDhX>+$$lJFOW{Wsd00A+vj8h-96rhb);qw9^^Oaaa%pi(8(Gn3_i+&_W9% z=(wYxt(bg0>08HYoe!hXD)ylEircxYD9V*D$C%{MRnd({KSf!w2z|Q)7B*H44QxWF zn|Rf`iV>=}(yPaEnH`m)4kkoiHz;HYeBZ+KBsVvPX1NUE3?!|r6=eWaz}LL-%jEub z>!^Be;RihG)qYYcb(aw(cYRH}KvfeHo&r)z6r2k#7eHkQ@N75skC{!Fq17?xGhMQ7 zcLOx&ihE?oJv#>|_@`97vG=HvAB|Hpo4`s}m@`$kLvD;g?iNkJn_CEsBT zFP;1KKMq1L{O;xQ`*falSJL`-_d;j`o3$8mh5Q zt($+FU!5@*Gw3UO5l|gqVhSDX%;vyKn-{G5dpM8-6>EPL4*grderDWrVI+3pjn&bQxTdLz!+%l0W)zLlV|d3# z{`Ph|J<1|)Q;xDaWQJK}bU#FwFZ6p)4f|BKFW~K|LbuB-=5lKCGg^x7yBMn0H~jwO zd2>X$+aX8v^vwW+Q0-%l+-xRF`{QOvQOjG(+Tn|;EIXJ9ruZv| zaS&S}w67!Z3<3BunO9#x$1+dcDp=jjTeI)-OtvpvD4C&+{laWnRKhoM=GR*B9Qufn z4g+hcFQ=sXzK#ghE`MUghPNyN7FG=9+M;$J z1!;F?^^|zieAM@^uky<1P^x#YZbCV`I9L97oGs6g^$F)pH34Ox+}$<(K!!gG`fg4! zQR&*FKDH<95Y>SHs-=#tI#m6_d8vdD#jym2^rDufIAUze4EMg+O+o4GGRhm87)>!z5`B_)0JgS%X2psPMi4nM)D#eSkvm!vGCDx7PKLNKj@rP*y z(P?LqkKz9)ItRB*|0aru&A-gew%cm6z18L?+ty~=wl?d@wry_SwAps={r&}AS9Q;K z=FI2JX*|Ff;uBhHGCBAA^|yh8<<0mL86L!eO{ExYFWY$rpRAsM_A_NPy8ioT>;~&z zQv;16zVjnZN9Mk8WZhMjA*8OnL}Eoo2s-Zx;xt#LrC&S$cXNB&P6L$Gounj)9$`B( zEo)<2&AF(pO|qlk#vsJnb}i&PE^-4pI)&+(PED03^(7?%daQgVqP0tEPQ8s0TPbr} z#JA(~_M8{>3HjVb(Hp5D=K@eg6T6bnbtk|=q#VkB9%l`>4zYnZ5dt#&+q?O`LL#l$ za9U89(y!!pCR<|;#|=PHr29jiMut%zE_HZ!yTzB}pjt&4FDDLQmoLB=E|8KfORv>@ zE&-bb{>ZC-MJe>!`5G^3J;$h?{Y>8hq*+8_8huyA_T60H0gi`)+Xgsa$k-pfyq^O~ z?mK>XwR&vono726bU9Rnj)*wL+9$`yN{@!YdgSzHhqc8svW%%a!RuhIWA+qOJLVBv zPv&LV&j9iK1}ZZBRs8CGBeH4ILu{su{18UT69LyF!F$U-bD_<^tz3tODt>DtKOgAV z#k$$ZE;@=v{;j{Fejmfw3lbsv#YAZ=sXZ>^7*7#aDM_EBS=YPUxwcm6Ga)iMKOEWv zgZuaEBAxcq**wl%U>pracF!ExH)?q(u=Jy_4TK|`sgXu^_z6J*2UeA<>BLYo8q~0= zH0TPYrjEWNf%i}DZBOnV+v8*`ENN*e5A}sG(^%hh=dK@VL6TYjU1@B0S~C=Ko}MEW zMC1o9$pHP8N)Lr_WoY8cSUo1>pZ(D`2%*0-e|=Z9Qb5{RM6R!JDbF0`vW|j!TW5n4 zz~kk9P6MjqnOGCe8}HkE+rwi0dMtm%Mnyz~@CYG0P*B+e2SY!)`!e|?*EL1dm{z`w zCE1WkN@_5)Da5_+A5sPv=J)`%G!}PfxA%lrD%QD$D3fhHOI^Xd!Yex+qVUVpUYY=4T7cZ`)#7Jn4JDu=g2Q1^ z`AzMO@CVW7`v5{t^Rd@@#$-CV7!e|!%ub**i2;hNhiA$GbgwKju(NYc)Cj*lb84dN zrG+kqe@(3SmNR;XXyDBY9?@Cxd1hb;ulx&w))J}xPk}O(vObaoU&U7o`ahN%r`Z!< zd`NI@63omf$$fS?tB~R;Br>h}Mt11L1M6&hK&B>T4|evxK%KjPp1rjS z6K7*Q3UBD#m&(c%C@|6TFbl!L-;xCmGg!zhG@tF^IM#Ct*$OI@FCD!cm^8Av&j+l{ zBRoFjgv?htO>~f3C?@x0xW$Bu2}!^vZ0+X_-VtK!KA`LjRD?S&Zw$&u~8bP!taYe@@S(JVkSJ?)l2wm z_>3hyzGCfb89n>Yl}zqIc(B0>~Hd9`JeY(*qOV1D7% zP-hB%W`$uU{yX=4J>ynPMx&Tf7l)l%7pXi&APslRE44<rt<3@2~tsdjt|foqv96%bWs8 zUyi@2eaF{o4||ud62AkY1PXaD8v>q?!<^T!crpNyaJ%kQPY!l(s9jAi!b_A083JXy zl&2wOR$SO~_sQedeA`q_MhOL}A#-BazXk2j&pkJ{Mze1v&>N%Dm>G9eR`e@0=s2(@ zWX{fhVSd!9YQQFWU}|b;%^0rvGpq)sNsX$0DGsyBDYJplh8uO3{xB!Y9J-WQHG@wp z{q)$UXK=!9wZ(^6--X9(@&<5O;wr4Yu?P$GI+{KZk$}fD$>ns|ncwbmp>SsTp>P79 zwjnD=TJy`A>%o-`L7W=jjlP}+B{WomB3$2|9En@mlg!Zu8B;PM!vx&!=!}$7KoFpk z({%acQiar;RZG!G&}X1HnKde51u}{a&$U5Teq#}(YoK~Ef%X=KzEU!DkutH=QUVG9$Kur>PUHPhS=+39q`K)`E^8gHrf%AEQ8Zw)BA3}~K?oe`egK#9dpTgOMav#6p&t!>x}f$QC7iSi zLZ+&#!ba$McffibYg{S{hT&yX)JLpOc}|Fa$YzNP+2&!TIhF<5bK~Q^wuaJO0oYvP zD#p7k28``z3iRB1c4b_@kH#kUy5uwCbSziFkDa!)ehV-&iTWhDe>vO0TEG7qE5H3r zI#+RVVwXFi6gm|An$707eMB4xbt&6%U^ca@Rw_lw6zu9@Iq57M2g}sNr0@Luf6a56 zqBw6a&AwZCRPQ5?wNeS4xUfwQY;p*Y^-|f4r+wVVm%R>@V*pVYi6%>GJgQZyDqXMkQ7q0Mn6rF<7>+SKuy-iW{&GR4#&E+#&w;` zI2JdbuXdsSA#i)~k6NM!5hlw9|D;~fVlptH(<&AF0@56epl2gKY;mddl_-OeZSgro zd2jm3cyIeFlb|N{-Wf2U;IBM80;{%^@Z?oj|CGX-|8*4FZVH80WFLj&aoaFNdUe^S zkAATHf%=>QCfGZpi*DjjqvB%WCR{;kM((1FEb#8glLYG&NJoGGC#sEYwXsWcZ$==o zhV;m5i9ufqF@B>=M0vyib_42!z-0)-Lc%?jkoJ>%zLr)tEIUVLps1e5O zQdBg7v1C*)l%O3S-sVi`dI@2`*z{WZeUbb(rX2dP{lQQ-@taCEm>&{Ixcf0e8-{SdK25tYYv+r2zqsCeXWK-`g^WsjL*d7p_GjR93D1wz!0sQ+1U? zh}iBq1cK0@XghchLT_pTzzrfIqUY!5`T6-L=b^0pRh56_8#XVMgZ(J8`O~Qf1Wk_5 zj>h6=Q_F2@otLH{fAx#zP+t_Y+8i%Nu3nDQCRMTrts{NGe?RkxR}xx;7Hz3`z58>I zkEbnW5E$ZaS)$21g*$S^At;%&DHYX3uCJYjbXGRSQ&gu1+;i^#*dqwz?5b`{xH&;S}9Mr++iLbt#cvrvR0yYW>zY?OQa3KVCu^&e-nUWlbj6B1pyJ( z2&mZ7*_ELqoTZ2{(ygCR2AxXzONs;sd<%ij6?s2i+#YM!|}Q`!iTMGEIKd ziq)?Xo<#j332j&e_EsgA&-_7yM#$c}f+FWG(t-{kdI)Pr>ulJbHCqOU(Kr`h2wePW zD)jh&M0LSqIo-eE0&NLEIdF=9#L`NHRlb(*k@4C7cv!I~qc6K5QA$;6l9;n__V?Ae zGS^lk?|hpu?rW7%**A@Jx>&@L%#X9sR+~@J7sACN^@hCWX4m{>Wc}|dlm8x;v2!A) zn(}Yy>HA-35M*rS4G9dT-mfJc;jNw+PvqLfn)aSUe+l&p)9<`MW}K+y?3SIElpM6x zgIGUEtvF;V=AL4;)zAbI$9K}!*7nLBhy((67h0z>@o(Ej<$`?JQ){|beR1WM+7?(7 zzUa%`B2NfJpv+#%QQh9yXd@&iIMDz)p6Y=2HsA zT21~ZZDPop*K`YQnZU_(qY+k3gZ^A3hf^yDtaNj30i6rhx&Kxs#yFJXj zY-LH69Pe=u)jc|eX4fNFgT^pNzVOsoP$KQD;)p@LJ})rkg`GTd;h(cP|Al+gKs!!y z98gnqgB^e3FVY$5?jtN*@yvF-H%N_38mrg65Uty8ggo?ZeL97 z?6{%~Qi{iU4C{l#k|WkglsE#_4!J)^&*iS`BnW#n?Lm`|`UdLWTMDDrdIS2! zMd%&sfPle2Ov({c8r^cba8Z??q}cZow`eZm#7KpbOh0p17lSMYz6GPH1g|s2lwpxg z_dMwvsd@v{nKQWCfv@()2hEK|ZyndwG zR#aBdGvH&ii<*NoBj+!O(XGF*FT+uw(esTRuhbc1(kK*lYY%p9Bi;jE3_%~MjNuEf z7GCYI4v$BADkjuVJn1~P3x0k_h!!(r$|PJ%%KB2-oqeV$wx0B$h@2(mB>NeJfo31I zh=3us?iJ+ttf;Pr_oC~900o9Mr+$Mv?|S|ym)^C|-O@yfkwY{- z)q0YP7y^*)KqE9ypb`nafDP{9rR!aDhwOga;d#}0cjU^98GCAAKE3kWqfDmy{5~SFtRVn05rvE&TUVO^XH7eW!N&> zI)}PC zl-lf!1y581aL3jmx!W5~A2-~@alEGaRQ8;Xz5peiD7_p=O)?ymj7^0M`t(7MlEw0U zzyFg&E#DttygvokgF34wMD)9EQDAb(^SbkRW+TtkJ1RcVDebYP9ba zb#z>ooKg8877{gD`Q6)#_}M#D-_RqYB!?21__1q=U6 z%cfs$^YguP6crLpW#y<9Bk4gY3f>lf!~3%s%gREmPCxUh*xx3^dSkjEO>!}My6g2C zbHC5?G+@;en+n^?13g(#MR@e|Duuqggf3my#-GdB*#1{3=j}8juDpgJd-h;DH}pnP zL-#~5E@v_B<;akPl>Rqc#i4V-r{@D9tn+BtB@BCvGKePfi!{x zL2t=Krcm^7fFCS1aLMf0(@~`RIN7?B0%#-$mVTZk`j3;{=kI6Tf3a2{mHJMO;Xi(N zQ$9?m)WCdsg6A+NOy}{zhggoM1=%R8yJ;MbV%13&083j(Yiou{AVF(N>l~%G@$XPY zk2o2`vM;XnfLaYNS2#R^=lN4u7$&(c@Yy~#{p~dEN=nPMG(yLhiRv`J=Vw zC4NC_3<1_T2!R+vLTAt|-s*qR(0;EPzVBzIK#u!E zm7}p#Lu}82ehu`f@^hd&Qzt9O2P&C}uR9sapU;m)NJ%+$fUyn-5PHDY)t?j?2-R=G zjPQKm@q#S*xRAm-h{wD6?*v%c4tzlaRpg;Rj+{<4eGd-)Ql0$?HF5jN1%reFUr6VS z-S($?y~!$ZAXmVjVA}sM?k!J<66%977Qxfq?s6v2?){#lQf5!8M+gzeT7$d*W9E?5$qCl@LGh$q<^Y-?3_we9BXbQeUhlxkrFb;4T8V5b4 zn=mpgwaL;NUEerl*@G?&C+>*e`CJ(*b`hnJJkMFT>J52N%bOsWj3nm1And@;EcFUt zBYdH3It;ENa}4`UE)VmRB!5Hpz94p@5@f9s2+D_sKo|K#6`6s zY`DLGrf38zTo9X4{ZN^nMdsPQZh4|%%~6R~{UMz-Cya-%F(Q#1OdQS1q*wHEi~9GU zNm1vSg_%nW=N~nIRqUrqYMw6GW2zBYp&ywQ{;Z(~_?ybq$Y8)_QP+mo>+<|(rd_N4 z%=Sku8WgEzWM_0dTAvJ!Ai@`S0N`F%O4_X*!0K7w|C41LbCKwTAtjr)5oFrUODvj8 zAVpRq?BMJS-PEW-^Y`gp4id6ELOBsev&9OrAXKc6yxxg(EI_b>7QWXfTR^O?fw_rW zw+<5LOhNX}9s(3}NC1Kc(*Q*tpaM+fhLzegWr5aByHp@4l2eO=t134tL!>@72@d6t z(8^iHoA{`2EDLdpV3&TP8|uH_>X$|U3222o+$G7zL`U~DW#ZyT#BpS2WU;igE5ZgR z0BN(rIy%`e#|k<82`1&fVVJNNn1)oL-Cz9PP8&<>WCW87v1`#8755j7Uhy*FPLDk?3~h@< z4OPlcWhHkExlBZ6TtLd!jx+Fr(@FqkF~0Zq_h=Eqe(s&p=nog?29cCCG6bUzO?xlq zFxpqL7n3>O-;}txBj+T)7CZGyCC(LOz$EeH|JFY=e8>%g&@TgZT^zl(O~iG_+}&GS zG;QkY>VJgC(6cZbxHR1-|C(3EA+ldOTU~Kj*oHg>3R*eKegK+A`SmVRiaBhxER1N0Iasp7+Pb= z@Rm5BB-{n{e1E^23OnbN5%YD}nuU2=g?7?`8is!QtHYm`^4i;C*RwYYHJ zRXzX-`Y}lk^HH6kasJUKUBUosd5N+BoVVLal-Vq^WXZ+7u#(5)zFXoS`Ll)ffh)ln zXeJq>oW)IaJ{P9mXGDZ8ZAz9zbPA{Gswf$>37sQ#v~=; zm2;jzb8##c9nY2aVkzwB%d`(tNH0iJX{uc^=eD12;kPN96eFln@RIossg6}Gf#BDhHUu?~%oJHbLGDYs{% zw^T$Vgo9$8(+WjSn)CW_C3h)kys3MMme+>UDW2pyp zeS4?u$b=7BH>p$XiKX#~)5oBPOcS6HHYqN~mm@(<%JXu(5a@-PVDf|qxf>T277trY zLAo5>60Kr^pWqHd#rs54ZL4Gv@Bbo&WsYVbB80;uwex6&KAodnHKX1+_Fg^KKi+O2 z1fXJ&yz^29KjN6Gq3(!5UWNFh#?B=p=+hW&rC;;Ehn7Ym2XFD(F2{=5Of^8(;#)I> zRg8B13GeSe2yIVLKNl>(W*lU6xyuvu;dM=->>W8ZHJ>kS;Y)3YyQp($W=BKE_|07B zHOZam&-rcX!iM_H-=&+6o5B)OOJoJVrk)*S*d>E|;K>_xuTf^G#+RyFHJ7QCh7sJ4 zokGD7d(RYcy`;nXmD{~*`VKNO6&7WZ%lGrzOvKmjgod7l0_Ui)-#)JSQ;#Sej<2S- z&OMys>c73A{4I&2_b8BH^da0kk!ySbu!~^4I}B^DzH^3y8jb5xF|fz@gEK_Rwr{@anc&#q>3$PbJALv-yHd{6P(uD? z8&zIIyQ_=0O$g3Iy_cMxy5%SVIsXzBd*oZnNMC*l6bgJFTa1q+@8oHeaac_Xnpz!- z#gb0KtXf_u?K7ZW0M7tv;N$tjuT5rp^1)D*?7=~ioRRcpqlM)5wahDT&PJNb-2RBf zYINYwKM#o{!Dw)DbYuZsA$VIuf990`=fG`!_v^CCI6pij$9XhzUP%sj8ga!|fs59A zM3xb!3o#28!|%eG)pf0;M_Ei$$~L#G_BW|eO?2|$uE)Z`k0k9L9oMOO7+_Kcl{PsP zK9Gw*npHkW>`6@QMik*$OGeXPC?HO@{~P|{)TjGAA*ImJ-3YewO^^0}e=ECR!h#mnnybHu?h?0-19^E27B}j_haSVoPx{-n?Yki5 zC29LA*&lvyd^EU@83059Gpd~I40qsR`G<;X82C!rG9#29OKzS@E&mvfWfw7kNT#&d zkWVR3|AoPj8n9@M?*T^A)E84Ff0(O3`tvc!wb6GPWCqA%l8MGh#C^;vN*`M6)p5UL zm#*fpe`BBRP05u4Hb96XSkeohiv68~g8)BDTW5zmN5LV&*sQ1pz(SILgMaR$5(YK9-Jb(Ed47Uc^tz53}2^JpiU7l^!U`=X(Pnied-8K(@+Q{ zLv|E@YN7d3V8lun(|3b?YjkkQEo=gM(jz`v5al~7PYFBQZzev*_jX|0;d)j!zy;`u zIec~s2jo7r4P=ONtRuuB&=ANr+A5NxQylAUAaL8PYv36v-H~AnR(u^ZReIAL*(79; z9{){h25DsMx$tBytR6A52xRWM&{>(!=JgH>oB9WZ(b2AEeNTSsiOt@U99NZU7^vGF z#UM2~7;ilTNx?#PAz6?g3sPfYdO7r=r2XN*lh8>TNvkn%X$^FHb-~1ljb9WP@|Blf z5iWg6hnR&sbJ6CfB< zQXJY!XfvH;ENFdn^f4x0aKM**gb)GE@DSbrKwnlNm0hzqcT^_hA=kTR)r{_s@!)0w zw_8VaWoYZR=|xbX$EwCax()P*aDKV4;$~Ctea3ov#CpVLcOEcoE5DP_AHxcRU`!Lj zWAZ3SHf-^MY=nxnuB;zl=Ma~}36xgWfZ3uyJ1UAt`G-fSXjubQZE}qdN%}u)d(T

9q!Yyd#4t$!bFbl8G!(6KT0$2v}x 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 literal 0 HcmV?d00001 diff --git a/blog/images/20240416-whatsapp.jpg b/blog/images/20240416-whatsapp.jpg new file mode 100644 index 0000000000000000000000000000000000000000..399235347a4637c350568db7d1a8e33be57f0410 GIT binary patch literal 1465896 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≈U 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̻A1icc`_IIf;snC2J*n#h_Zk+ze~G|9OFD)esE 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 z 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/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%0AyC=t2oOyVT?1Sjrs~WFXKfn3T{ABI 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 z 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 sT6pxc>P^V+UL#^4rV(yQ!d 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�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¨jmtsoqS>yiQt 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�Y3&zOc3SnMJ$XeRsG*_r;; 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

Zo^JiAyyCz7COb- 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

hC{3XV2b`0yQFttbFcfgVQ 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 z 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
  • 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 z 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 z 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�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 Esra'a al Shafei + +

    It's important not to be complacent with the current standards of messaging, + where metadata aggregation is still normalized in apps falsely and dangerously marketed as "private". + This is a post exploring the fundamental differences between privacy and security.

    \ No newline at end of file From 6c509027f762739453d48bd21b604d274005263f Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Wed, 17 Apr 2024 13:53:45 +0400 Subject: [PATCH 50/60] docs: IP address protection rfc (#4036) --- docs/rfcs/2024-04-16-ip-address-protection.md | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 docs/rfcs/2024-04-16-ip-address-protection.md diff --git a/docs/rfcs/2024-04-16-ip-address-protection.md b/docs/rfcs/2024-04-16-ip-address-protection.md new file mode 100644 index 0000000000..0019ad87ca --- /dev/null +++ b/docs/rfcs/2024-04-16-ip-address-protection.md @@ -0,0 +1,81 @@ +# IP address protection, support for SMP sending proxies + +## Problem + +IP addresses of senders being visible to recipients' chosen servers, which in case of self-hosting makes it visible to recipients themselves. In case of XFTP files the issue is reversed, with IP addresses of recipients being visible to senders' chosen servers. + +## Solution + +### SMP + +- Agent to support sending proxies +- New network settings configuration "Use SMP proxies" + - Can be set to "always", "never", "for unknown servers" + - Currently configured servers to be considered as "known", including those disabled for new connections + - Initial default is "never" to allow opt-in for testing, to be changed to "for unknown servers" later + - Support in UI +- No alerts about unknown servers are required in UI +- Tor setting to not affect agent decision to use SMP proxy for each given server + +``` haskell +data UseSMPProxies + = SMPPAlways + | SMPPNever + | SMPPUnknown + deriving (Eq, Show) + +data NetworkConfig = NetworkConfig + { ... + useSMPProxies :: UseSMPProxies, + ... + } +``` + +### XFTP + +Some considerations: + +- XFTP proxying is not planned to be implemented initially + - In future it could be done via open socket and with no persistance, and would be required only for FGET command +- Currently XFTP files are automatically set for reception in some cases: + - Images and voice messages + - In background (via "set to receive") +- Agent resumes file reception (download) after app re-start, in case they weren't fully downloaded +- User may change tor setting between and during app sessions, so a file can be "accepted" when app is connected via tor, but resumed when it's no longer + +Solution: + +- Client would make a decision whether to automatically accept file, or alert user about unknown servers +- Add only_via_tor flag to agent rcv_files + pass through APIs: + - add Bool to `ReceiveFile` (with False meaning user hasn't indicated any intent regarding unknown servers) + - can either be automatically accepted, or require alerting user and asking for confirmation (see below) + - add `onlyViaTor` to `xftpReceiveFile` +- Possible scenarios: + 1. XFTP file chunks are fully available on known servers + - Do not show alert, accept automatically (images, voice messages) or without approval (other files) + - `onlyViaTor` is False + 2. Some file chunks are on unknown servers, tor is not enabled + - User accepts manually, show alert to user + - User confirms, indicating it's Ok to proceed even though IP would be visible to unknown servers + - `onlyViaTor` is False + - \* Additional user preference to never ask? -> behavior same as now + 3. Some file chunks are on unknown servers, tor is enabled + - Do not show alert, accept automatically (images, voice messages) or without approval (other files) + - `onlyViaTor` is True +- On file download: + - `onlyViaTor` equal False is ignored + - If `onlyViaTor` is True, and tor is not enabled, throw new "permanent" error + - Permanent for simplicity as this is an edge case + - File record to be removed from agent + - Could analyze whether it's remaining (not yet downloaded) chunks are on unknown servers, and only abort in this case (and instead proceed if remaining chunks are on known servers) + - This requires changing download to load data for all chunks instead of loading only current chunk + - This is another edge case of edge case, as it seems more likely that sender either used only self-hosted servers, or only preset servers + - So it seems as unnecessary complication, and it should be Ok to abort simply based on only_via_tor flag + tor setting + - Error is RFERR XFTP UNKNOWN_NO_PROXY (new constructor) +- Chat to differentiate RFERR, and make file available for re-download on UNKNOWN_NO_PROXY error, similar to when file is cancelled + - New CIFileStatus - CIFSRcvCancelledNoProxy, to differentiate in UI + - Different icon for retry, alert explaining why file was aborted + +### Trusted servers + +We also considered an idea of trusted servers, but it proved to have unnecessarily complex UX, and in case of XFTP had issues on file download continuation after restart (e.g. server "trusted" flag changing, automatically accepting with tor enabled). It requires additional consideration and may be better suited to concept of "server providers". From 065c8f8861b08ca738a05c68db5817448f579a7b Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Fri, 19 Apr 2024 13:17:17 +0700 Subject: [PATCH 51/60] ios: fix typing using keyboard suggestions (#4045) --- .../ComposeMessage/NativeTextEditor.swift | 30 ++++++++++++------- .../Chat/ComposeMessage/SendMessageView.swift | 2 -- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/apps/ios/Shared/Views/Chat/ComposeMessage/NativeTextEditor.swift b/apps/ios/Shared/Views/Chat/ComposeMessage/NativeTextEditor.swift index 3eead5b0af..f2c7221835 100644 --- a/apps/ios/Shared/Views/Chat/ComposeMessage/NativeTextEditor.swift +++ b/apps/ios/Shared/Views/Chat/ComposeMessage/NativeTextEditor.swift @@ -16,7 +16,6 @@ struct NativeTextEditor: UIViewRepresentable { @Binding var disableEditing: Bool @Binding var height: CGFloat @Binding var focused: Bool - let alignment: TextAlignment let onImagesAdded: ([UploadContent]) -> Void private let minHeight: CGFloat = 37 @@ -30,13 +29,16 @@ struct NativeTextEditor: UIViewRepresentable { func makeUIView(context: Context) -> UITextView { let field = CustomUITextField(height: _height) field.text = text - field.textAlignment = alignment == .leading ? .left : .right + field.textAlignment = alignment(text) field.autocapitalizationType = .sentences field.setOnTextChangedListener { newText, images in if !disableEditing { - // Speed up the process of updating layout, reduce jumping content on screen - if !isShortEmoji(newText) { updateHeight(field) } text = newText + field.textAlignment = alignment(text) + updateFont(field) + // Speed up the process of updating layout, reduce jumping content on screen + updateHeight(field) + self.height = field.frame.size.height } else { field.text = text } @@ -53,10 +55,12 @@ struct NativeTextEditor: UIViewRepresentable { } func updateUIView(_ field: UITextView, context: Context) { - field.text = text - field.textAlignment = alignment == .leading ? .left : .right - updateFont(field) - updateHeight(field) + if field.markedTextRange == nil && field.text != text { + field.text = text + field.textAlignment = alignment(text) + updateFont(field) + updateHeight(field) + } } private func updateHeight(_ field: UITextView) { @@ -73,12 +77,19 @@ struct NativeTextEditor: UIViewRepresentable { } private func updateFont(_ field: UITextView) { - field.font = isShortEmoji(field.text) + let newFont = isShortEmoji(field.text) ? (field.text.count < 4 ? largeEmojiUIFont : mediumEmojiUIFont) : UIFont.preferredFont(forTextStyle: .body) + if field.font != newFont { + field.font = newFont + } } } +private func alignment(_ text: String) -> NSTextAlignment { + isRightToLeft(text) ? .right : .left +} + private class CustomUITextField: UITextView, UITextViewDelegate { var height: Binding var newHeight: CGFloat = 0 @@ -205,7 +216,6 @@ struct NativeTextEditor_Previews: PreviewProvider{ disableEditing: Binding.constant(false), height: Binding.constant(100), focused: Binding.constant(false), - alignment: TextAlignment.leading, onImagesAdded: { _ in } ) .fixedSize(horizontal: false, vertical: true) diff --git a/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift b/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift index ae0394475d..8b528a201c 100644 --- a/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift +++ b/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift @@ -54,13 +54,11 @@ struct SendMessageView: View { .padding(.vertical, 8) .frame(maxWidth: .infinity) } else { - let alignment: TextAlignment = isRightToLeft(composeState.message) ? .trailing : .leading NativeTextEditor( text: $composeState.message, disableEditing: $composeState.inProgress, height: $teHeight, focused: $keyboardVisible, - alignment: alignment, onImagesAdded: onMediaAdded ) .allowsTightening(false) From 505c6cb0621cf8094eb457b7aa0d50e3d7403154 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Fri, 19 Apr 2024 13:23:13 +0700 Subject: [PATCH 52/60] ios: prevent a crash when exiting the app (#4041) * ios: prevent a crash when exiting the app * log --- apps/ios/SimpleXChat/API.swift | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/ios/SimpleXChat/API.swift b/apps/ios/SimpleXChat/API.swift index cdd1008c13..e2f4adc60f 100644 --- a/apps/ios/SimpleXChat/API.swift +++ b/apps/ios/SimpleXChat/API.swift @@ -87,6 +87,11 @@ public func chatInitControllerRemovingDatabases() { public func chatCloseStore() { + // Prevent crash when exiting the app with already closed store (for example, after changing a database passpharase) + guard hasChatCtrl() else { + logger.error("chatCloseStore: already closed, chatCtrl is nil") + return + } let err = fromCString(chat_close_store(getChatCtrl())) if err != "" { logger.error("chatCloseStore error: \(err)") From 648884044f9e820264e8f32ea6546f6f3291a53d Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Fri, 19 Apr 2024 11:31:44 +0400 Subject: [PATCH 53/60] core: prohibit forwarding file if it's not found (#4047) --- src/Simplex/Chat.hs | 51 +++++++++++++++++----------------- src/Simplex/Chat/Controller.hs | 1 + src/Simplex/Chat/View.hs | 1 + 3 files changed, 28 insertions(+), 25 deletions(-) diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index 41c744850a..2e19dd73d9 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -895,7 +895,7 @@ processChatCommand' vr = \case cci <- getDirectChatItem db user fromChatId itemId pure (ct, cci) (mc, mDir) <- forwardMC ci - file <- forwardCryptoFile ci `catchChatError` (\e -> toView (CRChatError (Just user) e) $> Nothing) + file <- forwardCryptoFile ci let ciff = forwardCIFF ci $ Just (CIFFContact (forwardName ct) mDir (Just fromChatId) (Just itemId)) pure (ComposedMessage file Nothing mc, ciff) where @@ -909,7 +909,7 @@ processChatCommand' vr = \case cci <- getGroupChatItem db user fromChatId itemId pure (gInfo, cci) (mc, mDir) <- forwardMC ci - file <- forwardCryptoFile ci `catchChatError` (\e -> toView (CRChatError (Just user) e) $> Nothing) + file <- forwardCryptoFile ci let ciff = forwardCIFF ci $ Just (CIFFGroup (forwardName gInfo) mDir (Just fromChatId) (Just itemId)) pure (ComposedMessage file Nothing mc, ciff) where @@ -918,7 +918,7 @@ processChatCommand' vr = \case CTLocal -> do (CChatItem _ ci) <- withStore $ \db -> getLocalChatItem db user fromChatId itemId (mc, _) <- forwardMC ci - file <- forwardCryptoFile ci `catchChatError` (\e -> toView (CRChatError (Just user) e) $> Nothing) + file <- forwardCryptoFile ci let ciff = forwardCIFF ci Nothing pure (ComposedMessage file Nothing mc, ciff) CTContactRequest -> throwChatError $ CECommandError "not supported" @@ -935,28 +935,29 @@ processChatCommand' vr = \case Just CIFFUnknown -> ciff Just prevCIFF -> Just prevCIFF forwardCryptoFile :: ChatItem c d -> CM (Maybe CryptoFile) - forwardCryptoFile ChatItem {file = Just CIFile {fileName, fileStatus, fileSource = Just fromCF@CryptoFile {filePath}}} - | ciFileLoaded fileStatus = - chatReadVar filesFolder >>= \case - Nothing -> - ifM (doesFileExist filePath) (pure $ Just fromCF) (pure Nothing) - Just filesFolder -> do - let fsFromPath = filesFolder filePath - ifM - (doesFileExist fsFromPath) - ( do - fsNewPath <- liftIO $ filesFolder `uniqueCombine` fileName - liftIO $ B.writeFile fsNewPath "" -- create empty file - encrypt <- chatReadVar encryptLocalFiles - cfArgs <- if encrypt then Just <$> (atomically . CF.randomArgs =<< asks random) else pure Nothing - let toCF = CryptoFile fsNewPath cfArgs - -- to keep forwarded file in case original is deleted - liftIOEither $ runExceptT $ withExceptT (ChatError . CEInternalError . show) $ copyCryptoFile (fromCF {filePath = fsFromPath} :: CryptoFile) toCF - pure $ Just (toCF {filePath = takeFileName fsNewPath} :: CryptoFile) - ) - (pure Nothing) - | otherwise = pure Nothing - forwardCryptoFile _ = pure Nothing + forwardCryptoFile ChatItem {file = Nothing} = pure Nothing + forwardCryptoFile ChatItem {file = Just ciFile} = case ciFile of + CIFile {fileName, fileStatus, fileSource = Just fromCF@CryptoFile {filePath}} + | ciFileLoaded fileStatus -> + chatReadVar filesFolder >>= \case + Nothing -> + ifM (doesFileExist filePath) (pure $ Just fromCF) (throwChatError CEForwardNoFile) + Just filesFolder -> do + let fsFromPath = filesFolder filePath + ifM + (doesFileExist fsFromPath) + ( do + fsNewPath <- liftIO $ filesFolder `uniqueCombine` fileName + liftIO $ B.writeFile fsNewPath "" -- create empty file + encrypt <- chatReadVar encryptLocalFiles + cfArgs <- if encrypt then Just <$> (atomically . CF.randomArgs =<< asks random) else pure Nothing + let toCF = CryptoFile fsNewPath cfArgs + -- to keep forwarded file in case original is deleted + liftIOEither $ runExceptT $ withExceptT (ChatError . CEInternalError . show) $ copyCryptoFile (fromCF {filePath = fsFromPath} :: CryptoFile) toCF + pure $ Just (toCF {filePath = takeFileName fsNewPath} :: CryptoFile) + ) + (throwChatError CEForwardNoFile) + _ -> throwChatError CEForwardNoFile copyCryptoFile :: CryptoFile -> CryptoFile -> ExceptT CF.FTCryptoError IO () copyCryptoFile fromCF@CryptoFile {filePath = fsFromPath, cryptoArgs = fromArgs} toCF@CryptoFile {cryptoArgs = toArgs} = do fromSizeFull <- getFileSize fsFromPath diff --git a/src/Simplex/Chat/Controller.hs b/src/Simplex/Chat/Controller.hs index dffaa72ab3..00c2e153f1 100644 --- a/src/Simplex/Chat/Controller.hs +++ b/src/Simplex/Chat/Controller.hs @@ -1121,6 +1121,7 @@ data ChatErrorType | CEInlineFileProhibited {fileId :: FileTransferId} | CEInvalidQuote | CEInvalidForward + | CEForwardNoFile | CEInvalidChatItemUpdate | CEInvalidChatItemDelete | CEHasCurrentCall diff --git a/src/Simplex/Chat/View.hs b/src/Simplex/Chat/View.hs index c136300bc5..89d0136478 100644 --- a/src/Simplex/Chat/View.hs +++ b/src/Simplex/Chat/View.hs @@ -1968,6 +1968,7 @@ viewChatError logLevel testView = \case CEInlineFileProhibited _ -> ["A small file sent without acceptance - you can enable receiving such files with -f option."] CEInvalidQuote -> ["cannot reply to this message"] CEInvalidForward -> ["cannot forward this message"] + CEForwardNoFile -> ["cannot forward this message, file not found"] CEInvalidChatItemUpdate -> ["cannot update this item"] CEInvalidChatItemDelete -> ["cannot delete this item"] CEHasCurrentCall -> ["call already in progress"] From 918be31f2c2cc7c4a109dbaab454bd7e071566ae Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Fri, 19 Apr 2024 21:57:00 +0700 Subject: [PATCH 54/60] desktop: fix freeze that happened when new chat items arrives while scrolling via scrollbar (#4050) --- .../kotlin/chat/simplex/common/views/chat/ChatView.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt index 4761b938b9..55ee46f1e2 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt @@ -1090,9 +1090,9 @@ private fun ScrollToBottom(chatId: ChatId, listState: LazyListState, chatItems: .collect { try { if (listState.firstVisibleItemIndex == 0 || (listState.firstVisibleItemIndex == 1 && listState.layoutInfo.totalItemsCount == chatItems.size)) { - listState.animateScrollToItem(0) + if (appPlatform.isAndroid) listState.animateScrollToItem(0) else listState.scrollToItem(0) } else { - listState.animateScrollBy(scrollDistance) + if (appPlatform.isAndroid) listState.animateScrollBy(scrollDistance) else listState.scrollBy(scrollDistance) } } catch (e: CancellationException) { /** From 6484e36b820c2fe1b122bac9f82f80408128a90d Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Fri, 19 Apr 2024 23:20:31 +0700 Subject: [PATCH 55/60] ios: fix mute/unmute button state (#4046) --- apps/ios/Shared/Views/Chat/ChatView.swift | 24 +++++++++++-------- .../Views/ChatList/ChatListNavLink.swift | 4 ++-- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/apps/ios/Shared/Views/Chat/ChatView.swift b/apps/ios/Shared/Views/Chat/ChatView.swift index 6651b7cc5a..5500b0c6e7 100644 --- a/apps/ios/Shared/Views/Chat/ChatView.swift +++ b/apps/ios/Shared/Views/Chat/ChatView.swift @@ -183,7 +183,7 @@ struct ChatView: View { .disabled(!contact.ready || !contact.active) } searchButton() - toggleNtfsButton(chat) + ToggleNtfsButton(chat: chat) .disabled(!contact.ready || !contact.active) } label: { Image(systemName: "ellipsis") @@ -212,7 +212,7 @@ struct ChatView: View { } Menu { searchButton() - toggleNtfsButton(chat) + ToggleNtfsButton(chat: chat) } label: { Image(systemName: "ellipsis") } @@ -1198,14 +1198,18 @@ struct ChatView: View { } } -@ViewBuilder func toggleNtfsButton(_ chat: Chat) -> some View { - Button { - toggleNotifications(chat, enableNtfs: !chat.chatInfo.ntfsEnabled) - } label: { - if chat.chatInfo.ntfsEnabled { - Label("Mute", systemImage: "speaker.slash") - } else { - Label("Unmute", systemImage: "speaker.wave.2") +struct ToggleNtfsButton: View { + @ObservedObject var chat: Chat + + var body: some View { + Button { + toggleNotifications(chat, enableNtfs: !chat.chatInfo.ntfsEnabled) + } label: { + if chat.chatInfo.ntfsEnabled { + Label("Mute", systemImage: "speaker.slash") + } else { + Label("Unmute", systemImage: "speaker.wave.2") + } } } } diff --git a/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift b/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift index 7fbc1e4ac8..efe254323e 100644 --- a/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift +++ b/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift @@ -92,7 +92,7 @@ struct ChatListNavLink: View { .swipeActions(edge: .leading, allowsFullSwipe: true) { markReadButton() toggleFavoriteButton() - toggleNtfsButton(chat) + ToggleNtfsButton(chat: chat) } .swipeActions(edge: .trailing, allowsFullSwipe: true) { if !chat.chatItems.isEmpty { @@ -181,7 +181,7 @@ struct ChatListNavLink: View { .swipeActions(edge: .leading, allowsFullSwipe: true) { markReadButton() toggleFavoriteButton() - toggleNtfsButton(chat) + ToggleNtfsButton(chat: chat) } .swipeActions(edge: .trailing, allowsFullSwipe: true) { if !chat.chatItems.isEmpty { From 1306c84938fef4a03324fd6256053ac80895b254 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Fri, 19 Apr 2024 20:21:35 +0400 Subject: [PATCH 56/60] ios: in item context menu don't show forward button if file doesn't exist, add download button (#4048) --- .../Views/Chat/ChatItem/CIFileView.swift | 18 +++++++-------- apps/ios/Shared/Views/Chat/ChatView.swift | 22 +++++++++++++++++-- apps/ios/SimpleXChat/APITypes.swift | 1 + 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CIFileView.swift b/apps/ios/Shared/Views/Chat/ChatItem/CIFileView.swift index c94ba3f830..ae9e09b138 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/CIFileView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/CIFileView.swift @@ -69,19 +69,12 @@ struct CIFileView: View { return false } - private func fileSizeValid() -> Bool { - if let file = file { - return file.fileSize <= getMaxFileSize(file.fileProtocol) - } - return false - } - private func fileAction() { logger.debug("CIFileView fileAction") if let file = file { switch (file.fileStatus) { case .rcvInvitation: - if fileSizeValid() { + if fileSizeValid(file) { Task { logger.debug("CIFileView fileAction - in .rcvInvitation, in Task") if let user = m.currentUser { @@ -143,7 +136,7 @@ struct CIFileView: View { case .sndCancelled: fileIcon("doc.fill", innerIcon: "xmark", innerIconSize: 10) case .sndError: fileIcon("doc.fill", innerIcon: "xmark", innerIconSize: 10) case .rcvInvitation: - if fileSizeValid() { + if fileSizeValid(file) { fileIcon("arrow.down.doc.fill", color: .accentColor) } else { fileIcon("doc.fill", color: .orange, innerIcon: "exclamationmark", innerIconSize: 12) @@ -201,6 +194,13 @@ struct CIFileView: View { } } +func fileSizeValid(_ file: CIFile?) -> Bool { + if let file = file { + return file.fileSize <= getMaxFileSize(file.fileProtocol) + } + return false +} + func saveCryptoFile(_ fileSource: CryptoFile) { if let cfArgs = fileSource.cryptoArgs { let url = getAppFilePath(fileSource.filePath) diff --git a/apps/ios/Shared/Views/Chat/ChatView.swift b/apps/ios/Shared/Views/Chat/ChatView.swift index 5500b0c6e7..45819851f0 100644 --- a/apps/ios/Shared/Views/Chat/ChatView.swift +++ b/apps/ios/Shared/Views/Chat/ChatView.swift @@ -785,11 +785,15 @@ struct ChatView: View { } else { menu.append(saveFileAction(fileSource)) } + } else if let file = ci.file, case .rcvInvitation = file.fileStatus, fileSizeValid(file) { + menu.append(downloadFileAction(file)) } if ci.meta.editable && !mc.isVoice && !live { menu.append(editAction(ci)) } - if ci.meta.itemDeleted == nil && !ci.isLiveDummy && !live { + if ci.meta.itemDeleted == nil + && (ci.file == nil || (fileSource != nil && fileExists)) + && !ci.isLiveDummy && !live { menu.append(forwardUIAction(ci)) } if !ci.isLiveDummy { @@ -949,7 +953,21 @@ struct ChatView: View { saveCryptoFile(fileSource) } } - + + private func downloadFileAction(_ file: CIFile) -> UIAction { + UIAction( + title: NSLocalizedString("Download", comment: "chat item action"), + image: UIImage(systemName: "arrow.down.doc") + ) { _ in + Task { + logger.debug("ChatView downloadFileAction, in Task") + if let user = m.currentUser { + await receiveFile(user: user, fileId: file.fileId) + } + } + } + } + private func editAction(_ ci: ChatItem) -> UIAction { UIAction( title: NSLocalizedString("Edit", comment: "chat item action"), diff --git a/apps/ios/SimpleXChat/APITypes.swift b/apps/ios/SimpleXChat/APITypes.swift index e27e280e40..f33bdfbdd8 100644 --- a/apps/ios/SimpleXChat/APITypes.swift +++ b/apps/ios/SimpleXChat/APITypes.swift @@ -1721,6 +1721,7 @@ public enum ChatErrorType: Decodable { case inlineFileProhibited(fileId: Int64) case invalidQuote case invalidForward + case forwardNoFile case invalidChatItemUpdate case invalidChatItemDelete case hasCurrentCall From a35d392f76503b0de32332f8b8ea98d511b8bc48 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Fri, 19 Apr 2024 17:10:31 +0100 Subject: [PATCH 57/60] core: update simplexmq --- cabal.project | 2 +- scripts/nix/sha256map.nix | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cabal.project b/cabal.project index af464c7320..02deb0dbfb 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: 5e783396e05ced83b22914c172d2f2e8e14e5be2 + tag: c00c223f3bb295a62d8507e453bbeac61d102e3a source-repository-package type: git diff --git a/scripts/nix/sha256map.nix b/scripts/nix/sha256map.nix index cc8003b551..0b264d3628 100644 --- a/scripts/nix/sha256map.nix +++ b/scripts/nix/sha256map.nix @@ -1,5 +1,5 @@ { - "https://github.com/simplex-chat/simplexmq.git"."5e783396e05ced83b22914c172d2f2e8e14e5be2" = "1bxbhy5vddczspan0xzcwk2jvkial6n84m0s5wznqbg03i4y7j1y"; + "https://github.com/simplex-chat/simplexmq.git"."c00c223f3bb295a62d8507e453bbeac61d102e3a" = "0zbsz70rjhvrlkkiwnw43v7lg6r05lp5rwk7jmnn21zfjib4l621"; "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"; From f6ceb89c4bd6fc153f055693d81797c212cc7bc0 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Fri, 19 Apr 2024 23:36:32 +0700 Subject: [PATCH 58/60] android, desktop: forward ui (#4039) * android, desktop: forward ui * changes * attachment icon * reorder lines * reorder lines * change * inline content + formatted text * fix header padding * fix * fix2 * Revert "fix header padding" This reverts commit 63f2b15f021ad2feb3287fcae2a12d325db517b8. * broken default parameter * changes * more checks for file forwarding * paddings * padding * padding and fix --------- Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> --- .../Views/Chat/ChatItem/FramedItemView.swift | 2 +- .../java/chat/simplex/app/MainActivity.kt | 21 ++- .../chat/simplex/common/model/ChatModel.kt | 26 +++- .../chat/simplex/common/model/SimpleXAPI.kt | 17 ++- .../common/views/chat/ChatItemInfoView.kt | 120 ++++++++++++++++-- .../simplex/common/views/chat/ChatView.kt | 10 +- .../simplex/common/views/chat/ComposeView.kt | 61 ++++++++- .../common/views/chat/ContextItemView.kt | 48 ++++++- .../simplex/common/views/chat/SendMsgView.kt | 4 +- .../views/chat/item/CIChatFeatureView.kt | 4 +- .../common/views/chat/item/CIFileView.kt | 13 +- .../common/views/chat/item/ChatItemView.kt | 39 +++++- .../common/views/chat/item/FramedItemView.kt | 6 +- .../common/views/chat/item/TextItemView.kt | 8 +- .../common/views/chatlist/ChatPreviewView.kt | 9 +- .../common/views/chatlist/ShareListView.kt | 27 ++-- .../simplex/common/views/helpers/Enums.kt | 3 + .../commonMain/resources/MR/base/strings.xml | 10 ++ 18 files changed, 351 insertions(+), 77 deletions(-) diff --git a/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift b/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift index 3b10bcad55..ed724599be 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift @@ -165,7 +165,7 @@ struct FramedItemView: View { ) } - @ViewBuilder func framedItemHeader(icon: String? = nil, caption: Text, pad: Bool = true) -> some View { + @ViewBuilder func framedItemHeader(icon: String? = nil, caption: Text, pad: Bool = false) -> some View { let v = HStack(spacing: 6) { if let icon = icon { Image(systemName: icon) diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/MainActivity.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/MainActivity.kt index 7a1299c612..6ce582cad4 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/MainActivity.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/MainActivity.kt @@ -89,11 +89,12 @@ class MainActivity: FragmentActivity() { } override fun onBackPressed() { - if ( - onBackPressedDispatcher.hasEnabledCallbacks() // Has something to do in a backstack - || Build.VERSION.SDK_INT >= Build.VERSION_CODES.R // Android 11 or above - || isTaskRoot // there are still other tasks after we reach the main (home) activity - ) { + val canFinishActivity = ( + onBackPressedDispatcher.hasEnabledCallbacks() // Has something to do in a backstack + || Build.VERSION.SDK_INT >= Build.VERSION_CODES.R // Android 11 or above + || isTaskRoot // there are still other tasks after we reach the main (home) activity + ) && SimplexApp.context.chatModel.sharedContent.value !is SharedContent.Forward + if (canFinishActivity) { // https://medium.com/mobile-app-development-publication/the-risk-of-android-strandhogg-security-issue-and-how-it-can-be-mitigated-80d2ddb4af06 super.onBackPressed() } @@ -104,9 +105,15 @@ class MainActivity: FragmentActivity() { AppLock.laFailed.value = true } if (!onBackPressedDispatcher.hasEnabledCallbacks()) { + val sharedContent = chatModel.sharedContent.value // Drop shared content - SimplexApp.context.chatModel.sharedContent.value = null - finish() + chatModel.sharedContent.value = null + if (sharedContent is SharedContent.Forward) { + chatModel.chatId.value = sharedContent.fromChatInfo.id + } + if (canFinishActivity) { + finish() + } } } } 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 d0a02c332f..ca9056a058 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 @@ -111,7 +111,7 @@ object ChatModel { var draft = mutableStateOf(null as ComposeState?) var draftChatId = mutableStateOf(null as String?) - // working with external intents + // working with external intents or internal forwarding of chat items val sharedContent = mutableStateOf(null as SharedContent?) val filesToDelete = mutableSetOf() @@ -1753,7 +1753,7 @@ data class ChatItem ( val allowAddReaction: Boolean get() = meta.itemDeleted == null && !isLiveDummy && (reactions.count { it.userReacted } < 3) - private val isLiveDummy: Boolean get() = meta.itemId == TEMP_LIVE_CHAT_ITEM_ID + val isLiveDummy: Boolean get() = meta.itemId == TEMP_LIVE_CHAT_ITEM_ID val encryptedFile: Boolean? = if (file?.fileSource == null) null else file.fileSource.cryptoArgs != null @@ -2298,8 +2298,26 @@ enum class MsgDirection { @Serializable sealed class CIForwardedFrom { @Serializable @SerialName("unknown") object Unknown: CIForwardedFrom() - @Serializable @SerialName("contact") class Contact(val chatName: String, val msgDir: MsgDirection, val contactId: Long? = null, val chatItemId: Long? = null): CIForwardedFrom() - @Serializable @SerialName("group") class Group(val chatName: String, val msgDir: MsgDirection, val groupId: Long? = null, val chatItemId: Long? = null): CIForwardedFrom() + @Serializable @SerialName("contact") class Contact(override val chatName: String, val msgDir: MsgDirection, val contactId: Long? = null, val chatItemId: Long? = null): CIForwardedFrom() + @Serializable @SerialName("group") class Group(override val chatName: String, val msgDir: MsgDirection, val groupId: Long? = null, val chatItemId: Long? = null): CIForwardedFrom() + + open val chatName: String + get() = when (this) { + Unknown -> "" + is Contact -> chatName + is Group -> chatName + } + + fun text(chatType: ChatType): String = + if (chatType == ChatType.Local) { + if (chatName.isEmpty()) { + generalGetString(MR.strings.saved_description) + } else { + generalGetString(MR.strings.saved_from_description).format(chatName) + } + } else { + generalGetString(MR.strings.forwarded_description) + } } @Serializable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt index 4e239598fb..90d6995504 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt @@ -738,12 +738,16 @@ object ChatController { suspend fun apiSendMessage(rh: Long?, type: ChatType, id: Long, file: CryptoFile? = null, quotedItemId: Long? = null, mc: MsgContent, live: Boolean = false, ttl: Int? = null): AChatItem? { val cmd = CC.ApiSendMessage(type, id, file, quotedItemId, mc, live, ttl) + return processSendMessageCmd(rh, cmd) + } + + private suspend fun processSendMessageCmd(rh: Long?, cmd: CC): AChatItem? { val r = sendCmd(rh, cmd) return when (r) { is CR.NewChatItem -> r.chatItem else -> { if (!(networkErrorAlert(r))) { - apiErrorAlert("apiSendMessage", generalGetString(MR.strings.error_sending_message), r) + apiErrorAlert("processSendMessageCmd", generalGetString(MR.strings.error_sending_message), r) } null } @@ -771,6 +775,13 @@ object ChatController { } } + suspend fun apiForwardChatItem(rh: Long?, toChatType: ChatType, toChatId: Long, fromChatType: ChatType, fromChatId: Long, itemId: Long): ChatItem? { + val cmd = CC.ApiForwardChatItem(toChatType, toChatId, fromChatType, fromChatId, itemId) + return processSendMessageCmd(rh, cmd)?.chatItem + } + + + suspend fun apiUpdateChatItem(rh: Long?, type: ChatType, id: Long, itemId: Long, mc: MsgContent, live: Boolean = false): AChatItem? { val r = sendCmd(rh, CC.ApiUpdateChatItem(type, id, itemId, mc, live)) if (r is CR.ChatItemUpdated) return r.chatItem @@ -1971,7 +1982,6 @@ object ChatController { } is CR.SndFileCompleteXFTP -> { chatItemSimpleUpdate(rhId, r.user, r.chatItem) - cleanupFile(r.chatItem) } is CR.SndFileError -> { if (r.chatItem_ != null) { @@ -2396,6 +2406,7 @@ sealed class CC { class ApiDeleteChatItem(val type: ChatType, val id: Long, val itemId: Long, val mode: CIDeleteMode): CC() class ApiDeleteMemberChatItem(val groupId: Long, val groupMemberId: Long, val itemId: Long): CC() class ApiChatItemReaction(val type: ChatType, val id: Long, val itemId: Long, val add: Boolean, val reaction: MsgReaction): CC() + class ApiForwardChatItem(val toChatType: ChatType, val toChatId: Long, val fromChatType: ChatType, val fromChatId: Long, val itemId: Long): CC() class ApiNewGroup(val userId: Long, val incognito: Boolean, val groupProfile: GroupProfile): CC() class ApiAddMember(val groupId: Long, val contactId: Long, val memberRole: GroupMemberRole): CC() class ApiJoinGroup(val groupId: Long): CC() @@ -2539,6 +2550,7 @@ sealed class CC { is ApiDeleteChatItem -> "/_delete item ${chatRef(type, id)} $itemId ${mode.deleteMode}" is ApiDeleteMemberChatItem -> "/_delete member item #$groupId $groupMemberId $itemId" is ApiChatItemReaction -> "/_reaction ${chatRef(type, id)} $itemId ${onOff(add)} ${json.encodeToString(reaction)}" + is ApiForwardChatItem -> "/_forward ${chatRef(toChatType, toChatId)} ${chatRef(fromChatType, fromChatId)} $itemId" is ApiNewGroup -> "/_group $userId incognito=${onOff(incognito)} ${json.encodeToString(groupProfile)}" is ApiAddMember -> "/_add #$groupId $contactId ${memberRole.memberRole}" is ApiJoinGroup -> "/_join #$groupId" @@ -2677,6 +2689,7 @@ sealed class CC { is ApiDeleteChatItem -> "apiDeleteChatItem" is ApiDeleteMemberChatItem -> "apiDeleteMemberChatItem" is ApiChatItemReaction -> "apiChatItemReaction" + is ApiForwardChatItem -> "apiForwardChatItem" is ApiNewGroup -> "apiNewGroup" is ApiAddMember -> "apiAddMember" is ApiJoinGroup -> "apiJoinGroup" diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatItemInfoView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatItemInfoView.kt index 14bb3543c3..df8e535f82 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatItemInfoView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatItemInfoView.kt @@ -13,9 +13,8 @@ import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalUriHandler +import androidx.compose.ui.platform.* import androidx.compose.ui.text.AnnotatedString import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource @@ -29,6 +28,7 @@ import chat.simplex.common.views.chat.item.ItemAction import chat.simplex.common.views.chat.item.MarkdownText import chat.simplex.common.views.helpers.* import chat.simplex.common.ui.theme.* +import chat.simplex.common.views.chatlist.* import chat.simplex.res.MR import dev.icerock.moko.resources.ImageResource @@ -36,10 +36,11 @@ sealed class CIInfoTab { class Delivery(val memberDeliveryStatuses: List): CIInfoTab() object History: CIInfoTab() class Quote(val quotedItem: CIQuote): CIInfoTab() + class Forwarded(val forwardedFromChatItem: AChatItem): CIInfoTab() } @Composable -fun ChatItemInfoView(chatModel: ChatModel, ci: ChatItem, ciInfo: ChatItemInfo, devTools: Boolean) { +fun ChatItemInfoView(chatRh: Long?, ci: ChatItem, ciInfo: ChatItemInfo, devTools: Boolean) { val sent = ci.chatDir.sent val appColors = CurrentColors.collectAsState().value.appColors val uriHandler = LocalUriHandler.current @@ -151,6 +152,70 @@ fun ChatItemInfoView(chatModel: ChatModel, ci: ChatItem, ciInfo: ChatItemInfo, d } } + val local = when (ci.chatDir) { + is CIDirection.LocalSnd -> true + is CIDirection.LocalRcv -> true + else -> false + } + + @Composable + fun ForwardedFromSender(forwardedFromItem: AChatItem) { + @Composable + fun ItemText(text: String, fontStyle: FontStyle = FontStyle.Normal, color: Color = MaterialTheme.colors.onBackground) { + Text( + text, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + style = MaterialTheme.typography.body1, + fontStyle = fontStyle, + color = color, + ) + } + + Row(verticalAlignment = Alignment.CenterVertically) { + ChatInfoImage(forwardedFromItem.chatInfo, size = 57.dp) + Column( + modifier = Modifier + .padding(start = 15.dp) + .weight(1F) + ) { + if (forwardedFromItem.chatItem.chatDir.sent) { + ItemText(text = stringResource(MR.strings.sender_you_pronoun), fontStyle = FontStyle.Italic) + Spacer(Modifier.height(7.dp)) + ItemText(forwardedFromItem.chatInfo.chatViewName, color = MaterialTheme.colors.secondary) + } else if (forwardedFromItem.chatItem.chatDir is CIDirection.GroupRcv) { + ItemText(text = forwardedFromItem.chatItem.chatDir.groupMember.chatViewName) + Spacer(Modifier.height(7.dp)) + ItemText(forwardedFromItem.chatInfo.chatViewName, color = MaterialTheme.colors.secondary) + } else { + ItemText(forwardedFromItem.chatInfo.chatViewName, color = MaterialTheme.colors.onBackground) + } + } + } + } + + @Composable + fun ForwardedFromView(forwardedFromItem: AChatItem) { + Column { + SectionItemView( + click = { + withBGApi { + openChat(chatRh, forwardedFromItem.chatInfo, chatModel) + ModalManager.end.closeModals() + } + }, + padding = PaddingValues(start = 17.dp, end = DEFAULT_PADDING) + ) { + ForwardedFromSender(forwardedFromItem) + } + + if (!local) { + Divider(Modifier.padding(start = DEFAULT_PADDING_HALF, top = 41.dp, end = DEFAULT_PADDING_HALF, bottom = DEFAULT_PADDING_HALF)) + Text(stringResource(MR.strings.recipients_can_not_see_who_message_from), Modifier.padding(horizontal = DEFAULT_PADDING), fontSize = 12.sp, color = MaterialTheme.colors.secondary) + } + } + } + @Composable fun Details() { AppBarTitle(stringResource(if (ci.localNote) MR.strings.saved_message_title else if (sent) MR.strings.sent_message else MR.strings.received_message)) @@ -188,7 +253,7 @@ fun ChatItemInfoView(chatModel: ChatModel, ci: ChatItem, ciInfo: ChatItemInfo, d // LALAL SCROLLBAR DOESN'T WORK ColumnWithScrollBar(Modifier.fillMaxWidth()) { Details() - SectionDividerSpaced(maxTopPadding = false, maxBottomPadding = false) + SectionDividerSpaced(maxTopPadding = false, maxBottomPadding = true) val versions = ciInfo.itemVersions if (versions.isNotEmpty()) { SectionView(padding = PaddingValues(horizontal = DEFAULT_PADDING)) { @@ -213,7 +278,7 @@ fun ChatItemInfoView(chatModel: ChatModel, ci: ChatItem, ciInfo: ChatItemInfo, d // LALAL SCROLLBAR DOESN'T WORK ColumnWithScrollBar(Modifier.fillMaxWidth()) { Details() - SectionDividerSpaced(maxTopPadding = false, maxBottomPadding = false) + SectionDividerSpaced(maxTopPadding = false, maxBottomPadding = true) SectionView(padding = PaddingValues(horizontal = DEFAULT_PADDING)) { Text(stringResource(MR.strings.in_reply_to), style = MaterialTheme.typography.h2, modifier = Modifier.padding(bottom = DEFAULT_PADDING)) QuotedMsgView(qi) @@ -222,6 +287,22 @@ fun ChatItemInfoView(chatModel: ChatModel, ci: ChatItem, ciInfo: ChatItemInfo, d } } + @Composable + fun ForwardedFromTab(forwardedFromItem: AChatItem) { + // LALAL SCROLLBAR DOESN'T WORK + ColumnWithScrollBar(Modifier.fillMaxWidth()) { + Details() + SectionDividerSpaced(maxTopPadding = false, maxBottomPadding = true) + SectionView { + Text(stringResource(if (local) MR.strings.saved_from_chat_item_info_title else MR.strings.forwarded_from_chat_item_info_title), + style = MaterialTheme.typography.h2, + modifier = Modifier.padding(start = DEFAULT_PADDING, end = DEFAULT_PADDING, bottom = DEFAULT_PADDING)) + ForwardedFromView(forwardedFromItem) + } + SectionBottomSpacer() + } + } + @Composable fun MemberDeliveryStatusView(member: GroupMember, status: CIStatus) { SectionItemView( @@ -271,7 +352,7 @@ fun ChatItemInfoView(chatModel: ChatModel, ci: ChatItem, ciInfo: ChatItemInfo, d // LALAL SCROLLBAR DOESN'T WORK ColumnWithScrollBar(Modifier.fillMaxWidth()) { Details() - SectionDividerSpaced(maxTopPadding = false, maxBottomPadding = false) + SectionDividerSpaced(maxTopPadding = false, maxBottomPadding = true) val mss = membersStatuses(chatModel, memberDeliveryStatuses) if (mss.isNotEmpty()) { SectionView(padding = PaddingValues(horizontal = DEFAULT_PADDING)) { @@ -297,6 +378,7 @@ fun ChatItemInfoView(chatModel: ChatModel, ci: ChatItem, ciInfo: ChatItemInfo, d is CIInfoTab.Delivery -> stringResource(MR.strings.delivery) is CIInfoTab.History -> stringResource(MR.strings.edit_history) is CIInfoTab.Quote -> stringResource(MR.strings.in_reply_to) + is CIInfoTab.Forwarded -> stringResource(if (local) MR.strings.saved_chat_item_info_tab else MR.strings.forwarded_chat_item_info_tab) } } @@ -305,6 +387,7 @@ fun ChatItemInfoView(chatModel: ChatModel, ci: ChatItem, ciInfo: ChatItemInfo, d is CIInfoTab.Delivery -> MR.images.ic_double_check is CIInfoTab.History -> MR.images.ic_history is CIInfoTab.Quote -> MR.images.ic_reply + is CIInfoTab.Forwarded -> MR.images.ic_forward } } @@ -316,6 +399,9 @@ fun ChatItemInfoView(chatModel: ChatModel, ci: ChatItem, ciInfo: ChatItemInfo, d if (ci.quotedItem != null) { numTabs += 1 } + if (ciInfo.forwardedFromChatItem != null) { + numTabs += 1 + } return numTabs } @@ -326,11 +412,6 @@ fun ChatItemInfoView(chatModel: ChatModel, ci: ChatItem, ciInfo: ChatItemInfo, d .fillMaxHeight(), verticalArrangement = Arrangement.SpaceBetween ) { - LaunchedEffect(ciInfo) { - if (ciInfo.memberDeliveryStatuses != null) { - selection.value = CIInfoTab.Delivery(ciInfo.memberDeliveryStatuses) - } - } Column(Modifier.weight(1f)) { when (val sel = selection.value) { is CIInfoTab.Delivery -> { @@ -344,6 +425,10 @@ fun ChatItemInfoView(chatModel: ChatModel, ci: ChatItem, ciInfo: ChatItemInfo, d is CIInfoTab.Quote -> { QuoteTab(sel.quotedItem) } + + is CIInfoTab.Forwarded -> { + ForwardedFromTab(sel.forwardedFromChatItem) + } } } val availableTabs = mutableListOf() @@ -354,6 +439,19 @@ fun ChatItemInfoView(chatModel: ChatModel, ci: ChatItem, ciInfo: ChatItemInfo, d if (ci.quotedItem != null) { availableTabs.add(CIInfoTab.Quote(ci.quotedItem)) } + if (ciInfo.forwardedFromChatItem != null) { + availableTabs.add(CIInfoTab.Forwarded(ciInfo.forwardedFromChatItem)) + } + if (availableTabs.none { it.javaClass == selection.value.javaClass }) { + selection.value = availableTabs.first() + } + LaunchedEffect(ciInfo) { + if (ciInfo.forwardedFromChatItem != null && selection.value is CIInfoTab.Forwarded) { + selection.value = CIInfoTab.Forwarded(ciInfo.forwardedFromChatItem) + } else if (ciInfo.memberDeliveryStatuses != null) { + selection.value = CIInfoTab.Delivery(ciInfo.memberDeliveryStatuses) + } + } TabRow( selectedTabIndex = availableTabs.indexOfFirst { it::class == selection.value::class }, backgroundColor = Color.Transparent, diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt index 55ee46f1e2..0c9a973a69 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt @@ -52,9 +52,11 @@ fun ChatView(chatId: String, chatModel: ChatModel, onComposed: suspend (chatId: val user = chatModel.currentUser.value val useLinkPreviews = chatModel.controller.appPrefs.privacyLinkPreviews.get() val composeState = rememberSaveable(saver = ComposeState.saver()) { + val draft = chatModel.draft.value + val sharedContent = chatModel.sharedContent.value mutableStateOf( - if (chatModel.draftChatId.value == chatId && chatModel.draft.value != null) { - chatModel.draft.value ?: ComposeState(useLinkPreviews = useLinkPreviews) + if (chatModel.draftChatId.value == chatId && draft != null && (sharedContent !is SharedContent.Forward || sharedContent.fromChatInfo.id == chatId)) { + draft } else { ComposeState(useLinkPreviews = useLinkPreviews) } @@ -408,7 +410,7 @@ fun ChatView(chatId: String, chatModel: ChatModel, onComposed: suspend (chatId: clipboard.shareText(itemInfoShareText(chatModel, cItem, ciInfo, chatModel.controller.appPrefs.developerTools.get())) } }) { close -> - ChatItemInfoView(chatModel, cItem, ciInfo, devTools = chatModel.controller.appPrefs.developerTools.get()) + ChatItemInfoView(chatRh, cItem, ciInfo, devTools = chatModel.controller.appPrefs.developerTools.get()) KeyChangeEffect(chatModel.chatId.value) { close() } @@ -956,7 +958,7 @@ fun BoxWithConstraintsScope.ChatItemsList( tryOrShowError("${cItem.id}ChatItem", error = { CIBrokenComposableView(if (cItem.chatDir.sent) Alignment.CenterEnd else Alignment.CenterStart) }) { - ChatItemView(chat.chatInfo, cItem, composeState, provider, useLinkPreviews = useLinkPreviews, linkMode = linkMode, revealed = revealed, range = range, deleteMessage = deleteMessage, deleteMessages = deleteMessages, receiveFile = receiveFile, cancelFile = cancelFile, joinGroup = joinGroup, acceptCall = acceptCall, acceptFeature = acceptFeature, openDirectChat = openDirectChat, updateContactStats = updateContactStats, updateMemberStats = updateMemberStats, syncContactConnection = syncContactConnection, syncMemberConnection = syncMemberConnection, findModelChat = findModelChat, findModelMember = findModelMember, scrollToItem = scrollToItem, setReaction = setReaction, showItemDetails = showItemDetails, developerTools = developerTools) + ChatItemView(chat.remoteHostId, chat.chatInfo, cItem, composeState, provider, useLinkPreviews = useLinkPreviews, linkMode = linkMode, revealed = revealed, range = range, deleteMessage = deleteMessage, deleteMessages = deleteMessages, receiveFile = receiveFile, cancelFile = cancelFile, joinGroup = joinGroup, acceptCall = acceptCall, acceptFeature = acceptFeature, openDirectChat = openDirectChat, updateContactStats = updateContactStats, updateMemberStats = updateMemberStats, syncContactConnection = syncContactConnection, syncMemberConnection = syncMemberConnection, findModelChat = findModelChat, findModelMember = findModelMember, scrollToItem = scrollToItem, setReaction = setReaction, showItemDetails = showItemDetails, developerTools = developerTools) } } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeView.kt index 1c8b32d467..9ab2b47702 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeView.kt @@ -46,6 +46,7 @@ sealed class ComposeContextItem { @Serializable object NoContextItem: ComposeContextItem() @Serializable class QuotedItem(val chatItem: ChatItem): ComposeContextItem() @Serializable class EditingItem(val chatItem: ChatItem): ComposeContextItem() + @Serializable class ForwardingItem(val chatItem: ChatItem, val fromChatInfo: ChatInfo): ComposeContextItem() } @Serializable @@ -79,13 +80,18 @@ data class ComposeState( is ComposeContextItem.EditingItem -> true else -> false } + val forwarding: Boolean + get() = when (contextItem) { + is ComposeContextItem.ForwardingItem -> true + else -> false + } val sendEnabled: () -> Boolean get() = { val hasContent = when (preview) { is ComposePreview.MediaPreview -> true is ComposePreview.VoicePreview -> true is ComposePreview.FilePreview -> true - else -> message.isNotEmpty() || liveMessage != null + else -> message.isNotEmpty() || forwarding || liveMessage != null } hasContent && !inProgress } @@ -109,7 +115,7 @@ data class ComposeState( val attachmentDisabled: Boolean get() { - if (editing || liveMessage != null || inProgress) return true + if (editing || forwarding || liveMessage != null || inProgress) return true return when (preview) { ComposePreview.NoPreview -> false is ComposePreview.CLinkPreview -> false @@ -355,6 +361,7 @@ fun ComposeView( is SharedContent.Media -> shared.uris.map { it.toString() } is SharedContent.File -> listOf(shared.uri.toString()) is SharedContent.Text -> emptyList() + is SharedContent.Forward -> emptyList() } // When sharing a file and pasting it in SimpleX itself, the file shouldn't be deleted before sending or before leaving the chat after sharing chatModel.filesToDelete.removeAll { file -> @@ -401,6 +408,21 @@ fun ComposeView( composeState.value = composeState.value.copy(inProgress = true) } + suspend fun forwardItem(rhId: Long?, forwardedItem: ChatItem, fromChatInfo: ChatInfo): ChatItem? { + val chatItem = controller.apiForwardChatItem( + rh = rhId, + toChatType = chat.chatInfo.chatType, + toChatId = chat.chatInfo.apiId, + fromChatType = fromChatInfo.chatType, + fromChatId = fromChatInfo.apiId, + itemId = forwardedItem.id + ) + if (chatItem != null) { + chatModel.addChatItem(rhId, chat.chatInfo, chatItem) + } + return chatItem + } + fun checkLinkPreview(): MsgContent { return when (val composePreview = cs.preview) { is ComposePreview.CLinkPreview -> { @@ -460,11 +482,18 @@ fun ComposeView( if (liveMessage != null) composeState.value = cs.copy(liveMessage = null) sending() } - clearCurrentDraft() + if (!cs.forwarding || chatModel.draft.value?.forwarding == true) { + clearCurrentDraft() + } if (chat.nextSendGrpInv) { sendMemberContactInvitation() sent = null + } else if (cs.contextItem is ComposeContextItem.ForwardingItem) { + sent = forwardItem(chat.remoteHostId, cs.contextItem.chatItem, cs.contextItem.fromChatInfo) + if (cs.message.isNotEmpty()) { + sent = send(chat, checkLinkPreview(), quoted = sent?.id, live = false, ttl = null) + } } else if (cs.contextItem is ComposeContextItem.EditingItem) { val ei = cs.contextItem.chatItem sent = updateMessage(ei, chat, live) @@ -563,7 +592,15 @@ fun ComposeView( sent = send(chat, MsgContent.MCText(msgText), quotedItemId, null, live, ttl) } } + val wasForwarding = cs.forwarding + val forwardingFromChatId = (cs.contextItem as? ComposeContextItem.ForwardingItem)?.fromChatInfo?.id clearState(live) + val draft = chatModel.draft.value + if (wasForwarding && chatModel.draftChatId.value == chat.chatInfo.id && forwardingFromChatId != chat.chatInfo.id && draft != null) { + composeState.value = draft + } else { + clearCurrentDraft() + } return sent } @@ -745,6 +782,9 @@ fun ComposeView( is ComposeContextItem.EditingItem -> ContextItemView(contextItem.chatItem, painterResource(MR.images.ic_edit_filled)) { clearState() } + is ComposeContextItem.ForwardingItem -> ContextItemView(contextItem.chatItem, painterResource(MR.images.ic_forward), showSender = false) { + composeState.value = composeState.value.copy(contextItem = ComposeContextItem.NoContextItem) + } } } @@ -764,6 +804,10 @@ fun ComposeView( is SharedContent.Text -> onMessageChange(shared.text) is SharedContent.Media -> composeState.processPickedMedia(shared.uris, shared.text) is SharedContent.File -> composeState.processPickedFile(shared.uri, shared.text) + is SharedContent.Forward -> composeState.value = composeState.value.copy( + contextItem = ComposeContextItem.ForwardingItem(shared.chatItem, shared.fromChatInfo), + preview = if (composeState.value.preview is ComposePreview.CLinkPreview) composeState.value.preview else ComposePreview.NoPreview + ) null -> {} } chatModel.sharedContent.value = null @@ -903,6 +947,17 @@ fun ComposeView( chatModel.removeLiveDummy() CIFile.cachedRemoteFileRequests.clear() } + if (appPlatform.isDesktop) { + // Don't enable this on Android, it breaks it, This method only works on desktop. For Android there is a `KeyChangeEffect(chatModel.chatId.value)` + DisposableEffect(Unit) { + onDispose { + if (chatModel.sharedContent.value is SharedContent.Forward && saveLastDraft && !composeState.value.empty) { + chatModel.draft.value = composeState.value + chatModel.draftChatId.value = chat.id + } + } + } + } val timedMessageAllowed = remember(chat.chatInfo) { chat.chatInfo.featureEnabled(ChatFeature.TimedMessages) } val sendButtonColor = diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ContextItemView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ContextItemView.kt index b53574cfa4..ce34ecf0c3 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ContextItemView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ContextItemView.kt @@ -4,26 +4,29 @@ import androidx.compose.foundation.background import androidx.compose.foundation.layout.* import androidx.compose.material.* import androidx.compose.ui.graphics.painter.Painter -import androidx.compose.runtime.Composable -import androidx.compose.runtime.collectAsState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.desktop.ui.tooling.preview.Preview -import androidx.compose.ui.text.TextStyle +import androidx.compose.foundation.text.InlineTextContent +import androidx.compose.foundation.text.appendInlineContent +import androidx.compose.runtime.* +import androidx.compose.ui.text.* import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import chat.simplex.common.ui.theme.* import chat.simplex.common.views.chat.item.* import chat.simplex.common.model.* import chat.simplex.res.MR +import dev.icerock.moko.resources.ImageResource import kotlinx.datetime.Clock @Composable fun ContextItemView( contextItem: ChatItem, contextIcon: Painter, + showSender: Boolean = true, cancelContextItem: () -> Unit ) { val sent = contextItem.chatDir.sent @@ -31,16 +34,47 @@ fun ContextItemView( val receivedColor = CurrentColors.collectAsState().value.appColors.receivedMessage @Composable - fun msgContentView(lines: Int) { + fun MessageText(attachment: ImageResource?, lines: Int) { + val inlineContent: Pair Unit, Map>? = if (attachment != null) { + remember(contextItem.id) { + val inlineContentBuilder: AnnotatedString.Builder.() -> Unit = { + appendInlineContent(id = "attachmentIcon") + append(" ") + } + val inlineContent = mapOf( + "attachmentIcon" to InlineTextContent( + Placeholder(20.sp, 20.sp, PlaceholderVerticalAlign.TextCenter) + ) { + Icon(painterResource(attachment), null, tint = MaterialTheme.colors.secondary) + } + ) + inlineContentBuilder to inlineContent + } + } else null MarkdownText( contextItem.text, contextItem.formattedText, + sender = null, toggleSecrets = false, maxLines = lines, + inlineContent = inlineContent, linkMode = SimplexLinkMode.DESCRIPTION, modifier = Modifier.fillMaxWidth(), ) } + fun attachment(): ImageResource? = + when (contextItem.content.msgContent) { + is MsgContent.MCFile -> MR.images.ic_draft_filled + is MsgContent.MCImage -> MR.images.ic_image + is MsgContent.MCVoice -> MR.images.ic_play_arrow_filled + else -> null + } + + @Composable + fun ContextMsgPreview(lines: Int) { + MessageText(remember(contextItem.id) { attachment() }, lines) + } + Row( Modifier .padding(top = 8.dp) @@ -64,7 +98,7 @@ fun ContextItemView( tint = MaterialTheme.colors.secondary, ) val sender = contextItem.memberDisplayName - if (sender != null) { + if (showSender && sender != null) { Column( horizontalAlignment = Alignment.Start, verticalArrangement = Arrangement.spacedBy(4.dp), @@ -73,10 +107,10 @@ fun ContextItemView( sender, style = TextStyle(fontSize = 13.5.sp, color = CurrentColors.value.colors.secondary) ) - msgContentView(lines = 2) + ContextMsgPreview(lines = 2) } } else { - msgContentView(lines = 3) + ContextMsgPreview(lines = 3) } } IconButton(onClick = cancelContextItem) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/SendMsgView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/SendMsgView.kt index 14bcf7dfb7..58705bd00a 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/SendMsgView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/SendMsgView.kt @@ -72,7 +72,7 @@ fun SendMsgView( } } val showVoiceButton = !nextSendGrpInv && cs.message.isEmpty() && showVoiceRecordIcon && !composeState.value.editing && - cs.liveMessage == null && (cs.preview is ComposePreview.NoPreview || recState.value is RecordingState.Started) + !composeState.value.forwarding && cs.liveMessage == null && (cs.preview is ComposePreview.NoPreview || recState.value is RecordingState.Started) val showDeleteTextButton = rememberSaveable { mutableStateOf(false) } val sendMsgButtonDisabled = !sendMsgEnabled || !cs.sendEnabled() || (!allowedVoiceByPrefs && cs.preview is ComposePreview.VoicePreview) || @@ -157,7 +157,7 @@ fun SendMsgView( fun MenuItems(): List<@Composable () -> Unit> { val menuItems = mutableListOf<@Composable () -> Unit>() - if (cs.liveMessage == null && !cs.editing && !nextSendGrpInv || sendMsgEnabled) { + if (cs.liveMessage == null && !cs.editing && !cs.forwarding && !nextSendGrpInv || sendMsgEnabled) { if ( cs.preview !is ComposePreview.VoicePreview && cs.contextItem is ComposeContextItem.NoContextItem && diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIChatFeatureView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIChatFeatureView.kt index 68a8eb44a4..19cc949543 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIChatFeatureView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIChatFeatureView.kt @@ -95,8 +95,8 @@ private fun featureInfo(ci: ChatItem, chatInfo: ChatInfo): FeatureInfo? = when (ci.content) { is CIContent.RcvChatFeature -> ci.content.feature.toFeatureInfo(ci.content.enabled.iconColor, ci.content.param, ci.content.feature.name) is CIContent.SndChatFeature -> ci.content.feature.toFeatureInfo(ci.content.enabled.iconColor, ci.content.param, ci.content.feature.name) - is CIContent.RcvGroupFeature -> ci.content.groupFeature.toFeatureInfo(ci.content.preference.enabled(ci.content.memberRole_, (chatInfo as ChatInfo.Group).groupInfo.membership).iconColor, ci.content.param, ci.content.groupFeature.name) - is CIContent.SndGroupFeature -> ci.content.groupFeature.toFeatureInfo(ci.content.preference.enabled(ci.content.memberRole_, (chatInfo as ChatInfo.Group).groupInfo.membership).iconColor, ci.content.param, ci.content.groupFeature.name) + is CIContent.RcvGroupFeature -> ci.content.groupFeature.toFeatureInfo(ci.content.preference.enabled(ci.content.memberRole_, (chatInfo as? ChatInfo.Group)?.groupInfo?.membership).iconColor, ci.content.param, ci.content.groupFeature.name) + is CIContent.SndGroupFeature -> ci.content.groupFeature.toFeatureInfo(ci.content.preference.enabled(ci.content.memberRole_, (chatInfo as? ChatInfo.Group)?.groupInfo?.membership).iconColor, ci.content.param, ci.content.groupFeature.name) else -> null } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIFileView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIFileView.kt index f7909eed12..da766d920e 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIFileView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIFileView.kt @@ -59,18 +59,11 @@ fun CIFileView( } } - fun fileSizeValid(): Boolean { - if (file != null) { - return file.fileSize <= getMaxFileSize(file.fileProtocol) - } - return false - } - fun fileAction() { if (file != null) { when { file.fileStatus is CIFileStatus.RcvInvitation -> { - if (fileSizeValid()) { + if (fileSizeValid(file)) { receiveFile(file.fileId) } else { AlertManager.shared.showAlertMsg( @@ -165,7 +158,7 @@ fun CIFileView( is CIFileStatus.SndCancelled -> fileIcon(innerIcon = painterResource(MR.images.ic_close)) is CIFileStatus.SndError -> fileIcon(innerIcon = painterResource(MR.images.ic_close)) is CIFileStatus.RcvInvitation -> - if (fileSizeValid()) + if (fileSizeValid(file)) fileIcon(innerIcon = painterResource(MR.images.ic_arrow_downward), color = MaterialTheme.colors.primary) else fileIcon(innerIcon = painterResource(MR.images.ic_priority_high), color = WarningOrange) @@ -216,6 +209,8 @@ fun CIFileView( } } +fun fileSizeValid(file: CIFile): Boolean = file.fileSize <= getMaxFileSize(file.fileProtocol) + @Composable fun rememberSaveFileLauncher(ciFile: CIFile?): FileChooserLauncher = rememberFileChooserLauncher(false, ciFile) { to: URI? -> diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt index fe70139d91..427f34b2e5 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt @@ -19,6 +19,7 @@ import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.* import chat.simplex.common.model.* +import chat.simplex.common.model.ChatModel.controller import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.chat.* @@ -40,6 +41,7 @@ fun chatEventText(eventText: String, ts: String): AnnotatedString = @Composable fun ChatItemView( + rhId: Long?, cInfo: ChatInfo, cItem: ChatItem, composeState: MutableState, @@ -195,12 +197,16 @@ fun ChatItemView( } val clipboard = LocalClipboardManager.current val cachedRemoteReqs = remember { CIFile.cachedRemoteFileRequests } - val copyAndShareAllowed = when { - cItem.content.text.isNotEmpty() -> true + fun fileForwardingAllowed() = when { cItem.file != null && chatModel.connectedToRemote() && cachedRemoteReqs[cItem.file.fileSource] != false && cItem.file.loaded -> true getLoadedFilePath(cItem.file) != null -> true else -> false } + val copyAndShareAllowed = when { + cItem.content.text.isNotEmpty() -> true + fileForwardingAllowed() -> true + else -> false + } if (copyAndShareAllowed) { ItemAction(stringResource(MR.strings.share_verb), painterResource(MR.images.ic_share), onClick = { @@ -227,8 +233,19 @@ fun ChatItemView( showMenu.value = false }) } - if ((cItem.content.msgContent is MsgContent.MCImage || cItem.content.msgContent is MsgContent.MCVideo || cItem.content.msgContent is MsgContent.MCFile || cItem.content.msgContent is MsgContent.MCVoice) && (getLoadedFilePath(cItem.file) != null || (chatModel.connectedToRemote() && cachedRemoteReqs[cItem.file?.fileSource] != false && cItem.file?.loaded == true))) { + if (cItem.file != null && (getLoadedFilePath(cItem.file) != null || (chatModel.connectedToRemote() && cachedRemoteReqs[cItem.file.fileSource] != false && cItem.file.loaded))) { SaveContentItemAction(cItem, saveFileLauncher, showMenu) + } else if (cItem.file != null && cItem.file.fileStatus is CIFileStatus.RcvInvitation && fileSizeValid(cItem.file)) { + ItemAction(stringResource(MR.strings.download_file), painterResource(MR.images.ic_arrow_downward), onClick = { + withBGApi { + Log.d(TAG, "ChatItemView downloadFileAction") + val user = chatModel.currentUser.value + if (user != null) { + controller.receiveFile(rhId, user, cItem.file.fileId) + } + } + showMenu.value = false + }) } if (cItem.meta.editable && cItem.content.msgContent !is MsgContent.MCVoice && !live) { ItemAction(stringResource(MR.strings.edit_verb), painterResource(MR.images.ic_edit_filled), onClick = { @@ -236,6 +253,16 @@ fun ChatItemView( showMenu.value = false }) } + if (cItem.meta.itemDeleted == null && + (cItem.file == null || fileForwardingAllowed()) && + !cItem.isLiveDummy && !live + ) { + ItemAction(stringResource(MR.strings.forward_chat_item), painterResource(MR.images.ic_forward), onClick = { + chatModel.chatId.value = null + chatModel.sharedContent.value = SharedContent.Forward(cItem, cInfo) + showMenu.value = false + }) + } ItemInfoAction(cInfo, cItem, showItemDetails, showMenu) if (revealed.value) { HideItemAction(revealed, showMenu) @@ -458,11 +485,11 @@ fun ChatItemView( MsgContentItemDropdownMenu() } is CIContent.RcvGroupFeature -> { - CIChatFeatureView(cInfo, cItem, c.groupFeature, c.preference.enabled(c.memberRole_, (cInfo as ChatInfo.Group).groupInfo.membership).iconColor, revealed = revealed, showMenu = showMenu) + CIChatFeatureView(cInfo, cItem, c.groupFeature, c.preference.enabled(c.memberRole_, (cInfo as? ChatInfo.Group)?.groupInfo?.membership).iconColor, revealed = revealed, showMenu = showMenu) MsgContentItemDropdownMenu() } is CIContent.SndGroupFeature -> { - CIChatFeatureView(cInfo, cItem, c.groupFeature, c.preference.enabled(c.memberRole_, (cInfo as ChatInfo.Group).groupInfo.membership).iconColor, revealed = revealed, showMenu = showMenu) + CIChatFeatureView(cInfo, cItem, c.groupFeature, c.preference.enabled(c.memberRole_, (cInfo as? ChatInfo.Group)?.groupInfo?.membership).iconColor, revealed = revealed, showMenu = showMenu) MsgContentItemDropdownMenu() } is CIContent.RcvChatFeatureRejected -> { @@ -782,6 +809,7 @@ expect fun copyItemToClipboard(cItem: ChatItem, clipboard: ClipboardManager) fun PreviewChatItemView() { SimpleXTheme { ChatItemView( + rhId = null, ChatInfo.Direct.sampleData, ChatItem.getSampleData( 1, CIDirection.DirectSnd(), Clock.System.now(), "hello" @@ -818,6 +846,7 @@ fun PreviewChatItemView() { fun PreviewChatItemViewDeletedContent() { SimpleXTheme { ChatItemView( + rhId = null, ChatInfo.Direct.sampleData, ChatItem.getDeletedContentSampleData(), useLinkPreviews = true, diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/FramedItemView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/FramedItemView.kt index 3535c8fe26..a3b70e65ec 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/FramedItemView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/FramedItemView.kt @@ -87,14 +87,14 @@ fun FramedItemView( } @Composable - fun FramedItemHeader(caption: String, italic: Boolean, icon: Painter? = null) { + fun FramedItemHeader(caption: String, italic: Boolean, icon: Painter? = null, pad: Boolean = false) { val sentColor = CurrentColors.collectAsState().value.appColors.sentMessage val receivedColor = CurrentColors.collectAsState().value.appColors.receivedMessage Row( Modifier .background(if (sent) sentColor.toQuote() else receivedColor.toQuote()) .fillMaxWidth() - .padding(start = 8.dp, top = 6.dp, end = 12.dp, bottom = if (ci.quotedItem == null) 6.dp else 0.dp), + .padding(start = 8.dp, top = 6.dp, end = 12.dp, bottom = if (pad || (ci.quotedItem == null && ci.meta.itemForwarded == null)) 6.dp else 0.dp), horizontalArrangement = Arrangement.spacedBy(4.dp), verticalAlignment = Alignment.CenterVertically ) { @@ -223,7 +223,7 @@ fun FramedItemView( if (ci.quotedItem != null) { ciQuoteView(ci.quotedItem) } else if (ci.meta.itemForwarded != null) { - FramedItemHeader(stringResource(MR.strings.forwarded_description), true, painterResource(MR.images.ic_forward)) + FramedItemHeader(ci.meta.itemForwarded.text(chatInfo.chatType), true, painterResource(MR.images.ic_forward), pad = true) } if (ci.file == null && ci.formattedText == null && !ci.meta.isLive && isShortEmoji(ci.content.text)) { Box(Modifier.padding(vertical = 6.dp, horizontal = 12.dp)) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/TextItemView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/TextItemView.kt index 5169d944c8..66061767e5 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/TextItemView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/TextItemView.kt @@ -68,7 +68,7 @@ fun MarkdownText ( senderBold: Boolean = false, modifier: Modifier = Modifier, linkMode: SimplexLinkMode, - inlineContent: Map? = null, + inlineContent: Pair Unit, Map>? = null, onLinkLongClick: (link: String) -> Unit = {} ) { val textLayoutDirection = remember (text) { @@ -119,6 +119,7 @@ fun MarkdownText ( } if (formattedText == null) { val annotatedText = buildAnnotatedString { + inlineContent?.first?.invoke(this) appendSender(this, sender, senderBold) if (text is String) append(text) else if (text is AnnotatedString) append(text) @@ -127,10 +128,11 @@ fun MarkdownText ( } if (meta != null) withStyle(reserveTimestampStyle) { append(reserve) } } - Text(annotatedText, style = style, modifier = modifier, maxLines = maxLines, overflow = overflow, inlineContent = inlineContent ?: mapOf()) + Text(annotatedText, style = style, modifier = modifier, maxLines = maxLines, overflow = overflow, inlineContent = inlineContent?.second ?: mapOf()) } else { var hasAnnotations = false val annotatedText = buildAnnotatedString { + inlineContent?.first?.invoke(this) appendSender(this, sender, senderBold) for ((i, ft) in formattedText.withIndex()) { if (ft.format == null) append(ft.text) @@ -210,7 +212,7 @@ fun MarkdownText ( } ) } else { - Text(annotatedText, style = style, modifier = modifier, maxLines = maxLines, overflow = overflow) + Text(annotatedText, style = style, modifier = modifier, maxLines = maxLines, overflow = overflow, inlineContent = inlineContent?.second ?: mapOf()) } } } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatPreviewView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatPreviewView.kt index 1bb5a78996..336d104d2d 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatPreviewView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatPreviewView.kt @@ -90,7 +90,7 @@ fun ChatPreviewView( Icon(painterResource(MR.images.ic_verified_user), null, Modifier.size(19.dp).padding(end = 3.dp, top = 1.dp), tint = MaterialTheme.colors.secondary) } - fun messageDraft(draft: ComposeState): Pair> { + fun messageDraft(draft: ComposeState): Pair Unit, Map> { fun attachment(): Pair? = when (draft.preview) { is ComposePreview.FilePreview -> MR.images.ic_draft_filled to draft.preview.fileName @@ -100,7 +100,7 @@ fun ChatPreviewView( } val attachment = attachment() - val text = buildAnnotatedString { + val inlineContentBuilder: AnnotatedString.Builder.() -> Unit = { appendInlineContent(id = "editIcon") append(" ") if (attachment != null) { @@ -110,7 +110,6 @@ fun ChatPreviewView( } append(" ") } - append(draft.message) } val inlineContent: Map = mapOf( "editIcon" to InlineTextContent( @@ -124,7 +123,7 @@ fun ChatPreviewView( Icon(if (attachment?.first != null) painterResource(attachment.first) else painterResource(MR.images.ic_edit_note), null, tint = MaterialTheme.colors.secondary) } ) - return text to inlineContent + return inlineContentBuilder to inlineContent } @Composable @@ -169,7 +168,7 @@ fun ChatPreviewView( if (ci != null) { if (showChatPreviews || (chatModelDraftChatId == chat.id && chatModelDraft != null)) { val (text: CharSequence, inlineTextContent) = when { - chatModelDraftChatId == chat.id && chatModelDraft != null -> remember(chatModelDraft) { messageDraft(chatModelDraft) } + chatModelDraftChatId == chat.id && chatModelDraft != null -> remember(chatModelDraft) { chatModelDraft.message to messageDraft(chatModelDraft) } ci.meta.itemDeleted == null -> ci.text to null else -> markedDeletedText(ci.meta) to null } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ShareListView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ShareListView.kt index 04fef25ac2..a36930f5ce 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ShareListView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ShareListView.kt @@ -13,9 +13,8 @@ import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import chat.simplex.common.SettingsViewState +import chat.simplex.common.model.* import chat.simplex.common.views.helpers.* -import chat.simplex.common.model.Chat -import chat.simplex.common.model.ChatModel import chat.simplex.common.platform.* import chat.simplex.res.MR import kotlinx.coroutines.flow.MutableStateFlow @@ -74,7 +73,7 @@ private fun ShareListToolbar(chatModel: ChatModel, userPickerState: MutableState val navButton: @Composable RowScope.() -> Unit = { when { showSearch -> NavigationButtonBack(hideSearchOnBack) - users.size > 1 || chatModel.remoteHosts.isNotEmpty() -> { + (users.size > 1 || chatModel.remoteHosts.isNotEmpty()) && remember { chatModel.sharedContent }.value !is SharedContent.Forward -> { val allRead = users .filter { u -> !u.user.activeUser && !u.user.hidden } .all { u -> u.unreadCount == 0 } @@ -82,7 +81,14 @@ private fun ShareListToolbar(chatModel: ChatModel, userPickerState: MutableState userPickerState.value = AnimatedViewState.VISIBLE } } - else -> NavigationButtonBack(onButtonClicked = { chatModel.sharedContent.value = null }) + else -> NavigationButtonBack(onButtonClicked = { + val sharedContent = chatModel.sharedContent.value + // Drop shared content + chatModel.sharedContent.value = null + if (sharedContent is SharedContent.Forward) { + chatModel.chatId.value = sharedContent.fromChatInfo.id + } + }) } } if (chatModel.chats.size >= 8) { @@ -118,7 +124,8 @@ private fun ShareListToolbar(chatModel: ChatModel, userPickerState: MutableState is SharedContent.Text -> stringResource(MR.strings.share_message) is SharedContent.Media -> stringResource(MR.strings.share_image) is SharedContent.File -> stringResource(MR.strings.share_file) - else -> stringResource(MR.strings.share_message) + is SharedContent.Forward -> stringResource(MR.strings.forward_message) + null -> stringResource(MR.strings.share_message) }, color = MaterialTheme.colors.onBackground, fontWeight = FontWeight.SemiBold, @@ -135,12 +142,14 @@ private fun ShareListToolbar(chatModel: ChatModel, userPickerState: MutableState @Composable private fun ShareList(chatModel: ChatModel, search: String) { - val filter: (Chat) -> Boolean = { chat: Chat -> - chat.chatInfo.chatViewName.lowercase().contains(search.lowercase()) - } val chats by remember(search) { derivedStateOf { - if (search.isEmpty()) chatModel.chats.toList().filter { it.chatInfo.ready } else chatModel.chats.toList().filter { it.chatInfo.ready }.filter(filter) + val sorted = chatModel.chats.toList().sortedByDescending { it.chatInfo is ChatInfo.Local } + if (search.isEmpty()) { + sorted.filter { it.chatInfo.ready } + } else { + sorted.filter { it.chatInfo.ready && it.chatInfo.chatViewName.lowercase().contains(search.lowercase()) } + } } } LazyColumnWithScrollBar( diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Enums.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Enums.kt index 67f82e5279..ee4638445b 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Enums.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Enums.kt @@ -2,6 +2,8 @@ package chat.simplex.common.views.helpers import androidx.compose.runtime.saveable.Saver +import chat.simplex.common.model.ChatInfo +import chat.simplex.common.model.ChatItem import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.serialization.* import kotlinx.serialization.descriptors.* @@ -13,6 +15,7 @@ sealed class SharedContent { data class Text(val text: String): SharedContent() data class Media(val text: String, val uris: List): SharedContent() data class File(val text: String, val uri: URI): SharedContent() + data class Forward(val chatItem: ChatItem, val fromChatInfo: ChatInfo): SharedContent() } enum class AnimatedViewState { diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index b0287ed9fc..7c7cb2c384 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -47,6 +47,8 @@ LIVE moderated forwarded + saved + saved from %s invalid chat invalid data error showing message @@ -268,6 +270,11 @@ History No history In reply to + Saved + Forwarded + Saved from + Forwarded from + Recipient(s) can\'t see who this message is from. Delivery No delivery information Delete @@ -295,6 +302,8 @@ Revoke file? File will be deleted from servers. Revoke + Forward + Download edited @@ -329,6 +338,7 @@ Share message… Share media… Share file… + Forward message… Attach From 925cb393973e6d4f5a8a990e9686bbc511a712a4 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Fri, 19 Apr 2024 23:37:47 +0700 Subject: [PATCH 59/60] desktop: using system sound in screenshare (#4035) Co-authored-by: Evgeny Poberezkin --- .../commonMain/resources/assets/www/call.js | 22 ++++++++++++++++--- packages/simplex-chat-webrtc/src/call.ts | 17 ++++++++++++-- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/apps/multiplatform/common/src/commonMain/resources/assets/www/call.js b/apps/multiplatform/common/src/commonMain/resources/assets/www/call.js index 9e7d29189f..218fe0c660 100644 --- a/apps/multiplatform/common/src/commonMain/resources/assets/www/call.js +++ b/apps/multiplatform/common/src/commonMain/resources/assets/www/call.js @@ -486,8 +486,22 @@ const processCommand = (function () { } return; } - for (const t of call.localStream.getTracks()) - t.stop(); + if (!call.screenShareEnabled) { + for (const t of call.localStream.getTracks()) + t.stop(); + } + else { + // Don't stop audio track if switching to screenshare + for (const t of call.localStream.getVideoTracks()) + t.stop(); + // Replace new track from screenshare with old track from recording device + for (const t of localStream.getAudioTracks()) { + t.stop(); + localStream.removeTrack(t); + } + for (const t of call.localStream.getAudioTracks()) + localStream.addTrack(t); + } call.localCamera = camera; const audioTracks = localStream.getAudioTracks(); const videoTracks = localStream.getVideoTracks(); @@ -547,7 +561,9 @@ const processCommand = (function () { //}, //aspectRatio: 1.33, }, - audio: true, + audio: false, + // This works with Chrome, Edge, Opera, but not with Firefox and Safari + // systemAudio: "include" }; return navigator.mediaDevices.getDisplayMedia(constraints); } diff --git a/packages/simplex-chat-webrtc/src/call.ts b/packages/simplex-chat-webrtc/src/call.ts index 41241e22c2..e7788ac723 100644 --- a/packages/simplex-chat-webrtc/src/call.ts +++ b/packages/simplex-chat-webrtc/src/call.ts @@ -689,7 +689,18 @@ const processCommand = (function () { } return } - for (const t of call.localStream.getTracks()) t.stop() + if (!call.screenShareEnabled) { + for (const t of call.localStream.getTracks()) t.stop() + } else { + // Don't stop audio track if switching to screenshare + for (const t of call.localStream.getVideoTracks()) t.stop() + // Replace new track from screenshare with old track from recording device + for (const t of localStream.getAudioTracks()) { + t.stop() + localStream.removeTrack(t) + } + for (const t of call.localStream.getAudioTracks()) localStream.addTrack(t) + } call.localCamera = camera const audioTracks = localStream.getAudioTracks() @@ -755,7 +766,9 @@ const processCommand = (function () { //}, //aspectRatio: 1.33, }, - audio: true, + audio: false, + // This works with Chrome, Edge, Opera, but not with Firefox and Safari + // systemAudio: "include" } return navigator.mediaDevices.getDisplayMedia(constraints) } From c8c81a840beb2a661b54c6a59765a154bf0fa66d Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Fri, 19 Apr 2024 21:17:22 +0100 Subject: [PATCH 60/60] core: revert build to use two branches (#4052) * Revert "scripts: ghc version update (#4010)" This reverts commit 35b7f2cb1c013470d44f1bf42eb2c59eb51b7a55. * Revert "Force include hs_init_with_rtsopts (#4028)" This reverts commit 76a33a374312a65750b2d016e386bb2b2bf3d87a. * Revert "core: fix nix config (#4003)" This reverts commit f8e6a78a3b51b57ae8d60f71fa7c2d634df58992. * Revert "ci: build armv7a with 8.10.7 in the main branches (master, stable) (#3733)" This reverts commit 0d7a32877f77367ab5f57d43bc8b3ede0a9c2c44. --- .github/workflows/build.yml | 8 +-- Dockerfile | 2 +- docs/CLI.md | 2 +- docs/CONTRIBUTING.md | 20 +++---- flake.lock | 95 +++++++----------------------- flake.nix | 22 ++----- scripts/desktop/build-lib-linux.sh | 2 +- scripts/desktop/build-lib-mac.sh | 2 +- 8 files changed, 44 insertions(+), 109 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0b11716605..a5a07a8722 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -55,22 +55,22 @@ jobs: ghc: "8.10.7" cache_path: ~/.cabal/store - os: ubuntu-20.04 - ghc: "9.6.4" + ghc: "9.6.3" cache_path: ~/.cabal/store asset_name: simplex-chat-ubuntu-20_04-x86-64 desktop_asset_name: simplex-desktop-ubuntu-20_04-x86_64.deb - os: ubuntu-22.04 - ghc: "9.6.4" + ghc: "9.6.3" cache_path: ~/.cabal/store asset_name: simplex-chat-ubuntu-22_04-x86-64 desktop_asset_name: simplex-desktop-ubuntu-22_04-x86_64.deb - os: macos-latest - ghc: "9.6.4" + ghc: "9.6.3" cache_path: ~/.cabal/store asset_name: simplex-chat-macos-x86-64 desktop_asset_name: simplex-desktop-macos-x86_64.dmg - os: windows-latest - ghc: "9.6.4" + ghc: "9.6.3" cache_path: C:/cabal asset_name: simplex-chat-windows-x86-64 desktop_asset_name: simplex-desktop-windows-x86_64.msi diff --git a/Dockerfile b/Dockerfile index 29f3381726..6c60195f97 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,7 +8,7 @@ FROM ubuntu:${TAG} AS build RUN apt-get update && apt-get install -y curl git build-essential libgmp3-dev zlib1g-dev llvm-12 llvm-12-dev libnuma-dev libssl-dev # Specify bootstrap Haskell versions -ENV BOOTSTRAP_HASKELL_GHC_VERSION=9.6.4 +ENV BOOTSTRAP_HASKELL_GHC_VERSION=9.6.3 ENV BOOTSTRAP_HASKELL_CABAL_VERSION=3.10.1.0 # Install ghcup diff --git a/docs/CLI.md b/docs/CLI.md index cc74d29db9..d4f799c7af 100644 --- a/docs/CLI.md +++ b/docs/CLI.md @@ -102,7 +102,7 @@ DOCKER_BUILDKIT=1 docker build --output ~/.local/bin . #### In any OS -1. Install [Haskell GHCup](https://www.haskell.org/ghcup/), GHC 9.6.4 and cabal 3.10.1.0: +1. Install [Haskell GHCup](https://www.haskell.org/ghcup/), GHC 9.6.3 and cabal 3.10.1.0: ```shell curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index d6c11daf7f..bc013cd7eb 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -30,13 +30,13 @@ You will have to add `/opt/homebrew/opt/openssl@1.1/bin` to your PATH in order t **In simplex-chat repo** -- `stable` - stable release of the apps, can be used for updates to the previous stable release (GHC 9.6.4). +- `stable` - stable release of the apps, can be used for updates to the previous stable release (GHC 9.6.3). - `stable-android` - used to build stable Android core library with Nix (GHC 8.10.7) - only for Android armv7a. - `stable-ios` - used to build stable iOS core library with Nix (GHC 8.10.7) – this branch should be the same as `stable-android` except Nix configuration files. Deprecated. -- `master` - branch for beta version releases (GHC 9.6.4). +- `master` - branch for beta version releases (GHC 9.6.3). - `master-ghc8107` - branch for beta version releases (GHC 8.10.7). Deprecated. @@ -50,7 +50,7 @@ You will have to add `/opt/homebrew/opt/openssl@1.1/bin` to your PATH in order t **In simplexmq repo** -- `master` - uses GHC 9.6.4 its commit should be used in `master` branch of simplex-chat repo. +- `master` - uses GHC 9.6.3 its commit should be used in `master` branch of simplex-chat repo. - `master-ghc8107` - its commit should be used in `master-android` (and `master-ios`) branch of simplex-chat repo. Deprecated. @@ -77,28 +77,28 @@ You will have to add `/opt/homebrew/opt/openssl@1.1/bin` to your PATH in order t 7. Independently, `master` branch of simplexmq repo should be merged to `stable` branch on stable releases. -## Differences between GHC 8.10.7 and GHC 9.6.4 +## Differences between GHC 8.10.7 and GHC 9.6.3 1. The main difference is related to `DuplicateRecordFields` extension. -It is no longer possible in GHC 9.6.4 to specify type when using selectors, instead OverloadedRecordDot extension and syntax are used that need to be removed in GHC 8.10.7: +It is no longer possible in GHC 9.6.3 to specify type when using selectors, instead OverloadedRecordDot extension and syntax are used that need to be removed in GHC 8.10.7: ```haskell {-# LANGUAGE DuplicateRecordFields #-} --- use this in GHC 9.6.4 when needed +-- use this in GHC 9.6.3 when needed {-# LANGUAGE OverloadedRecordDot #-} --- GHC 9.6.4 syntax +-- GHC 9.6.3 syntax let x = record.field --- GHC 8.10.7 syntax absent in GHC 9.6.4 +-- GHC 8.10.7 syntax removed in GHC 9.6.3 let x = field (record :: Record) ``` It is still possible to specify type when using record update syntax, use this pragma to suppress compiler warning: ```haskell --- use this in GHC 9.6.4 when needed +-- use this in GHC 9.6.3 when needed {-# OPTIONS_GHC -fno-warn-ambiguous-fields #-} let r' = (record :: Record) {field = value} @@ -107,7 +107,7 @@ let r' = (record :: Record) {field = value} 2. Most monad functions now have to be imported from `Control.Monad`, and not from specific monad modules (e.g. `Control.Monad.Except`). ```haskell --- use this in GHC 9.6.4 when needed +-- use this in GHC 9.6.3 when needed import Control.Monad ``` diff --git a/flake.lock b/flake.lock index 7bd372b5c6..a11e01683e 100644 --- a/flake.lock +++ b/flake.lock @@ -175,11 +175,11 @@ "ghc99": { "flake": false, "locked": { - "lastModified": 1701580282, - "narHash": "sha256-drA01r3JrXnkKyzI+owMZGxX0JameMzjK0W5jJE/+V4=", + "lastModified": 1697054644, + "narHash": "sha256-kKarOuXUaAH3QWv7ASx+gGFMHaHKe0pK5Zu37ky2AL4=", "ref": "refs/heads/master", - "rev": "f5eb0f2982e9cf27515e892c4bdf634bcfb28459", - "revCount": 62197, + "rev": "f383a242c76f90bcca8a4d7ee001dcb49c172a9a", + "revCount": 62040, "submodules": true, "type": "git", "url": "https://gitlab.haskell.org/ghc/ghc" @@ -225,8 +225,6 @@ "hls-2.2": "hls-2.2", "hls-2.3": "hls-2.3", "hls-2.4": "hls-2.4", - "hls-2.5": "hls-2.5", - "hls-2.6": "hls-2.6", "hpc-coveralls": "hpc-coveralls", "hydra": "hydra", "iserv-proxy": "iserv-proxy", @@ -240,17 +238,16 @@ "nixpkgs-2205": "nixpkgs-2205", "nixpkgs-2211": "nixpkgs-2211", "nixpkgs-2305": "nixpkgs-2305", - "nixpkgs-2311": "nixpkgs-2311", "nixpkgs-unstable": "nixpkgs-unstable", "old-ghc-nix": "old-ghc-nix", "stackage": "stackage" }, "locked": { - "lastModified": 1705833500, - "narHash": "sha256-rUIr6JNbCedt1g4gVYVvE9t0oFU6FUspCA0DS5cA8Bg=", + "lastModified": 1701163700, + "narHash": "sha256-sOrewUS3LnzV09nGr7+3R6Q6zsgU4smJc61QsHq+4DE=", "owner": "input-output-hk", "repo": "haskell.nix", - "rev": "d0c35e75cbbc6858770af42ac32b0b85495fbd71", + "rev": "2808bfe3e62e9eb4ee8974cd623a00e1611f302b", "type": "github" }, "original": { @@ -331,50 +328,16 @@ "hls-2.4": { "flake": false, "locked": { - "lastModified": 1699862708, - "narHash": "sha256-YHXSkdz53zd0fYGIYOgLt6HrA0eaRJi9mXVqDgmvrjk=", + "lastModified": 1696939266, + "narHash": "sha256-VOMf5+kyOeOmfXTHlv4LNFJuDGa7G3pDnOxtzYR40IU=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "54507ef7e85fa8e9d0eb9a669832a3287ffccd57", + "rev": "362fdd1293efb4b82410b676ab1273479f6d17ee", "type": "github" }, "original": { "owner": "haskell", - "ref": "2.4.0.1", - "repo": "haskell-language-server", - "type": "github" - } - }, - "hls-2.5": { - "flake": false, - "locked": { - "lastModified": 1701080174, - "narHash": "sha256-fyiR9TaHGJIIR0UmcCb73Xv9TJq3ht2ioxQ2mT7kVdc=", - "owner": "haskell", - "repo": "haskell-language-server", - "rev": "27f8c3d3892e38edaef5bea3870161815c4d014c", - "type": "github" - }, - "original": { - "owner": "haskell", - "ref": "2.5.0.0", - "repo": "haskell-language-server", - "type": "github" - } - }, - "hls-2.6": { - "flake": false, - "locked": { - "lastModified": 1705325287, - "narHash": "sha256-+P87oLdlPyMw8Mgoul7HMWdEvWP/fNlo8jyNtwME8E8=", - "owner": "haskell", - "repo": "haskell-language-server", - "rev": "6e0b342fa0327e628610f2711f8c3e4eaaa08b1e", - "type": "github" - }, - "original": { - "owner": "haskell", - "ref": "2.6.0.0", + "ref": "2.4.0.0", "repo": "haskell-language-server", "type": "github" } @@ -589,11 +552,11 @@ }, "nixpkgs-2305": { "locked": { - "lastModified": 1701362232, - "narHash": "sha256-GVdzxL0lhEadqs3hfRLuj+L1OJFGiL/L7gCcelgBlsw=", + "lastModified": 1695416179, + "narHash": "sha256-610o1+pwbSu+QuF3GE0NU5xQdTHM3t9wyYhB9l94Cd8=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d2332963662edffacfddfad59ff4f709dde80ffe", + "rev": "715d72e967ec1dd5ecc71290ee072bcaf5181ed6", "type": "github" }, "original": { @@ -603,22 +566,6 @@ "type": "github" } }, - "nixpkgs-2311": { - "locked": { - "lastModified": 1701386440, - "narHash": "sha256-xI0uQ9E7JbmEy/v8kR9ZQan6389rHug+zOtZeZFiDJk=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "293822e55ec1872f715a66d0eda9e592dc14419f", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-23.11-darwin", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs-lib": { "locked": { "dir": "lib", @@ -655,17 +602,17 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1694822471, - "narHash": "sha256-6fSDCj++lZVMZlyqOe9SIOL8tYSBz1bI8acwovRwoX8=", + "lastModified": 1695318763, + "narHash": "sha256-FHVPDRP2AfvsxAdc+AsgFJevMz5VBmnZglFUMlxBkcY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "47585496bcb13fb72e4a90daeea2f434e2501998", + "rev": "e12483116b3b51a185a33a272bf351e357ba9a99", "type": "github" }, "original": { "owner": "NixOS", + "ref": "nixpkgs-unstable", "repo": "nixpkgs", - "rev": "47585496bcb13fb72e4a90daeea2f434e2501998", "type": "github" } }, @@ -717,11 +664,11 @@ "stackage": { "flake": false, "locked": { - "lastModified": 1705709369, - "narHash": "sha256-HWgwM8v0g6ZBkRVCStsPaMUDf26WDOGV0q+AxyGlcBQ=", + "lastModified": 1699834215, + "narHash": "sha256-g/JKy0BCvJaxPuYDl3QVc4OY8cFEomgG+hW/eEV470M=", "owner": "input-output-hk", "repo": "stackage.nix", - "rev": "f7e9bff9f7582d06c4237d183dafaccc33cfa5d4", + "rev": "47aacd04abcce6bad57f43cbbbd133538380248e", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 420f4c70df..91cf43d0fe 100644 --- a/flake.nix +++ b/flake.nix @@ -29,8 +29,8 @@ }; in # `appendOverlays` with a singleton is identical to `extend`. let pkgs = haskellNix.legacyPackages.${system}.appendOverlays [android26]; in - let drv' = { extra-modules, pkgs', compiler-nix-name, ... }: pkgs'.haskell-nix.project { - inherit compiler-nix-name; + let drv' = { extra-modules, pkgs', ... }: pkgs'.haskell-nix.project { + compiler-nix-name = "ghc963"; index-state = "2023-12-12T00:00:00Z"; # We need this, to specify we want the cabal project. # If the stack.yaml was dropped, this would not be necessary. @@ -51,7 +51,7 @@ })] ++ extra-modules; }; in # by defualt we don't need to pass extra-modules. - let drv = pkgs': drv' { extra-modules = []; inherit pkgs'; compiler-nix-name = "ghc964"; }; in + let drv = pkgs': drv' { extra-modules = []; inherit pkgs'; }; in # This will package up all *.a in $out into a pkg.zip that can # be downloaded from hydra. let withHydraLibPkg = pkg: pkg.overrideAttrs (old: { @@ -141,7 +141,6 @@ "${pkgs.pkgsCross.musl64.hostPlatform.system}-static:exe:simplex-chat" = (drv pkgs.pkgsCross.musl64).simplex-chat.components.exes.simplex-chat; # STATIC i686-linux "${pkgs.pkgsCross.musl32.hostPlatform.system}-static:exe:simplex-chat" = (drv' { - compiler-nix-name = "ghc810"; pkgs' = pkgs.pkgsCross.musl32; extra-modules = [{ # 32 bit patches @@ -155,7 +154,6 @@ }).simplex-chat.components.exes.simplex-chat; # WINDOWS x86_64-mingwW64 "${pkgs.pkgsCross.mingwW64.hostPlatform.system}:exe:simplex-chat" = (drv' { - compiler-nix-name = "ghc964"; pkgs' = pkgs.pkgsCross.mingwW64; extra-modules = [{ packages.direct-sqlcipher.flags.openssl = true; @@ -188,7 +186,6 @@ ''; }; "${pkgs.pkgsCross.mingwW64.hostPlatform.system}:lib:simplex-chat" = (drv' rec { - compiler-nix-name = "ghc964"; pkgs' = pkgs.pkgsCross.mingwW64; extra-modules = [{ packages.direct-sqlcipher.flags.openssl = true; @@ -265,7 +262,7 @@ # STATIC aarch64-linux "${pkgs.pkgsCross.aarch64-multiplatform-musl.hostPlatform.system}-static:exe:simplex-chat" = (drv pkgs.pkgsCross.aarch64-multiplatform-musl).simplex-chat.components.exes.simplex-chat; - "armv7a-android:lib:support" = (drv' { extra-modules = []; pkgs' = android32Pkgs; compiler-nix-name = "ghc8107"; } ).android-support.components.library.override (p: { + "armv7a-android:lib:support" = (drv android32Pkgs).android-support.components.library.override (p: { smallAddressSpace = true; # we won't want -dyamic (see aarch64-android:lib:simplex-chat) enableShared = false; @@ -328,7 +325,6 @@ ''; }); "armv7a-android:lib:simplex-chat" = (drv' { - compiler-nix-name = "ghc8107"; pkgs' = android32Pkgs; extra-modules = [{ packages.text.flags.simdutf = false; @@ -344,7 +340,7 @@ ]; # 32 bit patches packages.basement.patches = [ - # ./scripts/nix/basement-pr-573.patch + ./scripts/nix/basement-pr-573.patch ]; packages.memory.patches = [ ./scripts/nix/memory-pr-99.patch @@ -367,7 +363,6 @@ "-threaded" # "-debug" "-optl-lffi" - "-optl-lHSrts_thr" ] # This is fairly idiotic. LLD will strip out foreign exported # symbols (a GHC bug? Codegen bug?). So we need to pass `-u ` @@ -392,8 +387,6 @@ "chat_valid_name" "chat_json_length" "chat_write_file" - # We also need to keep the rts init method around. - "hs_init_with_rtsopts" ]; postInstall = '' set -x @@ -440,7 +433,6 @@ ''; }); "aarch64-android:lib:simplex-chat" = (drv' { - compiler-nix-name = "ghc964"; pkgs' = androidPkgs; extra-modules = [{ packages.text.flags.simdutf = false; @@ -549,7 +541,6 @@ "aarch64-darwin" = { # aarch64-darwin iOS build (to be patched with mac2ios) "aarch64-darwin-ios:lib:simplex-chat" = (drv' { - compiler-nix-name = "ghc964"; pkgs' = pkgs; extra-modules = [{ packages.simplex-chat.flags.swift = true; @@ -566,7 +557,6 @@ ); # aarch64-darwin build with tagged JSON format (for Mac & Flutter) "aarch64-darwin:lib:simplex-chat" = (drv' { - compiler-nix-name = "ghc964"; pkgs' = pkgs; extra-modules = [{ packages.direct-sqlcipher.flags.commoncrypto = true; @@ -582,7 +572,6 @@ "x86_64-darwin" = { # x86_64-darwin iOS simulator build (to be patched with mac2ios) "x86_64-darwin-ios:lib:simplex-chat" = (drv' { - compiler-nix-name = "ghc964"; pkgs' = pkgs; extra-modules = [{ packages.simplex-chat.flags.swift = true; @@ -598,7 +587,6 @@ ); # x86_64-darwin build with tagged JSON format (for Mac & Flutter iOS simulator) "x86_64-darwin:lib:simplex-chat" = (drv' { - compiler-nix-name = "ghc964"; pkgs' = pkgs; extra-modules = [{ packages.direct-sqlcipher.flags.commoncrypto = true; diff --git a/scripts/desktop/build-lib-linux.sh b/scripts/desktop/build-lib-linux.sh index 528e7b9f91..c27b672e40 100755 --- a/scripts/desktop/build-lib-linux.sh +++ b/scripts/desktop/build-lib-linux.sh @@ -8,7 +8,7 @@ function readlink() { OS=linux ARCH=${1:-`uname -a | rev | cut -d' ' -f2 | rev`} -GHC_VERSION=9.6.4 +GHC_VERSION=9.6.3 if [ "$ARCH" == "aarch64" ]; then COMPOSE_ARCH=arm64 diff --git a/scripts/desktop/build-lib-mac.sh b/scripts/desktop/build-lib-mac.sh index 12067a9b53..2b0fd5376f 100755 --- a/scripts/desktop/build-lib-mac.sh +++ b/scripts/desktop/build-lib-mac.sh @@ -5,7 +5,7 @@ set -e OS=mac ARCH="${1:-`uname -a | rev | cut -d' ' -f1 | rev`}" COMPOSE_ARCH=$ARCH -GHC_VERSION=9.6.4 +GHC_VERSION=9.6.3 if [ "$ARCH" == "arm64" ]; then ARCH=aarch64