1
0
mirror of https://github.com/yattee/yattee.git synced 2024-12-15 14:50:32 +05:30
yattee/Shared/Settings/SponsorBlockSettings.swift

112 lines
3.7 KiB
Swift
Raw Normal View History

2022-01-06 20:32:53 +05:30
import Defaults
import SwiftUI
struct SponsorBlockSettings: View {
@Default(.sponsorBlockInstance) private var sponsorBlockInstance
@Default(.sponsorBlockCategories) private var sponsorBlockCategories
var body: some View {
Group {
#if os(macOS)
sections
Spacer()
#else
List {
sections
}
#endif
}
#if os(tvOS)
.frame(maxWidth: 1000)
2022-11-12 00:23:52 +05:30
#else
.frame(minWidth: 0, maxWidth: .infinity, alignment: .leading)
2022-01-06 20:32:53 +05:30
#endif
.navigationTitle("SponsorBlock")
}
private var sections: some View {
Group {
Section(header: SettingsHeader(text: "SponsorBlock API")) {
TextField(
"SponsorBlock API Instance",
text: $sponsorBlockInstance
)
.labelsHidden()
#if !os(macOS)
.autocapitalization(.none)
.keyboardType(.URL)
#endif
}
2022-09-04 20:58:30 +05:30
Section(header: SettingsHeader(text: "Categories to Skip".localized()), footer: categoriesDetails) {
2022-01-06 20:32:53 +05:30
#if os(macOS)
let list = ForEach(SponsorBlockAPI.categories, id: \.self) { category in
2022-08-13 19:42:45 +05:30
MultiselectRow(
2022-01-06 20:32:53 +05:30
title: SponsorBlockAPI.categoryDescription(category) ?? "Unknown",
selected: sponsorBlockCategories.contains(category)
) { value in
toggleCategory(category, value: value)
}
}
Group {
if #available(macOS 12.0, *) {
list
.listStyle(.inset(alternatesRowBackgrounds: true))
} else {
list
.listStyle(.inset)
}
}
Spacer()
#else
ForEach(SponsorBlockAPI.categories, id: \.self) { category in
2022-08-13 19:42:45 +05:30
MultiselectRow(
2022-01-06 20:32:53 +05:30
title: SponsorBlockAPI.categoryDescription(category) ?? "Unknown",
selected: sponsorBlockCategories.contains(category)
) { value in
toggleCategory(category, value: value)
}
}
#endif
}
}
}
2022-01-08 00:16:47 +05:30
private var categoriesDetails: some View {
VStack(alignment: .leading) {
ForEach(SponsorBlockAPI.categories, id: \.self) { category in
Text(SponsorBlockAPI.categoryDescription(category) ?? "Category")
.fontWeight(.bold)
#if os(tvOS)
.focusable()
#endif
Text(SponsorBlockAPI.categoryDetails(category) ?? "Details")
.padding(.bottom, 3)
.fixedSize(horizontal: false, vertical: true)
}
}
.foregroundColor(.secondary)
.padding(.top, 3)
}
2022-01-06 20:32:53 +05:30
func toggleCategory(_ category: String, value: Bool) {
if let index = sponsorBlockCategories.firstIndex(where: { $0 == category }), !value {
sponsorBlockCategories.remove(at: index)
} else if value {
sponsorBlockCategories.insert(category)
}
}
}
2022-01-08 00:16:47 +05:30
struct SponsorBlockSettings_Previews: PreviewProvider {
2022-01-06 20:32:53 +05:30
static var previews: some View {
VStack {
SponsorBlockSettings()
}
2022-11-12 00:23:52 +05:30
.frame(maxHeight: 600)
2022-01-06 20:32:53 +05:30
}
}