37: Add re-armable CROSSING alarm trigger

This commit is contained in:
2026-08-05 10:12:38 +02:00
parent e59aff95b8
commit d2f28af1bc
4 changed files with 39 additions and 2 deletions
@@ -94,6 +94,10 @@ public final class AlarmConfigurationParser {
return new TriggerConfiguration(AlarmTrigger.ONETIME, 0);
}
if (normalized.equals("CROSSING")) {
return new TriggerConfiguration(AlarmTrigger.CROSSING, 0);
}
if (normalized.equals("PERSISTENT")) {
return new TriggerConfiguration(AlarmTrigger.PERSISTENT, 0);
}
@@ -128,6 +132,10 @@ public final class AlarmConfigurationParser {
throw new IllegalArgumentException("ONETIME cannot have a grace period: " + triggerText);
}
if (normalized.startsWith("CROSSING:")) {
throw new IllegalArgumentException("CROSSING cannot have a grace period: " + triggerText);
}
throw new IllegalArgumentException("Unknown trigger: " + triggerText);
}
@@ -2,5 +2,6 @@ package com.r35157.jupiterperpsalarm.impl.ref;
public enum AlarmTrigger {
ONETIME,
CROSSING,
PERSISTENT
}
@@ -41,6 +41,10 @@ public final class PriceAlarm {
? reached
: reached && !previousReached;
boolean crossedIntoTriggeredSide = previousReached != null
&& reached
&& !previousReached;
previousReached = reached;
if (!reached) {
@@ -57,6 +61,13 @@ public final class PriceAlarm {
return;
}
if (definition.trigger() == AlarmTrigger.CROSSING) {
if (crossedIntoTriggeredSide) {
trigger(price, condition);
}
return;
}
if (definition.trigger() == AlarmTrigger.PERSISTENT) {
if (lastTriggeredAt == null || persistentGracePeriodHasPassed()) {
trigger(price, condition);