From b67db6a25ee4975a5bdc60258ad239f27bf98faa Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Tue, 13 Oct 2020 11:34:06 -0400 Subject: [PATCH] Manually deserialize saved searches, fix NHentai --- .../data/backup/full/FullBackupManager.kt | 4 ++-- .../data/backup/legacy/LegacyBackupManager.kt | 4 ++-- .../kanade/tachiyomi/source/online/all/NHentai.kt | 6 +++--- .../browse/source/browse/BrowseSourcePresenter.kt | 2 +- .../ui/browse/source/index/IndexPresenter.kt | 2 +- app/src/main/java/exh/debug/DebugFunctions.kt | 8 ++++---- .../java/exh/savedsearches/JsonSavedSearch.kt | 15 ++++++++++++++- 7 files changed, 27 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/full/FullBackupManager.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/full/FullBackupManager.kt index eb11be660..240796c04 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/full/FullBackupManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/full/FullBackupManager.kt @@ -164,7 +164,7 @@ class FullBackupManager(val context: Context) : AbstractBackupManager() { private fun backupSavedSearches(): List { return preferences.eh_savedSearches().get().map { val sourceId = it.substringBefore(':').toLong() - val content = Json.decodeFromString(it.substringAfter(':')) + val content = JsonSavedSearch.fromJsonObject(Json.decodeFromString(it.substringAfter(':'))) BackupSavedSearch( content.name, content.query, @@ -490,7 +490,7 @@ class FullBackupManager(val context: Context) : AbstractBackupManager() { internal fun restoreSavedSearches(backupSavedSearches: List) { val currentSavedSearches = preferences.eh_savedSearches().get().map { val sourceId = it.substringBefore(':').toLong() - val content = Json.decodeFromString(it.substringAfter(':')) + val content = JsonSavedSearch.fromJsonObject(Json.decodeFromString(it.substringAfter(':'))) BackupSavedSearch( content.name, content.query, diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/legacy/LegacyBackupManager.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/legacy/LegacyBackupManager.kt index 8cc1a87ae..be49b45e4 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/legacy/LegacyBackupManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/legacy/LegacyBackupManager.kt @@ -549,7 +549,7 @@ class LegacyBackupManager(val context: Context, version: Int = CURRENT_VERSION) val newSavedSearches = backupSavedSearches.mapNotNull { try { val id = it.substringBefore(':').toLong() - val content = Json.decodeFromString(it.substringAfter(':')) + val content = JsonSavedSearch.fromJsonObject(Json.decodeFromString(it.substringAfter(':'))) id to content } catch (t: RuntimeException) { // Load failed @@ -564,7 +564,7 @@ class LegacyBackupManager(val context: Context, version: Int = CURRENT_VERSION) newSavedSearches += preferences.eh_savedSearches().get().mapNotNull { try { val id = it.substringBefore(':').toLong() - val content = Json.decodeFromString(it.substringAfter(':')) + val content = JsonSavedSearch.fromJsonObject(Json.decodeFromString(it.substringAfter(':'))) id to content } catch (t: RuntimeException) { // Load failed diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/NHentai.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/NHentai.kt index 1f4bc5c97..59cd2a118 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/NHentai.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/NHentai.kt @@ -74,7 +74,7 @@ class NHentai(delegate: HttpSource, val context: Context) : } jsonResponse.images?.let { images -> - coverImageType = images.cover?.type + coverImageType = NHentaiSearchMetadata.typeToExtension(images.cover?.type) images.pages.mapNotNull { it.type }.let { @@ -127,8 +127,8 @@ class NHentai(delegate: HttpSource, val context: Context) : @Serializable data class JsonPage( @SerialName("t") val type: String? = null, - @SerialName("w") val width: String? = null, - @SerialName("h") val height: String? = null + @SerialName("w") val width: Long? = null, + @SerialName("h") val height: Long? = null ) @Serializable diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourcePresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourcePresenter.kt index 9184a92b3..414fdee1d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourcePresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourcePresenter.kt @@ -461,7 +461,7 @@ open class BrowseSourcePresenter( try { val id = it.substringBefore(':').toLong() if (id != source.id) return@map null - val content = Json.decodeFromString(it.substringAfter(':')) + val content = JsonSavedSearch.fromJsonObject(Json.decodeFromString(it.substringAfter(':'))) val originalFilters = source.getFilterList() filterSerializer.deserialize(originalFilters, content.filters) EXHSavedSearch( diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/index/IndexPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/index/IndexPresenter.kt index de922014f..81b485333 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/index/IndexPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/index/IndexPresenter.kt @@ -231,7 +231,7 @@ open class IndexPresenter( try { val id = it.substringBefore(':').toLong() if (id != source.id) return@map null - val content = Json.decodeFromString(it.substringAfter(':')) + val content = JsonSavedSearch.fromJsonObject(Json.decodeFromString(it.substringAfter(':'))) val originalFilters = source.getFilterList() filterSerializer.deserialize(originalFilters, content.filters) EXHSavedSearch( diff --git a/app/src/main/java/exh/debug/DebugFunctions.kt b/app/src/main/java/exh/debug/DebugFunctions.kt index c200b7de8..be790b246 100644 --- a/app/src/main/java/exh/debug/DebugFunctions.kt +++ b/app/src/main/java/exh/debug/DebugFunctions.kt @@ -239,7 +239,7 @@ object DebugFunctions { try { val id = it.substringBefore(':').toLong() if (id != source.id) return@mapNotNull null - Json.decodeFromString(it.substringAfter(':')) + JsonSavedSearch.fromJsonObject(Json.decodeFromString(it.substringAfter(':'))) } catch (t: RuntimeException) { // Load failed XLog.e("Failed to load saved search!", t) @@ -251,7 +251,7 @@ object DebugFunctions { try { val id = it.substringBefore(':').toLong() if (id != newSource.id) return@mapNotNull null - Json.decodeFromString(it.substringAfter(':')) + JsonSavedSearch.fromJsonObject(Json.decodeFromString(it.substringAfter(':'))) } catch (t: RuntimeException) { // Load failed XLog.e("Failed to load saved search!", t) @@ -278,7 +278,7 @@ object DebugFunctions { try { val id = it.substringBefore(':').toLong() if (id != source.id) return@mapNotNull null - Json.decodeFromString(it.substringAfter(':')) + JsonSavedSearch.fromJsonObject(Json.decodeFromString(it.substringAfter(':'))) } catch (t: RuntimeException) { // Load failed XLog.e("Failed to load saved search!", t) @@ -290,7 +290,7 @@ object DebugFunctions { try { val id = it.substringBefore(':').toLong() if (id != newSource.id) return@mapNotNull null - Json.decodeFromString(it.substringAfter(':')) + JsonSavedSearch.fromJsonObject(Json.decodeFromString(it.substringAfter(':'))) } catch (t: RuntimeException) { // Load failed XLog.e("Failed to load saved search!", t) diff --git a/app/src/main/java/exh/savedsearches/JsonSavedSearch.kt b/app/src/main/java/exh/savedsearches/JsonSavedSearch.kt index 560551cc4..5f5a5bb0e 100644 --- a/app/src/main/java/exh/savedsearches/JsonSavedSearch.kt +++ b/app/src/main/java/exh/savedsearches/JsonSavedSearch.kt @@ -2,10 +2,23 @@ package exh.savedsearches import kotlinx.serialization.Serializable import kotlinx.serialization.json.JsonArray +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.jsonArray +import kotlinx.serialization.json.jsonPrimitive @Serializable data class JsonSavedSearch( val name: String, val query: String, val filters: JsonArray -) +) { + companion object { + fun fromJsonObject(json: JsonObject): JsonSavedSearch { + return JsonSavedSearch( + json["name"]!!.jsonPrimitive.content, + json["query"]!!.jsonPrimitive.content, + json["filters"]!!.jsonArray, + ) + } + } +}