made the room and capabilities logic synchronous in a Coroutine

Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
This commit is contained in:
rapterjet2004 2025-03-11 10:53:00 -05:00
parent 0176a3e4f9
commit 7a04a9c9c6
No known key found for this signature in database
GPG Key ID: A6A69CFF84968EA1
2 changed files with 39 additions and 47 deletions

View File

@ -92,7 +92,10 @@ import io.reactivex.Observer
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
import java.util.Calendar
@ -126,7 +129,6 @@ class ConversationInfoActivity :
private lateinit var conversationUser: User
private var hasAvatarSpacing: Boolean = false
private lateinit var credentials: String
private var roomDisposable: Disposable? = null
private var participantsDisposable: Disposable? = null
private var databaseStorageModule: DatabaseStorageModule? = null
@ -193,7 +195,30 @@ class ConversationInfoActivity :
binding.addParticipantsAction.setOnClickListener { addParticipants() }
binding.listBansButton.setOnClickListener { listBans() }
viewModel.getRoom(conversationUser, conversationToken)
CoroutineScope(Dispatchers.IO).launch {
val model = viewModel.getRoomBlocking(conversationUser, conversationToken)
spreedCapabilities = viewModel.getCapabilitiesBlocking(conversationUser, conversationToken, model)
conversation = model
withContext(Dispatchers.Main) {
if (ConversationUtils.isNoteToSelfConversation(conversation)) {
binding.shareConversationButton.visibility = GONE
}
val canGeneratePrettyURL = CapabilitiesUtil.canGeneratePrettyURL(conversationUser)
binding.shareConversationButton.setOnClickListener {
ShareUtils.shareConversationLink(
this@ConversationInfoActivity,
conversationUser.baseUrl,
conversation?.token,
conversation?.name,
canGeneratePrettyURL
)
}
handleConversation()
}
}
themeTextViews()
themeSwitchPreferences()
@ -205,20 +230,6 @@ class ConversationInfoActivity :
}
private fun initObservers() {
initViewStateObserver()
viewModel.getCapabilitiesViewState.observe(this) { state ->
when (state) {
is ConversationInfoViewModel.GetCapabilitiesSuccessState -> {
spreedCapabilities = state.spreedCapabilities
handleConversation()
}
else -> {}
}
}
viewModel.getBanActorState.observe(this) { state ->
when (state) {
is ConversationInfoViewModel.BanActorSuccessState -> {
@ -264,36 +275,6 @@ class ConversationInfoActivity :
}
}
private fun initViewStateObserver() {
viewModel.viewState.observe(this) { state ->
when (state) {
is ConversationInfoViewModel.GetRoomSuccessState -> {
conversation = state.conversationModel
viewModel.getCapabilities(conversationUser, conversationToken, conversation!!)
if (ConversationUtils.isNoteToSelfConversation(conversation)) {
binding.shareConversationButton.visibility = GONE
}
val canGeneratePrettyURL = CapabilitiesUtil.canGeneratePrettyURL(conversationUser)
binding.shareConversationButton.setOnClickListener {
ShareUtils.shareConversationLink(
this,
conversationUser.baseUrl,
conversation?.token,
conversation?.name,
canGeneratePrettyURL
)
}
}
is ConversationInfoViewModel.GetRoomErrorState -> {
Snackbar.make(binding.root, R.string.nc_common_error_sorry, Snackbar.LENGTH_LONG).show()
}
else -> {}
}
}
}
private fun setupActionBar() {
setSupportActionBar(binding.conversationInfoToolbar)
binding.conversationInfoToolbar.setNavigationOnClickListener {
@ -763,7 +744,7 @@ class ConversationInfoActivity :
}
}
@Suppress("LongMethod")
@Suppress("LongMethod", "CyclomaticComplexMethod")
private fun handleConversation() {
val conversationCopy = conversation!!

View File

@ -120,6 +120,9 @@ class ConversationInfoViewModel @Inject constructor(
?.subscribe(GetRoomObserver())
}
fun getRoomBlocking(user: User, token: String): ConversationModel =
chatNetworkDataSource.getRoom(user, token).blockingFirst()
fun getCapabilities(user: User, token: String, conversationModel: ConversationModel) {
_getCapabilitiesViewState.value = GetCapabilitiesStartState
@ -150,6 +153,14 @@ class ConversationInfoViewModel @Inject constructor(
}
}
fun getCapabilitiesBlocking(user: User, token: String, conversationModel: ConversationModel): SpreedCapability {
return if (conversationModel.remoteServer.isNullOrEmpty()) {
user.capabilities!!.spreedCapability!!
} else {
chatNetworkDataSource.getCapabilities(user, token).blockingFirst()
}
}
@Suppress("Detekt.TooGenericExceptionCaught")
fun listBans(user: User, token: String) {
val url = ApiUtils.getUrlForBans(user.baseUrl!!, token)