diff --git a/Sora/Views/MediaInfoView/MediaInfoView.swift b/Sora/Views/MediaInfoView/MediaInfoView.swift index 902228e..a967891 100644 --- a/Sora/Views/MediaInfoView/MediaInfoView.swift +++ b/Sora/Views/MediaInfoView/MediaInfoView.swift @@ -44,6 +44,7 @@ struct MediaInfoView: View { @AppStorage("externalPlayer") private var externalPlayer: String = "Default" @AppStorage("episodeChunkSize") private var episodeChunkSize: Int = 100 + @AppStorage("episodeSortOrder") private var episodeSortOrder: String = "Ascending" @StateObject private var jsController = JSController() @EnvironmentObject var moduleManager: ModuleManager @@ -595,6 +596,13 @@ struct MediaInfoView: View { return groups } + private func sortEpisodes(_ episodes: [EpisodeLink]) -> [EpisodeLink] { + if episodeSortOrder == "Descending" { + return episodes.sorted(by: { $0.number > $1.number }) + } else { + return episodes.sorted(by: { $0.number < $1.number }) + } + } func fetchDetails() { DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { @@ -609,7 +617,7 @@ struct MediaInfoView: View { self.aliases = item.aliases self.airdate = item.airdate } - self.episodeLinks = episodes + self.episodeLinks = self.sortEpisodes(episodes) self.isLoading = false self.isRefetching = false } @@ -620,7 +628,7 @@ struct MediaInfoView: View { self.aliases = item.aliases self.airdate = item.airdate } - self.episodeLinks = episodes + self.episodeLinks = self.sortEpisodes(episodes) self.isLoading = false self.isRefetching = false } diff --git a/Sora/Views/SettingsView/SettingsSubViews/SettingsViewGeneral.swift b/Sora/Views/SettingsView/SettingsSubViews/SettingsViewGeneral.swift index ed21a08..19ca15f 100644 --- a/Sora/Views/SettingsView/SettingsSubViews/SettingsViewGeneral.swift +++ b/Sora/Views/SettingsView/SettingsSubViews/SettingsViewGeneral.swift @@ -16,8 +16,10 @@ struct SettingsViewGeneral: View { @AppStorage("metadataProviders") private var metadataProviders: String = "AniList" @AppStorage("mediaColumnsPortrait") private var mediaColumnsPortrait: Int = 2 @AppStorage("mediaColumnsLandscape") private var mediaColumnsLandscape: Int = 4 + @AppStorage("episodeSortOrder") private var episodeSortOrder: String = "Ascending" private let metadataProvidersList = ["AniList"] + private let sortOrderOptions = ["Ascending", "Descending"] @EnvironmentObject var settings: Settings var body: some View { @@ -50,6 +52,20 @@ struct SettingsViewGeneral: View { } Toggle("Fetch Episode metadata", isOn: $fetchEpisodeMetadata) .tint(.accentColor) + + HStack { + Text("Episode Sort Order") + Spacer() + Menu(episodeSortOrder) { + Button(action: { episodeSortOrder = "Ascending" }) { + Text("Ascending (1-100)") + } + Button(action: { episodeSortOrder = "Descending" }) { + Text("Descending (100-1)") + } + } + } + HStack { Text("Metadata Provider") Spacer()