mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-11-07 17:30:12 +00:00
Fetch pattern data from all sources
This commit is contained in:
parent
cd5935b61d
commit
493ac83891
@ -519,14 +519,28 @@ public class WallpaperGalleryController: ViewController {
|
|||||||
let representation = CachedPatternWallpaperRepresentation(colors: file.settings.colors, intensity: intensity, rotation: file.settings.rotation)
|
let representation = CachedPatternWallpaperRepresentation(colors: file.settings.colors, intensity: intensity, rotation: file.settings.rotation)
|
||||||
|
|
||||||
var data: Data?
|
var data: Data?
|
||||||
|
var thumbnailData: Data?
|
||||||
if let path = strongSelf.context.account.postbox.mediaBox.completedResourcePath(resource), let maybeData = try? Data(contentsOf: URL(fileURLWithPath: path), options: .mappedRead) {
|
if let path = strongSelf.context.account.postbox.mediaBox.completedResourcePath(resource), let maybeData = try? Data(contentsOf: URL(fileURLWithPath: path), options: .mappedRead) {
|
||||||
data = maybeData
|
data = maybeData
|
||||||
} else if let path = strongSelf.context.sharedContext.accountManager.mediaBox.completedResourcePath(resource), let maybeData = try? Data(contentsOf: URL(fileURLWithPath: path), options: .mappedRead) {
|
} else if let path = strongSelf.context.sharedContext.accountManager.mediaBox.completedResourcePath(resource), let maybeData = try? Data(contentsOf: URL(fileURLWithPath: path), options: .mappedRead) {
|
||||||
data = maybeData
|
data = maybeData
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let thumbnailResource = file.file.previewRepresentations.first?.resource
|
||||||
|
|
||||||
|
if let resource = thumbnailResource {
|
||||||
|
if let path = strongSelf.context.account.postbox.mediaBox.completedResourcePath(resource), let maybeData = try? Data(contentsOf: URL(fileURLWithPath: path), options: .mappedRead) {
|
||||||
|
thumbnailData = maybeData
|
||||||
|
} else if let path = strongSelf.context.sharedContext.accountManager.mediaBox.completedResourcePath(resource), let maybeData = try? Data(contentsOf: URL(fileURLWithPath: path), options: .mappedRead) {
|
||||||
|
thumbnailData = maybeData
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if let data = data {
|
if let data = data {
|
||||||
strongSelf.context.sharedContext.accountManager.mediaBox.storeResourceData(resource.id, data: data, synchronous: true)
|
strongSelf.context.sharedContext.accountManager.mediaBox.storeResourceData(resource.id, data: data, synchronous: true)
|
||||||
|
if let thumbnailResource = thumbnailResource, let thumbnailData = thumbnailData {
|
||||||
|
strongSelf.context.sharedContext.accountManager.mediaBox.storeResourceData(thumbnailResource.id, data: thumbnailData, synchronous: true)
|
||||||
|
}
|
||||||
let _ = (strongSelf.context.sharedContext.accountManager.mediaBox.cachedResourceRepresentation(resource, representation: representation, complete: true, fetch: true)
|
let _ = (strongSelf.context.sharedContext.accountManager.mediaBox.cachedResourceRepresentation(resource, representation: representation, complete: true, fetch: true)
|
||||||
|> filter({ $0.complete })
|
|> filter({ $0.complete })
|
||||||
|> take(1)
|
|> take(1)
|
||||||
|
|||||||
@ -391,7 +391,7 @@ private func patternWallpaperDatas(account: Account, accountManager: AccountMana
|
|||||||
let fetchedThumbnail = fetchedMediaResource(mediaBox: account.postbox.mediaBox, reference: representations[smallestIndex].reference)
|
let fetchedThumbnail = fetchedMediaResource(mediaBox: account.postbox.mediaBox, reference: representations[smallestIndex].reference)
|
||||||
let fetchedFullSize = fetchedMediaResource(mediaBox: account.postbox.mediaBox, reference: representations[largestIndex].reference)
|
let fetchedFullSize = fetchedMediaResource(mediaBox: account.postbox.mediaBox, reference: representations[largestIndex].reference)
|
||||||
|
|
||||||
let thumbnailData = Signal<Data?, NoError> { subscriber in
|
let accountThumbnailData = Signal<Data?, NoError> { subscriber in
|
||||||
let fetchedDisposable = fetchedThumbnail.start()
|
let fetchedDisposable = fetchedThumbnail.start()
|
||||||
let thumbnailDisposable = account.postbox.mediaBox.cachedResourceRepresentation(representations[smallestIndex].representation.resource, representation: CachedPatternWallpaperMaskRepresentation(size: size, scaleFromCenter: scaleFromCenter), complete: false, fetch: true).start(next: { next in
|
let thumbnailDisposable = account.postbox.mediaBox.cachedResourceRepresentation(representations[smallestIndex].representation.resource, representation: CachedPatternWallpaperMaskRepresentation(size: size, scaleFromCenter: scaleFromCenter), complete: false, fetch: true).start(next: { next in
|
||||||
subscriber.putNext(next.size == 0 ? nil : try? Data(contentsOf: URL(fileURLWithPath: next.path), options: []))
|
subscriber.putNext(next.size == 0 ? nil : try? Data(contentsOf: URL(fileURLWithPath: next.path), options: []))
|
||||||
@ -408,7 +408,36 @@ private func patternWallpaperDatas(account: Account, accountManager: AccountMana
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let fullSizeData = Signal<(Data?, Bool), NoError> { subscriber in
|
let sharedThumbnailData = Signal<Data?, NoError> { subscriber in
|
||||||
|
let thumbnailDisposable = accountManager.mediaBox.cachedResourceRepresentation(representations[smallestIndex].representation.resource, representation: CachedPatternWallpaperMaskRepresentation(size: size, scaleFromCenter: scaleFromCenter), complete: false, fetch: true).start(next: { next in
|
||||||
|
subscriber.putNext(next.size == 0 ? nil : try? Data(contentsOf: URL(fileURLWithPath: next.path), options: []))
|
||||||
|
}, error: subscriber.putError, completed: subscriber.putCompletion)
|
||||||
|
|
||||||
|
return ActionDisposable {
|
||||||
|
thumbnailDisposable.dispose()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let thumbnailData = combineLatest(accountThumbnailData, sharedThumbnailData)
|
||||||
|
|> map { thumbnailData, sharedThumbnailData -> Data? in
|
||||||
|
return thumbnailData ?? sharedThumbnailData
|
||||||
|
}
|
||||||
|
|> distinctUntilChanged(isEqual: { lhs, rhs in
|
||||||
|
if lhs == nil && rhs == nil {
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|> take(until: { value in
|
||||||
|
if value != nil {
|
||||||
|
return SignalTakeAction(passthrough: true, complete: true)
|
||||||
|
} else {
|
||||||
|
return SignalTakeAction(passthrough: true, complete: false)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
let accountFullSizeData = Signal<(Data?, Bool), NoError> { subscriber in
|
||||||
let fetchedFullSizeDisposable = fetchedFullSize.start()
|
let fetchedFullSizeDisposable = fetchedFullSize.start()
|
||||||
let fullSizeDisposable = account.postbox.mediaBox.cachedResourceRepresentation(representations[largestIndex].representation.resource, representation: CachedPatternWallpaperMaskRepresentation(size: size, scaleFromCenter: scaleFromCenter), complete: false, fetch: true).start(next: { next in
|
let fullSizeDisposable = account.postbox.mediaBox.cachedResourceRepresentation(representations[largestIndex].representation.resource, representation: CachedPatternWallpaperMaskRepresentation(size: size, scaleFromCenter: scaleFromCenter), complete: false, fetch: true).start(next: { next in
|
||||||
subscriber.putNext((next.size == 0 ? nil : try? Data(contentsOf: URL(fileURLWithPath: next.path), options: []), next.complete))
|
subscriber.putNext((next.size == 0 ? nil : try? Data(contentsOf: URL(fileURLWithPath: next.path), options: []), next.complete))
|
||||||
@ -425,6 +454,39 @@ private func patternWallpaperDatas(account: Account, accountManager: AccountMana
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let sharedFullSizeData = Signal<(Data?, Bool), NoError> { subscriber in
|
||||||
|
let fullSizeDisposable = accountManager.mediaBox.cachedResourceRepresentation(representations[largestIndex].representation.resource, representation: CachedPatternWallpaperMaskRepresentation(size: size, scaleFromCenter: scaleFromCenter), complete: false, fetch: true).start(next: { next in
|
||||||
|
subscriber.putNext((next.size == 0 ? nil : try? Data(contentsOf: URL(fileURLWithPath: next.path), options: []), next.complete))
|
||||||
|
}, error: subscriber.putError, completed: subscriber.putCompletion)
|
||||||
|
|
||||||
|
return ActionDisposable {
|
||||||
|
fullSizeDisposable.dispose()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let fullSizeData = combineLatest(accountFullSizeData, sharedFullSizeData)
|
||||||
|
|> map { accountFullSizeData, sharedFullSizeData -> (Data?, Bool) in
|
||||||
|
if accountFullSizeData.0 != nil {
|
||||||
|
return accountFullSizeData
|
||||||
|
} else {
|
||||||
|
return sharedFullSizeData
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|> distinctUntilChanged(isEqual: { lhs, rhs in
|
||||||
|
if lhs.0 == nil && rhs.0 == nil {
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|> take(until: { value in
|
||||||
|
if value.0 != nil {
|
||||||
|
return SignalTakeAction(passthrough: true, complete: true)
|
||||||
|
} else {
|
||||||
|
return SignalTakeAction(passthrough: true, complete: false)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
return thumbnailData |> mapToSignal { thumbnailData in
|
return thumbnailData |> mapToSignal { thumbnailData in
|
||||||
return fullSizeData |> map { (fullSizeData, complete) in
|
return fullSizeData |> map { (fullSizeData, complete) in
|
||||||
return (thumbnailData, fullSizeData, complete)
|
return (thumbnailData, fullSizeData, complete)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user