#328 fix rename vault in S3 leads to empty vault
This commit is contained in:
parent
d5436c9b47
commit
543a03212f
@ -162,19 +162,25 @@ internal class S3Impl(context: Context, cloud: S3Cloud) {
|
||||
@Throws(IOException::class, BackendException::class)
|
||||
private fun moveFolder(source: S3Folder, target: S3Folder): S3Folder {
|
||||
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()
|
||||
|
||||
for (node in nodes) {
|
||||
objectsToDelete.add(DeleteObject(node.key))
|
||||
for (sourceKey in sourceKeysIncludingDescendants) {
|
||||
objectsToDelete.add(DeleteObject(sourceKey))
|
||||
|
||||
val targetKey = if (node is S3Folder) {
|
||||
S3CloudNodeFactory.folder(target, node.name).key
|
||||
} else {
|
||||
S3CloudNodeFactory.file(target, node.name).key
|
||||
}
|
||||
val copySource = CopySource.builder().bucket(cloud.s3Bucket()).`object`(sourceKey).build()
|
||||
val targetKey = target.key + sourceKey.removePrefix(source.key)
|
||||
|
||||
val copySource = CopySource.builder().bucket(cloud.s3Bucket()).`object`(node.key).build()
|
||||
val copyObjectArgs = CopyObjectArgs.builder().bucket(cloud.s3Bucket()).`object`(targetKey).source(copySource).build()
|
||||
try {
|
||||
client().copyObject(copyObjectArgs)
|
||||
|
@ -60,10 +60,10 @@ internal class GoogleDriveImpl(context: Context, googleDriveCloud: GoogleDriveCl
|
||||
val fileListQuery = client().files().list() //
|
||||
.setFields("files(id,mimeType,name,size)") //
|
||||
.setSupportsAllDrives(true)
|
||||
if (parentDriveId != null && parentDriveId == "root") {
|
||||
fileListQuery.q = "name contains '$name' and '$parentDriveId' in parents and trashed = false or sharedWithMe"
|
||||
fileListQuery.q = if (parentDriveId != null && parentDriveId == "root") {
|
||||
"name contains '$name' and '$parentDriveId' in parents and trashed = false or sharedWithMe"
|
||||
} 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 }
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user