mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Ad text
This commit is contained in:
parent
88d2546303
commit
e321dc8173
@ -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";
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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: [],
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user