KotlinPublicationScriptsBui.../desktop/src/jvmMain/kotlin/dev/inmo/kmppscriptbuilder/desktop/utils/FilesHandling.kt

78 lines
2.5 KiB
Kotlin

package dev.inmo.kmppscriptbuilder.desktop.utils
import dev.inmo.kmppscriptbuilder.core.models.Config
import dev.inmo.kmppscriptbuilder.core.ui.utils.FileFilter
import dev.inmo.kmppscriptbuilder.core.utils.serialFormat
import java.io.File
import javax.swing.JFileChooser
private const val appExtension = "kpsb"
private var lastFile: File? = null
fun loadConfigFile(file: File): Config {
lastFile = file
return serialFormat.decodeFromString(Config.serializer(), file.readText())
}
fun loadConfig(): Config? {
val fc = JFileChooser(lastFile ?.parent)
fc.addChoosableFileFilter(FileFilter("Kotlin Publication Scripts Builder", Regex(".*\\.$appExtension")))
fc.addChoosableFileFilter(FileFilter("JSON", Regex(".*\\.json")))
return when (fc.showOpenDialog(null)) {
JFileChooser.APPROVE_OPTION -> {
val file = fc.selectedFile
lastFile = file
return serialFormat.decodeFromString(Config.serializer(), fc.selectedFile.readText())
}
else -> null
}
}
fun saveConfig(config: Config): Boolean {
return lastFile ?.also {
it.writeText(serialFormat.encodeToString(Config.serializer(), config))
} != null
}
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
}
}
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
}
}