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 PromiseKit
import Kingfisher
struct CoverArtService {
let song: Song
let provider: MPDAlbumArtImageDataProvider
func refresh(callback: @escaping () -> Void?) {
let provider = MPDAlbumArtImageDataProvider(
init(song: Song) {
self.song = song
provider = MPDAlbumArtImageDataProvider(
songUri: song.mpdSong.uriString,
cacheKey: song.album.hash
)
_ = KingfisherManager.shared.retrieveImage(
with: .provider(provider),
options: [
.forceRefresh,
.memoryCacheExpiration(.never),
.processor(DownsamplingImageProcessor(size: .albumListCoverSize)),
.scaleFactor(2),
]
) { _ in
callback()
}
func refreshAlbumListArt() -> Promise<Any> {
return Promise<Any> { seal in
_ = KingfisherManager.shared.retrieveImage(
with: .provider(provider),
options: [
.forceRefresh,
.memoryCacheExpiration(.never),
.processor(DownsamplingImageProcessor(size: .albumListCoverSize)),
.scaleFactor(2),
]
) { result in
seal.fulfill(result)
}
}
_ = KingfisherManager.shared.retrieveImage(
with: .provider(provider),
options: [
.forceRefresh,
.memoryCacheExpiration(.never),
.processor(DownsamplingImageProcessor(size: .currentlyPlayingCoverSize)),
.scaleFactor(2),
.callbackQueue(.mainAsync)
]
) { _ in }
_ = KingfisherManager.shared.retrieveImage(
with: .provider(provider),
options: [
.forceRefresh,
.memoryCacheExpiration(.never),
.processor(DownsamplingImageProcessor(size: .queueSongCoverSize)),
.scaleFactor(2),
]
) { _ in
}
func refreshCurrentlyPlayingArt() -> Promise<Any> {
return Promise<Any> { seal in
_ = KingfisherManager.shared.retrieveImage(
with: .provider(provider),
options: [
.forceRefresh,
.memoryCacheExpiration(.never),
.processor(DownsamplingImageProcessor(size: .currentlyPlayingCoverSize)),
.scaleFactor(2),
.callbackQueue(.mainAsync)
]
) { result in
seal.fulfill(result)
}
}
}
func refreshQueueSongArt() -> Promise<Any> {
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)
callback()
}
}
}