From 5ba9dfc263f3caf5046eca04baf4c5b664c32b4f Mon Sep 17 00:00:00 2001 From: Hannes Braun Date: Sat, 23 Oct 2021 13:50:09 +0200 Subject: [PATCH] Better null checks --- .../hsoparser/TimetableParser.kt | 44 +++++++------------ 1 file changed, 16 insertions(+), 28 deletions(-) diff --git a/src/main/kotlin/org/mosad/thecitadelofricks/hsoparser/TimetableParser.kt b/src/main/kotlin/org/mosad/thecitadelofricks/hsoparser/TimetableParser.kt index 9d691d5..3fc6c4d 100644 --- a/src/main/kotlin/org/mosad/thecitadelofricks/hsoparser/TimetableParser.kt +++ b/src/main/kotlin/org/mosad/thecitadelofricks/hsoparser/TimetableParser.kt @@ -42,37 +42,29 @@ class TimetableParser(timetableURL: String? = null, htmlDoc: Document? = null) { val semaphore = Semaphore(3, 0) } - private val htmlDoc: Document? = - htmlDoc - ?: if (timetableURL == null) { + private val htmlDoc: Document? = htmlDoc ?: timetableURL?.let { + runBlocking { + try { + // Only allow sending a limited amount of requests at the same time + semaphore.acquire() + Jsoup.connect(timetableURL).get() + } catch (gex: Exception) { + logger.error("general TimetableParser error", gex) null - } else { - runBlocking { - try { - // Only allow sending a limited amount of requests at the same time - semaphore.acquire() - Jsoup.connect(timetableURL).get() - } catch (gex: Exception) { - logger.error("general TimetableParser error", gex) - null - } finally { - semaphore.release() - } - } + } finally { + semaphore.release() } + } + } /** * parse the timetable from the previously given url * the timetable is organised per row not per column; * Mon 1, Tue 1, Wed 1, Thur 1, Fri 1, Sat 1, Mon 2 and so on */ - fun parseTimeTable(): TimetableWeek? { - if (htmlDoc == null) { - return null - } - + fun parseTimeTable(): TimetableWeek? = htmlDoc?.let { val timetableWeek = TimetableWeek() - val rows = htmlDoc.select("table.timetable").select("tr[scope=\"row\"]") + val rows = it.select("table.timetable").select("tr[scope=\"row\"]") var sDay = -1 var sRow = -1 @@ -141,12 +133,8 @@ class TimetableParser(timetableURL: String? = null, htmlDoc: Document? = null) { /** * parse the week number of the year for the timetable */ - fun parseWeekNumberYear(): Int? { - if (htmlDoc == null) { - return null - } - - return htmlDoc.select("h1.timetable-caption").text().substringAfter("- ") + fun parseWeekNumberYear(): Int? = htmlDoc?.let { + it.select("h1.timetable-caption").text().substringAfter("- ") .substringBefore(".").replace(" ", "").toInt() }