mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Pretend gif is loaded when its video thumbnail is ready
This commit is contained in:
parent
a8d099068d
commit
2de830df26
@ -152,6 +152,8 @@ public enum FetchManagerPriority: Comparable {
|
||||
public let FetchCompleteRange = IndexSet(integersIn: 0 ..< Int(Int32.max) as Range<Int>)
|
||||
|
||||
public protocol FetchManager {
|
||||
var queue: Queue { get }
|
||||
|
||||
func interactivelyFetched(category: FetchManagerCategory, location: FetchManagerLocation, locationKey: FetchManagerLocationKey, mediaReference: AnyMediaReference?, resourceReference: MediaResourceReference, ranges: IndexSet, statsCategory: MediaResourceStatsCategory, elevatedPriority: Bool, userInitiated: Bool, priority: FetchManagerPriority, storeToDownloadsPeerType: MediaAutoDownloadPeerType?) -> Signal<Void, NoError>
|
||||
func cancelInteractiveFetches(category: FetchManagerCategory, location: FetchManagerLocation, locationKey: FetchManagerLocationKey, resource: MediaResource)
|
||||
func fetchStatus(category: FetchManagerCategory, location: FetchManagerLocation, locationKey: FetchManagerLocationKey, resource: MediaResource) -> Signal<MediaResourceStatus, NoError>
|
||||
|
@ -60,6 +60,31 @@ public func messageMediaImageCancelInteractiveFetch(context: AccountContext, mes
|
||||
context.fetchManager.cancelInteractiveFetches(category: .image, location: .chat(messageId.peerId), locationKey: .messageId(messageId), resource: resource)
|
||||
}
|
||||
|
||||
public func messageMediaFileStatus(context: AccountContext, messageId: MessageId, file: TelegramMediaFile) -> Signal<MediaResourceStatus, NoError> {
|
||||
return context.fetchManager.fetchStatus(category: fetchCategoryForFile(file), location: .chat(messageId.peerId), locationKey: .messageId(messageId), resource: file.resource)
|
||||
public func messageMediaFileStatus(context: AccountContext, messageId: MessageId, file: TelegramMediaFile, adjustForVideoThumbnail: Bool = false) -> Signal<MediaResourceStatus, NoError> {
|
||||
let fileStatus = context.fetchManager.fetchStatus(category: fetchCategoryForFile(file), location: .chat(messageId.peerId), locationKey: .messageId(messageId), resource: file.resource)
|
||||
if !adjustForVideoThumbnail {
|
||||
return fileStatus
|
||||
}
|
||||
|
||||
var thumbnailStatus: Signal<MediaResourceStatus?, NoError> = .single(nil)
|
||||
if let videoThumbnail = file.videoThumbnails.first {
|
||||
thumbnailStatus = context.account.postbox.mediaBox.resourceStatus(videoThumbnail.resource)
|
||||
|> map(Optional.init)
|
||||
}
|
||||
|
||||
return combineLatest(queue: context.fetchManager.queue,
|
||||
fileStatus,
|
||||
thumbnailStatus
|
||||
)
|
||||
|> map { fileStatus, thumbnailStatus -> MediaResourceStatus in
|
||||
guard let thumbnailStatus = thumbnailStatus else {
|
||||
return fileStatus
|
||||
}
|
||||
if case .Local = thumbnailStatus {
|
||||
return thumbnailStatus
|
||||
} else {
|
||||
return fileStatus
|
||||
}
|
||||
}
|
||||
|> distinctUntilChanged
|
||||
}
|
||||
|
@ -653,7 +653,7 @@ final class ChatMessageInteractiveMediaNode: ASDisplayNode, GalleryItemTransitio
|
||||
}
|
||||
}
|
||||
} else if let file = media as? TelegramMediaFile {
|
||||
updatedStatusSignal = combineLatest(messageMediaFileStatus(context: context, messageId: message.id, file: file), context.account.pendingMessageManager.pendingMessageStatus(message.id) |> map { $0.0 })
|
||||
updatedStatusSignal = combineLatest(messageMediaFileStatus(context: context, messageId: message.id, file: file, adjustForVideoThumbnail: true), context.account.pendingMessageManager.pendingMessageStatus(message.id) |> map { $0.0 })
|
||||
|> map { resourceStatus, pendingStatus -> (MediaResourceStatus, MediaResourceStatus?) in
|
||||
if let pendingStatus = pendingStatus {
|
||||
let adjustedProgress = max(pendingStatus.progress, 0.027)
|
||||
|
@ -460,7 +460,7 @@ private final class FetchManagerCategoryContext {
|
||||
}
|
||||
|
||||
public final class FetchManagerImpl: FetchManager {
|
||||
private let queue = Queue.mainQueue()
|
||||
public let queue = Queue.mainQueue()
|
||||
private let postbox: Postbox
|
||||
private let storeManager: DownloadedMediaStoreManager?
|
||||
private var nextEpisodeId: Int32 = 0
|
||||
|
Loading…
x
Reference in New Issue
Block a user