mirror of
https://github.com/accelforce/Yuito
synced 2025-02-14 02:20:45 +01:00
Implement status() without rxjava (#2999)
* Implement status() without rxjava * Use lambda param named `throwable` * Update DraftsActivity.kt
This commit is contained in:
parent
0f11e5c062
commit
0d962c7cc1
@ -25,8 +25,7 @@ import androidx.activity.viewModels
|
|||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.recyclerview.widget.DividerItemDecoration
|
import androidx.recyclerview.widget.DividerItemDecoration
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import autodispose2.androidx.lifecycle.AndroidLifecycleScopeProvider.from
|
import at.connyduck.calladapter.networkresult.fold
|
||||||
import autodispose2.autoDispose
|
|
||||||
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||||
import com.google.android.material.snackbar.Snackbar
|
import com.google.android.material.snackbar.Snackbar
|
||||||
import com.keylesspalace.tusky.BaseActivity
|
import com.keylesspalace.tusky.BaseActivity
|
||||||
@ -37,7 +36,6 @@ import com.keylesspalace.tusky.db.DraftEntity
|
|||||||
import com.keylesspalace.tusky.di.ViewModelFactory
|
import com.keylesspalace.tusky.di.ViewModelFactory
|
||||||
import com.keylesspalace.tusky.util.parseAsMastodonHtml
|
import com.keylesspalace.tusky.util.parseAsMastodonHtml
|
||||||
import com.keylesspalace.tusky.util.visible
|
import com.keylesspalace.tusky.util.visible
|
||||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
|
||||||
import kotlinx.coroutines.flow.collectLatest
|
import kotlinx.coroutines.flow.collectLatest
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import retrofit2.HttpException
|
import retrofit2.HttpException
|
||||||
@ -88,13 +86,17 @@ class DraftsActivity : BaseActivity(), DraftActionListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onOpenDraft(draft: DraftEntity) {
|
override fun onOpenDraft(draft: DraftEntity) {
|
||||||
|
if (draft.inReplyToId == null) {
|
||||||
|
openDraftWithoutReply(draft)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if (draft.inReplyToId != null) {
|
val context = this as Context
|
||||||
|
|
||||||
|
lifecycleScope.launch {
|
||||||
bottomSheet.state = BottomSheetBehavior.STATE_COLLAPSED
|
bottomSheet.state = BottomSheetBehavior.STATE_COLLAPSED
|
||||||
viewModel.getStatus(draft.inReplyToId)
|
viewModel.getStatus(draft.inReplyToId)
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.fold(
|
||||||
.autoDispose(from(this))
|
|
||||||
.subscribe(
|
|
||||||
{ status ->
|
{ status ->
|
||||||
val composeOptions = ComposeActivity.ComposeOptions(
|
val composeOptions = ComposeActivity.ComposeOptions(
|
||||||
draftId = draft.id,
|
draftId = draft.id,
|
||||||
@ -113,10 +115,9 @@ class DraftsActivity : BaseActivity(), DraftActionListener {
|
|||||||
|
|
||||||
bottomSheet.state = BottomSheetBehavior.STATE_HIDDEN
|
bottomSheet.state = BottomSheetBehavior.STATE_HIDDEN
|
||||||
|
|
||||||
startActivity(ComposeActivity.startIntent(this, composeOptions))
|
startActivity(ComposeActivity.startIntent(context, composeOptions))
|
||||||
},
|
},
|
||||||
{ throwable ->
|
{ throwable ->
|
||||||
|
|
||||||
bottomSheet.state = BottomSheetBehavior.STATE_HIDDEN
|
bottomSheet.state = BottomSheetBehavior.STATE_HIDDEN
|
||||||
|
|
||||||
Log.w(TAG, "failed loading reply information", throwable)
|
Log.w(TAG, "failed loading reply information", throwable)
|
||||||
@ -124,7 +125,7 @@ class DraftsActivity : BaseActivity(), DraftActionListener {
|
|||||||
if (throwable is HttpException && throwable.code() == 404) {
|
if (throwable is HttpException && throwable.code() == 404) {
|
||||||
// the original status to which a reply was drafted has been deleted
|
// the original status to which a reply was drafted has been deleted
|
||||||
// let's open the ComposeActivity without reply information
|
// let's open the ComposeActivity without reply information
|
||||||
Toast.makeText(this, getString(R.string.drafts_post_reply_removed), Toast.LENGTH_LONG).show()
|
Toast.makeText(context, getString(R.string.drafts_post_reply_removed), Toast.LENGTH_LONG).show()
|
||||||
openDraftWithoutReply(draft)
|
openDraftWithoutReply(draft)
|
||||||
} else {
|
} else {
|
||||||
Snackbar.make(binding.root, getString(R.string.drafts_failed_loading_reply), Snackbar.LENGTH_SHORT)
|
Snackbar.make(binding.root, getString(R.string.drafts_failed_loading_reply), Snackbar.LENGTH_SHORT)
|
||||||
@ -132,8 +133,6 @@ class DraftsActivity : BaseActivity(), DraftActionListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
} else {
|
|
||||||
openDraftWithoutReply(draft)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,12 +20,12 @@ import androidx.lifecycle.viewModelScope
|
|||||||
import androidx.paging.Pager
|
import androidx.paging.Pager
|
||||||
import androidx.paging.PagingConfig
|
import androidx.paging.PagingConfig
|
||||||
import androidx.paging.cachedIn
|
import androidx.paging.cachedIn
|
||||||
|
import at.connyduck.calladapter.networkresult.NetworkResult
|
||||||
import com.keylesspalace.tusky.db.AccountManager
|
import com.keylesspalace.tusky.db.AccountManager
|
||||||
import com.keylesspalace.tusky.db.AppDatabase
|
import com.keylesspalace.tusky.db.AppDatabase
|
||||||
import com.keylesspalace.tusky.db.DraftEntity
|
import com.keylesspalace.tusky.db.DraftEntity
|
||||||
import com.keylesspalace.tusky.entity.Status
|
import com.keylesspalace.tusky.entity.Status
|
||||||
import com.keylesspalace.tusky.network.MastodonApi
|
import com.keylesspalace.tusky.network.MastodonApi
|
||||||
import io.reactivex.rxjava3.core.Single
|
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@ -60,7 +60,7 @@ class DraftsViewModel @Inject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getStatus(statusId: String): Single<Status> {
|
suspend fun getStatus(statusId: String): NetworkResult<Status> {
|
||||||
return api.status(statusId)
|
return api.status(statusId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,9 +165,9 @@ interface MastodonApi {
|
|||||||
): NetworkResult<Status>
|
): NetworkResult<Status>
|
||||||
|
|
||||||
@GET("api/v1/statuses/{id}")
|
@GET("api/v1/statuses/{id}")
|
||||||
fun status(
|
suspend fun status(
|
||||||
@Path("id") statusId: String
|
@Path("id") statusId: String
|
||||||
): Single<Status>
|
): NetworkResult<Status>
|
||||||
|
|
||||||
@GET("api/v1/statuses/{id}")
|
@GET("api/v1/statuses/{id}")
|
||||||
suspend fun statusAsync(
|
suspend fun statusAsync(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user