From 5cddf8e2d33f98921627a24e2207e06815929d9c Mon Sep 17 00:00:00 2001
From: JRoberts <8711996+jr-simplex@users.noreply.github.com>
Date: Thu, 19 May 2022 16:56:34 +0400
Subject: [PATCH] mobile: clear conversation from chat info view (#668)
---
.../simplex/app/views/chat/ChatInfoView.kt | 128 +++++++++++++-----
.../app/src/main/res/values-ru/strings.xml | 3 +-
.../app/src/main/res/values/strings.xml | 3 +-
apps/ios/Shared/Views/Chat/ChatInfoView.swift | 56 +++++++-
.../Views/ChatList/ChatListNavLink.swift | 2 +-
apps/ios/SimpleX.xcodeproj/project.pbxproj | 70 ++++------
6 files changed, 176 insertions(+), 86 deletions(-)
diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/ChatInfoView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/ChatInfoView.kt
index 5f380545cc..242bb8b029 100644
--- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/ChatInfoView.kt
+++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/ChatInfoView.kt
@@ -6,8 +6,7 @@ import androidx.compose.foundation.layout.*
import androidx.compose.material.*
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.*
-import androidx.compose.material.icons.outlined.Circle
-import androidx.compose.material.icons.outlined.Delete
+import androidx.compose.material.icons.outlined.*
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -27,36 +26,62 @@ fun ChatInfoView(chatModel: ChatModel, close: () -> Unit) {
BackHandler(onBack = close)
val chat = chatModel.chats.firstOrNull { it.id == chatModel.chatId.value }
if (chat != null) {
- ChatInfoLayout(chat,
+ ChatInfoLayout(
+ chat,
close = close,
- deleteContact = {
- AlertManager.shared.showAlertMsg(
- title = generalGetString(R.string.delete_contact__question),
- text = generalGetString(R.string.delete_contact_all_messages_deleted_cannot_undo_warning),
- confirmText = generalGetString(R.string.delete_verb),
- onConfirm = {
- val cInfo = chat.chatInfo
- withApi {
- val r = chatModel.controller.apiDeleteChat(cInfo.chatType, cInfo.apiId)
- if (r) {
- chatModel.removeChat(cInfo.id)
- chatModel.chatId.value = null
- close()
- }
- }
- }
- )
- }
+ deleteContact = { deleteContactDialog(chat.chatInfo, chatModel, close) },
+ clearChat = { clearChatDialog(chat.chatInfo, chatModel, close) }
)
}
}
+fun deleteContactDialog(chatInfo: ChatInfo, chatModel: ChatModel, close: () -> Unit) {
+ AlertManager.shared.showAlertMsg(
+ title = generalGetString(R.string.delete_contact__question),
+ text = generalGetString(R.string.delete_contact_all_messages_deleted_cannot_undo_warning),
+ confirmText = generalGetString(R.string.delete_verb),
+ onConfirm = {
+ withApi {
+ val r = chatModel.controller.apiDeleteChat(chatInfo.chatType, chatInfo.apiId)
+ if (r) {
+ chatModel.removeChat(chatInfo.id)
+ chatModel.chatId.value = null
+ close()
+ }
+ }
+ }
+ )
+}
+
+fun clearChatDialog(chatInfo: ChatInfo, chatModel: ChatModel, close: () -> Unit) {
+ AlertManager.shared.showAlertMsg(
+ title = generalGetString(R.string.clear_chat_question),
+ text = generalGetString(R.string.clear_chat_warning),
+ confirmText = generalGetString(R.string.clear_verb),
+ onConfirm = {
+ withApi {
+ val r = chatModel.controller.apiClearChat(chatInfo.chatType, chatInfo.apiId)
+ if (r) {
+ chatModel.clearChat(chatInfo)
+ close()
+ }
+ }
+ }
+ )
+}
+
@Composable
-fun ChatInfoLayout(chat: Chat, close: () -> Unit, deleteContact: () -> Unit) {
- Column(Modifier
- .fillMaxSize()
- .background(MaterialTheme.colors.background)
- .padding(horizontal = 8.dp),
+fun ChatInfoLayout(
+ chat: Chat,
+ close: () -> Unit,
+ deleteContact: () -> Unit,
+ clearChat: () -> Unit
+) {
+ Column(
+ Modifier
+ .fillMaxSize()
+ .background(MaterialTheme.colors.background)
+ .padding(horizontal = 8.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
CloseSheetBar(close)
@@ -66,7 +91,9 @@ fun ChatInfoLayout(chat: Chat, close: () -> Unit, deleteContact: () -> Unit) {
Text(
cInfo.displayName, style = MaterialTheme.typography.h1.copy(fontWeight = FontWeight.Normal),
color = MaterialTheme.colors.onBackground,
- modifier = Modifier.padding(top = 32.dp).padding(bottom = 8.dp)
+ modifier = Modifier
+ .padding(top = 32.dp)
+ .padding(bottom = 8.dp)
)
Text(
cInfo.fullName, style = MaterialTheme.typography.h2,
@@ -90,13 +117,27 @@ fun ChatInfoLayout(chat: Chat, close: () -> Unit, deleteContact: () -> Unit) {
style = MaterialTheme.typography.body2,
color = MaterialTheme.colors.onBackground,
textAlign = TextAlign.Center,
- modifier = Modifier.padding(top = 16.dp).padding(horizontal = 16.dp)
+ modifier = Modifier
+ .padding(top = 16.dp)
+ .padding(horizontal = 16.dp)
)
}
Spacer(Modifier.weight(1F))
- Box(Modifier.padding(48.dp)) {
+ Box(Modifier.padding(4.dp)) {
+ SimpleButton(
+ stringResource(R.string.clear_chat_button),
+ icon = Icons.Outlined.Restore,
+ color = WarningOrange,
+ click = clearChat
+ )
+ }
+ Box(
+ Modifier
+ .padding(4.dp)
+ .padding(bottom = 32.dp)
+ ) {
SimpleButton(
stringResource(R.string.button_delete_contact),
icon = Icons.Outlined.Delete,
@@ -104,22 +145,35 @@ fun ChatInfoLayout(chat: Chat, close: () -> Unit, deleteContact: () -> Unit) {
click = deleteContact
)
}
+ } else if (cInfo is ChatInfo.Group) {
+ Spacer(Modifier.weight(1F))
+
+ Box(
+ Modifier
+ .padding(4.dp)
+ .padding(bottom = 32.dp)
+ ) {
+ SimpleButton(
+ stringResource(R.string.clear_chat_button),
+ icon = Icons.Outlined.Restore,
+ color = WarningOrange,
+ click = clearChat
+ )
+ }
}
}
}
@Composable
fun ServerImage(chat: Chat) {
- val status = chat.serverInfo.networkStatus
- when {
- status is Chat.NetworkStatus.Connected ->
+ when (chat.serverInfo.networkStatus) {
+ is Chat.NetworkStatus.Connected ->
Icon(Icons.Filled.Circle, stringResource(R.string.icon_descr_server_status_connected), tint = MaterialTheme.colors.primaryVariant)
- status is Chat.NetworkStatus.Disconnected ->
+ is Chat.NetworkStatus.Disconnected ->
Icon(Icons.Filled.Pending, stringResource(R.string.icon_descr_server_status_disconnected), tint = HighOrLowlight)
- status is Chat.NetworkStatus.Error ->
+ is Chat.NetworkStatus.Error ->
Icon(Icons.Filled.Error, stringResource(R.string.icon_descr_server_status_error), tint = HighOrLowlight)
- else ->
- Icon(Icons.Outlined.Circle, stringResource(R.string.icon_descr_server_status_pending), tint = HighOrLowlight)
+ else -> Icon(Icons.Outlined.Circle, stringResource(R.string.icon_descr_server_status_pending), tint = HighOrLowlight)
}
}
@@ -133,7 +187,7 @@ fun PreviewChatInfoLayout() {
chatItems = arrayListOf(),
serverInfo = Chat.ServerInfo(Chat.NetworkStatus.Error("agent BROKER TIMEOUT"))
),
- close = {}, deleteContact = {}
+ close = {}, deleteContact = {}, clearChat = {}
)
}
}
diff --git a/apps/android/app/src/main/res/values-ru/strings.xml b/apps/android/app/src/main/res/values-ru/strings.xml
index e6d895c804..7925e43bda 100644
--- a/apps/android/app/src/main/res/values-ru/strings.xml
+++ b/apps/android/app/src/main/res/values-ru/strings.xml
@@ -169,9 +169,10 @@
Отклонить
- Очистить чат?
+ Очистить разговор?
Все сообщения будут удалены - это действие нельзя отменить! Сообщения будут удалены только для вас.
Очистить
+ Очистить разговор
Вы пригласили ваш контакт
diff --git a/apps/android/app/src/main/res/values/strings.xml b/apps/android/app/src/main/res/values/strings.xml
index ea855d5641..cdb8a1aa52 100644
--- a/apps/android/app/src/main/res/values/strings.xml
+++ b/apps/android/app/src/main/res/values/strings.xml
@@ -170,9 +170,10 @@
Reject
- Clear chat?
+ Clear conversation?
All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you.
Clear
+ Clear conversation
You invited your contact
diff --git a/apps/ios/Shared/Views/Chat/ChatInfoView.swift b/apps/ios/Shared/Views/Chat/ChatInfoView.swift
index f345f458fb..b7bd7ef587 100644
--- a/apps/ios/Shared/Views/Chat/ChatInfoView.swift
+++ b/apps/ios/Shared/Views/Chat/ChatInfoView.swift
@@ -13,9 +13,16 @@ struct ChatInfoView: View {
@ObservedObject var alertManager = AlertManager.shared
@ObservedObject var chat: Chat
@Binding var showChatInfo: Bool
- @State var showDeleteAlert = false
+ @State var alert: ChatInfoViewAlert? = nil
@State var deletingContact: Contact?
+ enum ChatInfoViewAlert: Identifiable {
+ case deleteContactAlert
+ case clearChatAlert
+
+ var id: ChatInfoViewAlert { get { self } }
+ }
+
var body: some View {
VStack{
ChatInfoImage(chat: chat)
@@ -27,8 +34,8 @@ struct ChatInfoView: View {
Text(chat.chatInfo.fullName).font(.title)
.padding(.bottom)
- if case let .direct(contact) = chat.chatInfo {
- VStack {
+ VStack {
+ if case let .direct(contact) = chat.chatInfo {
HStack {
serverImage()
Text(chat.serverInfo.networkStatus.statusString)
@@ -41,18 +48,39 @@ struct ChatInfoView: View {
.padding(.vertical, 8)
Spacer()
+ Button() {
+ alert = .clearChatAlert
+ } label: {
+ Label("Clear conversation", systemImage: "gobackward")
+ }
+ .tint(Color.orange)
Button(role: .destructive) {
deletingContact = contact
- showDeleteAlert = true
+ alert = .deleteContactAlert
} label: {
Label("Delete contact", systemImage: "trash")
}
.padding()
}
+ else if case .group = chat.chatInfo {
+ Spacer()
+ Button() {
+ alert = .clearChatAlert
+ } label: {
+ Label("Clear conversation", systemImage: "gobackward")
+ }
+ .tint(Color.orange)
+ .padding()
+ }
}
+ .alert(item: $alert) { alertItem in
+ switch(alertItem) {
+ case .deleteContactAlert: return deleteContactAlert(deletingContact!)
+ case .clearChatAlert: return clearChatAlert()
+ }
+ }
+ .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top)
}
- .alert(isPresented: $showDeleteAlert) { deleteContactAlert(deletingContact!) }
- .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top)
}
func serverImage() -> some View {
@@ -81,6 +109,22 @@ struct ChatInfoView: View {
secondaryButton: .cancel()
)
}
+
+ private func clearChatAlert() -> Alert {
+ Alert(
+ title: Text("Clear conversation?"),
+ message: Text("All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you."),
+ primaryButton: .destructive(Text("Clear")) {
+ Task {
+ await clearChat(chat)
+ DispatchQueue.main.async {
+ showChatInfo = false
+ }
+ }
+ },
+ secondaryButton: .cancel()
+ )
+ }
}
struct ChatInfoView_Previews: PreviewProvider {
diff --git a/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift b/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift
index ae70f343b7..cd02499ec0 100644
--- a/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift
+++ b/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift
@@ -190,7 +190,7 @@ struct ChatListNavLink: View {
private func clearChatAlert() -> Alert {
Alert(
- title: Text("Clear chat?"),
+ title: Text("Clear conversation?"),
message: Text("All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you."),
primaryButton: .destructive(Text("Clear")) {
Task { await clearChat(chat) }
diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj
index a83840ecc4..f0f11da579 100644
--- a/apps/ios/SimpleX.xcodeproj/project.pbxproj
+++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj
@@ -92,26 +92,21 @@
5CEACCED27DEA495000BD591 /* MsgContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CEACCEC27DEA495000BD591 /* MsgContentView.swift */; };
5CFE0921282EEAF60002594B /* ZoomableScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CFE0920282EEAF60002594B /* ZoomableScrollView.swift */; };
5CFE0922282EEAF60002594B /* ZoomableScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CFE0920282EEAF60002594B /* ZoomableScrollView.swift */; };
- 5CFE09282833E9620002594B /* libHSsimplex-chat-2.0.1-IL4OVvclaJm1EwZEKXfP4L.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CFE09232833E9620002594B /* libHSsimplex-chat-2.0.1-IL4OVvclaJm1EwZEKXfP4L.a */; };
- 5CFE09292833E9620002594B /* libHSsimplex-chat-2.0.1-IL4OVvclaJm1EwZEKXfP4L.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CFE09232833E9620002594B /* libHSsimplex-chat-2.0.1-IL4OVvclaJm1EwZEKXfP4L.a */; };
- 5CFE092A2833E9620002594B /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CFE09242833E9620002594B /* libgmpxx.a */; };
- 5CFE092B2833E9620002594B /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CFE09242833E9620002594B /* libgmpxx.a */; };
- 5CFE092C2833E9620002594B /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CFE09252833E9620002594B /* libgmp.a */; };
- 5CFE092D2833E9620002594B /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CFE09252833E9620002594B /* libgmp.a */; };
- 5CFE092E2833E9620002594B /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CFE09262833E9620002594B /* libffi.a */; };
- 5CFE092F2833E9620002594B /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CFE09262833E9620002594B /* libffi.a */; };
- 5CFE09302833E9620002594B /* libHSsimplex-chat-2.0.1-IL4OVvclaJm1EwZEKXfP4L-ghc8.10.7.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CFE09272833E9620002594B /* libHSsimplex-chat-2.0.1-IL4OVvclaJm1EwZEKXfP4L-ghc8.10.7.a */; };
- 5CFE09312833E9620002594B /* libHSsimplex-chat-2.0.1-IL4OVvclaJm1EwZEKXfP4L-ghc8.10.7.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CFE09272833E9620002594B /* libHSsimplex-chat-2.0.1-IL4OVvclaJm1EwZEKXfP4L-ghc8.10.7.a */; };
640F50E327CF991C001E05C2 /* SMPServers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 640F50E227CF991C001E05C2 /* SMPServers.swift */; };
- 644320022833BF0800CA19E0 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64431FFD2833BF0800CA19E0 /* libgmp.a */; };
- 644320032833BF0800CA19E0 /* libHSsimplex-chat-2.0.1-IL4OVvclaJm1EwZEKXfP4L.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64431FFE2833BF0800CA19E0 /* libHSsimplex-chat-2.0.1-IL4OVvclaJm1EwZEKXfP4L.a */; };
- 644320042833BF0800CA19E0 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64431FFF2833BF0800CA19E0 /* libgmpxx.a */; };
- 644320052833BF0800CA19E0 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 644320002833BF0800CA19E0 /* libffi.a */; };
- 644320062833BF0800CA19E0 /* libHSsimplex-chat-2.0.1-IL4OVvclaJm1EwZEKXfP4L-ghc8.10.7.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 644320012833BF0800CA19E0 /* libHSsimplex-chat-2.0.1-IL4OVvclaJm1EwZEKXfP4L-ghc8.10.7.a */; };
6454036F2822A9750090DDFF /* ComposeFileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6454036E2822A9750090DDFF /* ComposeFileView.swift */; };
648010AB281ADD15009009B9 /* CIFileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 648010AA281ADD15009009B9 /* CIFileView.swift */; };
649BCDA0280460FD00C3A862 /* ComposeImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649BCD9F280460FD00C3A862 /* ComposeImageView.swift */; };
649BCDA22805D6EF00C3A862 /* CIImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649BCDA12805D6EF00C3A862 /* CIImageView.swift */; };
+ 64A6907228364D610076573F /* libHSsimplex-chat-2.1.0-KOac7DFCSQz9HzISDnAYtC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A6906D28364D610076573F /* libHSsimplex-chat-2.1.0-KOac7DFCSQz9HzISDnAYtC.a */; };
+ 64A6907328364D610076573F /* libHSsimplex-chat-2.1.0-KOac7DFCSQz9HzISDnAYtC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A6906D28364D610076573F /* libHSsimplex-chat-2.1.0-KOac7DFCSQz9HzISDnAYtC.a */; };
+ 64A6907428364D610076573F /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A6906E28364D610076573F /* libgmpxx.a */; };
+ 64A6907528364D610076573F /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A6906E28364D610076573F /* libgmpxx.a */; };
+ 64A6907628364D610076573F /* libHSsimplex-chat-2.1.0-KOac7DFCSQz9HzISDnAYtC-ghc8.10.7.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A6906F28364D610076573F /* libHSsimplex-chat-2.1.0-KOac7DFCSQz9HzISDnAYtC-ghc8.10.7.a */; };
+ 64A6907728364D610076573F /* libHSsimplex-chat-2.1.0-KOac7DFCSQz9HzISDnAYtC-ghc8.10.7.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A6906F28364D610076573F /* libHSsimplex-chat-2.1.0-KOac7DFCSQz9HzISDnAYtC-ghc8.10.7.a */; };
+ 64A6907828364D610076573F /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A6907028364D610076573F /* libgmp.a */; };
+ 64A6907928364D610076573F /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A6907028364D610076573F /* libgmp.a */; };
+ 64A6907A28364D610076573F /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A6907128364D610076573F /* libffi.a */; };
+ 64A6907B28364D610076573F /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A6907128364D610076573F /* libffi.a */; };
64AA1C6927EE10C800AC7277 /* ContextItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64AA1C6827EE10C800AC7277 /* ContextItemView.swift */; };
64AA1C6C27F3537400AC7277 /* DeletedItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64AA1C6B27F3537400AC7277 /* DeletedItemView.swift */; };
64DAE1512809D9F5000DA960 /* FileUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64DAE1502809D9F5000DA960 /* FileUtils.swift */; };
@@ -212,22 +207,17 @@
5CEACCE227DE9246000BD591 /* ComposeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeView.swift; sourceTree = ""; };
5CEACCEC27DEA495000BD591 /* MsgContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MsgContentView.swift; sourceTree = ""; };
5CFE0920282EEAF60002594B /* ZoomableScrollView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ZoomableScrollView.swift; path = Shared/Views/ZoomableScrollView.swift; sourceTree = SOURCE_ROOT; };
- 5CFE09232833E9620002594B /* libHSsimplex-chat-2.0.1-IL4OVvclaJm1EwZEKXfP4L.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-2.0.1-IL4OVvclaJm1EwZEKXfP4L.a"; sourceTree = ""; };
- 5CFE09242833E9620002594B /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; };
- 5CFE09252833E9620002594B /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; };
- 5CFE09262833E9620002594B /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; };
- 5CFE09272833E9620002594B /* libHSsimplex-chat-2.0.1-IL4OVvclaJm1EwZEKXfP4L-ghc8.10.7.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-2.0.1-IL4OVvclaJm1EwZEKXfP4L-ghc8.10.7.a"; sourceTree = ""; };
640F50E227CF991C001E05C2 /* SMPServers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SMPServers.swift; sourceTree = ""; };
- 64431FFD2833BF0800CA19E0 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; };
- 64431FFE2833BF0800CA19E0 /* libHSsimplex-chat-2.0.1-IL4OVvclaJm1EwZEKXfP4L.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-2.0.1-IL4OVvclaJm1EwZEKXfP4L.a"; sourceTree = ""; };
- 64431FFF2833BF0800CA19E0 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; };
- 644320002833BF0800CA19E0 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; };
- 644320012833BF0800CA19E0 /* libHSsimplex-chat-2.0.1-IL4OVvclaJm1EwZEKXfP4L-ghc8.10.7.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-2.0.1-IL4OVvclaJm1EwZEKXfP4L-ghc8.10.7.a"; sourceTree = ""; };
6454036E2822A9750090DDFF /* ComposeFileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeFileView.swift; sourceTree = ""; };
648010AA281ADD15009009B9 /* CIFileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIFileView.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 = ""; };
+ 64A6906D28364D610076573F /* libHSsimplex-chat-2.1.0-KOac7DFCSQz9HzISDnAYtC.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-2.1.0-KOac7DFCSQz9HzISDnAYtC.a"; sourceTree = ""; };
+ 64A6906E28364D610076573F /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; };
+ 64A6906F28364D610076573F /* libHSsimplex-chat-2.1.0-KOac7DFCSQz9HzISDnAYtC-ghc8.10.7.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-2.1.0-KOac7DFCSQz9HzISDnAYtC-ghc8.10.7.a"; sourceTree = ""; };
+ 64A6907028364D610076573F /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; };
+ 64A6907128364D610076573F /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; };
64AA1C6827EE10C800AC7277 /* ContextItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContextItemView.swift; sourceTree = ""; };
64AA1C6B27F3537400AC7277 /* DeletedItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeletedItemView.swift; sourceTree = ""; };
64DAE1502809D9F5000DA960 /* FileUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileUtils.swift; sourceTree = ""; };
@@ -239,13 +229,13 @@
buildActionMask = 2147483647;
files = (
5C8F01CD27A6F0D8007D2C8D /* CodeScanner in Frameworks */,
- 5CFE092A2833E9620002594B /* libgmpxx.a in Frameworks */,
- 5CFE09282833E9620002594B /* libHSsimplex-chat-2.0.1-IL4OVvclaJm1EwZEKXfP4L.a in Frameworks */,
+ 64A6907828364D610076573F /* libgmp.a in Frameworks */,
+ 64A6907428364D610076573F /* libgmpxx.a in Frameworks */,
+ 64A6907A28364D610076573F /* libffi.a in Frameworks */,
+ 64A6907628364D610076573F /* libHSsimplex-chat-2.1.0-KOac7DFCSQz9HzISDnAYtC-ghc8.10.7.a in Frameworks */,
5C764E83279C748B000C6508 /* libz.tbd in Frameworks */,
- 5CFE092E2833E9620002594B /* libffi.a in Frameworks */,
- 5CFE092C2833E9620002594B /* libgmp.a in Frameworks */,
- 5CFE09302833E9620002594B /* libHSsimplex-chat-2.0.1-IL4OVvclaJm1EwZEKXfP4L-ghc8.10.7.a in Frameworks */,
5C764E82279C748B000C6508 /* libiconv.tbd in Frameworks */,
+ 64A6907228364D610076573F /* libHSsimplex-chat-2.1.0-KOac7DFCSQz9HzISDnAYtC.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -260,13 +250,13 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 5CFE09312833E9620002594B /* libHSsimplex-chat-2.0.1-IL4OVvclaJm1EwZEKXfP4L-ghc8.10.7.a in Frameworks */,
- 5CFE092B2833E9620002594B /* libgmpxx.a in Frameworks */,
- 5CFE092F2833E9620002594B /* libffi.a in Frameworks */,
- 5CFE092D2833E9620002594B /* libgmp.a in Frameworks */,
+ 64A6907728364D610076573F /* libHSsimplex-chat-2.1.0-KOac7DFCSQz9HzISDnAYtC-ghc8.10.7.a in Frameworks */,
+ 64A6907528364D610076573F /* libgmpxx.a in Frameworks */,
5CDCAD5F28187D6900503DA2 /* libiconv.tbd in Frameworks */,
- 5CFE09292833E9620002594B /* libHSsimplex-chat-2.0.1-IL4OVvclaJm1EwZEKXfP4L.a in Frameworks */,
5CDCAD6128187D8000503DA2 /* libz.tbd in Frameworks */,
+ 64A6907B28364D610076573F /* libffi.a in Frameworks */,
+ 64A6907928364D610076573F /* libgmp.a in Frameworks */,
+ 64A6907328364D610076573F /* libHSsimplex-chat-2.1.0-KOac7DFCSQz9HzISDnAYtC.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -315,11 +305,11 @@
5C764E5C279C70B7000C6508 /* Libraries */ = {
isa = PBXGroup;
children = (
- 5CFE09262833E9620002594B /* libffi.a */,
- 5CFE09252833E9620002594B /* libgmp.a */,
- 5CFE09242833E9620002594B /* libgmpxx.a */,
- 5CFE09272833E9620002594B /* libHSsimplex-chat-2.0.1-IL4OVvclaJm1EwZEKXfP4L-ghc8.10.7.a */,
- 5CFE09232833E9620002594B /* libHSsimplex-chat-2.0.1-IL4OVvclaJm1EwZEKXfP4L.a */,
+ 64A6907128364D610076573F /* libffi.a */,
+ 64A6907028364D610076573F /* libgmp.a */,
+ 64A6906E28364D610076573F /* libgmpxx.a */,
+ 64A6906F28364D610076573F /* libHSsimplex-chat-2.1.0-KOac7DFCSQz9HzISDnAYtC-ghc8.10.7.a */,
+ 64A6906D28364D610076573F /* libHSsimplex-chat-2.1.0-KOac7DFCSQz9HzISDnAYtC.a */,
);
path = Libraries;
sourceTree = "";