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() return initBackupAndFetchAuth()
.then { credential -> .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}") } .also { Log.i(TAG, "UploadFormResult: ${it::class.simpleName}") }
} }
.then { form -> .then { form ->

View File

@@ -158,7 +158,7 @@ class BackupMessagesJob private constructor(
this.syncTime = currentTime this.syncTime = currentTime
this.dataFile = tempBackupFile.path 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 -> { is NetworkResult.Success -> {
Log.i(TAG, "Successfully generated a new upload spec.") Log.i(TAG, "Successfully generated a new upload spec.")
@@ -173,7 +173,15 @@ class BackupMessagesJob private constructor(
} }
is NetworkResult.StatusCodeError -> { is NetworkResult.StatusCodeError -> {
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()) Log.i(TAG, "Status code failure", result.getCause())
}
}
return Result.retry(defaultBackoff()) return Result.retry(defaultBackoff())
} }

View File

@@ -143,13 +143,14 @@ class ArchiveApi(
* - 200: Success * - 200: Success
* - 400: Bad args, or made on an authenticated channel * - 400: Bad args, or made on an authenticated channel
* - 403: Insufficient permissions * - 403: Insufficient permissions
* - 413: The backup is too large
* - 429: Rate-limited * - 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) return getCredentialPresentation(aci, archiveServiceAccess)
.map { it.toArchiveCredentialPresentation().toHeaders() } .map { it.toArchiveCredentialPresentation().toHeaders() }
.then { headers -> .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) NetworkResult.fromWebSocketRequest(unauthWebSocket, request, AttachmentUploadForm::class)
} }
} }