fix: Propagate non-TZ and non-DST time changes to the pod at the most once per day

This commit is contained in:
Sam Spycher 2021-10-11 21:15:36 +02:00
parent 252cc685a4
commit 887e5073d0

View file

@ -14,7 +14,9 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.Duration; import org.joda.time.Duration;
import org.joda.time.Instant;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
@ -148,6 +150,7 @@ public class OmnipodErosPumpPlugin extends PumpPluginBase implements Pump, Riley
// variables for handling statuses and history // variables for handling statuses and history
private boolean firstRun = true; private boolean firstRun = true;
private boolean hasTimeDateOrTimeZoneChanged = false; private boolean hasTimeDateOrTimeZoneChanged = false;
private Instant lastTimeDateOrTimeZoneUpdate = Instant.ofEpochSecond(0L);
private final boolean displayConnectionMessages = false; private final boolean displayConnectionMessages = false;
private RileyLinkOmnipodService rileyLinkOmnipodService; private RileyLinkOmnipodService rileyLinkOmnipodService;
private boolean busy = false; private boolean busy = false;
@ -958,15 +961,18 @@ public class OmnipodErosPumpPlugin extends PumpPluginBase implements Pump, Riley
public void timezoneOrDSTChanged(TimeChangeType timeChangeType) { public void timezoneOrDSTChanged(TimeChangeType timeChangeType) {
aapsLogger.info(LTag.PUMP, "Time, Date and/or TimeZone changed. [changeType=" + timeChangeType.name() + ", eventHandlingEnabled=" + aapsOmnipodErosManager.isTimeChangeEventEnabled() + "]"); aapsLogger.info(LTag.PUMP, "Time, Date and/or TimeZone changed. [changeType=" + timeChangeType.name() + ", eventHandlingEnabled=" + aapsOmnipodErosManager.isTimeChangeEventEnabled() + "]");
if (timeChangeType == TimeChangeType.TimeChanged) { Instant now = Instant.now();
aapsLogger.info(LTag.PUMP, "Ignoring time change because it is not a DST or TZ change"); if (timeChangeType == TimeChangeType.TimeChanged && now.isBefore(lastTimeDateOrTimeZoneUpdate.plus(Duration.standardDays(1L)))){
aapsLogger.info(LTag.PUMP, "Ignoring time change because not a TZ or DST time change and the last one happened less than 24 hours ago.");
return; return;
} else if (!podStateManager.isPodRunning()) { }
if (!podStateManager.isPodRunning()) {
aapsLogger.info(LTag.PUMP, "Ignoring time change because no Pod is active"); aapsLogger.info(LTag.PUMP, "Ignoring time change because no Pod is active");
return; return;
} }
aapsLogger.info(LTag.PUMP, "DST and/or TimeZone changed event will be consumed by driver"); aapsLogger.info(LTag.PUMP, "DST and/or TimeZone changed event will be consumed by driver");
lastTimeDateOrTimeZoneUpdate = now;
hasTimeDateOrTimeZoneChanged = true; hasTimeDateOrTimeZoneChanged = true;
} }