diff --git a/app/src/main/java/net/vonforst/evmap/api/goingelectric/GoingElectricApi.kt b/app/src/main/java/net/vonforst/evmap/api/goingelectric/GoingElectricApi.kt index b7d82f52..47aac750 100644 --- a/app/src/main/java/net/vonforst/evmap/api/goingelectric/GoingElectricApi.kt +++ b/app/src/main/java/net/vonforst/evmap/api/goingelectric/GoingElectricApi.kt @@ -217,7 +217,7 @@ class GoingElectricApiWrapper( } } while (startkey != null && startkey < 10000) - val result = postprocessResult(data, minPower, connectorsVal, minConnectors) + val result = postprocessResult(data, filters) return Resource.success(ChargepointList(result, startkey == null)) } @@ -308,18 +308,24 @@ class GoingElectricApiWrapper( } } while (startkey != null && startkey < 10000) - val result = postprocessResult(data, minPower, connectorsVal, minConnectors) + val result = postprocessResult(data, filters) return Resource.success(ChargepointList(result, startkey == null)) } private fun postprocessResult( chargers: List, - minPower: Int?, - connectorsVal: MultipleChoiceFilterValue?, - minConnectors: Int? + filters: FilterValues? ): List { - // apply filters which GoingElectric does not support natively + val minPower = filters?.getSliderValue("min_power") + val minConnectors = filters?.getSliderValue("min_connectors") + val connectorsVal = filters?.getMultipleChoiceValue("connectors") + val freecharging = filters?.getBooleanValue("freecharging") + val freeparking = filters?.getBooleanValue("freeparking") + val open247 = filters?.getBooleanValue("open_247") + val barrierfree = filters?.getBooleanValue("barrierfree") + return chargers.filter { it -> + // apply filters which GoingElectric does not support natively if (it is GEChargeLocation) { it.chargepoints .filter { it.power >= (minPower ?: 0) } @@ -328,6 +334,34 @@ class GoingElectricApiWrapper( } else { true } + }.map { + // infer some properties based on applied filters + if (it is GEChargeLocation) { + var inferred = it + if (freecharging == true) { + inferred = inferred.copy( + cost = inferred.cost?.copy(freecharging = true) + ?: GECost(freecharging = true) + ) + } + if (freeparking == true) { + inferred = inferred.copy( + cost = inferred.cost?.copy(freeparking = true) ?: GECost(freeparking = true) + ) + } + if (open247 == true) { + inferred = inferred.copy( + openinghours = inferred.openinghours?.copy(twentyfourSeven = true) + ?: GEOpeningHours(twentyfourSeven = true) + ) + } + if (barrierfree == true) { + inferred = inferred.copy(barrierFree = true) + } + inferred + } else { + it + } }.map { it.convert(apikey, false) } } diff --git a/app/src/main/java/net/vonforst/evmap/api/goingelectric/GoingElectricModel.kt b/app/src/main/java/net/vonforst/evmap/api/goingelectric/GoingElectricModel.kt index 71284198..a486d3df 100644 --- a/app/src/main/java/net/vonforst/evmap/api/goingelectric/GoingElectricModel.kt +++ b/app/src/main/java/net/vonforst/evmap/api/goingelectric/GoingElectricModel.kt @@ -86,10 +86,10 @@ data class GEChargeLocation( @JsonClass(generateAdapter = true) data class GECost( - val freecharging: Boolean, - val freeparking: Boolean, - @JsonObjectOrFalse @Json(name = "description_short") val descriptionShort: String?, - @JsonObjectOrFalse @Json(name = "description_long") val descriptionLong: String? + val freecharging: Boolean = false, + val freeparking: Boolean = false, + @JsonObjectOrFalse @Json(name = "description_short") val descriptionShort: String? = null, + @JsonObjectOrFalse @Json(name = "description_long") val descriptionLong: String? = null ) { fun convert() = Cost( // In GE, freecharging = false can either mean "paid charging" or "no information @@ -104,8 +104,8 @@ data class GECost( @JsonClass(generateAdapter = true) data class GEOpeningHours( @Json(name = "24/7") val twentyfourSeven: Boolean, - @JsonObjectOrFalse val description: String?, - val days: GEOpeningHoursDays? + @JsonObjectOrFalse val description: String? = null, + val days: GEOpeningHoursDays? = null ) { fun convert() = OpeningHours(twentyfourSeven, description, days?.convert()) }