diff --git a/common/src/main/java/ctbrec/recorder/OnlineMonitor.java b/common/src/main/java/ctbrec/recorder/OnlineMonitor.java index d2b83c65..5d8393b3 100644 --- a/common/src/main/java/ctbrec/recorder/OnlineMonitor.java +++ b/common/src/main/java/ctbrec/recorder/OnlineMonitor.java @@ -77,7 +77,9 @@ public class OnlineMonitor extends Thread { boolean skipCheckForSuspended = config.getSettings().onlineCheckSkipsPausedModels && model.isSuspended(); boolean skipCheckForMarkedAsLater = model.isMarkedForLaterRecording(); if (skipCheckForSuspended || skipCheckForMarkedAsLater) { - continue; + // force set offline in case model was suspended while online + // TODO: check if this is thread safe + setModelStateNotified(model, Model.State.OFFLINE); } else { futures.add(updateModel(model)); } @@ -97,6 +99,14 @@ public class OnlineMonitor extends Thread { } } } + + private void setModelStateNotified(Model model, Model.State state) { + Model.State oldState = states.getOrDefault(model, UNKNOWN); + states.put(model, state); + if (state != oldState) { + EventBusHolder.BUS.post(new ModelStateChangedEvent(model, oldState, state)); + } + } private ModelAwareFuture updateModel(Model model) { final String siteName = model.getSite().getName(); @@ -121,11 +131,7 @@ public class OnlineMonitor extends Thread { state = model.getOnlineState(false); } LOG.debug("Model online state: {} {}", model.getName(), state); - Model.State oldState = states.getOrDefault(model, UNKNOWN); - states.put(model, state); - if (state != oldState) { - EventBusHolder.BUS.post(new ModelStateChangedEvent(model, oldState, state)); - } + setModelStateNotified(model, state); } catch (HttpException e) { LOG.error("Couldn't check if model {} is online. HTTP Response: {} - {}", model.getName(), e.getResponseCode(), e.getResponseMessage()); } catch (SocketTimeoutException e) {