diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/favourites/data/FavouritesDao.kt b/app/src/main/kotlin/org/koitharu/kotatsu/favourites/data/FavouritesDao.kt index ec9590951..df73a790d 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/favourites/data/FavouritesDao.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/favourites/data/FavouritesDao.kt @@ -190,11 +190,14 @@ abstract class FavouritesDao { private fun getOrderBy(sortOrder: ListSortOrder) = when (sortOrder) { ListSortOrder.RATING -> "manga.rating DESC" ListSortOrder.NEWEST -> "favourites.created_at DESC" + ListSortOrder.OLDEST -> "favourites.created_at ASC" ListSortOrder.ALPHABETIC -> "manga.title ASC" ListSortOrder.ALPHABETIC_REVERSE -> "manga.title DESC" ListSortOrder.NEW_CHAPTERS -> "IFNULL((SELECT chapters_new FROM tracks WHERE tracks.manga_id = manga.manga_id), 0) DESC" ListSortOrder.PROGRESS -> "IFNULL((SELECT percent FROM history WHERE history.manga_id = manga.manga_id), 0) DESC" + ListSortOrder.UNREAD -> "IFNULL((SELECT percent FROM history WHERE history.manga_id = manga.manga_id), 0) ASC" ListSortOrder.LAST_READ -> "IFNULL((SELECT updated_at FROM history WHERE history.manga_id = manga.manga_id), 0) DESC" + ListSortOrder.LONG_AGO_READ -> "IFNULL((SELECT updated_at FROM history WHERE history.manga_id = manga.manga_id), 0) ASC" else -> throw IllegalArgumentException("Sort order $sortOrder is not supported") } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/history/data/HistoryDao.kt b/app/src/main/kotlin/org/koitharu/kotatsu/history/data/HistoryDao.kt index fc60e5103..e374ace60 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/history/data/HistoryDao.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/history/data/HistoryDao.kt @@ -36,8 +36,11 @@ abstract class HistoryDao { fun observeAll(order: ListSortOrder): Flow> { val orderBy = when (order) { ListSortOrder.LAST_READ -> "history.updated_at DESC" + ListSortOrder.LONG_AGO_READ -> "history.updated_at ASC" ListSortOrder.NEWEST -> "history.created_at DESC" + ListSortOrder.OLDEST -> "history.created_at ASC" ListSortOrder.PROGRESS -> "history.percent DESC" + ListSortOrder.UNREAD -> "history.percent ASC" ListSortOrder.ALPHABETIC -> "manga.title" ListSortOrder.ALPHABETIC_REVERSE -> "manga.title DESC" ListSortOrder.NEW_CHAPTERS -> "IFNULL((SELECT chapters_new FROM tracks WHERE tracks.manga_id = manga.manga_id), 0) DESC" diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/history/ui/HistoryListViewModel.kt b/app/src/main/kotlin/org/koitharu/kotatsu/history/ui/HistoryListViewModel.kt index 6a6cf249b..4b4dad579 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/history/ui/HistoryListViewModel.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/history/ui/HistoryListViewModel.kt @@ -178,8 +178,13 @@ class HistoryListViewModel @Inject constructor( } private fun MangaHistory.header(order: ListSortOrder): ListHeader? = when (order) { - ListSortOrder.LAST_READ -> ListHeader(calculateTimeAgo(updatedAt)) + ListSortOrder.LAST_READ, + ListSortOrder.LONG_AGO_READ -> ListHeader(calculateTimeAgo(updatedAt)) + + ListSortOrder.OLDEST, ListSortOrder.NEWEST -> ListHeader(calculateTimeAgo(createdAt)) + + ListSortOrder.UNREAD, ListSortOrder.PROGRESS -> ListHeader( when (percent) { 1f -> R.string.status_completed diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/list/domain/ListSortOrder.kt b/app/src/main/kotlin/org/koitharu/kotatsu/list/domain/ListSortOrder.kt index 7637cb600..961d612b1 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/list/domain/ListSortOrder.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/list/domain/ListSortOrder.kt @@ -10,21 +10,45 @@ enum class ListSortOrder( ) { NEWEST(R.string.order_added), + OLDEST(R.string.order_oldest), PROGRESS(R.string.progress), + UNREAD(R.string.unread), ALPHABETIC(R.string.by_name), ALPHABETIC_REVERSE(R.string.by_name_reverse), RATING(R.string.by_rating), RELEVANCE(R.string.by_relevance), NEW_CHAPTERS(R.string.new_chapters), LAST_READ(R.string.last_read), + LONG_AGO_READ(R.string.long_ago_read), ; fun isGroupingSupported() = this == LAST_READ || this == NEWEST || this == PROGRESS companion object { - val HISTORY: Set = EnumSet.of(LAST_READ, NEWEST, PROGRESS, ALPHABETIC, ALPHABETIC_REVERSE, NEW_CHAPTERS) - val FAVORITES: Set = EnumSet.of(ALPHABETIC, ALPHABETIC_REVERSE, NEWEST, RATING, NEW_CHAPTERS, PROGRESS, LAST_READ) + val HISTORY: Set = EnumSet.of( + LAST_READ, + LONG_AGO_READ, + NEWEST, + OLDEST, + PROGRESS, + UNREAD, + ALPHABETIC, + ALPHABETIC_REVERSE, + NEW_CHAPTERS, + ) + val FAVORITES: Set = EnumSet.of( + ALPHABETIC, + ALPHABETIC_REVERSE, + NEWEST, + OLDEST, + RATING, + NEW_CHAPTERS, + PROGRESS, + UNREAD, + LAST_READ, + LONG_AGO_READ, + ) val SUGGESTIONS: Set = EnumSet.of(RELEVANCE) operator fun invoke(value: String, fallback: ListSortOrder) = entries.find(value) ?: fallback diff --git a/app/src/main/res/drawable/ic_pager_double_ltr.xml b/app/src/main/res/drawable/ic_pager_double_ltr.xml index 33f6e10ae..5ac1196ef 100644 --- a/app/src/main/res/drawable/ic_pager_double_ltr.xml +++ b/app/src/main/res/drawable/ic_pager_double_ltr.xml @@ -1,24 +1,26 @@ - - - - - - - + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b98e7d9af..f13ebc64f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -633,4 +633,7 @@ Runs when the application starts Split by translations Show chapters with different translations separately, rather than in one list + Oldest + Long time ago read + Unread