Add API to control online search

This commit is contained in:
MM20
2024-01-28 21:35:36 +01:00
parent d7340c485b
commit 426473e397
20 changed files with 44 additions and 36 deletions
@@ -19,7 +19,7 @@ abstract class SearchPluginProvider<T>(
* Search for items matching the given query
* @param query The query to search for
*/
abstract suspend fun search(query: String): List<T>
abstract suspend fun search(query: String, allowNetwork: Boolean): List<T>
abstract suspend fun get(id: String): T?
override fun onCreate(): Boolean {
@@ -48,7 +48,10 @@ abstract class SearchPluginProvider<T>(
uri.pathSegments.size == 1 && uri.pathSegments.first() == SearchPluginContract.Paths.Search -> {
val query =
uri.getQueryParameter(SearchPluginContract.Paths.QueryParam) ?: return null
val results = search(query, cancellationSignal)
val allowNetwork =
uri.getQueryParameter(SearchPluginContract.Paths.AllowNetworkParam)?.toBoolean()
?: false
val results = search(query, allowNetwork, cancellationSignal)
val cursor = createCursor(results.size)
for (result in results) {
writeToCursor(cursor, result)
@@ -95,10 +98,11 @@ abstract class SearchPluginProvider<T>(
private fun search(
query: String,
allowNetwork: Boolean,
cancellationSignal: CancellationSignal?
): List<T> {
return launchWithCancellationSignal(cancellationSignal) {
search(query)
search(query, allowNetwork)
}
}