X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fkotlin%2Fnet%2Fpterodactylus%2Frhynodge%2Fwebpages%2Fweather%2FWeatherTrigger.kt;h=bdc347a074339e5de641a8f93c94488e5cd4491f;hb=5d962b76adef88663cfa4acc093836c71fe9dd82;hp=5374d4cb6a33b8dc6ee6ee4a29622e819b4d912e;hpb=6d8a3475d8e56cea63d53d456baef434318223a7;p=rhynodge.git diff --git a/src/main/kotlin/net/pterodactylus/rhynodge/webpages/weather/WeatherTrigger.kt b/src/main/kotlin/net/pterodactylus/rhynodge/webpages/weather/WeatherTrigger.kt index 5374d4c..bdc347a 100644 --- a/src/main/kotlin/net/pterodactylus/rhynodge/webpages/weather/WeatherTrigger.kt +++ b/src/main/kotlin/net/pterodactylus/rhynodge/webpages/weather/WeatherTrigger.kt @@ -1,22 +1,7 @@ package net.pterodactylus.rhynodge.webpages.weather -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.Reaction import net.pterodactylus.rhynodge.State import net.pterodactylus.rhynodge.Trigger -import net.pterodactylus.rhynodge.output.DefaultOutput -import net.pterodactylus.rhynodge.output.Output -import java.text.DateFormat -import java.time.temporal.ChronoUnit -import java.util.Locale /** * Detects changes in the weather and creates email texts. @@ -25,92 +10,15 @@ import java.util.Locale */ class WeatherTrigger : Trigger { - private val dateFormatter = DateFormat.getDateInstance(DateFormat.LONG, Locale.ENGLISH) - private lateinit var state: WeatherState - private var changed = false + private lateinit var state: WeatherState + private var changed = false - override fun mergeStates(previousState: State, currentState: State): State { - changed = previousState != currentState - state = currentState as WeatherState - return currentState - } + override fun mergeStates(previousState: State, currentState: State): State { + changed = previousState != currentState + state = currentState as WeatherState + return currentState + } - override fun triggers(): Boolean { - return changed - } - - override fun output(reaction: Reaction): Output { - val output = DefaultOutput("The Weather (according to ${state.service}) on ${dateFormatter.format(state.dateTime.toInstant().toEpochMilli())}") - output.addText("text/html", generateHtmlOutput()) - return output - } - - private fun generateHtmlOutput(): String { - return 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 = state.dateTime.toInstant() - h1 { +"The Weather (according to wetter.de) on %s".format(dateFormatter.format(startTime.toEpochMilli())) } - val showFeltTemperature = state.any { it.feltTemperature != null } - val showGustSpeed = state.any { it.gustSpeed != null } - val showHumidity = state.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" } - } - state.forEach { - div("hour-state") { - div("time") { +"%tH:%