#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)
|
@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)
|
||||||
|
@ -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 }
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user