From 26dd9b05dc441af79d291ae2706463353c1ccb22 Mon Sep 17 00:00:00 2001 From: Ali <> Date: Wed, 17 Mar 2021 12:02:59 +0400 Subject: [PATCH] Demo --- submodules/AvatarNode/BUILD | 2 ++ submodules/AvatarNode/Sources/PeerAvatar.swift | 13 ++++++++++++- .../ImageCompression/Sources/ImageCompression.swift | 9 +++++++-- .../Public/MozjpegBinding/MozjpegBinding.h | 2 +- submodules/MozjpegBinding/Sources/MozjpegBinding.m | 6 +++++- .../Sources/ManagedLocalInputActivities.swift | 9 ++++++++- 6 files changed, 35 insertions(+), 6 deletions(-) diff --git a/submodules/AvatarNode/BUILD b/submodules/AvatarNode/BUILD index 2afd25db42..daabcc8d9a 100644 --- a/submodules/AvatarNode/BUILD +++ b/submodules/AvatarNode/BUILD @@ -16,6 +16,8 @@ swift_library( "//submodules/AppBundle:AppBundle", "//submodules/AccountContext:AccountContext", "//submodules/Emoji:Emoji", + "//submodules/ImageCompression:ImageCompression", + "//submodules/TinyThumbnail:TinyThumbnail", ], visibility = [ "//visibility:public", diff --git a/submodules/AvatarNode/Sources/PeerAvatar.swift b/submodules/AvatarNode/Sources/PeerAvatar.swift index 9fa6c87d07..bed9552f93 100644 --- a/submodules/AvatarNode/Sources/PeerAvatar.swift +++ b/submodules/AvatarNode/Sources/PeerAvatar.swift @@ -6,6 +6,8 @@ import Display import ImageIO import TelegramCore import SyncCore +import ImageCompression +import TinyThumbnail private let roundCorners = { () -> UIImage in let diameter: CGFloat = 60.0 @@ -101,7 +103,7 @@ public func peerAvatarImage(account: Account, peerReference: PeerReference?, aut } let roundedImage = generateImage(displayDimensions, contextGenerator: { size, context -> Void in if let data = data { - if let imageSource = CGImageSourceCreateWithData(data as CFData, nil), let dataImage = CGImageSourceCreateImageAtIndex(imageSource, 0, nil) { + if let imageSource = CGImageSourceCreateWithData(data as CFData, nil), var dataImage = CGImageSourceCreateImageAtIndex(imageSource, 0, nil) { context.clear(CGRect(origin: CGPoint(), size: displayDimensions)) context.setBlendMode(.copy) @@ -109,6 +111,15 @@ public func peerAvatarImage(account: Account, peerReference: PeerReference?, aut context.addEllipse(in: CGRect(origin: CGPoint(), size: displayDimensions).insetBy(dx: inset, dy: inset)) context.clip() } + + let mappedImage = UIImage(cgImage: dataImage) + if let miniData = compressImageMiniThumbnail(mappedImage, type: .avatar) { + if let decodedData = decodeTinyThumbnail(data: miniData) { + if let decodedImage = UIImage(data: decodedData) { + dataImage = decodedImage.cgImage! + } + } + } context.draw(dataImage, in: CGRect(origin: CGPoint(), size: displayDimensions).insetBy(dx: inset, dy: inset)) if round { diff --git a/submodules/ImageCompression/Sources/ImageCompression.swift b/submodules/ImageCompression/Sources/ImageCompression.swift index 0d123acb2f..f70fc5b884 100644 --- a/submodules/ImageCompression/Sources/ImageCompression.swift +++ b/submodules/ImageCompression/Sources/ImageCompression.swift @@ -58,6 +58,11 @@ public func compressImage(_ image: UIImage, quality: Float) -> Data? { return data as Data } -public func compressImageMiniThumbnail(_ image: UIImage) -> Data? { - return compressMiniThumbnail(image) +public enum MiniThumbnailType { + case image + case avatar +} + +public func compressImageMiniThumbnail(_ image: UIImage, type: MiniThumbnailType = .image) -> Data? { + return compressMiniThumbnail(image, type == .avatar) } diff --git a/submodules/MozjpegBinding/Public/MozjpegBinding/MozjpegBinding.h b/submodules/MozjpegBinding/Public/MozjpegBinding/MozjpegBinding.h index 3e7ec4696f..5f3b93e8c1 100644 --- a/submodules/MozjpegBinding/Public/MozjpegBinding/MozjpegBinding.h +++ b/submodules/MozjpegBinding/Public/MozjpegBinding/MozjpegBinding.h @@ -2,4 +2,4 @@ NSData * _Nullable compressJPEGData(UIImage * _Nonnull sourceImage); NSArray * _Nonnull extractJPEGDataScans(NSData * _Nonnull data); -NSData * _Nullable compressMiniThumbnail(UIImage * _Nonnull image); +NSData * _Nullable compressMiniThumbnail(UIImage * _Nonnull image, bool smaller); diff --git a/submodules/MozjpegBinding/Sources/MozjpegBinding.m b/submodules/MozjpegBinding/Sources/MozjpegBinding.m index fa2dd964e2..bb7c4dd256 100644 --- a/submodules/MozjpegBinding/Sources/MozjpegBinding.m +++ b/submodules/MozjpegBinding/Sources/MozjpegBinding.m @@ -146,8 +146,12 @@ NSData * _Nullable compressJPEGData(UIImage * _Nonnull sourceImage) { return result; } -NSData * _Nullable compressMiniThumbnail(UIImage * _Nonnull image) { +NSData * _Nullable compressMiniThumbnail(UIImage * _Nonnull image, bool smaller) { CGSize size = CGSizeMake(40.0f, 40.0f); + if (smaller) { + size.width = 8.0f; + size.height = 8.0f; + } CGSize fittedSize = image.size; if (fittedSize.width > size.width) { fittedSize = CGSizeMake(size.width, (int)((fittedSize.height * size.width / MAX(fittedSize.width, 1.0f)))); diff --git a/submodules/TelegramCore/Sources/ManagedLocalInputActivities.swift b/submodules/TelegramCore/Sources/ManagedLocalInputActivities.swift index 95b5eea8cf..5e977a6dfd 100644 --- a/submodules/TelegramCore/Sources/ManagedLocalInputActivities.swift +++ b/submodules/TelegramCore/Sources/ManagedLocalInputActivities.swift @@ -143,7 +143,14 @@ private func requestActivity(postbox: Postbox, network: Network, accountPeerId: return .complete() } if let channel = peer as? TelegramChannel, case .broadcast = channel.info { - return .complete() + if let activity = activity { + switch activity { + case .speakingInGroupCall: + break + default: + return .complete() + } + } } if let _ = peer as? TelegramUser { if let presence = transaction.getPeerPresence(peerId: peerId) as? TelegramUserPresence {