Allow migrating extra info like viewer, chapter filters, and other stuff

This commit is contained in:
Jobobby04 2020-10-01 22:09:36 -04:00
parent 1a55f4845c
commit 32748fa056
4 changed files with 65 additions and 41 deletions

View File

@ -4,17 +4,18 @@ import eu.kanade.tachiyomi.R
object MigrationFlags {
const val CHAPTERS = 0b001
const val CATEGORIES = 0b010
const val TRACK = 0b100
const val CHAPTERS = 0b0001
const val CATEGORIES = 0b0010
const val TRACK = 0b0100
const val EXTRA = 0b1000
private const val CHAPTERS2 = 0x1
private const val CATEGORIES2 = 0x2
private const val TRACK2 = 0x4
val titles get() = arrayOf(R.string.chapters, R.string.categories, R.string.track)
val titles get() = arrayOf(R.string.chapters, R.string.categories, R.string.track, R.string.log_extra)
val flags get() = arrayOf(CHAPTERS, CATEGORIES, TRACK)
val flags get() = arrayOf(CHAPTERS, CATEGORIES, TRACK, EXTRA)
fun hasChapters(value: Int): Boolean {
return value and CHAPTERS != 0
@ -28,6 +29,10 @@ object MigrationFlags {
return value and TRACK != 0
}
fun hasExtra(value: Int): Boolean {
return value and EXTRA != 0
}
fun getEnabledFlagsPositions(value: Int): List<Int> {
return flags.mapIndexedNotNull { index, flag -> if (value and flag != 0) index else null }
}

View File

@ -14,15 +14,9 @@ import com.google.android.material.bottomsheet.BottomSheetDialog
import com.tfcporciuncula.flow.Preference
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.databinding.MigrationBottomSheetBinding
import eu.kanade.tachiyomi.ui.browse.migration.MigrationFlags
import eu.kanade.tachiyomi.util.system.toast
import kotlinx.android.synthetic.main.migration_bottom_sheet.*
import kotlinx.android.synthetic.main.migration_bottom_sheet.extra_search_param
import kotlinx.android.synthetic.main.migration_bottom_sheet.extra_search_param_text
import kotlinx.android.synthetic.main.migration_bottom_sheet.mig_categories
import kotlinx.android.synthetic.main.migration_bottom_sheet.mig_chapters
import kotlinx.android.synthetic.main.migration_bottom_sheet.mig_tracking
import kotlinx.android.synthetic.main.migration_bottom_sheet.use_smart_search
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
@ -38,15 +32,12 @@ class MigrationBottomSheetDialog(activity: Activity, theme: Int, private val lis
private val preferences by injectLazy<PreferencesHelper>()
private val scope = CoroutineScope(Job() + Dispatchers.Main)
init {
// Use activity theme for this layout
val view = activity.layoutInflater.inflate(R.layout.migration_bottom_sheet, null)
// val scroll = NestedScrollView(context)
// scroll.addView(view)
private val binding: MigrationBottomSheetBinding = MigrationBottomSheetBinding.inflate(activity.layoutInflater)
setContentView(view)
init {
setContentView(binding.root)
if (activity.resources.configuration?.orientation == Configuration.ORIENTATION_LANDSCAPE) {
sourceGroup.orientation = LinearLayout.HORIZONTAL
binding.sourceGroup.orientation = LinearLayout.HORIZONTAL
}
window?.setBackgroundDrawable(null)
}
@ -59,11 +50,11 @@ class MigrationBottomSheetDialog(activity: Activity, theme: Int, private val lis
initPreferences()
fab.clicks().onEach {
preferences.skipPreMigration().set(skip_step.isChecked)
binding.fab.clicks().onEach {
preferences.skipPreMigration().set(binding.skipStep.isChecked)
listener.startMigration(
if (use_smart_search.isChecked && extra_search_param_text.text.isNotBlank()) {
extra_search_param_text.text.toString()
if (binding.useSmartSearch.isChecked && binding.extraSearchParamText.text.isNotBlank()) {
binding.extraSearchParamText.toString()
} else null
)
dismiss()
@ -76,23 +67,25 @@ class MigrationBottomSheetDialog(activity: Activity, theme: Int, private val lis
private fun initPreferences() {
val flags = preferences.migrateFlags().get()
mig_chapters.isChecked = MigrationFlags.hasChapters(flags)
mig_categories.isChecked = MigrationFlags.hasCategories(flags)
mig_tracking.isChecked = MigrationFlags.hasTracks(flags)
binding.migChapters.isChecked = MigrationFlags.hasChapters(flags)
binding.migCategories.isChecked = MigrationFlags.hasCategories(flags)
binding.migTracking.isChecked = MigrationFlags.hasTracks(flags)
binding.migExtra.isChecked = MigrationFlags.hasExtra(flags)
mig_chapters.setOnCheckedChangeListener { _, _ -> setFlags() }
mig_categories.setOnCheckedChangeListener { _, _ -> setFlags() }
mig_tracking.setOnCheckedChangeListener { _, _ -> setFlags() }
binding.migChapters.setOnCheckedChangeListener { _, _ -> setFlags() }
binding.migCategories.setOnCheckedChangeListener { _, _ -> setFlags() }
binding.migTracking.setOnCheckedChangeListener { _, _ -> setFlags() }
binding.migExtra.setOnCheckedChangeListener { buttonView, isChecked -> setFlags() }
use_smart_search.bindToPreference(preferences.smartMigration())
extra_search_param_text.isVisible = false
extra_search_param.setOnCheckedChangeListener { _, isChecked ->
extra_search_param_text.isVisible = isChecked
binding.useSmartSearch.bindToPreference(preferences.smartMigration())
binding.extraSearchParamText.isVisible = false
binding.extraSearchParam.setOnCheckedChangeListener { _, isChecked ->
binding.extraSearchParamText.isVisible = isChecked
}
sourceGroup.bindToPreference(preferences.useSourceWithMost())
binding.sourceGroup.bindToPreference(preferences.useSourceWithMost())
skip_step.isChecked = preferences.skipPreMigration().get()
skip_step.setOnCheckedChangeListener { _, isChecked ->
binding.skipStep.isChecked = preferences.skipPreMigration().get()
binding.skipStep.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
(listener as? Controller)?.activity?.toast(
R.string.pre_migration_skip_toast,
@ -104,9 +97,10 @@ class MigrationBottomSheetDialog(activity: Activity, theme: Int, private val lis
private fun setFlags() {
var flags = 0
if (mig_chapters.isChecked) flags = flags or MigrationFlags.CHAPTERS
if (mig_categories.isChecked) flags = flags or MigrationFlags.CATEGORIES
if (mig_tracking.isChecked) flags = flags or MigrationFlags.TRACK
if (binding.migChapters.isChecked) flags = flags or MigrationFlags.CHAPTERS
if (binding.migCategories.isChecked) flags = flags or MigrationFlags.CATEGORIES
if (binding.migTracking.isChecked) flags = flags or MigrationFlags.TRACK
if (binding.migExtra.isChecked) flags = flags or MigrationFlags.EXTRA
preferences.migrateFlags().set(flags)
}

View File

@ -61,6 +61,7 @@ class MigrationMangaPresenter(
val migrateChapters = MigrationFlags.hasChapters(flags)
val migrateCategories = MigrationFlags.hasCategories(flags)
val migrateTracks = MigrationFlags.hasTracks(flags)
val migrateExtra = MigrationFlags.hasExtra(flags)
db.inTransaction {
// Update chapters read
@ -99,6 +100,17 @@ class MigrationMangaPresenter(
}
db.insertTracks(tracks).executeAsBlocking()
}
if (migrateExtra) {
manga.bookmarkedFilter = prevManga.bookmarkedFilter
manga.downloadedFilter = prevManga.downloadedFilter
manga.readFilter = prevManga.readFilter
manga.viewer = prevManga.viewer
manga.chapter_flags = prevManga.chapter_flags
manga.displayMode = prevManga.displayMode
manga.sorting = prevManga.sorting
}
// Update favorite status
if (replace) {
prevManga.favorite = false
@ -108,6 +120,8 @@ class MigrationMangaPresenter(
} else {
manga.date_added = Date().time
}
// Set extra data
manga.favorite = true
db.updateMangaFavorite(manga).executeAsBlocking()

View File

@ -60,11 +60,22 @@
android:checked="true"
android:text="@string/track"
app:layout_constraintBottom_toBottomOf="@+id/mig_categories"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toEndOf="@+id/mig_categories"
app:layout_constraintTop_toTopOf="@+id/mig_categories" />
<CheckBox
android:id="@+id/mig_extra"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:checked="true"
android:text="@string/log_extra"
app:layout_constraintBottom_toBottomOf="@+id/mig_tracking"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toEndOf="@+id/mig_tracking"
app:layout_constraintTop_toTopOf="@+id/mig_tracking" />
<TextView
android:id="@+id/options_label"
android:layout_width="wrap_content"