Browse source from migration now properly adds it as a result
This commit is contained in:
parent
c5148b4739
commit
8686fecb1f
@ -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 {
|
||||||
|
@ -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"
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user