1
1
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:
Daniel Barber 2019-06-04 09:24:34 -04:00
parent 0ee299a9c8
commit 998ddb60bc
Signed by: danbarber
GPG Key ID: 931D8112E0103DD8
2 changed files with 21 additions and 7 deletions

View File

@ -12,6 +12,9 @@ class AlbumDetailView: NSViewController {
var album: Album?
var dataSource = AlbumTracksDataSource()
static let shared = AlbumDetailView()
static let popover = NSPopover()
@IBOutlet var albumTracksView: NSTableView!
@IBOutlet var albumTitle: NSTextField!
@IBOutlet var albumArtist: NSTextField!
@ -30,6 +33,9 @@ class AlbumDetailView: NSViewController {
albumCoverView.layer?.borderWidth = 1
setAppearance()
}
override func viewWillAppear() {
guard let album = album else { return }
getAlbumSongs(for: album)
@ -43,6 +49,16 @@ class AlbumDetailView: NSViewController {
default:
albumCoverView.image = .defaultCoverArt
}
super.viewWillAppear()
}
override func viewWillDisappear() {
dataSource.albumSongs = []
albumTracksView.reloadData()
albumTitle.stringValue = ""
albumArtist.stringValue = ""
albumCoverView.image = .defaultCoverArt
}
func getAlbumSongs(for album: Album) {
@ -51,7 +67,7 @@ class AlbumDetailView: NSViewController {
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 {
self?.albumTracksView.reloadData()

View File

@ -66,14 +66,12 @@ class AlbumViewItem: NSCollectionViewItem {
@IBAction func showAlbumDetail(_ sender: NSButton) {
guard let album = album else { return }
let detailViewController = AlbumDetailView()
detailViewController.setAlbum(album)
AlbumDetailView.shared.setAlbum(album)
detailPopover = NSPopover()
detailPopover?.contentViewController = detailViewController
detailPopover?.behavior = .transient
detailPopover?.show(
AlbumDetailView.popover.contentViewController = AlbumDetailView.shared
AlbumDetailView.popover.behavior = .transient
AlbumDetailView.popover.show(
relativeTo: sender.bounds,
of: sender,
preferredEdge: .maxY