Timetable fixes
- Only one request is made to get the timetable HTML document for parsing the timetable and the weekNumberYear - On timeouts or other errors, the cached data won't be overwritten with emptiness anymore - The scheduled updates will now also update the weekNumberYear
This commit is contained in:
@ -59,7 +59,7 @@ class CacheController {
|
||||
* @param weekIndex request week number (current week = 0)
|
||||
* @return timetable of the course (Type: [TimetableCourseWeek])
|
||||
*/
|
||||
fun getTimetable(courseName: String, weekIndex: Int): TimetableCourseWeek = runBlocking {
|
||||
fun getTimetable(courseName: String, weekIndex: Int): TimetableCourseWeek {
|
||||
|
||||
// TODO just for testing
|
||||
if (courseName == "TEST_A" || courseName == "TEST_B") {
|
||||
@ -68,27 +68,43 @@ class CacheController {
|
||||
val weekNumberYear = 0
|
||||
val instr = javaClass.getResourceAsStream("/html/Timetable_normal-week.html")
|
||||
|
||||
val htmlDoc = Jsoup.parse(instr,"UTF-8", "https://www.hs-offenburg.de/")
|
||||
val timetableTest = TimetableParser().parseTimeTable(htmlDoc)
|
||||
val timetableParser =
|
||||
TimetableParser(htmlDoc = Jsoup.parse(instr, "UTF-8", "https://www.hs-offenburg.de/"))
|
||||
val timetableTest = timetableParser.parseTimeTable()
|
||||
|
||||
return@runBlocking TimetableCourseWeek(TimetableCourseMeta(currentTime, courseName, weekIndex, weekNumberYear, timetableLink), timetableTest)
|
||||
return TimetableCourseWeek(
|
||||
TimetableCourseMeta(
|
||||
currentTime,
|
||||
courseName,
|
||||
weekIndex,
|
||||
weekNumberYear,
|
||||
timetableLink
|
||||
), timetableTest ?: TimetableWeek()
|
||||
)
|
||||
}
|
||||
|
||||
return@runBlocking timetableList.getOrPut("$courseName-$weekIndex") {
|
||||
val key = "$courseName-$weekIndex"
|
||||
return if (timetableList.contains(key)) {
|
||||
timetableList[key]!!
|
||||
} else {
|
||||
val timetableLink = courseList.courses[courseName]
|
||||
?.courseLink
|
||||
?.replace("week=0", "week=$weekIndex") ?: ""
|
||||
val currentTime = System.currentTimeMillis() / 1000
|
||||
var timetable = TimetableWeek()
|
||||
var weekNumberYear = 0
|
||||
|
||||
val timetableJobs = listOf(
|
||||
async { timetable = TimetableParser().getTimeTable(timetableLink) },
|
||||
async { weekNumberYear = TimetableParser().getWeekNumberYear(timetableLink) }
|
||||
)
|
||||
val timetableParser = TimetableParser(timetableLink)
|
||||
val weekNumberYear = timetableParser.parseWeekNumberYear()
|
||||
val timetable = timetableParser.parseTimeTable()
|
||||
|
||||
timetableJobs.awaitAll()
|
||||
TimetableCourseWeek(TimetableCourseMeta(currentTime, courseName, weekIndex, weekNumberYear, timetableLink), timetable)
|
||||
TimetableCourseWeek(
|
||||
TimetableCourseMeta(
|
||||
currentTime,
|
||||
courseName,
|
||||
weekIndex,
|
||||
weekNumberYear ?: 0,
|
||||
timetableLink
|
||||
), timetable ?: TimetableWeek()
|
||||
).also { timetableList[key] = it }
|
||||
}
|
||||
}
|
||||
|
||||
@ -177,7 +193,10 @@ class CacheController {
|
||||
try {
|
||||
timetableList.forEach { timetableCourse ->
|
||||
executor.execute {
|
||||
timetableCourse.value.timetable = TimetableParser().getTimeTable(timetableCourse.value.meta.link)
|
||||
val timetableParser = TimetableParser(timetableCourse.value.meta.link)
|
||||
timetableCourse.value.timetable = timetableParser.parseTimeTable() ?: return@execute
|
||||
timetableCourse.value.meta.weekNumberYear =
|
||||
timetableParser.parseWeekNumberYear() ?: return@execute
|
||||
timetableCourse.value.meta.updateTime = System.currentTimeMillis() / 1000
|
||||
|
||||
saveTimetableToCache(timetableCourse.value) // save the updated timetable to the cache directory
|
||||
|
Reference in New Issue
Block a user