From 42564c71cfb70c28831c662a3b6bf4084e079353 Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Mon, 15 Jul 2024 23:52:28 +0200 Subject: 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. --- .../java/org/the_jk/cleversync/io/Directory.kt | 20 ++++++++++++++++ .../src/main/java/org/the_jk/cleversync/io/File.kt | 12 ++++++++++ .../src/main/java/org/the_jk/cleversync/io/Link.kt | 13 ++++++++++ .../the_jk/cleversync/io/ModifiableDirectory.kt | 28 ++++++++++++++++++++++ .../org/the_jk/cleversync/io/ModifiableFile.kt | 7 ++++++ .../org/the_jk/cleversync/io/ModifiableLink.kt | 15 ++++++++++++ .../org/the_jk/cleversync/io/ModifiableTree.kt | 3 +++ .../src/main/java/org/the_jk/cleversync/io/Tree.kt | 7 ++++++ 8 files changed, 105 insertions(+) create mode 100644 libs/io/src/main/java/org/the_jk/cleversync/io/Directory.kt create mode 100644 libs/io/src/main/java/org/the_jk/cleversync/io/File.kt create mode 100644 libs/io/src/main/java/org/the_jk/cleversync/io/Link.kt create mode 100644 libs/io/src/main/java/org/the_jk/cleversync/io/ModifiableDirectory.kt create mode 100644 libs/io/src/main/java/org/the_jk/cleversync/io/ModifiableFile.kt create mode 100644 libs/io/src/main/java/org/the_jk/cleversync/io/ModifiableLink.kt create mode 100644 libs/io/src/main/java/org/the_jk/cleversync/io/ModifiableTree.kt create mode 100644 libs/io/src/main/java/org/the_jk/cleversync/io/Tree.kt (limited to 'libs/io/src') 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 + + data class Content( + val directories: List, + val files: List, + val links: List, + ) +} 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 + + 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, + val files: List, + val links: List, + ) +} 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 +} -- cgit v1.2.3-70-g09d2