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 let FetchCompleteRange = IndexSet(integersIn: 0 ..< Int(Int32.max) as Range<Int>)
|
||||||
|
|
||||||
public protocol FetchManager {
|
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 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 cancelInteractiveFetches(category: FetchManagerCategory, location: FetchManagerLocation, locationKey: FetchManagerLocationKey, resource: MediaResource)
|
||||||
func fetchStatus(category: FetchManagerCategory, location: FetchManagerLocation, locationKey: FetchManagerLocationKey, resource: MediaResource) -> Signal<MediaResourceStatus, NoError>
|
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)
|
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> {
|
public func messageMediaFileStatus(context: AccountContext, messageId: MessageId, file: TelegramMediaFile, adjustForVideoThumbnail: Bool = false) -> Signal<MediaResourceStatus, NoError> {
|
||||||
return context.fetchManager.fetchStatus(category: fetchCategoryForFile(file), location: .chat(messageId.peerId), locationKey: .messageId(messageId), resource: file.resource)
|
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 {
|
} 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
|
|> map { resourceStatus, pendingStatus -> (MediaResourceStatus, MediaResourceStatus?) in
|
||||||
if let pendingStatus = pendingStatus {
|
if let pendingStatus = pendingStatus {
|
||||||
let adjustedProgress = max(pendingStatus.progress, 0.027)
|
let adjustedProgress = max(pendingStatus.progress, 0.027)
|
||||||
|
@ -460,7 +460,7 @@ private final class FetchManagerCategoryContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public final class FetchManagerImpl: FetchManager {
|
public final class FetchManagerImpl: FetchManager {
|
||||||
private let queue = Queue.mainQueue()
|
public let queue = Queue.mainQueue()
|
||||||
private let postbox: Postbox
|
private let postbox: Postbox
|
||||||
private let storeManager: DownloadedMediaStoreManager?
|
private let storeManager: DownloadedMediaStoreManager?
|
||||||
private var nextEpisodeId: Int32 = 0
|
private var nextEpisodeId: Int32 = 0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user