mirror of
https://git.mihon.tech/mihonapp/mihon
synced 2024-11-27 17:49:16 +03:00
Library View: Add latest chapter sorting and revert last updated sorting changes
Latest chapter is as it sounds Last update is now any changes to the chapter list (addition, removal, rename, etc.)
This commit is contained in:
parent
3c41a5e910
commit
a096e6b337
6 changed files with 41 additions and 6 deletions
|
@ -113,6 +113,19 @@ interface MangaQueries : DbProvider {
|
||||||
.build())
|
.build())
|
||||||
.prepare()
|
.prepare()
|
||||||
|
|
||||||
fun getTotalChapterManga() = db.get().listOfObjects(Manga::class.java)
|
fun getTotalChapterManga() = db.get()
|
||||||
.withQuery(RawQuery.builder().query(getTotalChapterMangaQuery()).observesTables(MangaTable.TABLE).build()).prepare();
|
.listOfObjects(Manga::class.java)
|
||||||
|
.withQuery(RawQuery.builder()
|
||||||
|
.query(getTotalChapterMangaQuery())
|
||||||
|
.observesTables(MangaTable.TABLE)
|
||||||
|
.build())
|
||||||
|
.prepare()
|
||||||
|
|
||||||
|
fun getLatestChapterManga() = db.get()
|
||||||
|
.listOfObjects(Manga::class.java)
|
||||||
|
.withQuery(RawQuery.builder()
|
||||||
|
.query(getLatestChapterMangaQuery())
|
||||||
|
.observesTables(MangaTable.TABLE)
|
||||||
|
.build())
|
||||||
|
.prepare()
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,6 +102,15 @@ fun getTotalChapterMangaQuery()= """
|
||||||
ORDER by COUNT(*)
|
ORDER by COUNT(*)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
fun getLatestChapterMangaQuery()= """
|
||||||
|
SELECT ${Manga.TABLE}.*, MAX(${Chapter.TABLE}.${Chapter.COL_DATE_UPLOAD}) AS max
|
||||||
|
FROM ${Manga.TABLE}
|
||||||
|
JOIN ${Chapter.TABLE}
|
||||||
|
ON ${Manga.TABLE}.${Manga.COL_ID} = ${Chapter.TABLE}.${Chapter.COL_MANGA_ID}
|
||||||
|
GROUP BY ${Manga.TABLE}.${Manga.COL_ID}
|
||||||
|
ORDER by max DESC
|
||||||
|
"""
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Query to get the categories for a manga.
|
* Query to get the categories for a manga.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -117,7 +117,9 @@ class LibraryNavigationView @JvmOverloads constructor(context: Context, attrs: A
|
||||||
|
|
||||||
private val source = Item.MultiSort(R.string.manga_info_source_label, this)
|
private val source = Item.MultiSort(R.string.manga_info_source_label, this)
|
||||||
|
|
||||||
override val items = listOf(alphabetically, lastRead, lastUpdated, unread, total, source)
|
private val latestChapter = Item.MultiSort(R.string.manga_info_last_chapter_label, this)
|
||||||
|
|
||||||
|
override val items = listOf(alphabetically, lastRead, lastUpdated, unread, total, source, latestChapter)
|
||||||
|
|
||||||
override val header = Item.Header(R.string.action_sort)
|
override val header = Item.Header(R.string.action_sort)
|
||||||
|
|
||||||
|
@ -134,6 +136,7 @@ class LibraryNavigationView @JvmOverloads constructor(context: Context, attrs: A
|
||||||
unread.state = if (sorting == LibrarySort.UNREAD) order else SORT_NONE
|
unread.state = if (sorting == LibrarySort.UNREAD) order else SORT_NONE
|
||||||
total.state = if (sorting == LibrarySort.TOTAL) order else SORT_NONE
|
total.state = if (sorting == LibrarySort.TOTAL) order else SORT_NONE
|
||||||
source.state = if (sorting == LibrarySort.SOURCE) order else SORT_NONE
|
source.state = if (sorting == LibrarySort.SOURCE) order else SORT_NONE
|
||||||
|
latestChapter.state = if (sorting == LibrarySort.LATEST_CHAPTER) order else SORT_NONE
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onItemClicked(item: Item) {
|
override fun onItemClicked(item: Item) {
|
||||||
|
@ -155,6 +158,7 @@ class LibraryNavigationView @JvmOverloads constructor(context: Context, attrs: A
|
||||||
unread -> LibrarySort.UNREAD
|
unread -> LibrarySort.UNREAD
|
||||||
total -> LibrarySort.TOTAL
|
total -> LibrarySort.TOTAL
|
||||||
source -> LibrarySort.SOURCE
|
source -> LibrarySort.SOURCE
|
||||||
|
latestChapter -> LibrarySort.LATEST_CHAPTER
|
||||||
else -> throw Exception("Unknown sorting")
|
else -> throw Exception("Unknown sorting")
|
||||||
})
|
})
|
||||||
preferences.librarySortingAscending().set(if (item.state == SORT_ASC) true else false)
|
preferences.librarySortingAscending().set(if (item.state == SORT_ASC) true else false)
|
||||||
|
|
|
@ -185,6 +185,10 @@ class LibraryPresenter(
|
||||||
var counter = 0
|
var counter = 0
|
||||||
db.getTotalChapterManga().executeAsBlocking().associate { it.id!! to counter++ }
|
db.getTotalChapterManga().executeAsBlocking().associate { it.id!! to counter++ }
|
||||||
}
|
}
|
||||||
|
val latestChapterManga by lazy {
|
||||||
|
var counter = 0
|
||||||
|
db.getLatestChapterManga().executeAsBlocking().associate { it.id!! to counter++ }
|
||||||
|
}
|
||||||
|
|
||||||
val sortFn: (LibraryItem, LibraryItem) -> Int = { i1, i2 ->
|
val sortFn: (LibraryItem, LibraryItem) -> Int = { i1, i2 ->
|
||||||
when (sortingMode) {
|
when (sortingMode) {
|
||||||
|
@ -207,6 +211,11 @@ class LibraryPresenter(
|
||||||
val source2Name = sourceManager.getOrStub(i2.manga.source).name
|
val source2Name = sourceManager.getOrStub(i2.manga.source).name
|
||||||
source1Name.compareTo(source2Name)
|
source1Name.compareTo(source2Name)
|
||||||
}
|
}
|
||||||
|
LibrarySort.LATEST_CHAPTER -> {
|
||||||
|
val manga1latestChapter = latestChapterManga[i1.manga.id!!] ?: 0
|
||||||
|
val manga2latestChapter = latestChapterManga[i2.manga.id!!] ?: 0
|
||||||
|
manga1latestChapter.compareTo(manga2latestChapter)
|
||||||
|
}
|
||||||
else -> throw Exception("Unknown sorting mode")
|
else -> throw Exception("Unknown sorting mode")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,4 +8,5 @@ object LibrarySort {
|
||||||
const val UNREAD = 3
|
const val UNREAD = 3
|
||||||
const val TOTAL = 4
|
const val TOTAL = 4
|
||||||
const val SOURCE = 5
|
const val SOURCE = 5
|
||||||
|
const val LATEST_CHAPTER = 6
|
||||||
}
|
}
|
|
@ -129,9 +129,8 @@ fun syncChaptersWithSource(db: DatabaseHelper,
|
||||||
// Fix order in source.
|
// Fix order in source.
|
||||||
db.fixChaptersSourceOrder(sourceChapters).executeAsBlocking()
|
db.fixChaptersSourceOrder(sourceChapters).executeAsBlocking()
|
||||||
|
|
||||||
// Set manga's last update time to latest chapter's upload time if possible
|
// Set this manga as updated since chapters were changed
|
||||||
val newestChapter = db.getChapters(manga).executeAsBlocking().maxBy { it.date_upload }
|
manga.last_update = Date().time
|
||||||
manga.last_update = newestChapter?.date_upload ?: manga.last_update
|
|
||||||
db.updateLastUpdated(manga).executeAsBlocking()
|
db.updateLastUpdated(manga).executeAsBlocking()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue