diff --git a/Sora/Views/MediaInfoView/MediaInfoView.swift b/Sora/Views/MediaInfoView/MediaInfoView.swift index 03997c6..681eb4d 100644 --- a/Sora/Views/MediaInfoView/MediaInfoView.swift +++ b/Sora/Views/MediaInfoView/MediaInfoView.swift @@ -1373,7 +1373,21 @@ struct MediaInfoView: View { return } - let nextEpisode = episodeLinks[currentIndex + 1] + let autoSkipFillers = UserDefaults.standard.bool(forKey: "autoSkipFillers") + var nextIndex = currentIndex + 1 + + if autoSkipFillers, let fillerSet = jikanFillerSet { + while nextIndex < episodeLinks.count, fillerSet.contains(episodeLinks[nextIndex].number) { + Logger.shared.log("Skipping filler episode \(episodeLinks[nextIndex].number)", type: "Debug") + nextIndex += 1 + } + guard nextIndex < episodeLinks.count else { + Logger.shared.log("No more non-filler episodes to play", type: "Info") + return + } + } + + let nextEpisode = episodeLinks[nextIndex] selectedEpisodeNumber = nextEpisode.number fetchStream(href: nextEpisode.href) DropManager.shared.showDrop( diff --git a/Sora/Views/SettingsView/SettingsSubViews/SettingsViewBackup.swift b/Sora/Views/SettingsView/SettingsSubViews/SettingsViewBackup.swift index 0dc2129..219b9cb 100644 --- a/Sora/Views/SettingsView/SettingsSubViews/SettingsViewBackup.swift +++ b/Sora/Views/SettingsView/SettingsSubViews/SettingsViewBackup.swift @@ -302,6 +302,7 @@ struct SettingsViewBackup: View { "skipIntroOutroVisible", "pipButtonVisible", "autoplayNext", + "autoSkipFillers", "videoQualityWiFi", "videoQualityCellular", "subtitlesEnabled", diff --git a/Sora/Views/SettingsView/SettingsSubViews/SettingsViewPlayer.swift b/Sora/Views/SettingsView/SettingsSubViews/SettingsViewPlayer.swift index 5625ca1..7be874f 100644 --- a/Sora/Views/SettingsView/SettingsSubViews/SettingsViewPlayer.swift +++ b/Sora/Views/SettingsView/SettingsSubViews/SettingsViewPlayer.swift @@ -258,6 +258,7 @@ struct SettingsViewPlayer: View { @AppStorage("doubleTapSeekEnabled") private var doubleTapSeekEnabled: Bool = false @AppStorage("skipIntroOutroVisible") private var skipIntroOutroVisible: Bool = true @AppStorage("autoplayNext") private var autoplayNext: Bool = true + @AppStorage("autoSkipFillers") private var autoSkipFillers: Bool = false @AppStorage("introDBEnabled") private var introDBEnabled: Bool = true @AppStorage("videoQualityWiFi") private var wifiQuality: String = VideoQualityPreference.defaultWiFiPreference.rawValue @@ -301,6 +302,13 @@ struct SettingsViewPlayer: View { showDivider: true ) + SettingsToggleRow( + icon: "forward.fill", + title: NSLocalizedString("Auto Skip Filler Episodes", comment: ""), + isOn: $autoSkipFillers, + showDivider: true + ) + SettingsTextFieldRow( icon: "timer", title: NSLocalizedString("Completion Percentage", comment: ""),