mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-03 23:58:55 +01:00 
			
		
		
		
	New: Migrating titles maintains custom covers (#7196)
* New: Migrating titles maintains custom covers #7189 * Added Custom Covers to MigrationFlags.kt, strings.xml * Reworded covers --> cover * Updated logic to show/hide Migration flags titles depending on manga.
This commit is contained in:
		@@ -1,20 +1,29 @@
 | 
			
		||||
package eu.kanade.tachiyomi.ui.browse.migration
 | 
			
		||||
 | 
			
		||||
import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.data.cache.CoverCache
 | 
			
		||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
 | 
			
		||||
import eu.kanade.tachiyomi.data.database.models.Manga
 | 
			
		||||
import eu.kanade.tachiyomi.util.hasCustomCover
 | 
			
		||||
import uy.kohesive.injekt.Injekt
 | 
			
		||||
import uy.kohesive.injekt.api.get
 | 
			
		||||
import uy.kohesive.injekt.injectLazy
 | 
			
		||||
 | 
			
		||||
object MigrationFlags {
 | 
			
		||||
 | 
			
		||||
    private const val CHAPTERS = 0b001
 | 
			
		||||
    private const val CATEGORIES = 0b010
 | 
			
		||||
    private const val TRACK = 0b100
 | 
			
		||||
    private const val CHAPTERS = 0b0001
 | 
			
		||||
    private const val CATEGORIES = 0b0010
 | 
			
		||||
    private const val TRACK = 0b0100
 | 
			
		||||
    private const val CUSTOM_COVER = 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)
 | 
			
		||||
	private val coverCache: CoverCache by injectLazy()
 | 
			
		||||
	private val db: DatabaseHelper = Injekt.get()
 | 
			
		||||
 | 
			
		||||
    val flags get() = arrayOf(CHAPTERS, CATEGORIES, TRACK)
 | 
			
		||||
    val flags get() = arrayOf(CHAPTERS, CATEGORIES, TRACK, CUSTOM_COVER)
 | 
			
		||||
 | 
			
		||||
    fun hasChapters(value: Int): Boolean {
 | 
			
		||||
        return value and CHAPTERS != 0
 | 
			
		||||
@@ -28,11 +37,31 @@ object MigrationFlags {
 | 
			
		||||
        return value and TRACK != 0
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun hasCustomCover(value: Int): Boolean {
 | 
			
		||||
        return value and CUSTOM_COVER != 0
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun getEnabledFlagsPositions(value: Int): List<Int> {
 | 
			
		||||
        return flags.mapIndexedNotNull { index, flag -> if (value and flag != 0) index else null }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun getFlagsFromPositions(positions: Array<Int>): Int {
 | 
			
		||||
        return positions.fold(0, { accumulated, position -> accumulated or (1 shl position) })
 | 
			
		||||
        return positions.fold(0) { accumulated, position -> accumulated or (1 shl position) }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	fun titles(manga: Manga?): Array<Int> {
 | 
			
		||||
		val titles = arrayOf(R.string.chapters, R.string.categories).toMutableList()
 | 
			
		||||
		if (manga != null) {
 | 
			
		||||
			db.inTransaction {
 | 
			
		||||
				if (db.getTracks(manga).executeAsBlocking().isNotEmpty()) {
 | 
			
		||||
					titles.add(R.string.track)
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if (manga.hasCustomCover(coverCache)) {
 | 
			
		||||
					titles.add(R.string.custom_cover)
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
			return titles.toTypedArray()
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -104,7 +104,7 @@ class SearchController(
 | 
			
		||||
        override fun onCreateDialog(savedViewState: Bundle?): Dialog {
 | 
			
		||||
            val prefValue = preferences.migrateFlags().get()
 | 
			
		||||
            val enabledFlagsPositions = MigrationFlags.getEnabledFlagsPositions(prefValue)
 | 
			
		||||
            val items = MigrationFlags.titles
 | 
			
		||||
            val items = MigrationFlags.titles(manga)
 | 
			
		||||
                .map { resources?.getString(it) }
 | 
			
		||||
                .toTypedArray()
 | 
			
		||||
            val selected = items
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.ui.browse.migration.search
 | 
			
		||||
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import com.jakewharton.rxrelay.BehaviorRelay
 | 
			
		||||
import eu.kanade.tachiyomi.data.cache.CoverCache
 | 
			
		||||
import eu.kanade.tachiyomi.data.database.models.Manga
 | 
			
		||||
import eu.kanade.tachiyomi.data.database.models.MangaCategory
 | 
			
		||||
import eu.kanade.tachiyomi.data.database.models.toMangaInfo
 | 
			
		||||
@@ -17,12 +18,14 @@ import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchCardItem
 | 
			
		||||
import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchItem
 | 
			
		||||
import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchPresenter
 | 
			
		||||
import eu.kanade.tachiyomi.util.chapter.syncChaptersWithSource
 | 
			
		||||
import eu.kanade.tachiyomi.util.hasCustomCover
 | 
			
		||||
import eu.kanade.tachiyomi.util.lang.launchIO
 | 
			
		||||
import eu.kanade.tachiyomi.util.lang.launchUI
 | 
			
		||||
import eu.kanade.tachiyomi.util.lang.withUIContext
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.toast
 | 
			
		||||
import uy.kohesive.injekt.Injekt
 | 
			
		||||
import uy.kohesive.injekt.api.get
 | 
			
		||||
import uy.kohesive.injekt.injectLazy
 | 
			
		||||
import java.util.Date
 | 
			
		||||
 | 
			
		||||
class SearchPresenter(
 | 
			
		||||
@@ -31,7 +34,7 @@ class SearchPresenter(
 | 
			
		||||
) : GlobalSearchPresenter(initialQuery) {
 | 
			
		||||
 | 
			
		||||
    private val replacingMangaRelay = BehaviorRelay.create<Pair<Boolean, Manga?>>()
 | 
			
		||||
 | 
			
		||||
    private val coverCache: CoverCache by injectLazy()
 | 
			
		||||
    private val enhancedServices by lazy { Injekt.get<TrackManager>().services.filterIsInstance<EnhancedTrackService>() }
 | 
			
		||||
 | 
			
		||||
    override fun onCreate(savedState: Bundle?) {
 | 
			
		||||
@@ -103,6 +106,10 @@ class SearchPresenter(
 | 
			
		||||
            MigrationFlags.hasTracks(
 | 
			
		||||
                flags,
 | 
			
		||||
            )
 | 
			
		||||
        val migrateCustomCover =
 | 
			
		||||
            MigrationFlags.hasCustomCover(
 | 
			
		||||
                flags,
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
        db.inTransaction {
 | 
			
		||||
            // Update chapters read
 | 
			
		||||
@@ -174,6 +181,11 @@ class SearchPresenter(
 | 
			
		||||
                manga.date_added = Date().time
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Update custom cover
 | 
			
		||||
            if (migrateCustomCover) {
 | 
			
		||||
                coverCache.setCustomCoverToCache(manga, coverCache.getCustomCoverFile(prevManga).inputStream())
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // SearchPresenter#networkToLocalManga may have updated the manga title,
 | 
			
		||||
            // so ensure db gets updated title too
 | 
			
		||||
            db.insertManga(manga).executeAsBlocking()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user