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:
parent
ff3c7c4856
commit
3b4b5f5b5c
@ -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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user