Implemented saving and restoring app settings
This commit is contained in:
parent
6c21222051
commit
bec5ca8f14
|
@ -0,0 +1,11 @@
|
||||||
|
package net.codinux.banking.epcqrcode.windows.main
|
||||||
|
|
||||||
|
|
||||||
|
open class AppSettings(
|
||||||
|
open var receiver: String = "",
|
||||||
|
open var iban: String = "",
|
||||||
|
open var bic: String = "",
|
||||||
|
open var amount: Double? = null,
|
||||||
|
open var reference: String = "",
|
||||||
|
open var destinationFile: String = ""
|
||||||
|
)
|
|
@ -16,6 +16,7 @@ import java.io.File
|
||||||
import java.text.DecimalFormat
|
import java.text.DecimalFormat
|
||||||
import java.text.ParsePosition
|
import java.text.ParsePosition
|
||||||
import net.codinux.banking.epcqrcode.*
|
import net.codinux.banking.epcqrcode.*
|
||||||
|
import net.dankito.utils.serialization.JacksonJsonSerializer
|
||||||
|
|
||||||
|
|
||||||
class MainWindow : View(FX.messages["application.title"]) {
|
class MainWindow : View(FX.messages["application.title"]) {
|
||||||
|
@ -25,6 +26,8 @@ class MainWindow : View(FX.messages["application.title"]) {
|
||||||
|
|
||||||
private val DecimalFormat = DecimalFormat( "#.0" )
|
private val DecimalFormat = DecimalFormat( "#.0" )
|
||||||
|
|
||||||
|
private val AppSettingsFile = File("settings.json")
|
||||||
|
|
||||||
private val logger = LoggerFactory.getLogger(MainWindow::class.java)
|
private val logger = LoggerFactory.getLogger(MainWindow::class.java)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,10 +55,15 @@ class MainWindow : View(FX.messages["application.title"]) {
|
||||||
private var generatedQrCodeBytes: ByteArray? = null // couldn't find no working way to get image bytes from image -> also saving pure bytes in memory (what a waste)
|
private var generatedQrCodeBytes: ByteArray? = null // couldn't find no working way to get image bytes from image -> also saving pure bytes in memory (what a waste)
|
||||||
|
|
||||||
|
|
||||||
|
private val serializer = JacksonJsonSerializer()
|
||||||
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
selectedDestinationFile.addListener { _, _, newValue ->
|
selectedDestinationFile.addListener { _, _, newValue ->
|
||||||
isDestinationFileSelected.value = newValue.isNotBlank()
|
isDestinationFileSelected.value = newValue.isNotBlank()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
deserializeAppSettings()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -217,6 +225,8 @@ class MainWindow : View(FX.messages["application.title"]) {
|
||||||
alert.show()
|
alert.show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
saveSettings() // TODO: actually a side effect
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -235,6 +245,8 @@ class MainWindow : View(FX.messages["application.title"]) {
|
||||||
generatedQrCodeImage.value = generateQrCode(qrCodeContent)
|
generatedQrCodeImage.value = generateQrCode(qrCodeContent)
|
||||||
|
|
||||||
currentStage?.sizeToScene()
|
currentStage?.sizeToScene()
|
||||||
|
|
||||||
|
saveSettings() // TODO: actually a side effect
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun map(amount: String): Double? {
|
private fun map(amount: String): Double? {
|
||||||
|
@ -253,4 +265,36 @@ class MainWindow : View(FX.messages["application.title"]) {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private fun saveSettings() {
|
||||||
|
try {
|
||||||
|
val appSettings = AppSettings(receiver.value, iban.value, bic.value, map(amount.value), reference.value,
|
||||||
|
selectedDestinationFile.value)
|
||||||
|
|
||||||
|
serializer.serializeObject(appSettings, AppSettingsFile)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
logger.error("Could not save AppSettings", e) // TODO: show message to user?
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun deserializeAppSettings() {
|
||||||
|
try {
|
||||||
|
serializer.deserializeObject(AppSettingsFile, AppSettings::class.java)?.let { appSettings ->
|
||||||
|
receiver.value = appSettings.receiver
|
||||||
|
iban.value = appSettings.iban
|
||||||
|
bic.value = appSettings.bic
|
||||||
|
|
||||||
|
appSettings.amount?.let {
|
||||||
|
amount.value = DecimalFormat.format(it)
|
||||||
|
}
|
||||||
|
|
||||||
|
reference.value = appSettings.reference
|
||||||
|
|
||||||
|
selectedDestinationFile.value = appSettings.destinationFile
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
logger.error("Could not deserialize AppSettings", e) // TODO: show message to user?
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue