mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 15:26:40 +00:00
added the strings for the pin banner, the room list and the notification content builder
This commit is contained in:
@@ -66,7 +66,7 @@ nonisolated struct RoomMessageEventStringBuilder {
|
|||||||
message = AttributedString(content.body)
|
message = AttributedString(content.body)
|
||||||
}
|
}
|
||||||
case .gallery(let content):
|
case .gallery(let content):
|
||||||
message = AttributedString(content.body)
|
message = buildGalleryMessage(for: style, content: content)
|
||||||
case .other(_, let body):
|
case .other(_, let body):
|
||||||
message = AttributedString(body)
|
message = AttributedString(body)
|
||||||
}
|
}
|
||||||
@@ -91,6 +91,21 @@ nonisolated struct RoomMessageEventStringBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// A gallery's body is its caption. Notifications fall back to counting the attachments when
|
||||||
|
/// there isn't one, whilst elsewhere it is treated as any other media's caption.
|
||||||
|
private func buildGalleryMessage(for style: Style, content: GalleryMessageContent) -> AttributedString {
|
||||||
|
switch style {
|
||||||
|
case .plain:
|
||||||
|
if content.body.isBlank {
|
||||||
|
AttributedString(L10n.notificationGalleryBody(content.itemtypes.count))
|
||||||
|
} else {
|
||||||
|
AttributedString(content.body)
|
||||||
|
}
|
||||||
|
case .senderPrefixed, .typeBolded:
|
||||||
|
buildMessage(for: style, caption: content.body, type: L10n.commonGallery)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private func buildMessage(for style: Style, caption: String?, type: String) -> AttributedString {
|
private func buildMessage(for style: Style, caption: String?, type: String) -> AttributedString {
|
||||||
guard let caption else {
|
guard let caption else {
|
||||||
return AttributedString(type)
|
return AttributedString(type)
|
||||||
|
|||||||
@@ -207,6 +207,13 @@ nonisolated struct NotificationContentBuilder {
|
|||||||
using: mediaProvider,
|
using: mediaProvider,
|
||||||
mediaSource: .init(source: content.source,
|
mediaSource: .init(source: content.source,
|
||||||
mimeType: content.info?.mimetype))
|
mimeType: content.info?.mimetype))
|
||||||
|
case .gallery(content: let content):
|
||||||
|
// A notification can only show one attachment, so the gallery is represented by its first.
|
||||||
|
if let mediaSource = content.itemtypes.firstPreviewableMediaSource {
|
||||||
|
await addMediaAttachment(notificationContent: ¬ificationContent,
|
||||||
|
using: mediaProvider,
|
||||||
|
mediaSource: mediaSource)
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@@ -362,3 +369,24 @@ private nonisolated struct NotificationIcon {
|
|||||||
groupInfo != nil
|
groupInfo != nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private nonisolated extension [GalleryItemType] {
|
||||||
|
/// The media source of the first attachment that a notification is able to show, skipping the
|
||||||
|
/// types that it can't such as documents.
|
||||||
|
var firstPreviewableMediaSource: MediaSourceProxy? {
|
||||||
|
for itemType in self {
|
||||||
|
switch itemType {
|
||||||
|
case .image(let content):
|
||||||
|
return .init(source: content.source, mimeType: content.info?.mimetype)
|
||||||
|
case .video(let content):
|
||||||
|
return .init(source: content.source, mimeType: content.info?.mimetype)
|
||||||
|
case .audio(let content):
|
||||||
|
return .init(source: content.source, mimeType: content.info?.mimetype)
|
||||||
|
case .file, .other:
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user