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}