From ba98ef30e920b2d20b29b8aa97602c461d542de5 Mon Sep 17 00:00:00 2001 From: lolodomo Date: Mon, 23 Nov 2020 19:17:18 +0100 Subject: [PATCH] [astro] Trigger or not jobs restart when a positional channel is linked or unlinked (#9104) Don't rely on calls to channelLinked at startup Related to openhab/openhab-core#1707 Signed-off-by: Laurent Garnier --- .../internal/handler/AstroThingHandler.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/bundles/org.openhab.binding.astro/src/main/java/org/openhab/binding/astro/internal/handler/AstroThingHandler.java b/bundles/org.openhab.binding.astro/src/main/java/org/openhab/binding/astro/internal/handler/AstroThingHandler.java index d5faa30340..043f978d16 100644 --- a/bundles/org.openhab.binding.astro/src/main/java/org/openhab/binding/astro/internal/handler/AstroThingHandler.java +++ b/bundles/org.openhab.binding.astro/src/main/java/org/openhab/binding/astro/internal/handler/AstroThingHandler.java @@ -82,7 +82,7 @@ public abstract class AstroThingHandler extends BaseThingHandler { private final Set> scheduledFutures = new HashSet<>(); - private int linkedPositionalChannels = 0; + private boolean linkedPositionalChannels; protected AstroThingConfig thingConfig = new AstroThingConfig(); @@ -204,7 +204,8 @@ public abstract class AstroThingHandler extends BaseThingHandler { // Repeat positional job every configured seconds // Use scheduleAtFixedRate to avoid time drift associated with scheduleWithFixedDelay - if (isPositionalChannelLinked()) { + linkedPositionalChannels = isPositionalChannelLinked(); + if (linkedPositionalChannels) { Job positionalJob = new PositionalJob(thingUID); ScheduledFuture future = scheduler.scheduleAtFixedRate(positionalJob, 0, thingConfig.interval, TimeUnit.SECONDS); @@ -244,23 +245,23 @@ public abstract class AstroThingHandler extends BaseThingHandler { @Override public void channelLinked(ChannelUID channelUID) { - linkedChannelChange(channelUID, 1); + linkedChannelChange(channelUID); publishChannelIfLinked(channelUID); } @Override public void channelUnlinked(ChannelUID channelUID) { - linkedChannelChange(channelUID, -1); + linkedChannelChange(channelUID); } /** * Counts positional channels and restarts Astro jobs. */ - private void linkedChannelChange(ChannelUID channelUID, int step) { + private void linkedChannelChange(ChannelUID channelUID) { if (Arrays.asList(getPositionalChannelIds()).contains(channelUID.getId())) { - int oldValue = linkedPositionalChannels; - linkedPositionalChannels += step; - if (oldValue == 0 && linkedPositionalChannels > 0 || oldValue > 0 && linkedPositionalChannels == 0) { + boolean oldValue = linkedPositionalChannels; + linkedPositionalChannels = isPositionalChannelLinked(); + if (oldValue != linkedPositionalChannels) { restartJobs(); } } -- 2.47.3