1
1
mirror of https://github.com/danbee/persephone synced 2025-03-04 08:39:11 +00:00
persephone/Persephone/Components/Queue/QueueSongCoverView.swift
Daniel Barber a8987029f5
Redesign queue view
* Add cover art for each track
* Stack song title and artist
* Add song duration
* Redesign the dragged image view to match
2020-01-22 22:23:59 -05:00

87 lines
2.2 KiB
Swift

//
// QueueSongCoverView.swift
// Persephone
//
// Created by Daniel Barber on 1/20/20.
// Copyright © 2020 Dan Barber. All rights reserved.
//
import AppKit
import Kingfisher
class QueueSongCoverView: NSTableCellView {
@IBOutlet var queueSongCover: NSImageView!
@IBOutlet var queueSongButton: NSButton!
let playingFilters = [
CIFilter(name: "CIExposureAdjust", parameters: ["inputEV": -2])!
]
var isPlaying: Bool = false
override func viewDidMoveToSuperview() {
super.viewDidMoveToSuperview()
queueSongCover.wantsLayer = true
queueSongCover.layer?.backgroundColor = CGColor.black
queueSongCover.layer?.cornerRadius = 2
queueSongCover.layer?.borderWidth = 1
queueSongCover.layer?.masksToBounds = true
queueSongButton.wantsLayer = true
setAppearance()
if isPlaying {
queueSongCover.layer?.filters = playingFilters
} else {
queueSongCover.layer?.filters = nil
}
}
override func prepareForReuse() {
super.prepareForReuse()
queueSongCover.image = .defaultCoverArt
}
func setAppearance() {
guard let viewLayer = queueSongCover.layer
else { return }
if #available(OSX 10.14, *) {
let darkMode = NSApp.effectiveAppearance.bestMatch(from:
[.darkAqua, .aqua]) == .darkAqua
viewLayer.borderColor = darkMode ? .albumBorderColorDark : .albumBorderColorLight
} else {
viewLayer.borderColor = .albumBorderColorLight
}
}
func setSong(_ queueItem: QueueItem, queueIcon: NSImage?) {
guard let imagePath = queueItem.song.album.coverArtFilePath
else { return }
isPlaying = queueItem.isPlaying
let imageURL = URL(fileURLWithPath: imagePath)
let provider = LocalFileImageDataProvider(fileURL: imageURL)
queueSongCover.kf.setImage(
with: .provider(provider),
placeholder: NSImage.defaultCoverArt,
options: [
.processor(DownsamplingImageProcessor(size: .queueSongCoverSize)),
.scaleFactor(2),
]
)
if isPlaying && queueIcon != nil {
queueSongCover.layer?.filters = playingFilters
queueSongButton.image = queueIcon
} else {
queueSongCover.layer?.filters = nil
queueSongButton.image = nil
}
}
}