mirror of
https://github.com/Kareadita/Kavita.git
synced 2025-07-09 03:04:19 -04:00
Sort series by chapter number only when some chapters have no volume (#1487)
* Sort series by chapter number only when some chapters have no volume information * Implement a Default static instance of ChapterSortComparer * Further use Default static Comparers * Add missing ToLit() as per comments
This commit is contained in:
parent
ae13775791
commit
f0c516ab62
@ -23,6 +23,8 @@ namespace API.Comparators
|
||||
|
||||
return x.CompareTo(y);
|
||||
}
|
||||
|
||||
public static readonly ChapterSortComparer Default = new ChapterSortComparer();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -44,6 +46,8 @@ namespace API.Comparators
|
||||
|
||||
return x.CompareTo(y);
|
||||
}
|
||||
|
||||
public static readonly ChapterSortComparerZeroFirst Default = new ChapterSortComparerZeroFirst();
|
||||
}
|
||||
|
||||
public class SortComparerZeroLast : IComparer<double>
|
||||
|
@ -60,14 +60,14 @@ public class TachiyomiController : BaseApiController
|
||||
var looseLeafChapterVolume = volumes.FirstOrDefault(v => v.Number == 0);
|
||||
if (looseLeafChapterVolume == null)
|
||||
{
|
||||
var volumeChapter = _mapper.Map<ChapterDto>(volumes.Last().Chapters.OrderBy(c => float.Parse(c.Number), new ChapterSortComparerZeroFirst()).Last());
|
||||
var volumeChapter = _mapper.Map<ChapterDto>(volumes.Last().Chapters.OrderBy(c => float.Parse(c.Number), ChapterSortComparerZeroFirst.Default).Last());
|
||||
return Ok(new ChapterDto()
|
||||
{
|
||||
Number = $"{int.Parse(volumeChapter.Number) / 100f}"
|
||||
});
|
||||
}
|
||||
|
||||
var lastChapter = looseLeafChapterVolume.Chapters.OrderBy(c => float.Parse(c.Number), new ChapterSortComparer()).Last();
|
||||
var lastChapter = looseLeafChapterVolume.Chapters.OrderBy(c => float.Parse(c.Number), ChapterSortComparer.Default).Last();
|
||||
return Ok(_mapper.Map<ChapterDto>(lastChapter));
|
||||
}
|
||||
|
||||
|
@ -50,8 +50,8 @@ public class SeriesService : ISeriesService
|
||||
/// <returns></returns>
|
||||
public static Chapter GetFirstChapterForMetadata(Series series, bool isBookLibrary)
|
||||
{
|
||||
return series.Volumes.OrderBy(v => v.Number, new ChapterSortComparer())
|
||||
.SelectMany(v => v.Chapters.OrderBy(c => float.Parse(c.Number), new ChapterSortComparer()))
|
||||
return series.Volumes.OrderBy(v => v.Number, ChapterSortComparer.Default)
|
||||
.SelectMany(v => v.Chapters.OrderBy(c => float.Parse(c.Number), ChapterSortComparer.Default))
|
||||
.FirstOrDefault();
|
||||
}
|
||||
|
||||
@ -493,7 +493,7 @@ public class SeriesService : ISeriesService
|
||||
if (v.Number == 0) return c;
|
||||
c.VolumeTitle = v.Name;
|
||||
return c;
|
||||
}).OrderBy(c => float.Parse(c.Number), new ChapterSortComparer()));
|
||||
}).OrderBy(c => float.Parse(c.Number), ChapterSortComparer.Default)).ToList();
|
||||
|
||||
foreach (var chapter in chapters)
|
||||
{
|
||||
@ -518,7 +518,13 @@ public class SeriesService : ISeriesService
|
||||
var storylineChapters = volumes
|
||||
.Where(v => v.Number == 0)
|
||||
.SelectMany(v => v.Chapters.Where(c => !c.IsSpecial))
|
||||
.OrderBy(c => float.Parse(c.Number), new ChapterSortComparer());
|
||||
.OrderBy(c => float.Parse(c.Number), ChapterSortComparer.Default)
|
||||
.ToList();
|
||||
|
||||
// When there's chapters without a volume number revert to chapter sorting only as opposed to volume then chapter
|
||||
if (storylineChapters.Any()) {
|
||||
retChapters = retChapters.OrderBy(c => float.Parse(c.Number), ChapterSortComparer.Default);
|
||||
}
|
||||
|
||||
return new SeriesDetailDto()
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user