mirror of
https://github.com/danbee/persephone
synced 2025-03-04 08:39:11 +00:00
60 lines
1.3 KiB
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)
|
|
}
|
|
}
|