summaryrefslogtreecommitdiff
path: root/libs/local
diff options
context:
space:
mode:
Diffstat (limited to 'libs/local')
-rw-r--r--libs/local/src/main/java/org/the_jk/cleversync/io/local/PathLink.kt28
1 files changed, 20 insertions, 8 deletions
diff --git a/libs/local/src/main/java/org/the_jk/cleversync/io/local/PathLink.kt b/libs/local/src/main/java/org/the_jk/cleversync/io/local/PathLink.kt
index 87ab71a..86b2e36 100644
--- a/libs/local/src/main/java/org/the_jk/cleversync/io/local/PathLink.kt
+++ b/libs/local/src/main/java/org/the_jk/cleversync/io/local/PathLink.kt
@@ -17,13 +17,16 @@ internal class PathLink(
private val pathWatcher: PathWatcher,
) : ModifiableLink {
override fun modifiableResolve(): ModifiableLink.ModifiableLinkTarget {
- val target = path.readSymbolicLink()
+ val (target, targetPath) = readLink()
return if (target.isDirectory()) {
- ModifiableLink.ModifiableDirectoryTarget(target.toString(), PathDirectory(target.toRealPath(), pathWatcher))
+ ModifiableLink.ModifiableDirectoryTarget(
+ targetPath,
+ PathDirectory(target.toRealPath(), pathWatcher),
+ )
} else if (target.isRegularFile()) {
- ModifiableLink.ModifiableFileTarget(target.toString(), PathFile(target.toRealPath()))
+ ModifiableLink.ModifiableFileTarget(targetPath, PathFile(target.toRealPath()))
} else {
- ModifiableLink.NoTarget(target.toString())
+ ModifiableLink.NoTarget(targetPath)
}
}
@@ -50,13 +53,22 @@ internal class PathLink(
override fun toString() = path.toString()
override fun resolve(): Link.LinkTarget {
- val target = path.readSymbolicLink()
+ val (target, targetPath) = readLink()
return if (target.isDirectory()) {
- Link.DirectoryTarget(target.toString(), PathDirectory(target.toRealPath(), pathWatcher))
+ Link.DirectoryTarget(targetPath, PathDirectory(target.toRealPath(), pathWatcher))
} else if (target.isRegularFile()) {
- Link.FileTarget(target.toString(), PathFile(target.toRealPath()))
+ Link.FileTarget(targetPath, PathFile(target.toRealPath()))
} else {
- Link.NoTarget(target.toString())
+ Link.NoTarget(targetPath)
+ }
+ }
+
+ private fun readLink(): Pair<Path, String> {
+ val target = path.readSymbolicLink()
+ val rel = path.parent.relativize(target)
+ if (rel.name.isEmpty()) {
+ return target to "${path.relativize(target)}/${target.name}"
}
+ return target to rel.toString()
}
}