Imported implementation for updating library by next expected update from Neko (#5436)
* Imported implementation for updating library by next expected update from Neko. This sort uses the last 4 updates for a manga to compute an average time between updates and then extrapolates when the next update should occur. Currently seems to work perfectly. However, I may have silently messed something up along the way. All code and algorithms are credited to kyjibo on GitHub. The original commit adding this functionality is here: https://github.com/CarlosEsco/Neko/commit/681003926ae1e07b925155d4e1f43972bbe2b843 * Imported implementation for updating library by next expected update from Neko. This sort uses the last 4 updates for a manga to compute an average time between updates and then extrapolates when the next update should occur. Currently seems to work perfectly. However, I may have silently messed something up along the way. All code and algorithms are credited to kyjibo on GitHub. The original commit adding this functionality is here: https://github.com/CarlosEsco/Neko/commit/681003926ae1e07b925155d4e1f43972bbe2b843 * Remove commented-out line from LibraryUpdateRanker I missed removing this when first committing. The removed line is a holdover from Neko, which requires 7+, but I removed the function that requires this.
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
package eu.kanade.tachiyomi.data.library
|
||||
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
import java.util.Collections
|
||||
import kotlin.Comparator
|
||||
import kotlin.math.abs
|
||||
|
||||
/**
|
||||
* This class will provide various functions to rank manga to efficiently schedule manga to update.
|
||||
@@ -9,9 +12,26 @@ object LibraryUpdateRanker {
|
||||
|
||||
val rankingScheme = listOf(
|
||||
(this::lexicographicRanking)(),
|
||||
(this::latestFirstRanking)()
|
||||
(this::latestFirstRanking)(),
|
||||
(this::nextFirstRanking)()
|
||||
)
|
||||
|
||||
/**
|
||||
* Provides a total ordering over all the Mangas.
|
||||
*
|
||||
* Orders the manga based on the distance between the next expected update and now.
|
||||
* The comparator is reversed, placing the smallest (and thus closest to updating now) first.
|
||||
*/
|
||||
fun nextFirstRanking(): Comparator<Manga> {
|
||||
val time = System.currentTimeMillis()
|
||||
return Collections.reverseOrder(
|
||||
Comparator { mangaFirst: Manga,
|
||||
mangaSecond: Manga ->
|
||||
compareValues(abs(mangaSecond.next_update - time), abs(mangaFirst.next_update - time))
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides a total ordering over all the [Manga]s.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user