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, String> { val out = buildList { names.forEach { nameWithSlashes -> StringUtils.split(nameWithSlashes, '/', keepEmpty = false) .forEach { name -> add(name) } } } return if (out.isEmpty()) { emptyArray() to "" } else { val last = out.last() out.dropLast(1).toTypedArray() to last } } }