private final Set<ScheduledFuture<?>> scheduledFutures = new HashSet<>();
- private int linkedPositionalChannels = 0;
+ private boolean linkedPositionalChannels;
protected AstroThingConfig thingConfig = new AstroThingConfig();
// 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);
@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();
}
}