소스 검색

allow deletion of corrupt directories, whose dir-file exists but physical directory doesn't. related to #181

Sebastian Stenzel 9 년 전
부모
커밋
f12168ca94
1개의 변경된 파일5개의 추가작업 그리고 5개의 파일을 삭제
  1. 5 5
      main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoFolder.java

+ 5 - 5
main/filesystem-crypto/src/main/java/org/cryptomator/filesystem/crypto/CryptoFolder.java

@@ -80,8 +80,8 @@ class CryptoFolder extends CryptoNode implements Folder {
 
 	@Override
 	public Stream<CryptoFile> files() {
-		assert forceGetPhysicalFolder().exists();
-		return forceGetPhysicalFolder().files().map(File::name).filter(isEncryptedFileName()).map(this::decryptChildFileName).map(this::file);
+		final Stream<? extends File> files = physicalFolder().filter(Folder::exists).map(Folder::files).orElse(Stream.empty());
+		return files.map(File::name).filter(isEncryptedFileName()).map(this::decryptChildFileName).map(this::file);
 	}
 
 	private Predicate<String> isEncryptedFileName() {
@@ -104,8 +104,8 @@ class CryptoFolder extends CryptoNode implements Folder {
 
 	@Override
 	public Stream<CryptoFolder> folders() {
-		assert forceGetPhysicalFolder().exists();
-		return forceGetPhysicalFolder().files().map(File::name).filter(isEncryptedDirectoryName()).map(this::decryptChildFolderName).map(this::folder);
+		final Stream<? extends File> files = physicalFolder().filter(Folder::exists).map(Folder::files).orElse(Stream.empty());
+		return files.map(File::name).filter(isEncryptedDirectoryName()).map(this::decryptChildFolderName).map(this::folder);
 	}
 
 	private Predicate<String> isEncryptedDirectoryName() {
@@ -190,7 +190,7 @@ class CryptoFolder extends CryptoNode implements Folder {
 		Folder physicalFolder = forceGetPhysicalFolder();
 		physicalFolder.delete();
 		Folder physicalFolderParent = physicalFolder.parent().get();
-		if (physicalFolderParent.folders().count() == 0) {
+		if (physicalFolderParent.exists() && physicalFolderParent.folders().count() == 0) {
 			physicalFolderParent.delete();
 		}
 		forceGetPhysicalFile().delete();