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 package eu.kanade.tachiyomi.ui.browse.migration.search
import android.app.Dialog
import android.os.Bundle import android.os.Bundle
import android.view.Menu import android.view.Menu
import android.view.MenuInflater import android.view.MenuInflater
import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.SearchView
import androidx.core.os.bundleOf 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.R
import eu.kanade.tachiyomi.data.database.DatabaseHelper import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.models.Manga 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.CatalogueSource
import eu.kanade.tachiyomi.source.SourceManager 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.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.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.GlobalSearchController
import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchPresenter import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchPresenter
import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.filter
@ -29,7 +21,6 @@ import reactivecircus.flowbinding.appcompat.QueryTextEvent
import reactivecircus.flowbinding.appcompat.queryTextEvents import reactivecircus.flowbinding.appcompat.queryTextEvents
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy
class SearchController( class SearchController(
private var manga: Manga? = null, private var manga: Manga? = null,
@ -41,19 +32,17 @@ class SearchController(
SOURCES to sources?.map { it.id }?.toLongArray() SOURCES to sources?.map { it.id }?.toLongArray()
) )
) { ) {
constructor(targetController: MigrationListController?, mangaId: Long, sources: LongArray) :
private var newManga: Manga? = null
private var progress = 1
var totalProgress = 0
constructor(mangaId: Long, sources: LongArray) :
this( this(
Injekt.get<DatabaseHelper>().getManga(mangaId).executeAsBlocking(), Injekt.get<DatabaseHelper>().getManga(mangaId).executeAsBlocking(),
sources.map { Injekt.get<SourceManager>().getOrStub(it) }.filterIsInstance<CatalogueSource>() sources.map { Injekt.get<SourceManager>().getOrStub(it) }.filterIsInstance<CatalogueSource>()
) ) {
this.targetController = targetController
}
@Suppress("unused") @Suppress("unused")
constructor(bundle: Bundle) : this( constructor(bundle: Bundle) : this(
null,
bundle.getLong(OLD_MANGA), bundle.getLong(OLD_MANGA),
bundle.getLongArray(SOURCES) ?: LongArray(0) bundle.getLongArray(SOURCES) ?: LongArray(0)
) )
@ -65,14 +54,6 @@ class SearchController(
setHasOptionsMenu(true) setHasOptionsMenu(true)
} }
override fun getTitle(): String? {
return if (totalProgress > 1) {
"($progress/$totalProgress) ${super.getTitle()}"
} else {
super.getTitle()
}
}
override fun createPresenter(): GlobalSearchPresenter { override fun createPresenter(): GlobalSearchPresenter {
return SearchPresenter( return SearchPresenter(
initialQuery, 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) { override fun onMangaClick(manga: Manga) {
if (targetController is MigrationListController) { val migrationListController = targetController as MigrationListController
val migrationListController = targetController as? MigrationListController
val sourceManager = Injekt.get<SourceManager>() val sourceManager = Injekt.get<SourceManager>()
val source = sourceManager.get(manga.source) ?: return val source = sourceManager.get(manga.source) ?: return
migrationListController?.useMangaForMigration(manga, source) migrationListController.useMangaForMigration(manga, source)
router.popCurrentController() router.popCurrentController()
return
}
newManga = manga
val dialog =
MigrationDialog(this.manga ?: return, newManga ?: return, this)
dialog.targetController = this
dialog.showDialog(router)
} }
override fun onMangaLongClick(manga: Manga) { override fun onMangaLongClick(manga: Manga) {
@ -127,69 +75,6 @@ class SearchController(
super.onMangaClick(manga) 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. * Adds items to the options menu.
* *
@ -223,7 +108,7 @@ class SearchController(
override fun onTitleClick(source: CatalogueSource) { override fun onTitleClick(source: CatalogueSource) {
presenter.preferences.lastUsedSource().set(source.id) 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 { companion object {

View File

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