1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
package org.the_jk.cleversync.io
import org.the_jk.cleversync.StringUtils
object Utils {
fun makeDirectories(directory: ModifiableDirectory, vararg names: String): ModifiableDirectory {
var current = directory
names.forEach { nameWithSlashes ->
StringUtils.split(nameWithSlashes, '/', keepEmpty = false).forEach { name ->
current = current.modifiableOpenDir(name) ?: current.createDirectory(name)
}
}
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 ->
StringUtils.split(nameWithSlashes, '/', keepEmpty = false).forEach { name ->
current = current.openDir(name) ?: return null
}
}
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
}
}
}
|