Include backup size when fetching archive upload form.

This commit is contained in:
Greyson Parrelli
2025-07-21 13:02:42 -04:00
parent b95a3a2554
commit eca75ca3fb
3 changed files with 15 additions and 6 deletions

View File

@@ -1333,10 +1333,10 @@ object BackupRepository {
}
}
fun getResumableMessagesBackupUploadSpec(): NetworkResult<ResumableMessagesBackupUploadSpec> {
fun getResumableMessagesBackupUploadSpec(backupFileSize: Long): NetworkResult<ResumableMessagesBackupUploadSpec> {
return initBackupAndFetchAuth()
.then { credential ->
SignalNetwork.archive.getMessageBackupUploadForm(SignalStore.account.requireAci(), credential.messageBackupAccess)
SignalNetwork.archive.getMessageBackupUploadForm(SignalStore.account.requireAci(), credential.messageBackupAccess, backupFileSize)
.also { Log.i(TAG, "UploadFormResult: ${it::class.simpleName}") }
}
.then { form ->

View File

@@ -158,7 +158,7 @@ class BackupMessagesJob private constructor(
this.syncTime = currentTime
this.dataFile = tempBackupFile.path
val backupSpec: ResumableMessagesBackupUploadSpec = resumableMessagesBackupUploadSpec ?: when (val result = BackupRepository.getResumableMessagesBackupUploadSpec()) {
val backupSpec: ResumableMessagesBackupUploadSpec = resumableMessagesBackupUploadSpec ?: when (val result = BackupRepository.getResumableMessagesBackupUploadSpec(tempBackupFile.length())) {
is NetworkResult.Success -> {
Log.i(TAG, "Successfully generated a new upload spec.")
@@ -173,7 +173,15 @@ class BackupMessagesJob private constructor(
}
is NetworkResult.StatusCodeError -> {
Log.i(TAG, "Status code failure", result.getCause())
when (result.code) {
413 -> {
Log.i(TAG, "Backup file is too large! Size: ${tempBackupFile.length()} bytes", result.getCause())
// TODO [backup] Need to show the user an error
}
else -> {
Log.i(TAG, "Status code failure", result.getCause())
}
}
return Result.retry(defaultBackoff())
}

View File

@@ -143,13 +143,14 @@ class ArchiveApi(
* - 200: Success
* - 400: Bad args, or made on an authenticated channel
* - 403: Insufficient permissions
* - 413: The backup is too large
* - 429: Rate-limited
*/
fun getMessageBackupUploadForm(aci: ACI, archiveServiceAccess: ArchiveServiceAccess<MessageBackupKey>): NetworkResult<AttachmentUploadForm> {
fun getMessageBackupUploadForm(aci: ACI, archiveServiceAccess: ArchiveServiceAccess<MessageBackupKey>, backupFileSize: Long): NetworkResult<AttachmentUploadForm> {
return getCredentialPresentation(aci, archiveServiceAccess)
.map { it.toArchiveCredentialPresentation().toHeaders() }
.then { headers ->
val request = WebSocketRequestMessage.get("/v1/archives/upload/form", headers)
val request = WebSocketRequestMessage.get("/v1/archives/upload/form?uploadLength=$backupFileSize", headers)
NetworkResult.fromWebSocketRequest(unauthWebSocket, request, AttachmentUploadForm::class)
}
}