From 76b4fd34c17b09af7acdda475907920a0bbf0abb Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Sun, 18 Dec 2022 21:20:39 +0000 Subject: [PATCH] ios: fix live messages sending incomplete words, refactor (#1604) --- .../Chat/ComposeMessage/ComposeView.swift | 62 ++++++++----------- .../Chat/ComposeMessage/SendMessageView.swift | 8 +-- 2 files changed, 30 insertions(+), 40 deletions(-) diff --git a/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift b/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift index 748eb3b4f6..0c60bf9119 100644 --- a/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift +++ b/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift @@ -33,8 +33,6 @@ struct LiveMessage { var chatItem: ChatItem var typedMsg: String var sentMsg: String - - var changed: Bool { typedMsg != sentMsg } } struct ComposeState { @@ -383,29 +381,23 @@ struct ComposeView: View { } } - private func liveMessageToSend(_ liveMessage: LiveMessage, _ typedMsg: String) -> String? { - if liveMessage.typedMsg != typedMsg { - let s = truncateToWords(typedMsg) - return s == liveMessage.sentMsg ? nil : s - } - return liveMessage.changed - ? liveMessage.typedMsg - : nil + private func liveMessageToSend(_ lm: LiveMessage, _ t: String) -> String? { + let s = t != lm.typedMsg ? truncateToWords(t) : t + return s != lm.sentMsg ? s : nil } private func truncateToWords(_ s: String) -> String { - if let i = s.lastIndex(where: { !alphaNumeric($0) }) { - let s1 = s[...i] - if let j = s1.lastIndex(where: alphaNumeric), i < s1.endIndex { - return String(s1[...j]) + var acc = "" + var word = "" + for c in s { + if c.isLetter || c.isNumber { + word = word + String(c) + } else { + acc = acc + word + String(c) + word = "" } - return String(s1) - } - return "" - - func alphaNumeric(_ c: Character) -> Bool { - c.isLetter || c.isNumber } + return acc } @ViewBuilder func previewView() -> some View { @@ -578,6 +570,21 @@ struct ComposeView: View { } return nil } + + func checkLinkPreview() -> MsgContent { + switch (composeState.preview) { + case let .linkPreview(linkPreview: linkPreview): + if let url = parseMessage(msgText), + let linkPreview = linkPreview, + url == linkPreview.uri { + return .link(text: msgText, preview: linkPreview) + } else { + return .text(msgText) + } + default: + return .text(msgText) + } + } } private func startVoiceMessageRecording() async { @@ -742,21 +749,6 @@ struct ComposeView: View { pendingLinkUrl = nil cancelledLinks = [] } - - private func checkLinkPreview() -> MsgContent { - switch (composeState.preview) { - case let .linkPreview(linkPreview: linkPreview): - if let url = parseMessage(composeState.message), - let linkPreview = linkPreview, - url == linkPreview.uri { - return .link(text: composeState.message, preview: linkPreview) - } else { - return .text(composeState.message) - } - default: - return .text(composeState.message) - } - } } struct ComposeView_Previews: PreviewProvider { diff --git a/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift b/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift index caf3c7c2c8..585b7b1593 100644 --- a/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift +++ b/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift @@ -226,11 +226,9 @@ struct SendMessageView: View { default: () } } label: { - ZStack { - Image(systemName: "ellipsis.circle.fill") - .resizable() - .foregroundColor(.accentColor) - } + Image(systemName: "ellipsis.circle.fill") + .resizable() + .foregroundColor(.accentColor) } .frame(width: 29, height: 29) .padding([.bottom, .horizontal], 4)