Old saved searches can load now, but now toast on click

This commit is contained in:
Jobobby04 2021-06-02 21:04:06 -04:00
parent 3adde57db9
commit cafce0ed5f
6 changed files with 61 additions and 27 deletions

View File

@ -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()

View File

@ -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<TrackManager>().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<JsonObject>(filters)
filterSerializer.deserialize(sourceFilters, filters["filters"]!!.jsonArray)
val filters = Json.decodeFromString<JsonSavedSearch>(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<EXHSavedSearch> {
val loaded = prefs.savedSearches().get()
return loaded.map {
val id = it.substringBefore(':').toLong()
if (id != source.id) return@map null
val content = Json.decodeFromString<JsonSavedSearch>(it.substringAfter(':'))
try {
val id = it.substringBefore(':').toLong()
if (id != source.id) return@map null
val content = Json.decodeFromString<JsonSavedSearch>(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()
}

View File

@ -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 = { _, _ -> }

View File

@ -215,10 +215,10 @@ open class IndexPresenter(
fun loadSearches(): List<EXHSavedSearch> {
val loaded = preferences.savedSearches().get()
return loaded.mapNotNull {
val id = it.substringBefore(':').toLong()
if (id != source.id) return@mapNotNull null
val content = Json.decodeFromString<JsonSavedSearch>(it.substringAfter(':'))
try {
val id = it.substringBefore(':').toLong()
if (id != source.id) return@mapNotNull null
val content = Json.decodeFromString<JsonSavedSearch>(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
)
}
}
}

View File

@ -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?
)

View File

@ -348,6 +348,7 @@
<string name="save_search_failed_to_delete_message">An error occurred while deleting the search.</string>
<string name="save_search_delete">Delete saved search query?</string>
<string name="save_search_delete_message">Are you sure you wish to delete your saved search query: \'%1$s\'?</string>
<string name="save_search_invalid">Saved search invalid, filters have changed</string>
<!-- Source Categories -->
<string name="no_source_categories">No source categories available</string>