This commit is contained in:
Ali 2022-05-10 20:51:49 +04:00
parent 88d2546303
commit e321dc8173
4 changed files with 44 additions and 6 deletions

View File

@ -6861,6 +6861,7 @@ Sorry for the inconvenience.";
"Chat.NavigationNoChannels" = "You have no unread channels";
"Message.SponsoredLabel" = "sponsored";
"Message.RecommendedLabel" = "recommended";
"Stickers.Favorites" = "Favorites";
"Stickers.Recent" = "Recent";

View File

@ -2,16 +2,23 @@ import Foundation
import Postbox
public final class AdMessageAttribute: MessageAttribute {
public enum MessageType {
case sponsored
case recommended
}
public enum MessageTarget {
case peer(id: EnginePeer.Id, message: EngineMessage.Id?, startParam: String?)
case join(title: String, joinHash: String)
}
public let opaqueId: Data
public let messageType: MessageType
public let target: MessageTarget
public init(opaqueId: Data, target: MessageTarget) {
public init(opaqueId: Data, messageType: MessageType, target: MessageTarget) {
self.opaqueId = opaqueId
self.messageType = messageType
self.target = target
}

View File

@ -7,6 +7,7 @@ private class AdMessagesHistoryContextImpl {
final class CachedMessage: Equatable, Codable {
enum CodingKeys: String, CodingKey {
case opaqueId
case messageType
case text
case textEntities
case media
@ -15,6 +16,11 @@ private class AdMessagesHistoryContextImpl {
case startParam
}
enum MessageType: Int32, Codable {
case sponsored = 0
case recommended = 1
}
enum Target: Equatable, Codable {
enum DecodingError: Error {
case generic
@ -58,6 +64,7 @@ private class AdMessagesHistoryContextImpl {
}
public let opaqueId: Data
public let messageType: MessageType
public let text: String
public let textEntities: [MessageTextEntity]
public let media: [Media]
@ -67,6 +74,7 @@ private class AdMessagesHistoryContextImpl {
public init(
opaqueId: Data,
messageType: MessageType,
text: String,
textEntities: [MessageTextEntity],
media: [Media],
@ -75,6 +83,7 @@ private class AdMessagesHistoryContextImpl {
startParam: String?
) {
self.opaqueId = opaqueId
self.messageType = messageType
self.text = text
self.textEntities = textEntities
self.media = media
@ -87,7 +96,9 @@ private class AdMessagesHistoryContextImpl {
let container = try decoder.container(keyedBy: CodingKeys.self)
self.opaqueId = try container.decode(Data.self, forKey: .opaqueId)
self.messageType = (try container.decodeIfPresent(MessageType.self, forKey: .messageType)) ?? .sponsored
self.text = try container.decode(String.self, forKey: .text)
self.textEntities = try container.decode([MessageTextEntity].self, forKey: .textEntities)
@ -105,6 +116,7 @@ private class AdMessagesHistoryContextImpl {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(self.opaqueId, forKey: .opaqueId)
try container.encode(self.messageType, forKey: .messageType)
try container.encode(self.text, forKey: .text)
try container.encode(self.textEntities, forKey: .textEntities)
@ -124,6 +136,9 @@ private class AdMessagesHistoryContextImpl {
if lhs.opaqueId != rhs.opaqueId {
return false
}
if lhs.messageType != rhs.messageType {
return false
}
if lhs.text != rhs.text {
return false
}
@ -160,7 +175,14 @@ private class AdMessagesHistoryContextImpl {
case let .invite(invite):
target = .join(title: invite.title, joinHash: invite.joinHash)
}
attributes.append(AdMessageAttribute(opaqueId: self.opaqueId, target: target))
let mappedMessageType: AdMessageAttribute.MessageType
switch self.messageType {
case .sponsored:
mappedMessageType = .sponsored
case .recommended:
mappedMessageType = .recommended
}
attributes.append(AdMessageAttribute(opaqueId: self.opaqueId, messageType: mappedMessageType, target: target))
if !self.textEntities.isEmpty {
let attribute = TextEntitiesMessageAttribute(entities: self.textEntities)
attributes.append(attribute)
@ -400,12 +422,14 @@ private class AdMessagesHistoryContextImpl {
for message in messages {
switch message {
case let .sponsoredMessage(_, randomId, fromId, chatInvite, chatInviteHash, channelPost, startParam, message, entities):
case let .sponsoredMessage(flags, randomId, fromId, chatInvite, chatInviteHash, channelPost, startParam, message, entities):
var parsedEntities: [MessageTextEntity] = []
if let entities = entities {
parsedEntities = messageTextEntitiesFromApiEntities(entities)
}
let isRecommended = (flags & (1 << 5)) != 0
let _ = chatInvite
let _ = chatInviteHash
@ -452,6 +476,7 @@ private class AdMessagesHistoryContextImpl {
if let target = target {
parsedMessages.append(CachedMessage(
opaqueId: randomId.makeData(),
messageType: isRecommended ? .recommended : .sponsored,
text: message,
textEntities: parsedEntities,
media: [],

View File

@ -29,8 +29,13 @@ private func dateStringForDay(strings: PresentationStrings, dateTimeFormat: Pres
}
func stringForMessageTimestampStatus(accountPeerId: PeerId, message: Message, dateTimeFormat: PresentationDateTimeFormat, nameDisplayOrder: PresentationPersonNameOrder, strings: PresentationStrings, format: MessageTimestampStatusFormat = .regular) -> String {
if message.adAttribute != nil {
return strings.Message_SponsoredLabel
if let adAttribute = message.adAttribute {
switch adAttribute.messageType {
case .sponsored:
return strings.Message_SponsoredLabel
case .recommended:
return strings.Message_RecommendedLabel
}
}
let timestamp: Int32