mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +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.
(cherry picked from commit 5ea03fad87)
			
			
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() | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -95,7 +95,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() | ||||
|   | ||||
| @@ -621,6 +621,7 @@ | ||||
|     <string name="download_custom">Custom</string> | ||||
|     <string name="download_all">All</string> | ||||
|     <string name="download_unread">Unread</string> | ||||
|     <string name="custom_cover">Custom cover</string> | ||||
|     <string name="manga_cover">Cover</string> | ||||
|     <string name="cover_saved">Cover saved</string> | ||||
|     <string name="error_saving_cover">Error saving cover</string> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user