]> git.basschouten.com Git - openhab-addons.git/commitdiff
[astro] Trigger or not jobs restart when a positional channel is linked or unlinked...
authorlolodomo <lg.hc@free.fr>
Mon, 23 Nov 2020 18:17:18 +0000 (19:17 +0100)
committerGitHub <noreply@github.com>
Mon, 23 Nov 2020 18:17:18 +0000 (19:17 +0100)
Don't rely on calls to channelLinked at startup

Related to openhab/openhab-core#1707

Signed-off-by: Laurent Garnier <lg.hc@free.fr>
bundles/org.openhab.binding.astro/src/main/java/org/openhab/binding/astro/internal/handler/AstroThingHandler.java

index d5faa30340333325bde5f8acac67d4aba86817a6..043f978d1680e761e663581cf99eb204a44c7b3b 100644 (file)
@@ -82,7 +82,7 @@ public abstract class AstroThingHandler extends BaseThingHandler {
 
     private final Set<ScheduledFuture<?>> 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();
             }
         }