Settings for new features

This commit is contained in:
Arkadiusz Fal 2022-12-19 01:37:09 +01:00
parent 3de18da7a7
commit 2ce903b6c3
6 changed files with 67 additions and 15 deletions

View File

@ -31,6 +31,7 @@ struct ChannelVideosView: View {
@Namespace private var focusNamespace
@Default(.channelPlaylistListingStyle) private var channelPlaylistListingStyle
@Default(.expandChannelDescription) private var expandChannelDescription
var presentedChannel: Channel? {
store.item ?? channel ?? recents.presentedChannel
@ -165,6 +166,8 @@ struct ChannelVideosView: View {
}
#endif
.onAppear {
descriptionExpanded = expandChannelDescription
if let channel,
let cache = ChannelsCacheModel.shared.retrieve(channel.cacheKey),
store.item.isNil

View File

@ -23,6 +23,7 @@ extension Defaults.Keys {
static let showHome = Key<Bool>("showHome", default: true)
static let showOpenActionsInHome = Key<Bool>("showOpenActionsInHome", default: true)
static let showQueueInHome = Key<Bool>("showQueueInHome", default: true)
static let showOpenActionsToolbarItem = Key<Bool>("showOpenActionsToolbarItem", default: false)
static let showFavoritesInHome = Key<Bool>("showFavoritesInHome", default: true)
#if os(iOS)
@ -35,6 +36,8 @@ extension Defaults.Keys {
static let playerButtonSingleTapGesture = Key<PlayerTapGestureAction>("playerButtonSingleTapGesture", default: .togglePlayer)
static let playerButtonDoubleTapGesture = Key<PlayerTapGestureAction>("playerButtonDoubleTapGesture", default: .togglePlayerVisibility)
static let playerButtonShowsControlButtonsWhenMinimized = Key<Bool>("playerButtonShowsControlButtonsWhenMinimized", default: false)
static let playerButtonIsExpanded = Key<Bool>("playerButtonIsExpanded", default: false)
static let playerBarMaxWidth = Key<String>("playerBarMaxWidth", default: "600")
#if !os(tvOS)
#if os(macOS)
@ -48,6 +51,7 @@ extension Defaults.Keys {
#if os(iOS)
static let lockPortraitWhenBrowsing = Key<Bool>("lockPortraitWhenBrowsing", default: UIDevice.current.userInterfaceIdiom == .phone)
#endif
static let expandChannelDescription = Key<Bool>("expandChannelDescription", default: false)
static let channelOnThumbnail = Key<Bool>("channelOnThumbnail", default: false)
static let timeOnThumbnail = Key<Bool>("timeOnThumbnail", default: true)
static let roundedThumbnails = Key<Bool>("roundedThumbnails", default: true)

View File

@ -27,6 +27,7 @@ struct HomeView: View {
@Default(.homeHistoryItems) private var homeHistoryItems
@Default(.showFavoritesInHome) private var showFavoritesInHome
@Default(.showOpenActionsInHome) private var showOpenActionsInHome
@Default(.showQueueInHome) private var showQueueInHome
private var navigation: NavigationModel { .shared }
@ -69,13 +70,14 @@ struct HomeView: View {
.padding(.horizontal, 15)
#endif
if showQueueInHome {
QueueView()
.padding(.vertical, 15)
#if os(tvOS)
.padding(.horizontal, 40)
#else
.padding(.horizontal, 15)
#endif
}
if !accounts.current.isNil, showFavoritesInHome {
#if os(tvOS)

View File

@ -8,21 +8,24 @@ struct QueueView: View {
var body: some View {
LazyVStack {
if !items.isEmpty {
HStack {
sectionLabel("Next in queue")
Button {
withAnimation {
expanded.toggle()
}
} label: {
HStack {
sectionLabel(label)
Spacer()
Label("Show more", systemImage: expanded ? "chevron.up" : "chevron.down")
.animation(nil, value: expanded)
.foregroundColor(.accentColor)
.imageScale(.large)
.labelStyle(.iconOnly)
}
.opacity(items.count > 1 ? 1 : 0)
}
}
.disabled(items.count < 2)
ForEach(limitedItems) { item in
ContentItemView(item: .init(video: item.video))
.environment(\.listingStyle, .list)
@ -32,6 +35,15 @@ struct QueueView: View {
}
}
}
.padding(.vertical, items.isEmpty ? 0 : 15)
}
var label: String {
if items.count < 2 {
return "Next in Queue"
}
return "Next in Queue (\(items.count))"
}
var limitedItems: [PlayerQueueItem] {

View File

@ -9,6 +9,8 @@ struct PlayerOverlayModifier: ViewModifier {
@Environment(\.navigationStyle) private var navigationStyle
@Default(.playerButtonShowsControlButtonsWhenMinimized) private var controlsWhenMinimized
@Default(.playerButtonIsExpanded) private var playerButtonIsExpanded
@Default(.playerBarMaxWidth) private var playerBarMaxWidth
func body(content: Content) -> some View {
content
@ -23,10 +25,20 @@ struct PlayerOverlayModifier: ViewModifier {
ControlsBar(fullScreen: .constant(false), expansionState: $expansionState, playerBar: true)
.offset(x: expansionState == .mini && !controlsWhenMinimized ? 10 : 0, y: 0)
.transition(.opacity)
.frame(maxWidth: maxWidth, alignment: .trailing)
.onAppear {
if playerButtonIsExpanded {
expansionState = .full
}
}
}
}
.animation(.default, value: player.currentItem)
}
var maxWidth: Double {
playerBarMaxWidth == "0" ? .infinity : (Double(playerBarMaxWidth) ?? 600)
}
}
struct PlayerOverlayModifier_Previews: PreviewProvider {

View File

@ -17,6 +17,7 @@ struct BrowsingSettings: View {
@Default(.timeOnThumbnail) private var timeOnThumbnail
@Default(.showHome) private var showHome
@Default(.showFavoritesInHome) private var showFavoritesInHome
@Default(.showQueueInHome) private var showQueueInHome
@Default(.showOpenActionsInHome) private var showOpenActionsInHome
@Default(.showOpenActionsToolbarItem) private var showOpenActionsToolbarItem
@Default(.homeHistoryItems) private var homeHistoryItems
@ -24,6 +25,9 @@ struct BrowsingSettings: View {
@Default(.playerButtonSingleTapGesture) private var playerButtonSingleTapGesture
@Default(.playerButtonDoubleTapGesture) private var playerButtonDoubleTapGesture
@Default(.playerButtonShowsControlButtonsWhenMinimized) private var playerButtonShowsControlButtonsWhenMinimized
@Default(.playerButtonIsExpanded) private var playerButtonIsExpanded
@Default(.playerBarMaxWidth) private var playerBarMaxWidth
@Default(.expandChannelDescription) private var expandChannelDescription
@ObservedObject private var accounts = AccountsModel.shared
@ -86,6 +90,7 @@ struct BrowsingSettings: View {
}
#endif
Toggle("Show Open Videos quick actions", isOn: $showOpenActionsInHome)
Toggle("Show Next in Queue", isOn: $showQueueInHome)
#if os(iOS)
HStack {
@ -157,9 +162,21 @@ struct BrowsingSettings: View {
#if !os(tvOS)
private var playerBarSettings: some View {
Section(header: SettingsHeader(text: "Player Bar".localized()), footer: playerBarFooter) {
Toggle("Open expanded", isOn: $playerButtonIsExpanded)
Toggle("Always show controls buttons", isOn: $playerButtonShowsControlButtonsWhenMinimized)
playerBarGesturePicker("Single tap gesture", selection: $playerButtonSingleTapGesture)
playerBarGesturePicker("Double tap gesture", selection: $playerButtonDoubleTapGesture)
HStack {
Text("Maximum width expanded")
Spacer()
TextField("Maximum width expanded", text: $playerBarMaxWidth)
.frame(maxWidth: 100, alignment: .trailing)
.multilineTextAlignment(.trailing)
.labelsHidden()
#if !os(macOS)
.keyboardType(.numberPad)
#endif
}
}
}
@ -205,6 +222,8 @@ struct BrowsingSettings: View {
Toggle("Show anonymous accounts", isOn: $accountPickerDisplaysAnonymousAccounts)
}
Toggle("Open channels with description expanded", isOn: $expandChannelDescription)
}
}