CalendarEvent - compute_next_value: support seconds

This commit is contained in:
Dietmar Maurer 2020-05-16 10:21:24 +02:00
parent d1a5ffdf78
commit 50ce1f987d
2 changed files with 20 additions and 2 deletions

View File

@ -142,7 +142,7 @@ pub fn compute_next_event(
utc: bool,
) -> Result<i64, Error> {
let last = last + 60; // at least one minute later
let last = last + 1; // at least one second later
let all_days = event.days.is_empty() || event.days.is_all();
@ -208,6 +208,22 @@ pub fn compute_next_event(
}
}
// this minute
if !event.second.is_empty() {
let second = t.sec() as u32;
if !DateTimeValue::list_contains(&event.second, second) {
if let Some(n) = DateTimeValue::find_next(&event.second, second) {
// test next second
t.set_sec(n as libc::c_int);
continue;
} else {
// test next min
t.set_min_sec(t.min() + 1, 0);
continue;
}
}
}
let next = t.into_epoch()?;
return Ok(next)
}
@ -263,7 +279,10 @@ mod test {
const THURSDAY_00_00: i64 = make_test_time(0, 0, 0);
const THURSDAY_15_00: i64 = make_test_time(0, 15, 0);
test_value("*:0", THURSDAY_00_00, THURSDAY_00_00 + HOUR)?;
test_value("*:*", THURSDAY_00_00, THURSDAY_00_00 + MIN)?;
test_value("*:*:*", THURSDAY_00_00, THURSDAY_00_00 + 1)?;
test_value("*:3:5", THURSDAY_00_00, THURSDAY_00_00 + 3*MIN + 5)?;
test_value("mon *:*", THURSDAY_00_00, THURSDAY_00_00 + 4*DAY)?;
test_value("mon 2:*", THURSDAY_00_00, THURSDAY_00_00 + 4*DAY + 2*HOUR)?;

View File

@ -44,7 +44,6 @@ impl TmEditor {
pub fn new(epoch: i64, utc: bool) -> Result<Self, Error> {
let mut t = if utc { gmtime(epoch)? } else { localtime(epoch)? };
t.tm_sec = 0; // we're not interested in seconds, actually
t.tm_year += 1900; // real years for clarity
Ok(Self { utc, t, changes: TMChanges::all() })
}