refactor accountUpdateSource from Call to coroutine

This commit is contained in:
Conny Duck 2024-04-21 09:46:29 +02:00
parent 333beec17d
commit b86f54762f
No known key found for this signature in database
2 changed files with 17 additions and 26 deletions

View File

@ -21,7 +21,9 @@ import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import androidx.annotation.DrawableRes import androidx.annotation.DrawableRes
import androidx.lifecycle.lifecycleScope
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import at.connyduck.calladapter.networkresult.fold
import com.google.android.material.color.MaterialColors import com.google.android.material.color.MaterialColors
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import com.keylesspalace.tusky.BaseActivity import com.keylesspalace.tusky.BaseActivity
@ -58,9 +60,7 @@ import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial
import com.mikepenz.iconics.utils.colorInt import com.mikepenz.iconics.utils.colorInt
import com.mikepenz.iconics.utils.sizeRes import com.mikepenz.iconics.utils.sizeRes
import javax.inject.Inject import javax.inject.Inject
import retrofit2.Call import kotlinx.coroutines.launch
import retrofit2.Callback
import retrofit2.Response
class AccountPreferencesFragment : PreferenceFragmentCompat(), Injectable { class AccountPreferencesFragment : PreferenceFragmentCompat(), Injectable {
@Inject @Inject
@ -293,29 +293,21 @@ class AccountPreferencesFragment : PreferenceFragmentCompat(), Injectable {
) { ) {
// TODO these could also be "datastore backed" preferences (a ServerPreferenceDataStore); follow-up of issue #3204 // TODO these could also be "datastore backed" preferences (a ServerPreferenceDataStore); follow-up of issue #3204
mastodonApi.accountUpdateSource(visibility, sensitive, language) viewLifecycleOwner.lifecycleScope.launch {
.enqueue(object : Callback<Account> { mastodonApi.accountUpdateSource(visibility, sensitive, language)
override fun onResponse(call: Call<Account>, response: Response<Account>) { .fold({ account: Account ->
val account = response.body() accountManager.activeAccount?.let {
if (response.isSuccessful && account != null) { it.defaultPostPrivacy = account.source?.privacy
accountManager.activeAccount?.let { ?: Status.Visibility.PUBLIC
it.defaultPostPrivacy = account.source?.privacy it.defaultMediaSensitivity = account.source?.sensitive ?: false
?: Status.Visibility.PUBLIC it.defaultPostLanguage = language.orEmpty()
it.defaultMediaSensitivity = account.source?.sensitive ?: false accountManager.saveAccount(it)
it.defaultPostLanguage = language.orEmpty()
accountManager.saveAccount(it)
}
} else {
Log.e("AccountPreferences", "failed updating settings on server")
showErrorSnackbar(visibility, sensitive)
} }
} }, { t ->
override fun onFailure(call: Call<Account>, t: Throwable) {
Log.e("AccountPreferences", "failed updating settings on server", t) Log.e("AccountPreferences", "failed updating settings on server", t)
showErrorSnackbar(visibility, sensitive) showErrorSnackbar(visibility, sensitive)
} })
}) }
} }
private fun showErrorSnackbar(visibility: String?, sensitive: Boolean?) { private fun showErrorSnackbar(visibility: String?, sensitive: Boolean?) {

View File

@ -49,7 +49,6 @@ import com.keylesspalace.tusky.entity.Translation
import com.keylesspalace.tusky.entity.TrendingTag import com.keylesspalace.tusky.entity.TrendingTag
import okhttp3.MultipartBody import okhttp3.MultipartBody
import okhttp3.RequestBody import okhttp3.RequestBody
import retrofit2.Call
import retrofit2.Response import retrofit2.Response
import retrofit2.http.Body import retrofit2.http.Body
import retrofit2.http.DELETE import retrofit2.http.DELETE
@ -284,11 +283,11 @@ interface MastodonApi {
@FormUrlEncoded @FormUrlEncoded
@PATCH("api/v1/accounts/update_credentials") @PATCH("api/v1/accounts/update_credentials")
fun accountUpdateSource( suspend fun accountUpdateSource(
@Field("source[privacy]") privacy: String?, @Field("source[privacy]") privacy: String?,
@Field("source[sensitive]") sensitive: Boolean?, @Field("source[sensitive]") sensitive: Boolean?,
@Field("source[language]") language: String? @Field("source[language]") language: String?
): Call<Account> ): NetworkResult<Account>
@Multipart @Multipart
@PATCH("api/v1/accounts/update_credentials") @PATCH("api/v1/accounts/update_credentials")