From 4c14ed5078f33ef7d543df596caa16aa477e1599 Mon Sep 17 00:00:00 2001 From: Daniel Barber Date: Tue, 4 Jun 2019 09:24:34 -0400 Subject: [PATCH] Create shared AlbumDetailView and Popover MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 😧) --- Persephone/Controllers/AlbumDetailView.swift | 18 +++++++++++++++++- Persephone/Controllers/AlbumViewItem.swift | 10 ++++------ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/Persephone/Controllers/AlbumDetailView.swift b/Persephone/Controllers/AlbumDetailView.swift index 0fef285..d611770 100644 --- a/Persephone/Controllers/AlbumDetailView.swift +++ b/Persephone/Controllers/AlbumDetailView.swift @@ -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() diff --git a/Persephone/Controllers/AlbumViewItem.swift b/Persephone/Controllers/AlbumViewItem.swift index 4b47c67..311f874 100644 --- a/Persephone/Controllers/AlbumViewItem.swift +++ b/Persephone/Controllers/AlbumViewItem.swift @@ -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