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,17 +7,24 @@
// //
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
) )
}
func refreshAlbumListArt() -> Promise<Any> {
return Promise<Any> { seal in
_ = KingfisherManager.shared.retrieveImage( _ = KingfisherManager.shared.retrieveImage(
with: .provider(provider), with: .provider(provider),
options: [ options: [
@ -26,10 +33,14 @@ struct CoverArtService {
.processor(DownsamplingImageProcessor(size: .albumListCoverSize)), .processor(DownsamplingImageProcessor(size: .albumListCoverSize)),
.scaleFactor(2), .scaleFactor(2),
] ]
) { _ in ) { result in
callback() seal.fulfill(result)
}
}
} }
func refreshCurrentlyPlayingArt() -> Promise<Any> {
return Promise<Any> { seal in
_ = KingfisherManager.shared.retrieveImage( _ = KingfisherManager.shared.retrieveImage(
with: .provider(provider), with: .provider(provider),
options: [ options: [
@ -39,8 +50,14 @@ struct CoverArtService {
.scaleFactor(2), .scaleFactor(2),
.callbackQueue(.mainAsync) .callbackQueue(.mainAsync)
] ]
) { _ in } ) { result in
seal.fulfill(result)
}
}
}
func refreshQueueSongArt() -> Promise<Any> {
return Promise<Any> { seal in
_ = KingfisherManager.shared.retrieveImage( _ = KingfisherManager.shared.retrieveImage(
with: .provider(provider), with: .provider(provider),
options: [ options: [
@ -49,8 +66,18 @@ struct CoverArtService {
.processor(DownsamplingImageProcessor(size: .queueSongCoverSize)), .processor(DownsamplingImageProcessor(size: .queueSongCoverSize)),
.scaleFactor(2), .scaleFactor(2),
] ]
) { _ in ) { 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()
} }
} }
} }