mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-16 11:20:18 +00:00
[ASNetworkImageNode] Attach progress image handler even if download starts while already visible
This commit is contained in:
parent
37c7f6f849
commit
362c41ae80
@ -14,6 +14,7 @@
|
|||||||
#import "ASEqualityHelpers.h"
|
#import "ASEqualityHelpers.h"
|
||||||
#import "ASThread.h"
|
#import "ASThread.h"
|
||||||
#import "ASInternalHelpers.h"
|
#import "ASInternalHelpers.h"
|
||||||
|
#import "ASDisplayNodeExtras.h"
|
||||||
|
|
||||||
#if PIN_REMOTE_IMAGE
|
#if PIN_REMOTE_IMAGE
|
||||||
#import "ASPINRemoteImageDownloader.h"
|
#import "ASPINRemoteImageDownloader.h"
|
||||||
@ -211,9 +212,8 @@ static const CGSize kMinReleaseImageOnBackgroundSize = {20.0, 20.0};
|
|||||||
- (void)visibilityDidChange:(BOOL)isVisible
|
- (void)visibilityDidChange:(BOOL)isVisible
|
||||||
{
|
{
|
||||||
[super visibilityDidChange:isVisible];
|
[super visibilityDidChange:isVisible];
|
||||||
|
|
||||||
if (_downloaderImplementsSetPriority) {
|
|
||||||
ASDN::MutexLocker l(_lock);
|
ASDN::MutexLocker l(_lock);
|
||||||
|
if (_downloaderImplementsSetPriority) {
|
||||||
if (_downloadIdentifier != nil) {
|
if (_downloadIdentifier != nil) {
|
||||||
if (isVisible) {
|
if (isVisible) {
|
||||||
[_downloader setPriority:ASImageDownloaderPriorityVisible withDownloadIdentifier:_downloadIdentifier];
|
[_downloader setPriority:ASImageDownloaderPriorityVisible withDownloadIdentifier:_downloadIdentifier];
|
||||||
@ -223,31 +223,7 @@ static const CGSize kMinReleaseImageOnBackgroundSize = {20.0, 20.0};
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_downloaderImplementsSetProgress) {
|
[self _updateProgressImageBlockOnDownloaderIfNeeded];
|
||||||
ASDN::MutexLocker l(_lock);
|
|
||||||
|
|
||||||
if (_downloadIdentifier != nil) {
|
|
||||||
__weak __typeof__(self) weakSelf = self;
|
|
||||||
ASImageDownloaderProgressImage progress = nil;
|
|
||||||
if (isVisible) {
|
|
||||||
progress = ^(UIImage * _Nonnull progressImage, id _Nullable downloadIdentifier) {
|
|
||||||
__typeof__(self) strongSelf = weakSelf;
|
|
||||||
if (strongSelf == nil) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ASDN::MutexLocker l(strongSelf->_lock);
|
|
||||||
//Getting a result back for a different download identifier, download must not have been successfully canceled
|
|
||||||
if (!ASObjectIsEqual(strongSelf->_downloadIdentifier, downloadIdentifier) && downloadIdentifier != nil) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
strongSelf.image = progressImage;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
[_downloader setProgressImageBlock:progress callbackQueue:dispatch_get_main_queue() withDownloadIdentifier:_downloadIdentifier];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)clearFetchedData
|
- (void)clearFetchedData
|
||||||
@ -277,6 +253,32 @@ static const CGSize kMinReleaseImageOnBackgroundSize = {20.0, 20.0};
|
|||||||
|
|
||||||
#pragma mark - Private methods -- only call with lock.
|
#pragma mark - Private methods -- only call with lock.
|
||||||
|
|
||||||
|
- (void)_updateProgressImageBlockOnDownloaderIfNeeded
|
||||||
|
{
|
||||||
|
if (!_downloaderImplementsSetProgress || _downloadIdentifier == nil) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASImageDownloaderProgressImage progress = nil;
|
||||||
|
if (ASInterfaceStateIncludesVisible(self.interfaceState)) {
|
||||||
|
__weak __typeof__(self) weakSelf = self;
|
||||||
|
progress = ^(UIImage * _Nonnull progressImage, id _Nullable downloadIdentifier) {
|
||||||
|
__typeof__(self) strongSelf = weakSelf;
|
||||||
|
if (strongSelf == nil) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASDN::MutexLocker l(strongSelf->_lock);
|
||||||
|
//Getting a result back for a different download identifier, download must not have been successfully canceled
|
||||||
|
if (ASObjectIsEqual(strongSelf->_downloadIdentifier, downloadIdentifier) == NO && downloadIdentifier != nil) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
strongSelf.image = progressImage;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
[_downloader setProgressImageBlock:progress callbackQueue:dispatch_get_main_queue() withDownloadIdentifier:_downloadIdentifier];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)_clearImage
|
- (void)_clearImage
|
||||||
{
|
{
|
||||||
// Destruction of bigger images on the main thread can be expensive
|
// Destruction of bigger images on the main thread can be expensive
|
||||||
@ -335,6 +337,7 @@ static const CGSize kMinReleaseImageOnBackgroundSize = {20.0, 20.0};
|
|||||||
}];
|
}];
|
||||||
#pragma clang diagnostic pop
|
#pragma clang diagnostic pop
|
||||||
}
|
}
|
||||||
|
[self _updateProgressImageBlockOnDownloaderIfNeeded];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user