From 57150ce7f18b407e81a5b720186db696f7e10c67 Mon Sep 17 00:00:00 2001 From: Denys Konovalov Date: Mon, 1 Nov 2021 19:06:17 +0100 Subject: [PATCH] Added timetable field ZusatzInfo (additional information) --- src/indiware_connector.rs | 91 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 88 insertions(+), 3 deletions(-) diff --git a/src/indiware_connector.rs b/src/indiware_connector.rs index b7390e3..e365420 100644 --- a/src/indiware_connector.rs +++ b/src/indiware_connector.rs @@ -5,7 +5,7 @@ use chrono::Local; use diesel::{Insertable, Queryable}; use quickxml_to_serde::{xml_string_to_json, Config}; use serde_derive::{Deserialize, Serialize}; -use serde_json::json; +use serde_json::{json, Map}; #[derive(Queryable, Serialize, Insertable, Deserialize)] #[table_name = "timetable"] @@ -20,6 +20,7 @@ pub struct Timetable { pub struct TimetableData { pub count: usize, pub courses: Vec, + pub info: String, } async fn get_today_timetable_xml() -> serde_json::value::Value { @@ -115,9 +116,28 @@ pub async fn get_today_timetable(_conn: DbConn) -> Vec { dbg!("Failed: {:?}", &i); } } + let empty_list = serde_json::Value::Array(Vec::new()); + let empty_obj = serde_json::Value::Object(Map::new()); + let info_list = xml + .as_object() + .unwrap() + .get("VpMobil") + .unwrap() + .get("ZusatzInfo") + .unwrap_or(&empty_obj) + .get("ZiZeile") + .unwrap_or(&empty_list) + .as_array() + .unwrap(); + let mut info = String::new(); + for item in info_list { + info.push_str(item.as_str().unwrap_or("\r\n")); + info.push_str("\r\n"); + } let response = TimetableData { count: plan.len(), courses, + info, }; let timetable_element = Timetable { date: String::from( @@ -188,9 +208,28 @@ pub async fn get_timetable(_conn: DbConn) -> Vec { dbg!("Failed: {:?}", &i); } } + let empty_list = serde_json::Value::Array(Vec::new()); + let empty_obj = serde_json::Value::Object(Map::new()); + let info_list = xml + .as_object() + .unwrap() + .get("VpMobil") + .unwrap() + .get("ZusatzInfo") + .unwrap_or(&empty_obj) + .get("ZiZeile") + .unwrap_or(&empty_list) + .as_array() + .unwrap(); + let mut info = String::new(); + for item in info_list { + info.push_str(item.as_str().unwrap_or("\r\n")); + info.push_str("\r\n"); + } let response = TimetableData { count: plan.len(), courses, + info, }; let timetable_element = Timetable { date: String::from( @@ -233,9 +272,32 @@ pub async fn get_timetable(_conn: DbConn) -> Vec { } pub async fn get_today_class_timetable(_conn: DbConn, class: String) -> TimetableData { + let xml = get_today_timetable_xml().await; let classes = get_today_timetable_xml_data().await; let courses: Vec = Vec::new(); - let mut response = TimetableData { count: 0, courses }; + let empty_list = serde_json::Value::Array(Vec::new()); + let empty_obj = serde_json::Value::Object(Map::new()); + let info_list = xml + .as_object() + .unwrap() + .get("VpMobil") + .unwrap() + .get("ZusatzInfo") + .unwrap_or(&empty_obj) + .get("ZiZeile") + .unwrap_or(&empty_list) + .as_array() + .unwrap(); + let mut info = String::new(); + for item in info_list { + info.push_str(item.as_str().unwrap_or("\r\n")); + info.push_str("\r\n"); + } + let mut response = TimetableData { + count: 0, + courses, + info, + }; for i in classes.iter() { if i.as_object() .unwrap() @@ -277,9 +339,32 @@ pub async fn get_today_class_timetable(_conn: DbConn, class: String) -> Timetabl } pub async fn get_class_timetable(_conn: DbConn, class: String) -> TimetableData { + let xml = get_timetable_xml().await; let classes = get_timetable_xml_data().await; let courses: Vec = Vec::new(); - let mut response = TimetableData { count: 0, courses }; + let empty_list = serde_json::Value::Array(Vec::new()); + let empty_obj = serde_json::Value::Object(Map::new()); + let info_list = xml + .as_object() + .unwrap() + .get("VpMobil") + .unwrap() + .get("ZusatzInfo") + .unwrap_or(&empty_obj) + .get("ZiZeile") + .unwrap_or(&empty_list) + .as_array() + .unwrap(); + let mut info = String::new(); + for item in info_list { + info.push_str(item.as_str().unwrap_or("\r\n")); + info.push_str("\r\n"); + } + let mut response = TimetableData { + count: 0, + courses, + info, + }; for i in classes.iter() { if i.as_object() .unwrap()