diff --git a/apps/ios/Shared/Model/ChatModel.swift b/apps/ios/Shared/Model/ChatModel.swift index ad8a1acdc..fb56c7510 100644 --- a/apps/ios/Shared/Model/ChatModel.swift +++ b/apps/ios/Shared/Model/ChatModel.swift @@ -585,6 +585,15 @@ struct ChatItem: Identifiable, Decodable { var timestampText: Text { get { meta.timestampText } } + var text: String { + get { + switch (content.text, file) { + case let ("", .some(file)): return file.fileName + default: return content.text + } + } + } + func isRcvNew() -> Bool { if case .rcvNew = meta.itemStatus { return true } return false @@ -725,6 +734,7 @@ enum CIContent: Decodable, ItemContent { } } } + var msgContent: MsgContent? { get { switch self { diff --git a/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift b/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift index e7f254b32..acd50bda9 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift @@ -24,7 +24,7 @@ struct FramedItemView: View { VStack(alignment: .leading, spacing: 0) { if let qi = chatItem.quotedItem { MsgContentView( - content: qi, + text: qi.content.text, sender: qi.sender ) .lineLimit(3) @@ -53,21 +53,19 @@ struct FramedItemView: View { } else { if case let .image(_, image) = chatItem.content.msgContent { ChatItemImageView(image: image, file: chatItem.file) + ChatItemMsgContentView (chatItem: chatItem, showMember: showMember) +// // TODO make transparent background and change color for meta +// if case let .image(text, image) = chatItem.content.msgContent { +// ChatItemImageView(image: image, file: chatItem.file) +// if !text.isEmpty { +// ChatItemMsgContentView (chatItem: chatItem, showMember: showMember) +// } } else if case let .link(_, preview) = chatItem.content.msgContent { ChatItemLinkView(linkPreview: preview) + ChatItemMsgContentView (chatItem: chatItem, showMember: showMember) + } else { + ChatItemMsgContentView (chatItem: chatItem, showMember: showMember) } - MsgContentView( - content: chatItem.content, - formattedText: chatItem.formattedText, - sender: showMember ? chatItem.memberDisplayName : nil, - metaText: chatItem.timestampText, - edited: chatItem.meta.itemEdited - ) - .padding(.vertical, 6) - .padding(.horizontal, 12) - .overlay(DetermineWidth()) - .frame(minWidth: 0, alignment: .leading) - .textSelection(.enabled) } } @@ -97,6 +95,26 @@ struct FramedItemView: View { } } +struct ChatItemMsgContentView: View { + var chatItem: ChatItem + var showMember = false + + var body: some View { + MsgContentView( + text: chatItem.text, + formattedText: chatItem.formattedText, + sender: showMember ? chatItem.memberDisplayName : nil, + metaText: chatItem.timestampText, + edited: chatItem.meta.itemEdited + ) + .padding(.vertical, 6) + .padding(.horizontal, 12) + .overlay(DetermineWidth()) + .frame(minWidth: 0, alignment: .leading) + .textSelection(.enabled) + } +} + func chatItemFrameColor(_ ci: ChatItem, _ colorScheme: ColorScheme) -> Color { ci.chatDir.sent ? (colorScheme == .light ? sentColorLight : sentColorDark) diff --git a/apps/ios/Shared/Views/Chat/ChatItem/MsgContentView.swift b/apps/ios/Shared/Views/Chat/ChatItem/MsgContentView.swift index 73a5b9f85..b0b9928c9 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/MsgContentView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/MsgContentView.swift @@ -12,14 +12,14 @@ private let uiLinkColor = UIColor(red: 0, green: 0.533, blue: 1, alpha: 1) private let linkColor = Color(uiColor: uiLinkColor) struct MsgContentView: View { - var content: ItemContent + var text: String var formattedText: [FormattedText]? = nil var sender: String? = nil var metaText: Text? = nil var edited = false var body: some View { - let v = messageText(content, formattedText, sender) + let v = messageText(text, formattedText, sender) if let mt = metaText { return v + reserveSpaceForMeta(mt, edited) } else { @@ -35,8 +35,8 @@ struct MsgContentView: View { } } -func messageText(_ content: ItemContent, _ formattedText: [FormattedText]?, _ sender: String?, preview: Bool = false) -> Text { - let s = content.text +func messageText(_ text: String, _ formattedText: [FormattedText]?, _ sender: String?, preview: Bool = false) -> Text { + let s = text var res: Text if let ft = formattedText, ft.count > 0 { res = formattText(ft[0], preview) @@ -90,7 +90,7 @@ struct MsgContentView_Previews: PreviewProvider { static var previews: some View { let chatItem = ChatItem.getSample(1, .directSnd, .now, "hello") return MsgContentView( - content: chatItem.content, + text: chatItem.text, formattedText: chatItem.formattedText, sender: chatItem.memberDisplayName, metaText: chatItem.timestampText diff --git a/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift b/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift index 89694d152..5088d6355 100644 --- a/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift +++ b/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift @@ -51,7 +51,7 @@ struct ChatPreviewView: View { if let cItem = cItem { ZStack(alignment: .topTrailing) { - (itemStatusMark(cItem) + messageText(cItem.content, cItem.formattedText, cItem.memberDisplayName, preview: true)) + (itemStatusMark(cItem) + messageText(cItem.text, cItem.formattedText, cItem.memberDisplayName, preview: true)) .frame(minWidth: 0, maxWidth: .infinity, minHeight: 44, maxHeight: 44, alignment: .topLeading) .padding(.leading, 8) .padding(.trailing, 36)