#328 fix rename vault in S3 leads to empty vault

This commit is contained in:
Julian Raufelder 2021-07-07 15:48:35 +02:00
parent d5436c9b47
commit 543a03212f
No known key found for this signature in database
GPG Key ID: 17EE71F6634E381D
2 changed files with 18 additions and 12 deletions

View File

@ -162,19 +162,25 @@ internal class S3Impl(context: Context, cloud: S3Cloud) {
@Throws(IOException::class, BackendException::class) @Throws(IOException::class, BackendException::class)
private fun moveFolder(source: S3Folder, target: S3Folder): S3Folder { private fun moveFolder(source: S3Folder, target: S3Folder): S3Folder {
target.parent?.let { targetsParent -> target.parent?.let { targetsParent ->
val nodes = list(source) val request = ListObjectsArgs.builder().bucket(cloud.s3Bucket()).prefix(source.key).recursive(true).build()
val sourceKeysIncludingDescendants = try {
client().listObjects(request).mapNotNull {
run {
it.get().objectName()
}
}
} catch (e: ErrorResponseException) {
throw handleApiError(e, source.path)
}
val objectsToDelete: MutableList<DeleteObject> = LinkedList() val objectsToDelete: MutableList<DeleteObject> = LinkedList()
for (node in nodes) { for (sourceKey in sourceKeysIncludingDescendants) {
objectsToDelete.add(DeleteObject(node.key)) objectsToDelete.add(DeleteObject(sourceKey))
val targetKey = if (node is S3Folder) { val copySource = CopySource.builder().bucket(cloud.s3Bucket()).`object`(sourceKey).build()
S3CloudNodeFactory.folder(target, node.name).key val targetKey = target.key + sourceKey.removePrefix(source.key)
} else {
S3CloudNodeFactory.file(target, node.name).key
}
val copySource = CopySource.builder().bucket(cloud.s3Bucket()).`object`(node.key).build()
val copyObjectArgs = CopyObjectArgs.builder().bucket(cloud.s3Bucket()).`object`(targetKey).source(copySource).build() val copyObjectArgs = CopyObjectArgs.builder().bucket(cloud.s3Bucket()).`object`(targetKey).source(copySource).build()
try { try {
client().copyObject(copyObjectArgs) client().copyObject(copyObjectArgs)

View File

@ -60,10 +60,10 @@ internal class GoogleDriveImpl(context: Context, googleDriveCloud: GoogleDriveCl
val fileListQuery = client().files().list() // val fileListQuery = client().files().list() //
.setFields("files(id,mimeType,name,size)") // .setFields("files(id,mimeType,name,size)") //
.setSupportsAllDrives(true) .setSupportsAllDrives(true)
if (parentDriveId != null && parentDriveId == "root") { fileListQuery.q = if (parentDriveId != null && parentDriveId == "root") {
fileListQuery.q = "name contains '$name' and '$parentDriveId' in parents and trashed = false or sharedWithMe" "name contains '$name' and '$parentDriveId' in parents and trashed = false or sharedWithMe"
} else { } else {
fileListQuery.q = "name contains '$name' and '$parentDriveId' in parents and trashed = false" "name contains '$name' and '$parentDriveId' in parents and trashed = false"
} }
return fileListQuery.execute().files.firstOrNull { it.name == name } return fileListQuery.execute().files.firstOrNull { it.name == name }
} }