diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt b/app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt index fc0caa99f0..50ca6c65b7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt @@ -56,6 +56,10 @@ open class SourceManager(private val context: Context) { } } + fun isDelegatedSource(source: Source): Boolean { + return delegatedSources.values.count { it.sourceId == source.id } > 0 + } + fun getDelegatedSource(urlName: String): DelegatedHttpSource? { return delegatedSources.values.find { it.urlName == urlName }?.delegatedHttpSource } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt index 63aeda7baa..14a8c13d26 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt @@ -1359,6 +1359,17 @@ class LibraryController( deleteMangasFromLibrary() }.negativeButton(android.R.string.no).show() } + R.id.action_download_unread -> { + presenter.downloadUnread(selectedMangas.toList()) + } + R.id.action_mark_as_read -> { + presenter.markReadStatus(selectedMangas.toList(), true) + destroyActionModeIfNeeded() + } + R.id.action_mark_as_unread -> { + presenter.markReadStatus(selectedMangas.toList(), false) + destroyActionModeIfNeeded() + } R.id.action_migrate -> { val skipPre = preferences.skipPreMigration().getOrDefault() PreMigrationController.navigateToMigration( diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt index eadc5c0fac..371be6f45a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt @@ -875,6 +875,48 @@ class LibraryPresenter( getLibrary() } + /** download All unread */ + fun downloadUnread(mangaList: List) { + scope.launch { + withContext(Dispatchers.IO) { + mangaList.forEach { + val chapters = db.getChapters(it).executeAsBlocking().filter { !it.read } + downloadManager.downloadChapters(it, chapters) + } + } + if (preferences.downloadBadge().getOrDefault()) { + requestDownloadBadgesUpdate() + } + } + } + + fun markReadStatus(mangaList: List, markRead: Boolean) { + scope.launch { + withContext(Dispatchers.IO) { + mangaList.forEach { + withContext(Dispatchers.IO) { + val chapters = db.getChapters(it).executeAsBlocking() + chapters.forEach { + it.read = markRead + it.last_page_read = 0 + } + db.updateChaptersProgress(chapters).executeAsBlocking() + if (markRead && preferences.removeAfterMarkedAsRead()) { + deleteChapters(it, chapters) + } + } + } + getLibrary() + } + } + } + + private fun deleteChapters(manga: Manga, chapters: List) { + sourceManager.get(manga.source)?.let { source -> + downloadManager.deleteChapters(chapters, manga, source) + } + } + companion object { private var lastLibraryItems: List? = null private var lastCategories: List? = null diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsController.kt index 61aa18c7f8..f2d8cbd1ee 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsController.kt @@ -615,7 +615,8 @@ class MangaDetailsController : popup.setOnMenuItemClickListener { menuItem -> when (menuItem.itemId) { - R.id.action_mark_previous_as_read -> markPreviousAsRead(item) + R.id.action_mark_previous_as_read -> markPreviousAs(item, true) + R.id.action_mark_previous_as_unread -> markPreviousAs(item, false) } chapterPopupMenu = null true @@ -644,12 +645,16 @@ class MangaDetailsController : } } - private fun markPreviousAsRead(chapter: ChapterItem) { + private fun markPreviousAs(chapter: ChapterItem, read: Boolean) { val adapter = adapter ?: return val chapters = if (presenter.sortDescending()) adapter.items.reversed() else adapter.items val chapterPos = chapters.indexOf(chapter) if (chapterPos != -1) { - markAsRead(chapters.take(chapterPos)) + if (read) { + markAsRead(chapters.take(chapterPos)) + } else { + markAsUnread(chapters.take(chapterPos)) + } } } diff --git a/app/src/main/res/menu/chapter_single.xml b/app/src/main/res/menu/chapter_single.xml index 7fd4927c97..8ce6ee54e5 100644 --- a/app/src/main/res/menu/chapter_single.xml +++ b/app/src/main/res/menu/chapter_single.xml @@ -3,4 +3,6 @@ + \ No newline at end of file diff --git a/app/src/main/res/menu/library_selection.xml b/app/src/main/res/menu/library_selection.xml index 04f7661d4c..5f82bc9f67 100644 --- a/app/src/main/res/menu/library_selection.xml +++ b/app/src/main/res/menu/library_selection.xml @@ -21,9 +21,24 @@ android:title="@string/source_migration" app:showAsAction="ifRoom" /> + + + + + + + app:showAsAction="never" /> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 659823bfb4..f76fa532fd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -710,6 +710,7 @@ Delete Deleted: %1$s Display + Download unread Drag handle Edit Enabled @@ -728,7 +729,9 @@ Mark all as read Mark all as unread Mark as read + Mark as unread Mark previous as read + Mark previous as unread More Move to bottom Move to top