CalendarEvent - compute_next_value: support seconds
This commit is contained in:
parent
d1a5ffdf78
commit
50ce1f987d
|
@ -142,7 +142,7 @@ pub fn compute_next_event(
|
||||||
utc: bool,
|
utc: bool,
|
||||||
) -> Result<i64, Error> {
|
) -> 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();
|
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()?;
|
let next = t.into_epoch()?;
|
||||||
return Ok(next)
|
return Ok(next)
|
||||||
}
|
}
|
||||||
|
@ -263,7 +279,10 @@ mod test {
|
||||||
const THURSDAY_00_00: i64 = make_test_time(0, 0, 0);
|
const THURSDAY_00_00: i64 = make_test_time(0, 0, 0);
|
||||||
const THURSDAY_15_00: i64 = make_test_time(0, 15, 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 + 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 *:*", THURSDAY_00_00, THURSDAY_00_00 + 4*DAY)?;
|
||||||
test_value("mon 2:*", THURSDAY_00_00, THURSDAY_00_00 + 4*DAY + 2*HOUR)?;
|
test_value("mon 2:*", THURSDAY_00_00, THURSDAY_00_00 + 4*DAY + 2*HOUR)?;
|
||||||
|
|
|
@ -44,7 +44,6 @@ impl TmEditor {
|
||||||
|
|
||||||
pub fn new(epoch: i64, utc: bool) -> Result<Self, Error> {
|
pub fn new(epoch: i64, utc: bool) -> Result<Self, Error> {
|
||||||
let mut t = if utc { gmtime(epoch)? } else { localtime(epoch)? };
|
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
|
t.tm_year += 1900; // real years for clarity
|
||||||
Ok(Self { utc, t, changes: TMChanges::all() })
|
Ok(Self { utc, t, changes: TMChanges::all() })
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue