From 0fe949e225a7c80d615015a01ec59f63b6505842 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Thu, 25 Apr 2024 15:51:23 +0100 Subject: [PATCH 1/3] 5.7-beta.3: ios 210, android 199, desktop 40 --- apps/ios/SimpleX.xcodeproj/project.pbxproj | 52 +++++++++++----------- apps/multiplatform/gradle.properties | 8 ++-- scripts/android/prepare.sh | 2 +- 3 files changed, 31 insertions(+), 31 deletions(-) diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index 2830c57057..110c6ccd40 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -29,11 +29,11 @@ 5C116CDC27AABE0400E66D01 /* ContactRequestView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C116CDB27AABE0400E66D01 /* ContactRequestView.swift */; }; 5C13730B28156D2700F43030 /* ContactConnectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C13730A28156D2700F43030 /* ContactConnectionView.swift */; }; 5C1A4C1E27A715B700EAD5AD /* ChatItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C1A4C1D27A715B700EAD5AD /* ChatItemView.swift */; }; - 5C2217A22BD7132100A8B0E7 /* libHSsimplex-chat-5.7.0.3-1gdwVzNNUlPBAUpdkOuWsD-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C22179D2BD7132100A8B0E7 /* libHSsimplex-chat-5.7.0.3-1gdwVzNNUlPBAUpdkOuWsD-ghc9.6.3.a */; }; - 5C2217A32BD7132100A8B0E7 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C22179E2BD7132100A8B0E7 /* libgmpxx.a */; }; - 5C2217A42BD7132100A8B0E7 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C22179F2BD7132100A8B0E7 /* libffi.a */; }; - 5C2217A52BD7132100A8B0E7 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C2217A02BD7132100A8B0E7 /* libgmp.a */; }; - 5C2217A62BD7132100A8B0E7 /* libHSsimplex-chat-5.7.0.3-1gdwVzNNUlPBAUpdkOuWsD.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C2217A12BD7132100A8B0E7 /* libHSsimplex-chat-5.7.0.3-1gdwVzNNUlPBAUpdkOuWsD.a */; }; + 5C2217B62BDA9B7000A8B0E7 /* libHSsimplex-chat-5.7.0.4-9w48ibH0KftLfWfQjuLznV-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C2217B12BDA9B7000A8B0E7 /* libHSsimplex-chat-5.7.0.4-9w48ibH0KftLfWfQjuLznV-ghc9.6.3.a */; }; + 5C2217B72BDA9B7000A8B0E7 /* libHSsimplex-chat-5.7.0.4-9w48ibH0KftLfWfQjuLznV.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C2217B22BDA9B7000A8B0E7 /* libHSsimplex-chat-5.7.0.4-9w48ibH0KftLfWfQjuLznV.a */; }; + 5C2217B82BDA9B7000A8B0E7 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C2217B32BDA9B7000A8B0E7 /* libgmp.a */; }; + 5C2217B92BDA9B7000A8B0E7 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C2217B42BDA9B7000A8B0E7 /* libgmpxx.a */; }; + 5C2217BA2BDA9B7000A8B0E7 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C2217B52BDA9B7000A8B0E7 /* libffi.a */; }; 5C2E260727A2941F00F70299 /* SimpleXAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C2E260627A2941F00F70299 /* SimpleXAPI.swift */; }; 5C2E260B27A30CFA00F70299 /* ChatListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C2E260A27A30CFA00F70299 /* ChatListView.swift */; }; 5C2E260F27A30FDC00F70299 /* ChatView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C2E260E27A30FDC00F70299 /* ChatView.swift */; }; @@ -279,11 +279,11 @@ 5C13730A28156D2700F43030 /* ContactConnectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactConnectionView.swift; sourceTree = ""; }; 5C13730C2815740A00F43030 /* DebugJSON.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; path = DebugJSON.playground; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 5C1A4C1D27A715B700EAD5AD /* ChatItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatItemView.swift; sourceTree = ""; }; - 5C22179D2BD7132100A8B0E7 /* libHSsimplex-chat-5.7.0.3-1gdwVzNNUlPBAUpdkOuWsD-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.7.0.3-1gdwVzNNUlPBAUpdkOuWsD-ghc9.6.3.a"; sourceTree = ""; }; - 5C22179E2BD7132100A8B0E7 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; }; - 5C22179F2BD7132100A8B0E7 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; }; - 5C2217A02BD7132100A8B0E7 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; }; - 5C2217A12BD7132100A8B0E7 /* libHSsimplex-chat-5.7.0.3-1gdwVzNNUlPBAUpdkOuWsD.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.7.0.3-1gdwVzNNUlPBAUpdkOuWsD.a"; sourceTree = ""; }; + 5C2217B12BDA9B7000A8B0E7 /* libHSsimplex-chat-5.7.0.4-9w48ibH0KftLfWfQjuLznV-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.7.0.4-9w48ibH0KftLfWfQjuLznV-ghc9.6.3.a"; sourceTree = ""; }; + 5C2217B22BDA9B7000A8B0E7 /* libHSsimplex-chat-5.7.0.4-9w48ibH0KftLfWfQjuLznV.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.7.0.4-9w48ibH0KftLfWfQjuLznV.a"; sourceTree = ""; }; + 5C2217B32BDA9B7000A8B0E7 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; }; + 5C2217B42BDA9B7000A8B0E7 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; }; + 5C2217B52BDA9B7000A8B0E7 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; }; 5C245F3C2B501E98001CC39F /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = ""; }; 5C245F3D2B501F13001CC39F /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = "tr.lproj/SimpleX--iOS--InfoPlist.strings"; sourceTree = ""; }; 5C245F3E2B501F13001CC39F /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -525,13 +525,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5C2217A32BD7132100A8B0E7 /* libgmpxx.a in Frameworks */, + 5C2217B92BDA9B7000A8B0E7 /* libgmpxx.a in Frameworks */, 5CE2BA93284534B000EC33A6 /* libiconv.tbd in Frameworks */, - 5C2217A22BD7132100A8B0E7 /* libHSsimplex-chat-5.7.0.3-1gdwVzNNUlPBAUpdkOuWsD-ghc9.6.3.a in Frameworks */, - 5C2217A42BD7132100A8B0E7 /* libffi.a in Frameworks */, - 5C2217A52BD7132100A8B0E7 /* libgmp.a in Frameworks */, - 5C2217A62BD7132100A8B0E7 /* libHSsimplex-chat-5.7.0.3-1gdwVzNNUlPBAUpdkOuWsD.a in Frameworks */, + 5C2217B82BDA9B7000A8B0E7 /* libgmp.a in Frameworks */, + 5C2217B62BDA9B7000A8B0E7 /* libHSsimplex-chat-5.7.0.4-9w48ibH0KftLfWfQjuLznV-ghc9.6.3.a in Frameworks */, + 5C2217BA2BDA9B7000A8B0E7 /* libffi.a in Frameworks */, 5CE2BA94284534BB00EC33A6 /* libz.tbd in Frameworks */, + 5C2217B72BDA9B7000A8B0E7 /* libHSsimplex-chat-5.7.0.4-9w48ibH0KftLfWfQjuLznV.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -595,11 +595,11 @@ 5C764E5C279C70B7000C6508 /* Libraries */ = { isa = PBXGroup; children = ( - 5C22179F2BD7132100A8B0E7 /* libffi.a */, - 5C2217A02BD7132100A8B0E7 /* libgmp.a */, - 5C22179E2BD7132100A8B0E7 /* libgmpxx.a */, - 5C22179D2BD7132100A8B0E7 /* libHSsimplex-chat-5.7.0.3-1gdwVzNNUlPBAUpdkOuWsD-ghc9.6.3.a */, - 5C2217A12BD7132100A8B0E7 /* libHSsimplex-chat-5.7.0.3-1gdwVzNNUlPBAUpdkOuWsD.a */, + 5C2217B52BDA9B7000A8B0E7 /* libffi.a */, + 5C2217B32BDA9B7000A8B0E7 /* libgmp.a */, + 5C2217B42BDA9B7000A8B0E7 /* libgmpxx.a */, + 5C2217B12BDA9B7000A8B0E7 /* libHSsimplex-chat-5.7.0.4-9w48ibH0KftLfWfQjuLznV-ghc9.6.3.a */, + 5C2217B22BDA9B7000A8B0E7 /* libHSsimplex-chat-5.7.0.4-9w48ibH0KftLfWfQjuLznV.a */, ); path = Libraries; sourceTree = ""; @@ -1544,7 +1544,7 @@ CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 209; + CURRENT_PROJECT_VERSION = 210; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; @@ -1593,7 +1593,7 @@ CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 209; + CURRENT_PROJECT_VERSION = 210; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; @@ -1679,7 +1679,7 @@ CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 209; + CURRENT_PROJECT_VERSION = 210; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; GCC_OPTIMIZATION_LEVEL = s; @@ -1716,7 +1716,7 @@ CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 209; + CURRENT_PROJECT_VERSION = 210; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; ENABLE_CODE_COVERAGE = NO; @@ -1753,7 +1753,7 @@ CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES; CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 209; + CURRENT_PROJECT_VERSION = 210; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; DYLIB_COMPATIBILITY_VERSION = 1; @@ -1804,7 +1804,7 @@ CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES; CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 209; + CURRENT_PROJECT_VERSION = 210; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; DYLIB_COMPATIBILITY_VERSION = 1; diff --git a/apps/multiplatform/gradle.properties b/apps/multiplatform/gradle.properties index a0b0b8839a..f9682ca089 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.7-beta.2 -android.version_code=198 +android.version_name=5.7-beta.3 +android.version_code=199 -desktop.version_name=5.7-beta.2 -desktop.version_code=39 +desktop.version_name=5.7-beta.3 +desktop.version_code=40 kotlin.version=1.9.23 gradle.plugin.version=8.2.0 diff --git a/scripts/android/prepare.sh b/scripts/android/prepare.sh index 683d9cbf87..88f62af34a 100755 --- a/scripts/android/prepare.sh +++ b/scripts/android/prepare.sh @@ -3,7 +3,7 @@ # libsimplex.so and libsupport.so binaries should be in ~/Downloads folder in their directories based on archive name mkdir -p ./apps/multiplatform/common/src/commonMain/cpp/android/libs/arm64-v8a/ rm ./apps/multiplatform/common/src/commonMain/cpp/android/libs/arm64-v8a/* -unzip -o ~/Downloads/pkg-aarch64-android-libsupport.zip -d ./apps/multiplatform/common/src/commonMain/cpp/android/libs/arm64-v8a +unzip -o ~/Downloads/pkg-aarch64-android-libsupport.zip -d ./apps/multiplatform/common/src/commonMain/cpp/android/libs/arm64-v8a/ unzip -o ~/Downloads/pkg-aarch64-android-libsimplex.zip -d ./apps/multiplatform/common/src/commonMain/cpp/android/libs/arm64-v8a/ mkdir -p ./apps/multiplatform/common/src/commonMain/cpp/android/libs/armeabi-v7a/ From 957eda8a7838a505e1a23b5677abae0ad66b9057 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Thu, 25 Apr 2024 22:09:06 +0100 Subject: [PATCH 2/3] ui: variable profile image size (#4094) * ui: variable profile image size * changes * fix * clean up --------- Co-authored-by: Avently <7953703+avently@users.noreply.github.com> --- .../Shared/Views/Helpers/ProfileImage.swift | 20 ++++--- .../common/views/helpers/ChatInfoImage.kt | 52 ++++++++----------- 2 files changed, 37 insertions(+), 35 deletions(-) diff --git a/apps/ios/Shared/Views/Helpers/ProfileImage.swift b/apps/ios/Shared/Views/Helpers/ProfileImage.swift index 96f0152d9e..6b8439504a 100644 --- a/apps/ios/Shared/Views/Helpers/ProfileImage.swift +++ b/apps/ios/Shared/Views/Helpers/ProfileImage.swift @@ -32,14 +32,22 @@ struct ProfileImage: View { } } +private let squareToCircleRatio = 0.935 + +private let radiusFactor = (1 - squareToCircleRatio) / 50 + @ViewBuilder func clipProfileImage(_ img: Image, size: CGFloat, radius: Double) -> some View { - let v = img.resizable().frame(width: size, height: size) - if radius <= 0 { - v.clipShape(Rectangle()) - } else if radius >= 50 { - v.clipShape(Circle()) + let v = img.resizable() + if radius >= 50 { + v.frame(width: size, height: size).clipShape(Circle()) + } else if radius <= 0 { + let sz = size * squareToCircleRatio + v.frame(width: sz, height: sz).padding((size - sz) / 2) } else { - v.clipShape(RoundedRectangle(cornerRadius: size * radius / 100, style: .continuous)) + let sz = size * (squareToCircleRatio + radius * radiusFactor) + v.frame(width: sz, height: sz) + .clipShape(RoundedRectangle(cornerRadius: sz * radius / 100, style: .continuous)) + .padding((size - sz) / 2) } } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatInfoImage.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatInfoImage.kt index 72764f215e..34d916781b 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatInfoImage.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatInfoImage.kt @@ -18,11 +18,11 @@ import androidx.compose.ui.unit.* import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import chat.simplex.common.model.ChatInfo -import chat.simplex.common.platform.appPreferences -import chat.simplex.common.platform.base64ToBitmap +import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* import chat.simplex.res.MR import dev.icerock.moko.resources.ImageResource +import kotlin.math.max @Composable fun ChatInfoImage(chatInfo: ChatInfo, size: Dp, iconColor: Color = MaterialTheme.colors.secondaryVariant) { @@ -81,7 +81,7 @@ fun ProfileImage( imageBitmap, stringResource(MR.strings.image_descr_profile_image), contentScale = ContentScale.Crop, - modifier = Modifier.size(size).padding(size / 12).clip(ProfileIconShape()) + modifier = ProfileIconModifier(size) ) } } @@ -93,17 +93,31 @@ fun ProfileImage(size: Dp, image: ImageResource) { painterResource(image), stringResource(MR.strings.image_descr_profile_image), contentScale = ContentScale.Crop, - modifier = Modifier.size(size).padding(size / 12).clip(ProfileIconShape()) + modifier = ProfileIconModifier(size) ) } +private const val squareToCircleRatio = 0.935f + +private const val radiusFactor = (1 - squareToCircleRatio) / 50 + @Composable -fun ProfileIconShape(): Shape { +fun ProfileIconModifier(size: Dp, padding: Boolean = true): Modifier { val percent = remember { appPreferences.profileImageCornerRadius.state } + val r = max(0f, percent.value) + val pad = if (padding) size / 12 else 0.dp + val m = Modifier.size(size) return when { - percent.value <= 0 -> RectangleShape - percent.value >= 50 -> CircleShape - else -> RoundedCornerShape(PercentCornerSize(percent.value)) + r >= 50 -> + m.padding(pad).clip(CircleShape) + r <= 0 -> { + val sz = (size - 2 * pad) * squareToCircleRatio + m.padding((size - sz) / 2) + } + else -> { + val sz = (size - 2 * pad) * (squareToCircleRatio + r * radiusFactor) + m.padding((size - sz) / 2).clip(RoundedCornerShape(size = sz * r / 100)) + } } } @@ -131,31 +145,11 @@ fun ProfileImageForActiveCall( imageBitmap, stringResource(MR.strings.image_descr_profile_image), contentScale = ContentScale.Crop, - modifier = Modifier.size(size).clip(ProfileIconShape()) + modifier = ProfileIconModifier(size, padding = false) ) } } -/** (c) [androidx.compose.foundation.shape.CornerSize] */ -private data class PercentCornerSize( - private val percent: Float -) : CornerSize, InspectableValue { - init { - if (percent < 0 || percent > 100) { - throw IllegalArgumentException("The percent should be in the range of [0, 100]") - } - } - - override fun toPx(shapeSize: Size, density: Density) = - shapeSize.minDimension * (percent / 100f) - - override fun toString(): String = "CornerSize(size = $percent%)" - - override val valueOverride: String - get() = "$percent%" -} - - @Preview @Composable fun PreviewChatInfoImage() { From b3f80684468604a9507628a45dba5abc3676658a Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Fri, 26 Apr 2024 15:42:13 +0100 Subject: [PATCH 3/3] core: 5.7.0.5, increase min version of remote host/controller to 5.7.0.3 --- 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 f7e9260682..054cddd9be 100644 --- a/package.yaml +++ b/package.yaml @@ -1,5 +1,5 @@ name: simplex-chat -version: 5.7.0.4 +version: 5.7.0.5 #synopsis: #description: homepage: https://github.com/simplex-chat/simplex-chat#readme diff --git a/simplex-chat.cabal b/simplex-chat.cabal index 71f216b6f0..a72b51b82a 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.7.0.4 +version: 5.7.0.5 category: Web, System, Services, Cryptography homepage: https://github.com/simplex-chat/simplex-chat#readme author: simplex.chat diff --git a/src/Simplex/Chat/Remote.hs b/src/Simplex/Chat/Remote.hs index 75602c1e18..e8d13402ef 100644 --- a/src/Simplex/Chat/Remote.hs +++ b/src/Simplex/Chat/Remote.hs @@ -72,11 +72,11 @@ import UnliftIO.Directory (copyFile, createDirectoryIfMissing, doesDirectoryExis -- when acting as host minRemoteCtrlVersion :: AppVersion -minRemoteCtrlVersion = AppVersion [5, 6, 0, 0] +minRemoteCtrlVersion = AppVersion [5, 7, 0, 3] -- when acting as controller minRemoteHostVersion :: AppVersion -minRemoteHostVersion = AppVersion [5, 7, 0, 0] +minRemoteHostVersion = AppVersion [5, 7, 0, 3] currentAppVersion :: AppVersion currentAppVersion = AppVersion SC.version