summaryrefslogtreecommitdiff
path: root/app/src/main/java/org/the_jk/cleversync
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/org/the_jk/cleversync')
-rw-r--r--app/src/main/java/org/the_jk/cleversync/io/Directory.kt4
-rw-r--r--app/src/main/java/org/the_jk/cleversync/io/ModifiableDirectory.kt4
-rw-r--r--app/src/main/java/org/the_jk/cleversync/io/impl/PathDirectory.kt30
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()