1
1
mirror of https://github.com/danbee/persephone synced 2025-03-04 08:39:11 +00:00

Refactor cover art refresh using Promises

This commit is contained in:
Daniel Barber 2020-02-12 21:10:26 -05:00
parent ff3c7c4856
commit 3b4b5f5b5c
Signed by: danbarber
GPG Key ID: 931D8112E0103DD8

View File

@ -7,50 +7,77 @@
// //
import Foundation import Foundation
import PromiseKit
import Kingfisher import Kingfisher
struct CoverArtService { struct CoverArtService {
let song: Song let song: Song
let provider: MPDAlbumArtImageDataProvider
func refresh(callback: @escaping () -> Void?) { init(song: Song) {
let provider = MPDAlbumArtImageDataProvider( self.song = song
provider = MPDAlbumArtImageDataProvider(
songUri: song.mpdSong.uriString, songUri: song.mpdSong.uriString,
cacheKey: song.album.hash cacheKey: song.album.hash
) )
}
_ = KingfisherManager.shared.retrieveImage(
with: .provider(provider), func refreshAlbumListArt() -> Promise<Any> {
options: [ return Promise<Any> { seal in
.forceRefresh, _ = KingfisherManager.shared.retrieveImage(
.memoryCacheExpiration(.never), with: .provider(provider),
.processor(DownsamplingImageProcessor(size: .albumListCoverSize)), options: [
.scaleFactor(2), .forceRefresh,
] .memoryCacheExpiration(.never),
) { _ in .processor(DownsamplingImageProcessor(size: .albumListCoverSize)),
callback() .scaleFactor(2),
]
) { result in
seal.fulfill(result)
}
} }
}
_ = KingfisherManager.shared.retrieveImage(
with: .provider(provider), func refreshCurrentlyPlayingArt() -> Promise<Any> {
options: [ return Promise<Any> { seal in
.forceRefresh, _ = KingfisherManager.shared.retrieveImage(
.memoryCacheExpiration(.never), with: .provider(provider),
.processor(DownsamplingImageProcessor(size: .currentlyPlayingCoverSize)), options: [
.scaleFactor(2), .forceRefresh,
.callbackQueue(.mainAsync) .memoryCacheExpiration(.never),
] .processor(DownsamplingImageProcessor(size: .currentlyPlayingCoverSize)),
) { _ in } .scaleFactor(2),
.callbackQueue(.mainAsync)
_ = KingfisherManager.shared.retrieveImage( ]
with: .provider(provider), ) { result in
options: [ seal.fulfill(result)
.forceRefresh, }
.memoryCacheExpiration(.never), }
.processor(DownsamplingImageProcessor(size: .queueSongCoverSize)), }
.scaleFactor(2),
] func refreshQueueSongArt() -> Promise<Any> {
) { _ in return Promise<Any> { seal in
_ = KingfisherManager.shared.retrieveImage(
with: .provider(provider),
options: [
.forceRefresh,
.memoryCacheExpiration(.never),
.processor(DownsamplingImageProcessor(size: .queueSongCoverSize)),
.scaleFactor(2),
]
) { result in
seal.fulfill(result)
}
}
}
func refresh(callback: @escaping () -> Void?) {
_ = firstly {
when(fulfilled: refreshAlbumListArt(), refreshQueueSongArt(), refreshCurrentlyPlayingArt())
}.done { _, _, _ in
NotificationCenter.default.post(name: .didReloadAlbumArt, object: nil) NotificationCenter.default.post(name: .didReloadAlbumArt, object: nil)
callback()
} }
} }
} }