use crate::git;
use std::sync::mpsc::{self, Receiver};
use std::thread;
use std::time::Duration;
pub struct Fetcher {
done: Receiver<()>,
}
impl Fetcher {
pub fn start(enabled: bool) -> Option<Self> {
let (config_enabled, interval) = git::auto_fetch_config();
if !enabled || !config_enabled || !git::has_remotes() {
return None;
}
let (tx, done) = mpsc::channel();
thread::spawn(move || {
loop {
if git::fetch_quietly() && tx.send(()).is_err() {
return;
}
if interval == 0 {
return;
}
thread::sleep(Duration::from_secs(interval));
}
});
Some(Self { done })
}
pub fn fetched(&self) -> bool {
self.done.try_iter().count() > 0
}
}