parseKholle static method

Kholle parseKholle(
  1. 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);
}