Add SponsorBlock categories details

This commit is contained in:
Arkadiusz Fal 2022-01-07 19:46:47 +01:00
parent 3630cd404d
commit d1ed896166
3 changed files with 55 additions and 3 deletions

View File

@ -20,13 +20,47 @@ final class SponsorBlockAPI: ObservableObject {
switch name { switch name {
case "selfpromo": case "selfpromo":
return "Self-promotion" return "Self-promotion"
case "music_offtopic": case "music_offtopic":
return "Offtopic in Music Videos" return "Offtopic in Music Videos"
default: default:
return name.capitalized return name.capitalized
} }
} }
static func categoryDetails(_ name: String) -> String? {
guard SponsorBlockAPI.categories.contains(name) else {
return nil
}
switch name {
case "sponsor":
return "Part of a video promoting a product or service not directly related to the creator. " +
"The creator will receive payment or compensation in the form of money or free products."
case "selfpromo":
return "Promoting a product or service that is directly related to the creator themselves. " +
"This usually includes merchandise or promotion of monetized platforms."
case "intro":
return "Segments typically found at the start of a video that include an animation, " +
"still frame or clip which are also seen in other videos by the same creator."
case "outro":
return "Typically near or at the end of the video when the credits pop up and/or endcards are shown."
case "interaction":
return "Explicit reminders to like, subscribe or interact with them on any paid or free platform(s) (e.g. click on a video)."
case "music_offtopic":
return "For videos which feature music as the primary content."
default:
return nil
}
}
func loadSegments(videoID: String, categories: Set<String>, completionHandler: @escaping () -> Void = {}) { func loadSegments(videoID: String, categories: Set<String>, completionHandler: @escaping () -> Void = {}) {
guard !skipSegmentsURL.isNil, self.videoID != videoID else { guard !skipSegmentsURL.isNil, self.videoID != videoID else {
completionHandler() completionHandler()

View File

@ -183,7 +183,7 @@ struct SettingsView: View {
case .history: case .history:
return 480 return 480
case .sponsorBlock: case .sponsorBlock:
return 290 return 660
case .updates: case .updates:
return 200 return 200
case .help: case .help:

View File

@ -39,7 +39,7 @@ struct SponsorBlockSettings: View {
#endif #endif
} }
Section(header: SettingsHeader(text: "Categories to Skip")) { Section(header: SettingsHeader(text: "Categories to Skip"), footer: categoriesDetails) {
#if os(macOS) #if os(macOS)
let list = ForEach(SponsorBlockAPI.categories, id: \.self) { category in let list = ForEach(SponsorBlockAPI.categories, id: \.self) { category in
SponsorBlockCategorySelectionRow( SponsorBlockCategorySelectionRow(
@ -74,6 +74,24 @@ struct SponsorBlockSettings: View {
} }
} }
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)
}
func toggleCategory(_ category: String, value: Bool) { func toggleCategory(_ category: String, value: Bool) {
if let index = sponsorBlockCategories.firstIndex(where: { $0 == category }), !value { if let index = sponsorBlockCategories.firstIndex(where: { $0 == category }), !value {
sponsorBlockCategories.remove(at: index) sponsorBlockCategories.remove(at: index)
@ -123,7 +141,7 @@ struct SponsorBlockSettings: View {
} }
} }
struct ServicesSettings_Previews: PreviewProvider { struct SponsorBlockSettings_Previews: PreviewProvider {
static var previews: some View { static var previews: some View {
VStack { VStack {
SponsorBlockSettings() SponsorBlockSettings()