X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fkotlin%2Fnet%2Fpterodactylus%2Frhynodge%2Fwebpages%2Fweather%2FWeatherState.kt;h=814af33b653e83dca769e6dc26da997886496dbd;hb=5d962b76adef88663cfa4acc093836c71fe9dd82;hp=0d1d7f1dd83320c914f2b0314d1c90c7358fe1d2;hpb=6d8a3475d8e56cea63d53d456baef434318223a7;p=rhynodge.git diff --git a/src/main/kotlin/net/pterodactylus/rhynodge/webpages/weather/WeatherState.kt b/src/main/kotlin/net/pterodactylus/rhynodge/webpages/weather/WeatherState.kt index 0d1d7f1..814af33 100644 --- a/src/main/kotlin/net/pterodactylus/rhynodge/webpages/weather/WeatherState.kt +++ b/src/main/kotlin/net/pterodactylus/rhynodge/webpages/weather/WeatherState.kt @@ -2,10 +2,22 @@ package net.pterodactylus.rhynodge.webpages.weather import com.fasterxml.jackson.annotation.JsonGetter import com.fasterxml.jackson.annotation.JsonProperty +import kotlinx.html.body +import kotlinx.html.div +import kotlinx.html.h1 +import kotlinx.html.head +import kotlinx.html.html +import kotlinx.html.img +import kotlinx.html.stream.createHTML +import kotlinx.html.style +import kotlinx.html.unsafe import net.pterodactylus.rhynodge.states.AbstractState +import java.text.DateFormat import java.time.Instant import java.time.ZoneId import java.time.ZonedDateTime +import java.time.temporal.ChronoUnit +import java.util.Locale /** * Contains a weather state. @@ -14,26 +26,97 @@ import java.time.ZonedDateTime */ class WeatherState(val service: String, val dateTime: ZonedDateTime) : AbstractState(true), Iterable { - constructor(@JsonProperty("service") service: String, @JsonProperty("dateTime") time: Long) : - this(service, Instant.ofEpochMilli(time).atZone(ZoneId.of("Europe/Berlin"))) + constructor(@JsonProperty("service") service: String, @JsonProperty("dateTime") time: Long) : + this(service, Instant.ofEpochMilli(time).atZone(ZoneId.of("Europe/Berlin"))) - @JsonProperty("hours") - val hours: List = mutableListOf() + @JsonProperty("hours") + val hours: List = mutableListOf() - @get:JsonGetter("dateTime") - val timeMillis = dateTime.toInstant().toEpochMilli() + @get:JsonGetter("dateTime") + val timeMillis = dateTime.toInstant().toEpochMilli() - operator fun plusAssign(hourState: HourState) { - (hours as MutableList).add(hourState) - } + operator fun plusAssign(hourState: HourState) { + (hours as MutableList).add(hourState) + } - override fun iterator(): Iterator { - return hours.iterator() - } + override fun iterator(): Iterator { + return hours.iterator() + } - override fun equals(other: Any?): Boolean { - other as? WeatherState ?: return false - return (dateTime == other.dateTime) and (hours == other.hours) - } + override fun equals(other: Any?): Boolean { + other as? WeatherState ?: return false + return (dateTime == other.dateTime) and (hours == other.hours) + } + + override fun plainText(): String="" + + override fun htmlText(): String = + createHTML().html { + head { + style("text/css") { + unsafe { + +".weather-states { display: table; } " + +".hour-state, .header { display: table-row; } " + +".hour-state > div { display: table-cell; padding: 0em 0.5em; text-align: center; } " + +".header > div { display: table-cell; padding: 0em 0.5em; font-weight: bold; text-align: center; } " + } + } + } + body { + val startTime = dateTime.toInstant() + h1 { +"The Weather (according to wetter.de) on %s".format(dateFormatter.format(startTime.toEpochMilli())) } + val showFeltTemperature = any { it.feltTemperature != null } + val showGustSpeed = any { it.gustSpeed != null } + val showHumidity = any { it.humidity != null } + div("weather-states") { + div("header") { + div { +"Time" } + div { +"Temperature" } + if (showHumidity) { + div { +"feels like" } + } + div { +"Chance of Rain" } + div { +"Amount" } + div { +"Wind from" } + div { +"Speed" } + if (showGustSpeed) { + div { +"Gusts" } + } + if (showHumidity) { + div { +"Humidity" } + } + div { +"Description" } + div { +"Image" } + } + forEach { + div("hour-state") { + div("time") { +"%tH:%