handle timespans crossing midnight, make status params optional
parent
6ba0952486
commit
fa1e4eb966
|
@ -15,6 +15,8 @@ interface ConfigurationRepository {
|
||||||
class ConfigurationRepositoryImpl(
|
class ConfigurationRepositoryImpl(
|
||||||
private val lightRepository: LightRepository
|
private val lightRepository: LightRepository
|
||||||
): ConfigurationRepository {
|
): ConfigurationRepository {
|
||||||
|
private val timezone = TimeZone.currentSystemDefault()
|
||||||
|
|
||||||
override suspend fun applyConfiguration(configurationFilePath: String, lightAddress: String, port: Int?) {
|
override suspend fun applyConfiguration(configurationFilePath: String, lightAddress: String, port: Int?) {
|
||||||
val configString = FileUtil.readAllText(configurationFilePath)
|
val configString = FileUtil.readAllText(configurationFilePath)
|
||||||
val configuration = Json.decodeFromString<Configuration>(configString)
|
val configuration = Json.decodeFromString<Configuration>(configString)
|
||||||
|
@ -28,13 +30,17 @@ class ConfigurationRepositoryImpl(
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun determineCurrentStatus(configuration: Configuration): LightStatus? {
|
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()
|
val currentDate = TimeUtil.getCurrentDate()
|
||||||
|
|
||||||
return configuration.config.firstOrNull { timedConfiguration ->
|
return configuration.config.firstOrNull { timedConfiguration ->
|
||||||
val start = currentDate.atTime(timedConfiguration.start)
|
val start = currentDate.atTime(timedConfiguration.start)
|
||||||
val end = currentDate.atTime(timedConfiguration.end)
|
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
|
}?.status
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,9 +11,9 @@ interface LightRepository {
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class LightStatus(
|
data class LightStatus(
|
||||||
@SerialName("power") val powerStatus: LightPowerStatus?,
|
@SerialName("power") val powerStatus: LightPowerStatus? = null,
|
||||||
@SerialName("brightness") val brightness: Int?,
|
@SerialName("brightness") val brightness: Int? = null,
|
||||||
@SerialName("temperature") val temperature: Int?
|
@SerialName("temperature") val temperature: Int? = null
|
||||||
){
|
){
|
||||||
override fun toString(): String {
|
override fun toString(): String {
|
||||||
val stringList = mutableListOf<String>()
|
val stringList = mutableListOf<String>()
|
||||||
|
|
Loading…
Reference in New Issue