Skip to content
Snippets Groups Projects
Commit 41cff788 authored by Kamal Bramwell's avatar Kamal Bramwell
Browse files

FE-957: Requests stuck verifying

parent 83f5f2a3
Branches
Tags
3 merge requests!84Version 2.92 build 629,!77v2.9 b627,!74FE-957: Requests stuck verifying
Showing
with 42 additions and 11 deletions
......@@ -14,6 +14,7 @@ enum class RequestStatus(val value: Int) {
SENDING(10),
DELETING(11),
HIDDEN(12),
RECEIVED(13),
SEARCH(99);
companion object {
......
......@@ -21,6 +21,9 @@ interface RequestsDao {
@Query("SELECT * FROM Requests WHERE requestId IN (SELECT userId FROM Contacts)")
fun getContactRequests(): Flow<List<RequestData>>
@Query("SELECT * FROM Requests WHERE requestId IN (SELECT userId FROM Contacts)")
fun getContactRequestsOnce(): List<RequestData>
@Query("SELECT * FROM Requests WHERE requestId IN (SELECT groupId FROM Groups)")
fun getGroupInvitations(): Flow<List<RequestData>>
......
......@@ -829,6 +829,8 @@ class ClientRepository @Inject constructor(
}
Timber.v("[USER LOOKUP] Total execution time: ${Utils.getCurrentTimeStamp() - executionTime}")
}
} else {
callback.invoke(null, "Failed to establish secure connection to network")
}
}
......
......@@ -8,6 +8,7 @@ import kotlinx.coroutines.flow.Flow
interface LocalRequestsDataSource {
val unreadCount: Flow<Int>
suspend fun getContactRequestsOnce(): List<RequestData>
suspend fun getContactRequests(): Flow<List<RequestData>>
suspend fun getGroupInvitations(): Flow<List<RequestData>>
suspend fun getRequest(requestId: ByteArray): RequestData?
......
......@@ -52,6 +52,9 @@ class RequestsDatabase @Inject constructor(
}
}
override suspend fun getContactRequestsOnce(): List<RequestData> =
requestsDao.getContactRequestsOnce()
override suspend fun getContactRequests(): Flow<List<RequestData>> =
requestsDao.getContactRequests()
.stateIn(scope, SharingStarted.Eagerly, listOf())
......
......@@ -10,6 +10,8 @@ import io.xxlabs.messenger.requests.bindings.VerificationResult
import io.xxlabs.messenger.requests.data.LocalRequestsDataSource
import io.xxlabs.messenger.requests.data.RequestDataSource
import io.xxlabs.messenger.requests.model.ContactRequest
import io.xxlabs.messenger.support.appContext
import io.xxlabs.messenger.support.extensions.toast
import io.xxlabs.messenger.support.util.value
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
......@@ -121,13 +123,19 @@ class ContactRequestsRepository @Inject constructor(
override fun failUnverifiedRequests() {
scope.launch {
getRequests().cancellable().collect { requests ->
requests.filter {
localDataSource.getContactRequestsOnce().let { requestDataList ->
requestDataList.mapNotNull { requestData ->
val contactData = daoRepository
.getContactByUserId(requestData.requestId)
.value()
contactData?.let {
ContactRequestData(it, requestData.unread)
}
}.filter {
it.requestStatus == VERIFYING
}.forEach {
update(it, VERIFICATION_FAIL)
}
this.coroutineContext.job.cancel()
}
}
}
......
......@@ -311,7 +311,7 @@ class RequestsViewModel @Inject constructor(
private fun RequestItem.isIncoming(): Boolean {
return when (request.requestStatus) {
VERIFYING, VERIFIED, VERIFICATION_FAIL -> true
RECEIVED, VERIFYING, VERIFIED, VERIFICATION_FAIL -> true
else -> false
}
}
......@@ -345,6 +345,7 @@ class RequestsViewModel @Inject constructor(
override fun onItemClicked(request: RequestItem) {
when (request.request.requestStatus) {
RECEIVED -> retryVerification(request)
VERIFYING -> showVerifyingInfo()
VERIFIED, HIDDEN -> showDetails(request)
ACCEPTED -> {
......@@ -378,6 +379,7 @@ class RequestsViewModel @Inject constructor(
else actionQueue.add(request.id)
when (request.request.requestStatus) {
RECEIVED -> retryVerification(request).also { actionQueue.remove(request.id) }
VERIFYING -> showVerifyingInfo().also { actionQueue.remove(request.id) }
SEND_FAIL, SENT -> resendRequest(request)
VERIFICATION_FAIL -> retryVerification(request)
......
......@@ -27,7 +27,6 @@ import io.xxlabs.messenger.repository.client.ClientRepository
import io.xxlabs.messenger.requests.data.contact.ContactRequestData
import io.xxlabs.messenger.requests.data.contact.ContactRequestsRepository
import io.xxlabs.messenger.requests.data.contact.RequestMigrator
import io.xxlabs.messenger.requests.data.group.InvitationMigrator
import io.xxlabs.messenger.support.extensions.combineWith
import io.xxlabs.messenger.support.extensions.toBase64String
import io.xxlabs.messenger.support.isMockVersion
......@@ -77,6 +76,11 @@ class ContactsViewModel @Inject constructor(
init {
Timber.v("isAuthCallbackRegistered: ${isAuthCallbackRegistered()}")
migrateOldRequests()
// The app has presumably had a fresh launch.
// Fail requests that haven't verified yet, so they may be retried manually by user.
failVerifyingRequests()
if (BuildConfig.DEBUG) listContacts()
}
......@@ -117,6 +121,10 @@ class ContactsViewModel @Inject constructor(
}
}
private fun failVerifyingRequests() {
requestsDataSource.failUnverifiedRequests()
}
private fun onRequestReceived(contact: ByteArray) {
val id = getBindingsContactId(contact)
Timber.v("Request received from: ${id.toBase64String()}")
......@@ -304,7 +312,7 @@ class ContactsViewModel @Inject constructor(
marshaled = marshalledData,
email = contactEmail,
phone = contactPhone,
status = VERIFYING.value
status = RECEIVED.value
)
subscriptions.add(
......@@ -382,6 +390,7 @@ class ContactsViewModel @Inject constructor(
fun verifyNewRequest(
contact: ContactData
) {
updateContactStatus(contact.userId, VERIFYING) {
Timber.v("[RECEIVED REQUEST] Verifying Request ${contact.userId.toBase64String()}...")
if (contact.hasFacts()) { //UD Search
verifyContactViaSearch(contact)
......@@ -389,6 +398,7 @@ class ContactsViewModel @Inject constructor(
verifyContactViaLookup(contact)
}
}
}
private fun verifyContactViaSearch(contact: ContactData) {
Timber.v("[RECEIVED REQUEST] User have facts - UD Search")
......
......@@ -289,6 +289,7 @@ class NetworkViewModel @Inject constructor(
Timber.v("[NETWORK VIEWMODEL] Network follower is NOT RUNNING")
}
.doOnError { err ->
requestsDataSource.failUnverifiedRequests()
Timber.v("[NETWORK VIEWMODEL] Network follower ERROR - could not stop properly: ${err.localizedMessage}")
}
.subscribe()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment