Files
2026-07-03 00:32:48 +02:00

27 lines
1002 B
Go

package delivery
import "time"
// ShouldRepeat — PURE: given the last send ts, whether the send was acked, the
// current time, and the repeat interval, decide whether to re-send a sev4
// telegram nudge.
//
// "telegram, repeat til ack" — a disk-fire alarm at 2am repeats on telegram
// until the user acknowledges. this is the decision the daemon's tick loop
// calls each cycle (via Dispatcher.RepeatUnacked). acked ⇒ stop. interval
// elapsed since last send ⇒ re-send. otherwise wait.
//
// lastSent.IsZero() ⇒ never sent; the INITIAL dispatch handles that (not the
// repeat path). returning true here is harmless — the caller will send and
// MarkSent, which sets the clock. fail-safe: when in doubt, send (a missed
// disk-fire alarm is the cost we're optimizing against).
func ShouldRepeat(lastSent time.Time, acked bool, now time.Time, interval time.Duration) bool {
if acked {
return false
}
if lastSent.IsZero() {
return true
}
return now.Sub(lastSent) >= interval
}