diff --git a/src-tauri/src/core/timer.rs b/src-tauri/src/core/timer.rs
index 57341f9838128d7447f325d7722332885ef4ee80..181c0d5bee06a720f0b8d6c55ef565c485e0c244 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());
+    self.refresh()?;
+
+    let cur_timestamp = get_now(); // seconds
     let profiles = self.core.as_ref().unwrap().profiles.lock();
-    let cur_timestamp = SystemTime::now()
-      .duration_since(UNIX_EPOCH)
-      .unwrap()
-      .as_secs() as usize;
-
-    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));
-      }
-    }
+
+    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));
+        }
+      });
+
     Ok(())
   }