thisweek_core/
today.rs

1use crate::calendar::Calendar;
2use crate::config;
3use crate::language::Language;
4use crate::prelude::Result as AppResult;
5use crate::time;
6use chrono::Local;
7use serde::Serialize;
8
9use crate::week_info::{Date, DateView};
10
11#[derive(Serialize, Clone)]
12pub struct Today {
13    main_date: Date,
14    main_date_view: DateView,
15    aux_date_view: Option<DateView>,
16}
17
18impl Default for Today {
19    fn default() -> Self {
20        Self::new()
21    }
22}
23
24impl Today {
25    pub fn new() -> Today {
26        let main_calendar: Calendar = config::get_config().main_calendar_type.into();
27        let main_language: Language = config::get_config().main_calendar_language.into();
28        let aux_calendar: Option<Calendar> = config::get_config()
29            .secondary_calendar_type
30            .map(|cal| cal.into());
31        let today = Local::now();
32        let day = time::get_unix_day_from_local_datetime(today);
33        let main_date = get_today_date(&main_calendar);
34        let main_date_view = main_calendar.get_date_view(day, &main_language);
35        let aux_date_view = aux_calendar.map(|cal| {
36            let aux_language: Language = config::get_config()
37                .secondary_calendar_language
38                .unwrap_or_default()
39                .into();
40            cal.get_date_view(day, &aux_language)
41        });
42        Today {
43            main_date,
44            main_date_view,
45            aux_date_view,
46        }
47    }
48
49    pub fn update(&mut self) -> AppResult<()> {
50        *self = Today::new();
51        Ok(())
52    }
53}
54
55pub fn get_today_date(calendar: &Calendar) -> Date {
56    let today = Local::now();
57    let day = time::get_unix_day_from_local_datetime(today);
58    calendar.get_date(day)
59}
60
61pub fn get_unix_day() -> i32 {
62    let today = Local::now();
63    time::get_unix_day_from_local_datetime(today)
64}