Skip to content

Commit

Permalink
Merge pull request #2070 from Infomaniak/format-code
Browse files Browse the repository at this point in the history
refactor: Format `fetchMessagesHeavyData()` code
  • Loading branch information
KevinBoulongne authored Oct 7, 2024
2 parents 5cd2d33 + dc1af5d commit 905ccb9
Showing 1 changed file with 32 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -284,39 +284,6 @@ class ThreadController @Inject constructor(
onUpdate(getThread(threadUid, realm))
}

private fun fetchSwissTransferContainer(uuid: String): SwissTransferContainer? {
return runCatching {
val apiResponse = ApiRepository.getSwissTransferContainer(uuid)

if (apiResponse.isSuccess()) return@runCatching apiResponse.data

SentryLog.i(TAG, "Could not fetch SwissTransfer container")
return@runCatching null
}.getOrNull()
}

private fun getApiCallsResults(
messages: List<Message>,
okHttpClient: OkHttpClient?,
failedMessagesUids: MutableList<String>
): List<ApiCallsResults> {
return messages.mapNotNull { localMessage ->
return@mapNotNull runCatching {
val apiResponse = ApiRepository.getMessage(localMessage.resource, okHttpClient)
val swissTransferUuid = apiResponse.data?.swissTransferUuid
var swissTransferContainer: SwissTransferContainer? = null
if (apiResponse.isSuccess() && swissTransferUuid != null) {
swissTransferContainer = fetchSwissTransferContainer(swissTransferUuid)
}
return@runCatching ApiCallsResults(localMessage, apiResponse, swissTransferContainer)
}.getOrElse {
// This `getOrElse` is here only to catch `OutOfMemoryError` when trying to deserialize very big Body.
failedMessagesUids.add(localMessage.uid)
return@getOrElse null
}
}
}

/**
* Asynchronously fetches heavy data for a list of messages within a given mailbox and realm.
*
Expand Down Expand Up @@ -389,6 +356,38 @@ class ThreadController @Inject constructor(
return deletedMessagesUids to failedMessagesUids
}

private fun getApiCallsResults(
messages: List<Message>,
okHttpClient: OkHttpClient?,
failedMessagesUids: MutableList<String>,
): List<ApiCallsResults> {
return messages.mapNotNull { localMessage ->
return@mapNotNull runCatching {
val apiResponse = ApiRepository.getMessage(localMessage.resource, okHttpClient)
val swissTransferUuid = apiResponse.data?.swissTransferUuid
var swissTransferContainer: SwissTransferContainer? = null
if (apiResponse.isSuccess() && swissTransferUuid != null) {
swissTransferContainer = fetchSwissTransferContainer(swissTransferUuid)
}
return@runCatching ApiCallsResults(localMessage, apiResponse, swissTransferContainer)
}.getOrElse {
// This `getOrElse` is here only to catch `OutOfMemoryError` when trying to deserialize very big Body.
failedMessagesUids.add(localMessage.uid)
return@getOrElse null
}
}
}

private fun fetchSwissTransferContainer(uuid: String): SwissTransferContainer? = runCatching {
val apiResponse = ApiRepository.getSwissTransferContainer(uuid)
return@runCatching if (apiResponse.isSuccess()) {
apiResponse.data
} else {
SentryLog.i(TAG, "Could not fetch SwissTransfer container")
null
}
}.getOrNull()

// If we've already got this Message's Draft beforehand, we need to save
// its `draftLocalUuid`, otherwise we'll lose the link between them.
private fun Message.getDraftLocalUuid(realm: TypedRealm): String? {
Expand Down

0 comments on commit 905ccb9

Please sign in to comment.