mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-23 22:55:00 +00:00
Paid media improvements
This commit is contained in:
@@ -31,6 +31,24 @@ private func singleMessageType(message: EngineMessage) -> MessageGroupType {
|
||||
return .generic
|
||||
}
|
||||
|
||||
private func singleExtendedMediaType(extendedMedia: TelegramExtendedMedia) -> MessageGroupType {
|
||||
switch extendedMedia {
|
||||
case let .preview(_, _, videoDuration):
|
||||
if let _ = videoDuration {
|
||||
return .videos
|
||||
} else {
|
||||
return .photos
|
||||
}
|
||||
case let .full(fullMedia):
|
||||
if let _ = fullMedia as? TelegramMediaImage {
|
||||
return .photos
|
||||
} else if let file = fullMedia as? TelegramMediaFile, file.isVideo {
|
||||
return .videos
|
||||
}
|
||||
}
|
||||
return .generic
|
||||
}
|
||||
|
||||
private func messageGroupType(messages: [EngineMessage]) -> MessageGroupType {
|
||||
if messages.isEmpty {
|
||||
return .generic
|
||||
@@ -45,6 +63,20 @@ private func messageGroupType(messages: [EngineMessage]) -> MessageGroupType {
|
||||
return currentType
|
||||
}
|
||||
|
||||
private func paidContentGroupType(paidContent: TelegramMediaPaidContent) -> MessageGroupType {
|
||||
if paidContent.extendedMedia.isEmpty {
|
||||
return .generic
|
||||
}
|
||||
let currentType = singleExtendedMediaType(extendedMedia: paidContent.extendedMedia[0])
|
||||
for i in 1 ..< paidContent.extendedMedia.count {
|
||||
let nextType = singleExtendedMediaType(extendedMedia: paidContent.extendedMedia[i])
|
||||
if nextType != currentType {
|
||||
return .generic
|
||||
}
|
||||
}
|
||||
return currentType
|
||||
}
|
||||
|
||||
public func chatListItemStrings(strings: PresentationStrings, nameDisplayOrder: PresentationPersonNameOrder, dateTimeFormat: PresentationDateTimeFormat, contentSettings: ContentSettings, messages: [EngineMessage], chatPeer: EngineRenderedPeer, accountPeerId: EnginePeer.Id, enableMediaEmoji: Bool = true, isPeerGroup: Bool = false) -> (peer: EnginePeer?, hideAuthor: Bool, messageText: String, spoilers: [NSRange]?, customEmojiRanges: [(NSRange, ChatTextInputTextCustomEmojiAttribute)]?) {
|
||||
let peer: EnginePeer?
|
||||
|
||||
@@ -76,42 +108,59 @@ public func chatListItemStrings(strings: PresentationStrings, nameDisplayOrder:
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
let paidContent = message.media.first(where: { $0 is TelegramMediaPaidContent }) as? TelegramMediaPaidContent
|
||||
|
||||
var textIsReady = false
|
||||
if messages.count > 1 {
|
||||
let groupType = messageGroupType(messages: messages)
|
||||
if messages.count > 1 || (paidContent != nil && (paidContent?.extendedMedia.count ?? 0) > 1) {
|
||||
let groupType: MessageGroupType
|
||||
let count: Int32
|
||||
if let paidContent {
|
||||
groupType = paidContentGroupType(paidContent: paidContent)
|
||||
count = Int32(paidContent.extendedMedia.count)
|
||||
} else {
|
||||
groupType = messageGroupType(messages: messages)
|
||||
count = Int32(messages.count)
|
||||
}
|
||||
switch groupType {
|
||||
case .photos:
|
||||
if !messageText.isEmpty {
|
||||
textIsReady = true
|
||||
} else {
|
||||
messageText = strings.ChatList_MessagePhotos(Int32(messages.count))
|
||||
messageText = strings.ChatList_MessagePhotos(count)
|
||||
textIsReady = true
|
||||
}
|
||||
case .videos:
|
||||
if !messageText.isEmpty {
|
||||
textIsReady = true
|
||||
} else {
|
||||
messageText = strings.ChatList_MessageVideos(Int32(messages.count))
|
||||
messageText = strings.ChatList_MessageVideos(count)
|
||||
textIsReady = true
|
||||
}
|
||||
case .music:
|
||||
if !messageText.isEmpty {
|
||||
textIsReady = true
|
||||
} else {
|
||||
messageText = strings.ChatList_MessageMusic(Int32(messages.count))
|
||||
messageText = strings.ChatList_MessageMusic(count)
|
||||
textIsReady = true
|
||||
}
|
||||
case .files:
|
||||
if !messageText.isEmpty {
|
||||
textIsReady = true
|
||||
} else {
|
||||
messageText = strings.ChatList_MessageFiles(Int32(messages.count))
|
||||
messageText = strings.ChatList_MessageFiles(count)
|
||||
textIsReady = true
|
||||
}
|
||||
case .generic:
|
||||
var messageTypes = Set<MessageGroupType>()
|
||||
for message in messages {
|
||||
messageTypes.insert(singleMessageType(message: message))
|
||||
if let paidContent {
|
||||
for extendedMedia in paidContent.extendedMedia {
|
||||
messageTypes.insert(singleExtendedMediaType(extendedMedia: extendedMedia))
|
||||
}
|
||||
} else {
|
||||
for message in messages {
|
||||
messageTypes.insert(singleMessageType(message: message))
|
||||
}
|
||||
}
|
||||
if messageTypes.count == 2 && messageTypes.contains(.photos) && messageTypes.contains(.videos) {
|
||||
if !messageText.isEmpty {
|
||||
@@ -124,6 +173,26 @@ public func chatListItemStrings(strings: PresentationStrings, nameDisplayOrder:
|
||||
if !textIsReady {
|
||||
for media in message.media {
|
||||
switch media {
|
||||
case let paidContent as TelegramMediaPaidContent:
|
||||
for extendedMedia in paidContent.extendedMedia {
|
||||
let type = singleExtendedMediaType(extendedMedia: extendedMedia)
|
||||
switch type {
|
||||
case .photos:
|
||||
if message.text.isEmpty {
|
||||
messageText = strings.Message_Photo
|
||||
} else if enableMediaEmoji {
|
||||
messageText = "🖼 \(messageText)"
|
||||
}
|
||||
case .videos:
|
||||
if message.text.isEmpty {
|
||||
messageText = strings.Message_Video
|
||||
} else if enableMediaEmoji {
|
||||
messageText = "📹 \(messageText)"
|
||||
}
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
case _ as TelegramMediaImage:
|
||||
if message.text.isEmpty {
|
||||
messageText = strings.Message_Photo
|
||||
@@ -337,12 +406,6 @@ public func chatListItemStrings(strings: PresentationStrings, nameDisplayOrder:
|
||||
if messageText.isEmpty, case let .Loaded(content) = webpage.content {
|
||||
messageText = content.displayUrl
|
||||
}
|
||||
case _ as TelegramMediaPaidContent:
|
||||
if message.text.isEmpty {
|
||||
messageText = "Paid Media"
|
||||
} else {
|
||||
messageText = "🖼 \(messageText)"
|
||||
}
|
||||
default:
|
||||
break
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user