Old saved searches can load now, but now toast on click
This commit is contained in:
parent
3adde57db9
commit
cafce0ed5f
@ -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()
|
||||
|
@ -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()
|
||||
}
|
||||
|
@ -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 = { _, _ -> }
|
||||
|
@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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?
|
||||
)
|
||||
|
@ -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>
|
||||
|
Loading…
x
Reference in New Issue
Block a user