Fix min-avatars

This commit is contained in:
Ali 2021-03-29 22:03:03 +04:00
parent 86f55fa210
commit 524d207eef
3 changed files with 11 additions and 23 deletions

View File

@ -16,7 +16,6 @@ swift_library(
"//submodules/AppBundle:AppBundle", "//submodules/AppBundle:AppBundle",
"//submodules/AccountContext:AccountContext", "//submodules/AccountContext:AccountContext",
"//submodules/Emoji:Emoji", "//submodules/Emoji:Emoji",
"//submodules/ImageCompression:ImageCompression",
"//submodules/TinyThumbnail:TinyThumbnail", "//submodules/TinyThumbnail:TinyThumbnail",
"//submodules/FastBlur:FastBlur", "//submodules/FastBlur:FastBlur",
], ],

View File

@ -6,7 +6,6 @@ import Display
import ImageIO import ImageIO
import TelegramCore import TelegramCore
import SyncCore import SyncCore
import ImageCompression
import TinyThumbnail import TinyThumbnail
import FastBlur import FastBlur
@ -43,6 +42,12 @@ public func peerAvatarImageData(account: Account, peerReference: PeerReference?,
} }
} else { } else {
return Signal { subscriber in return Signal { subscriber in
var emittedFirstData = false
if let miniData = representation?.immediateThumbnailData, let decodedData = decodeTinyThumbnail(data: miniData) {
emittedFirstData = true
subscriber.putNext((decodedData, .blurred))
}
let resourceDataDisposable = resourceData.start(next: { data in let resourceDataDisposable = resourceData.start(next: { data in
if data.complete { if data.complete {
if let dataValue = try? Data(contentsOf: URL(fileURLWithPath: maybeData.path)) { if let dataValue = try? Data(contentsOf: URL(fileURLWithPath: maybeData.path)) {
@ -52,7 +57,9 @@ public func peerAvatarImageData(account: Account, peerReference: PeerReference?,
} }
subscriber.putCompletion() subscriber.putCompletion()
} else { } else {
subscriber.putNext(nil) if !emittedFirstData {
subscriber.putNext(nil)
}
} }
}, error: { error in }, error: { error in
subscriber.putError(error) subscriber.putError(error)
@ -75,24 +82,6 @@ public func peerAvatarImageData(account: Account, peerReference: PeerReference?,
} }
} }
return imageData return imageData
|> mapToSignal { data -> Signal<(Data, PeerAvatarImageType)?, NoError> in
guard let (dataValue, type) = data, case .complete = type else {
return .single(data)
}
if let mappedImage = UIImage(data: dataValue), let miniData = compressImageMiniThumbnail(mappedImage, type: .avatar) {
//print("Demo avatar size: \(miniData.count) bytes")
if let decodedData = decodeTinyThumbnail(data: miniData) {
return Signal<(Data, PeerAvatarImageType)?, NoError>.single((decodedData, .blurred))
|> then(
Signal<(Data, PeerAvatarImageType)?, NoError>.single((dataValue, .complete))
|> delay(1.0, queue: .concurrentDefaultQueue())
)
}
}
return .single(data)
}
} else { } else {
return nil return nil
} }
@ -148,7 +137,7 @@ public func peerAvatarImage(account: Account, peerReference: PeerReference?, aut
let imageContextSize = CGSize(width: 64.0, height: 64.0) let imageContextSize = CGSize(width: 64.0, height: 64.0)
let imageContext = DrawingContext(size: imageContextSize, scale: 1.0, premultiplied: true, clear: true) let imageContext = DrawingContext(size: imageContextSize, scale: 1.0, premultiplied: true, clear: true)
imageContext.withFlippedContext { c in imageContext.withFlippedContext { c in
c.draw(dataImage, in: CGRect(origin: CGPoint(), size: imageContextSize).insetBy(dx: inset, dy: inset)) c.draw(dataImage, in: CGRect(origin: CGPoint(), size: imageContextSize))
} }
telegramFastBlurMore(Int32(imageContext.size.width * imageContext.scale), Int32(imageContext.size.height * imageContext.scale), Int32(imageContext.bytesPerRow), imageContext.bytes) telegramFastBlurMore(Int32(imageContext.size.width * imageContext.scale), Int32(imageContext.size.height * imageContext.scale), Int32(imageContext.bytesPerRow), imageContext.bytes)

View File

@ -277,7 +277,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.sizeSpec == to.sizeSpec && self.volumeId == to.volumeId && self.localId == to.localId return self.datacenterId == to.datacenterId && self.photoId == to.photoId && self.sizeSpec == to.sizeSpec && self.volumeId == to.volumeId && self.localId == to.localId
} else { } else {
return false return false
} }