#[macro_use]
extern crate diesel;
use std::sync::{Arc, Mutex};
use diesel::{Connection, RunQueryDsl};
use toggl_api::Toggl;
use crate::model::TimeEntry;
mod config;
mod daemon;
mod model;
mod schema;
#[tokio::main]
async fn main() {
let config = config::Config::parse();
let toggl = Toggl::new(config.credentials.clone()).unwrap();
let database_url = std::env::var("DATABASE_URL").expect("DATABASE_URL must be set");
let db = Arc::new(Mutex::new(
diesel::SqliteConnection::establish(&database_url).unwrap(),
));
let mut daemon = crate::daemon::Daemon::new(toggl, db.clone());
loop {
let _ = daemon.sync().await;
tokio::time::sleep(chrono::Duration::seconds(5).to_std().unwrap()).await;
let all_entries = {
use crate::schema::time_entries::dsl::*;
time_entries
.load::<TimeEntry>(&mut *db.lock().unwrap())
.unwrap()
};
println!("----------------");
for entry in &all_entries {
println!(
"{} ({} - {})",
entry.description,
entry.start,
entry
.stop
.map_or_else(|| "...".to_string(), |t| t.to_string())
);
}
}
}