fun uploadObjects()

in jetbrains-core/src/software/aws/toolkits/jetbrains/services/s3/objectActions/UploadObjectAction.kt [49:85]


fun uploadObjects(project: Project, treeTable: S3TreeTable, files: List<Path>, parentNode: S3TreeNode) {
    if (files.isEmpty()) {
        return
    }
    val scope = projectCoroutineScope(project, "UploadObjectAction")
    scope.launch {
        var changeMade = false
        try {
            files.forEach {
                if (it.isDirectory()) {
                    notifyError(
                        title = message("s3.upload.object.failed", it.fileName),
                        content = message("s3.upload.directory.impossible", it.fileName),
                        project = project
                    )
                } else {
                    try {
                        treeTable.bucket.upload(project, it, parentNode.directoryPath() + it.fileName)
                        changeMade = true
                    } catch (e: Exception) {
                        e.notifyError(message("s3.upload.object.failed", it.fileName), project)
                        throw e
                    }
                }
            }

            S3Telemetry.uploadObjects(project = project, result = Result.Succeeded, value = files.size.toDouble())
        } catch (e: Exception) {
            S3Telemetry.uploadObjects(project = project, result = Result.Failed, value = files.size.toDouble())
        } finally {
            if (changeMade) {
                treeTable.invalidateLevel(parentNode)
                treeTable.refresh()
            }
        }
    }
}