Add option to order history and favorites by new chapters
This commit is contained in:
@@ -16,8 +16,8 @@ android {
|
|||||||
applicationId 'org.koitharu.kotatsu'
|
applicationId 'org.koitharu.kotatsu'
|
||||||
minSdk = 21
|
minSdk = 21
|
||||||
targetSdk = 34
|
targetSdk = 34
|
||||||
versionCode = 584
|
versionCode = 585
|
||||||
versionName = '6.1.6'
|
versionName = '6.2-a1'
|
||||||
generatedDensities = []
|
generatedDensities = []
|
||||||
testInstrumentationRunner "org.koitharu.kotatsu.HiltTestRunner"
|
testInstrumentationRunner "org.koitharu.kotatsu.HiltTestRunner"
|
||||||
ksp {
|
ksp {
|
||||||
|
|||||||
@@ -83,8 +83,9 @@ abstract class FavouritesDao {
|
|||||||
|
|
||||||
@Language("RoomSql")
|
@Language("RoomSql")
|
||||||
val query = SimpleSQLiteQuery(
|
val query = SimpleSQLiteQuery(
|
||||||
"SELECT m.cover_url AS url, m.source AS source FROM favourites AS f LEFT JOIN manga AS m ON f.manga_id = m.manga_id " +
|
"SELECT manga.cover_url AS url, manga.source AS source FROM favourites " +
|
||||||
"WHERE f.category_id = ? AND deleted_at = 0 ORDER BY $orderBy",
|
"LEFT JOIN manga ON favourites.manga_id = manga.manga_id " +
|
||||||
|
"WHERE favourites.category_id = ? AND deleted_at = 0 ORDER BY $orderBy",
|
||||||
arrayOf<Any>(categoryId),
|
arrayOf<Any>(categoryId),
|
||||||
)
|
)
|
||||||
return findCoversImpl(query)
|
return findCoversImpl(query)
|
||||||
@@ -164,12 +165,10 @@ abstract class FavouritesDao {
|
|||||||
protected abstract suspend fun setDeletedAtAll(categoryId: Long, deletedAt: Long)
|
protected abstract suspend fun setDeletedAtAll(categoryId: Long, deletedAt: Long)
|
||||||
|
|
||||||
private fun getOrderBy(sortOrder: ListSortOrder) = when (sortOrder) {
|
private fun getOrderBy(sortOrder: ListSortOrder) = when (sortOrder) {
|
||||||
ListSortOrder.RATING -> "rating DESC"
|
ListSortOrder.RATING -> "manga.rating DESC"
|
||||||
ListSortOrder.NEWEST,
|
ListSortOrder.NEWEST -> "favourites.created_at DESC"
|
||||||
ListSortOrder.UPDATED,
|
ListSortOrder.ALPHABETIC -> "manga.title ASC"
|
||||||
-> "created_at DESC"
|
ListSortOrder.NEW_CHAPTERS -> "(SELECT chapters_new FROM tracks WHERE tracks.manga_id = manga.manga_id) DESC"
|
||||||
|
|
||||||
ListSortOrder.ALPHABETIC -> "title ASC"
|
|
||||||
else -> throw IllegalArgumentException("Sort order $sortOrder is not supported")
|
else -> throw IllegalArgumentException("Sort order $sortOrder is not supported")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ abstract class HistoryDao {
|
|||||||
ListSortOrder.NEWEST -> "history.created_at DESC"
|
ListSortOrder.NEWEST -> "history.created_at DESC"
|
||||||
ListSortOrder.PROGRESS -> "history.percent DESC"
|
ListSortOrder.PROGRESS -> "history.percent DESC"
|
||||||
ListSortOrder.ALPHABETIC -> "manga.title"
|
ListSortOrder.ALPHABETIC -> "manga.title"
|
||||||
|
ListSortOrder.NEW_CHAPTERS -> "(SELECT chapters_new FROM tracks WHERE tracks.manga_id = manga.manga_id) DESC"
|
||||||
else -> throw IllegalArgumentException("Sort order $order is not supported")
|
else -> throw IllegalArgumentException("Sort order $order is not supported")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -178,6 +178,7 @@ class HistoryListViewModel @Inject constructor(
|
|||||||
|
|
||||||
ListSortOrder.ALPHABETIC,
|
ListSortOrder.ALPHABETIC,
|
||||||
ListSortOrder.RELEVANCE,
|
ListSortOrder.RELEVANCE,
|
||||||
|
ListSortOrder.NEW_CHAPTERS,
|
||||||
ListSortOrder.RATING -> null
|
ListSortOrder.RATING -> null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,15 +15,16 @@ enum class ListSortOrder(
|
|||||||
ALPHABETIC(R.string.by_name),
|
ALPHABETIC(R.string.by_name),
|
||||||
RATING(R.string.by_rating),
|
RATING(R.string.by_rating),
|
||||||
RELEVANCE(R.string.by_relevance),
|
RELEVANCE(R.string.by_relevance),
|
||||||
|
NEW_CHAPTERS(R.string.new_chapters),
|
||||||
;
|
;
|
||||||
|
|
||||||
fun isGroupingSupported() = this == UPDATED || this == NEWEST || this == PROGRESS
|
fun isGroupingSupported() = this == UPDATED || this == NEWEST || this == PROGRESS
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
val HISTORY = EnumSet.of(UPDATED, NEWEST, PROGRESS, ALPHABETIC)
|
val HISTORY: Set<ListSortOrder> = EnumSet.of(UPDATED, NEWEST, PROGRESS, ALPHABETIC, NEW_CHAPTERS)
|
||||||
val FAVORITES = EnumSet.of(ALPHABETIC, NEWEST, RATING)
|
val FAVORITES: Set<ListSortOrder> = EnumSet.of(ALPHABETIC, NEWEST, RATING, NEW_CHAPTERS)
|
||||||
val SUGGESTIONS = EnumSet.of(RELEVANCE)
|
val SUGGESTIONS: Set<ListSortOrder> = EnumSet.of(RELEVANCE)
|
||||||
|
|
||||||
operator fun invoke(value: String, fallback: ListSortOrder) = entries.find(value) ?: fallback
|
operator fun invoke(value: String, fallback: ListSortOrder) = entries.find(value) ?: fallback
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user