mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-10-31 16:24:11 +00:00
Support sending gallery messages behind a feature flag
Adds the ability to send a gallery message (multiple attachments in one message) via the media upload preview, wired through the timeline controller/proxy to the SDK's sendGallery. Gated by a `galleryEnabled` developer flag (default off), matching Element X Android — with the flag off, attachments are sent as individual messages as before. Extends the community PR #5601, rebased onto develop. Tracking: element-hq/element-meta#3201 Co-authored-by: svetoslav.mitov <svetoslav.mitov@sportinno.com>
This commit is contained in:
@@ -402,6 +402,16 @@ class TimelineController: TimelineControllerProtocol {
|
||||
}
|
||||
}
|
||||
|
||||
func sendGallery(itemInfos: [GalleryItemInfo],
|
||||
caption: String?,
|
||||
formattedCaption: String?,
|
||||
inReplyToEventID: String?) async -> Result<Void, TimelineControllerError> {
|
||||
await activeTimeline.sendGallery(itemInfos: itemInfos,
|
||||
caption: caption,
|
||||
formattedCaption: formattedCaption,
|
||||
inReplyToEventID: inReplyToEventID).mapError(TimelineControllerError.timelineProxyError)
|
||||
}
|
||||
|
||||
// MARK: - Polls
|
||||
|
||||
func createPoll(question: String, answers: [String], maxSelections: Int, pollKind: Poll.Kind) async -> Result<Void, TimelineControllerError> {
|
||||
|
||||
@@ -134,6 +134,11 @@ protocol TimelineControllerProtocol: Sendable {
|
||||
waveform: [Float],
|
||||
requestHandle: @MainActor (SendAttachmentJoinHandleProtocol) -> Void) async -> Result<Void, TimelineControllerError>
|
||||
|
||||
func sendGallery(itemInfos: [GalleryItemInfo],
|
||||
caption: String?,
|
||||
formattedCaption: String?,
|
||||
inReplyToEventID: String?) async -> Result<Void, TimelineControllerError>
|
||||
|
||||
// MARK: - Poll
|
||||
|
||||
func createPoll(question: String, answers: [String], maxSelections: Int, pollKind: Poll.Kind) async -> Result<Void, TimelineControllerError>
|
||||
|
||||
@@ -374,6 +374,30 @@ final class TimelineProxy: TimelineProxyProtocol {
|
||||
return .success(())
|
||||
}
|
||||
|
||||
func sendGallery(itemInfos: [GalleryItemInfo],
|
||||
caption: String?,
|
||||
formattedCaption: String?,
|
||||
inReplyToEventID: String?) async -> Result<Void, TimelineProxyError> {
|
||||
MXLog.info("Sending gallery with \(itemInfos.count) items")
|
||||
|
||||
do {
|
||||
let formatted = formattedCaption.map { FormattedBody(format: .html, body: $0) }
|
||||
let params = GalleryUploadParameters(caption: caption,
|
||||
formattedCaption: formatted,
|
||||
mentions: nil,
|
||||
inReplyTo: inReplyToEventID)
|
||||
|
||||
let handle = try timeline.sendGallery(params: params, itemInfos: itemInfos)
|
||||
try await handle.join()
|
||||
MXLog.info("Finished sending gallery")
|
||||
} catch {
|
||||
MXLog.error("Failed sending gallery with error: \(error)")
|
||||
return .failure(.sdkError(error))
|
||||
}
|
||||
|
||||
return .success(())
|
||||
}
|
||||
|
||||
func sendVoiceMessage(url: URL,
|
||||
audioInfo: AudioInfo,
|
||||
waveform: [Float],
|
||||
|
||||
@@ -110,6 +110,11 @@ protocol TimelineProxyProtocol: Sendable {
|
||||
waveform: [Float],
|
||||
requestHandle: @MainActor (SendAttachmentJoinHandleProtocol) -> Void) async -> Result<Void, TimelineProxyError>
|
||||
|
||||
func sendGallery(itemInfos: [GalleryItemInfo],
|
||||
caption: String?,
|
||||
formattedCaption: String?,
|
||||
inReplyToEventID: String?) async -> Result<Void, TimelineProxyError>
|
||||
|
||||
func sendReadReceipt(for eventID: String, type: ReceiptType) async -> Result<Void, TimelineProxyError>
|
||||
func markAsRead(receiptType: ReceiptType) async -> Result<Void, TimelineProxyError>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user