refactor: replace TrackTableView playlist params with TrackContextMenuConfig

feat/music-streaming
Laurent 1 month ago
parent cce5779430
commit b006bf75c3
  1. 27
      Music/Views/TrackTableView.swift

@ -42,12 +42,7 @@ struct TrackTableView: NSViewRepresentable {
let sortAscending: Bool let sortAscending: Bool
let onSort: (String) -> Void let onSort: (String) -> Void
let onDoubleClick: (Track) -> Void let onDoubleClick: (Track) -> Void
var playlists: [Playlist] var contextMenuConfig: TrackContextMenuConfig?
var lastUsedPlaylistName: String?
var selectedPlaylist: Playlist?
var onAddToPlaylist: ((Track, Playlist) -> Void)?
var onAddToLastPlaylist: ((Track) -> Void)?
var onRemoveFromPlaylist: ((Track) -> Void)?
var onReorder: ((Int, Int) -> Void)? var onReorder: ((Int, Int) -> Void)?
var scrollToPlayingTrigger: UUID = UUID() var scrollToPlayingTrigger: UUID = UUID()
@ -333,8 +328,9 @@ struct TrackTableView: NSViewRepresentable {
func menuNeedsUpdate(_ menu: NSMenu) { func menuNeedsUpdate(_ menu: NSMenu) {
menu.removeAllItems() menu.removeAllItems()
guard let tableView, tableView.clickedRow >= 0, tableView.clickedRow < tracks.count else { return } guard let tableView, tableView.clickedRow >= 0, tableView.clickedRow < tracks.count else { return }
guard let config = parent.contextMenuConfig else { return }
if let lastPlaylistName = parent.lastUsedPlaylistName, parent.onAddToLastPlaylist != nil { if let lastPlaylistName = config.lastUsedPlaylistName, config.onAddToLastPlaylist != nil {
let lastItem = NSMenuItem( let lastItem = NSMenuItem(
title: "Add to \(lastPlaylistName)", title: "Add to \(lastPlaylistName)",
action: #selector(addToLastPlaylist(_:)), action: #selector(addToLastPlaylist(_:)),
@ -345,9 +341,9 @@ struct TrackTableView: NSViewRepresentable {
menu.addItem(.separator()) menu.addItem(.separator())
} }
if !parent.playlists.isEmpty { if !config.playlists.isEmpty {
let submenu = NSMenu() let submenu = NSMenu()
for (index, playlist) in parent.playlists.enumerated() { for (index, playlist) in config.playlists.enumerated() {
let item = NSMenuItem( let item = NSMenuItem(
title: playlist.name, title: playlist.name,
action: #selector(addToPlaylist(_:)), action: #selector(addToPlaylist(_:)),
@ -362,7 +358,7 @@ struct TrackTableView: NSViewRepresentable {
menu.addItem(submenuItem) menu.addItem(submenuItem)
} }
if parent.selectedPlaylist != nil, parent.onRemoveFromPlaylist != nil { if config.selectedPlaylist != nil, config.onRemoveFromPlaylist != nil {
menu.addItem(.separator()) menu.addItem(.separator())
let removeItem = NSMenuItem( let removeItem = NSMenuItem(
title: "Remove from Playlist", title: "Remove from Playlist",
@ -376,21 +372,24 @@ struct TrackTableView: NSViewRepresentable {
@objc func addToPlaylist(_ sender: NSMenuItem) { @objc func addToPlaylist(_ sender: NSMenuItem) {
guard let tableView, tableView.clickedRow >= 0, tableView.clickedRow < tracks.count else { return } guard let tableView, tableView.clickedRow >= 0, tableView.clickedRow < tracks.count else { return }
guard let config = parent.contextMenuConfig else { return }
let track = tracks[tableView.clickedRow] let track = tracks[tableView.clickedRow]
let playlist = parent.playlists[sender.tag] let playlist = config.playlists[sender.tag]
parent.onAddToPlaylist?(track, playlist) config.onAddToPlaylist(track, playlist)
} }
@objc func addToLastPlaylist(_ sender: NSMenuItem) { @objc func addToLastPlaylist(_ sender: NSMenuItem) {
guard let tableView, tableView.clickedRow >= 0, tableView.clickedRow < tracks.count else { return } guard let tableView, tableView.clickedRow >= 0, tableView.clickedRow < tracks.count else { return }
guard let config = parent.contextMenuConfig else { return }
let track = tracks[tableView.clickedRow] let track = tracks[tableView.clickedRow]
parent.onAddToLastPlaylist?(track) config.onAddToLastPlaylist?(track)
} }
@objc func removeFromPlaylist(_ sender: NSMenuItem) { @objc func removeFromPlaylist(_ sender: NSMenuItem) {
guard let tableView, tableView.clickedRow >= 0, tableView.clickedRow < tracks.count else { return } guard let tableView, tableView.clickedRow >= 0, tableView.clickedRow < tracks.count else { return }
guard let config = parent.contextMenuConfig else { return }
let track = tracks[tableView.clickedRow] let track = tracks[tableView.clickedRow]
parent.onRemoveFromPlaylist?(track) config.onRemoveFromPlaylist?(track)
} }
// MARK: - Drag and Drop // MARK: - Drag and Drop

Loading…
Cancel
Save