From fa1e4eb966c8b5b18f372fb884a496b68c265afa Mon Sep 17 00:00:00 2001 From: Florian Schrofner Date: Sun, 20 Feb 2022 11:34:23 +0100 Subject: [PATCH] handle timespans crossing midnight, make status params optional --- .../kotlin/fi/schro/data/ConfigurationRepository.kt | 10 ++++++++-- src/nativeMain/kotlin/fi/schro/data/LightRepository.kt | 6 +++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/nativeMain/kotlin/fi/schro/data/ConfigurationRepository.kt b/src/nativeMain/kotlin/fi/schro/data/ConfigurationRepository.kt index 3921a31..30b0a64 100644 --- a/src/nativeMain/kotlin/fi/schro/data/ConfigurationRepository.kt +++ b/src/nativeMain/kotlin/fi/schro/data/ConfigurationRepository.kt @@ -15,6 +15,8 @@ interface ConfigurationRepository { class ConfigurationRepositoryImpl( private val lightRepository: LightRepository ): ConfigurationRepository { + private val timezone = TimeZone.currentSystemDefault() + override suspend fun applyConfiguration(configurationFilePath: String, lightAddress: String, port: Int?) { val configString = FileUtil.readAllText(configurationFilePath) val configuration = Json.decodeFromString(configString) @@ -28,13 +30,17 @@ class ConfigurationRepositoryImpl( } private fun determineCurrentStatus(configuration: Configuration): LightStatus? { - val currentTime = Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()) + val currentTime = Clock.System.now().toLocalDateTime(timezone) val currentDate = TimeUtil.getCurrentDate() return configuration.config.firstOrNull { timedConfiguration -> val start = currentDate.atTime(timedConfiguration.start) val end = currentDate.atTime(timedConfiguration.end) - currentTime in start..end + + //timespan crosses midnight + if(start > end){ + currentTime in currentDate.atTime(0,0) .. end || currentTime in start .. currentDate.atTime(24, 0) + } else currentTime in start..end }?.status } diff --git a/src/nativeMain/kotlin/fi/schro/data/LightRepository.kt b/src/nativeMain/kotlin/fi/schro/data/LightRepository.kt index 48abb7a..1f10167 100644 --- a/src/nativeMain/kotlin/fi/schro/data/LightRepository.kt +++ b/src/nativeMain/kotlin/fi/schro/data/LightRepository.kt @@ -11,9 +11,9 @@ interface LightRepository { @Serializable data class LightStatus( - @SerialName("power") val powerStatus: LightPowerStatus?, - @SerialName("brightness") val brightness: Int?, - @SerialName("temperature") val temperature: Int? + @SerialName("power") val powerStatus: LightPowerStatus? = null, + @SerialName("brightness") val brightness: Int? = null, + @SerialName("temperature") val temperature: Int? = null ){ override fun toString(): String { val stringList = mutableListOf()