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