mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-02-25 04:06:14 +00:00
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:
committed by
Cody Henthorne
parent
8e92ddbd53
commit
15aa941436
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user