11package org.wordpress.android.ui.reader.subscription
22
33import kotlinx.coroutines.CoroutineDispatcher
4+ import kotlinx.coroutines.flow.MutableSharedFlow
5+ import kotlinx.coroutines.flow.first
46import kotlinx.coroutines.withContext
57import org.greenrobot.eventbus.Subscribe
68import org.greenrobot.eventbus.ThreadMode
@@ -11,23 +13,18 @@ import org.wordpress.android.fluxc.store.AccountStore
1113import org.wordpress.android.fluxc.store.AccountStore.AddOrDeleteSubscriptionPayload
1214import org.wordpress.android.fluxc.store.AccountStore.AddOrDeleteSubscriptionPayload.SubscriptionAction
1315import org.wordpress.android.fluxc.store.AccountStore.OnSubscriptionUpdated
14- import org.wordpress.android.fluxc.store.AccountStore.UpdateSubscriptionPayload
15- import org.wordpress.android.fluxc.store.AccountStore.UpdateSubscriptionPayload.SubscriptionFrequency
1616import org.wordpress.android.modules.BG_THREAD
1717import org.wordpress.android.util.NetworkUtilsWrapper
1818import javax.inject.Inject
1919import javax.inject.Named
20- import kotlin.coroutines.Continuation
21- import kotlin.coroutines.resume
22- import kotlin.coroutines.suspendCoroutine
2320
2421class ReaderBlogSubscriptionUseCase @Inject constructor(
2522 private val dispatcher : Dispatcher ,
2623 private val accountStore : AccountStore ,
2724 private val networkUtilsWrapper : NetworkUtilsWrapper ,
2825 @Named(BG_THREAD ) private val bgDispatcher : CoroutineDispatcher
2926) {
30- private var updateContinuation : Continuation <UpdateResult >? = null
27+ private val updateResultFlow = MutableSharedFlow <UpdateResult >(extraBufferCapacity = 1 )
3128
3229 init {
3330 dispatcher.register(this )
@@ -45,43 +42,30 @@ class ReaderBlogSubscriptionUseCase @Inject constructor(
4542 if (! networkUtilsWrapper.isNetworkAvailable()) {
4643 return UpdateResult .NoNetwork
4744 }
48- return suspendCoroutine { continuation ->
49- updateContinuation = continuation
50- val action = if (enable) SubscriptionAction .NEW else SubscriptionAction .DELETE
51- val payload = AddOrDeleteSubscriptionPayload (blogId.toString(), action)
52- dispatcher.dispatch(AccountActionBuilder .newUpdateSubscriptionNotificationPostAction(payload))
53- }
45+ val action = if (enable) SubscriptionAction .NEW else SubscriptionAction .DELETE
46+ val payload = AddOrDeleteSubscriptionPayload (blogId.toString(), action)
47+ dispatcher.dispatch(AccountActionBuilder .newUpdateSubscriptionNotificationPostAction(payload))
48+ return updateResultFlow.first()
5449 }
5550
5651 suspend fun updateEmailPosts (blogId : Long , enable : Boolean ): UpdateResult {
5752 if (! networkUtilsWrapper.isNetworkAvailable()) {
5853 return UpdateResult .NoNetwork
5954 }
60- return suspendCoroutine { continuation ->
61- updateContinuation = continuation
62- val action = if (enable) SubscriptionAction .NEW else SubscriptionAction .DELETE
63- val payload = AddOrDeleteSubscriptionPayload (blogId.toString(), action)
64- dispatcher.dispatch(AccountActionBuilder .newUpdateSubscriptionEmailPostAction(payload))
65- }
55+ val action = if (enable) SubscriptionAction .NEW else SubscriptionAction .DELETE
56+ val payload = AddOrDeleteSubscriptionPayload (blogId.toString(), action)
57+ dispatcher.dispatch(AccountActionBuilder .newUpdateSubscriptionEmailPostAction(payload))
58+ return updateResultFlow.first()
6659 }
6760
68- suspend fun updateEmailPostsFrequency (blogId : Long , frequency : SubscriptionFrequency ): UpdateResult =
69- suspendCoroutine { continuation ->
70- updateContinuation = continuation
71- val payload = UpdateSubscriptionPayload (blogId.toString(), frequency)
72- dispatcher.dispatch(AccountActionBuilder .newUpdateSubscriptionEmailPostFrequencyAction(payload))
73- }
74-
7561 suspend fun updateEmailComments (blogId : Long , enable : Boolean ): UpdateResult {
7662 if (! networkUtilsWrapper.isNetworkAvailable()) {
7763 return UpdateResult .NoNetwork
7864 }
79- return suspendCoroutine { continuation ->
80- updateContinuation = continuation
81- val action = if (enable) SubscriptionAction .NEW else SubscriptionAction .DELETE
82- val payload = AddOrDeleteSubscriptionPayload (blogId.toString(), action)
83- dispatcher.dispatch(AccountActionBuilder .newUpdateSubscriptionEmailCommentAction(payload))
84- }
65+ val action = if (enable) SubscriptionAction .NEW else SubscriptionAction .DELETE
66+ val payload = AddOrDeleteSubscriptionPayload (blogId.toString(), action)
67+ dispatcher.dispatch(AccountActionBuilder .newUpdateSubscriptionEmailCommentAction(payload))
68+ return updateResultFlow.first()
8569 }
8670
8771 fun refreshSubscriptions () {
@@ -96,8 +80,7 @@ class ReaderBlogSubscriptionUseCase @Inject constructor(
9680 } else {
9781 UpdateResult .Success
9882 }
99- updateContinuation?.resume(result)
100- updateContinuation = null
83+ updateResultFlow.tryEmit(result)
10184
10285 // Refresh subscriptions after successful update
10386 if (! event.isError) {
0 commit comments