Change migration of custom covers to also include custom manga info

This commit is contained in:
Jays2Kings 2022-08-21 03:47:55 -04:00
parent 93e56c194a
commit cea5761b29
5 changed files with 41 additions and 31 deletions

View file

@ -7,7 +7,6 @@ import kotlinx.serialization.Serializable
import kotlinx.serialization.decodeFromString import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import uy.kohesive.injekt.injectLazy
import java.io.File import java.io.File
class CustomMangaManager(val context: Context) { class CustomMangaManager(val context: Context) {
@ -20,6 +19,20 @@ class CustomMangaManager(val context: Context) {
fetchCustomData() fetchCustomData()
} }
companion object {
fun Manga.toJson(): MangaJson {
return MangaJson(
id!!,
title,
author,
artist,
description,
genre?.split(", ")?.toTypedArray(),
status.takeUnless { it == -1 },
)
}
}
fun getManga(manga: Manga): Manga? = customMangaMap[manga.id] fun getManga(manga: Manga): Manga? = customMangaMap[manga.id]
private fun fetchCustomData() { private fun fetchCustomData() {
@ -45,7 +58,7 @@ class CustomMangaManager(val context: Context) {
manga.artist == null && manga.artist == null &&
manga.description == null && manga.description == null &&
manga.genre == null && manga.genre == null &&
manga.status ?: -1 == -1 (manga.status ?: -1) == -1
) { ) {
customMangaMap.remove(mangaId) customMangaMap.remove(mangaId)
} else { } else {
@ -54,8 +67,6 @@ class CustomMangaManager(val context: Context) {
saveCustomInfo() saveCustomInfo()
} }
private val json2: Json by injectLazy()
private fun saveCustomInfo() { private fun saveCustomInfo() {
val jsonElements = customMangaMap.values.map { it.toJson() } val jsonElements = customMangaMap.values.map { it.toJson() }
if (jsonElements.isNotEmpty()) { if (jsonElements.isNotEmpty()) {
@ -64,18 +75,6 @@ class CustomMangaManager(val context: Context) {
} }
} }
private fun Manga.toJson(): MangaJson {
return MangaJson(
id!!,
title,
author,
artist,
description,
genre?.split(", ")?.toTypedArray(),
status.takeUnless { it == -1 },
)
}
@Serializable @Serializable
data class MangaList( data class MangaList(
val mangas: List<MangaJson>? = null, val mangas: List<MangaJson>? = null,

View file

@ -5,8 +5,8 @@ import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.data.cache.CoverCache
import eu.kanade.tachiyomi.data.database.DatabaseHelper import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.library.CustomMangaManager
import eu.kanade.tachiyomi.util.system.toInt import eu.kanade.tachiyomi.util.system.toInt
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy import uy.kohesive.injekt.injectLazy
@ -15,13 +15,14 @@ object MigrationFlags {
private const val CHAPTERS = 0b0001 private const val CHAPTERS = 0b0001
private const val CATEGORIES = 0b0010 private const val CATEGORIES = 0b0010
private const val TRACK = 0b0100 private const val TRACK = 0b0100
private const val CUSTOM_COVER = 0b1000 private const val CUSTOM_MANGA_INFO = 0b1000
private val coverCache: CoverCache by injectLazy() private val coverCache: CoverCache by injectLazy()
private val db: DatabaseHelper = Injekt.get() private val db: DatabaseHelper by injectLazy()
private val customMangaManager: CustomMangaManager by injectLazy()
val titles get() = arrayOf(R.string.chapters, R.string.categories, R.string.tracking, R.string.custom_cover) val titles get() = arrayOf(R.string.chapters, R.string.categories, R.string.tracking, R.string.custom_manga_info)
val flags get() = arrayOf(CHAPTERS, CATEGORIES, TRACK, CUSTOM_COVER) val flags get() = arrayOf(CHAPTERS, CATEGORIES, TRACK, CUSTOM_MANGA_INFO)
fun hasChapters(value: Int): Boolean { fun hasChapters(value: Int): Boolean {
return value and CHAPTERS != 0 return value and CHAPTERS != 0
@ -35,8 +36,8 @@ object MigrationFlags {
return value and TRACK != 0 return value and TRACK != 0
} }
fun hasCustomCover(value: Int): Boolean { fun hasCustomMangaInfo(value: Int): Boolean {
return value and CUSTOM_COVER != 0 return value and CUSTOM_MANGA_INFO != 0
} }
fun getEnabledFlags(value: Int): List<Boolean> { fun getEnabledFlags(value: Int): List<Boolean> {
@ -63,8 +64,8 @@ object MigrationFlags {
flags.add(TRACK) flags.add(TRACK)
} }
if (coverCache.getCustomCoverFile(manga).exists()) { if (coverCache.getCustomCoverFile(manga).exists() || customMangaManager.getManga(manga) != null) {
flags.add(CUSTOM_COVER) flags.add(CUSTOM_MANGA_INFO)
} }
} }
return flags.toTypedArray() return flags.toTypedArray()
@ -75,7 +76,7 @@ object MigrationFlags {
CHAPTERS -> R.string.chapters CHAPTERS -> R.string.chapters
CATEGORIES -> R.string.categories CATEGORIES -> R.string.categories
TRACK -> R.string.tracking TRACK -> R.string.tracking
CUSTOM_COVER -> R.string.custom_cover CUSTOM_MANGA_INFO -> R.string.custom_manga_info
else -> 0 else -> 0
} }
} }

View file

@ -7,6 +7,8 @@ import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.models.History import eu.kanade.tachiyomi.data.database.models.History
import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.database.models.MangaCategory import eu.kanade.tachiyomi.data.database.models.MangaCategory
import eu.kanade.tachiyomi.data.library.CustomMangaManager
import eu.kanade.tachiyomi.data.library.CustomMangaManager.Companion.toJson
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.track.EnhancedTrackService import eu.kanade.tachiyomi.data.track.EnhancedTrackService
import eu.kanade.tachiyomi.data.track.TrackManager import eu.kanade.tachiyomi.data.track.TrackManager
@ -31,6 +33,7 @@ class MigrationProcessAdapter(
val preferences: PreferencesHelper by injectLazy() val preferences: PreferencesHelper by injectLazy()
val sourceManager: SourceManager by injectLazy() val sourceManager: SourceManager by injectLazy()
val coverCache: CoverCache by injectLazy() val coverCache: CoverCache by injectLazy()
val customMangaManager: CustomMangaManager by injectLazy()
var showOutline = preferences.outlineOnCovers().get() var showOutline = preferences.outlineOnCovers().get()
val menuItemListener: MigrationProcessInterface = controller val menuItemListener: MigrationProcessInterface = controller
@ -132,7 +135,7 @@ class MigrationProcessAdapter(
) { ) {
if (controller.config == null) return if (controller.config == null) return
val flags = preferences.migrateFlags().get() val flags = preferences.migrateFlags().get()
migrateMangaInternal(flags, db, enhancedServices, coverCache, prevSource, source, prevManga, manga, replace) migrateMangaInternal(flags, db, enhancedServices, coverCache, customMangaManager, prevSource, source, prevManga, manga, replace)
} }
companion object { companion object {
@ -142,6 +145,7 @@ class MigrationProcessAdapter(
db: DatabaseHelper, db: DatabaseHelper,
enhancedServices: List<EnhancedTrackService>, enhancedServices: List<EnhancedTrackService>,
coverCache: CoverCache, coverCache: CoverCache,
customMangaManager: CustomMangaManager,
prevSource: Source?, prevSource: Source?,
source: Source, source: Source,
prevManga: Manga, prevManga: Manga,
@ -210,9 +214,15 @@ class MigrationProcessAdapter(
if (replace) manga.date_added = prevManga.date_added if (replace) manga.date_added = prevManga.date_added
else manga.date_added = Date().time else manga.date_added = Date().time
// Update custom cover // Update custom cover & info
if (MigrationFlags.hasCustomCover(flags) && coverCache.getCustomCoverFile(prevManga).exists()) { if (MigrationFlags.hasCustomMangaInfo(flags)) {
coverCache.setCustomCoverToCache(manga, coverCache.getCustomCoverFile(prevManga).inputStream()) if (coverCache.getCustomCoverFile(prevManga).exists()) {
coverCache.setCustomCoverToCache(manga, coverCache.getCustomCoverFile(prevManga).inputStream())
}
customMangaManager.getManga(prevManga)?.let { customManga ->
customManga.id = manga.id!!
customMangaManager.saveMangaInfo(customManga.toJson())
}
} }
db.updateMangaFavorite(manga).executeAsBlocking() db.updateMangaFavorite(manga).executeAsBlocking()

View file

@ -269,6 +269,7 @@ private fun showAddDuplicateDialog(
db, db,
enhancedServices, enhancedServices,
Injekt.get(), Injekt.get(),
Injekt.get(),
source, source,
sourceManager.getOrStub(newManga.source), sourceManager.getOrStub(newManga.source),
libraryManga, libraryManga,

View file

@ -564,7 +564,6 @@
<string name="error_saving_cover">Error saving cover</string> <string name="error_saving_cover">Error saving cover</string>
<string name="error_sharing_cover">Error sharing cover</string> <string name="error_sharing_cover">Error sharing cover</string>
<string name="custom_manga_info">Custom manga info</string> <string name="custom_manga_info">Custom manga info</string>
s<string name="custom_cover">Custom cover</string>
<string name="set_as_default">Set as default</string> <string name="set_as_default">Set as default</string>
<string name="filter_groups">Filter scanlator groups</string> <string name="filter_groups">Filter scanlator groups</string>
<plurals name="deleted_chapters"> <plurals name="deleted_chapters">