From 0e6b34513a20c523ac62351ca51638c307c4542d Mon Sep 17 00:00:00 2001 From: Dan Barber Date: Sun, 17 Feb 2019 17:43:19 -0500 Subject: [PATCH] Hitting the play button on an album plays the album Had to refactor the QueueView somewhat as there was a bug that only surfaced on clearing and refilling the playlist. The bug was due to the way NSOutlineView reuses subviews. --- .../playButtonLarge.imageset/Contents.json | 25 +++++++ .../playButtonLarge.png | Bin 0 -> 295 bytes .../playButtonLarge@2x.png | Bin 0 -> 516 bytes Persephone/Controllers/AlbumItem.swift | 8 ++ .../Controllers/QueueViewController.swift | 69 +++++++++--------- Persephone/MPDClient/MPDClient.swift | 21 ++++++ Persephone/MPDClient/Models/Song.swift | 4 + Persephone/Resources/AlbumItem.xib | 7 +- Resources/export/playButtonLarge.pdf | Bin 0 -> 4044 bytes Resources/export/playButtonLarge.png | Bin 0 -> 295 bytes Resources/export/playButtonLarge@2x.png | Bin 0 -> 516 bytes Resources/icons.sketch | Bin 76347 -> 76774 bytes 12 files changed, 96 insertions(+), 38 deletions(-) create mode 100644 Persephone/Assets.xcassets/playButtonLarge.imageset/Contents.json create mode 100644 Persephone/Assets.xcassets/playButtonLarge.imageset/playButtonLarge.png create mode 100644 Persephone/Assets.xcassets/playButtonLarge.imageset/playButtonLarge@2x.png create mode 100644 Resources/export/playButtonLarge.pdf create mode 100644 Resources/export/playButtonLarge.png create mode 100644 Resources/export/playButtonLarge@2x.png diff --git a/Persephone/Assets.xcassets/playButtonLarge.imageset/Contents.json b/Persephone/Assets.xcassets/playButtonLarge.imageset/Contents.json new file mode 100644 index 0000000..15f9f85 --- /dev/null +++ b/Persephone/Assets.xcassets/playButtonLarge.imageset/Contents.json @@ -0,0 +1,25 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "playButtonLarge.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "playButtonLarge@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/Persephone/Assets.xcassets/playButtonLarge.imageset/playButtonLarge.png b/Persephone/Assets.xcassets/playButtonLarge.imageset/playButtonLarge.png new file mode 100644 index 0000000000000000000000000000000000000000..a489b7b51241fbe3c3532746aa85abe1830b8389 GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fEa{HEjtmSN`?>!lvI6<{JY5_^ zECiDiBv>y9BpeeI+UroLtzgG{WPjlbMeiS)0oUsl>X?pfbU4FtB!p4FVOaxD+rwao zZKkF^Zsrnc2fY?N;1+Zyd9M%H!{pWXmGvx$`S@cVNEfCWP>wJ+z!oi zJ51+@G$)F!VU;?^w7Eeg|A5KE1&(e14lA;Ys~tVMyTJ4V)U32-ldp)jfW^n1`EUQS-Iu9l~=uhK4tK9^>bP0l+XkKu)Atu literal 0 HcmV?d00001 diff --git a/Persephone/Assets.xcassets/playButtonLarge.imageset/playButtonLarge@2x.png b/Persephone/Assets.xcassets/playButtonLarge.imageset/playButtonLarge@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..109a9ca18b5db7b6769dbb3b236bccc81ceae137 GIT binary patch literal 516 zcmV+f0{i`mP)$nk*_75y7ItB8bJLK@=>$e+TY?VcEUCy_+|127c`B?CkDmAMW;cu2hOGRv=a& zR-jr1TB_|#?CWQHl{At2#J(UmcToLSa?El#NTr6ls9**C#r7uY*2V<2dW}Y~`tpVT zCDIm@7EBgc@OO-v2??DC7WgUX(GcLZf))ImY?EG}@FHNT_8Z_8((VIZ4_M$2fahGJ z8vzUa9Q3#=xCyX=|BzkMXB%z`EY*Goyhb`~!A*k&{s?%UsCN{j%@$bTS7;|pifw}h zz7Kl91l$!^!PWCS^-I}o;!Z4_L;X^IrkyuL@EK6`tbR%Z7wNP8kx;Xk*&?94v9`dk zTzHunf8Q_-R-e-?(nG8?li(ACBUY5!Nlk#&tYlg{r`6R)z-r#NNSx05>H(`~=?3W{ z&RbFN5yBzoO6`KRf^RuyN;}TmY99C**#c?xCQMv73;e;jb<&v_?|t(UfxH6B@{qnk z@3IWQo(8^QeKKQQFx_KF4oI04`I|PF8;Fotfmnh6P=P<9Zm@gN@_7OP0000 0 { - guard let oldSongRow = queueView.rowView(atRow: oldSongRowPos, makeIfNecessary: true), - let oldSongTitleCell = oldSongRow.view(atColumn: 0) as? NSTableCellView - else { return } - - setRowFont(rowView: oldSongRow, font: systemFontRegular) - oldSongTitleCell.imageView?.image = nil + if oldSongRowPos >= 0 { + queue[oldSongRowPos].isPlaying = false } - guard let songRow = queueView.rowView(atRow: newSongRowPos, makeIfNecessary: true), - let newSongTitleCell = songRow.view(atColumn: 0) as? NSTableCellView - else { return } - - setRowFont(rowView: songRow, font: systemFontBold) - newSongTitleCell.imageView?.image = self.queueIcon - } - - func setRowFont(rowView: NSTableRowView, font: NSFont) { - guard let songTitleCell = rowView.view(atColumn: 0) as? NSTableCellView, - let songArtistCell = rowView.view(atColumn: 1) as? NSTableCellView - else { return } - - songTitleCell.textField?.font = font - songArtistCell.textField?.font = font + queue[newSongRowPos].isPlaying = true } func outlineView(_ outlineView: NSOutlineView, numberOfChildrenOfItem item: Any?) -> Int { @@ -143,7 +128,7 @@ class QueueViewController: NSViewController, NSOutlineViewDataSource, NSOutlineV func outlineView(_ outlineView: NSOutlineView, child index: Int, ofItem item: Any?) -> Any { if index > 0 { - return SongItem(song: queue[index - 1], queuePos: index - 1) + return queue[index - 1] } else { return false } @@ -159,6 +144,13 @@ class QueueViewController: NSViewController, NSOutlineViewDataSource, NSOutlineV ) as! NSTableCellView cellView.textField?.stringValue = songItem.song.getTag(.title) + if songItem.isPlaying { + cellView.textField?.font = systemFontBold + cellView.imageView?.image = self.queueIcon + } else { + cellView.textField?.font = systemFontRegular + cellView.imageView?.image = nil + } return cellView case "songArtistColumn": @@ -168,6 +160,11 @@ class QueueViewController: NSViewController, NSOutlineViewDataSource, NSOutlineV ) as! NSTableCellView cellView.textField?.stringValue = songItem.song.getTag(.artist) + if songItem.isPlaying { + cellView.textField?.font = systemFontBold + } else { + cellView.textField?.font = systemFontRegular + } return cellView default: diff --git a/Persephone/MPDClient/MPDClient.swift b/Persephone/MPDClient/MPDClient.swift index 35cc66c..2787264 100644 --- a/Persephone/MPDClient/MPDClient.swift +++ b/Persephone/MPDClient/MPDClient.swift @@ -109,6 +109,27 @@ class MPDClient { idle() } + func playAlbum(_ album: Album) { + noIdle() + commandQueue.async { [unowned self] in + var songs: [Song] = [] + + mpd_run_clear(self.connection) + mpd_search_db_songs(self.connection, true) + mpd_search_add_tag_constraint(self.connection, MPD_OPERATOR_DEFAULT, MPD_TAG_ALBUM, album.title) + mpd_search_add_tag_constraint(self.connection, MPD_OPERATOR_DEFAULT, MPD_TAG_ALBUM_ARTIST, album.artist) + mpd_search_commit(self.connection) + while let mpdSong = mpd_recv_song(self.connection) { + songs.append(Song(mpdSong)) + } + for song in songs { + mpd_run_add(self.connection, song.uri) + } + mpd_run_play_pos(self.connection, 0) + } + idle() + } + func queueCommand(command: Command) { noIdle() commandQueue.async { [unowned self] in diff --git a/Persephone/MPDClient/Models/Song.swift b/Persephone/MPDClient/Models/Song.swift index 3b43d5b..902dd21 100644 --- a/Persephone/MPDClient/Models/Song.swift +++ b/Persephone/MPDClient/Models/Song.swift @@ -41,6 +41,10 @@ extension MPDClient { mpd_song_free(mpdSong) } + var uri: UnsafePointer { + return mpd_song_get_uri(mpdSong) + } + func getTag(_ tagType: TagType) -> String { let mpdTagType = mpd_tag_type(rawValue: Int32(tagType.rawValue)) diff --git a/Persephone/Resources/AlbumItem.xib b/Persephone/Resources/AlbumItem.xib index db3a041..a58c678 100644 --- a/Persephone/Resources/AlbumItem.xib +++ b/Persephone/Resources/AlbumItem.xib @@ -47,10 +47,13 @@ - + + + + @@ -77,6 +80,6 @@ - + diff --git a/Resources/export/playButtonLarge.pdf b/Resources/export/playButtonLarge.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a04b17290078a459d7b74b4ffd88b71486c1b8c8 GIT binary patch literal 4044 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 literal 0 HcmV?d00001 diff --git a/Resources/export/playButtonLarge.png b/Resources/export/playButtonLarge.png new file mode 100644 index 0000000000000000000000000000000000000000..a489b7b51241fbe3c3532746aa85abe1830b8389 GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fEa{HEjtmSN`?>!lvI6<{JY5_^ zECiDiBv>y9BpeeI+UroLtzgG{WPjlbMeiS)0oUsl>X?pfbU4FtB!p4FVOaxD+rwao zZKkF^Zsrnc2fY?N;1+Zyd9M%H!{pWXmGvx$`S@cVNEfCWP>wJ+z!oi zJ51+@G$)F!VU;?^w7Eeg|A5KE1&(e14lA;Ys~tVMyTJ4V)U32-ldp)jfW^n1`EUQS-Iu9l~=uhK4tK9^>bP0l+XkKu)Atu literal 0 HcmV?d00001 diff --git a/Resources/export/playButtonLarge@2x.png b/Resources/export/playButtonLarge@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..109a9ca18b5db7b6769dbb3b236bccc81ceae137 GIT binary patch literal 516 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