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
0ee299a9c8
commit
998ddb60bc
@ -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()
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user