[WIP] Modern cache

This commit is contained in:
Ali
2022-12-17 00:17:31 +04:00
parent 792e0091bc
commit 614c74b0b0
189 changed files with 1464 additions and 848 deletions

View File

@@ -238,7 +238,23 @@ private final class FetchManagerCategoryContext {
activeContext.disposable?.dispose()
let postbox = self.postbox
Logger.shared.log("FetchManager", "Begin fetching \(entry.resourceReference.resource.id.stringRepresentation) ranges: \(String(describing: parsedRanges))")
activeContext.disposable = (fetchedMediaResource(mediaBox: postbox.mediaBox, reference: entry.resourceReference, ranges: parsedRanges, statsCategory: entry.statsCategory, reportResultStatus: true, continueInBackground: entry.userInitiated)
var userLocation: MediaResourceUserLocation = .other
switch entry.id.location {
case let .chat(peerId):
userLocation = .peer(peerId)
}
var userContentType: MediaResourceUserContentType = .other
switch entry.statsCategory {
case .image:
userContentType = .image
case .video:
userContentType = .video
default:
userContentType = .other
}
activeContext.disposable = (fetchedMediaResource(mediaBox: postbox.mediaBox, userLocation: userLocation, userContentType: userContentType, reference: entry.resourceReference, ranges: parsedRanges, statsCategory: entry.statsCategory, reportResultStatus: true, continueInBackground: entry.userInitiated)
|> mapToSignal { type -> Signal<FetchResourceSourceType, FetchResourceError> in
if filterDownloadStatsEntry(entry: entry), case let .message(message, _) = entry.mediaReference, let messageId = message.id, case .remote = type {
let _ = addRecentDownloadItem(postbox: postbox, item: RecentDownloadItem(messageId: messageId, resourceId: entry.resourceReference.resource.id.stringRepresentation, timestamp: Int32(Date().timeIntervalSince1970), isSeen: false)).start()
@@ -349,11 +365,26 @@ private final class FetchManagerCategoryContext {
if restart {
activeContext.ranges = ranges
var userLocation: MediaResourceUserLocation = .other
switch entry.id.location {
case let .chat(peerId):
userLocation = .peer(peerId)
}
var userContentType: MediaResourceUserContentType = .other
switch entry.statsCategory {
case .image:
userContentType = .image
case .video:
userContentType = .video
default:
userContentType = .other
}
let entryCompleted = self.entryCompleted
let storeManager = self.storeManager
activeContext.disposable?.dispose()
if isVideoPreload {
activeContext.disposable = (preloadVideoResource(postbox: self.postbox, resourceReference: entry.resourceReference, duration: 4.0)
activeContext.disposable = (preloadVideoResource(postbox: self.postbox, userLocation: userLocation, userContentType: userContentType, resourceReference: entry.resourceReference, duration: 4.0)
|> castError(FetchResourceError.self)
|> map { _ -> FetchResourceSourceType in }
|> then(.single(.local))
@@ -364,7 +395,23 @@ private final class FetchManagerCategoryContext {
} else {
let postbox = self.postbox
Logger.shared.log("FetchManager", "Begin fetching \(entry.resourceReference.resource.id.stringRepresentation) ranges: \(String(describing: parsedRanges))")
activeContext.disposable = (fetchedMediaResource(mediaBox: postbox.mediaBox, reference: entry.resourceReference, ranges: parsedRanges, statsCategory: entry.statsCategory, reportResultStatus: true, continueInBackground: entry.userInitiated)
var userLocation: MediaResourceUserLocation = .other
switch entry.id.location {
case let .chat(peerId):
userLocation = .peer(peerId)
}
var userContentType: MediaResourceUserContentType = .other
switch entry.statsCategory {
case .image:
userContentType = .image
case .video:
userContentType = .video
default:
userContentType = .other
}
activeContext.disposable = (fetchedMediaResource(mediaBox: postbox.mediaBox, userLocation: userLocation, userContentType: userContentType, reference: entry.resourceReference, ranges: parsedRanges, statsCategory: entry.statsCategory, reportResultStatus: true, continueInBackground: entry.userInitiated)
|> mapToSignal { type -> Signal<FetchResourceSourceType, FetchResourceError> in
if filterDownloadStatsEntry(entry: entry), case let .message(message, _) = entry.mediaReference, let messageId = message.id, case .remote = type {
let _ = addRecentDownloadItem(postbox: postbox, item: RecentDownloadItem(messageId: messageId, resourceId: entry.resourceReference.resource.id.stringRepresentation, timestamp: Int32(Date().timeIntervalSince1970), isSeen: false)).start()