- 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_json::{json, Map};
|
||||
|
||||
#[derive(Queryable, Serialize, Insertable, Deserialize)]
|
||||
#[derive(Queryable, Serialize, Insertable, Deserialize, Clone)]
|
||||
#[table_name = "timetable"]
|
||||
pub struct Timetable {
|
||||
pub date: String,
|
||||
@ -56,6 +56,7 @@ async fn get_timetable_xml_data(url: &str) -> Vec<serde_json::value::Value> {
|
||||
.unwrap()
|
||||
.as_array()
|
||||
.unwrap();
|
||||
dbg!(&classes);
|
||||
classes.to_owned()
|
||||
}
|
||||
|
||||
@ -147,11 +148,168 @@ pub async fn get_timetable(_conn: DbConn, url: String) -> Vec<Timetable> {
|
||||
.as_str()
|
||||
.unwrap(),
|
||||
),
|
||||
timetable_data: serde_json::from_str(&json!(response).to_string()).unwrap(),
|
||||
timetable_data: json!(response),
|
||||
};
|
||||
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 {
|
||||
@ -219,6 +377,85 @@ pub async fn get_class_timetable(_conn: DbConn, class: String, url: String) -> T
|
||||
}
|
||||
}
|
||||
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
|
||||
@ -228,14 +465,42 @@ pub async fn get_classes() -> Vec<String> {
|
||||
let classes = get_timetable_xml_data(&String::from("Klassen.xml")).await;
|
||||
let mut class_list: Vec<String> = Vec::new();
|
||||
for i in classes.iter() {
|
||||
class_list.push(String::from(
|
||||
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(
|
||||
i.as_object()
|
||||
.unwrap()
|
||||
.get("Kurz")
|
||||
.unwrap()
|
||||
.as_str()
|
||||
.unwrap(),
|
||||
));
|
||||
}
|
||||
}
|
||||
class_list
|
||||
}
|
||||
@ -279,7 +544,78 @@ pub async fn get_class_lessons(class: String) -> Vec<Lesson> {
|
||||
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
|
||||
}
|
||||
|
Reference in New Issue
Block a user