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);
|
return x.CompareTo(y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static readonly ChapterSortComparer Default = new ChapterSortComparer();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -44,6 +46,8 @@ namespace API.Comparators
|
|||||||
|
|
||||||
return x.CompareTo(y);
|
return x.CompareTo(y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static readonly ChapterSortComparerZeroFirst Default = new ChapterSortComparerZeroFirst();
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SortComparerZeroLast : IComparer<double>
|
public class SortComparerZeroLast : IComparer<double>
|
||||||
|
@ -60,14 +60,14 @@ public class TachiyomiController : BaseApiController
|
|||||||
var looseLeafChapterVolume = volumes.FirstOrDefault(v => v.Number == 0);
|
var looseLeafChapterVolume = volumes.FirstOrDefault(v => v.Number == 0);
|
||||||
if (looseLeafChapterVolume == null)
|
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()
|
return Ok(new ChapterDto()
|
||||||
{
|
{
|
||||||
Number = $"{int.Parse(volumeChapter.Number) / 100f}"
|
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));
|
return Ok(_mapper.Map<ChapterDto>(lastChapter));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,8 +50,8 @@ public class SeriesService : ISeriesService
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static Chapter GetFirstChapterForMetadata(Series series, bool isBookLibrary)
|
public static Chapter GetFirstChapterForMetadata(Series series, bool isBookLibrary)
|
||||||
{
|
{
|
||||||
return series.Volumes.OrderBy(v => v.Number, new ChapterSortComparer())
|
return series.Volumes.OrderBy(v => v.Number, ChapterSortComparer.Default)
|
||||||
.SelectMany(v => v.Chapters.OrderBy(c => float.Parse(c.Number), new ChapterSortComparer()))
|
.SelectMany(v => v.Chapters.OrderBy(c => float.Parse(c.Number), ChapterSortComparer.Default))
|
||||||
.FirstOrDefault();
|
.FirstOrDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -493,7 +493,7 @@ public class SeriesService : ISeriesService
|
|||||||
if (v.Number == 0) return c;
|
if (v.Number == 0) return c;
|
||||||
c.VolumeTitle = v.Name;
|
c.VolumeTitle = v.Name;
|
||||||
return c;
|
return c;
|
||||||
}).OrderBy(c => float.Parse(c.Number), new ChapterSortComparer()));
|
}).OrderBy(c => float.Parse(c.Number), ChapterSortComparer.Default)).ToList();
|
||||||
|
|
||||||
foreach (var chapter in chapters)
|
foreach (var chapter in chapters)
|
||||||
{
|
{
|
||||||
@ -518,7 +518,13 @@ public class SeriesService : ISeriesService
|
|||||||
var storylineChapters = volumes
|
var storylineChapters = volumes
|
||||||
.Where(v => v.Number == 0)
|
.Where(v => v.Number == 0)
|
||||||
.SelectMany(v => v.Chapters.Where(c => !c.IsSpecial))
|
.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()
|
return new SeriesDetailDto()
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user