mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-02 00:17:41 +01:00
Retry canWrite() check when opening backup directory for writing.
Co-authored-by: Greyson Parrelli <greyson@signal.org>
This commit is contained in:
@@ -18,6 +18,8 @@ import org.signal.archive.local.ArchivedFilesReader
|
||||
import org.signal.core.models.backup.MediaName
|
||||
import org.signal.core.util.Stopwatch
|
||||
import org.signal.core.util.androidx.DocumentFileInfo
|
||||
import org.signal.core.util.androidx.DocumentFileUtil
|
||||
import org.signal.core.util.androidx.DocumentFileUtil.OperationResult
|
||||
import org.signal.core.util.androidx.DocumentFileUtil.delete
|
||||
import org.signal.core.util.androidx.DocumentFileUtil.hasFile
|
||||
import org.signal.core.util.androidx.DocumentFileUtil.inputStream
|
||||
@@ -59,9 +61,18 @@ class ArchiveFileSystem private constructor(private val context: Context, root:
|
||||
* Should likely only be called on API29+
|
||||
*/
|
||||
fun fromUri(context: Context, uri: Uri): ArchiveFileSystem? {
|
||||
val root = DocumentFile.fromTreeUri(context, uri)
|
||||
val root = DocumentFile.fromTreeUri(context, uri) ?: return null
|
||||
|
||||
if (root == null || !root.canWrite()) {
|
||||
val result = DocumentFileUtil.retryDocumentFileOperation<Unit> { attempt, maxAttempts ->
|
||||
Log.d(TAG, "canWrite() check attempt ${attempt + 1}/$maxAttempts")
|
||||
if (root.canWrite()) {
|
||||
OperationResult.Success(true)
|
||||
} else {
|
||||
OperationResult.Retry
|
||||
}
|
||||
}
|
||||
|
||||
if (!result.isSuccess()) {
|
||||
return null
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user