mirror of
https://github.com/null2264/yokai.git
synced 2025-06-21 10:44:42 +00:00
Change migration of custom covers to also include custom manga info
This commit is contained in:
parent
93e56c194a
commit
cea5761b29
5 changed files with 41 additions and 31 deletions
|
@ -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,
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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">
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue