diff --git a/Shared/Defaults.swift b/Shared/Defaults.swift index 26dc7728..f1ed24b6 100644 --- a/Shared/Defaults.swift +++ b/Shared/Defaults.swift @@ -147,6 +147,7 @@ extension Defaults.Keys { static let expandVideoDescriptionDefault = true #endif static let expandVideoDescription = Key("expandVideoDescription", default: expandVideoDescriptionDefault) + static let collapsedLinesDescription = Key("collapsedLinesDescription", default: 5) static let showChannelAvatarInChannelsLists = Key("showChannelAvatarInChannelsLists", default: true) static let showChannelAvatarInVideosListing = Key("showChannelAvatarInVideosListing", default: true) diff --git a/Shared/Player/Video Details/VideoDescription.swift b/Shared/Player/Video Details/VideoDescription.swift index f8175528..5b4bc99f 100644 --- a/Shared/Player/Video Details/VideoDescription.swift +++ b/Shared/Player/Video Details/VideoDescription.swift @@ -6,11 +6,10 @@ import Foundation import SwiftUI struct VideoDescription: View { - static let collapsedLines = 5 - private var search: SearchModel { .shared } @Default(.showKeywords) private var showKeywords @Default(.expandVideoDescription) private var expandVideoDescription + @Default(.collapsedLinesDescription) private var collapsedLinesDescription var video: Video var detailsSize: CGSize? @@ -51,14 +50,14 @@ struct VideoDescription: View { if #available(macOS 12, *) { DescriptionWithLinks(description: description, detailsSize: detailsSize) .frame(maxWidth: .infinity, alignment: .leading) - .lineLimit(shouldExpand ? 500 : Self.collapsedLines) + .lineLimit(shouldExpand ? 500 : collapsedLinesDescription) #if !os(tvOS) .textSelection(.enabled) #endif } else { Text(description) .frame(maxWidth: .infinity, alignment: .leading) - .lineLimit(shouldExpand ? 500 : Self.collapsedLines) + .lineLimit(shouldExpand ? 500 : collapsedLinesDescription) } } .multilineTextAlignment(.leading) @@ -142,6 +141,8 @@ struct VideoDescription: View { @Environment(\.openURL) private var openURL + @Default(.collapsedLinesDescription) private var collapsedLinesDescription + var player = PlayerModel.shared func makeUIView(context _: Context) -> some UIView { @@ -175,7 +176,7 @@ struct VideoDescription: View { } func updateNumberOfLines() { - label.numberOfLines = expand ? 0 : VideoDescription.collapsedLines + label.numberOfLines = expand ? 0 : collapsedLinesDescription } func urlTapHandler(_ url: URL) { diff --git a/Shared/Settings/PlayerSettings.swift b/Shared/Settings/PlayerSettings.swift index aee4c07d..e25b77aa 100644 --- a/Shared/Settings/PlayerSettings.swift +++ b/Shared/Settings/PlayerSettings.swift @@ -12,6 +12,7 @@ struct PlayerSettings: View { @Default(.showScrollToTopInComments) private var showScrollToTopInComments #endif @Default(.expandVideoDescription) private var expandVideoDescription + @Default(.collapsedLinesDescription) private var collapsedLinesDescription @Default(.pauseOnHidingPlayer) private var pauseOnHidingPlayer @Default(.closeVideoOnEOF) private var closeVideoOnEOF #if os(iOS) @@ -77,6 +78,7 @@ struct PlayerSettings: View { #if !os(tvOS) Section(header: SettingsHeader(text: "Info".localized())) { expandVideoDescriptionToggle + collapsedLineDescriptionStepper showChaptersToggle showRelatedToggle #if os(macOS) @@ -194,6 +196,19 @@ struct PlayerSettings: View { Toggle("Open video description expanded", isOn: $expandVideoDescription) } + private var collapsedLineDescriptionStepper: some View { + Stepper(value: $collapsedLinesDescription, in: 0 ... 10) { + Text("Description preview") + if collapsedLinesDescription == 0 { + Text("No preview") + } else if collapsedLinesDescription == 1 { + Text("\(collapsedLinesDescription) line") + } else { + Text("\(collapsedLinesDescription) lines") + } + } + } + private var returnYouTubeDislikeToggle: some View { Toggle("Enable Return YouTube Dislike", isOn: $enableReturnYouTubeDislike) }