summaryrefslogtreecommitdiff
path: root/libs/io/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'libs/io/src/main')
-rw-r--r--libs/io/src/main/java/org/the_jk/cleversync/io/Directory.kt20
-rw-r--r--libs/io/src/main/java/org/the_jk/cleversync/io/File.kt12
-rw-r--r--libs/io/src/main/java/org/the_jk/cleversync/io/Link.kt13
-rw-r--r--libs/io/src/main/java/org/the_jk/cleversync/io/ModifiableDirectory.kt28
-rw-r--r--libs/io/src/main/java/org/the_jk/cleversync/io/ModifiableFile.kt7
-rw-r--r--libs/io/src/main/java/org/the_jk/cleversync/io/ModifiableLink.kt15
-rw-r--r--libs/io/src/main/java/org/the_jk/cleversync/io/ModifiableTree.kt3
-rw-r--r--libs/io/src/main/java/org/the_jk/cleversync/io/Tree.kt7
8 files changed, 105 insertions, 0 deletions
diff --git a/libs/io/src/main/java/org/the_jk/cleversync/io/Directory.kt b/libs/io/src/main/java/org/the_jk/cleversync/io/Directory.kt
new file mode 100644
index 0000000..e653059
--- /dev/null
+++ b/libs/io/src/main/java/org/the_jk/cleversync/io/Directory.kt
@@ -0,0 +1,20 @@
+package org.the_jk.cleversync.io
+
+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>
+
+ data class Content(
+ val directories: List<Directory>,
+ val files: List<File>,
+ val links: List<Link>,
+ )
+}
diff --git a/libs/io/src/main/java/org/the_jk/cleversync/io/File.kt b/libs/io/src/main/java/org/the_jk/cleversync/io/File.kt
new file mode 100644
index 0000000..17f142a
--- /dev/null
+++ b/libs/io/src/main/java/org/the_jk/cleversync/io/File.kt
@@ -0,0 +1,12 @@
+package org.the_jk.cleversync.io
+
+import java.io.InputStream
+import java.time.Instant
+
+interface File {
+ val name: String
+ val size: ULong
+ val lastModified: Instant
+
+ fun read(): InputStream
+}
diff --git a/libs/io/src/main/java/org/the_jk/cleversync/io/Link.kt b/libs/io/src/main/java/org/the_jk/cleversync/io/Link.kt
new file mode 100644
index 0000000..c05f29e
--- /dev/null
+++ b/libs/io/src/main/java/org/the_jk/cleversync/io/Link.kt
@@ -0,0 +1,13 @@
+package org.the_jk.cleversync.io
+
+interface Link {
+ val name: String
+
+ fun resolve(): LinkTarget
+
+ sealed class LinkTarget
+
+ data class DirectoryTarget(val directory: Directory): LinkTarget()
+ data class FileTarget(val file: File): LinkTarget()
+ data object NoTarget: LinkTarget()
+}
diff --git a/libs/io/src/main/java/org/the_jk/cleversync/io/ModifiableDirectory.kt b/libs/io/src/main/java/org/the_jk/cleversync/io/ModifiableDirectory.kt
new file mode 100644
index 0000000..8bddc2c
--- /dev/null
+++ b/libs/io/src/main/java/org/the_jk/cleversync/io/ModifiableDirectory.kt
@@ -0,0 +1,28 @@
+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>
+
+ fun createDirectory(name: String): ModifiableDirectory
+ fun createFile(name: String): ModifiableFile
+ fun createLink(name: String, target: Directory): ModifiableLink
+ fun createLink(name: String, target: File): ModifiableLink
+ fun createLink(name: String, target: String): ModifiableLink
+
+ fun removeDirectory(name: String): Boolean
+ fun removeFile(name: String): Boolean
+ fun removeLink(name: String): Boolean
+
+ data class Content(
+ val directories: List<ModifiableDirectory>,
+ val files: List<ModifiableFile>,
+ val links: List<ModifiableLink>,
+ )
+}
diff --git a/libs/io/src/main/java/org/the_jk/cleversync/io/ModifiableFile.kt b/libs/io/src/main/java/org/the_jk/cleversync/io/ModifiableFile.kt
new file mode 100644
index 0000000..8675dae
--- /dev/null
+++ b/libs/io/src/main/java/org/the_jk/cleversync/io/ModifiableFile.kt
@@ -0,0 +1,7 @@
+package org.the_jk.cleversync.io
+
+import java.io.OutputStream
+
+interface ModifiableFile : File {
+ fun write(): OutputStream
+}
diff --git a/libs/io/src/main/java/org/the_jk/cleversync/io/ModifiableLink.kt b/libs/io/src/main/java/org/the_jk/cleversync/io/ModifiableLink.kt
new file mode 100644
index 0000000..7dd565b
--- /dev/null
+++ b/libs/io/src/main/java/org/the_jk/cleversync/io/ModifiableLink.kt
@@ -0,0 +1,15 @@
+package org.the_jk.cleversync.io
+
+interface ModifiableLink : Link {
+ fun modifiableResolve(): ModifiableLinkTarget
+
+ fun target(directory: Directory)
+ fun target(file: File)
+ fun target(name: String)
+
+ sealed class ModifiableLinkTarget
+
+ data class ModifiableDirectoryTarget(val directory: ModifiableDirectory): ModifiableLinkTarget()
+ data class ModifiableFileTarget(val file: ModifiableFile): ModifiableLinkTarget()
+ data object NoTarget: ModifiableLinkTarget()
+}
diff --git a/libs/io/src/main/java/org/the_jk/cleversync/io/ModifiableTree.kt b/libs/io/src/main/java/org/the_jk/cleversync/io/ModifiableTree.kt
new file mode 100644
index 0000000..383360d
--- /dev/null
+++ b/libs/io/src/main/java/org/the_jk/cleversync/io/ModifiableTree.kt
@@ -0,0 +1,3 @@
+package org.the_jk.cleversync.io
+
+interface ModifiableTree : Tree, ModifiableDirectory
diff --git a/libs/io/src/main/java/org/the_jk/cleversync/io/Tree.kt b/libs/io/src/main/java/org/the_jk/cleversync/io/Tree.kt
new file mode 100644
index 0000000..b6f2d54
--- /dev/null
+++ b/libs/io/src/main/java/org/the_jk/cleversync/io/Tree.kt
@@ -0,0 +1,7 @@
+package org.the_jk.cleversync.io
+
+import android.content.res.Resources
+
+interface Tree : Directory {
+ fun description(resources: Resources): CharSequence
+}