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 = "";