✨ Only send an email if previous state was not a failure, too
[rhynodge.git] / src / main / java / net / pterodactylus / rhynodge / engine / ReactionRunner.java
index 0538a0f..45642ce 100644 (file)
@@ -49,8 +49,11 @@ public class ReactionRunner implements Runnable {
                state = runStateThroughFilters(state);
                if (!state.success()) {
                        logger.info(format("Reaction %s failed in %s.", reaction.name(), state));
+                       Optional<State> lastState = reactionState.loadLastState();
                        saveStateWithIncreasedFailCount(state);
-                       errorEmailAction.execute(createErrorOutput(reaction, state));
+                       if (thisFailureIsTheFirstFailure(lastState)) {
+                               errorEmailAction.execute(createErrorOutput(reaction, state));
+                       }
                        return;
                }
                Optional<State> lastSuccessfulState = reactionState.loadLastSuccessfulState();
@@ -69,6 +72,10 @@ public class ReactionRunner implements Runnable {
                logger.info(format("Reaction %s finished.", reaction.name()));
        }
 
+       private static boolean thisFailureIsTheFirstFailure(Optional<State> lastState) {
+               return lastState.map(State::success).orElse(true);
+       }
+
        private void saveStateWithIncreasedFailCount(State state) {
                Optional<State> lastState = reactionState.loadLastState();
                state.setFailCount(lastState.map(State::failCount).orElse(0) + 1);