mirror of
https://github.com/cranci1/Sora.git
synced 2026-04-18 07:02:45 +00:00
fix range selector for seasons
This commit is contained in:
parent
e05b1ed3fe
commit
0c50ce8cdd
1 changed files with 40 additions and 6 deletions
|
|
@ -192,6 +192,12 @@ struct MediaInfoView: View {
|
|||
UserDefaults.standard.set(newValue.lowerBound, forKey: selectedRangeKey)
|
||||
}
|
||||
.onChange(of: selectedSeason) { newValue in
|
||||
let ranges = generateRanges(for: currentEpisodeList.count)
|
||||
if let validRange = ranges.first(where: { $0 == selectedRange }) {
|
||||
selectedRange = validRange
|
||||
} else {
|
||||
selectedRange = ranges.first ?? 0..<episodeChunkSize
|
||||
}
|
||||
UserDefaults.standard.set(newValue, forKey: selectedSeasonKey)
|
||||
}
|
||||
.onChange(of: selectedChapterRange) { newValue in
|
||||
|
|
@ -565,7 +571,7 @@ struct MediaInfoView: View {
|
|||
@ViewBuilder
|
||||
private var rangeSelectorStyled: some View {
|
||||
Menu {
|
||||
ForEach(generateRanges(), id: \..self) { range in
|
||||
ForEach(episodeRanges, id: \.self) { range in
|
||||
Button(action: { selectedRange = range }) {
|
||||
Text("\(range.lowerBound + 1)-\(range.upperBound)")
|
||||
}
|
||||
|
|
@ -625,9 +631,9 @@ struct MediaInfoView: View {
|
|||
@ViewBuilder
|
||||
private var flatEpisodeList: some View {
|
||||
VStack(spacing: 15) {
|
||||
ForEach(episodeLinks.indices.filter { selectedRange.contains($0) }, id: \.self) { i in
|
||||
let ep = episodeLinks[i]
|
||||
createEpisodeCell(episode: ep, index: i, season: 1)
|
||||
ForEach(currentEpisodeList.indices.filter { selectedRange.contains($0) }, id: \.self) { i in
|
||||
let ep = currentEpisodeList[i]
|
||||
createEpisodeCell(episode: ep, index: i, season: isGroupedBySeasons ? selectedSeason + 1 : 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -637,8 +643,9 @@ struct MediaInfoView: View {
|
|||
let seasons = groupedEpisodes()
|
||||
if !seasons.isEmpty, selectedSeason < seasons.count {
|
||||
VStack(spacing: 15) {
|
||||
ForEach(seasons[selectedSeason]) { ep in
|
||||
createEpisodeCell(episode: ep, index: selectedSeason, season: selectedSeason + 1)
|
||||
ForEach(seasons[selectedSeason].indices.filter { selectedRange.contains($0) }, id: \.self) { i in
|
||||
let ep = seasons[selectedSeason][i]
|
||||
createEpisodeCell(episode: ep, index: i, season: selectedSeason + 1)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
|
@ -2356,4 +2363,31 @@ struct MediaInfoView: View {
|
|||
UserDefaults.standard.set(true, forKey: "navigatingToReaderView")
|
||||
})
|
||||
}
|
||||
|
||||
// MARK: - Episode Range Fix for Seasons
|
||||
private func generateRanges(for count: Int) -> [Range<Int>] {
|
||||
let chunkSize = episodeChunkSize
|
||||
var ranges: [Range<Int>] = []
|
||||
for i in stride(from: 0, to: count, by: chunkSize) {
|
||||
let end = min(i + chunkSize, count)
|
||||
ranges.append(i..<end)
|
||||
}
|
||||
return ranges
|
||||
}
|
||||
|
||||
private var currentEpisodeList: [EpisodeLink] {
|
||||
if isGroupedBySeasons {
|
||||
let seasons = groupedEpisodes()
|
||||
if selectedSeason < seasons.count {
|
||||
return seasons[selectedSeason]
|
||||
}
|
||||
return []
|
||||
} else {
|
||||
return episodeLinks
|
||||
}
|
||||
}
|
||||
|
||||
private var episodeRanges: [Range<Int>] {
|
||||
generateRanges(for: currentEpisodeList.count)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue