diff --git a/Model/NavigationModel.swift b/Model/NavigationModel.swift index cf27762d..27491b62 100644 --- a/Model/NavigationModel.swift +++ b/Model/NavigationModel.swift @@ -41,6 +41,32 @@ final class NavigationModel: ObservableObject { @Published var presentingSettings = false @Published var presentingWelcomeScreen = false + static func openChannel( + _ channel: Channel, + player: PlayerModel, + recents: RecentsModel, + navigation: NavigationModel, + navigationStyle: NavigationStyle + ) { + let recent = RecentItem(from: channel) + player.presentingPlayer = false + + let openRecent = { + recents.add(recent) + navigation.presentingChannel = true + } + + if navigationStyle == .tab { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { + openRecent() + } + } else if navigationStyle == .sidebar { + openRecent() + navigation.sidebarSectionChanged.toggle() + navigation.tabSelection = .recentlyOpened(recent.tag) + } + } + var tabSelectionBinding: Binding { Binding( get: { diff --git a/Shared/Views/ChannelCell.swift b/Shared/Views/ChannelCell.swift index af33f976..371a0e91 100644 --- a/Shared/Views/ChannelCell.swift +++ b/Shared/Views/ChannelCell.swift @@ -8,18 +8,18 @@ struct ChannelCell: View { @Environment(\.navigationStyle) private var navigationStyle @EnvironmentObject private var navigation + @EnvironmentObject private var player @EnvironmentObject private var recents var body: some View { Button { - let recent = RecentItem(from: channel) - recents.add(recent) - navigation.presentingChannel = true - - if navigationStyle == .sidebar { - navigation.sidebarSectionChanged.toggle() - navigation.tabSelection = .recentlyOpened(recent.tag) - } + NavigationModel.openChannel( + channel, + player: player, + recents: recents, + navigation: navigation, + navigationStyle: navigationStyle + ) } label: { content .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity) diff --git a/Shared/Views/VideoContextMenuView.swift b/Shared/Views/VideoContextMenuView.swift index a85d7cd8..67566c5b 100644 --- a/Shared/Views/VideoContextMenuView.swift +++ b/Shared/Views/VideoContextMenuView.swift @@ -97,14 +97,13 @@ struct VideoContextMenuView: View { private var openChannelButton: some View { Button { - let recent = RecentItem(from: video.channel) - recents.add(recent) - navigation.presentingChannel = true - - if navigationStyle == .sidebar { - navigation.sidebarSectionChanged.toggle() - navigation.tabSelection = .recentlyOpened(recent.tag) - } + NavigationModel.openChannel( + video.channel, + player: player, + recents: recents, + navigation: navigation, + navigationStyle: navigationStyle + ) } label: { Label("\(video.author) Channel", systemImage: "rectangle.stack.fill.badge.person.crop") }