mirror of
https://github.com/danbee/persephone
synced 2025-03-04 08:39:11 +00:00
* Add cover art for each track * Stack song title and artist * Add song duration * Redesign the dragged image view to match
87 lines
2.2 KiB
Swift
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
|
|
}
|
|
}
|
|
}
|