import Foundation import SwiftUI struct ContentItemView: View { let item: ContentItem @Environment(\.listingStyle) private var listingStyle @Environment(\.noListingDividers) private var noListingDividers @Environment(\.hideShorts) private var hideShorts @ViewBuilder var body: some View { if itemVisible { Group { switch item.contentType { case .video: videoItem(item.video) case .channel: channelItem(item.channel) case .playlist: playlistItem(item.playlist) default: placeholderItem() } } .id(item.cacheKey) } } var itemVisible: Bool { guard hideShorts, item.contentType == .video, let video = item.video else { return true } return !video.short } @ViewBuilder func videoItem(_ video: Video) -> some View { if listingStyle == .cells { VideoCell(video: video) } else { let item = PlayerQueueItem(video) PlayerQueueRow(item: item) .contextMenu { VideoContextMenuView(video: video) } .id(item.id) #if os(tvOS) .padding(.horizontal, 30) #endif #if !os(tvOS) Divider() .opacity(noListingDividers ? 0 : 1) #endif } } @ViewBuilder func playlistItem(_ playlist: ChannelPlaylist) -> some View { if listingStyle == .cells { ChannelPlaylistCell(playlist: playlist) } else { ChannelPlaylistListItem(playlist: playlist) #if os(tvOS) .padding(.horizontal, 30) #endif #if !os(tvOS) Divider() #endif } } @ViewBuilder func channelItem(_ channel: Channel) -> some View { if listingStyle == .cells { ChannelCell(channel: channel) } else { ChannelListItem(channel: channel) #if os(tvOS) .padding(.horizontal, 30) #endif #if !os(tvOS) Divider() #endif } } @ViewBuilder func placeholderItem() -> some View { if listingStyle == .cells { PlaceholderCell() .id(item.id) } else { PlaceholderListItem() #if os(tvOS) .padding(.horizontal, 30) #endif #if !os(tvOS) Divider() #endif } } }