diff --git a/apps/ios/Shared/Model/ChatModel.swift b/apps/ios/Shared/Model/ChatModel.swift index 05b5ce1bcc..8b4c3f4f3a 100644 --- a/apps/ios/Shared/Model/ChatModel.swift +++ b/apps/ios/Shared/Model/ChatModel.swift @@ -513,6 +513,13 @@ final class ChatModel: ObservableObject { func contactNetworkStatus(_ contact: Contact) -> NetworkStatus { networkStatuses[contact.activeConn.agentConnId] ?? .unknown } + + func addTerminalItem(_ item: TerminalItem) { + if terminalItems.count >= 500 { + terminalItems.remove(at: 0) + } + terminalItems.append(item) + } } struct UnreadChatItemCounts { diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift index b171ddf25b..54f41fc719 100644 --- a/apps/ios/Shared/Model/SimpleXAPI.swift +++ b/apps/ios/Shared/Model/SimpleXAPI.swift @@ -94,8 +94,8 @@ func chatSendCmdSync(_ cmd: ChatCommand, bgTask: Bool = true, bgDelay: Double? = logger.debug("chatSendCmd \(cmd.cmdType) response: \(json)") } DispatchQueue.main.async { - ChatModel.shared.terminalItems.append(.cmd(.now, cmd.obfuscated)) - ChatModel.shared.terminalItems.append(.resp(.now, resp)) + ChatModel.shared.addTerminalItem(.cmd(.now, cmd.obfuscated)) + ChatModel.shared.addTerminalItem(.resp(.now, resp)) } return resp } @@ -1009,7 +1009,7 @@ class ChatReceiver { func processReceivedMsg(_ res: ChatResponse) async { let m = ChatModel.shared await MainActor.run { - m.terminalItems.append(.resp(.now, res)) + m.addTerminalItem(.resp(.now, res)) logger.debug("processReceivedMsg: \(res.responseType)") switch res { case let .newContactConnection(user, connection): diff --git a/apps/ios/Shared/Views/TerminalView.swift b/apps/ios/Shared/Views/TerminalView.swift index 0274e6fca8..ee97f14bfe 100644 --- a/apps/ios/Shared/Views/TerminalView.swift +++ b/apps/ios/Shared/Views/TerminalView.swift @@ -110,8 +110,8 @@ struct TerminalView: View { if composeState.message.starts(with: "/sql") && (!prefPerformLA || !developerTools) { let resp = ChatResponse.chatCmdError(user: nil, chatError: ChatError.error(errorType: ChatErrorType.commandError(message: "Failed reading: empty"))) DispatchQueue.main.async { - ChatModel.shared.terminalItems.append(.cmd(.now, cmd)) - ChatModel.shared.terminalItems.append(.resp(.now, resp)) + ChatModel.shared.addTerminalItem(.cmd(.now, cmd)) + ChatModel.shared.addTerminalItem(.resp(.now, resp)) } } else { DispatchQueue.global().async {