Subscribed channels list in tab navigation

This commit is contained in:
Arkadiusz Fal
2022-12-11 12:38:57 +01:00
parent 7ba743afbc
commit 5e0f13cace
28 changed files with 566 additions and 222 deletions

View File

@@ -12,7 +12,7 @@ struct CacheStatusHeader: View {
.opacity(isLoading ? 1 : 0)
Text(refreshTime)
}
.font(.caption)
.font(.caption.monospacedDigit())
.foregroundColor(.secondary)
}
}

View File

@@ -8,20 +8,42 @@ struct ChannelCell: View {
@Environment(\.navigationStyle) private var navigationStyle
var body: some View {
#if os(tvOS)
button
#else
if navigationStyle == .tab {
navigationLink
} else {
button
}
#endif
}
var navigationLink: some View {
NavigationLink(destination: ChannelVideosView(channel: channel).modifier(PlayerOverlayModifier())) {
labelContent
}
}
var button: some View {
Button {
NavigationModel.shared.openChannel(
channel,
navigationStyle: navigationStyle
)
} label: {
content
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
.contentShape(RoundedRectangle(cornerRadius: 12))
labelContent
}
.buttonStyle(.plain)
}
var content: some View {
var label: some View {
labelContent
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
.contentShape(RoundedRectangle(cornerRadius: 12))
}
var labelContent: some View {
VStack {
HStack(alignment: .top, spacing: 3) {
Image(systemName: "person.crop.rectangle")

View File

@@ -9,14 +9,22 @@ struct ChannelPlaylistCell: View {
var navigation = NavigationModel.shared
var body: some View {
Button {
NavigationModel.shared.openChannelPlaylist(playlist, navigationStyle: navigationStyle)
} label: {
content
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
.contentShape(RoundedRectangle(cornerRadius: 12))
if navigationStyle == .tab {
NavigationLink(destination: ChannelPlaylistView(playlist: playlist)) { cell }
} else {
Button {
NavigationModel.shared.openChannelPlaylist(playlist, navigationStyle: navigationStyle)
} label: {
cell
}
.buttonStyle(.plain)
}
.buttonStyle(.plain)
}
var cell: some View {
content
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
.contentShape(RoundedRectangle(cornerRadius: 12))
}
var content: some View {

View File

@@ -3,6 +3,7 @@ import SwiftUI
struct ChannelPlaylistView: View {
var playlist: ChannelPlaylist?
var showCloseButton = false
@State private var presentingShareSheet = false
@State private var shareURL: URL?
@@ -36,16 +37,6 @@ struct ChannelPlaylistView: View {
}
var body: some View {
if navigationStyle == .tab {
NavigationView {
content
}
} else {
content
}
}
var content: some View {
VStack(alignment: .leading) {
#if os(tvOS)
HStack {
@@ -81,7 +72,7 @@ struct ChannelPlaylistView: View {
#else
.toolbar {
ToolbarItem(placement: .cancellationAction) {
if navigationStyle == .tab {
if showCloseButton {
Button {
NavigationModel.shared.presentingPlaylist = false
} label: {

View File

@@ -4,6 +4,7 @@ import SwiftUI
struct ChannelVideosView: View {
var channel: Channel?
var showCloseButton = false
@State private var presentingShareSheet = false
@State private var shareURL: URL?
@@ -15,7 +16,6 @@ struct ChannelVideosView: View {
@StateObject private var store = Store<Channel>()
@Environment(\.colorScheme) private var colorScheme
@Environment(\.navigationStyle) private var navigationStyle
#if os(iOS)
@Environment(\.horizontalSizeClass) private var horizontalSizeClass
@@ -24,7 +24,7 @@ struct ChannelVideosView: View {
@ObservedObject private var accounts = AccountsModel.shared
@ObservedObject private var navigation = NavigationModel.shared
@ObservedObject private var recents = RecentsModel.shared
@ObservedObject private var subscriptions = SubscriptionsModel.shared
@ObservedObject private var subscriptions = SubsribedChannelsModel.shared
@Namespace private var focusNamespace
var presentedChannel: Channel? {
@@ -40,16 +40,6 @@ struct ChannelVideosView: View {
}
var body: some View {
if navigationStyle == .tab {
NavigationView {
content
}
} else {
content
}
}
var content: some View {
let content = VStack {
#if os(tvOS)
VStack {
@@ -95,7 +85,7 @@ struct ChannelVideosView: View {
}
#endif
ToolbarItem(placement: .cancellationAction) {
if navigationStyle == .tab {
if showCloseButton {
Button {
withAnimation(Constants.overlayAnimation) {
navigation.presentingChannel = false
@@ -141,13 +131,7 @@ struct ChannelVideosView: View {
}
#endif
.onAppear {
if navigationStyle == .tab {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
resource?.loadIfNeeded()
}
} else {
resource?.loadIfNeeded()
}
resource?.loadIfNeeded()
}
.onChange(of: contentType) { _ in
resource?.load()

View File

@@ -14,7 +14,7 @@ struct ControlsBar: View {
var navigation = NavigationModel.shared
@ObservedObject private var model = PlayerModel.shared
@ObservedObject private var playlists = PlaylistsModel.shared
@ObservedObject private var subscriptions = SubscriptionsModel.shared
@ObservedObject private var subscriptions = SubsribedChannelsModel.shared
@ObservedObject private var controls = PlayerControlsModel.shared

View File

@@ -15,7 +15,7 @@ struct VideoContextMenuView: View {
@ObservedObject private var navigation = NavigationModel.shared
@ObservedObject private var player = PlayerModel.shared
@ObservedObject private var playlists = PlaylistsModel.shared
@ObservedObject private var subscriptions = SubscriptionsModel.shared
@ObservedObject private var subscriptions = SubsribedChannelsModel.shared
@FetchRequest private var watchRequest: FetchedResults<Watch>