mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-03 23:58:55 +01:00 
			
		
		
		
	Implement migration for source search (#4657)
This commit is contained in:
		@@ -5,10 +5,13 @@ import android.os.Bundle
 | 
			
		||||
import androidx.core.view.isVisible
 | 
			
		||||
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.models.Manga
 | 
			
		||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
 | 
			
		||||
import eu.kanade.tachiyomi.source.CatalogueSource
 | 
			
		||||
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.source.globalsearch.GlobalSearchController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchPresenter
 | 
			
		||||
@@ -39,16 +42,16 @@ class SearchController(
 | 
			
		||||
        newManga = savedInstanceState.getSerializable(::newManga.name) as? Manga
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun migrateManga() {
 | 
			
		||||
        val manga = manga ?: return
 | 
			
		||||
        val newManga = newManga ?: return
 | 
			
		||||
    fun migrateManga(manga: Manga? = null, newManga: Manga?) {
 | 
			
		||||
        manga ?: return
 | 
			
		||||
        newManga ?: return
 | 
			
		||||
 | 
			
		||||
        (presenter as? SearchPresenter)?.migrateManga(manga, newManga, true)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun copyManga() {
 | 
			
		||||
        val manga = manga ?: return
 | 
			
		||||
        val newManga = newManga ?: return
 | 
			
		||||
    fun copyManga(manga: Manga? = null, newManga: Manga?) {
 | 
			
		||||
        manga ?: return
 | 
			
		||||
        newManga ?: return
 | 
			
		||||
 | 
			
		||||
        (presenter as? SearchPresenter)?.migrateManga(manga, newManga, false)
 | 
			
		||||
    }
 | 
			
		||||
@@ -56,7 +59,7 @@ class SearchController(
 | 
			
		||||
    override fun onMangaClick(manga: Manga) {
 | 
			
		||||
        newManga = manga
 | 
			
		||||
        val dialog =
 | 
			
		||||
            MigrationDialog()
 | 
			
		||||
            MigrationDialog(manga, newManga, this)
 | 
			
		||||
        dialog.targetController = this
 | 
			
		||||
        dialog.showDialog(router)
 | 
			
		||||
    }
 | 
			
		||||
@@ -75,7 +78,7 @@ class SearchController(
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    class MigrationDialog : DialogController() {
 | 
			
		||||
    class MigrationDialog(private val manga: Manga? = null, private val newManga: Manga? = null, private val callingController: Controller? = null) : DialogController() {
 | 
			
		||||
 | 
			
		||||
        private val preferences: PreferencesHelper by injectLazy()
 | 
			
		||||
 | 
			
		||||
@@ -101,12 +104,28 @@ class SearchController(
 | 
			
		||||
                    preferences.migrateFlags().set(newValue)
 | 
			
		||||
                }
 | 
			
		||||
                .positiveButton(R.string.migrate) {
 | 
			
		||||
                    (targetController as? SearchController)?.migrateManga()
 | 
			
		||||
                    if (callingController != null) {
 | 
			
		||||
                        if (callingController.javaClass == SourceSearchController::class.java) {
 | 
			
		||||
                            router.popController(callingController)
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    (targetController as? SearchController)?.migrateManga(manga, newManga)
 | 
			
		||||
                }
 | 
			
		||||
                .negativeButton(R.string.copy) {
 | 
			
		||||
                    (targetController as? SearchController)?.copyManga()
 | 
			
		||||
                    if (callingController != null) {
 | 
			
		||||
                        if (callingController.javaClass == SourceSearchController::class.java) {
 | 
			
		||||
                            router.popController(callingController)
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    (targetController as? SearchController)?.copyManga(manga, newManga)
 | 
			
		||||
                }
 | 
			
		||||
                .neutralButton(android.R.string.cancel)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onTitleClick(source: CatalogueSource) {
 | 
			
		||||
        presenter.preferences.lastUsedSource().set(source.id)
 | 
			
		||||
 | 
			
		||||
        router.pushController(SourceSearchController(manga, source, presenter.query).withFadeTransaction())
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,39 @@
 | 
			
		||||
package eu.kanade.tachiyomi.ui.browse.migration.search
 | 
			
		||||
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.view.View
 | 
			
		||||
import eu.kanade.tachiyomi.data.database.models.Manga
 | 
			
		||||
import eu.kanade.tachiyomi.source.CatalogueSource
 | 
			
		||||
import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceController
 | 
			
		||||
import eu.kanade.tachiyomi.ui.browse.source.browse.SourceItem
 | 
			
		||||
 | 
			
		||||
class SourceSearchController(
 | 
			
		||||
    bundle: Bundle
 | 
			
		||||
) : BrowseSourceController(bundle) {
 | 
			
		||||
 | 
			
		||||
    constructor(manga: Manga? = null, source: CatalogueSource, searchQuery: String? = null) : this(
 | 
			
		||||
        Bundle().apply {
 | 
			
		||||
            putLong(SOURCE_ID_KEY, source.id)
 | 
			
		||||
            putSerializable(MANGA_KEY, manga)
 | 
			
		||||
            if (searchQuery != null) {
 | 
			
		||||
                putString(SEARCH_QUERY_KEY, searchQuery)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    )
 | 
			
		||||
    private var oldManga: Manga? = args.getSerializable(MANGA_KEY) as Manga?
 | 
			
		||||
    private var newManga: Manga? = null
 | 
			
		||||
 | 
			
		||||
    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)
 | 
			
		||||
        return true
 | 
			
		||||
    }
 | 
			
		||||
    private companion object {
 | 
			
		||||
        const val MANGA_KEY = "oldManga"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -86,7 +86,7 @@ open class BrowseSourceController(bundle: Bundle) :
 | 
			
		||||
    /**
 | 
			
		||||
     * Adapter containing the list of manga from the catalogue.
 | 
			
		||||
     */
 | 
			
		||||
    private var adapter: FlexibleAdapter<IFlexible<*>>? = null
 | 
			
		||||
    protected var adapter: FlexibleAdapter<IFlexible<*>>? = null
 | 
			
		||||
 | 
			
		||||
    private var actionFab: ExtendedFloatingActionButton? = null
 | 
			
		||||
    private var actionFabScrollListener: RecyclerView.OnScrollListener? = null
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user