From c1eff374a46f228a0acbabea7d941ce31f59b4ac Mon Sep 17 00:00:00 2001 From: worksoup <2055038075@qq.com> Date: Fri, 10 May 2024 23:18:06 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4=20CourseTable.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.lock | 30 ++++++------ src/cli/location.rs | 111 ++++++++++++++++++-------------------------- src/main.rs | 36 +++++++------- 3 files changed, 78 insertions(+), 99 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7be72aa..d0a61c8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -568,7 +568,7 @@ checksum = "ef8ae57c4978a2acd8b869ce6b9ca1dfe817bff704c220209fdef2c0b75a01b9" [[package]] name = "cxsign" version = "0.1.1" -source = "git+https://github.com/worksoup/newsign.git#8cc37b39da9758289ba5f1536307701282a64898" +source = "git+https://github.com/worksoup/newsign.git#6035eea1d1909efb77cbe651435f4c9db8c554d0" dependencies = [ "cxsign_internal", ] @@ -587,7 +587,7 @@ dependencies = [ [[package]] name = "cxsign_activity" version = "0.1.1" -source = "git+https://github.com/worksoup/newsign.git#8cc37b39da9758289ba5f1536307701282a64898" +source = "git+https://github.com/worksoup/newsign.git#6035eea1d1909efb77cbe651435f4c9db8c554d0" dependencies = [ "chrono", "cxsign_captcha", @@ -606,7 +606,7 @@ dependencies = [ [[package]] name = "cxsign_captcha" version = "0.1.1" -source = "git+https://github.com/worksoup/newsign.git#8cc37b39da9758289ba5f1536307701282a64898" +source = "git+https://github.com/worksoup/newsign.git#6035eea1d1909efb77cbe651435f4c9db8c554d0" dependencies = [ "cxsign_error", "cxsign_imageproc", @@ -621,7 +621,7 @@ dependencies = [ [[package]] name = "cxsign_dir" version = "0.1.1" -source = "git+https://github.com/worksoup/newsign.git#8cc37b39da9758289ba5f1536307701282a64898" +source = "git+https://github.com/worksoup/newsign.git#6035eea1d1909efb77cbe651435f4c9db8c554d0" dependencies = [ "directories", "lazy_static", @@ -630,7 +630,7 @@ dependencies = [ [[package]] name = "cxsign_error" version = "0.1.1" -source = "git+https://github.com/worksoup/newsign.git#8cc37b39da9758289ba5f1536307701282a64898" +source = "git+https://github.com/worksoup/newsign.git#6035eea1d1909efb77cbe651435f4c9db8c554d0" dependencies = [ "thiserror", "ureq", @@ -639,7 +639,7 @@ dependencies = [ [[package]] name = "cxsign_imageproc" version = "0.1.1" -source = "git+https://github.com/worksoup/newsign.git#8cc37b39da9758289ba5f1536307701282a64898" +source = "git+https://github.com/worksoup/newsign.git#6035eea1d1909efb77cbe651435f4c9db8c554d0" dependencies = [ "image", "imageproc", @@ -650,7 +650,7 @@ dependencies = [ [[package]] name = "cxsign_internal" version = "0.1.1" -source = "git+https://github.com/worksoup/newsign.git#8cc37b39da9758289ba5f1536307701282a64898" +source = "git+https://github.com/worksoup/newsign.git#6035eea1d1909efb77cbe651435f4c9db8c554d0" dependencies = [ "cxsign_activity", "cxsign_captcha", @@ -669,7 +669,7 @@ dependencies = [ [[package]] name = "cxsign_login" version = "0.1.1" -source = "git+https://github.com/worksoup/newsign.git#8cc37b39da9758289ba5f1536307701282a64898" +source = "git+https://github.com/worksoup/newsign.git#6035eea1d1909efb77cbe651435f4c9db8c554d0" dependencies = [ "cookie_store", "cxsign_error", @@ -684,7 +684,7 @@ dependencies = [ [[package]] name = "cxsign_obfuscate" version = "0.1.1" -source = "git+https://github.com/worksoup/newsign.git#8cc37b39da9758289ba5f1536307701282a64898" +source = "git+https://github.com/worksoup/newsign.git#6035eea1d1909efb77cbe651435f4c9db8c554d0" dependencies = [ "cxsign_utils", "proc-macro2", @@ -694,7 +694,7 @@ dependencies = [ [[package]] name = "cxsign_pan" version = "0.1.1" -source = "git+https://github.com/worksoup/newsign.git#8cc37b39da9758289ba5f1536307701282a64898" +source = "git+https://github.com/worksoup/newsign.git#6035eea1d1909efb77cbe651435f4c9db8c554d0" dependencies = [ "log", "mime_guess", @@ -705,7 +705,7 @@ dependencies = [ [[package]] name = "cxsign_signner" version = "0.1.1" -source = "git+https://github.com/worksoup/newsign.git#8cc37b39da9758289ba5f1536307701282a64898" +source = "git+https://github.com/worksoup/newsign.git#6035eea1d1909efb77cbe651435f4c9db8c554d0" dependencies = [ "cxsign_activity", "cxsign_error", @@ -723,7 +723,7 @@ dependencies = [ [[package]] name = "cxsign_store" version = "0.1.1" -source = "git+https://github.com/worksoup/newsign.git#8cc37b39da9758289ba5f1536307701282a64898" +source = "git+https://github.com/worksoup/newsign.git#6035eea1d1909efb77cbe651435f4c9db8c554d0" dependencies = [ "cxsign_dir", "cxsign_error", @@ -737,7 +737,7 @@ dependencies = [ [[package]] name = "cxsign_types" version = "0.1.1" -source = "git+https://github.com/worksoup/newsign.git#8cc37b39da9758289ba5f1536307701282a64898" +source = "git+https://github.com/worksoup/newsign.git#6035eea1d1909efb77cbe651435f4c9db8c554d0" dependencies = [ "cxsign_dir", "cxsign_error", @@ -754,7 +754,7 @@ dependencies = [ [[package]] name = "cxsign_user" version = "0.1.1" -source = "git+https://github.com/worksoup/newsign.git#8cc37b39da9758289ba5f1536307701282a64898" +source = "git+https://github.com/worksoup/newsign.git#6035eea1d1909efb77cbe651435f4c9db8c554d0" dependencies = [ "cookie_store", "cxsign_dir", @@ -769,7 +769,7 @@ dependencies = [ [[package]] name = "cxsign_utils" version = "0.1.1" -source = "git+https://github.com/worksoup/newsign.git#8cc37b39da9758289ba5f1536307701282a64898" +source = "git+https://github.com/worksoup/newsign.git#6035eea1d1909efb77cbe651435f4c9db8c554d0" dependencies = [ "chrono", "flate2", diff --git a/src/cli/location.rs b/src/cli/location.rs index a61a819..bec65a2 100644 --- a/src/cli/location.rs +++ b/src/cli/location.rs @@ -21,7 +21,7 @@ use cxsign::{ }, Location, LocationWithRange, }; -use log::{debug, error, warn}; +use log::{error, warn}; use std::{collections::HashMap, path::PathBuf}; #[derive(Subcommand, Debug)] @@ -367,80 +367,59 @@ pub fn parse_location_sub_command(db: &DataBase, sub_command: LocationSubCommand } } LocationSubCommand::Export { output, course } => { - let mut contents = String::new(); - let locations = location_table.get_locations(); - let mut len = 0; - for content in locations - .into_iter() - .map(|(k, (course_id, location))| { - let aliases = alias_table.get_aliases(k); - let mut aliases_contents = String::new(); - if !aliases.is_empty() { - aliases_contents.push_str(&aliases[0]); - for alias in aliases.iter().skip(1) { - aliases_contents.push('/'); - aliases_contents.push_str(alias); - } - } - debug!("{aliases:?}"); - format!("{}${}${}\n", course_id, location, aliases_contents) - }) - .chain( - course - .and_then(|course_id| { - let mut courses = HashMap::new(); - let table = AccountTable::from_ref(db); - for session in table.get_sessions().values() { - match cxsign::Course::get_courses(&session) { - Ok(courses_) => { - for c in courses_ { - courses.insert(c.get_id(), c); - } - } - Err(e) => { - warn!( - "未能获取用户[{}]的课程,错误信息:{e}.", - session.get_stu_name() - ); + let mut contents = location_table.export(); + for content in { + course + .and_then(|course_id| { + let account_table = AccountTable::from_ref(db); + let sessions = account_table.get_sessions(); + let mut courses = HashMap::new(); + for session in sessions.values() { + match cxsign::Course::get_courses(&session) { + Ok(courses_) => { + for c in courses_ { + courses.insert(c.get_id(), c); } } + Err(e) => { + warn!( + "未能获取用户[{}]的课程,错误信息:{e}.", + session.get_stu_name() + ); + } } - courses.get(&course_id).and_then(|course| { - let account_table = AccountTable::from_ref(db); - let sessions = account_table.get_sessions(); - sessions.values().next().map(|session| { - let mut contents = Vec::new(); - match LocationWithRange::from_log(session, course) { - Ok(locations) => { - if locations.is_empty() { - warn!("没有从该课程中获取到位置信息。"); - } - for (_, l) in locations { - contents.push(format!( - "{}${}${}\n", - course_id, - l.to_shifted_location(), - "" - )); - } + } + courses.get(&course_id).and_then(|course| { + sessions.values().next().map(|session| { + let mut contents = Vec::new(); + match LocationWithRange::from_log(session, course) { + Ok(locations) => { + if locations.is_empty() { + warn!("没有从该课程中获取到位置信息。"); } - Err(e) => { - warn!("遇到了问题:{e}"); + for (_, l) in locations { + contents.push(format!( + "{}${}${}\n", + course_id, + l.to_shifted_location(), + "" + )); } } - contents.into_iter() - }) + Err(e) => { + warn!("遇到了问题:{e}"); + } + } + contents.into_iter() }) }) - .into_iter() - .flatten(), - ) - .enumerate() - { - len = content.0; - contents += content.1.as_str() + }) + .into_iter() + .flatten() + } { + contents += content.as_str() } - if len == 0 { + if contents.is_empty() { warn!("没有获取到位置,不做任何事情。") } else if let Some(output) = output { let _ = std::fs::write(output, contents) diff --git a/src/main.rs b/src/main.rs index c98a904..14293d8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -111,8 +111,8 @@ fn main() { let table = AccountTable::from_ref(&db); let accounts = table.get_accounts(); if fresh { - for (uname, (ref enc_pwd, _)) in accounts { - let session = table.relogin(uname.clone(), enc_pwd); + for (cxsign::UnameAndEncPwdPair { uname, enc_pwd }, _) in accounts { + let session = table.relogin(uname.clone(), &enc_pwd); match session { Ok(session) => info!( "刷新账号 [{uname}](用户名:{})成功!", @@ -125,7 +125,7 @@ fn main() { // 列出所有账号。 let accounts = table.get_accounts(); for a in accounts { - info!("{}, {}", a.0, a.1 .1); + info!("{}, {}", a.0.uname, a.1); } } MainCommand::Courses { accounts } => { @@ -140,7 +140,7 @@ fn main() { }; // 获取课程信息。 let mut courses = HashMap::new(); - for (_, session) in sessions { + for session in sessions.values() { match cxsign::Course::get_courses(&session) { Ok(courses_) => { for c in courses_ { @@ -194,23 +194,23 @@ fn main() { } MainCommand::List { course, all } => { let sessions = AccountTable::from_ref(&db).get_sessions(); - let mut courses = HashMap::new(); - for session in sessions.values() { - match cxsign::Course::get_courses(&session) { - Ok(courses_) => { - for c in courses_ { - courses.insert(c.get_id(), c); + if let Some(course) = course { + let mut courses = HashMap::new(); + for session in sessions.values() { + match cxsign::Course::get_courses(&session) { + Ok(courses_) => { + for c in courses_ { + courses.insert(c.get_id(), c); + } + } + Err(e) => { + warn!( + "未能获取用户[{}]的课程,错误信息:{e}.", + session.get_stu_name() + ); } - } - Err(e) => { - warn!( - "未能获取用户[{}]的课程,错误信息:{e}.", - session.get_stu_name() - ); } } - } - if let Some(course) = course { let (a, n) = if let Some(course) = courses.get(&course) && let Some(session) = sessions.values().next() && let Ok((a, n, _)) = Activity::get_course_activities(