mirror of
https://github.com/mihonapp/mihon.git
synced 2025-11-10 11:08:56 +01:00
Add bookmark filter (#8198)
* feat: add bookmark filter * feat: add getBookmarkChaptersByMangaId query + interactor to be used for filtering
This commit is contained in:
@@ -20,6 +20,7 @@ import eu.kanade.domain.base.BasePreferences
|
||||
import eu.kanade.domain.category.interactor.GetCategories
|
||||
import eu.kanade.domain.category.interactor.SetMangaCategories
|
||||
import eu.kanade.domain.category.model.Category
|
||||
import eu.kanade.domain.chapter.interactor.GetBookmarkedChaptersByMangaId
|
||||
import eu.kanade.domain.chapter.interactor.GetChapterByMangaId
|
||||
import eu.kanade.domain.chapter.interactor.SetReadStatus
|
||||
import eu.kanade.domain.chapter.model.toDbChapter
|
||||
@@ -85,6 +86,7 @@ class LibraryPresenter(
|
||||
private val getLibraryManga: GetLibraryManga = Injekt.get(),
|
||||
private val getTracks: GetTracks = Injekt.get(),
|
||||
private val getCategories: GetCategories = Injekt.get(),
|
||||
private val getBookmarkedChaptersByMangaId: GetBookmarkedChaptersByMangaId = Injekt.get(),
|
||||
private val getChapterByMangaId: GetChapterByMangaId = Injekt.get(),
|
||||
private val setReadStatus: SetReadStatus = Injekt.get(),
|
||||
private val updateManga: UpdateManga = Injekt.get(),
|
||||
@@ -174,6 +176,7 @@ class LibraryPresenter(
|
||||
val filterDownloaded = libraryPreferences.filterDownloaded().get()
|
||||
val filterUnread = libraryPreferences.filterUnread().get()
|
||||
val filterStarted = libraryPreferences.filterStarted().get()
|
||||
val filterBookmarked = libraryPreferences.filterBookmarked().get()
|
||||
val filterCompleted = libraryPreferences.filterCompleted().get()
|
||||
val loggedInServices = trackManager.services.filter { trackService -> trackService.isLogged }
|
||||
.associate { trackService ->
|
||||
@@ -218,6 +221,19 @@ class LibraryPresenter(
|
||||
}
|
||||
}
|
||||
|
||||
val filterFnBookmarked: (LibraryItem) -> Boolean = bookmarked@{ item ->
|
||||
if (filterBookmarked == State.IGNORE.value) return@bookmarked true
|
||||
return@bookmarked runBlocking {
|
||||
val isBookmarked = getBookmarkedChaptersByMangaId.await(item.libraryManga.manga.id).isNotEmpty()
|
||||
|
||||
return@runBlocking if (filterBookmarked == State.INCLUDE.value) {
|
||||
isBookmarked
|
||||
} else {
|
||||
!isBookmarked
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val filterFnCompleted: (LibraryItem) -> Boolean = completed@{ item ->
|
||||
if (filterCompleted == State.IGNORE.value) return@completed true
|
||||
val isCompleted = item.libraryManga.manga.status.toInt() == SManga.COMPLETED
|
||||
@@ -258,6 +274,7 @@ class LibraryPresenter(
|
||||
!filterFnDownloaded(item) ||
|
||||
!filterFnUnread(item) ||
|
||||
!filterFnStarted(item) ||
|
||||
!filterFnBookmarked(item) ||
|
||||
!filterFnCompleted(item) ||
|
||||
!filterFnTracking(item)
|
||||
)
|
||||
|
||||
@@ -100,6 +100,7 @@ class LibrarySettingsSheet(
|
||||
private val downloaded = Item.TriStateGroup(R.string.action_filter_downloaded, this)
|
||||
private val unread = Item.TriStateGroup(R.string.action_filter_unread, this)
|
||||
private val started = Item.TriStateGroup(R.string.action_filter_started, this)
|
||||
private val bookmarked = Item.TriStateGroup(R.string.action_filter_bookmarked, this)
|
||||
private val completed = Item.TriStateGroup(R.string.completed, this)
|
||||
private val trackFilters: Map<Long, Item.TriStateGroup>
|
||||
|
||||
@@ -114,7 +115,7 @@ class LibrarySettingsSheet(
|
||||
trackFilters = services.associate { service ->
|
||||
Pair(service.id, Item.TriStateGroup(getServiceResId(service, size), this))
|
||||
}
|
||||
val list: MutableList<Item> = mutableListOf(downloaded, unread, started, completed)
|
||||
val list: MutableList<Item> = mutableListOf(downloaded, unread, started, bookmarked, completed)
|
||||
if (size > 1) list.add(Item.Header(R.string.action_filter_tracked))
|
||||
list.addAll(trackFilters.values)
|
||||
items = list
|
||||
@@ -134,6 +135,7 @@ class LibrarySettingsSheet(
|
||||
}
|
||||
unread.state = libraryPreferences.filterUnread().get()
|
||||
started.state = libraryPreferences.filterStarted().get()
|
||||
bookmarked.state = libraryPreferences.filterBookmarked().get()
|
||||
completed.state = libraryPreferences.filterCompleted().get()
|
||||
|
||||
trackFilters.forEach { trackFilter ->
|
||||
@@ -154,6 +156,7 @@ class LibrarySettingsSheet(
|
||||
downloaded -> libraryPreferences.filterDownloaded().set(newState)
|
||||
unread -> libraryPreferences.filterUnread().set(newState)
|
||||
started -> libraryPreferences.filterStarted().set(newState)
|
||||
bookmarked -> libraryPreferences.filterBookmarked().set(newState)
|
||||
completed -> libraryPreferences.filterCompleted().set(newState)
|
||||
else -> {
|
||||
trackFilters.forEach { trackFilter ->
|
||||
|
||||
Reference in New Issue
Block a user