diff options
| author | Joel Klinghed <the_jk@spawned.biz> | 2024-07-15 23:52:28 +0200 |
|---|---|---|
| committer | Joel Klinghed <the_jk@spawned.biz> | 2024-07-16 00:25:07 +0200 |
| commit | 42564c71cfb70c28831c662a3b6bf4084e079353 (patch) | |
| tree | 111456fd3e8dce884d0380a81d70950062c7d212 /libs/io/src | |
| parent | 4a8f6807c9d3ee6bcfac25aee832163036b4e6fe (diff) | |
Break out io code in libs
Preparing for adding more io implementations.
Really tried writing the convention plugins in kotlin dsl but could
not find the exact right hacks to get it to work.
Diffstat (limited to 'libs/io/src')
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 +} |
