package net.taehui.twilight.system import com.fasterxml.jackson.annotation.JsonGetter import com.fasterxml.jackson.annotation.JsonIgnore import com.fasterxml.jackson.annotation.JsonSetter import com.fasterxml.jackson.databind.ObjectMapper import net.taehui.twilight.Logger import net.taehui.twilight.TwilightComponent import java.lang.reflect.Modifier import java.nio.file.Files import java.nio.file.Path import java.nio.file.Paths import java.util.concurrent.TimeUnit object Configure : Logger { class PathItem { @JvmField var www = "" @JsonIgnore lateinit var wwwPath: Path @JsonSetter fun setWww(www: String) { this.www = www wwwPath = Paths.get(www) } } class DBItem { var auth = "" var db = "" var remote = "" var avatar = "" var format = "" } class FaxItem { var auth = "" var remote = "" var avatar = "" } class Mode { var platform = false var tv = false @JsonIgnore var pause = false } class Www { var qwilight = "" var taehui = "" } class NHN { var nhnID = "" var nhnPw = "" } lateinit var path: PathItem lateinit var db: DBItem lateinit var fax: FaxItem var hash = mutableSetOf<String>() lateinit var mode: Mode lateinit var www: Www lateinit var nhn: NHN var awilightCount = 0 @JsonIgnore var defaultNoteDate = 0L @JsonIgnore var defaultUIDate = 0L fun loadConfigure() { val text = ObjectMapper().readValue(Paths.get("Configure.json").toFile().absoluteFile, Configure::class.java) Configure::class.java.fields.forEach { if (it.getAnnotation(JsonIgnore::class.java)?.value != true && it.modifiers and Modifier.FINAL != Modifier.FINAL) { it[this] = it[text] ?: throw RuntimeException(it.name) } } logInfo("Loaded Configure") saveConfigure() loadDefaultDate() } fun loadDefaultDate() { defaultNoteDate = Files.list(TwilightComponent.DEFAULT_NOTE_ENTRY).map { Files.getLastModifiedTime(it).to(TimeUnit.MILLISECONDS) }.max(Comparator.naturalOrder()).orElse(0L) defaultUIDate = Files.list(TwilightComponent.DEFAULT_UI_ENTRY).map { Files.getLastModifiedTime(it).to(TimeUnit.MILLISECONDS) }.max(Comparator.naturalOrder()).orElse(0L) logInfo("Loaded Default Date") } fun saveConfigure() { Files.newOutputStream(Paths.get("Configure.json")).use { ObjectMapper().writerWithDefaultPrettyPrinter().writeValue(it, this) logInfo("Saved Configure") } } }