From: lolodomo Date: Sun, 30 May 2021 07:37:10 +0000 (+0200) Subject: [homeconnect] Retrieve list of programs when an appliance becomes available (#10773) X-Git-Url: https://git.basschouten.com/?a=commitdiff_plain;h=f99f4b6361e32e41adfc9cf21cb6a6e876ebee27;p=openhab-addons.git [homeconnect] Retrieve list of programs when an appliance becomes available (#10773) Cache the list of programs for an appliance Fix #10771 Signed-off-by: Laurent Garnier --- diff --git a/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/client/HomeConnectApiClient.java b/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/client/HomeConnectApiClient.java index 8405f6685d..c72a1cd0d2 100644 --- a/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/client/HomeConnectApiClient.java +++ b/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/client/HomeConnectApiClient.java @@ -80,6 +80,7 @@ public class HomeConnectApiClient { private final HttpClient client; private final String apiUrl; private final Map> availableProgramOptionsCache; + private final Map> programsCache; private final OAuthClientService oAuthClientService; private final CircularQueue communicationQueue; private final ApiBridgeConfiguration apiBridgeConfiguration; @@ -91,6 +92,7 @@ public class HomeConnectApiClient { this.apiBridgeConfiguration = apiBridgeConfiguration; availableProgramOptionsCache = new ConcurrentHashMap<>(); + programsCache = new ConcurrentHashMap<>(); apiUrl = simulated ? API_SIMULATOR_BASE_URL : API_BASE_URL; communicationQueue = new CircularQueue<>(COMMUNICATION_QUEUE_SIZE); if (apiRequestHistory != null) { @@ -610,7 +612,16 @@ public class HomeConnectApiClient { public List getPrograms(String haId) throws CommunicationException, AuthorizationException, ApplianceOfflineException { - return getAvailablePrograms(haId, BASE_PATH + haId + "/programs"); + List programs; + if (programsCache.containsKey(haId)) { + logger.debug("Returning cached programs for '{}'.", haId); + programs = programsCache.get(haId); + programs = programs != null ? programs : Collections.emptyList(); + } else { + programs = getAvailablePrograms(haId, BASE_PATH + haId + "/programs"); + programsCache.put(haId, programs); + } + return programs; } public List getAvailablePrograms(String haId) diff --git a/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/AbstractHomeConnectThingHandler.java b/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/AbstractHomeConnectThingHandler.java index 45399feb81..344bf511e3 100644 --- a/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/AbstractHomeConnectThingHandler.java +++ b/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/AbstractHomeConnectThingHandler.java @@ -248,6 +248,7 @@ public abstract class AbstractHomeConnectThingHandler extends BaseThingHandler i } else if (isThingOffline() && !KEEP_ALIVE.equals(event.getType())) { updateStatus(ONLINE); logger.debug("Set {} to ONLINE and update channels. haId={}", getThing().getLabel(), getThingHaId()); + updateSelectedProgramStateDescription(); updateChannels(); }