1- // use colored::Colorize;
21use dotenvy:: dotenv;
3- // mod prev;
4- use headless_chrome:: protocol:: cdp:: Page ;
52use headless_chrome:: Browser ;
6- use std:: {
7- collections:: HashSet , env, error:: Error , fs, io, io:: prelude:: * ,
8- /* thread,*/ time:: Duration ,
9- } ;
3+ use std:: { collections:: HashSet , env, error:: Error , io, io:: prelude:: * , time:: Duration } ;
104
115const WAIT_LIMIT : u64 = 15 ;
126struct ZnamkaStruct {
137 predmet : String ,
148 znamka : f32 ,
159 vaha : f32 ,
1610}
17- // struct PredmetStruct {
18- // predmet: String,
19- // znamky: Vec<f32>,
20- // }
2111
2212// the individual processing functions
2313fn process_two ( znamka : & str ) -> Option < f32 > {
@@ -45,21 +35,36 @@ fn prompt_and_read(prompt: &str) -> Result<usize, Box<dyn std::error::Error>> {
4535 io:: stdin ( ) . lock ( ) . read_line ( & mut input) ?;
4636 Ok ( input. trim ( ) . parse ( ) ?)
4737}
38+ fn prompt_and_read_creds ( prompt : & str ) -> String {
39+ print ! ( "{}" , prompt) ;
40+ io:: stdout ( ) . flush ( ) . expect ( "failed to flush stdout" ) ;
41+ let mut input = String :: new ( ) ;
42+ io:: stdin ( )
43+ . lock ( )
44+ . read_line ( & mut input)
45+ . expect ( "failed to read line from user" ) ;
46+ input. trim ( ) . to_string ( )
47+ }
4848
4949pub fn main ( ) -> Result < ( ) , Box < dyn Error > > {
5050 println ! ( "starting script" ) ;
5151 let browser = Browser :: default ( ) ?;
5252 let tab = browser. new_tab ( ) ?;
53+
54+ let username: String ;
55+ let password: String ;
5356 match dotenv ( ) {
5457 Ok ( ..) => {
55- println ! ( "loaded .env file" )
58+ println ! ( "loaded .env file" ) ;
59+ username = env:: var ( "USERNAME" ) . expect ( "USERNAME environment variable not set" ) ;
60+ password = env:: var ( "PASSWORD" ) . expect ( "PASSWORD environment variable not set" ) ;
5661 }
5762 Err ( ..) => {
58- println ! ( ".env doesn't exist" )
63+ println ! ( ".env doesn't exist" ) ;
64+ username = prompt_and_read_creds ( "Your EduPage username: " ) . to_string ( ) ;
65+ password = prompt_and_read_creds ( "Your EduPage password: " ) . to_string ( ) ;
5966 }
6067 }
61- let username = env:: var ( "USERNAME" ) . expect ( "USERNAME environment variable not set" ) ;
62- let password = env:: var ( "PASSWORD" ) . expect ( "PASSWORD environment variable not set" ) ;
6368
6469 loop {
6570 tab. navigate_to ( "https://sspbrno.edupage.org/login/edubarLogin.php" ) ?;
@@ -68,7 +73,7 @@ pub fn main() -> Result<(), Box<dyn Error>> {
6873 tab. wait_for_element ( "input#home_Login_2e2" ) ?. click ( ) ?;
6974 tab. type_str ( & password) ?. press_key ( "Enter" ) ?;
7075
71- println ! ( "znamky page " ) ;
76+ println ! ( "finished signin " ) ;
7277
7378 tab. navigate_to ( "https://sspbrno.edupage.org/znamky/?eqa=d2hhdD1zdHVkZW50dmlld2VyJnBvaGxhZD1wb2RsYURhdHVtdSZ6bmFta3lfeWVhcmlkPTIwMjMmem5hbWt5X3llYXJpZF9ucz0xJm5hZG9iZG9iaWU9UDImcm9rb2Jkb2JpZT0yMDIzJTNBJTNBUDImZG9ScT0xJndoYXQ9c3R1ZGVudHZpZXdlciZ1cGRhdGVMYXN0Vmlldz0w" ) ?;
7479 println ! ( "navigated to znamky page" ) ;
@@ -81,17 +86,12 @@ pub fn main() -> Result<(), Box<dyn Error>> {
8186 break ;
8287 }
8388 Err ( _) => {
84- println ! ( "could not find, trying again" ) ;
89+ println ! ( "Grades not found; trying again" ) ;
8590 let _ = main ( ) ;
8691 }
8792 } ;
8893 }
8994
90- let jpeg_data =
91- tab. capture_screenshot ( Page :: CaptureScreenshotFormatOption :: Png , None , None , true ) ?;
92- // Save the screenshot to disc
93- fs:: write ( "./assets/screenshot.png" , jpeg_data) ?;
94-
9595 let mut everything_vec: Vec < ZnamkaStruct > = vec ! [ ] ;
9696 let everything = tab. find_elements ( ".app-list-item-main" ) ?;
9797
@@ -183,10 +183,10 @@ pub fn main() -> Result<(), Box<dyn Error>> {
183183 println ! ( "{}) - {}" , i, p) ;
184184 }
185185 for _ in 1 .. {
186- let predmet_pick_index = prompt_and_read ( "Pro který předmět chcete vypočítat průměr? " ) ?;
186+ let predmet_pick_index = prompt_and_read ( "Choose subject: " ) ?;
187187 // random order, because HashSet
188188 let predmet_pick = & vec_predmetu[ predmet_pick_index] ;
189- println ! ( "\n Vybrali jste : {}" , predmet_pick) ;
189+ println ! ( "\n You chose : {}" , predmet_pick) ;
190190 let mut picked_predmet_znamky: Vec < f32 > = vec ! [ ] ;
191191 let mut picked_predmet_vahy: Vec < f32 > = vec ! [ ] ;
192192 for i in & everything_vec {
@@ -199,17 +199,17 @@ pub fn main() -> Result<(), Box<dyn Error>> {
199199 // println!("{:?}", picked_predmet_vahy);
200200 // println!("{:?}", picked_predmet_znamky);
201201 println ! (
202- "Váš stávající průměr : {}" ,
202+ "Your current average : {}" ,
203203 picked_predmet_znamky. clone( ) . into_iter( ) . sum:: <f32 >( )
204204 / picked_predmet_vahy. clone( ) . into_iter( ) . sum:: <f32 >( )
205205 ) ;
206- let nova_znamka: f32 = prompt_and_read ( "Zadejte novou známku : " ) ? as f32 ;
207- let nova_vaha: f32 = prompt_and_read ( "Zadejte její váhu : " ) ? as f32 ;
208- println ! ( "Nová známka : {}, Váha : {}" , nova_znamka, nova_vaha) ;
206+ let nova_znamka: f32 = prompt_and_read ( "Add new grade : " ) ? as f32 ;
207+ let nova_vaha: f32 = prompt_and_read ( "The grade's weight : " ) ? as f32 ;
208+ println ! ( "New grade : {}, Weight : {}" , nova_znamka, nova_vaha) ;
209209 picked_predmet_znamky. push ( nova_znamka * nova_vaha) ;
210210 picked_predmet_vahy. push ( nova_vaha) ;
211211 println ! (
212- "Váš nový průměr : {}\n " ,
212+ "Your new calculated average : {}\n " ,
213213 picked_predmet_znamky. clone( ) . into_iter( ) . sum:: <f32 >( )
214214 / picked_predmet_vahy. clone( ) . into_iter( ) . sum:: <f32 >( )
215215 ) ;
0 commit comments