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

60 lines
1.3 KiB
Swift

//
// CurrentCoverArtView.swift
// Persephone
//
// Created by Daniel Barber on 2019/4/27.
// Copyright © 2019 Dan Barber. All rights reserved.
//
import AppKit
import ReSwift
import Kingfisher
class CurrentCoverArtView: NSImageView {
required init?(coder: NSCoder) {
super.init(coder: coder)
App.store.subscribe(self) {
$0.select { $0.playerState.currentSong }
}
NotificationCenter.default.addObserver(self, selector: #selector(didReloadAlbumArt), name: .didReloadAlbumArt, object: nil)
}
@objc func didReloadAlbumArt() {
guard let song = App.store.state.playerState.currentSong
else { return }
setSongImage(song)
}
func setSongImage(_ song: Song) {
let provider = MPDAlbumArtImageDataProvider(
songUri: song.mpdSong.uriString,
cacheKey: song.album.hash
)
kf.setImage(
with: .provider(provider),
placeholder: NSImage.defaultCoverArt,
options: [
.processor(DownsamplingImageProcessor(size: .currentlyPlayingCoverSize)),
.scaleFactor(2),
]
)
}
}
extension CurrentCoverArtView: StoreSubscriber {
typealias StoreSubscriberStateType = Song?
func newState(state: Song?) {
guard let song = state else {
image = .defaultCoverArt
return
}
setSongImage(song)
}
}