From 950cf9042aefbfe5828dba6ca1f5538cdad6ed7c Mon Sep 17 00:00:00 2001 From: Yiheng He Date: Wed, 11 Dec 2024 18:19:10 +0800 Subject: [PATCH] feat: colorize task score --- src/main.rs | 31 ++++++++++++++++++++----------- src/subject.rs | 5 +++-- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/main.rs b/src/main.rs index 156fd6b..40a4ccf 100644 --- a/src/main.rs +++ b/src/main.rs @@ -139,7 +139,7 @@ fn print_subject(subject: &Subject, cli: &Cli) { } let mut data = vec![( colorize(&subject.subject_name, &subject.score_level), - format!("{}", (subject.total_score*10.0).round()/10.0), + format!("{}", (subject.total_score * 10.0).round() / 10.0), subject.score_level.to_string(), subject.gpa.to_string(), subject.score_mapping_list_id.to_string() + if subject.elective { " Elective" } else { "" }, @@ -151,7 +151,7 @@ fn print_subject(subject: &Subject, cli: &Cli) { let row = get_evaluation_project_row(evaluation_project); data.push(row); if cli.tasks { - let tasks = get_evaluation_project_task_list_row(evaluation_project); + let tasks = get_evaluation_project_task_list_row(subject, evaluation_project); for task in tasks { data.push(task); } @@ -170,7 +170,7 @@ fn print_subject(subject: &Subject, cli: &Cli) { row.4.insert_str(0, "- "); data.push(row); if cli.tasks { - let mut tasks = get_evaluation_project_task_list_row(evaluation_project); + let mut tasks = get_evaluation_project_task_list_row(subject, evaluation_project); for task in &mut tasks { task.0.insert(0, '-'); task.4.insert(0, '-'); @@ -194,17 +194,19 @@ fn get_evaluation_project_row( &evaluation_project.evaluation_project_e_name, &evaluation_project.score_level, ), - format!("{}", (evaluation_project.score*10.0).round()/10.0), + format!("{}", (evaluation_project.score * 10.0).round() / 10.0), evaluation_project.score_level.to_string(), evaluation_project.gpa.to_string(), format!( "{}% ({}%)", - (evaluation_project.adjusted_proportion*100.0).round()/100.0, (evaluation_project.proportion*100.0).round()/100.0 + (evaluation_project.adjusted_proportion * 100.0).round() / 100.0, + (evaluation_project.proportion * 100.0).round() / 100.0 ), ) } fn get_evaluation_project_task_list_row( + subject: &Subject, evaluation_project: &EvaluationProject, ) -> Vec<(String, String, String, String, String)> { let mut task_rows = Vec::new(); @@ -215,19 +217,26 @@ fn get_evaluation_project_task_list_row( .collect(); for learning_task in &learning_tasks { let weight = evaluation_project.adjusted_proportion / learning_tasks.len() as f64; + let score = + (learning_task.score.unwrap_or(f64::NAN) / learning_task.total_score * 100.0 * 100.0) + .round() + / 100.0; let row = ( - format!("- {}", learning_task.name), + format!( + "- {}", + colorize( + &learning_task.name, + &score_level_from_score(score, &subject.score_mapping_list) + ) + ), format!( "{} / {}", learning_task.score.unwrap_or(f64::NAN), learning_task.total_score ), - format!( - "{}%", - (learning_task.score.unwrap_or(f64::NAN) / learning_task.total_score * 100.0 * 100.0).round()/100.0 - ), + format!("{score}%"), String::new(), - format!("- {}%", (weight*100.0).round()/100.0), + format!("- {}%", (weight * 100.0).round() / 100.0), ); task_rows.push(row); } diff --git a/src/subject.rs b/src/subject.rs index 36afded..bd7a700 100644 --- a/src/subject.rs +++ b/src/subject.rs @@ -164,8 +164,9 @@ async fn get_subject_evaluation_projects( .map(|evaluation_project| evaluation_project.proportion) .sum(); for sub_evaluation_project in &mut evaluation_project.evaluation_project_list { - sub_evaluation_project.adjusted_proportion = - sub_evaluation_project.proportion / total_proportion * evaluation_project.adjusted_proportion; + sub_evaluation_project.adjusted_proportion = sub_evaluation_project.proportion + / total_proportion + * evaluation_project.adjusted_proportion; } } evaluation_projects