Limit delete archived media requests to 1000 items at a time.

Fixes an error that occurs when attempting to delete all archived media caused by exceeding the API's 1000 item limit.
This commit is contained in:
Jeffrey Starke
2025-05-21 16:34:21 -04:00
committed by Cody Henthorne
parent 8e92ddbd53
commit 15aa941436

View File

@@ -1282,29 +1282,39 @@ object BackupRepository {
}
fun debugDeleteAllArchivedMedia(): NetworkResult<Unit> {
val itemLimit = 1000
return debugGetArchivedMediaState()
.then { archivedMedia ->
val mediaToDelete = archivedMedia
val mediaChunksToDelete = archivedMedia
.map {
DeleteArchivedMediaRequest.ArchivedMediaObject(
cdn = it.cdn,
mediaId = it.mediaId
)
}
.chunked(itemLimit)
if (mediaToDelete.isEmpty()) {
if (mediaChunksToDelete.isEmpty()) {
Log.i(TAG, "No media to delete, quick success")
NetworkResult.Success(Unit)
} else {
getArchiveServiceAccessPair()
.then { credential ->
SignalNetwork.archive.deleteArchivedMedia(
return@then NetworkResult.Success(Unit)
}
getArchiveServiceAccessPair()
.then processChunks@{ credential ->
mediaChunksToDelete.forEachIndexed { index, chunk ->
val result = SignalNetwork.archive.deleteArchivedMedia(
aci = SignalStore.account.requireAci(),
archiveServiceAccess = credential.mediaBackupAccess,
mediaToDelete = mediaToDelete
mediaToDelete = chunk
)
if (result !is NetworkResult.Success) {
Log.w(TAG, "Error occurred while deleting archived media chunk #$index: $result")
return@processChunks result
}
}
}
NetworkResult.Success(Unit)
}
}
.map {
SignalDatabase.attachments.clearAllArchiveData()