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> {
|
fun transformMergedChapters(mangaReferences: List<MergedMangaReference>, chapterList: List<Chapter>, dedupe: Boolean): List<Chapter> {
|
||||||
return if (dedupe) dedupeChapterList(mangaReferences, chapterList) else chapterList
|
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> {
|
private fun dedupeChapterList(mangaReferences: List<MergedMangaReference>, chapterList: List<Chapter>): List<Chapter> {
|
||||||
return when (mangaReferences.firstOrNull { it.mangaSourceId == MERGED_SOURCE_ID }?.chapterSortMode) {
|
return when (mangaReferences.firstOrNull { it.mangaSourceId == MERGED_SOURCE_ID }?.chapterSortMode) {
|
||||||
MergedMangaReference.CHAPTER_SORT_NO_DEDUPE, MergedMangaReference.CHAPTER_SORT_NONE -> chapterList
|
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 -> {
|
MergedMangaReference.CHAPTER_SORT_MOST_CHAPTERS -> {
|
||||||
findSourceWithMostChapters(chapterList)?.let { mangaId ->
|
findSourceWithMostChapters(chapterList)?.let { mangaId ->
|
||||||
chapterList.filter { it.mangaId == mangaId }
|
chapterList.filter { it.mangaId == mangaId }
|
||||||
@ -71,4 +70,38 @@ class GetMergedChapterByMangaId(
|
|||||||
private fun findSourceWithHighestChapterNumber(chapterList: List<Chapter>): Long? {
|
private fun findSourceWithHighestChapterNumber(chapterList: List<Chapter>): Long? {
|
||||||
return chapterList.maxByOrNull { it.chapterNumber }?.mangaId
|
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,
|
android.R.layout.simple_spinner_item,
|
||||||
listOfNotNull(
|
listOfNotNull(
|
||||||
itemView.context.getString(R.string.no_dedupe),
|
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_most_chapters),
|
||||||
itemView.context.getString(R.string.dedupe_highest_chapter),
|
itemView.context.getString(R.string.dedupe_highest_chapter),
|
||||||
),
|
),
|
||||||
@ -54,9 +54,9 @@ class EditMergedSettingsHeaderAdapter(private val state: EditMergedSettingsState
|
|||||||
binding.dedupeModeSpinner.setSelection(
|
binding.dedupeModeSpinner.setSelection(
|
||||||
when (it.chapterSortMode) {
|
when (it.chapterSortMode) {
|
||||||
MergedMangaReference.CHAPTER_SORT_NO_DEDUPE -> 0
|
MergedMangaReference.CHAPTER_SORT_NO_DEDUPE -> 0
|
||||||
/*MergedMangaReference.CHAPTER_SORT_PRIORITY -> 1*/
|
MergedMangaReference.CHAPTER_SORT_PRIORITY -> 1
|
||||||
MergedMangaReference.CHAPTER_SORT_MOST_CHAPTERS -> 1
|
MergedMangaReference.CHAPTER_SORT_MOST_CHAPTERS -> 2
|
||||||
MergedMangaReference.CHAPTER_SORT_HIGHEST_CHAPTER_NUMBER -> 2
|
MergedMangaReference.CHAPTER_SORT_HIGHEST_CHAPTER_NUMBER -> 3
|
||||||
else -> 0
|
else -> 0
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@ -70,9 +70,9 @@ class EditMergedSettingsHeaderAdapter(private val state: EditMergedSettingsState
|
|||||||
) {
|
) {
|
||||||
state.mergeReference?.chapterSortMode = when (position) {
|
state.mergeReference?.chapterSortMode = when (position) {
|
||||||
0 -> MergedMangaReference.CHAPTER_SORT_NO_DEDUPE
|
0 -> MergedMangaReference.CHAPTER_SORT_NO_DEDUPE
|
||||||
/*1 -> MergedMangaReference.CHAPTER_SORT_PRIORITY*/
|
1 -> MergedMangaReference.CHAPTER_SORT_PRIORITY
|
||||||
1 -> MergedMangaReference.CHAPTER_SORT_MOST_CHAPTERS
|
2 -> MergedMangaReference.CHAPTER_SORT_MOST_CHAPTERS
|
||||||
2 -> MergedMangaReference.CHAPTER_SORT_HIGHEST_CHAPTER_NUMBER
|
3 -> MergedMangaReference.CHAPTER_SORT_HIGHEST_CHAPTER_NUMBER
|
||||||
else -> MergedMangaReference.CHAPTER_SORT_NO_DEDUPE
|
else -> MergedMangaReference.CHAPTER_SORT_NO_DEDUPE
|
||||||
}
|
}
|
||||||
xLogD(state.mergeReference?.chapterSortMode)
|
xLogD(state.mergeReference?.chapterSortMode)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user