Dedupe by priority
This commit is contained in:
parent
797a9e6b4e
commit
6a6d8c0657
@ -41,7 +41,6 @@ class GetMergedChapterByMangaId(
|
||||
}
|
||||
}
|
||||
|
||||
// TODO more chapter dedupe
|
||||
fun transformMergedChapters(mangaReferences: List<MergedMangaReference>, chapterList: List<Chapter>, dedupe: Boolean): List<Chapter> {
|
||||
return if (dedupe) dedupeChapterList(mangaReferences, chapterList) else chapterList
|
||||
}
|
||||
@ -49,7 +48,7 @@ class GetMergedChapterByMangaId(
|
||||
private fun dedupeChapterList(mangaReferences: List<MergedMangaReference>, chapterList: List<Chapter>): List<Chapter> {
|
||||
return when (mangaReferences.firstOrNull { it.mangaSourceId == MERGED_SOURCE_ID }?.chapterSortMode) {
|
||||
MergedMangaReference.CHAPTER_SORT_NO_DEDUPE, MergedMangaReference.CHAPTER_SORT_NONE -> chapterList
|
||||
MergedMangaReference.CHAPTER_SORT_PRIORITY -> chapterList
|
||||
MergedMangaReference.CHAPTER_SORT_PRIORITY -> dedupeByPriority(mangaReferences, chapterList)
|
||||
MergedMangaReference.CHAPTER_SORT_MOST_CHAPTERS -> {
|
||||
findSourceWithMostChapters(chapterList)?.let { mangaId ->
|
||||
chapterList.filter { it.mangaId == mangaId }
|
||||
@ -71,4 +70,38 @@ class GetMergedChapterByMangaId(
|
||||
private fun findSourceWithHighestChapterNumber(chapterList: List<Chapter>): Long? {
|
||||
return chapterList.maxByOrNull { it.chapterNumber }?.mangaId
|
||||
}
|
||||
|
||||
private fun dedupeByPriority(mangaReferences: List<MergedMangaReference>, chapterList: List<Chapter>): List<Chapter> {
|
||||
val sortedChapterList = mutableListOf<Chapter>()
|
||||
|
||||
var existingChapterIndex: Int
|
||||
chapterList.groupBy { it.mangaId }
|
||||
.entries
|
||||
.sortedBy { (mangaId) ->
|
||||
mangaReferences.find { it.mangaId == mangaId }?.chapterPriority ?: Int.MAX_VALUE
|
||||
}
|
||||
.forEach { (_, chapters) ->
|
||||
existingChapterIndex = -1
|
||||
chapters.forEach { chapter ->
|
||||
val oldChapterIndex = existingChapterIndex
|
||||
if (chapter.isRecognizedNumber) {
|
||||
existingChapterIndex = sortedChapterList.indexOfFirst {
|
||||
it.isRecognizedNumber && it.chapterNumber == chapter.chapterNumber && // check if the chapter is not already there
|
||||
it.mangaId != chapter.mangaId // allow multiple chapters of the same number from the same source
|
||||
}
|
||||
if (existingChapterIndex == -1) {
|
||||
sortedChapterList.add(oldChapterIndex + 1, chapter)
|
||||
existingChapterIndex = oldChapterIndex + 1
|
||||
}
|
||||
} else {
|
||||
sortedChapterList.add(oldChapterIndex + 1, chapter)
|
||||
existingChapterIndex = oldChapterIndex + 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return sortedChapterList.mapIndexed { index, chapter ->
|
||||
chapter.copy(sourceOrder = index.toLong())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ class EditMergedSettingsHeaderAdapter(private val state: EditMergedSettingsState
|
||||
android.R.layout.simple_spinner_item,
|
||||
listOfNotNull(
|
||||
itemView.context.getString(R.string.no_dedupe),
|
||||
itemView.context.getString(R.string.dedupe_priority).let { null },
|
||||
itemView.context.getString(R.string.dedupe_priority),
|
||||
itemView.context.getString(R.string.dedupe_most_chapters),
|
||||
itemView.context.getString(R.string.dedupe_highest_chapter),
|
||||
),
|
||||
@ -54,9 +54,9 @@ class EditMergedSettingsHeaderAdapter(private val state: EditMergedSettingsState
|
||||
binding.dedupeModeSpinner.setSelection(
|
||||
when (it.chapterSortMode) {
|
||||
MergedMangaReference.CHAPTER_SORT_NO_DEDUPE -> 0
|
||||
/*MergedMangaReference.CHAPTER_SORT_PRIORITY -> 1*/
|
||||
MergedMangaReference.CHAPTER_SORT_MOST_CHAPTERS -> 1
|
||||
MergedMangaReference.CHAPTER_SORT_HIGHEST_CHAPTER_NUMBER -> 2
|
||||
MergedMangaReference.CHAPTER_SORT_PRIORITY -> 1
|
||||
MergedMangaReference.CHAPTER_SORT_MOST_CHAPTERS -> 2
|
||||
MergedMangaReference.CHAPTER_SORT_HIGHEST_CHAPTER_NUMBER -> 3
|
||||
else -> 0
|
||||
},
|
||||
)
|
||||
@ -70,9 +70,9 @@ class EditMergedSettingsHeaderAdapter(private val state: EditMergedSettingsState
|
||||
) {
|
||||
state.mergeReference?.chapterSortMode = when (position) {
|
||||
0 -> MergedMangaReference.CHAPTER_SORT_NO_DEDUPE
|
||||
/*1 -> MergedMangaReference.CHAPTER_SORT_PRIORITY*/
|
||||
1 -> MergedMangaReference.CHAPTER_SORT_MOST_CHAPTERS
|
||||
2 -> MergedMangaReference.CHAPTER_SORT_HIGHEST_CHAPTER_NUMBER
|
||||
1 -> MergedMangaReference.CHAPTER_SORT_PRIORITY
|
||||
2 -> MergedMangaReference.CHAPTER_SORT_MOST_CHAPTERS
|
||||
3 -> MergedMangaReference.CHAPTER_SORT_HIGHEST_CHAPTER_NUMBER
|
||||
else -> MergedMangaReference.CHAPTER_SORT_NO_DEDUPE
|
||||
}
|
||||
xLogD(state.mergeReference?.chapterSortMode)
|
||||
|
Loading…
x
Reference in New Issue
Block a user