|
@@ -43,9 +43,10 @@ import eu.kanade.tachiyomi.source.SourceManager
|
|
import eu.kanade.tachiyomi.source.model.SManga
|
|
import eu.kanade.tachiyomi.source.model.SManga
|
|
import eu.kanade.tachiyomi.source.online.HttpSource
|
|
import eu.kanade.tachiyomi.source.online.HttpSource
|
|
import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter
|
|
import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter
|
|
-import eu.kanade.tachiyomi.ui.library.setting.DisplayModeSetting
|
|
|
|
-import eu.kanade.tachiyomi.ui.library.setting.SortDirectionSetting
|
|
|
|
-import eu.kanade.tachiyomi.ui.library.setting.SortModeSetting
|
|
|
|
|
|
+import eu.kanade.tachiyomi.ui.library.setting.LibraryDisplayMode
|
|
|
|
+import eu.kanade.tachiyomi.ui.library.setting.LibrarySort
|
|
|
|
+import eu.kanade.tachiyomi.ui.library.setting.display
|
|
|
|
+import eu.kanade.tachiyomi.ui.library.setting.sort
|
|
import eu.kanade.tachiyomi.util.lang.combineLatest
|
|
import eu.kanade.tachiyomi.util.lang.combineLatest
|
|
import eu.kanade.tachiyomi.util.lang.launchIO
|
|
import eu.kanade.tachiyomi.util.lang.launchIO
|
|
import eu.kanade.tachiyomi.util.removeCovers
|
|
import eu.kanade.tachiyomi.util.removeCovers
|
|
@@ -334,12 +335,8 @@ class LibraryPresenter(
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- val sortingModes = categories.associate { category ->
|
|
|
|
- category.id to SortModeSetting.get(preferences, category)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- val sortDirections = categories.associate { category ->
|
|
|
|
- category.id to SortDirectionSetting.get(category)
|
|
|
|
|
|
+ val sortModes = categories.associate { category ->
|
|
|
|
+ category.id to category.sort
|
|
}
|
|
}
|
|
|
|
|
|
val locale = Locale.getDefault()
|
|
val locale = Locale.getDefault()
|
|
@@ -347,53 +344,50 @@ class LibraryPresenter(
|
|
strength = Collator.PRIMARY
|
|
strength = Collator.PRIMARY
|
|
}
|
|
}
|
|
val sortFn: (LibraryItem, LibraryItem) -> Int = { i1, i2 ->
|
|
val sortFn: (LibraryItem, LibraryItem) -> Int = { i1, i2 ->
|
|
- val sortingMode = sortingModes[i1.manga.category.toLong()]!!
|
|
|
|
- val sortAscending = sortDirections[i1.manga.category.toLong()]!! == SortDirectionSetting.ASCENDING
|
|
|
|
- when (sortingMode) {
|
|
|
|
- SortModeSetting.ALPHABETICAL -> {
|
|
|
|
|
|
+ val sort = sortModes[i1.manga.category.toLong()]!!
|
|
|
|
+ when (sort.type) {
|
|
|
|
+ LibrarySort.Type.Alphabetical -> {
|
|
collator.compare(i1.manga.title.lowercase(locale), i2.manga.title.lowercase(locale))
|
|
collator.compare(i1.manga.title.lowercase(locale), i2.manga.title.lowercase(locale))
|
|
}
|
|
}
|
|
- SortModeSetting.LAST_READ -> {
|
|
|
|
|
|
+ LibrarySort.Type.LastRead -> {
|
|
val manga1LastRead = lastReadManga[i1.manga.id!!] ?: 0
|
|
val manga1LastRead = lastReadManga[i1.manga.id!!] ?: 0
|
|
val manga2LastRead = lastReadManga[i2.manga.id!!] ?: 0
|
|
val manga2LastRead = lastReadManga[i2.manga.id!!] ?: 0
|
|
manga1LastRead.compareTo(manga2LastRead)
|
|
manga1LastRead.compareTo(manga2LastRead)
|
|
}
|
|
}
|
|
- SortModeSetting.LAST_MANGA_UPDATE -> {
|
|
|
|
|
|
+ LibrarySort.Type.LastUpdate -> {
|
|
i1.manga.last_update.compareTo(i2.manga.last_update)
|
|
i1.manga.last_update.compareTo(i2.manga.last_update)
|
|
}
|
|
}
|
|
- SortModeSetting.UNREAD_COUNT -> when {
|
|
|
|
|
|
+ LibrarySort.Type.UnreadCount -> when {
|
|
// Ensure unread content comes first
|
|
// Ensure unread content comes first
|
|
i1.manga.unreadCount == i2.manga.unreadCount -> 0
|
|
i1.manga.unreadCount == i2.manga.unreadCount -> 0
|
|
- i1.manga.unreadCount == 0 -> if (sortAscending) 1 else -1
|
|
|
|
- i2.manga.unreadCount == 0 -> if (sortAscending) -1 else 1
|
|
|
|
|
|
+ i1.manga.unreadCount == 0 -> if (sort.isAscending) 1 else -1
|
|
|
|
+ i2.manga.unreadCount == 0 -> if (sort.isAscending) -1 else 1
|
|
else -> i1.manga.unreadCount.compareTo(i2.manga.unreadCount)
|
|
else -> i1.manga.unreadCount.compareTo(i2.manga.unreadCount)
|
|
}
|
|
}
|
|
- SortModeSetting.TOTAL_CHAPTERS -> {
|
|
|
|
|
|
+ LibrarySort.Type.TotalChapters -> {
|
|
i1.manga.totalChapters.compareTo(i2.manga.totalChapters)
|
|
i1.manga.totalChapters.compareTo(i2.manga.totalChapters)
|
|
}
|
|
}
|
|
- SortModeSetting.LATEST_CHAPTER -> {
|
|
|
|
|
|
+ LibrarySort.Type.LatestChapter -> {
|
|
val manga1latestChapter = latestChapterManga[i1.manga.id!!]
|
|
val manga1latestChapter = latestChapterManga[i1.manga.id!!]
|
|
?: latestChapterManga.size
|
|
?: latestChapterManga.size
|
|
val manga2latestChapter = latestChapterManga[i2.manga.id!!]
|
|
val manga2latestChapter = latestChapterManga[i2.manga.id!!]
|
|
?: latestChapterManga.size
|
|
?: latestChapterManga.size
|
|
manga1latestChapter.compareTo(manga2latestChapter)
|
|
manga1latestChapter.compareTo(manga2latestChapter)
|
|
}
|
|
}
|
|
- SortModeSetting.CHAPTER_FETCH_DATE -> {
|
|
|
|
|
|
+ LibrarySort.Type.ChapterFetchDate -> {
|
|
val manga1chapterFetchDate = chapterFetchDateManga[i1.manga.id!!] ?: 0
|
|
val manga1chapterFetchDate = chapterFetchDateManga[i1.manga.id!!] ?: 0
|
|
val manga2chapterFetchDate = chapterFetchDateManga[i2.manga.id!!] ?: 0
|
|
val manga2chapterFetchDate = chapterFetchDateManga[i2.manga.id!!] ?: 0
|
|
manga1chapterFetchDate.compareTo(manga2chapterFetchDate)
|
|
manga1chapterFetchDate.compareTo(manga2chapterFetchDate)
|
|
}
|
|
}
|
|
- SortModeSetting.DATE_ADDED -> {
|
|
|
|
|
|
+ LibrarySort.Type.DateAdded -> {
|
|
i1.manga.date_added.compareTo(i2.manga.date_added)
|
|
i1.manga.date_added.compareTo(i2.manga.date_added)
|
|
}
|
|
}
|
|
- else -> throw IllegalStateException("Invalid SortModeSetting: $sortingMode")
|
|
|
|
|
|
+ else -> throw IllegalStateException("Invalid SortModeSetting: ${sort.type}")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
return map.mapValues { entry ->
|
|
return map.mapValues { entry ->
|
|
- val sortAscending = sortDirections[entry.key.toLong()]!! == SortDirectionSetting.ASCENDING
|
|
|
|
-
|
|
|
|
- val comparator = if (sortAscending) {
|
|
|
|
|
|
+ val comparator = if (sortModes[entry.key]!!.isAscending) {
|
|
Comparator(sortFn)
|
|
Comparator(sortFn)
|
|
} else {
|
|
} else {
|
|
Collections.reverseOrder(sortFn)
|
|
Collections.reverseOrder(sortFn)
|
|
@@ -416,13 +410,6 @@ class LibraryPresenter(
|
|
dbCategories
|
|
dbCategories
|
|
}
|
|
}
|
|
|
|
|
|
- libraryManga.forEach { (categoryId, libraryManga) ->
|
|
|
|
- val category = categories.first { category -> category.id == categoryId }
|
|
|
|
- libraryManga.forEach { libraryItem ->
|
|
|
|
- libraryItem.displayMode = category.displayMode
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
state.categories = categories
|
|
state.categories = categories
|
|
Library(categories, libraryManga)
|
|
Library(categories, libraryManga)
|
|
}.asObservable()
|
|
}.asObservable()
|
|
@@ -680,10 +667,10 @@ class LibraryPresenter(
|
|
}
|
|
}
|
|
|
|
|
|
@Composable
|
|
@Composable
|
|
- fun getDisplayMode(index: Int): androidx.compose.runtime.State<DisplayModeSetting> {
|
|
|
|
|
|
+ fun getDisplayMode(index: Int): androidx.compose.runtime.State<LibraryDisplayMode> {
|
|
val category = categories[index]
|
|
val category = categories[index]
|
|
return derivedStateOf {
|
|
return derivedStateOf {
|
|
- DisplayModeSetting.fromFlag(category.displayMode)
|
|
|
|
|
|
+ category.display
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|