parseKholle static method
Kholle
parseKholle(
- Bs4Element e
)
Implementation
static Kholle parseKholle(Bs4Element e) {
// Gathering data from html (this parsing is awful but can't really do better)
var date = e.children.first.innerHtml.trim();
var secondTd = e.children.elementAtOrNull(1)!;
var hourAndMinute =
secondTd.children.first.innerHtml.replaceFirst(" ", "").trim();
var secondDiv = secondTd.children.elementAtOrNull(1)!;
var kholleur = secondDiv.find("a")!.text.trim();
var divText =
secondDiv.nodes.where((element) => element.runtimeType == Text);
var subject = divText.first.text!.replaceAll(RegExp(r'[()]'), "").trim();
String? message;
if (divText.length == 2) {
message = divText.last.text?.replaceAll(RegExp(r'[()]'), "").trim();
}
// Try to parse the message (i hope this doesn't break)
String? room;
if (message != null) {
room = RegExp(r"salle(.*)", caseSensitive: false)
.firstMatch(message.replaceAll(
RegExp(r"\b(salle\s*)+\b", caseSensitive: false), "Salle"))
?.group(1)
?.trim();
}
var dateParsed =
RegExp(r"(\d{1,2})\s*(\S{3,9})\s*(\d{4})?").firstMatch(date)!;
var day = dateParsed.group(1)!;
var month = dateParsed.group(2)!.asMonthNumber;
var year = int.parse(dateParsed.group(3) ?? DateTime.now().year.toString());
var hourAndMinutesParsed =
RegExp(r"(\d{1,2}) h (\d{2})").firstMatch(hourAndMinute)!;
var hour = hourAndMinutesParsed.group(1)!;
var minutes = hourAndMinutesParsed.group(2)!;
var dateTime = DateTime(
year, month, int.parse(day), int.parse(hour), int.parse(minutes));
return Kholle(dateTime, subject, kholleur, message, room);
}