Add permalink detection and custom attributed string attributes (#536)

* Pass full attributed string to TimelineItems and let the UI level handle blockquote coalescing
* Add permalink detection and attribute embedding within the attributed string
This commit is contained in:
Stefan Ceriu
2023-02-06 16:59:32 +02:00
committed by GitHub
parent 2734a18217
commit f8e6179933
38 changed files with 287 additions and 171 deletions
@@ -115,7 +115,7 @@ class RoomTimelineController: RoomTimelineControllerProtocol {
return .none
}
if let fileURL = item.cachedFileURL {
return .displayFile(fileURL: fileURL, title: item.text)
return .displayFile(fileURL: fileURL, title: item.body)
}
return .none
case let item as VideoRoomTimelineItem:
@@ -125,7 +125,7 @@ class RoomTimelineController: RoomTimelineControllerProtocol {
return .none
}
if let videoURL = item.cachedVideoURL {
return .displayVideo(videoURL: videoURL, title: item.text)
return .displayVideo(videoURL: videoURL, title: item.body)
}
return .none
case let item as FileRoomTimelineItem:
@@ -135,7 +135,7 @@ class RoomTimelineController: RoomTimelineControllerProtocol {
return .none
}
if let fileURL = item.cachedFileURL {
return .displayFile(fileURL: fileURL, title: item.text)
return .displayFile(fileURL: fileURL, title: item.body)
}
return .none
default:
@@ -337,7 +337,7 @@ class RoomTimelineController: RoomTimelineControllerProtocol {
return
}
let fileExtension = movieFileExtension(for: timelineItem.text)
let fileExtension = movieFileExtension(for: timelineItem.body)
switch await mediaProvider.loadFileFromSource(source, fileExtension: fileExtension) {
case .success(let fileURL):
guard let index = timelineItems.firstIndex(where: { $0.id == timelineItem.id }),
@@ -383,7 +383,7 @@ class RoomTimelineController: RoomTimelineControllerProtocol {
}
// This is not great. We could better estimate file extension from the mimetype.
guard let fileExtension = timelineItem.text.split(separator: ".").last else {
guard let fileExtension = timelineItem.body.split(separator: ".").last else {
return
}
switch await mediaProvider.loadFileFromSource(source, fileExtension: String(fileExtension)) {
@@ -411,7 +411,7 @@ class RoomTimelineController: RoomTimelineControllerProtocol {
}
// This is not great. We could better estimate file extension from the mimetype.
guard let fileExtension = timelineItem.text.split(separator: ".").last else {
guard let fileExtension = timelineItem.body.split(separator: ".").last else {
return
}
switch await mediaProvider.loadFileFromSource(source, fileExtension: String(fileExtension)) {