Remove some unwraps
This commit is contained in:
parent
c23a5a2cfc
commit
10e03d3df2
@ -17,6 +17,7 @@ import org.cryptomator.domain.exception.AlreadyExistException
|
|||||||
import org.cryptomator.domain.exception.BackendException
|
import org.cryptomator.domain.exception.BackendException
|
||||||
import org.cryptomator.domain.exception.EmptyDirFileException
|
import org.cryptomator.domain.exception.EmptyDirFileException
|
||||||
import org.cryptomator.domain.exception.NoSuchCloudFileException
|
import org.cryptomator.domain.exception.NoSuchCloudFileException
|
||||||
|
import org.cryptomator.domain.exception.ParentFolderIsNullException
|
||||||
import org.cryptomator.domain.repository.CloudContentRepository
|
import org.cryptomator.domain.repository.CloudContentRepository
|
||||||
import org.cryptomator.domain.usecases.ProgressAware
|
import org.cryptomator.domain.usecases.ProgressAware
|
||||||
import org.cryptomator.domain.usecases.cloud.ByteArrayDataSource.Companion.from
|
import org.cryptomator.domain.usecases.cloud.ByteArrayDataSource.Companion.from
|
||||||
@ -214,14 +215,15 @@ internal class CryptoImplVaultFormatPre7(
|
|||||||
|
|
||||||
@Throws(BackendException::class)
|
@Throws(BackendException::class)
|
||||||
override fun move(source: CryptoFolder, target: CryptoFolder): CryptoFolder {
|
override fun move(source: CryptoFolder, target: CryptoFolder): CryptoFolder {
|
||||||
requireNotNull(target.parent)
|
|
||||||
requireNotNull(source.dirFile)
|
requireNotNull(source.dirFile)
|
||||||
requireNotNull(target.dirFile)
|
requireNotNull(target.dirFile)
|
||||||
assertCryptoFolderAlreadyExists(target)
|
target.parent?.let {
|
||||||
val result = folder(target.parent!!, target.name, cloudContentRepository.move(source.dirFile, target.dirFile))
|
assertCryptoFolderAlreadyExists(target)
|
||||||
evictFromCache(source)
|
val result = folder(it, target.name, cloudContentRepository.move(source.dirFile, target.dirFile))
|
||||||
evictFromCache(target)
|
evictFromCache(source)
|
||||||
return result
|
evictFromCache(target)
|
||||||
|
return result
|
||||||
|
} ?: throw ParentFolderIsNullException(target.name)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Throws(BackendException::class)
|
@Throws(BackendException::class)
|
||||||
|
@ -35,8 +35,9 @@ abstract class Cryptors internal constructor() {
|
|||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
fun removeDelegate() {
|
fun removeDelegate() {
|
||||||
fallback.putAll(delegate!!.cryptors)
|
delegate?.let {
|
||||||
delegate = null
|
fallback.putAll(it.cryptors)
|
||||||
|
}.also { delegate = null }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
|
@ -35,6 +35,6 @@ open class LocalStorageAccessFolder(override val parent: LocalStorageAccessFolde
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun withCloud(cloud: Cloud?): LocalStorageAccessFolder? {
|
override fun withCloud(cloud: Cloud?): LocalStorageAccessFolder? {
|
||||||
return LocalStorageAccessFolder(parent!!.withCloud(cloud), name, path, documentId, documentUri)
|
return LocalStorageAccessFolder(parent?.withCloud(cloud), name, path, documentId, documentUri)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,9 +53,12 @@ internal object OnedriveCloudNodeFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun getDriveId(item: DriveItem): String {
|
fun getDriveId(item: DriveItem): String? {
|
||||||
return if (item.remoteItem != null) item.remoteItem.parentReference.driveId
|
return when {
|
||||||
else (if (item.parentReference != null) item.parentReference.driveId else null)!!
|
item.remoteItem != null -> item.remoteItem.parentReference.driveId
|
||||||
|
item.parentReference != null -> item.parentReference.driveId
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
|
@ -43,7 +43,7 @@ internal class OnedriveIdCache @Inject constructor() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class NodeInfo(val id: String, val driveId: String, val isFolder: Boolean, private val cTag: String?) {
|
internal class NodeInfo(val id: String, val driveId: String?, val isFolder: Boolean, private val cTag: String?) {
|
||||||
constructor(node: OnedriveIdCloudNode) : this(node.id, node.driveId, node is CloudFolder, "")
|
constructor(node: OnedriveIdCloudNode) : this(node.id, node.driveId, node is CloudFolder, "")
|
||||||
|
|
||||||
fun getcTag(): String? {
|
fun getcTag(): String? {
|
||||||
|
@ -28,7 +28,6 @@ import org.cryptomator.domain.exception.BackendException
|
|||||||
import org.cryptomator.domain.exception.CloudNodeAlreadyExistsException
|
import org.cryptomator.domain.exception.CloudNodeAlreadyExistsException
|
||||||
import org.cryptomator.domain.exception.FatalBackendException
|
import org.cryptomator.domain.exception.FatalBackendException
|
||||||
import org.cryptomator.domain.exception.NoSuchCloudFileException
|
import org.cryptomator.domain.exception.NoSuchCloudFileException
|
||||||
import org.cryptomator.domain.exception.ParentFolderDoesNotExistException
|
|
||||||
import org.cryptomator.domain.exception.ParentFolderIsNullException
|
import org.cryptomator.domain.exception.ParentFolderIsNullException
|
||||||
import org.cryptomator.domain.exception.authentication.NoAuthenticationProvidedException
|
import org.cryptomator.domain.exception.authentication.NoAuthenticationProvidedException
|
||||||
import org.cryptomator.domain.usecases.ProgressAware
|
import org.cryptomator.domain.usecases.ProgressAware
|
||||||
@ -121,7 +120,7 @@ internal class OnedriveImpl(cloud: OnedriveCloud, context: Context, nodeInfoCach
|
|||||||
fun exists(node: OnedriveNode): Boolean {
|
fun exists(node: OnedriveNode): Boolean {
|
||||||
node.parent?.let {
|
node.parent?.let {
|
||||||
val parentNodeInfo = nodeInfo(it)
|
val parentNodeInfo = nodeInfo(it)
|
||||||
if (parentNodeInfo == null) {
|
if (parentNodeInfo?.driveId == null) {
|
||||||
removeNodeInfo(node)
|
removeNodeInfo(node)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -161,22 +160,22 @@ internal class OnedriveImpl(cloud: OnedriveCloud, context: Context, nodeInfoCach
|
|||||||
@Throws(NoSuchCloudFileException::class)
|
@Throws(NoSuchCloudFileException::class)
|
||||||
fun create(folder: OnedriveFolder): OnedriveFolder {
|
fun create(folder: OnedriveFolder): OnedriveFolder {
|
||||||
var parent = folder.parent
|
var parent = folder.parent
|
||||||
if (nodeInfo(parent!!) == null) { //FIXME
|
parent?.let { parentFolder ->
|
||||||
if (parent == null) {
|
if (nodeInfo(parentFolder) == null) {
|
||||||
throw ParentFolderDoesNotExistException()
|
parent = create(parentFolder)
|
||||||
} else {
|
|
||||||
parent = create(parent)
|
|
||||||
}
|
}
|
||||||
}
|
} ?: throw ParentFolderIsNullException(folder.name)
|
||||||
val folderToCreate = DriveItem()
|
parent?.let { parentFolder ->
|
||||||
folderToCreate.name = folder.name
|
val folderToCreate = DriveItem()
|
||||||
folderToCreate.folder = Folder()
|
folderToCreate.name = folder.name
|
||||||
val parentNodeInfo = requireNodeInfo(parent)
|
folderToCreate.folder = Folder()
|
||||||
val createdFolder = drive(parentNodeInfo.driveId) //
|
val parentNodeInfo = requireNodeInfo(parentFolder)
|
||||||
.items(parentNodeInfo.id).children() //
|
val createdFolder = drive(parentNodeInfo.driveId) //
|
||||||
.buildRequest() //
|
.items(parentNodeInfo.id).children() //
|
||||||
.post(folderToCreate)
|
.buildRequest() //
|
||||||
return cacheNodeInfo(folder(parent, createdFolder), createdFolder)
|
.post(folderToCreate)
|
||||||
|
return cacheNodeInfo(folder(parentFolder, createdFolder), createdFolder)
|
||||||
|
} ?: throw ParentFolderIsNullException(folder.name)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Throws(NoSuchCloudFileException::class, CloudNodeAlreadyExistsException::class)
|
@Throws(NoSuchCloudFileException::class, CloudNodeAlreadyExistsException::class)
|
||||||
@ -405,7 +404,7 @@ internal class OnedriveImpl(cloud: OnedriveCloud, context: Context, nodeInfoCach
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun nodeInfo(node: OnedriveNode): OnedriveIdCache.NodeInfo? {
|
private fun nodeInfo(node: OnedriveNode): OnedriveIdCache.NodeInfo? {
|
||||||
var result: OnedriveIdCache.NodeInfo? = nodeInfoCache[node.path]
|
var result = nodeInfoCache[node.path]
|
||||||
if (result == null) {
|
if (result == null) {
|
||||||
result = loadNodeInfo(node)
|
result = loadNodeInfo(node)
|
||||||
if (result == null) {
|
if (result == null) {
|
||||||
@ -419,15 +418,8 @@ internal class OnedriveImpl(cloud: OnedriveCloud, context: Context, nodeInfoCach
|
|||||||
} else result
|
} else result
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun <T : OnedriveNode?> cacheNodeInfo(node: T, item: DriveItem): T {
|
private fun <T : OnedriveNode> cacheNodeInfo(node: T, item: DriveItem): T {
|
||||||
nodeInfoCache.add( //
|
nodeInfoCache.add(node.path, OnedriveIdCache.NodeInfo(getId(item), getDriveId(item), isFolder(item), item.cTag))
|
||||||
node?.path!!, OnedriveIdCache.NodeInfo( //
|
|
||||||
getId(item), //
|
|
||||||
getDriveId(item), //
|
|
||||||
isFolder(item), //
|
|
||||||
item.cTag //
|
|
||||||
) //
|
|
||||||
)
|
|
||||||
return node
|
return node
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -454,7 +446,10 @@ internal class OnedriveImpl(cloud: OnedriveCloud, context: Context, nodeInfoCach
|
|||||||
|
|
||||||
private fun loadNonRootNodeInfo(node: OnedriveNode): OnedriveIdCache.NodeInfo? {
|
private fun loadNonRootNodeInfo(node: OnedriveNode): OnedriveIdCache.NodeInfo? {
|
||||||
node.parent?.let { targetsParent ->
|
node.parent?.let { targetsParent ->
|
||||||
val parentNodeInfo = nodeInfo(targetsParent) ?: return null
|
val parentNodeInfo = nodeInfo(targetsParent)
|
||||||
|
if (parentNodeInfo?.driveId == null) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
val item = childByName(parentNodeInfo.id, parentNodeInfo.driveId, node.name)
|
val item = childByName(parentNodeInfo.id, parentNodeInfo.driveId, node.name)
|
||||||
return if (item == null) {
|
return if (item == null) {
|
||||||
null
|
null
|
||||||
|
@ -28,8 +28,8 @@ internal object PCloudNodeFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun folder(parent: PCloudFolder?, name: String, path: String?): PCloudFolder {
|
fun folder(parent: PCloudFolder?, name: String, path: String): PCloudFolder {
|
||||||
return PCloudFolder(parent, name, path!!)
|
return PCloudFolder(parent, name, path)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getNodePath(parent: PCloudFolder, name: String): String {
|
fun getNodePath(parent: PCloudFolder, name: String): String {
|
||||||
|
@ -114,12 +114,11 @@ internal class GoogleDriveImpl(context: Context, googleDriveCloud: GoogleDriveCl
|
|||||||
@Throws(IOException::class)
|
@Throws(IOException::class)
|
||||||
fun exists(node: GoogleDriveNode): Boolean {
|
fun exists(node: GoogleDriveNode): Boolean {
|
||||||
return try {
|
return try {
|
||||||
requireNotNull(node.parent)
|
node.parent?.let { nodesParent ->
|
||||||
val file = findFile(node.parent!!.driveId, node.name)
|
findFile(nodesParent.driveId, node.name)?.let { idCache.add(GoogleDriveCloudNodeFactory.from(nodesParent, it)) } != null
|
||||||
file?.let { idCache.add(GoogleDriveCloudNodeFactory.from(node.parent!!, it)) }
|
} ?: throw ParentFolderIsNullException(node.name)
|
||||||
file != null
|
|
||||||
} catch (e: GoogleJsonResponseException) {
|
} catch (e: GoogleJsonResponseException) {
|
||||||
if(e.statusCode == 404) {
|
if (e.statusCode == 404) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
throw e
|
throw e
|
||||||
|
Loading…
x
Reference in New Issue
Block a user