mirror of
https://github.com/danbee/persephone
synced 2025-03-04 08:39:11 +00:00
Create shared AlbumDetailView and Popover
This prevents the app from creating a new one for every album, which was
not friendly on memory usage! (I saw the app hit 2.5GB of usage at one
point 😧)
This commit is contained in:
parent
e3d71284cc
commit
4c14ed5078
@ -12,6 +12,9 @@ class AlbumDetailView: NSViewController {
|
|||||||
var album: Album?
|
var album: Album?
|
||||||
var dataSource = AlbumTracksDataSource()
|
var dataSource = AlbumTracksDataSource()
|
||||||
|
|
||||||
|
static let shared = AlbumDetailView()
|
||||||
|
static let popover = NSPopover()
|
||||||
|
|
||||||
@IBOutlet var albumTracksView: NSTableView!
|
@IBOutlet var albumTracksView: NSTableView!
|
||||||
@IBOutlet var albumTitle: NSTextField!
|
@IBOutlet var albumTitle: NSTextField!
|
||||||
@IBOutlet var albumArtist: NSTextField!
|
@IBOutlet var albumArtist: NSTextField!
|
||||||
@ -30,6 +33,9 @@ class AlbumDetailView: NSViewController {
|
|||||||
albumCoverView.layer?.borderWidth = 1
|
albumCoverView.layer?.borderWidth = 1
|
||||||
setAppearance()
|
setAppearance()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewWillAppear() {
|
||||||
guard let album = album else { return }
|
guard let album = album else { return }
|
||||||
|
|
||||||
getAlbumSongs(for: album)
|
getAlbumSongs(for: album)
|
||||||
@ -43,6 +49,16 @@ class AlbumDetailView: NSViewController {
|
|||||||
default:
|
default:
|
||||||
albumCoverView.image = .defaultCoverArt
|
albumCoverView.image = .defaultCoverArt
|
||||||
}
|
}
|
||||||
|
|
||||||
|
super.viewWillAppear()
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewWillDisappear() {
|
||||||
|
dataSource.albumSongs = []
|
||||||
|
albumTracksView.reloadData()
|
||||||
|
albumTitle.stringValue = ""
|
||||||
|
albumArtist.stringValue = ""
|
||||||
|
albumCoverView.image = .defaultCoverArt
|
||||||
}
|
}
|
||||||
|
|
||||||
func getAlbumSongs(for album: Album) {
|
func getAlbumSongs(for album: Album) {
|
||||||
@ -51,7 +67,7 @@ class AlbumDetailView: NSViewController {
|
|||||||
mpdSongs.map { Song(mpdSong: $0) }
|
mpdSongs.map { Song(mpdSong: $0) }
|
||||||
)
|
)
|
||||||
|
|
||||||
//self?.getBigCoverArt(song: self?.dataSource.albumSongs.first!.song ?? self?.dataSource.albumSongs[1].song!)
|
self?.getBigCoverArt(song: self?.dataSource.albumSongs.first!.song ?? (self?.dataSource.albumSongs[1].song!)!)
|
||||||
|
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
self?.albumTracksView.reloadData()
|
self?.albumTracksView.reloadData()
|
||||||
|
|||||||
@ -66,14 +66,12 @@ class AlbumViewItem: NSCollectionViewItem {
|
|||||||
|
|
||||||
@IBAction func showAlbumDetail(_ sender: NSButton) {
|
@IBAction func showAlbumDetail(_ sender: NSButton) {
|
||||||
guard let album = album else { return }
|
guard let album = album else { return }
|
||||||
let detailViewController = AlbumDetailView()
|
|
||||||
|
|
||||||
detailViewController.setAlbum(album)
|
AlbumDetailView.shared.setAlbum(album)
|
||||||
|
|
||||||
detailPopover = NSPopover()
|
AlbumDetailView.popover.contentViewController = AlbumDetailView.shared
|
||||||
detailPopover?.contentViewController = detailViewController
|
AlbumDetailView.popover.behavior = .transient
|
||||||
detailPopover?.behavior = .transient
|
AlbumDetailView.popover.show(
|
||||||
detailPopover?.show(
|
|
||||||
relativeTo: sender.bounds,
|
relativeTo: sender.bounds,
|
||||||
of: sender,
|
of: sender,
|
||||||
preferredEdge: .maxY
|
preferredEdge: .maxY
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user