Fixed legacy avatar loading

This commit is contained in:
Ilya Laktyushin 2019-05-03 05:45:33 +04:00
parent 7d2836789e
commit 935b095c20
2 changed files with 13 additions and 13 deletions

View File

@ -3,27 +3,30 @@ import Postbox
import TelegramCore import TelegramCore
public func legacyImageLocationUri(resource: MediaResource) -> String? { public func legacyImageLocationUri(resource: MediaResource) -> String? {
if let resource = resource as? CloudFileMediaResource { if let resource = resource as? CloudPeerPhotoSizeMediaResource {
return "\(resource.datacenterId)_\(resource.volumeId)_\(resource.localId)_\(resource.secret)" return resource.id.uniqueId
} }
return nil return nil
} }
private let legacyImageUriExpr = try? NSRegularExpression(pattern: "([-\\d]+)_([-\\d]+)_([-\\d]+)_([-\\d]+)", options: []) private let legacyImageUriExpr = try? NSRegularExpression(pattern: "telegram-peer-photo-size-([-\\d]+)-([-\\d]+)-([-\\d]+)-([-\\d]+)", options: [])
public func resourceFromLegacyImageUri(_ uri: String) -> MediaResource? { public func resourceFromLegacyImageUri(_ uri: String) -> MediaResource? {
guard let legacyImageUriExpr = legacyImageUriExpr else { guard let legacyImageUriExpr = legacyImageUriExpr else {
return nil return nil
} }
let matches = legacyImageUriExpr.matches(in: uri, options: [], range: NSRange(location: 0, length: uri.characters.count)) let matches = legacyImageUriExpr.matches(in: uri, options: [], range: NSRange(location: 0, length: uri.count))
if let match = matches.first { if let match = matches.first {
let nsString = uri as NSString let nsString = uri as NSString
let datacenterId = nsString.substring(with: match.range(at: 1)) let datacenterId = nsString.substring(with: match.range(at: 1))
let volumeId = nsString.substring(with: match.range(at: 2)) let size = nsString.substring(with: match.range(at: 2))
let localId = nsString.substring(with: match.range(at: 3)) let volumeId = nsString.substring(with: match.range(at: 3))
let secret = nsString.substring(with: match.range(at: 4)) let localId = nsString.substring(with: match.range(at: 4))
guard let nDatacenterId = Int(datacenterId) else { guard let nDatacenterId = Int32(datacenterId) else {
return nil
}
guard let nSizeSpec = Int32(size), let sizeSpec = CloudPeerPhotoSizeSpec(rawValue: nSizeSpec) else {
return nil return nil
} }
guard let nVolumeId = Int64(volumeId) else { guard let nVolumeId = Int64(volumeId) else {
@ -32,11 +35,8 @@ public func resourceFromLegacyImageUri(_ uri: String) -> MediaResource? {
guard let nLocalId = Int32(localId) else { guard let nLocalId = Int32(localId) else {
return nil return nil
} }
guard let nSecret = Int64(secret) else {
return nil
}
return CloudFileMediaResource(datacenterId: nDatacenterId, volumeId: nVolumeId, localId: nLocalId, secret: nSecret, size: nil, fileReference: nil) return CloudPeerPhotoSizeMediaResource(datacenterId: nDatacenterId, sizeSpec: sizeSpec, volumeId: nVolumeId, localId: nLocalId)
} }
return nil return nil
} }

View File

@ -49,7 +49,7 @@ final class LegacyPeerAvatarPlaceholderDataSource: TGImageDataSource {
if let account = self.account() { if let account = self.account() {
let signal: Signal<Never, NoError> = Signal { subscriber in let signal: Signal<Never, NoError> = Signal { subscriber in
let args: [AnyHashable : Any] let args: [AnyHashable : Any]
let argumentsString = String(uri[uri.index(uri.startIndex, offsetBy: "placeholder://?".characters.count)...]) let argumentsString = String(uri[uri.index(uri.startIndex, offsetBy: "placeholder://?".count)...])
args = TGStringUtils.argumentDictionary(inUrlString: argumentsString)! args = TGStringUtils.argumentDictionary(inUrlString: argumentsString)!
guard let width = Int((args["w"] as! String)), width > 1 else { guard let width = Int((args["w"] as! String)), width > 1 else {