From 5a76bf97cdadab6cf9be8c93f27f25118d51b62b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 20 Feb 2026 16:28:35 +0000 Subject: [PATCH 1/2] Initial plan From 2f6614b2fb6dbe8ddb1d1008aef6e936d50476c1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 20 Feb 2026 16:34:17 +0000 Subject: [PATCH 2/2] Add Auto Skip Filler Episodes setting in player settings Co-authored-by: scigward <162128369+scigward@users.noreply.github.com> --- Sora/Views/MediaInfoView/MediaInfoView.swift | 16 +++++++++++++++- .../SettingsSubViews/SettingsViewBackup.swift | 1 + .../SettingsSubViews/SettingsViewPlayer.swift | 8 ++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) 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: ""),