mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-05 20:09:04 +00:00
Correctly building image items for the timeline. Missing URL and way to load image.
This commit is contained in:
@@ -8,7 +8,10 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
struct ImageRoomTimelineItem: Identifiable, Equatable {
|
||||
struct ImageRoomTimelineItem: TimelineItemProtocol, Identifiable, Equatable {
|
||||
let id: String
|
||||
let senderDisplayName: String
|
||||
let text: String
|
||||
let timestamp: String
|
||||
let shouldShowSenderDetails: Bool
|
||||
}
|
||||
|
||||
@@ -17,7 +17,10 @@ struct ImageRoomTimelineView: View {
|
||||
if let loadedImage = loadedImage {
|
||||
Image(uiImage: loadedImage)
|
||||
} else {
|
||||
ProgressView()
|
||||
VStack {
|
||||
Image(systemName: "photo")
|
||||
ProgressView()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
struct SeparatorRoomTimelineItem: Identifiable, Equatable {
|
||||
struct SeparatorRoomTimelineItem: TimelineItemProtocol, Identifiable, Equatable {
|
||||
let id: String
|
||||
let text: String
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
struct TextRoomTimelineItem: Identifiable, Equatable {
|
||||
struct TextRoomTimelineItem: TimelineItemProtocol, Identifiable, Equatable {
|
||||
let id: String
|
||||
let senderDisplayName: String
|
||||
let text: String
|
||||
|
||||
@@ -9,7 +9,22 @@
|
||||
import Foundation
|
||||
|
||||
struct TimelineItemFactory {
|
||||
func buildTimelineItemFor(_ message: RoomMessageProtocol) {
|
||||
|
||||
func buildTimelineItemFor(_ roomMessage: RoomMessageProtocol, showSenderDetails: Bool) -> TimelineItemProtocol {
|
||||
switch roomMessage {
|
||||
case let message as TextRoomMessage:
|
||||
return TextRoomTimelineItem(id: message.id,
|
||||
senderDisplayName: message.sender,
|
||||
text: message.content,
|
||||
timestamp: message.originServerTs.formatted(date: .omitted, time: .shortened),
|
||||
shouldShowSenderDetails: showSenderDetails)
|
||||
case let message as ImageRoomMessage:
|
||||
return ImageRoomTimelineItem(id: message.id,
|
||||
senderDisplayName: message.sender,
|
||||
text: message.content,
|
||||
timestamp: message.originServerTs.formatted(date: .omitted, time: .shortened),
|
||||
shouldShowSenderDetails: showSenderDetails)
|
||||
default:
|
||||
fatalError("Unknown room message.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
//
|
||||
// TimelineItemProtocol.swift
|
||||
// ElementX
|
||||
//
|
||||
// Created by Stefan Ceriu on 16/03/2022.
|
||||
// Copyright © 2022 Element. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
protocol TimelineItemProtocol {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
//
|
||||
// TimelineViewFactory.swift
|
||||
// ElementX
|
||||
//
|
||||
// Created by Stefan Ceriu on 16/03/2022.
|
||||
// Copyright © 2022 Element. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
struct TimelineViewFactory {
|
||||
func buildTimelineViewFor(_ timelineItem: TimelineItemProtocol) -> RoomTimelineViewProvider {
|
||||
switch timelineItem {
|
||||
case let textItem as TextRoomTimelineItem:
|
||||
return .text(textItem)
|
||||
case let imageItem as ImageRoomTimelineItem:
|
||||
return .image(imageItem)
|
||||
default:
|
||||
fatalError("Unknown timeline item")
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user