feat: wire TrackContextMenuConfig to bottom controls and track table

Extract shared `trackContextMenuConfig` computed property and pass it to
both TrackTableView and PlayerControlsView, so right-clicking the now-playing
area shows the same context menu as right-clicking a track row.
feat/music-streaming
Laurent 1 month ago
parent 3ccdfbfc79
commit bd97d060a0
  1. 37
      Music/ContentView.swift

@ -178,20 +178,7 @@ struct ContentView: View {
player.setQueue(trackList)
player.play(track)
},
playlists: playlist.playlists,
lastUsedPlaylistName: playlist.lastUsedPlaylistName,
selectedPlaylist: playlist.selectedPlaylist,
onAddToPlaylist: { track, targetPlaylist in
try? playlist.addTrack(track, to: targetPlaylist)
},
onAddToLastPlaylist: { track in
try? playlist.addTrackToLastUsedPlaylist(track)
},
onRemoveFromPlaylist: playlist.selectedPlaylist != nil ? { track in
if let selected = playlist.selectedPlaylist {
try? playlist.removeTrack(track, from: selected)
}
} : nil,
contextMenuConfig: trackContextMenuConfig,
onReorder: playlist.selectedPlaylist != nil ? { from, to in
if let selected = playlist.selectedPlaylist {
try? playlist.moveTrack(in: selected, from: from, to: to)
@ -368,6 +355,25 @@ struct ContentView: View {
}
}
private var trackContextMenuConfig: TrackContextMenuConfig {
TrackContextMenuConfig(
playlists: playlist.playlists,
lastUsedPlaylistName: playlist.lastUsedPlaylistName,
selectedPlaylist: playlist.selectedPlaylist,
onAddToPlaylist: { track, targetPlaylist in
try? playlist.addTrack(track, to: targetPlaylist)
},
onAddToLastPlaylist: { track in
try? playlist.addTrackToLastUsedPlaylist(track)
},
onRemoveFromPlaylist: playlist.selectedPlaylist != nil ? { track in
if let selected = playlist.selectedPlaylist {
try? playlist.removeTrack(track, from: selected)
}
} : nil
)
}
private var playerControls: some View {
PlayerControlsView(
currentTrack: player.currentTrack,
@ -397,7 +403,8 @@ struct ContentView: View {
onScrubEnd: { player.endScrubbing(at: $0) },
onVolumeChange: { player.setVolume($0) },
onShuffleToggle: { player.toggleShuffle() },
onNowPlayingTap: { scrollToPlayingTrigger = UUID() }
onNowPlayingTap: { scrollToPlayingTrigger = UUID() },
contextMenuConfig: trackContextMenuConfig
)
}

Loading…
Cancel
Save