- combined class 11 / class 12 (Oberstufe fix)
This commit is contained in:
parent
5114be327a
commit
b0fb6e8ac3
@ -6,7 +6,7 @@ use quickxml_to_serde::{xml_string_to_json, Config};
|
|||||||
use serde_derive::{Deserialize, Serialize};
|
use serde_derive::{Deserialize, Serialize};
|
||||||
use serde_json::{json, Map};
|
use serde_json::{json, Map};
|
||||||
|
|
||||||
#[derive(Queryable, Serialize, Insertable, Deserialize)]
|
#[derive(Queryable, Serialize, Insertable, Deserialize, Clone)]
|
||||||
#[table_name = "timetable"]
|
#[table_name = "timetable"]
|
||||||
pub struct Timetable {
|
pub struct Timetable {
|
||||||
pub date: String,
|
pub date: String,
|
||||||
@ -56,6 +56,7 @@ async fn get_timetable_xml_data(url: &str) -> Vec<serde_json::value::Value> {
|
|||||||
.unwrap()
|
.unwrap()
|
||||||
.as_array()
|
.as_array()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
dbg!(&classes);
|
||||||
classes.to_owned()
|
classes.to_owned()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -147,11 +148,168 @@ pub async fn get_timetable(_conn: DbConn, url: String) -> Vec<Timetable> {
|
|||||||
.as_str()
|
.as_str()
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
),
|
),
|
||||||
timetable_data: serde_json::from_str(&json!(response).to_string()).unwrap(),
|
timetable_data: json!(response),
|
||||||
};
|
};
|
||||||
timetable.push(timetable_element)
|
timetable.push(timetable_element)
|
||||||
}
|
}
|
||||||
timetable
|
let normal_classes: Vec<Timetable> = timetable
|
||||||
|
.to_vec()
|
||||||
|
.into_iter()
|
||||||
|
.filter(|e| !e.class.contains("11") && !e.class.contains("12"))
|
||||||
|
.collect();
|
||||||
|
let eleven_classes: Vec<Timetable> = timetable
|
||||||
|
.to_vec()
|
||||||
|
.into_iter()
|
||||||
|
.filter(|e| e.class.contains("11"))
|
||||||
|
.collect();
|
||||||
|
let twelve_classes: Vec<Timetable> = timetable
|
||||||
|
.to_vec()
|
||||||
|
.into_iter()
|
||||||
|
.filter(|e| e.class.contains("12"))
|
||||||
|
.collect();
|
||||||
|
let eleven_timetable_data = {
|
||||||
|
let mut courses: Vec<serde_json::Value> = Vec::new();
|
||||||
|
let mut info: String = String::new();
|
||||||
|
for i in eleven_classes {
|
||||||
|
courses.extend(
|
||||||
|
i.timetable_data
|
||||||
|
.as_object()
|
||||||
|
.unwrap()
|
||||||
|
.get("courses")
|
||||||
|
.unwrap()
|
||||||
|
.as_array()
|
||||||
|
.unwrap()
|
||||||
|
.to_owned(),
|
||||||
|
);
|
||||||
|
info = i
|
||||||
|
.timetable_data
|
||||||
|
.as_object()
|
||||||
|
.unwrap()
|
||||||
|
.get("info")
|
||||||
|
.unwrap()
|
||||||
|
.as_str()
|
||||||
|
.unwrap()
|
||||||
|
.to_owned();
|
||||||
|
}
|
||||||
|
courses.sort_by(|a, b| {
|
||||||
|
let n1 = a.as_object().unwrap().get("St").unwrap().as_i64().unwrap();
|
||||||
|
let sb1 = a.as_object().unwrap().get("Fa").unwrap().as_str().unwrap();
|
||||||
|
let n2 = b.as_object().unwrap().get("St").unwrap().as_i64().unwrap();
|
||||||
|
let sb2 = b.as_object().unwrap().get("Fa").unwrap().as_str().unwrap();
|
||||||
|
if n1 == n2 {
|
||||||
|
sb1.cmp(&sb2)
|
||||||
|
} else {
|
||||||
|
n1.cmp(&n2)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
TimetableData {
|
||||||
|
count: courses.len(),
|
||||||
|
courses,
|
||||||
|
info,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let eleven = Timetable {
|
||||||
|
date: String::from(
|
||||||
|
xml.as_object()
|
||||||
|
.unwrap()
|
||||||
|
.get("VpMobil")
|
||||||
|
.unwrap()
|
||||||
|
.get("Kopf")
|
||||||
|
.unwrap()
|
||||||
|
.get("DatumPlan")
|
||||||
|
.unwrap()
|
||||||
|
.as_str()
|
||||||
|
.unwrap(),
|
||||||
|
),
|
||||||
|
updated: String::from(
|
||||||
|
xml.as_object()
|
||||||
|
.unwrap()
|
||||||
|
.get("VpMobil")
|
||||||
|
.unwrap()
|
||||||
|
.get("Kopf")
|
||||||
|
.unwrap()
|
||||||
|
.get("zeitstempel")
|
||||||
|
.unwrap()
|
||||||
|
.as_str()
|
||||||
|
.unwrap(),
|
||||||
|
),
|
||||||
|
class: String::from("11"),
|
||||||
|
timetable_data: json!(eleven_timetable_data),
|
||||||
|
};
|
||||||
|
let twelve_timetable_data = {
|
||||||
|
let mut courses: Vec<serde_json::Value> = Vec::new();
|
||||||
|
let mut info: String = String::new();
|
||||||
|
for i in twelve_classes {
|
||||||
|
courses.extend(
|
||||||
|
i.timetable_data
|
||||||
|
.as_object()
|
||||||
|
.unwrap()
|
||||||
|
.get("courses")
|
||||||
|
.unwrap()
|
||||||
|
.as_array()
|
||||||
|
.unwrap()
|
||||||
|
.to_owned(),
|
||||||
|
);
|
||||||
|
info = i
|
||||||
|
.timetable_data
|
||||||
|
.as_object()
|
||||||
|
.unwrap()
|
||||||
|
.get("info")
|
||||||
|
.unwrap()
|
||||||
|
.as_str()
|
||||||
|
.unwrap()
|
||||||
|
.to_owned();
|
||||||
|
}
|
||||||
|
courses.sort_by(|a, b| {
|
||||||
|
let n1 = a.as_object().unwrap().get("St").unwrap().as_i64().unwrap();
|
||||||
|
let sb1 = a.as_object().unwrap().get("Fa").unwrap().as_str().unwrap();
|
||||||
|
let n2 = b.as_object().unwrap().get("St").unwrap().as_i64().unwrap();
|
||||||
|
let sb2 = b.as_object().unwrap().get("Fa").unwrap().as_str().unwrap();
|
||||||
|
if n1 == n2 {
|
||||||
|
sb1.cmp(&sb2)
|
||||||
|
} else {
|
||||||
|
n1.cmp(&n2)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
TimetableData {
|
||||||
|
count: courses.len(),
|
||||||
|
courses,
|
||||||
|
info,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let twelve = Timetable {
|
||||||
|
date: String::from(
|
||||||
|
xml.as_object()
|
||||||
|
.unwrap()
|
||||||
|
.get("VpMobil")
|
||||||
|
.unwrap()
|
||||||
|
.get("Kopf")
|
||||||
|
.unwrap()
|
||||||
|
.get("DatumPlan")
|
||||||
|
.unwrap()
|
||||||
|
.as_str()
|
||||||
|
.unwrap(),
|
||||||
|
),
|
||||||
|
updated: String::from(
|
||||||
|
xml.as_object()
|
||||||
|
.unwrap()
|
||||||
|
.get("VpMobil")
|
||||||
|
.unwrap()
|
||||||
|
.get("Kopf")
|
||||||
|
.unwrap()
|
||||||
|
.get("zeitstempel")
|
||||||
|
.unwrap()
|
||||||
|
.as_str()
|
||||||
|
.unwrap(),
|
||||||
|
),
|
||||||
|
class: String::from("12"),
|
||||||
|
timetable_data: json!(twelve_timetable_data),
|
||||||
|
};
|
||||||
|
let mut timetable_refactored: Vec<Timetable> = Vec::new();
|
||||||
|
timetable_refactored.extend(normal_classes);
|
||||||
|
timetable_refactored.push(eleven);
|
||||||
|
timetable_refactored.push(twelve);
|
||||||
|
timetable_refactored
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_class_timetable(_conn: DbConn, class: String, url: String) -> TimetableData {
|
pub async fn get_class_timetable(_conn: DbConn, class: String, url: String) -> TimetableData {
|
||||||
@ -219,6 +377,85 @@ pub async fn get_class_timetable(_conn: DbConn, class: String, url: String) -> T
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
} else if class == String::from("11")
|
||||||
|
&& i.as_object()
|
||||||
|
.unwrap()
|
||||||
|
.get("Kurz")
|
||||||
|
.unwrap()
|
||||||
|
.as_str()
|
||||||
|
.unwrap()
|
||||||
|
.replace("/", "_")
|
||||||
|
.contains(&class)
|
||||||
|
{
|
||||||
|
let nothing = json!([""]);
|
||||||
|
let std = i
|
||||||
|
.as_object()
|
||||||
|
.unwrap()
|
||||||
|
.get("Pl")
|
||||||
|
.unwrap()
|
||||||
|
.as_object()
|
||||||
|
.unwrap()
|
||||||
|
.get("Std")
|
||||||
|
.unwrap_or(¬hing);
|
||||||
|
let mut plan = vec![];
|
||||||
|
if std.is_array() {
|
||||||
|
plan.extend(std.as_array().unwrap().iter().cloned())
|
||||||
|
} else if std.is_object() {
|
||||||
|
plan.push(std.clone())
|
||||||
|
}
|
||||||
|
for i in plan {
|
||||||
|
if i.as_object() != None {
|
||||||
|
response.courses.push(i.to_owned());
|
||||||
|
} else {
|
||||||
|
dbg!("Failed: {:?}", &i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
response.count = response.courses.len();
|
||||||
|
} else if class == String::from("12")
|
||||||
|
&& i.as_object()
|
||||||
|
.unwrap()
|
||||||
|
.get("Kurz")
|
||||||
|
.unwrap()
|
||||||
|
.as_str()
|
||||||
|
.unwrap()
|
||||||
|
.replace("/", "_")
|
||||||
|
.contains(&class)
|
||||||
|
{
|
||||||
|
let nothing = json!([""]);
|
||||||
|
let std = i
|
||||||
|
.as_object()
|
||||||
|
.unwrap()
|
||||||
|
.get("Pl")
|
||||||
|
.unwrap()
|
||||||
|
.as_object()
|
||||||
|
.unwrap()
|
||||||
|
.get("Std")
|
||||||
|
.unwrap_or(¬hing);
|
||||||
|
let mut plan = vec![];
|
||||||
|
if std.is_array() {
|
||||||
|
plan.extend(std.as_array().unwrap().iter().cloned())
|
||||||
|
} else if std.is_object() {
|
||||||
|
plan.push(std.clone())
|
||||||
|
}
|
||||||
|
for i in plan {
|
||||||
|
if i.as_object() != None {
|
||||||
|
response.courses.push(i.to_owned());
|
||||||
|
} else {
|
||||||
|
dbg!("Failed: {:?}", &i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
response.courses.sort_by(|a, b| {
|
||||||
|
let n1 = a.as_object().unwrap().get("St").unwrap().as_i64().unwrap();
|
||||||
|
let sb1 = a.as_object().unwrap().get("Fa").unwrap().as_str().unwrap();
|
||||||
|
let n2 = b.as_object().unwrap().get("St").unwrap().as_i64().unwrap();
|
||||||
|
let sb2 = b.as_object().unwrap().get("Fa").unwrap().as_str().unwrap();
|
||||||
|
if n1 == n2 {
|
||||||
|
sb1.cmp(&sb2)
|
||||||
|
} else {
|
||||||
|
n1.cmp(&n2)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
response.count = response.courses.len();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
response
|
response
|
||||||
@ -228,6 +465,33 @@ pub async fn get_classes() -> Vec<String> {
|
|||||||
let classes = get_timetable_xml_data(&String::from("Klassen.xml")).await;
|
let classes = get_timetable_xml_data(&String::from("Klassen.xml")).await;
|
||||||
let mut class_list: Vec<String> = Vec::new();
|
let mut class_list: Vec<String> = Vec::new();
|
||||||
for i in classes.iter() {
|
for i in classes.iter() {
|
||||||
|
if String::from(
|
||||||
|
i.as_object()
|
||||||
|
.unwrap()
|
||||||
|
.get("Kurz")
|
||||||
|
.unwrap()
|
||||||
|
.as_str()
|
||||||
|
.unwrap(),
|
||||||
|
)
|
||||||
|
.contains("11")
|
||||||
|
{
|
||||||
|
if !class_list.contains(&"11".to_string()) {
|
||||||
|
class_list.push("11".to_string());
|
||||||
|
}
|
||||||
|
} else if String::from(
|
||||||
|
i.as_object()
|
||||||
|
.unwrap()
|
||||||
|
.get("Kurz")
|
||||||
|
.unwrap()
|
||||||
|
.as_str()
|
||||||
|
.unwrap(),
|
||||||
|
)
|
||||||
|
.contains("12")
|
||||||
|
{
|
||||||
|
if !class_list.contains(&"12".to_string()) {
|
||||||
|
class_list.push("12".to_string());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
class_list.push(String::from(
|
class_list.push(String::from(
|
||||||
i.as_object()
|
i.as_object()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
@ -235,7 +499,8 @@ pub async fn get_classes() -> Vec<String> {
|
|||||||
.unwrap()
|
.unwrap()
|
||||||
.as_str()
|
.as_str()
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
))
|
));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
class_list
|
class_list
|
||||||
}
|
}
|
||||||
@ -279,7 +544,78 @@ pub async fn get_class_lessons(class: String) -> Vec<Lesson> {
|
|||||||
id: lesson.get("#text").unwrap().as_i64().unwrap(),
|
id: lesson.get("#text").unwrap().as_i64().unwrap(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
} else if class == String::from("11")
|
||||||
|
&& i.as_object()
|
||||||
|
.unwrap()
|
||||||
|
.get("Kurz")
|
||||||
|
.unwrap()
|
||||||
|
.as_str()
|
||||||
|
.unwrap()
|
||||||
|
.replace("/", "_")
|
||||||
|
.contains(&class)
|
||||||
|
{
|
||||||
|
let class_lessons = i
|
||||||
|
.as_object()
|
||||||
|
.unwrap()
|
||||||
|
.get("Unterricht")
|
||||||
|
.unwrap()
|
||||||
|
.as_object()
|
||||||
|
.unwrap()
|
||||||
|
.get("Ue")
|
||||||
|
.unwrap_or(&empty_list)
|
||||||
|
.as_array()
|
||||||
|
.unwrap();
|
||||||
|
for lesson in class_lessons.iter() {
|
||||||
|
let lesson = lesson
|
||||||
|
.as_object()
|
||||||
|
.unwrap()
|
||||||
|
.get("UeNr")
|
||||||
|
.unwrap()
|
||||||
|
.as_object()
|
||||||
|
.unwrap();
|
||||||
|
lesson_list.push(Lesson {
|
||||||
|
subject: lesson.get("@UeFa").unwrap().as_str().unwrap().to_string(),
|
||||||
|
teacher: lesson.get("@UeLe").unwrap().as_str().unwrap().to_string(),
|
||||||
|
id: lesson.get("#text").unwrap().as_i64().unwrap(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
} else if class == String::from("12")
|
||||||
|
&& i.as_object()
|
||||||
|
.unwrap()
|
||||||
|
.get("Kurz")
|
||||||
|
.unwrap()
|
||||||
|
.as_str()
|
||||||
|
.unwrap()
|
||||||
|
.replace("/", "_")
|
||||||
|
.contains(&class)
|
||||||
|
{
|
||||||
|
let class_lessons = i
|
||||||
|
.as_object()
|
||||||
|
.unwrap()
|
||||||
|
.get("Unterricht")
|
||||||
|
.unwrap()
|
||||||
|
.as_object()
|
||||||
|
.unwrap()
|
||||||
|
.get("Ue")
|
||||||
|
.unwrap_or(&empty_list)
|
||||||
|
.as_array()
|
||||||
|
.unwrap();
|
||||||
|
for lesson in class_lessons.iter() {
|
||||||
|
let lesson = lesson
|
||||||
|
.as_object()
|
||||||
|
.unwrap()
|
||||||
|
.get("UeNr")
|
||||||
|
.unwrap()
|
||||||
|
.as_object()
|
||||||
|
.unwrap();
|
||||||
|
lesson_list.push(Lesson {
|
||||||
|
subject: lesson.get("@UeFa").unwrap().as_str().unwrap().to_string(),
|
||||||
|
teacher: lesson.get("@UeLe").unwrap().as_str().unwrap().to_string(),
|
||||||
|
id: lesson.get("#text").unwrap().as_i64().unwrap(),
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
lesson_list.sort_by(|a, b| a.subject.cmp(&b.subject));
|
||||||
lesson_list
|
lesson_list
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user