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( func refreshAlbumListArt() -> Promise<Any> {
with: .provider(provider), return Promise<Any> { seal in
options: [ _ = KingfisherManager.shared.retrieveImage(
.forceRefresh, with: .provider(provider),
.memoryCacheExpiration(.never), options: [
.processor(DownsamplingImageProcessor(size: .albumListCoverSize)), .forceRefresh,
.scaleFactor(2), .memoryCacheExpiration(.never),
] .processor(DownsamplingImageProcessor(size: .albumListCoverSize)),
) { _ in .scaleFactor(2),
callback() ]
) { result in
seal.fulfill(result)
}
} }
}
_ = KingfisherManager.shared.retrieveImage( func refreshCurrentlyPlayingArt() -> Promise<Any> {
with: .provider(provider), return Promise<Any> { seal in
options: [ _ = KingfisherManager.shared.retrieveImage(
.forceRefresh, with: .provider(provider),
.memoryCacheExpiration(.never), options: [
.processor(DownsamplingImageProcessor(size: .currentlyPlayingCoverSize)), .forceRefresh,
.scaleFactor(2), .memoryCacheExpiration(.never),
.callbackQueue(.mainAsync) .processor(DownsamplingImageProcessor(size: .currentlyPlayingCoverSize)),
] .scaleFactor(2),
) { _ in } .callbackQueue(.mainAsync)
]
) { result in
seal.fulfill(result)
}
}
}
_ = KingfisherManager.shared.retrieveImage( func refreshQueueSongArt() -> Promise<Any> {
with: .provider(provider), return Promise<Any> { seal in
options: [ _ = KingfisherManager.shared.retrieveImage(
.forceRefresh, with: .provider(provider),
.memoryCacheExpiration(.never), options: [
.processor(DownsamplingImageProcessor(size: .queueSongCoverSize)), .forceRefresh,
.scaleFactor(2), .memoryCacheExpiration(.never),
] .processor(DownsamplingImageProcessor(size: .queueSongCoverSize)),
) { _ in .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()
} }
} }
} }