From cafce0ed5f2ac075017d876f4f2bd90937f34131 Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Wed, 2 Jun 2021 21:04:06 -0400 Subject: [PATCH] Old saved searches can load now, but now toast on click --- .../source/browse/BrowseSourceController.kt | 5 +++ .../source/browse/BrowseSourcePresenter.kt | 38 ++++++++++--------- .../ui/browse/source/index/IndexController.kt | 30 ++++++++++++--- .../ui/browse/source/index/IndexPresenter.kt | 12 ++++-- .../java/exh/savedsearches/EXHSavedSearch.kt | 2 +- app/src/main/res/values/strings_sy.xml | 1 + 6 files changed, 61 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt index 636c2456a..5686349cd 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt @@ -246,6 +246,11 @@ open class BrowseSourceController(bundle: Bundle) : return@cb } + if (search.filterList == null) { + activity?.toast(R.string.save_search_invalid) + return@cb + } + presenter.sourceFilters = FilterList(search.filterList) filterSheet?.setFilters(presenter.filterItems) val allDefault = presenter.sourceFilters == presenter.source.getFilterList() 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 d329c01f7..1d22b4503 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 @@ -49,11 +49,9 @@ import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.serialization.decodeFromString +import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json -import kotlinx.serialization.json.JsonObject -import kotlinx.serialization.json.buildJsonObject -import kotlinx.serialization.json.jsonArray -import kotlinx.serialization.json.put +import kotlinx.serialization.json.JsonArray import rx.Observable import rx.Subscription import rx.android.schedulers.AndroidSchedulers @@ -124,8 +122,6 @@ open class BrowseSourcePresenter( private val loggedServices by lazy { Injekt.get().services.filter { it.isLogged } } // SY --> - private var manga: Manga? = null - private val filterSerializer = FilterSerializer() // SY <-- @@ -142,8 +138,8 @@ open class BrowseSourcePresenter( // SY --> if (filters != null) { - val filters = Json.decodeFromString(filters) - filterSerializer.deserialize(sourceFilters, filters["filters"]!!.jsonArray) + val filters = Json.decodeFromString(filters) + filterSerializer.deserialize(sourceFilters, filters.filters) } val allDefault = sourceFilters == source.getFilterList() // SY <-- @@ -451,11 +447,15 @@ open class BrowseSourcePresenter( !it.startsWith("${source.id}:") } val newSerialized = searches.map { - "${source.id}:" + buildJsonObject { - put("name", it.name) - put("query", it.query) - put("filters", filterSerializer.serialize(it.filterList)) - }.toString() + "${source.id}:" + Json.encodeToString( + JsonSavedSearch( + it.name, + it.query, + if (it.filterList != null) { + filterSerializer.serialize(it.filterList) + } else JsonArray(emptyList()) + ) + ) } prefs.savedSearches().set((otherSerialized + newSerialized).toSet()) } @@ -463,10 +463,10 @@ open class BrowseSourcePresenter( fun loadSearches(): List { val loaded = prefs.savedSearches().get() return loaded.map { + val id = it.substringBefore(':').toLong() + if (id != source.id) return@map null + val content = Json.decodeFromString(it.substringAfter(':')) try { - val id = it.substringBefore(':').toLong() - if (id != source.id) return@map null - val content = Json.decodeFromString(it.substringAfter(':')) val originalFilters = source.getFilterList() filterSerializer.deserialize(originalFilters, content.filters) EXHSavedSearch( @@ -478,7 +478,11 @@ open class BrowseSourcePresenter( // Load failed Timber.e(t, "Failed to load saved search!") t.printStackTrace() - null + EXHSavedSearch( + content.name, + content.query, + null + ) } }.filterNotNull() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/index/IndexController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/index/IndexController.kt index 453428d43..c39ced5cb 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/index/IndexController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/index/IndexController.kt @@ -23,10 +23,13 @@ import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceController import eu.kanade.tachiyomi.ui.browse.source.browse.SourceFilterSheet import eu.kanade.tachiyomi.ui.browse.source.latest.LatestUpdatesController import eu.kanade.tachiyomi.ui.manga.MangaController +import eu.kanade.tachiyomi.util.system.toast +import exh.savedsearches.JsonSavedSearch import exh.util.nullIfBlank import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach -import kotlinx.serialization.json.buildJsonObject +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json import reactivecircus.flowbinding.android.view.clicks import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -194,8 +197,14 @@ open class IndexController : val allDefault = presenter.sourceFilters == presenter.source.getFilterList() filterSheet?.dismiss() if (!allDefault) { - val json = buildJsonObject { put("filters", filterSerializer.serialize(presenter.sourceFilters)) } - onBrowseClick(presenter.query.nullIfBlank(), json.toString()) + val json = Json.encodeToString( + JsonSavedSearch( + "", + "", + filterSerializer.serialize(presenter.sourceFilters) + ) + ) + onBrowseClick(presenter.query.nullIfBlank(), json) } }, onResetClicked = {}, @@ -217,14 +226,25 @@ open class IndexController : return@cb } + if (search.filterList == null) { + activity?.toast(R.string.save_search_invalid) + return@cb + } + presenter.sourceFilters = FilterList(search.filterList) filterSheet?.setFilters(presenter.filterItems) val allDefault = presenter.sourceFilters == presenter.source.getFilterList() filterSheet?.dismiss() if (!allDefault) { - val json = buildJsonObject { put("filters", filterSerializer.serialize(presenter.sourceFilters)) } - onBrowseClick(presenter.query.nullIfBlank(), json.toString()) + val json = Json.encodeToString( + JsonSavedSearch( + "", + "", + filterSerializer.serialize(presenter.sourceFilters) + ) + ) + onBrowseClick(presenter.query.nullIfBlank(), json) } }, onSavedSearchDeleteClicked = { _, _ -> } 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 28c9ad583..094b7c8ec 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 @@ -215,10 +215,10 @@ open class IndexPresenter( fun loadSearches(): List { val loaded = preferences.savedSearches().get() return loaded.mapNotNull { + val id = it.substringBefore(':').toLong() + if (id != source.id) return@mapNotNull null + val content = Json.decodeFromString(it.substringAfter(':')) try { - val id = it.substringBefore(':').toLong() - if (id != source.id) return@mapNotNull null - val content = Json.decodeFromString(it.substringAfter(':')) val originalFilters = source.getFilterList() filterSerializer.deserialize(originalFilters, content.filters) EXHSavedSearch( @@ -230,7 +230,11 @@ open class IndexPresenter( // Load failed Timber.e(t, "Failed to load saved search!") t.printStackTrace() - null + EXHSavedSearch( + content.name, + content.query, + null + ) } } } diff --git a/app/src/main/java/exh/savedsearches/EXHSavedSearch.kt b/app/src/main/java/exh/savedsearches/EXHSavedSearch.kt index 7c1e7564e..fe3151478 100644 --- a/app/src/main/java/exh/savedsearches/EXHSavedSearch.kt +++ b/app/src/main/java/exh/savedsearches/EXHSavedSearch.kt @@ -5,5 +5,5 @@ import eu.kanade.tachiyomi.source.model.FilterList data class EXHSavedSearch( val name: String, val query: String, - val filterList: FilterList + val filterList: FilterList? ) diff --git a/app/src/main/res/values/strings_sy.xml b/app/src/main/res/values/strings_sy.xml index 73e269b05..7f0dd98ea 100644 --- a/app/src/main/res/values/strings_sy.xml +++ b/app/src/main/res/values/strings_sy.xml @@ -348,6 +348,7 @@ An error occurred while deleting the search. Delete saved search query? Are you sure you wish to delete your saved search query: \'%1$s\'? + Saved search invalid, filters have changed No source categories available