Skip to content
Snippets Groups Projects
Commit 043891de authored by Pierre Nicolas's avatar Pierre Nicolas :joy:
Browse files

conversation: properly manage legacy conversation

GitLab: #1427
Change-Id: I16f85b6845a25712ad7e5cf85f9a5dfd6a7e23ff
parent f83768dd
No related branches found
No related tags found
No related merge requests found
......@@ -400,7 +400,7 @@ class ContactDetailsActivity : AppCompatActivity(), TabLayout.OnTabSelectedListe
startActivity(Intent(Intent.ACTION_VIEW,
ConversationPath.toUri(accountId, conversationUri),
applicationContext,
ConversationActivity::class.java
HomeActivity::class.java
))
}
......
......@@ -64,16 +64,30 @@ class ConversationPresenter @Inject constructor(
view?.setSettings(settings.enableLinkPreviews)
mConversationUri = conversationUri
mCompositeDisposable.add(conversationFacade.getAccountSubject(accountId)
.flatMap { a: Account ->
conversationFacade.loadConversationHistory(a, conversationUri)
.observeOn(uiScheduler)
.doOnSuccess { c: Conversation -> setConversation(a, c) }
.flatMapObservable { account: Account ->
val conversation = account.getByUri(conversationUri)!!
conversation.mode.flatMap { conversationMode: Conversation.Mode ->
if (conversationMode === Conversation.Mode.Legacy)
conversation.contact!!.conversationUri.switchMapSingle { uri ->
conversationFacade.startConversation(accountId, uri)
}
else
Observable.just(conversation)
}.switchMapSingle { conversation ->
conversationFacade.loadConversationHistory(conversation)
.map { Pair(account, it) }
}
}
.observeOn(uiScheduler)
.subscribe({}) { e: Throwable ->
Log.e(TAG, "Error loading conversation", e)
.subscribe(
{ (account, conversation) ->
setConversation(account, conversation)
}
) { error: Throwable ->
view?.goToHome()
})
Log.e(TAG, "Error loading conversation", error)
}
)
}
override fun unbindView() {
......@@ -152,11 +166,6 @@ class ConversationPresenter @Inject constructor(
.doOnNext { convViewModel -> initContact(account, convViewModel, this.view!!) }
}
.subscribe())
disposable.add(c.mode
.switchMap { mode: Conversation.Mode ->
if (mode === Conversation.Mode.Legacy) c.contact!!.conversationUri else Observable.empty() }
.observeOn(uiScheduler)
.subscribe { uri: Uri -> init(uri, account.accountId) })
disposable.add(Observable.combineLatest(hardwareService.connectivityState, accountService.getObservableAccount(account))
{ isConnected: Boolean, a: Account -> isConnected || a.isRegistered }
.observeOn(uiScheduler)
......
......@@ -231,9 +231,7 @@ class ConversationFacade(
* @param conversationUri the conversation
* @return a conversation single
*/
fun loadConversationHistory(account: Account, conversationUri: Uri): Single<Conversation> {
val conversation = account.getByUri(conversationUri)
?: return Single.error(RuntimeException("Can't get conversation $conversationUri"))
fun loadConversationHistory(conversation: Conversation): Single<Conversation> {
synchronized(conversation) {
if ((!conversation.isSwarm && conversation.id == null) || (conversation.isSwarm && conversation.mode.blockingFirst() == Conversation.Mode.Request)) {
return Single.just(conversation)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment