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

Ensure artwork is fetched when the pref is changed

This commit is contained in:
Daniel Barber 2019-03-31 17:33:10 -04:00
parent 01371db6cb
commit f014c4f929
Signed by: danbarber
GPG Key ID: 931D8112E0103DD8
6 changed files with 26 additions and 39 deletions

View File

@ -40,6 +40,7 @@ class AlbumViewController: NSViewController,
albumCollectionView.dataSource = dataSource
preferences.addObserver(self, forKeyPath: "mpdLibraryDir")
preferences.addObserver(self, forKeyPath: "fetchMissingArtworkFromInternet")
}
override func viewWillLayout() {
@ -66,6 +67,9 @@ class AlbumViewController: NSViewController,
switch keyPath {
case "mpdLibraryDir":
albumCollectionView.reloadData()
case "fetchMissingArtworkFromInternet":
dataSource.resetCoverArt()
albumCollectionView.reloadData()
default:
break
}
@ -75,7 +79,7 @@ class AlbumViewController: NSViewController,
guard let albums = notification.userInfo?[Notification.albumsKey] as? [MPDClient.MPDAlbum]
else { return }
dataSource.albums = albums.map { Album(mpdAlbum: $0, coverArt: nil) }
dataSource.albums = albums.map { Album(mpdAlbum: $0) }
albumCollectionView.reloadData()
}

View File

@ -72,11 +72,11 @@ class QueueViewController: NSViewController,
albumArtService.fetchBigAlbumArt()
.done() {
guard let image = $0 else { return }
self.queueAlbumArtImage.image = image.toFitBox(
size: NSSize(width: 500, height: 500)
)
if let image = $0 {
self.queueAlbumArtImage.image = image
} else {
self.queueAlbumArtImage.image = NSImage.defaultCoverArt
}
}
.cauterize()
} else {

View File

@ -16,6 +16,14 @@ class AlbumDataSource: NSObject, NSCollectionViewDataSource {
return albums.count
}
func resetCoverArt() {
albums = albums.map {
var album = $0
album.coverArtFetched = false
return album
}
}
func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem {
let item = collectionView.makeItem(withIdentifier: .albumViewItem, for: indexPath)
guard let albumViewItem = item as? AlbumViewItem else { return item }
@ -23,7 +31,9 @@ class AlbumDataSource: NSObject, NSCollectionViewDataSource {
albumViewItem.view.wantsLayer = true
albumViewItem.setAlbum(albums[indexPath.item])
if albums[indexPath.item].coverArt == nil {
if albums[indexPath.item].coverArt == nil &&
!albums[indexPath.item].coverArtFetched {
AppDelegate.mpdClient.getAlbumFirstSong(for: albums[indexPath.item].mpdAlbum) {
guard let song = $0 else { return }
@ -31,6 +41,7 @@ class AlbumDataSource: NSObject, NSCollectionViewDataSource {
.fetchAlbumArt()
.done { image in
self.albums[indexPath.item].coverArt = image
self.albums[indexPath.item].coverArtFetched = true
DispatchQueue.main.async {
collectionView.reloadItems(at: [indexPath])

View File

@ -1,24 +0,0 @@
//
// String.swift
// Persephone
//
// Created by Daniel Barber on 2019/3/01.
// Copyright © 2019 Dan Barber. All rights reserved.
//
import Foundation
extension String {
func sha1() -> String {
let data = self.data(using: String.Encoding.utf8)!
var digest = [UInt8](repeating: 0, count:Int(CC_SHA1_DIGEST_LENGTH))
data.withUnsafeBytes {
_ = CC_SHA1($0, CC_LONG(data.count), &digest)
}
let hexBytes = digest.map { String(format: "%02hhx", $0) }
return hexBytes.joined()
}
}

View File

@ -20,6 +20,6 @@ struct Song {
}
var album: Album {
return Album(mpdAlbum: mpdSong.album, coverArt: nil)
return Album(mpdAlbum: mpdSong.album)
}
}

View File

@ -42,6 +42,8 @@ class AlbumArtService {
} else {
return image
}
}.recover { (_) -> Guarantee<NSImage?> in
return .value(nil)
}
}
@ -54,13 +56,7 @@ class AlbumArtService {
artwork.map(Promise.value) ?? self.getRemoteArtwork()
}.compactMap(on: artworkQueue) {
return self.sizeAndCacheImage($0).map(Optional.some)
}.recover { error in
switch error {
case RemoteArtworkError.noArtworkAvailable:
self.cacheArtwork(data: Data())
default:
break
}
}.recover { _ in
return .value(nil)
}
}