From 499c2213eefbdb2d627a80bfb7fcd93f86b49e14 Mon Sep 17 00:00:00 2001
From: NoodleMage <noodlemagedev@gmail.com>
Date: Mon, 21 Mar 2016 21:06:20 +0100
Subject: [PATCH] Implements delete chapter when set as read for issue #42

---
 .../data/preference/PreferencesHelper.kt      |  4 ++++
 .../ui/manga/chapter/ChaptersPresenter.kt     |  7 ++++++-
 .../ui/recent/RecentChaptersFragment.kt       |  8 +++----
 .../ui/recent/RecentChaptersHolder.kt         |  4 ++--
 .../ui/recent/RecentChaptersPresenter.kt      | 21 ++++++++++++-------
 app/src/main/res/values/keys.xml              |  2 ++
 app/src/main/res/values/strings.xml           |  1 +
 app/src/main/res/xml/pref_downloads.xml       |  6 ++++++
 8 files changed, 39 insertions(+), 14 deletions(-)

diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt
index 3d5dc7847..d77ba10d9 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt
@@ -190,6 +190,10 @@ class PreferencesHelper(private val context: Context) {
         return prefs.getBoolean(getKey(R.string.pref_download_only_over_wifi_key), true)
     }
 
+    fun removeAfterMarkedAsRead(): Boolean {
+        return prefs.getBoolean(getKey(R.string.pref_remove_after_marked_as_read_key), false)
+    }
+
     fun libraryUpdateInterval(): Preference<Int> {
         return rxPrefs.getInteger(getKey(R.string.pref_library_update_interval_key), 0)
     }
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersPresenter.kt
index 98149151f..97a68756d 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersPresenter.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersPresenter.kt
@@ -103,7 +103,7 @@ class ChaptersPresenter : BasePresenter<ChaptersFragment>() {
                         }
                         start(CHAPTER_STATUS_CHANGES)
                     }
-                    .subscribe{ chaptersSubject.onNext(it) })
+                    .subscribe { chaptersSubject.onNext(it) })
         }
     }
 
@@ -191,6 +191,11 @@ class ChaptersPresenter : BasePresenter<ChaptersFragment>() {
                 .doOnNext { chapter ->
                     chapter.read = read
                     if (!read) chapter.last_page_read = 0
+
+                    // Delete chapter when marked as read if desired by user.
+                    if (preferences.removeAfterMarkedAsRead() && read) {
+                        deleteChapter(chapter)
+                    }
                 }
                 .toList()
                 .flatMap { chapters -> db.insertChapters(chapters).asRxObservable() }
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/recent/RecentChaptersFragment.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/recent/RecentChaptersFragment.kt
index 2b6423413..1fecbaf42 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/recent/RecentChaptersFragment.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/recent/RecentChaptersFragment.kt
@@ -202,9 +202,9 @@ class RecentChaptersFragment : BaseRxFragment<RecentChaptersPresenter>(), Flexib
      * @param chapters selected chapter
      * @return true
      */
-    fun onMarkAsRead(chapters: Observable<Chapter>): Boolean {
+    fun onMarkAsRead(chapters: Observable<Chapter>, manga : Manga): Boolean {
         // Set marked as read
-        presenter.markChaptersRead(chapters, true)
+        presenter.markChaptersRead(chapters, manga, true)
         return true
     }
 
@@ -214,9 +214,9 @@ class RecentChaptersFragment : BaseRxFragment<RecentChaptersPresenter>(), Flexib
      * @param chapters selected chapter
      * @return true
      */
-    fun onMarkAsUnread(chapters: Observable<Chapter>): Boolean {
+    fun onMarkAsUnread(chapters: Observable<Chapter> , manga : Manga): Boolean {
         // Set marked as unread
-        presenter.markChaptersRead(chapters, false)
+        presenter.markChaptersRead(chapters, manga, false)
         return true
     }
 
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/recent/RecentChaptersHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/recent/RecentChaptersHolder.kt
index 25eb0bd94..601e80b59 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/recent/RecentChaptersHolder.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/recent/RecentChaptersHolder.kt
@@ -125,8 +125,8 @@ class RecentChaptersHolder(view: View, private val adapter: RecentChaptersAdapte
                 when (menuItem.itemId) {
                     R.id.action_download -> adapter.fragment.onDownload(chapterObservable, it.manga)
                     R.id.action_delete -> adapter.fragment.onDelete(chapterObservable, it.manga)
-                    R.id.action_mark_as_read -> adapter.fragment.onMarkAsRead(chapterObservable);
-                    R.id.action_mark_as_unread -> adapter.fragment.onMarkAsUnread(chapterObservable);
+                    R.id.action_mark_as_read -> adapter.fragment.onMarkAsRead(chapterObservable, it.manga);
+                    R.id.action_mark_as_unread -> adapter.fragment.onMarkAsUnread(chapterObservable, it.manga);
                 }
                 false
             }
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/recent/RecentChaptersPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/recent/RecentChaptersPresenter.kt
index 7e892db08..ab9e86be2 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/recent/RecentChaptersPresenter.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/recent/RecentChaptersPresenter.kt
@@ -7,6 +7,7 @@ import eu.kanade.tachiyomi.data.database.models.Manga
 import eu.kanade.tachiyomi.data.database.models.MangaChapter
 import eu.kanade.tachiyomi.data.download.DownloadManager
 import eu.kanade.tachiyomi.data.download.model.Download
+import eu.kanade.tachiyomi.data.preference.PreferencesHelper
 import eu.kanade.tachiyomi.data.source.SourceManager
 import eu.kanade.tachiyomi.event.DownloadChaptersEvent
 import eu.kanade.tachiyomi.event.ReaderEvent
@@ -25,6 +26,11 @@ class RecentChaptersPresenter : BasePresenter<RecentChaptersFragment>() {
      */
     @Inject lateinit var db: DatabaseHelper
 
+    /**
+     * Used to get settings
+     */
+    @Inject lateinit var preferences: PreferencesHelper
+
     /**
      * Used to get information from download manager
      */
@@ -291,15 +297,16 @@ class RecentChaptersPresenter : BasePresenter<RecentChaptersFragment>() {
      * *
      * @param read read status
      */
-    fun markChaptersRead(selectedChapters: Observable<Chapter>, read: Boolean) {
-        add(selectedChapters
-                .subscribeOn(Schedulers.io())
-                .map { chapter ->
+    fun markChaptersRead(selectedChapters: Observable<Chapter>, manga: Manga, read: Boolean) {
+        add(selectedChapters.subscribeOn(Schedulers.io())
+                .doOnNext { chapter ->
                     chapter.read = read
-                    if (!read) {
-                        chapter.last_page_read = 0
+                    if (!read) chapter.last_page_read = 0
+
+                    // Delete chapter when marked as read if desired by user.
+                    if (preferences.removeAfterMarkedAsRead() && read) {
+                        deleteChapter(chapter,manga)
                     }
-                    chapter
                 }
                 .toList()
                 .flatMap { chapters -> db.insertChapters(chapters).asRxObservable() }
diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml
index fbdd4828c..64eb4576b 100644
--- a/app/src/main/res/values/keys.xml
+++ b/app/src/main/res/values/keys.xml
@@ -36,6 +36,8 @@
     <string name="pref_download_directory_key">pref_download_directory_key</string>
     <string name="pref_download_slots_key">pref_download_slots_key</string>
     <string name="pref_download_only_over_wifi_key">pref_download_only_over_wifi_key</string>
+    <string name="pref_remove_after_marked_as_read_key">pref_remove_after_marked_as_read_key</string>
+
 
     <string name="pref_source_languages">pref_source_languages</string>
 
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 737ee66a4..5e34fde24 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -134,6 +134,7 @@
     <string name="pref_download_directory">Downloads directory</string>
     <string name="pref_download_slots">Simultaneous downloads</string>
     <string name="pref_download_only_over_wifi">Only download over Wi-Fi</string>
+    <string name="pref_remove_after_marked_as_read">Remove when marked as read</string>
     <string name="custom_dir">Custom directory</string>
 
       <!-- Sources section -->
diff --git a/app/src/main/res/xml/pref_downloads.xml b/app/src/main/res/xml/pref_downloads.xml
index a7710af1f..eb367f69c 100644
--- a/app/src/main/res/xml/pref_downloads.xml
+++ b/app/src/main/res/xml/pref_downloads.xml
@@ -11,6 +11,12 @@
         android:key="@string/pref_download_only_over_wifi_key"
         android:defaultValue="true"/>
 
+    <SwitchPreferenceCompat
+        android:title="@string/pref_remove_after_marked_as_read"
+        android:key="@string/pref_remove_after_marked_as_read_key"
+        android:defaultValue="false"/>
+
+
     <eu.kanade.tachiyomi.widget.preference.IntListPreference
         android:title="@string/pref_download_slots"
         android:key="@string/pref_download_slots_key"