Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- fn service_thread() {
- let one_day = Duration::from_secs(24 * 3600);
- let five_minutes = Duration::from_secs(5 * 60);
- loop {
- thread::sleep(try_update(five_minutes, one_day));
- }
- }
- fn try_update(sleep_after_fail: Duration, sleep_after_success: Duration) -> Duration {
- let update_file_path = get_update_file_path();
- let update_file_path = match update_file_path {
- Ok(value) => value,
- Err(_) => return sleep_after_fail,
- };
- let file = fs::File::open(update_file_path);
- let mut file = match file {
- Ok(value) => value,
- Err(_) => return sleep_after_fail,
- };
- let update_status = UpdateStatus::load(&file);
- let update_status = match update_status {
- Ok(value) => value,
- Err(_) => {
- file.set_len(0);
- UpdateStatus::from_result(update_status).store(&mut file);
- return sleep_after_fail;
- }
- };
- let passed_since_update = update_status.last_updated.elapsed();
- let passed_since_update = match passed_since_update {
- Ok(value) => value,
- Err(_) => {
- file.set_len(0);
- UpdateStatus::from_result(passed_since_update).store(&mut file);
- return sleep_after_fail;
- }
- };
- if update_status.success && passed_since_update < sleep_after_success {
- thread::sleep(sleep_after_success - passed_since_update);
- }
- let update_status = UpdateStatus::from_result(update());
- if update_status.success {
- return sleep_after_success;
- };
- sleep_after_fail
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement