diff options
Diffstat (limited to 'app/src/main/java/org/the_jk/cleversync/io')
3 files changed, 38 insertions, 0 deletions
diff --git a/app/src/main/java/org/the_jk/cleversync/io/Directory.kt b/app/src/main/java/org/the_jk/cleversync/io/Directory.kt index cf47db9..e653059 100644 --- a/app/src/main/java/org/the_jk/cleversync/io/Directory.kt +++ b/app/src/main/java/org/the_jk/cleversync/io/Directory.kt @@ -5,6 +5,10 @@ import androidx.lifecycle.LiveData interface Directory { val name: String + fun openDir(name: String): Directory? + fun openFile(name: String): File? + fun openLink(name: String): Link? + fun list(): Content fun liveList(): LiveData<Content> diff --git a/app/src/main/java/org/the_jk/cleversync/io/ModifiableDirectory.kt b/app/src/main/java/org/the_jk/cleversync/io/ModifiableDirectory.kt index f056bf5..32d288a 100644 --- a/app/src/main/java/org/the_jk/cleversync/io/ModifiableDirectory.kt +++ b/app/src/main/java/org/the_jk/cleversync/io/ModifiableDirectory.kt @@ -3,6 +3,10 @@ package org.the_jk.cleversync.io import androidx.lifecycle.LiveData interface ModifiableDirectory : Directory { + fun modifiableOpenDir(name: String): ModifiableDirectory? + fun modifiableOpenFile(name: String): ModifiableFile? + fun modifiableOpenLink(name: String): ModifiableLink? + fun modifiableList(): Content fun modifiableLiveList(): LiveData<Content> diff --git a/app/src/main/java/org/the_jk/cleversync/io/impl/PathDirectory.kt b/app/src/main/java/org/the_jk/cleversync/io/impl/PathDirectory.kt index 2df6cc4..730e048 100644 --- a/app/src/main/java/org/the_jk/cleversync/io/impl/PathDirectory.kt +++ b/app/src/main/java/org/the_jk/cleversync/io/impl/PathDirectory.kt @@ -21,6 +21,7 @@ import kotlin.io.path.isRegularFile import kotlin.io.path.isSymbolicLink import kotlin.io.path.listDirectoryEntries import kotlin.io.path.name +import kotlin.io.path.readSymbolicLink @OptIn(ExperimentalPathApi::class) internal open class PathDirectory( @@ -45,6 +46,31 @@ internal open class PathDirectory( } } + override fun modifiableOpenDir(name: String): ModifiableDirectory? { + val path = path.resolve(name) + if (path.isDirectory(LinkOption.NOFOLLOW_LINKS)) return PathDirectory(path, pathWatcher) + if (path.isSymbolicLink()) { + val target = path.readSymbolicLink() + if (target.isDirectory()) return PathDirectory(target, pathWatcher) + } + return null + } + + override fun modifiableOpenFile(name: String): ModifiableFile? { + val path = path.resolve(name) + if (path.isRegularFile(LinkOption.NOFOLLOW_LINKS)) return PathFile(path) + if (path.isSymbolicLink()) { + val target = path.readSymbolicLink() + if (target.isRegularFile()) return PathFile(target) + } + return null + } + + override fun modifiableOpenLink(name: String): ModifiableLink? { + val path = path.resolve(name) + return if (path.isSymbolicLink()) PathLink(path, pathWatcher) else null + } + override fun modifiableList() = makeContent(path.listDirectoryEntries()) override fun modifiableLiveList() = modifiableLiveContent @@ -91,6 +117,10 @@ internal open class PathDirectory( override fun liveList() = liveContent + override fun openDir(name: String) = modifiableOpenDir(name) + override fun openFile(name: String) = modifiableOpenFile(name) + override fun openLink(name: String) = modifiableOpenLink(name) + override fun equals(other: Any?) = other is PathDirectory && other.path == path override fun hashCode() = path.hashCode() |
