making the file upload file creation all happen on the IO dispatcher

This commit is contained in:
Adam Brown 2021-12-20 11:52:01 +00:00
parent 55c0f1fcb3
commit 18b38fe21e
1 changed files with 12 additions and 7 deletions

View File

@ -109,18 +109,23 @@ internal class FileUploader @Inject constructor(
filename: String?, filename: String?,
mimeType: String?, mimeType: String?,
progressListener: ProgressRequestBody.Listener? = null): ContentUploadResponse { progressListener: ProgressRequestBody.Listener? = null): ContentUploadResponse {
val inputStream = withContext(Dispatchers.IO) { val workingFile = context.copyUriToTempFile(uri)
context.contentResolver.openInputStream(uri)
} ?: throw FileNotFoundException()
val workingFile = temporaryFileCreator.create()
workingFile.outputStream().use {
inputStream.copyTo(it)
}
return uploadFile(workingFile, filename, mimeType, progressListener).also { return uploadFile(workingFile, filename, mimeType, progressListener).also {
tryOrNull { workingFile.delete() } tryOrNull { workingFile.delete() }
} }
} }
private suspend fun Context.copyUriToTempFile(uri: Uri): File {
return withContext(Dispatchers.IO) {
val inputStream = contentResolver.openInputStream(uri) ?: throw FileNotFoundException()
val workingFile = temporaryFileCreator.create()
workingFile.outputStream().use {
inputStream.copyTo(it)
}
workingFile
}
}
private suspend fun upload(uploadBody: RequestBody, private suspend fun upload(uploadBody: RequestBody,
filename: String?, filename: String?,
progressListener: ProgressRequestBody.Listener?): ContentUploadResponse { progressListener: ProgressRequestBody.Listener?): ContentUploadResponse {