Simplify playlists view

This commit is contained in:
Arkadiusz Fal 2023-05-29 15:54:11 +02:00
parent 713570dfd6
commit 15f3e11a78
2 changed files with 19 additions and 36 deletions

View File

@ -3,7 +3,7 @@ import Siesta
import SwiftUI import SwiftUI
struct ChannelPlaylistView: View { struct ChannelPlaylistView: View {
var playlist: ChannelPlaylist? var playlist: ChannelPlaylist
var showCloseButton = false var showCloseButton = false
@StateObject private var store = Store<ChannelPlaylist>() @StateObject private var store = Store<ChannelPlaylist>()
@ -19,15 +19,7 @@ struct ChannelPlaylistView: View {
ContentItem.array(of: store.item?.videos ?? []) ContentItem.array(of: store.item?.videos ?? [])
} }
private var presentedPlaylist: ChannelPlaylist? {
playlist ?? recents.presentedPlaylist
}
private var resource: Resource? { private var resource: Resource? {
guard let playlist = presentedPlaylist else {
return nil
}
let resource = accounts.api.channelPlaylist(playlist.id) let resource = accounts.api.channelPlaylist(playlist.id)
resource?.addObserver(store) resource?.addObserver(store)
@ -38,21 +30,19 @@ struct ChannelPlaylistView: View {
VStack(alignment: .leading) { VStack(alignment: .leading) {
#if os(tvOS) #if os(tvOS)
HStack { HStack {
if let playlist = presentedPlaylist { ThumbnailView(url: store.item?.thumbnailURL ?? playlist.thumbnailURL)
ThumbnailView(url: store.item?.thumbnailURL ?? playlist.thumbnailURL) .frame(width: 140, height: 80)
.frame(width: 140, height: 80) .clipShape(RoundedRectangle(cornerRadius: 2))
.clipShape(RoundedRectangle(cornerRadius: 2))
Text(playlist.title) Text(playlist.title)
.font(.headline) .font(.headline)
.frame(alignment: .leading) .frame(alignment: .leading)
.lineLimit(1) .lineLimit(1)
Spacer() Spacer()
FavoriteButton(item: FavoriteItem(section: .channelPlaylist(accounts.app.appType.rawValue, playlist.id, playlist.title))) FavoriteButton(item: FavoriteItem(section: .channelPlaylist(accounts.app.appType.rawValue, playlist.id, playlist.title)))
.labelStyle(.iconOnly) .labelStyle(.iconOnly)
}
playButtons playButtons
.labelStyle(.iconOnly) .labelStyle(.iconOnly)
@ -63,9 +53,7 @@ struct ChannelPlaylistView: View {
} }
.environment(\.listingStyle, channelPlaylistListingStyle) .environment(\.listingStyle, channelPlaylistListingStyle)
.onAppear { .onAppear {
if let playlist = presentedPlaylist, if let cache = ChannelPlaylistsCacheModel.shared.retrievePlaylist(playlist) {
let cache = ChannelPlaylistsCacheModel.shared.retrievePlaylist(playlist)
{
store.replace(cache) store.replace(cache)
} }
resource?.loadIfNeeded()?.onSuccess { response in resource?.loadIfNeeded()?.onSuccess { response in
@ -111,14 +99,12 @@ struct ChannelPlaylistView: View {
} }
} }
} }
.navigationTitle(label) .navigationTitle(playlist.title)
#endif #endif
} }
@ViewBuilder private var favoriteButton: some View { @ViewBuilder private var favoriteButton: some View {
if let playlist = presentedPlaylist { FavoriteButton(item: FavoriteItem(section: .channelPlaylist(accounts.app.appType.rawValue, playlist.id, playlist.title)))
FavoriteButton(item: FavoriteItem(section: .channelPlaylist(accounts.app.appType.rawValue, playlist.id, playlist.title)))
}
} }
#if os(iOS) #if os(iOS)
@ -140,13 +126,13 @@ struct ChannelPlaylistView: View {
} }
} label: { } label: {
HStack(spacing: 12) { HStack(spacing: 12) {
if let url = store.item?.thumbnailURL ?? playlist?.thumbnailURL { if let url = store.item?.thumbnailURL ?? playlist.thumbnailURL {
ThumbnailView(url: url) ThumbnailView(url: url)
.frame(width: 60, height: 30) .frame(width: 60, height: 30)
.clipShape(RoundedRectangle(cornerRadius: 2)) .clipShape(RoundedRectangle(cornerRadius: 2))
} }
Text(label) Text(playlist.title)
.font(.headline) .font(.headline)
.foregroundColor(.primary) .foregroundColor(.primary)
@ -160,10 +146,6 @@ struct ChannelPlaylistView: View {
} }
#endif #endif
private var label: String {
presentedPlaylist?.title ?? ""
}
private var playlistButtonsPlacement: ToolbarItemPlacement { private var playlistButtonsPlacement: ToolbarItemPlacement {
#if os(iOS) #if os(iOS)
.navigationBarTrailing .navigationBarTrailing

View File

@ -7,6 +7,7 @@ struct AppTabNavigation: View {
private var player = PlayerModel.shared private var player = PlayerModel.shared
@ObservedObject private var feed = FeedModel.shared @ObservedObject private var feed = FeedModel.shared
@ObservedObject private var feedCount = UnwatchedFeedCountModel.shared @ObservedObject private var feedCount = UnwatchedFeedCountModel.shared
private var recents = RecentsModel.shared
@Default(.showHome) private var showHome @Default(.showHome) private var showHome
@Default(.showDocuments) private var showDocuments @Default(.showDocuments) private var showDocuments
@ -189,9 +190,9 @@ struct AppTabNavigation: View {
} }
@ViewBuilder private var playlistView: some View { @ViewBuilder private var playlistView: some View {
if navigation.presentingPlaylist { if navigation.presentingPlaylist, let playlist = recents.presentedPlaylist {
NavigationView { NavigationView {
ChannelPlaylistView(showCloseButton: true) ChannelPlaylistView(playlist: playlist, showCloseButton: true)
} }
.environment(\.managedObjectContext, persistenceController.container.viewContext) .environment(\.managedObjectContext, persistenceController.container.viewContext)
.id("channelPlaylist") .id("channelPlaylist")