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
|
return@cb
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (search.filterList == null) {
|
||||||
|
activity?.toast(R.string.save_search_invalid)
|
||||||
|
return@cb
|
||||||
|
}
|
||||||
|
|
||||||
presenter.sourceFilters = FilterList(search.filterList)
|
presenter.sourceFilters = FilterList(search.filterList)
|
||||||
filterSheet?.setFilters(presenter.filterItems)
|
filterSheet?.setFilters(presenter.filterItems)
|
||||||
val allDefault = presenter.sourceFilters == presenter.source.getFilterList()
|
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.map
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
import kotlinx.serialization.decodeFromString
|
import kotlinx.serialization.decodeFromString
|
||||||
|
import kotlinx.serialization.encodeToString
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
import kotlinx.serialization.json.JsonObject
|
import kotlinx.serialization.json.JsonArray
|
||||||
import kotlinx.serialization.json.buildJsonObject
|
|
||||||
import kotlinx.serialization.json.jsonArray
|
|
||||||
import kotlinx.serialization.json.put
|
|
||||||
import rx.Observable
|
import rx.Observable
|
||||||
import rx.Subscription
|
import rx.Subscription
|
||||||
import rx.android.schedulers.AndroidSchedulers
|
import rx.android.schedulers.AndroidSchedulers
|
||||||
@ -124,8 +122,6 @@ open class BrowseSourcePresenter(
|
|||||||
private val loggedServices by lazy { Injekt.get<TrackManager>().services.filter { it.isLogged } }
|
private val loggedServices by lazy { Injekt.get<TrackManager>().services.filter { it.isLogged } }
|
||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
private var manga: Manga? = null
|
|
||||||
|
|
||||||
private val filterSerializer = FilterSerializer()
|
private val filterSerializer = FilterSerializer()
|
||||||
// SY <--
|
// SY <--
|
||||||
|
|
||||||
@ -142,8 +138,8 @@ open class BrowseSourcePresenter(
|
|||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
if (filters != null) {
|
if (filters != null) {
|
||||||
val filters = Json.decodeFromString<JsonObject>(filters)
|
val filters = Json.decodeFromString<JsonSavedSearch>(filters)
|
||||||
filterSerializer.deserialize(sourceFilters, filters["filters"]!!.jsonArray)
|
filterSerializer.deserialize(sourceFilters, filters.filters)
|
||||||
}
|
}
|
||||||
val allDefault = sourceFilters == source.getFilterList()
|
val allDefault = sourceFilters == source.getFilterList()
|
||||||
// SY <--
|
// SY <--
|
||||||
@ -451,11 +447,15 @@ open class BrowseSourcePresenter(
|
|||||||
!it.startsWith("${source.id}:")
|
!it.startsWith("${source.id}:")
|
||||||
}
|
}
|
||||||
val newSerialized = searches.map {
|
val newSerialized = searches.map {
|
||||||
"${source.id}:" + buildJsonObject {
|
"${source.id}:" + Json.encodeToString(
|
||||||
put("name", it.name)
|
JsonSavedSearch(
|
||||||
put("query", it.query)
|
it.name,
|
||||||
put("filters", filterSerializer.serialize(it.filterList))
|
it.query,
|
||||||
}.toString()
|
if (it.filterList != null) {
|
||||||
|
filterSerializer.serialize(it.filterList)
|
||||||
|
} else JsonArray(emptyList())
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
prefs.savedSearches().set((otherSerialized + newSerialized).toSet())
|
prefs.savedSearches().set((otherSerialized + newSerialized).toSet())
|
||||||
}
|
}
|
||||||
@ -463,10 +463,10 @@ open class BrowseSourcePresenter(
|
|||||||
fun loadSearches(): List<EXHSavedSearch> {
|
fun loadSearches(): List<EXHSavedSearch> {
|
||||||
val loaded = prefs.savedSearches().get()
|
val loaded = prefs.savedSearches().get()
|
||||||
return loaded.map {
|
return loaded.map {
|
||||||
|
val id = it.substringBefore(':').toLong()
|
||||||
|
if (id != source.id) return@map null
|
||||||
|
val content = Json.decodeFromString<JsonSavedSearch>(it.substringAfter(':'))
|
||||||
try {
|
try {
|
||||||
val id = it.substringBefore(':').toLong()
|
|
||||||
if (id != source.id) return@map null
|
|
||||||
val content = Json.decodeFromString<JsonSavedSearch>(it.substringAfter(':'))
|
|
||||||
val originalFilters = source.getFilterList()
|
val originalFilters = source.getFilterList()
|
||||||
filterSerializer.deserialize(originalFilters, content.filters)
|
filterSerializer.deserialize(originalFilters, content.filters)
|
||||||
EXHSavedSearch(
|
EXHSavedSearch(
|
||||||
@ -478,7 +478,11 @@ open class BrowseSourcePresenter(
|
|||||||
// Load failed
|
// Load failed
|
||||||
Timber.e(t, "Failed to load saved search!")
|
Timber.e(t, "Failed to load saved search!")
|
||||||
t.printStackTrace()
|
t.printStackTrace()
|
||||||
null
|
EXHSavedSearch(
|
||||||
|
content.name,
|
||||||
|
content.query,
|
||||||
|
null
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}.filterNotNull()
|
}.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.browse.SourceFilterSheet
|
||||||
import eu.kanade.tachiyomi.ui.browse.source.latest.LatestUpdatesController
|
import eu.kanade.tachiyomi.ui.browse.source.latest.LatestUpdatesController
|
||||||
import eu.kanade.tachiyomi.ui.manga.MangaController
|
import eu.kanade.tachiyomi.ui.manga.MangaController
|
||||||
|
import eu.kanade.tachiyomi.util.system.toast
|
||||||
|
import exh.savedsearches.JsonSavedSearch
|
||||||
import exh.util.nullIfBlank
|
import exh.util.nullIfBlank
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.onEach
|
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 reactivecircus.flowbinding.android.view.clicks
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
@ -194,8 +197,14 @@ open class IndexController :
|
|||||||
val allDefault = presenter.sourceFilters == presenter.source.getFilterList()
|
val allDefault = presenter.sourceFilters == presenter.source.getFilterList()
|
||||||
filterSheet?.dismiss()
|
filterSheet?.dismiss()
|
||||||
if (!allDefault) {
|
if (!allDefault) {
|
||||||
val json = buildJsonObject { put("filters", filterSerializer.serialize(presenter.sourceFilters)) }
|
val json = Json.encodeToString(
|
||||||
onBrowseClick(presenter.query.nullIfBlank(), json.toString())
|
JsonSavedSearch(
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
filterSerializer.serialize(presenter.sourceFilters)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
onBrowseClick(presenter.query.nullIfBlank(), json)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onResetClicked = {},
|
onResetClicked = {},
|
||||||
@ -217,14 +226,25 @@ open class IndexController :
|
|||||||
return@cb
|
return@cb
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (search.filterList == null) {
|
||||||
|
activity?.toast(R.string.save_search_invalid)
|
||||||
|
return@cb
|
||||||
|
}
|
||||||
|
|
||||||
presenter.sourceFilters = FilterList(search.filterList)
|
presenter.sourceFilters = FilterList(search.filterList)
|
||||||
filterSheet?.setFilters(presenter.filterItems)
|
filterSheet?.setFilters(presenter.filterItems)
|
||||||
val allDefault = presenter.sourceFilters == presenter.source.getFilterList()
|
val allDefault = presenter.sourceFilters == presenter.source.getFilterList()
|
||||||
filterSheet?.dismiss()
|
filterSheet?.dismiss()
|
||||||
|
|
||||||
if (!allDefault) {
|
if (!allDefault) {
|
||||||
val json = buildJsonObject { put("filters", filterSerializer.serialize(presenter.sourceFilters)) }
|
val json = Json.encodeToString(
|
||||||
onBrowseClick(presenter.query.nullIfBlank(), json.toString())
|
JsonSavedSearch(
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
filterSerializer.serialize(presenter.sourceFilters)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
onBrowseClick(presenter.query.nullIfBlank(), json)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onSavedSearchDeleteClicked = { _, _ -> }
|
onSavedSearchDeleteClicked = { _, _ -> }
|
||||||
|
@ -215,10 +215,10 @@ open class IndexPresenter(
|
|||||||
fun loadSearches(): List<EXHSavedSearch> {
|
fun loadSearches(): List<EXHSavedSearch> {
|
||||||
val loaded = preferences.savedSearches().get()
|
val loaded = preferences.savedSearches().get()
|
||||||
return loaded.mapNotNull {
|
return loaded.mapNotNull {
|
||||||
|
val id = it.substringBefore(':').toLong()
|
||||||
|
if (id != source.id) return@mapNotNull null
|
||||||
|
val content = Json.decodeFromString<JsonSavedSearch>(it.substringAfter(':'))
|
||||||
try {
|
try {
|
||||||
val id = it.substringBefore(':').toLong()
|
|
||||||
if (id != source.id) return@mapNotNull null
|
|
||||||
val content = Json.decodeFromString<JsonSavedSearch>(it.substringAfter(':'))
|
|
||||||
val originalFilters = source.getFilterList()
|
val originalFilters = source.getFilterList()
|
||||||
filterSerializer.deserialize(originalFilters, content.filters)
|
filterSerializer.deserialize(originalFilters, content.filters)
|
||||||
EXHSavedSearch(
|
EXHSavedSearch(
|
||||||
@ -230,7 +230,11 @@ open class IndexPresenter(
|
|||||||
// Load failed
|
// Load failed
|
||||||
Timber.e(t, "Failed to load saved search!")
|
Timber.e(t, "Failed to load saved search!")
|
||||||
t.printStackTrace()
|
t.printStackTrace()
|
||||||
null
|
EXHSavedSearch(
|
||||||
|
content.name,
|
||||||
|
content.query,
|
||||||
|
null
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,5 +5,5 @@ import eu.kanade.tachiyomi.source.model.FilterList
|
|||||||
data class EXHSavedSearch(
|
data class EXHSavedSearch(
|
||||||
val name: String,
|
val name: String,
|
||||||
val query: 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_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">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_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 -->
|
<!-- Source Categories -->
|
||||||
<string name="no_source_categories">No source categories available</string>
|
<string name="no_source_categories">No source categories available</string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user