Newer
Older
Twilight / src / main / kotlin / net / taehui / twilight / system / Configure.kt
@taehui taehui on 21 Aug 2 KB v1.0-SNAPSHOT
package net.taehui.twilight.system

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 net.taehui.twilight.etc.EtcAvatar.TaehuiQwilightDate
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 Mode {
        var platform = false
        var tv = false

        @JsonIgnore
        var pause = false
    }

    class Www {
        var qwilight = ""
        var taehui = ""
    }

    class NHN {
        var translationID = ""
        var translationPw = ""
        var smtpID = ""
        var smtpPw = ""
    }

    lateinit var path: PathItem
    lateinit var db: DBItem
    lateinit var mode: Mode
    lateinit var www: Www
    lateinit var nhn: NHN
    var awilightCount = 0

    @JsonIgnore
    var date = ""

    @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()

        loadDate()
        loadDefaultDate()
    }

    fun loadDate() {
        val jm = ObjectMapper()
        val filePath = path.wwwPath.resolve("qwilight.json")
        val text = jm.readValue(Files.readString(filePath), TaehuiQwilightDate::class.java)
        date = text.date
    }

    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")
        }
    }
}