Added more sort orders for local lists #707 #467

This commit is contained in:
Koitharu
2024-03-14 12:51:50 +02:00
parent bbc39becc3
commit 24fe83aa5c
6 changed files with 66 additions and 26 deletions

View File

@@ -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")
}

View File

@@ -36,8 +36,11 @@ abstract class HistoryDao {
fun observeAll(order: ListSortOrder): Flow<List<HistoryWithManga>> {
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"

View File

@@ -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

View File

@@ -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<ListSortOrder> = EnumSet.of(LAST_READ, NEWEST, PROGRESS, ALPHABETIC, ALPHABETIC_REVERSE, NEW_CHAPTERS)
val FAVORITES: Set<ListSortOrder> = EnumSet.of(ALPHABETIC, ALPHABETIC_REVERSE, NEWEST, RATING, NEW_CHAPTERS, PROGRESS, LAST_READ)
val HISTORY: Set<ListSortOrder> = EnumSet.of(
LAST_READ,
LONG_AGO_READ,
NEWEST,
OLDEST,
PROGRESS,
UNREAD,
ALPHABETIC,
ALPHABETIC_REVERSE,
NEW_CHAPTERS,
)
val FAVORITES: Set<ListSortOrder> = EnumSet.of(
ALPHABETIC,
ALPHABETIC_REVERSE,
NEWEST,
OLDEST,
RATING,
NEW_CHAPTERS,
PROGRESS,
UNREAD,
LAST_READ,
LONG_AGO_READ,
)
val SUGGESTIONS: Set<ListSortOrder> = EnumSet.of(RELEVANCE)
operator fun invoke(value: String, fallback: ListSortOrder) = entries.find(value) ?: fallback

View File

@@ -1,24 +1,26 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData="M4,4C2.89,4 2,4.89 2,6L2,18C2,19.11 2.89,20 4,20L9,20L9,18L8,18L6,18L4,18L4,6L6,6L8,6L9,6L9,4L4,4zM15,4L15,6L16,6L18,6L20,6L20,18L18,18L16,18L15,18L15,20L20,20C21.1,20 22,19.11 22,18L22,6C22,4.89 21.1,4 20,4L15,4z"/>
<path
android:fillColor="#FF000000"
android:pathData="m11,22.43v-3h2v3z"/>
<path
android:fillColor="#FF000000"
android:pathData="m13,1.57v3h-2v-3h2"/>
<path
android:fillColor="#FF000000"
android:pathData="m11,17.43v-3h2v3h-2"/>
<path
android:fillColor="#FF000000"
android:pathData="m11,9.57v-3h2v3h-2"/>
<path
android:fillColor="#FF000000"
android:pathData="m14.5,15v-2h-7v-2h7V9l4,3 -4,3"/>
<vector
xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData="M4,4C2.89,4 2,4.89 2,6L2,18C2,19.11 2.89,20 4,20L9,20L9,18L8,18L6,18L4,18L4,6L6,6L8,6L9,6L9,4L4,4zM15,4L15,6L16,6L18,6L20,6L20,18L18,18L16,18L15,18L15,20L20,20C21.1,20 22,19.11 22,18L22,6C22,4.89 21.1,4 20,4L15,4z" />
<path
android:fillColor="#FF000000"
android:pathData="m11,22.43v-3h2v3z" />
<path
android:fillColor="#FF000000"
android:pathData="m13,1.57v3h-2v-3h2" />
<path
android:fillColor="#FF000000"
android:pathData="m11,17.43v-3h2v3h-2" />
<path
android:fillColor="#FF000000"
android:pathData="m11,9.57v-3h2v3h-2" />
<path
android:fillColor="#FF000000"
android:pathData="m14.5,15v-2h-7v-2h7V9l4,3 -4,3" />
</vector>

View File

@@ -633,4 +633,7 @@
<string name="runs_on_app_start">Runs when the application starts</string>
<string name="split_by_translations">Split by translations</string>
<string name="split_by_translations_summary">Show chapters with different translations separately, rather than in one list</string>
<string name="order_oldest">Oldest</string>
<string name="long_ago_read">Long time ago read</string>
<string name="unread">Unread</string>
</resources>