diff --git a/Sources/Kaset/Views/MainWindow.swift b/Sources/Kaset/Views/MainWindow.swift index 8565692e7..06dfc2ec7 100644 --- a/Sources/Kaset/Views/MainWindow.swift +++ b/Sources/Kaset/Views/MainWindow.swift @@ -665,14 +665,26 @@ struct MainWindow: View { // swiftlint:disable:this type_body_length ) } + private func pinnedItemNavigationPath(for contentId: String) -> Binding { + Binding( + get: { self.pinnedNavigationPaths[contentId, default: NavigationPath()] }, + set: { self.pinnedNavigationPaths[contentId] = $0 } + ) + } + + private func pinnedItemPlayerBarNavigationAction(for contentId: String) -> PlayerBarNavigationAction { + PlayerBarNavigationAction( + openArtist: { self.pinnedNavigationPaths[contentId, default: NavigationPath()].append($0) }, + openAlbum: { self.pinnedNavigationPaths[contentId, default: NavigationPath()].append($0) } + ) + } + private func viewForSidebarPinnedItem( _ item: SidebarPinnedItem, client: any YTMusicClientProtocol ) -> some View { - NavigationStack(path: Binding( - get: { self.pinnedNavigationPaths[item.contentId, default: NavigationPath()] }, - set: { self.pinnedNavigationPaths[item.contentId] = $0 } - )) { + let playerBarNavigationAction = self.pinnedItemPlayerBarNavigationAction(for: item.contentId) + return NavigationStack(path: self.pinnedItemNavigationPath(for: item.contentId)) { Group { if !self.usesLegacyMacOS15UI, #available(macOS 26.0, *) { PlaylistDetailView( @@ -680,7 +692,8 @@ struct MainWindow: View { // swiftlint:disable:this type_body_length viewModel: PlaylistDetailViewModel( playlist: item.playlistRoute, client: client - ) + ), + playerBarNavigationAction: playerBarNavigationAction ) .environment(\.libraryViewModel, self.libraryViewModel) } else { @@ -689,13 +702,18 @@ struct MainWindow: View { // swiftlint:disable:this type_body_length viewModel: PlaylistDetailViewModel( playlist: item.playlistRoute, client: client - ) + ), + playerBarNavigationAction: playerBarNavigationAction ) .environment(\.libraryViewModel, self.libraryViewModel) } } .id(item.contentId) - .navigationDestinations(client: client) + .navigationDestinations( + client: client, + playerBarNavigationAction: playerBarNavigationAction + ) + .playerBarMusicNavigation(path: self.pinnedItemNavigationPath(for: item.contentId)) } .environment(\.libraryViewModel, self.libraryViewModel) .environment(\.onPlaylistDeleted) {