Added user display names and switched to using an avatar url directly in the homeScreen viewModel for the current user.

This commit is contained in:
Stefan Ceriu
2022-03-21 19:35:24 +02:00
parent a9c0a8f334
commit d201ca1ad8
23 changed files with 152 additions and 71 deletions
@@ -14,6 +14,7 @@ protocol EventBasedTimelineItemProtocol: RoomTimelineItemProtocol {
var timestamp: String { get }
var shouldShowSenderDetails: Bool { get }
var sender: String { get }
var senderId: String { get }
var senderDisplayName: String? { get set }
var senderAvatar: UIImage? { get set }
}
@@ -15,7 +15,8 @@ struct ImageRoomTimelineItem: EventBasedTimelineItemProtocol, Identifiable, Equa
let timestamp: String
let shouldShowSenderDetails: Bool
let sender: String
let senderId: String
var senderDisplayName: String?
var senderAvatar: UIImage?
let url: String?
@@ -15,6 +15,7 @@ struct TextRoomTimelineItem: EventBasedTimelineItemProtocol, Identifiable, Equat
let timestamp: String
let shouldShowSenderDetails: Bool
let sender: String
let senderId: String
var senderDisplayName: String?
var senderAvatar: UIImage?
}
@@ -21,6 +21,7 @@ struct RoomTimelineItemFactory {
func buildTimelineItemFor(_ roomMessage: RoomMessageProtocol, showSenderDetails: Bool) -> RoomTimelineItemProtocol {
let displayName = memberDetailsProvider.displayNameForUserId(roomMessage.sender)
let avatarURL = memberDetailsProvider.avatarURLForUserId(roomMessage.sender)
let avatarImage = mediaProvider.imageForURL(avatarURL)
@@ -30,14 +31,16 @@ struct RoomTimelineItemFactory {
text: message.content,
timestamp: message.originServerTs.formatted(date: .omitted, time: .shortened),
shouldShowSenderDetails: showSenderDetails,
sender: message.sender,
senderId: message.sender,
senderDisplayName: displayName,
senderAvatar: avatarImage)
case let message as ImageRoomMessage:
return ImageRoomTimelineItem(id: message.id,
text: message.content,
timestamp: message.originServerTs.formatted(date: .omitted, time: .shortened),
shouldShowSenderDetails: showSenderDetails,
sender: message.sender,
senderId: message.sender,
senderDisplayName: displayName,
senderAvatar: avatarImage,
url: message.url,
image: mediaProvider.imageForURL(message.url))
@@ -16,7 +16,7 @@ struct EventBasedTimelineView: View {
if timelineItem.shouldShowSenderDetails {
HStack {
avatar
Text(timelineItem.sender)
Text(timelineItem.senderDisplayName ?? timelineItem.senderId)
.font(.footnote)
.bold()
Spacer()
@@ -35,10 +35,18 @@ struct EventBasedTimelineView: View {
.scaledToFill()
.overlay(Circle().stroke(Color(.sRGB, red: 0.05, green: 0.74, blue: 0.55, opacity: 1.0)))
} else {
PlaceholderAvatarImage(firstCharacter: String(timelineItem.sender.prefix(2).suffix(1)).uppercased())
PlaceholderAvatarImage(firstCharacter: String(firstLetter))
}
}
.clipShape(Circle())
.frame(width: 44.0, height: 44.0)
}
private var firstLetter: String {
if let senderDisplayName = timelineItem.senderDisplayName {
return senderDisplayName.prefix(1).uppercased()
} else {
return timelineItem.senderId.prefix(2).suffix(1).uppercased()
}
}
}
@@ -40,7 +40,7 @@ struct ImageRoomTimelineView_Previews: PreviewProvider {
text: "Some image",
timestamp: "Now",
shouldShowSenderDetails: false,
sender: "Bob",
senderId: "Bob",
url: nil,
image: UIImage(systemName: "photo"))
ImageRoomTimelineView(timelineItem: timelineItem)
@@ -49,7 +49,7 @@ struct ImageRoomTimelineView_Previews: PreviewProvider {
text: "Some other image",
timestamp: "Now",
shouldShowSenderDetails: false,
sender: "Bob",
senderId: "Bob",
url: nil,
image: nil)
ImageRoomTimelineView(timelineItem: timelineItem)
@@ -34,14 +34,14 @@ struct TextRoomTimelineView_Previews: PreviewProvider {
text: "Short loin ground round tongue hamburger, fatback salami shoulder. Beef turkey sausage kielbasa strip steak. Alcatra capicola pig tail pancetta chislic.",
timestamp: "Now",
shouldShowSenderDetails: true,
sender: "Bob")
senderId: "Bob")
TextRoomTimelineView(timelineItem: timelineItem)
let timelineItem = TextRoomTimelineItem(id: UUID().uuidString,
text: "Some other text",
timestamp: "Later",
shouldShowSenderDetails: true,
sender: "Anne")
senderId: "Anne")
TextRoomTimelineView(timelineItem: timelineItem)
}
.padding()