mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-08-08 08:31:13 +00:00
Fix resource hashes
This commit is contained in:
parent
2ad13066c5
commit
553d9d793f
@ -104,9 +104,10 @@ private struct CachedMediaResourceRepresentationKey: Hashable {
|
|||||||
static func ==(lhs: CachedMediaResourceRepresentationKey, rhs: CachedMediaResourceRepresentationKey) -> Bool {
|
static func ==(lhs: CachedMediaResourceRepresentationKey, rhs: CachedMediaResourceRepresentationKey) -> Bool {
|
||||||
return lhs.resourceId.isEqual(to: rhs.resourceId) && lhs.representation.isEqual(to: rhs.representation)
|
return lhs.resourceId.isEqual(to: rhs.resourceId) && lhs.representation.isEqual(to: rhs.representation)
|
||||||
}
|
}
|
||||||
|
|
||||||
var hashValue: Int {
|
func hash(into hasher: inout Hasher) {
|
||||||
return self.resourceId.hashValue
|
hasher.combine(self.resourceId.hashValue)
|
||||||
|
hasher.combine(self.representation.uniqueId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import Postbox
|
import Postbox
|
||||||
|
|
||||||
public struct CloudFileMediaResourceId: MediaResourceId {
|
public struct CloudFileMediaResourceId: MediaResourceId, Hashable, Equatable {
|
||||||
let datacenterId: Int
|
let datacenterId: Int
|
||||||
let volumeId: Int64
|
let volumeId: Int64
|
||||||
let localId: Int32
|
let localId: Int32
|
||||||
@ -18,13 +18,9 @@ public struct CloudFileMediaResourceId: MediaResourceId {
|
|||||||
return "telegram-cloud-file-\(self.datacenterId)-\(self.volumeId)-\(self.localId)-\(self.secret)"
|
return "telegram-cloud-file-\(self.datacenterId)-\(self.volumeId)-\(self.localId)-\(self.secret)"
|
||||||
}
|
}
|
||||||
|
|
||||||
public var hashValue: Int {
|
|
||||||
return self.secret.hashValue
|
|
||||||
}
|
|
||||||
|
|
||||||
public func isEqual(to: MediaResourceId) -> Bool {
|
public func isEqual(to: MediaResourceId) -> Bool {
|
||||||
if let to = to as? CloudFileMediaResourceId {
|
if let to = to as? CloudFileMediaResourceId {
|
||||||
return self.datacenterId == to.datacenterId && self.volumeId == to.volumeId && self.localId == to.localId && self.secret == to.secret
|
return self == to
|
||||||
} else {
|
} else {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -91,7 +87,7 @@ public final class CloudFileMediaResource: TelegramMediaResource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct CloudPhotoSizeMediaResourceId: MediaResourceId, Hashable {
|
public struct CloudPhotoSizeMediaResourceId: MediaResourceId, Hashable, Equatable {
|
||||||
let datacenterId: Int32
|
let datacenterId: Int32
|
||||||
let photoId: Int64
|
let photoId: Int64
|
||||||
let sizeSpec: String
|
let sizeSpec: String
|
||||||
@ -108,7 +104,7 @@ public struct CloudPhotoSizeMediaResourceId: MediaResourceId, Hashable {
|
|||||||
|
|
||||||
public func isEqual(to: MediaResourceId) -> Bool {
|
public func isEqual(to: MediaResourceId) -> Bool {
|
||||||
if let to = to as? CloudPhotoSizeMediaResourceId {
|
if let to = to as? CloudPhotoSizeMediaResourceId {
|
||||||
return self.datacenterId == to.datacenterId && self.photoId == to.photoId && self.sizeSpec == to.sizeSpec
|
return self == to
|
||||||
} else {
|
} else {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -175,7 +171,7 @@ public final class CloudPhotoSizeMediaResource: TelegramMediaResource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct CloudDocumentSizeMediaResourceId: MediaResourceId, Hashable {
|
public struct CloudDocumentSizeMediaResourceId: MediaResourceId, Hashable, Equatable {
|
||||||
let datacenterId: Int32
|
let datacenterId: Int32
|
||||||
let documentId: Int64
|
let documentId: Int64
|
||||||
let sizeSpec: String
|
let sizeSpec: String
|
||||||
@ -192,7 +188,7 @@ public struct CloudDocumentSizeMediaResourceId: MediaResourceId, Hashable {
|
|||||||
|
|
||||||
public func isEqual(to: MediaResourceId) -> Bool {
|
public func isEqual(to: MediaResourceId) -> Bool {
|
||||||
if let to = to as? CloudDocumentSizeMediaResourceId {
|
if let to = to as? CloudDocumentSizeMediaResourceId {
|
||||||
return self.datacenterId == to.datacenterId && self.documentId == to.documentId && self.sizeSpec == to.sizeSpec
|
return self == to
|
||||||
} else {
|
} else {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -252,7 +248,7 @@ public enum CloudPeerPhotoSizeSpec: Int32 {
|
|||||||
case fullSize
|
case fullSize
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct CloudPeerPhotoSizeMediaResourceId: MediaResourceId, Hashable {
|
public struct CloudPeerPhotoSizeMediaResourceId: MediaResourceId, Hashable, Equatable {
|
||||||
let datacenterId: Int32
|
let datacenterId: Int32
|
||||||
let photoId: Int64?
|
let photoId: Int64?
|
||||||
let sizeSpec: CloudPeerPhotoSizeSpec
|
let sizeSpec: CloudPeerPhotoSizeSpec
|
||||||
@ -277,7 +273,7 @@ public struct CloudPeerPhotoSizeMediaResourceId: MediaResourceId, Hashable {
|
|||||||
|
|
||||||
public func isEqual(to: MediaResourceId) -> Bool {
|
public func isEqual(to: MediaResourceId) -> Bool {
|
||||||
if let to = to as? CloudPeerPhotoSizeMediaResourceId {
|
if let to = to as? CloudPeerPhotoSizeMediaResourceId {
|
||||||
return self.datacenterId == to.datacenterId && self.photoId == to.photoId && self.sizeSpec == to.sizeSpec && self.volumeId == to.volumeId && self.localId == to.localId
|
return self == to
|
||||||
} else {
|
} else {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -340,7 +336,7 @@ public final class CloudPeerPhotoSizeMediaResource: TelegramMediaResource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct CloudStickerPackThumbnailMediaResourceId: MediaResourceId, Hashable {
|
public struct CloudStickerPackThumbnailMediaResourceId: MediaResourceId, Hashable, Equatable {
|
||||||
let datacenterId: Int32
|
let datacenterId: Int32
|
||||||
let thumbVersion: Int32?
|
let thumbVersion: Int32?
|
||||||
let volumeId: Int64?
|
let volumeId: Int64?
|
||||||
@ -363,7 +359,7 @@ public struct CloudStickerPackThumbnailMediaResourceId: MediaResourceId, Hashabl
|
|||||||
|
|
||||||
public func isEqual(to: MediaResourceId) -> Bool {
|
public func isEqual(to: MediaResourceId) -> Bool {
|
||||||
if let to = to as? CloudStickerPackThumbnailMediaResourceId {
|
if let to = to as? CloudStickerPackThumbnailMediaResourceId {
|
||||||
return self.datacenterId == to.datacenterId && self.volumeId == to.volumeId && self.localId == to.localId
|
return self == to
|
||||||
} else {
|
} else {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -422,7 +418,7 @@ public final class CloudStickerPackThumbnailMediaResource: TelegramMediaResource
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct CloudDocumentMediaResourceId: MediaResourceId {
|
public struct CloudDocumentMediaResourceId: MediaResourceId, Hashable, Equatable {
|
||||||
public let datacenterId: Int
|
public let datacenterId: Int
|
||||||
public let fileId: Int64
|
public let fileId: Int64
|
||||||
|
|
||||||
@ -435,13 +431,9 @@ public struct CloudDocumentMediaResourceId: MediaResourceId {
|
|||||||
return "telegram-cloud-document-\(self.datacenterId)-\(self.fileId)"
|
return "telegram-cloud-document-\(self.datacenterId)-\(self.fileId)"
|
||||||
}
|
}
|
||||||
|
|
||||||
public var hashValue: Int {
|
|
||||||
return self.fileId.hashValue
|
|
||||||
}
|
|
||||||
|
|
||||||
public func isEqual(to: MediaResourceId) -> Bool {
|
public func isEqual(to: MediaResourceId) -> Bool {
|
||||||
if let to = to as? CloudDocumentMediaResourceId {
|
if let to = to as? CloudDocumentMediaResourceId {
|
||||||
return self.datacenterId == to.datacenterId && self.fileId == to.fileId
|
return self == to
|
||||||
} else {
|
} else {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -512,20 +504,16 @@ public final class CloudDocumentMediaResource: TelegramMediaResource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct LocalFileMediaResourceId: MediaResourceId {
|
public struct LocalFileMediaResourceId: MediaResourceId, Hashable, Equatable {
|
||||||
public let fileId: Int64
|
public let fileId: Int64
|
||||||
|
|
||||||
public var uniqueId: String {
|
public var uniqueId: String {
|
||||||
return "telegram-local-file-\(self.fileId)"
|
return "telegram-local-file-\(self.fileId)"
|
||||||
}
|
}
|
||||||
|
|
||||||
public var hashValue: Int {
|
|
||||||
return self.fileId.hashValue
|
|
||||||
}
|
|
||||||
|
|
||||||
public func isEqual(to: MediaResourceId) -> Bool {
|
public func isEqual(to: MediaResourceId) -> Bool {
|
||||||
if let to = to as? LocalFileMediaResourceId {
|
if let to = to as? LocalFileMediaResourceId {
|
||||||
return self.fileId == to.fileId
|
return self == to
|
||||||
} else {
|
} else {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -577,20 +565,16 @@ public class LocalFileMediaResource: TelegramMediaResource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct LocalFileReferenceMediaResourceId: MediaResourceId {
|
public struct LocalFileReferenceMediaResourceId: MediaResourceId, Hashable, Equatable {
|
||||||
public let randomId: Int64
|
public let randomId: Int64
|
||||||
|
|
||||||
public var uniqueId: String {
|
public var uniqueId: String {
|
||||||
return "local-file-\(self.randomId)"
|
return "local-file-\(self.randomId)"
|
||||||
}
|
}
|
||||||
|
|
||||||
public var hashValue: Int {
|
|
||||||
return self.randomId.hashValue
|
|
||||||
}
|
|
||||||
|
|
||||||
public func isEqual(to: MediaResourceId) -> Bool {
|
public func isEqual(to: MediaResourceId) -> Bool {
|
||||||
if let to = to as? LocalFileReferenceMediaResourceId {
|
if let to = to as? LocalFileReferenceMediaResourceId {
|
||||||
return self.randomId == to.randomId
|
return self == to
|
||||||
} else {
|
} else {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -641,21 +625,17 @@ public class LocalFileReferenceMediaResource: TelegramMediaResource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct HttpReferenceMediaResourceId: MediaResourceId {
|
public struct HttpReferenceMediaResourceId: MediaResourceId, Hashable, Equatable {
|
||||||
public let url: String
|
public let url: String
|
||||||
|
|
||||||
public func isEqual(to: MediaResourceId) -> Bool {
|
public func isEqual(to: MediaResourceId) -> Bool {
|
||||||
if let to = to as? HttpReferenceMediaResourceId {
|
if let to = to as? HttpReferenceMediaResourceId {
|
||||||
return self.url == to.url
|
return self == to
|
||||||
} else {
|
} else {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public var hashValue: Int {
|
|
||||||
return self.url.hashValue
|
|
||||||
}
|
|
||||||
|
|
||||||
public var uniqueId: String {
|
public var uniqueId: String {
|
||||||
return "http-\(persistentHash32(self.url))"
|
return "http-\(persistentHash32(self.url))"
|
||||||
}
|
}
|
||||||
@ -701,23 +681,19 @@ public final class HttpReferenceMediaResource: TelegramMediaResource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct WebFileReferenceMediaResourceId: MediaResourceId {
|
public struct WebFileReferenceMediaResourceId: MediaResourceId, Hashable, Equatable {
|
||||||
public let url: String
|
public let url: String
|
||||||
public let accessHash: Int64
|
public let accessHash: Int64
|
||||||
public let size: Int32
|
public let size: Int32
|
||||||
|
|
||||||
public func isEqual(to: MediaResourceId) -> Bool {
|
public func isEqual(to: MediaResourceId) -> Bool {
|
||||||
if let to = to as? WebFileReferenceMediaResourceId {
|
if let to = to as? WebFileReferenceMediaResourceId {
|
||||||
return self.url == to.url && size == to.size && accessHash == to.accessHash
|
return self == to
|
||||||
} else {
|
} else {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public var hashValue: Int {
|
|
||||||
return self.url.hashValue
|
|
||||||
}
|
|
||||||
|
|
||||||
public var uniqueId: String {
|
public var uniqueId: String {
|
||||||
return "proxy-\(persistentHash32(self.url))-\(size)-\(accessHash)"
|
return "proxy-\(persistentHash32(self.url))-\(size)-\(accessHash)"
|
||||||
}
|
}
|
||||||
@ -760,7 +736,7 @@ public final class WebFileReferenceMediaResource: TelegramMediaResource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public struct SecretFileMediaResourceId: MediaResourceId {
|
public struct SecretFileMediaResourceId: MediaResourceId, Hashable, Equatable {
|
||||||
public let fileId: Int64
|
public let fileId: Int64
|
||||||
public let datacenterId: Int32
|
public let datacenterId: Int32
|
||||||
|
|
||||||
@ -773,13 +749,9 @@ public struct SecretFileMediaResourceId: MediaResourceId {
|
|||||||
self.datacenterId = datacenterId
|
self.datacenterId = datacenterId
|
||||||
}
|
}
|
||||||
|
|
||||||
public var hashValue: Int {
|
|
||||||
return self.fileId.hashValue
|
|
||||||
}
|
|
||||||
|
|
||||||
public func isEqual(to: MediaResourceId) -> Bool {
|
public func isEqual(to: MediaResourceId) -> Bool {
|
||||||
if let to = to as? SecretFileMediaResourceId {
|
if let to = to as? SecretFileMediaResourceId {
|
||||||
return self.fileId == to.fileId && self.datacenterId == to.datacenterId
|
return self == to
|
||||||
} else {
|
} else {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user