Browse source from migration now properly adds it as a result

This commit is contained in:
Jobobby04 2021-05-06 16:36:02 -04:00
parent c5148b4739
commit 8686fecb1f
2 changed files with 30 additions and 137 deletions

View File

@ -1,25 +1,17 @@
package eu.kanade.tachiyomi.ui.browse.migration.search
import android.app.Dialog
import android.os.Bundle
import android.view.Menu
import android.view.MenuInflater
import androidx.appcompat.widget.SearchView
import androidx.core.os.bundleOf
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.list.listItemsMultiChoice
import com.bluelinelabs.conductor.Controller
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.source.CatalogueSource
import eu.kanade.tachiyomi.source.SourceManager
import eu.kanade.tachiyomi.ui.base.controller.DialogController
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
import eu.kanade.tachiyomi.ui.browse.migration.MigrationFlags
import eu.kanade.tachiyomi.ui.browse.migration.advanced.process.MigrationListController
import eu.kanade.tachiyomi.ui.browse.migration.manga.MigrationInterface
import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchController
import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchPresenter
import kotlinx.coroutines.flow.filter
@ -29,7 +21,6 @@ import reactivecircus.flowbinding.appcompat.QueryTextEvent
import reactivecircus.flowbinding.appcompat.queryTextEvents
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy
class SearchController(
private var manga: Manga? = null,
@ -41,19 +32,17 @@ class SearchController(
SOURCES to sources?.map { it.id }?.toLongArray()
)
) {
private var newManga: Manga? = null
private var progress = 1
var totalProgress = 0
constructor(mangaId: Long, sources: LongArray) :
constructor(targetController: MigrationListController?, mangaId: Long, sources: LongArray) :
this(
Injekt.get<DatabaseHelper>().getManga(mangaId).executeAsBlocking(),
sources.map { Injekt.get<SourceManager>().getOrStub(it) }.filterIsInstance<CatalogueSource>()
)
) {
this.targetController = targetController
}
@Suppress("unused")
constructor(bundle: Bundle) : this(
null,
bundle.getLong(OLD_MANGA),
bundle.getLongArray(SOURCES) ?: LongArray(0)
)
@ -65,14 +54,6 @@ class SearchController(
setHasOptionsMenu(true)
}
override fun getTitle(): String? {
return if (totalProgress > 1) {
"($progress/$totalProgress) ${super.getTitle()}"
} else {
super.getTitle()
}
}
override fun createPresenter(): GlobalSearchPresenter {
return SearchPresenter(
initialQuery,
@ -81,45 +62,12 @@ class SearchController(
)
}
fun migrateManga(manga: Manga, newManga: Manga) {
val target = targetController as? MigrationInterface ?: return
val nextManga = target.migrateManga(manga, newManga, true)
replaceWithNewSearchController(nextManga)
}
fun copyManga(manga: Manga, newManga: Manga) {
val target = targetController as? MigrationInterface ?: return
val nextManga = target.migrateManga(manga, newManga, false)
replaceWithNewSearchController(nextManga)
}
private fun replaceWithNewSearchController(manga: Manga?) {
if (manga != null) {
// router.popCurrentController()
val searchController = SearchController(manga)
searchController.targetController = targetController
searchController.progress = progress + 1
searchController.totalProgress = totalProgress
router.replaceTopController(searchController.withFadeTransaction())
} else router.popController(this)
}
override fun onMangaClick(manga: Manga) {
if (targetController is MigrationListController) {
val migrationListController = targetController as? MigrationListController
val sourceManager = Injekt.get<SourceManager>()
val source = sourceManager.get(manga.source) ?: return
migrationListController?.useMangaForMigration(manga, source)
router.popCurrentController()
return
}
newManga = manga
val dialog =
MigrationDialog(this.manga ?: return, newManga ?: return, this)
dialog.targetController = this
dialog.showDialog(router)
val migrationListController = targetController as MigrationListController
val sourceManager = Injekt.get<SourceManager>()
val source = sourceManager.get(manga.source) ?: return
migrationListController.useMangaForMigration(manga, source)
router.popCurrentController()
}
override fun onMangaLongClick(manga: Manga) {
@ -127,69 +75,6 @@ class SearchController(
super.onMangaClick(manga)
}
class MigrationDialog(bundle: Bundle) : DialogController(bundle) {
constructor(manga: Manga, newManga: Manga, callingController: Controller) : this(
bundleOf(
MANGA_KEY to manga,
NEW_MANGA_KEY to newManga
)
) {
this.callingController = callingController
}
private val manga: Manga = args.getSerializable(MANGA_KEY) as Manga
private val newManga: Manga = args.getSerializable(NEW_MANGA_KEY) as Manga
private var callingController: Controller? = null
private val preferences: PreferencesHelper by injectLazy()
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
val prefValue = preferences.migrateFlags().get()
val callingController = callingController
val preselected =
MigrationFlags.getEnabledFlagsPositions(
prefValue
)
return MaterialDialog(activity!!)
.title(R.string.migration_dialog_what_to_include)
.listItemsMultiChoice(
items = MigrationFlags.titles.map { resources?.getString(it) as CharSequence },
initialSelection = preselected.toIntArray()
) { _, positions, _ ->
// Save current settings for the next time
val newValue =
MigrationFlags.getFlagsFromPositions(
positions.toTypedArray()
)
preferences.migrateFlags().set(newValue)
}
.positiveButton(R.string.migrate) {
if (callingController != null) {
if (callingController.javaClass == SourceSearchController::class.java) {
router.popController(callingController)
}
}
(targetController as? SearchController)?.migrateManga(manga, newManga)
}
.negativeButton(R.string.copy) {
if (callingController != null) {
if (callingController.javaClass == SourceSearchController::class.java) {
router.popController(callingController)
}
}
(targetController as? SearchController)?.copyManga(manga, newManga)
}
.neutralButton(android.R.string.cancel)
}
companion object {
const val MANGA_KEY = "manga_key"
const val NEW_MANGA_KEY = "new_manga_key"
}
}
/**
* Adds items to the options menu.
*
@ -223,7 +108,7 @@ class SearchController(
override fun onTitleClick(source: CatalogueSource) {
presenter.preferences.lastUsedSource().set(source.id)
router.pushController(SourceSearchController(manga!!, source, presenter.query).withFadeTransaction())
router.pushController(SourceSearchController(targetController as? MigrationListController ?: return, manga!!, source, presenter.query).withFadeTransaction())
}
companion object {

View File

@ -5,33 +5,41 @@ import android.view.View
import androidx.core.os.bundleOf
import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.source.CatalogueSource
import eu.kanade.tachiyomi.source.SourceManager
import eu.kanade.tachiyomi.ui.browse.migration.advanced.process.MigrationListController
import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceController
import eu.kanade.tachiyomi.ui.browse.source.browse.SourceItem
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
class SourceSearchController(
bundle: Bundle
) : BrowseSourceController(bundle) {
constructor(manga: Manga, source: CatalogueSource, searchQuery: String? = null) : this(
constructor(targetController: MigrationListController, manga: Manga, source: CatalogueSource, searchQuery: String? = null) : this(
bundleOf(
SOURCE_ID_KEY to source.id,
MANGA_KEY to manga,
SEARCH_QUERY_KEY to searchQuery
)
)
private var oldManga: Manga = args.getSerializable(MANGA_KEY) as Manga
private var newManga: Manga? = null
) {
this.targetController = targetController
}
override fun onItemClick(view: View, position: Int): Boolean {
val item = adapter?.getItem(position) as? SourceItem ?: return false
newManga = item.manga
val searchController = router.backstack.findLast { it.controller().javaClass == SearchController::class.java }?.controller() as SearchController?
val dialog =
SearchController.MigrationDialog(oldManga, newManga!!, this)
dialog.targetController = searchController
dialog.showDialog(router)
val manga = (adapter?.getItem(position) as? SourceItem)?.manga ?: return false
val migrationListController = targetController as? MigrationListController ?: return false
val sourceManager = Injekt.get<SourceManager>()
val source = sourceManager.get(manga.source) ?: return false
migrationListController.useMangaForMigration(manga, source)
router.popCurrentController()
router.popCurrentController()
return true
}
override fun onItemLongClick(position: Int) {
view?.let { super.onItemClick(it, position) }
}
private companion object {
const val MANGA_KEY = "oldManga"
}