Add mark as read/unread to library (closes #156)

Adapted from e51276a1ac
This commit is contained in:
arkon 2020-08-08 12:16:37 -04:00
parent 13d31669ac
commit 8bab1d9798
3 changed files with 53 additions and 0 deletions

View file

@ -472,6 +472,8 @@ class LibraryController(
when (item.itemId) { when (item.itemId) {
R.id.action_move_to_category -> showChangeMangaCategoriesDialog() R.id.action_move_to_category -> showChangeMangaCategoriesDialog()
R.id.action_download_unread -> downloadUnreadChapters() R.id.action_download_unread -> downloadUnreadChapters()
R.id.action_mark_as_read -> markReadStatus(true)
R.id.action_mark_as_unread -> markReadStatus(false)
R.id.action_delete -> showDeleteMangaDialog() R.id.action_delete -> showDeleteMangaDialog()
R.id.action_select_all -> selectAllCategoryManga() R.id.action_select_all -> selectAllCategoryManga()
R.id.action_select_inverse -> selectInverseCategoryManga() R.id.action_select_inverse -> selectInverseCategoryManga()
@ -554,6 +556,12 @@ class LibraryController(
destroyActionModeIfNeeded() destroyActionModeIfNeeded()
} }
private fun markReadStatus(read: Boolean) {
val mangas = selectedMangas.toList()
presenter.markReadStatus(mangas, read)
destroyActionModeIfNeeded()
}
private fun showDeleteMangaDialog() { private fun showDeleteMangaDialog() {
DeleteLibraryMangasDialog(this, selectedMangas.toList()).showDialog(router) DeleteLibraryMangasDialog(this, selectedMangas.toList()).showDialog(router)
} }

View file

@ -5,6 +5,7 @@ import com.jakewharton.rxrelay.BehaviorRelay
import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.data.cache.CoverCache
import eu.kanade.tachiyomi.data.database.DatabaseHelper import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.models.Category import eu.kanade.tachiyomi.data.database.models.Category
import eu.kanade.tachiyomi.data.database.models.Chapter
import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.database.models.MangaCategory import eu.kanade.tachiyomi.data.database.models.MangaCategory
import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.download.DownloadManager
@ -326,6 +327,36 @@ class LibraryPresenter(
} }
} }
/**
* Marks mangas' chapters read status.
*
* @param mangas the list of manga.
*/
fun markReadStatus(mangas: List<Manga>, read: Boolean) {
mangas.forEach { manga ->
launchIO {
val chapters = db.getChapters(manga).executeAsBlocking()
chapters.forEach {
it.read = read
if (!read) {
it.last_page_read = 0
}
}
db.updateChaptersProgress(chapters).executeAsBlocking()
if (preferences.removeAfterMarkedAsRead()) {
deleteChapters(manga, chapters)
}
}
}
}
private fun deleteChapters(manga: Manga, chapters: List<Chapter>) {
sourceManager.get(manga.source)?.let { source ->
downloadManager.deleteChapters(chapters, manga, source)
}
}
/** /**
* Remove the selected manga from the library. * Remove the selected manga from the library.
* *

View file

@ -16,6 +16,20 @@
app:iconTint="?attr/colorOnPrimary" app:iconTint="?attr/colorOnPrimary"
app:showAsAction="always" /> app:showAsAction="always" />
<item
android:id="@+id/action_mark_as_read"
android:icon="@drawable/ic_done_24dp"
android:title="@string/action_mark_as_read"
app:iconTint="?attr/colorOnPrimary"
app:showAsAction="always" />
<item
android:id="@+id/action_mark_as_unread"
android:icon="@drawable/ic_done_outline_24dp"
android:title="@string/action_mark_as_unread"
app:iconTint="?attr/colorOnPrimary"
app:showAsAction="always" />
<item <item
android:id="@+id/action_delete" android:id="@+id/action_delete"
android:icon="@drawable/ic_delete_24dp" android:icon="@drawable/ic_delete_24dp"