From 3242efb1a29f1bfada2f3775268f67c746a51bdb Mon Sep 17 00:00:00 2001 From: GyDi Date: Tue, 23 Aug 2022 15:19:04 +0800 Subject: [PATCH] fix: reduce unsafe unwrap --- src-tauri/src/core/timer.rs | 51 +++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 28 deletions(-) diff --git a/src-tauri/src/core/timer.rs b/src-tauri/src/core/timer.rs index 57341f9..181c0d5 100644 --- a/src-tauri/src/core/timer.rs +++ b/src-tauri/src/core/timer.rs @@ -1,10 +1,9 @@ use super::Core; use crate::log_if_err; +use crate::utils::help::get_now; use anyhow::{bail, Context, Result}; use delay_timer::prelude::{DelayTimer, DelayTimerBuilder, TaskBuilder}; use std::collections::HashMap; -use std::ops::Mul; -use std::time::{SystemTime, UNIX_EPOCH}; type TaskID = u64; @@ -67,33 +66,29 @@ impl Timer { /// restore timer pub fn restore(&mut self) -> Result<()> { - log_if_err!(self.refresh()); - let profiles = self.core.as_ref().unwrap().profiles.lock(); - let cur_timestamp = SystemTime::now() - .duration_since(UNIX_EPOCH) - .unwrap() - .as_secs() as usize; + self.refresh()?; + + let cur_timestamp = get_now(); // seconds + let profiles = self.core.as_ref().unwrap().profiles.lock(); + + profiles + .get_items() + .unwrap_or(&vec![]) + .iter() + .filter(|item| item.uid.is_some() && item.updated.is_some() && item.option.is_some()) + .filter(|item| { + // mins to seconds + let interval = item.option.as_ref().unwrap().update_interval.unwrap_or(0) as usize * 60; + let updated = item.updated.unwrap(); + return interval > 0 && cur_timestamp - updated >= interval; + }) + .for_each(|item| { + let uid = item.uid.as_ref().unwrap(); + if let Some((task_id, _)) = self.timer_map.get(uid) { + log_if_err!(self.delay_timer.advance_task(*task_id)); + } + }); - for item in profiles.get_items().unwrap() { - // if current_time - last_update_time >= interval, cron job should execute immediately. - if cur_timestamp - item.updated.unwrap() - >= item - .option - .as_ref() - .unwrap() - .update_interval - .unwrap_or(0xffffffff) - .mul(60) // minute to secs - .try_into() - .unwrap() - { - let (task_id, _) = self - .timer_map - .get(&item.uid.as_ref().unwrap().clone()) - .unwrap(); - log_if_err!(self.delay_timer.advance_task(*task_id)); - } - } Ok(()) }