diff --git a/app/src/main/java/net/vonforst/evmap/api/availability/AvailabilityDetector.kt b/app/src/main/java/net/vonforst/evmap/api/availability/AvailabilityDetector.kt index efb7de57..2c37a1c0 100644 --- a/app/src/main/java/net/vonforst/evmap/api/availability/AvailabilityDetector.kt +++ b/app/src/main/java/net/vonforst/evmap/api/availability/AvailabilityDetector.kt @@ -21,6 +21,7 @@ import java.util.concurrent.TimeUnit interface AvailabilityDetector { suspend fun getAvailability(location: ChargeLocation): ChargeLocationStatus + fun isCountrySupported(country: String, dataSource: String): Boolean } abstract class BaseAvailabilityDetector(private val client: OkHttpClient) : AvailabilityDetector { @@ -157,8 +158,8 @@ private val okhttp = OkHttpClient.Builder() .cookieJar(JavaNetCookieJar(cookieManager)) .build() val availabilityDetectors = listOf( - NewMotionAvailabilityDetector(okhttp), - EnBwAvailabilityDetector(okhttp) + EnBwAvailabilityDetector(okhttp), + NewMotionAvailabilityDetector(okhttp) /*ChargecloudAvailabilityDetector( okhttp, "606a0da0dfdd338ee4134605653d4fd8" @@ -171,8 +172,12 @@ val availabilityDetectors = listOf( suspend fun getAvailability(charger: ChargeLocation): Resource { var value: Resource? = null + val country = charger.chargepriceData?.country + ?: charger.address?.country + ?: return Resource.error(null, null) withContext(Dispatchers.IO) { for (ad in availabilityDetectors) { + if (!ad.isCountrySupported(country, charger.dataSource)) continue try { value = Resource.success(ad.getAvailability(charger)) break diff --git a/app/src/main/java/net/vonforst/evmap/api/availability/ChargecloudAvailabilityDetector.kt b/app/src/main/java/net/vonforst/evmap/api/availability/ChargecloudAvailabilityDetector.kt index d26a00c0..907c0f8d 100644 --- a/app/src/main/java/net/vonforst/evmap/api/availability/ChargecloudAvailabilityDetector.kt +++ b/app/src/main/java/net/vonforst/evmap/api/availability/ChargecloudAvailabilityDetector.kt @@ -80,6 +80,10 @@ class ChargecloudAvailabilityDetector( } } + override fun isCountrySupported(country: String, dataSource: String): Boolean { + TODO("Not yet implemented") + } + private fun getType(string: String): String { return when (string) { "IEC_62196_T2" -> Chargepoint.TYPE_2_UNKNOWN diff --git a/app/src/main/java/net/vonforst/evmap/api/availability/EnBwAvailabilityDetector.kt b/app/src/main/java/net/vonforst/evmap/api/availability/EnBwAvailabilityDetector.kt index a85e47c5..8666bd8b 100644 --- a/app/src/main/java/net/vonforst/evmap/api/availability/EnBwAvailabilityDetector.kt +++ b/app/src/main/java/net/vonforst/evmap/api/availability/EnBwAvailabilityDetector.kt @@ -194,4 +194,32 @@ class EnBwAvailabilityDetector(client: OkHttpClient, baseUrl: String? = null) : ) } + override fun isCountrySupported(country: String, dataSource: String): Boolean = + when (dataSource) { + // list of countries as of 2021/06/30, according to + // https://www.electrive.net/2021/06/30/enbw-expandiert-mit-ladenetz-in-drei-weitere-laender/ + "goingelectric" -> country in listOf( + "Deutschland", + "Österreich", + "Schweiz", + "Frankreich", + "Belgien", + "Niederlande", + "Luxemburg", + "Liechtenstein", + "Italien", + ) + "openchargemap" -> country in listOf( + "DE", + "AT", + "CH", + "FR", + "BE", + "NE", + "LU", + "LI", + "IT" + ) + else -> false + } } \ No newline at end of file diff --git a/app/src/main/java/net/vonforst/evmap/api/availability/NewMotionAvailabilityDetector.kt b/app/src/main/java/net/vonforst/evmap/api/availability/NewMotionAvailabilityDetector.kt index 4b757246..caeec911 100644 --- a/app/src/main/java/net/vonforst/evmap/api/availability/NewMotionAvailabilityDetector.kt +++ b/app/src/main/java/net/vonforst/evmap/api/availability/NewMotionAvailabilityDetector.kt @@ -173,4 +173,9 @@ class NewMotionAvailabilityDetector(client: OkHttpClient, baseUrl: String? = nul ) } + override fun isCountrySupported(country: String, dataSource: String): Boolean { + // NewMotion is our fallback + return true + } + } \ No newline at end of file