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
|
||||
|
||||
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 {
|
||||
|
@ -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"
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user