KotlinPublicationScriptsBui.../core/src/jvmMain/kotlin/dev/inmo/kmppscriptbuilder/core/utils/ActualFilesHandling.kt

77 lines
2.5 KiB
Kotlin

package dev.inmo.kmppscriptbuilder.core.utils
import dev.inmo.kmppscriptbuilder.core.models.Config
import dev.inmo.kmppscriptbuilder.core.ui.utils.FileFilter
import dev.inmo.micro_utils.common.MPPFile
import java.io.File
import javax.swing.JFileChooser
fun MPPFile.text() = readText()
internal var lastFile: MPPFile? = null
fun loadConfigFile(file: MPPFile): Config {
lastFile = file
return serialFormat.decodeFromString(Config.serializer(), file.text())
}
actual fun openNewConfig(onParsed: (Config) -> Unit) {
val fc = JFileChooser(lastFile ?.parent)
fc.addChoosableFileFilter(FileFilter("Kotlin Publication Scripts Builder", Regex(".*\\.$appExtension")))
fc.addChoosableFileFilter(FileFilter("JSON", Regex(".*\\.json")))
when (fc.showOpenDialog(null)) {
JFileChooser.APPROVE_OPTION -> {
val file = fc.selectedFile
lastFile = file
onParsed(serialFormat.decodeFromString(Config.serializer(), fc.selectedFile.readText()))
}
}
}
actual fun saveConfig(config: Config): Boolean {
return lastFile ?.also {
it.writeText(serialFormat.encodeToString(Config.serializer(), config))
} != null
}
actual fun exportGradle(config: Config): Boolean {
val fc = JFileChooser(lastFile ?.parent)
fc.fileSelectionMode = JFileChooser.DIRECTORIES_ONLY
return when (fc.showSaveDialog(null)) {
JFileChooser.APPROVE_OPTION -> {
val file = fc.selectedFile
val mavenConfigContent = config.type.buildMavenGradleConfig(
config.mavenConfig,
config.licenses
)
File(file, "publish.gradle").apply {
delete()
createNewFile()
writeText(mavenConfigContent)
}
true
}
else -> false
}
}
actual fun saveAs(config: Config): Boolean {
val fc = JFileChooser(lastFile ?.parent)
fc.addChoosableFileFilter(FileFilter("Kotlin Publication Scripts Builder", Regex(".*\\.$appExtension")))
fc.addChoosableFileFilter(FileFilter("JSON", Regex(".*\\.json")))
return when (fc.showSaveDialog(null)) {
JFileChooser.APPROVE_OPTION -> {
val file = fc.selectedFile
val resultFile = if (file.extension == "") {
File(file.parentFile, "${file.name}.$appExtension")
} else {
file
}
resultFile.writeText(serialFormat.encodeToString(Config.serializer(), config))
lastFile = resultFile
true
}
else -> false
}
}