Ver código fonte

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

Adapted from https://github.com/CarlosEsco/Neko/commit/e51276a1acb233467bbb1c7214be0ec105c62cb7
arkon 4 anos atrás
pai
commit
8bab1d9798

+ 8 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt

@@ -472,6 +472,8 @@ class LibraryController(
         when (item.itemId) {
             R.id.action_move_to_category -> showChangeMangaCategoriesDialog()
             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_select_all -> selectAllCategoryManga()
             R.id.action_select_inverse -> selectInverseCategoryManga()
@@ -554,6 +556,12 @@ class LibraryController(
         destroyActionModeIfNeeded()
     }
 
+    private fun markReadStatus(read: Boolean) {
+        val mangas = selectedMangas.toList()
+        presenter.markReadStatus(mangas, read)
+        destroyActionModeIfNeeded()
+    }
+
     private fun showDeleteMangaDialog() {
         DeleteLibraryMangasDialog(this, selectedMangas.toList()).showDialog(router)
     }

+ 31 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt

@@ -5,6 +5,7 @@ import com.jakewharton.rxrelay.BehaviorRelay
 import eu.kanade.tachiyomi.data.cache.CoverCache
 import eu.kanade.tachiyomi.data.database.DatabaseHelper
 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.MangaCategory
 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.
      *

+ 14 - 0
app/src/main/res/menu/library_selection.xml

@@ -16,6 +16,20 @@
         app:iconTint="?attr/colorOnPrimary"
         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
         android:id="@+id/action_delete"
         android:icon="@drawable/ic_delete_24dp"