[READ-ONLY] Mirror of https://github.com/probablykasper/remind-me-again. Toggleable cron reminders app for Mac, Linux and Windows
linux macos notifications reminder tauri windows
0

Configure Feed

Select the types of activity you want to include in your feed.

Yeet separate runtime

Kasper (Jul 11, 2022, 11:07 PM +0200) 2ac5e6a4 952c6e73

+22 -39
+1 -1
src-tauri/src/main.rs
··· 54 54 }]; 55 55 let instance = Instance { 56 56 groups, 57 - bg_handle: None, 57 + scheduler: None, 58 58 bundle_identifier: ctx.config().tauri.bundle.identifier.clone(), 59 59 }; 60 60
+21 -38
src-tauri/src/notifications.rs
··· 54 54 } 55 55 } 56 56 57 - use once_cell::sync::Lazy; 58 - static SCHEDULER_MUTEX: Lazy<Mutex<Option<Scheduler<Local>>>> = Lazy::new(|| Mutex::new(None)); 59 - 60 - #[tokio::main] 61 - async fn runtime(groups: Vec<Group>, bundle_identifier: String) -> Result<(), String> { 62 - let (mut scheduler, sched_service) = Scheduler::<Local>::launch(tokio::time::sleep); 63 - 64 - let mut errors = Vec::new(); 65 - for mut group in groups { 66 - match group.create_job(&mut scheduler, bundle_identifier.clone()) { 67 - Ok(_) => {} 68 - Err(e) => errors.push(e), 69 - }; 70 - } 71 - match errors.get(0) { 72 - Some(e) => { 73 - dialog::MessageDialogBuilder::new("Error", e).show(|_| {}); 74 - } 75 - None => {} 76 - } 77 - 78 - { 79 - let mut scheduler_locked = SCHEDULER_MUTEX.lock().unwrap(); 80 - *scheduler_locked = Some(scheduler); 81 - } 82 - sched_service.await; 83 - Ok(()) 84 - } 85 - 86 57 pub struct Instance { 87 58 pub groups: Vec<Group>, 88 - pub bg_handle: Option<std::thread::JoinHandle<Result<(), String>>>, 59 + pub scheduler: Option<Scheduler<Local>>, 89 60 pub bundle_identifier: String, 90 61 } 91 62 impl Instance { 92 63 pub fn add_group(&mut self, mut group: Group) -> Result<(), String> { 93 - let mut scheduler = SCHEDULER_MUTEX.lock().unwrap(); 94 - match &mut *scheduler { 64 + match &mut self.scheduler { 95 65 Some(scheduler) => { 96 66 group.create_job(scheduler, self.bundle_identifier.clone())?; 97 67 self.groups.push(group); ··· 118 88 panic!("Error generating ID: Generated IDs already exist") 119 89 } 120 90 pub fn delete_group(&mut self, index: usize) { 121 - let mut scheduler = SCHEDULER_MUTEX.lock().unwrap(); 122 - let scheduler = match &mut *scheduler { 91 + let scheduler = match &mut self.scheduler { 123 92 Some(scheduler) => scheduler, 124 93 None => { 125 94 self.groups.remove(index); ··· 136 105 let groups = self.groups.clone(); 137 106 let bundle_identifier = self.bundle_identifier.clone(); 138 107 139 - let tokio_thread = std::thread::spawn(|| { 140 - return runtime(groups, bundle_identifier); 141 - }); 142 - self.bg_handle = Some(tokio_thread); 108 + let (mut scheduler, sched_service) = Scheduler::<Local>::launch(tokio::time::sleep); 109 + 110 + let mut errors = Vec::new(); 111 + for mut group in groups { 112 + match group.create_job(&mut scheduler, bundle_identifier.clone()) { 113 + Ok(_) => {} 114 + Err(e) => errors.push(e), 115 + }; 116 + } 117 + match errors.get(0) { 118 + Some(e) => { 119 + dialog::MessageDialogBuilder::new("Error", e).show(|_| {}); 120 + } 121 + None => {} 122 + } 123 + 124 + self.scheduler = Some(scheduler); 125 + tauri::async_runtime::spawn(sched_service); 143 126 } 144 127 } 145 128