thisweek_core/
today.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/* Today */
use crate::calendar::gregorian::GregorianCalendar;
use crate::calendar::persian::PersianCalendar;
use crate::calendar::Calendar;
use crate::config;
use crate::language::Language;
use crate::prelude::Result as AppResult;
use serde::Serialize;

use crate::week_info::{Date, DateView};

#[derive(Serialize, Clone)]
pub struct Today {
    main_date: Date,
    main_date_view: DateView,
    aux_date_view: Option<DateView>,
}

impl Default for Today {
    fn default() -> Self {
        Self::new()
    }
}

impl Today {
    pub fn new() -> Today {
        let main_calendar: Calendar = config::get_config().main_calendar_type.into();
        let main_language: Language = config::get_config().main_calendar_language.into();
        let aux_calendar: Option<Calendar> = config::get_config()
            .secondary_calendar_type
            .map(|cal| cal.into());

        let day = get_unix_day();
        let main_date = get_today_date(&main_calendar);
        let main_date_view = main_calendar.get_date_view(day, &main_language);
        let aux_date_view = aux_calendar.map(|cal| {
            let aux_language: Language = config::get_config()
                .secondary_calendar_language
                .unwrap_or_default()
                .into();
            cal.get_date_view(day, &aux_language)
        });
        Today {
            main_date,
            main_date_view,
            aux_date_view,
        }
    }

    pub fn update(&mut self) -> AppResult<()> {
        *self = Today::new();
        Ok(())
    }
}

pub fn get_unix_day() -> i32 {
    let a = std::time::SystemTime::now()
        .duration_since(std::time::UNIX_EPOCH)
        .unwrap()
        .as_secs();
    (a / 3600 / 24) as i32
}

pub fn get_today_date(calendar: &Calendar) -> Date {
    let day = get_unix_day();
    calendar.get_date(day)
}

/*
pub fn today_persian_date_string() -> String {
    let day = get_unix_day();
    let cal = Calendar::Persian(PersianCalendar);
    let date: Date = cal.get_date(day);
    let mut date_string: String = cal.get_date_string(day, &Language::Farsi);
    if date.day == 6 && date.month == 12 {
        // my birthday
        date_string.push_str(" 🎉");
    } else if date.day == 1 && date.month == 1 {
        // new year
        date_string.push_str(" 🎆️");
    }
    date_string
}

pub fn today_english_date_string() -> String {
    let day = get_unix_day();
    let cal = Calendar::Gregorian(GregorianCalendar);
    let date: Date = cal.get_date(day);
    let mut date_string: String = cal.get_date_string(day, &Language::English);
    if date.day == 1 && date.month == 1 {
        // new year
        date_string.push_str(" 🎆️");
    }
    date_string
}
*/