use std::rc::Rc;
use chrono::{DateTime, Duration, Utc};
use crate::config::Config;
#[derive(Debug)]
pub struct App {
config: Rc<Config>,
pub selected: usize,
pub time_offset: Duration,
}
impl App {
pub fn new(config: Config) -> Self {
App {
config: Rc::new(config),
selected: 0,
time_offset: Duration::zero(),
}
}
#[allow(dead_code)]
pub fn config(&self) -> &Config {
&self.config
}
pub fn timezone_count(&self) -> usize {
self.config.timezones.len()
}
#[allow(dead_code)]
pub fn current_time(&self) -> DateTime<Utc> {
Utc::now() + self.time_offset
}
pub fn adjust_time_forward(&mut self, minutes: i64) {
self.time_offset += Duration::minutes(minutes);
}
pub fn adjust_time_backward(&mut self, minutes: i64) {
self.time_offset -= Duration::minutes(minutes);
}
pub fn next(&mut self) {
let len = self.timezone_count();
if len > 0 {
self.selected = (self.selected + 1) % len;
}
}
pub fn previous(&mut self) {
let len = self.timezone_count();
if len > 0 {
self.selected = (self.selected + len - 1) % len;
}
}
}