diff --git a/Persephone/Services/CoverArtService.swift b/Persephone/Services/CoverArtService.swift index d19a307..e890a70 100644 --- a/Persephone/Services/CoverArtService.swift +++ b/Persephone/Services/CoverArtService.swift @@ -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 { + return Promise { 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 { + return Promise { 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 { + return Promise { 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() } } }