Swiftgram/submodules/SyncCore/Sources/SecureFileMediaResource.swift

69 lines
2.3 KiB
Swift

import Foundation
import Postbox
public struct SecureFileMediaResourceId: MediaResourceId {
public let fileId: Int64
public init(fileId: Int64) {
self.fileId = fileId
}
public var uniqueId: String {
return "telegram-secure-file-\(self.fileId)"
}
public var hashValue: Int {
return self.fileId.hashValue
}
public func isEqual(to: MediaResourceId) -> Bool {
if let to = to as? SecureFileMediaResourceId {
return self.fileId == to.fileId
} else {
return false
}
}
}
public final class SecureFileMediaResource: TelegramMediaResource {
public let file: SecureIdFileReference
public var id: MediaResourceId {
return SecureFileMediaResourceId(fileId: self.file.id)
}
public var datacenterId: Int {
return Int(self.file.datacenterId)
}
public var size: Int? {
return Int(self.file.size)
}
public init(file: SecureIdFileReference) {
self.file = file
}
public required init(decoder: PostboxDecoder) {
self.file = SecureIdFileReference(id: decoder.decodeInt64ForKey("f", orElse: 0), accessHash: decoder.decodeInt64ForKey("a", orElse: 0), size: decoder.decodeInt32ForKey("n", orElse: 0), datacenterId: decoder.decodeInt32ForKey("d", orElse: 0), timestamp: decoder.decodeInt32ForKey("t", orElse: 0), fileHash: decoder.decodeBytesForKey("h")?.makeData() ?? Data(), encryptedSecret: decoder.decodeBytesForKey("s")?.makeData() ?? Data())
}
public func encode(_ encoder: PostboxEncoder) {
encoder.encodeInt64(self.file.id, forKey: "f")
encoder.encodeInt64(self.file.accessHash, forKey: "a")
encoder.encodeInt32(self.file.size, forKey: "n")
encoder.encodeInt32(self.file.datacenterId, forKey: "d")
encoder.encodeInt32(self.file.timestamp, forKey: "t")
encoder.encodeBytes(MemoryBuffer(data: self.file.fileHash), forKey: "h")
encoder.encodeBytes(MemoryBuffer(data: self.file.encryptedSecret), forKey: "s")
}
public func isEqual(to: MediaResource) -> Bool {
if let to = to as? SecureFileMediaResource {
return self.file == to.file
} else {
return false
}
}
}