From c1adc26dab5bed035a4879b5ee8ebbba4349d255 Mon Sep 17 00:00:00 2001 From: Conny Duck Date: Mon, 1 Apr 2024 20:32:20 +0200 Subject: [PATCH] put back sync network methods / avoid runBlocking --- .../components/compose/ComposeViewModel.kt | 41 ++++++++----------- .../followedtags/FollowedTagsViewModel.kt | 25 +++++------ .../tusky/network/MastodonApi.kt | 16 ++++++++ 3 files changed, 45 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeViewModel.kt b/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeViewModel.kt index 99224825d..3d5c5dd33 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeViewModel.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeViewModel.kt @@ -53,7 +53,6 @@ import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.shareIn import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch -import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext class ComposeViewModel @Inject constructor( @@ -431,28 +430,24 @@ class ComposeViewModel @Inject constructor( fun searchAutocompleteSuggestions(token: String): List { return when (token[0]) { - '@' -> runBlocking { - api.searchAccounts(query = token.substring(1), limit = 10) - .fold({ accounts -> - accounts.map { AutocompleteResult.AccountResult(it) } - }, { e -> - Log.e(TAG, "Autocomplete search for $token failed.", e) - emptyList() - }) - } - '#' -> runBlocking { - api.search( - query = token, - type = SearchType.Hashtag.apiParameter, - limit = 10 - ) - .fold({ searchResult -> - searchResult.hashtags.map { AutocompleteResult.HashtagResult(it.name) } - }, { e -> - Log.e(TAG, "Autocomplete search for $token failed.", e) - emptyList() - }) - } + '@' -> api.searchAccountsSync(query = token.substring(1), limit = 10) + .fold({ accounts -> + accounts.map { AutocompleteResult.AccountResult(it) } + }, { e -> + Log.e(TAG, "Autocomplete search for $token failed.", e) + emptyList() + }) + '#' -> api.searchSync( + query = token, + type = SearchType.Hashtag.apiParameter, + limit = 10 + ) + .fold({ searchResult -> + searchResult.hashtags.map { AutocompleteResult.HashtagResult(it.name) } + }, { e -> + Log.e(TAG, "Autocomplete search for $token failed.", e) + emptyList() + }) ':' -> { val emojiList = emoji.replayCache.firstOrNull() ?: return emptyList() val incomplete = token.substring(1) diff --git a/app/src/main/java/com/keylesspalace/tusky/components/followedtags/FollowedTagsViewModel.kt b/app/src/main/java/com/keylesspalace/tusky/components/followedtags/FollowedTagsViewModel.kt index f3376c13b..63170b59d 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/followedtags/FollowedTagsViewModel.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/followedtags/FollowedTagsViewModel.kt @@ -14,7 +14,6 @@ import com.keylesspalace.tusky.di.Injectable import com.keylesspalace.tusky.entity.HashTag import com.keylesspalace.tusky.network.MastodonApi import javax.inject.Inject -import kotlinx.coroutines.runBlocking class FollowedTagsViewModel @Inject constructor( private val api: MastodonApi @@ -39,19 +38,17 @@ class FollowedTagsViewModel @Inject constructor( fun searchAutocompleteSuggestions( token: String ): List { - return runBlocking { - api.search(query = token, type = SearchType.Hashtag.apiParameter, limit = 10) - .fold({ searchResult -> - searchResult.hashtags.map { - ComposeAutoCompleteAdapter.AutocompleteResult.HashtagResult( - it.name - ) - } - }, { e -> - Log.e(TAG, "Autocomplete search for $token failed.", e) - emptyList() - }) - } + return api.searchSync(query = token, type = SearchType.Hashtag.apiParameter, limit = 10) + .fold({ searchResult -> + searchResult.hashtags.map { + ComposeAutoCompleteAdapter.AutocompleteResult.HashtagResult( + it.name + ) + } + }, { e -> + Log.e(TAG, "Autocomplete search for $token failed.", e) + emptyList() + }) } companion object { diff --git a/app/src/main/java/com/keylesspalace/tusky/network/MastodonApi.kt b/app/src/main/java/com/keylesspalace/tusky/network/MastodonApi.kt index 2c462a58a..9b4b65cc0 100644 --- a/app/src/main/java/com/keylesspalace/tusky/network/MastodonApi.kt +++ b/app/src/main/java/com/keylesspalace/tusky/network/MastodonApi.kt @@ -314,6 +314,12 @@ interface MastodonApi { @Query("following") following: Boolean? = null ): NetworkResult> + @GET("api/v1/accounts/search") + fun searchAccountsSync( + @Query("q") query: String, + @Query("limit") limit: Int? = null + ): NetworkResult> + @GET("api/v1/accounts/{id}") suspend fun account(@Path("id") accountId: String): NetworkResult @@ -643,6 +649,16 @@ interface MastodonApi { @Query("following") following: Boolean? = null ): NetworkResult + @GET("api/v2/search") + fun searchSync( + @Query("q") query: String?, + @Query("type") type: String? = null, + @Query("resolve") resolve: Boolean? = null, + @Query("limit") limit: Int? = null, + @Query("offset") offset: Int? = null, + @Query("following") following: Boolean? = null + ): NetworkResult + @FormUrlEncoded @POST("api/v1/accounts/{id}/note") suspend fun updateAccountNote(