forked from Anri/cal8tor
start date chooser (#8)
This commit is contained in:
parent
b6a2fec3cb
commit
fabcd6dac9
2 changed files with 27 additions and 12 deletions
23
src/info.rs
23
src/info.rs
|
@ -8,12 +8,12 @@ use crate::utils::{
|
|||
models::{Info, InfoList, InfoType},
|
||||
};
|
||||
|
||||
pub async fn info(
|
||||
pub async fn get_start_date(
|
||||
level: i8,
|
||||
semester_opt: Option<i8>,
|
||||
year_opt: Option<i32>,
|
||||
user_agent: &str,
|
||||
) -> Info {
|
||||
) -> String {
|
||||
let semester = get_semester(semester_opt);
|
||||
let year = get_year(year_opt, semester);
|
||||
|
||||
|
@ -34,14 +34,15 @@ pub async fn info(
|
|||
.inner_html();
|
||||
|
||||
let re = Regex::new(r"\d{1,2} (septembre|octobre)").unwrap();
|
||||
let date = re.captures(&raw_data).and_then(|caps| caps.get(0)).map_or(
|
||||
{
|
||||
let default = "1 septembre";
|
||||
println!("Can't find the first week of school, default to : {default}");
|
||||
default
|
||||
},
|
||||
|m| m.as_str(),
|
||||
);
|
||||
|
||||
re.captures(&raw_data)
|
||||
.and_then(|caps| caps.get(0))
|
||||
.map_or("1 septembre".to_owned(), |m| m.as_str().to_owned())
|
||||
}
|
||||
|
||||
pub fn info(semester_opt: Option<i8>, year_opt: Option<i32>, date: &str) -> Info {
|
||||
let semester = get_semester(semester_opt);
|
||||
let year = get_year(year_opt, semester);
|
||||
|
||||
// 1st semester
|
||||
let weeks_s1_1 = 6; // Weeks before break
|
||||
|
@ -119,7 +120,7 @@ fn anglophonization(date: &str) -> String {
|
|||
// Use 12:00 and UTC TZ for chrono parser
|
||||
"{} 12:00 +0000",
|
||||
// Replace french by english month
|
||||
re.replace_all(date, |cap: &Captures| match &cap[0] {
|
||||
re.replace_all(&date.to_lowercase(), |cap: &Captures| match &cap[0] {
|
||||
month if dico.contains_key(month) => dico.get(month).unwrap(),
|
||||
month => {
|
||||
panic!("Unknown month: {month}")
|
||||
|
|
16
src/main.rs
16
src/main.rs
|
@ -1,4 +1,5 @@
|
|||
use clap::Parser;
|
||||
use dialoguer::Input;
|
||||
use regex::Regex;
|
||||
|
||||
mod filter;
|
||||
|
@ -33,6 +34,10 @@ struct Args {
|
|||
/// Doesn't distinguish TD from TP
|
||||
#[clap(short, long)]
|
||||
td_are_tp: bool,
|
||||
|
||||
/// First day of your year
|
||||
#[clap(short, long)]
|
||||
first_day: Option<String>,
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
|
@ -58,8 +63,17 @@ async fn main() {
|
|||
|
||||
timetable = filter::timetable(timetable, args.td_are_tp);
|
||||
|
||||
let date = match args.first_day {
|
||||
None => Input::new()
|
||||
.with_prompt("Début des cours de l'année")
|
||||
.default(info::get_start_date(level, args.semester, args.year, &user_agent).await)
|
||||
.interact_text()
|
||||
.unwrap(),
|
||||
Some(day) => day,
|
||||
};
|
||||
|
||||
println!("Récupération des informations par rapport à l'année...");
|
||||
let info = info::info(level, args.semester, args.year, &user_agent).await;
|
||||
let info = info::info(args.semester, args.year, &date);
|
||||
|
||||
if args.export.is_some() {
|
||||
// Export the calendar
|
||||
|
|
Loading…
Reference in a new issue