mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-01 04:08:07 +00:00
206 lines
6.3 KiB
Swift
206 lines
6.3 KiB
Swift
import Foundation
|
|
import Postbox
|
|
import TelegramCore
|
|
|
|
public final class VideoMediaResourceAdjustments: Coding, Equatable {
|
|
let data: MemoryBuffer
|
|
let digest: MemoryBuffer
|
|
|
|
init(data: MemoryBuffer, digest: MemoryBuffer) {
|
|
self.data = data
|
|
self.digest = digest
|
|
}
|
|
|
|
public init(decoder: Decoder) {
|
|
self.data = decoder.decodeBytesForKey("d")!
|
|
self.digest = decoder.decodeBytesForKey("h")!
|
|
}
|
|
|
|
public func encode(_ encoder: Encoder) {
|
|
encoder.encodeBytes(self.data, forKey: "d")
|
|
encoder.encodeBytes(self.digest, forKey: "h")
|
|
}
|
|
|
|
public static func ==(lhs: VideoMediaResourceAdjustments, rhs: VideoMediaResourceAdjustments) -> Bool {
|
|
return lhs.data == rhs.data && lhs.digest == rhs.digest
|
|
}
|
|
}
|
|
|
|
public struct VideoLibraryMediaResourceId: MediaResourceId {
|
|
public let localIdentifier: String
|
|
public let adjustmentsDigest: MemoryBuffer?
|
|
|
|
public var uniqueId: String {
|
|
if let adjustmentsDigest = self.adjustmentsDigest {
|
|
return "vi-\(self.localIdentifier.replacingOccurrences(of: "/", with: "_"))-\(adjustmentsDigest.description)"
|
|
} else {
|
|
return "vi-\(self.localIdentifier.replacingOccurrences(of: "/", with: "_"))"
|
|
}
|
|
}
|
|
|
|
public var hashValue: Int {
|
|
return self.localIdentifier.hashValue
|
|
}
|
|
|
|
public func isEqual(to: MediaResourceId) -> Bool {
|
|
if let to = to as? VideoLibraryMediaResourceId {
|
|
return self.localIdentifier == to.localIdentifier
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
}
|
|
|
|
public final class VideoLibraryMediaResource: TelegramMediaResource {
|
|
public let localIdentifier: String
|
|
public let adjustments: VideoMediaResourceAdjustments?
|
|
|
|
public var headerSize: Int32 {
|
|
return 32 * 1024
|
|
}
|
|
|
|
public init(localIdentifier: String, adjustments: VideoMediaResourceAdjustments?) {
|
|
self.localIdentifier = localIdentifier
|
|
self.adjustments = adjustments
|
|
}
|
|
|
|
public required init(decoder: Decoder) {
|
|
self.localIdentifier = decoder.decodeStringForKey("i", orElse: "")
|
|
self.adjustments = decoder.decodeObjectForKey("a", decoder: { VideoMediaResourceAdjustments(decoder: $0) }) as? VideoMediaResourceAdjustments
|
|
}
|
|
|
|
public func encode(_ encoder: Encoder) {
|
|
encoder.encodeString(self.localIdentifier, forKey: "i")
|
|
if let adjustments = self.adjustments {
|
|
encoder.encodeObject(adjustments, forKey: "a")
|
|
} else {
|
|
encoder.encodeNil(forKey: "a")
|
|
}
|
|
}
|
|
|
|
public var id: MediaResourceId {
|
|
return VideoLibraryMediaResourceId(localIdentifier: self.localIdentifier, adjustmentsDigest: self.adjustments?.digest)
|
|
}
|
|
|
|
public func isEqual(to: TelegramMediaResource) -> Bool {
|
|
if let to = to as? VideoLibraryMediaResource {
|
|
return self.localIdentifier == to.localIdentifier && self.adjustments == to.adjustments
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
}
|
|
|
|
public struct LocalFileVideoMediaResourceId: MediaResourceId {
|
|
public let randomId: Int64
|
|
|
|
public var uniqueId: String {
|
|
return "lvi-\(self.randomId)"
|
|
}
|
|
|
|
public var hashValue: Int {
|
|
return self.randomId.hashValue
|
|
}
|
|
|
|
public func isEqual(to: MediaResourceId) -> Bool {
|
|
if let to = to as? LocalFileVideoMediaResourceId {
|
|
return self.randomId == to.randomId
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
}
|
|
|
|
public final class LocalFileVideoMediaResource: TelegramMediaResource {
|
|
public let randomId: Int64
|
|
public let path: String
|
|
public let adjustments: VideoMediaResourceAdjustments?
|
|
|
|
public var headerSize: Int32 {
|
|
return 32 * 1024
|
|
}
|
|
|
|
public init(randomId: Int64, path: String, adjustments: VideoMediaResourceAdjustments?) {
|
|
self.randomId = randomId
|
|
self.path = path
|
|
self.adjustments = adjustments
|
|
}
|
|
|
|
public required init(decoder: Decoder) {
|
|
self.randomId = decoder.decodeInt64ForKey("i", orElse: 0)
|
|
self.path = decoder.decodeStringForKey("p", orElse: "")
|
|
self.adjustments = decoder.decodeObjectForKey("a", decoder: { VideoMediaResourceAdjustments(decoder: $0) }) as? VideoMediaResourceAdjustments
|
|
}
|
|
|
|
public func encode(_ encoder: Encoder) {
|
|
encoder.encodeInt64(self.randomId, forKey: "i")
|
|
encoder.encodeString(self.path, forKey: "p")
|
|
if let adjustments = self.adjustments {
|
|
encoder.encodeObject(adjustments, forKey: "a")
|
|
} else {
|
|
encoder.encodeNil(forKey: "a")
|
|
}
|
|
}
|
|
|
|
public var id: MediaResourceId {
|
|
return LocalFileVideoMediaResourceId(randomId: self.randomId)
|
|
}
|
|
|
|
public func isEqual(to: TelegramMediaResource) -> Bool {
|
|
if let to = to as? LocalFileVideoMediaResource {
|
|
return self.randomId == to.randomId && self.path == to.path && self.adjustments == to.adjustments
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
}
|
|
|
|
public struct PhotoLibraryMediaResourceId: MediaResourceId {
|
|
public let localIdentifier: String
|
|
|
|
public var uniqueId: String {
|
|
return "ph-\(self.localIdentifier.replacingOccurrences(of: "/", with: "_"))"
|
|
}
|
|
|
|
public var hashValue: Int {
|
|
return self.localIdentifier.hashValue
|
|
}
|
|
|
|
public func isEqual(to: MediaResourceId) -> Bool {
|
|
if let to = to as? PhotoLibraryMediaResourceId {
|
|
return self.localIdentifier == to.localIdentifier
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
}
|
|
|
|
public class PhotoLibraryMediaResource: TelegramMediaResource {
|
|
let localIdentifier: String
|
|
|
|
public init(localIdentifier: String) {
|
|
self.localIdentifier = localIdentifier
|
|
}
|
|
|
|
public required init(decoder: Decoder) {
|
|
self.localIdentifier = decoder.decodeStringForKey("i", orElse: "")
|
|
}
|
|
|
|
public func encode(_ encoder: Encoder) {
|
|
encoder.encodeString(self.localIdentifier, forKey: "i")
|
|
}
|
|
|
|
public var id: MediaResourceId {
|
|
return PhotoLibraryMediaResourceId(localIdentifier: self.localIdentifier)
|
|
}
|
|
|
|
public func isEqual(to: TelegramMediaResource) -> Bool {
|
|
if let to = to as? PhotoLibraryMediaResource {
|
|
return self.localIdentifier == to.localIdentifier
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
}
|
|
|