From 44c9df8c9b0974e86bdf8f1c54b5097e7e5d18df Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Wed, 5 Aug 2020 18:23:29 -0400 Subject: [PATCH] Add quick clean E-Hentai/nHentai titles, select them in your library and you can quick clean them --- .../tachiyomi/ui/library/LibraryController.kt | 19 +++++++++- .../tachiyomi/ui/library/LibraryPresenter.kt | 35 ++++++++++++++++++- app/src/main/res/menu/library_selection.xml | 7 ++++ app/src/main/res/values/strings_sy.xml | 1 + 4 files changed, 60 insertions(+), 2 deletions(-) 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 7b355cb90..cc0e7206a 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 @@ -41,6 +41,9 @@ import eu.kanade.tachiyomi.ui.main.offsetAppbarHeight import eu.kanade.tachiyomi.ui.manga.MangaController import eu.kanade.tachiyomi.util.system.getResourceColor import eu.kanade.tachiyomi.util.system.toast +import exh.EH_SOURCE_ID +import exh.EXH_SOURCE_ID +import exh.NHENTAI_SOURCE_ID import exh.favorites.FavoritesIntroDialog import exh.favorites.FavoritesSyncStatus import exh.ui.LoaderManager @@ -522,6 +525,10 @@ class LibraryController( mode.title = count.toString() binding.actionToolbar.findItem(R.id.action_download_unread)?.isVisible = selectedMangas.any { it.source != LocalSource.ID } + + // SY --> + binding.actionToolbar.findItem(R.id.action_clean)?.isVisible = selectedMangas.any { it.source == EH_SOURCE_ID || it.source == EXH_SOURCE_ID } + // SY <-- } return false } @@ -540,9 +547,11 @@ class LibraryController( // SY --> R.id.action_migrate -> { val skipPre = preferences.skipPreMigration().get() - PreMigrationController.navigateToMigration(skipPre, router, selectedMangas.mapNotNull { it.id }) + presenter.onOpenManga() destroyActionModeIfNeeded() + PreMigrationController.navigateToMigration(skipPre, router, selectedMangas.mapNotNull { it.id }) } + R.id.action_clean -> cleanTitles() // SY <-- else -> return false } @@ -627,6 +636,14 @@ class LibraryController( DeleteLibraryMangasDialog(this, selectedMangas.toList()).showDialog(router) } + // SY --> + private fun cleanTitles() { + val mangas = selectedMangas.filter { it.source == EH_SOURCE_ID || it.source == EXH_SOURCE_ID || it.source == NHENTAI_SOURCE_ID }.toList() + presenter.cleanTitles(mangas) + destroyActionModeIfNeeded() + } + // SY <-- + override fun updateCategoriesForMangas(mangas: List, categories: List) { presenter.moveMangasToCategories(categories, mangas) destroyActionModeIfNeeded() 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 629a38dff..c1fb207a7 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt @@ -8,6 +8,7 @@ import eu.kanade.tachiyomi.data.database.models.Category import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.database.models.MangaCategory import eu.kanade.tachiyomi.data.download.DownloadManager +import eu.kanade.tachiyomi.data.library.CustomMangaManager import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.model.Filter.TriState.Companion.STATE_EXCLUDE @@ -25,6 +26,7 @@ import exh.EH_SOURCE_ID import exh.EXH_SOURCE_ID import exh.favorites.FavoritesSyncHelper import exh.util.isLewd +import exh.util.nullIfBlank import java.util.Collections import java.util.Comparator import rx.Observable @@ -52,7 +54,10 @@ class LibraryPresenter( private val preferences: PreferencesHelper = Injekt.get(), private val coverCache: CoverCache = Injekt.get(), private val sourceManager: SourceManager = Injekt.get(), - private val downloadManager: DownloadManager = Injekt.get() + private val downloadManager: DownloadManager = Injekt.get(), + // SY --> + private val customMangaManager: CustomMangaManager = Injekt.get() + // SY <-- ) : BasePresenter() { private val context = preferences.context @@ -366,6 +371,34 @@ class LibraryPresenter( } } + // SY --> + fun cleanTitles(mangas: List) { + mangas.forEach { manga -> + val editedTitle = manga.title.replace("\\[.*?]".toRegex(), "").trim().replace("\\(.*?\\)".toRegex(), "").trim().replace("\\{.*?\\}".toRegex(), "").trim().let { + if (it.contains("|")) { + it.replace(".*\\|".toRegex(), "").trim() + } else { + it + } + } + if (manga.title == editedTitle) return@forEach + val mangaJson = manga.id?.let { + CustomMangaManager.MangaJson( + it, + editedTitle.nullIfBlank(), + (if (manga.author != manga.originalAuthor) manga.author else null), + (if (manga.artist != manga.originalArtist) manga.artist else null), + (if (manga.description != manga.originalDescription) manga.description else null), + (if (manga.genre != manga.originalGenre) manga.getGenres()?.toTypedArray() else null) + ) + } + mangaJson?.let { + customMangaManager.saveMangaInfo(it) + } + } + } + // SY <-- + /** * Remove the selected manga from the library. * diff --git a/app/src/main/res/menu/library_selection.xml b/app/src/main/res/menu/library_selection.xml index b9c67b944..17d0134b0 100755 --- a/app/src/main/res/menu/library_selection.xml +++ b/app/src/main/res/menu/library_selection.xml @@ -23,6 +23,13 @@ app:iconTint="?attr/colorOnPrimary" app:showAsAction="always" /> + + Search manually Migrate now Copy now + Clean titles Manhwa