1
1
mirror of https://github.com/danbee/persephone synced 2025-03-04 08:39:11 +00:00

Only get artwork from the internet if the pref is set

This commit is contained in:
Daniel Barber 2019-03-29 17:18:20 -04:00
parent 29ab98b28c
commit 025830b950
Signed by: danbarber
GPG Key ID: 931D8112E0103DD8
2 changed files with 21 additions and 11 deletions

View File

@ -31,7 +31,7 @@ class AlbumArtService {
return firstly { return firstly {
self.getArtworkFromFilesystem() self.getArtworkFromFilesystem()
}.then { (image: NSImage?) -> Promise<NSImage?> in }.then { (image: NSImage?) -> Promise<NSImage?> in
image.map(Promise.value) ?? self.getRemoteArtwork().map(Optional.some) image.map(Promise.value) ?? self.getRemoteArtwork()
}.compactMap(on :artworkQueue) { image in }.compactMap(on :artworkQueue) { image in
if self.fileSystemArtworkFilePath() != nil { if self.fileSystemArtworkFilePath() != nil {
let sizedImage = image?.toFitBox( let sizedImage = image?.toFitBox(
@ -51,11 +51,16 @@ class AlbumArtService {
}.then { (artwork: NSImage?) -> Promise<NSImage?> in }.then { (artwork: NSImage?) -> Promise<NSImage?> in
artwork.map(Promise.value) ?? self.getArtworkFromFilesystem() artwork.map(Promise.value) ?? self.getArtworkFromFilesystem()
}.then { (artwork: NSImage?) -> Promise<NSImage?> in }.then { (artwork: NSImage?) -> Promise<NSImage?> in
artwork.map(Promise.value) ?? self.getRemoteArtwork().map(Optional.some) artwork.map(Promise.value) ?? self.getRemoteArtwork()
}.compactMap(on: artworkQueue) { }.compactMap(on: artworkQueue) {
return self.sizeAndCacheImage($0).map(Optional.some) return self.sizeAndCacheImage($0).map(Optional.some)
}.recover { error in }.recover { error in
self.cacheArtwork(data: Data()) switch error {
case RemoteArtworkError.noArtworkAvailable:
self.cacheArtwork(data: Data())
default:
break
}
return .value(nil) return .value(nil)
} }
} }

View File

@ -12,18 +12,23 @@ import PromiseKit
import PMKFoundation import PMKFoundation
extension AlbumArtService { extension AlbumArtService {
enum MusicBrainzError: Error { enum RemoteArtworkError: Error {
case noArtworkAvailable case noArtworkAvailable
case notConfigured
} }
func getRemoteArtwork() -> Promise<NSImage> { func getRemoteArtwork() -> Promise<NSImage?> {
return Promise { seal in return Promise { seal in
artworkQueue.async { if preferences.fetchMissingArtworkFromInternet {
let albumArtWorkItem = DispatchWorkItem { artworkQueue.async {
self.getArtworkFromMusicBrainz().pipe(to: seal.resolve) let albumArtWorkItem = DispatchWorkItem {
} self.getArtworkFromMusicBrainz().map(Optional.some).pipe(to: seal.resolve)
}
AlbumArtQueue.shared.addToQueue(workItem: albumArtWorkItem) AlbumArtQueue.shared.addToQueue(workItem: albumArtWorkItem)
}
} else {
throw RemoteArtworkError.notConfigured
} }
} }
} }
@ -48,7 +53,7 @@ extension AlbumArtService {
) )
}.recover { error -> Promise<NSImage> in }.recover { error -> Promise<NSImage> in
if case PMKHTTPError.badStatusCode(404, _, _) = error { if case PMKHTTPError.badStatusCode(404, _, _) = error {
throw MusicBrainzError.noArtworkAvailable throw RemoteArtworkError.noArtworkAvailable
} else { } else {
throw error throw error
} }