diff options
| author | Joel Klinghed <the_jk@spawned.biz> | 2024-07-15 01:00:15 +0200 |
|---|---|---|
| committer | Joel Klinghed <the_jk@spawned.biz> | 2024-07-15 01:00:15 +0200 |
| commit | f4b3b65ab8def9dc4128a350a980afa483c97257 (patch) | |
| tree | c60fee7794c76b22a7665cedd7680a724fa1d7da /app/src | |
| parent | 427bb4c2ab0ce5cfb988789657c2de3761fec392 (diff) | |
Add Utils#createFileAndDirectories
Useful when creating a file in a directory with a path.
Diffstat (limited to 'app/src')
| -rw-r--r-- | app/src/main/java/org/the_jk/cleversync/io/Utils.kt | 25 | ||||
| -rw-r--r-- | app/src/test/java/org/the_jk/cleversync/io/UtilsTest.kt | 15 |
2 files changed, 40 insertions, 0 deletions
diff --git a/app/src/main/java/org/the_jk/cleversync/io/Utils.kt b/app/src/main/java/org/the_jk/cleversync/io/Utils.kt index 0f9a2b7..6593d04 100644 --- a/app/src/main/java/org/the_jk/cleversync/io/Utils.kt +++ b/app/src/main/java/org/the_jk/cleversync/io/Utils.kt @@ -13,6 +13,11 @@ object Utils { return current } + fun createFileAndDirectories(directory: ModifiableDirectory, vararg names: String): ModifiableFile { + val (dirNames, fileName) = resolve(*names) + return makeDirectories(directory, *dirNames).createFile(fileName) + } + fun openDirectory(directory: Directory, vararg names: String): Directory? { var current = directory names.forEach { nameWithSlashes -> @@ -22,4 +27,24 @@ object Utils { } return current } + + fun openFile(directory: Directory, vararg names: String): File? { + val (dirNames, fileName) = resolve(*names) + return openDirectory(directory, *dirNames)?.openFile(fileName) + } + + fun resolve(vararg names: String): Pair<Array<String>, String> { + val out = buildList { + names.forEach { nameWithSlashes -> + StringUtils.split(nameWithSlashes, '/', keepEmpty = false) + .forEach { name -> + add(name) + } + } + } + return if (out.isEmpty()) { emptyArray<String>() to "" } else { + val last = out.last() + out.dropLast(1).toTypedArray() to last + } + } } diff --git a/app/src/test/java/org/the_jk/cleversync/io/UtilsTest.kt b/app/src/test/java/org/the_jk/cleversync/io/UtilsTest.kt index 56c4051..47c1d53 100644 --- a/app/src/test/java/org/the_jk/cleversync/io/UtilsTest.kt +++ b/app/src/test/java/org/the_jk/cleversync/io/UtilsTest.kt @@ -48,4 +48,19 @@ class UtilsTest { assertThat(Utils.openDirectory(tree, "foo", "bar")).isEqualTo(foobar) assertThat(Utils.openDirectory(tree, "foo/fum")).isEqualTo(foofum) } + + @Test + fun createFileAndDirectories() { + val file = Utils.createFileAndDirectories(tree, "foo", "bar/test", "1 2 3 4", "hello/file.txt") + file.write().use { out -> out.writer().write("Hello World") } + val file2 = Utils.openFile(tree, "foo/bar/test/1 2 3 4/hello/file.txt") + assertThat(file2).isEqualTo(file) + val foo = tree.openDir("foo") + val bar = foo?.openDir("bar") + val test = bar?.openDir("test") + val nameWithSpaces = test?.openDir("1 2 3 4") + val hello = nameWithSpaces?.openDir("hello") + val file3 = hello?.openFile("file.txt") + assertThat(file3).isEqualTo(file2) + } } |
