Files
Swiftgram/submodules/TelegramCore/Sources/SyncCore/SummarizationMessageAttribute.swift
2025-12-29 22:42:58 +04:00

88 lines
2.7 KiB
Swift

import Foundation
import Postbox
import TelegramApi
public final class SummarizationMessageAttribute: Equatable, MessageAttribute {
public struct Summary: Equatable, Codable, PostboxCoding {
public let text: String
public let entities: [MessageTextEntity]
public init(
text: String,
entities: [MessageTextEntity]
) {
self.text = text
self.entities = entities
}
public init(decoder: PostboxDecoder) {
self.text = decoder.decodeStringForKey("text", orElse: "")
self.entities = decoder.decodeObjectArrayWithDecoderForKey("entities")
}
public func encode(_ encoder: PostboxEncoder) {
encoder.encodeString(self.text, forKey: "text")
encoder.encodeObjectArray(self.entities, forKey: "entities")
}
}
public let fromLang: String
public let summary: Summary?
public let translated: [String: Summary]
public init(
fromLang: String,
summary: Summary? = nil,
translated: [String: Summary] = [:]
) {
self.fromLang = fromLang
self.summary = summary
self.translated = translated
}
required public init(decoder: PostboxDecoder) {
self.fromLang = decoder.decodeStringForKey("fl", orElse: "")
self.summary = decoder.decodeObjectForKey("s", decoder: { Summary(decoder: $0) }) as? Summary
self.translated = decoder.decodeObjectDictionaryForKey("t", keyDecoder: { decoder in
return decoder.decodeStringForKey("k", orElse: "")
}, valueDecoder: { decoder in
return Summary(decoder: decoder)
})
}
public func encode(_ encoder: PostboxEncoder) {
encoder.encodeString(self.fromLang, forKey: "fl")
if let summary = self.summary {
encoder.encodeObject(summary, forKey: "s")
} else {
encoder.encodeNil(forKey: "s")
}
encoder.encodeObjectDictionary(self.translated, forKey: "t", keyEncoder: { k, e in
e.encodeString(k, forKey: "k")
})
}
public static func ==(lhs: SummarizationMessageAttribute, rhs: SummarizationMessageAttribute) -> Bool {
if lhs.fromLang != rhs.fromLang {
return false
}
if lhs.summary != rhs.summary {
return false
}
if lhs.translated != rhs.translated {
return false
}
return true
}
}
public extension SummarizationMessageAttribute {
func summaryForLang(_ lang: String?) -> Summary? {
if let lang {
return self.translated[lang]
} else {
return self.summary
}
}
}