TimetableParser: parse year
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				continuous-integration/woodpecker the build was successful
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	continuous-integration/woodpecker the build was successful
				
			This also adds the parsed year to the meta object included in the timetable response
This commit is contained in:
		| @ -46,6 +46,9 @@ data class MensaMeta(val updateTime: Long, val mensaName: String) | ||||
| data class MensaMenu(val meta: MensaMeta, val currentWeek: MensaWeek, val nextWeek: MensaWeek) | ||||
|  | ||||
| // data classes for the timetable part | ||||
|  | ||||
| data class CalendarWeek(val week: Int, val year: Int) | ||||
|  | ||||
| data class Lesson( | ||||
|     val lessonID: String, | ||||
|     val lessonSubject: String, | ||||
| @ -58,7 +61,7 @@ data class TimetableDay(val timeslots: Array<ArrayList<Lesson>> = Array(6) { Arr | ||||
|  | ||||
| data class TimetableWeek(val days: Array<TimetableDay> = Array(6) { TimetableDay() }) | ||||
|  | ||||
| data class TimetableCourseMeta(var updateTime: Long = 0, val courseName: String = "", val weekIndex: Int = 0, var weekNumberYear: Int = 0, val link: String = "") | ||||
| data class TimetableCourseMeta(var updateTime: Long = 0, val courseName: String = "", val weekIndex: Int = 0, var weekNumberYear: Int = 0, val year: Int = 0, val link: String = "") | ||||
|  | ||||
| data class TimetableCourseWeek(val meta: TimetableCourseMeta = TimetableCourseMeta(), var timetable: TimetableWeek = TimetableWeek()) | ||||
|  | ||||
|  | ||||
| @ -68,6 +68,7 @@ class CacheController { | ||||
|                 val currentTime = System.currentTimeMillis() / 1000 | ||||
|                 val timetableLink = "https://mosad.xyz" | ||||
|                 val weekNumberYear = 0 | ||||
|                 val year = 0 | ||||
|                 val instr = CacheController::class.java.getResourceAsStream("/html/Timetable_normal-week.html") | ||||
|  | ||||
|                 val timetableParser = | ||||
| @ -80,6 +81,7 @@ class CacheController { | ||||
|                         courseName, | ||||
|                         weekIndex, | ||||
|                         weekNumberYear, | ||||
|                         year, | ||||
|                         timetableLink | ||||
|                     ), timetableTest ?: TimetableWeek() | ||||
|                 ) | ||||
| @ -95,7 +97,7 @@ class CacheController { | ||||
|                 val currentTime = System.currentTimeMillis() / 1000 | ||||
|  | ||||
|                 val timetableParser = TimetableParser(timetableLink) | ||||
|                 val weekNumberYear = timetableParser.parseWeekNumberYear() | ||||
|                 val calendarWeek = timetableParser.parseCalendarWeek() | ||||
|                 val timetable = timetableParser.parseTimeTable() | ||||
|  | ||||
|                 TimetableCourseWeek( | ||||
| @ -103,7 +105,8 @@ class CacheController { | ||||
|                         currentTime, | ||||
|                         courseName, | ||||
|                         weekIndex, | ||||
|                         weekNumberYear ?: 0, | ||||
|                         calendarWeek?.week ?: 0, | ||||
|                         calendarWeek?.year ?: 0, | ||||
|                         timetableLink | ||||
|                     ), timetable ?: TimetableWeek() | ||||
|                 ).also { if (timetable != null) timetableList[key] = it } | ||||
| @ -198,7 +201,7 @@ class CacheController { | ||||
|                         val timetableParser = TimetableParser(timetableCourse.value.meta.link) | ||||
|                         timetableCourse.value.timetable = timetableParser.parseTimeTable() ?: return@execute | ||||
|                         timetableCourse.value.meta.weekNumberYear = | ||||
|                             timetableParser.parseWeekNumberYear() ?: return@execute | ||||
|                             timetableParser.parseCalendarWeek()?.week ?: return@execute | ||||
|                         timetableCourse.value.meta.updateTime = System.currentTimeMillis() / 1000 | ||||
|  | ||||
|                         saveTimetableToCache(timetableCourse.value) // save the updated timetable to the cache directory | ||||
|  | ||||
| @ -26,6 +26,7 @@ import kotlinx.coroutines.runBlocking | ||||
| import kotlinx.coroutines.sync.Semaphore | ||||
| import org.jsoup.Jsoup | ||||
| import org.jsoup.nodes.Document | ||||
| import org.mosad.thecitadelofricks.CalendarWeek | ||||
| import org.mosad.thecitadelofricks.Lesson | ||||
| import org.mosad.thecitadelofricks.TimetableWeek | ||||
| import org.slf4j.LoggerFactory | ||||
| @ -131,11 +132,13 @@ class TimetableParser(timetableURL: String? = null, htmlDoc: Document? = null) { | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * parse the week number of the year for the timetable | ||||
|      * parse the calendar week and the associated year for the timetable | ||||
|      */ | ||||
|     fun parseWeekNumberYear(): Int? = htmlDoc?.let { | ||||
|         it.select("h1.timetable-caption").text().substringAfter("- ") | ||||
|             .substringBefore(".").replace(" ", "").toInt() | ||||
|     fun parseCalendarWeek(): CalendarWeek? = htmlDoc?.let { | ||||
|         val dateStr = it.select("h1.timetable-caption").text().substringAfter("- ") | ||||
|         val week = dateStr.substringBefore(".").replace(" ", "").toInt() | ||||
|         val year = dateStr.substringAfter("Woche ").replace(" ", "").toInt() | ||||
|         CalendarWeek(week, year) | ||||
|     } | ||||
|  | ||||
|     @Suppress("unused") | ||||
|  | ||||
| @ -25,6 +25,7 @@ package org.mosad.thecitadelofricks.hsoparser | ||||
| import org.jsoup.Jsoup | ||||
| import org.junit.jupiter.api.Assertions | ||||
| import org.junit.jupiter.api.Test | ||||
| import org.mosad.thecitadelofricks.CalendarWeek | ||||
| import java.io.File | ||||
|  | ||||
| class TimetableParserTest { | ||||
| @ -50,11 +51,11 @@ class TimetableParserTest { | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     fun parseWeekNumberYear() { | ||||
|     fun parseCalendarWeek() { | ||||
|         val htmlFile = File(TimetableParserTest::class.java.getResource("/html/Timetable_normal-week.html").path) | ||||
|         val htmlDoc = Jsoup.parse(htmlFile, "UTF-8", "https://www.hs-offenburg.de/") | ||||
|         val actualWeekNumberYear = TimetableParser(htmlDoc = htmlDoc).parseWeekNumberYear() | ||||
|         val actualCalendarWeek = TimetableParser(htmlDoc = htmlDoc).parseCalendarWeek() | ||||
|  | ||||
|         Assertions.assertEquals(42, actualWeekNumberYear) | ||||
|         Assertions.assertEquals(CalendarWeek(42, 2019), actualCalendarWeek) | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user