|
@@ -0,0 +1,43 @@
|
|
|
+package eu.kanade.tachiyomi.data.library
|
|
|
+
|
|
|
+import eu.kanade.tachiyomi.data.database.models.Manga
|
|
|
+
|
|
|
+/**
|
|
|
+ * This class will provide various functions to Rank mangas to efficiently schedule mangas to update.
|
|
|
+ */
|
|
|
+object LibraryUpdateRanker {
|
|
|
+
|
|
|
+ val rankingScheme = listOf(
|
|
|
+ (this::lexicographicRanking)(),
|
|
|
+ (this::latestFirstRanking)())
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Provides a total ordering over all the Mangas.
|
|
|
+ *
|
|
|
+ * Assumption: An active [Manga] mActive is expected to have been last updated after an
|
|
|
+ * inactive [Manga] mInactive.
|
|
|
+ *
|
|
|
+ * Using this insight, function returns a Comparator for which mActive appears before mInactive.
|
|
|
+ * @return a Comparator that ranks manga based on relevance.
|
|
|
+ */
|
|
|
+ fun latestFirstRanking(): Comparator<Manga> {
|
|
|
+ return Comparator { mangaFirst: Manga,
|
|
|
+ mangaSecond: Manga ->
|
|
|
+ compareValues(mangaSecond.last_update, mangaFirst.last_update)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Provides a total ordering over all the Mangas.
|
|
|
+ *
|
|
|
+ * Order the manga lexicographically.
|
|
|
+ * @return a Comparator that ranks manga lexicographically based on the title.
|
|
|
+ */
|
|
|
+ fun lexicographicRanking(): Comparator<Manga> {
|
|
|
+ return Comparator { mangaFirst: Manga,
|
|
|
+ mangaSecond: Manga ->
|
|
|
+ compareValues(mangaFirst.title, mangaSecond.title)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|