the /timetable request needs a week now
This commit is contained in:
parent
f2c1f2bc58
commit
ecfc1356ee
|
@ -38,6 +38,7 @@ import java.net.HttpURLConnection
|
||||||
import java.net.URL
|
import java.net.URL
|
||||||
import java.time.LocalDateTime
|
import java.time.LocalDateTime
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
import kotlin.collections.ArrayList
|
||||||
import kotlin.concurrent.scheduleAtFixedRate
|
import kotlin.concurrent.scheduleAtFixedRate
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
|
@ -56,7 +57,7 @@ class APIController {
|
||||||
private var coursesLinkList = ArrayList<Course>()
|
private var coursesLinkList = ArrayList<Course>()
|
||||||
private var coursesLastUpdate: Long = 0
|
private var coursesLastUpdate: Long = 0
|
||||||
|
|
||||||
private var timetableList = ArrayList<TimetableCourse>() // this list contains all timetables
|
private var timetableList = ArrayList<TimetableCourseWeek>() // this list contains all timetables
|
||||||
|
|
||||||
private var mensaCurrentWeek = MensaWeek()
|
private var mensaCurrentWeek = MensaWeek()
|
||||||
private var mensaNextWeek = MensaWeek()
|
private var mensaNextWeek = MensaWeek()
|
||||||
|
@ -95,10 +96,13 @@ class APIController {
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping("/timetable")
|
@RequestMapping("/timetable")
|
||||||
fun timetable(@RequestParam(value = "courseName", defaultValue = "AI4") courseName: String): TimetableCourse {
|
fun timetable(
|
||||||
|
@RequestParam(value = "courseName", defaultValue = "AI4") courseName: String,
|
||||||
|
@RequestParam(value = "week", defaultValue = "0") week: Int
|
||||||
|
): TimetableCourseWeek {
|
||||||
logger.info("timetable request at ${LocalDateTime.now()}!")
|
logger.info("timetable request at ${LocalDateTime.now()}!")
|
||||||
checkTimetableCourse(courseName) // check if we need to update and perform the update if so
|
checkTimetableCourse(courseName, week) // check if we need to update and perform the update if so
|
||||||
return timetableList.stream().filter { x -> x.meta.courseName == courseName }.findAny().orElse(null)
|
return timetableList.stream().filter { x -> x.meta.courseName == courseName && x.meta.week == week }.findAny().orElse(null)
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping("/status")
|
@RequestMapping("/status")
|
||||||
|
@ -163,10 +167,9 @@ class APIController {
|
||||||
*/
|
*/
|
||||||
private fun asyncUpdateTimetables() = GlobalScope.launch {
|
private fun asyncUpdateTimetables() = GlobalScope.launch {
|
||||||
timetableList.forEach { timetableCourse ->
|
timetableList.forEach { timetableCourse ->
|
||||||
val updateURL = timetableCourse.meta.courseLink
|
val updateURL = timetableCourse.meta.link
|
||||||
timetableCourse.currentWeek = TimetableParser().getTimeTable(updateURL)
|
timetableCourse.timetable = TimetableParser().getTimeTable(updateURL)
|
||||||
timetableCourse.nextWeek = TimetableParser().getTimeTable(updateURL.replace("week=0","week=1"))
|
timetableCourse.meta.updateTime = System.currentTimeMillis() / 1000
|
||||||
timetableCourse.meta.time = System.currentTimeMillis() / 1000
|
|
||||||
}
|
}
|
||||||
logger.info("updated ${timetableList.size} timetables successful!")
|
logger.info("updated ${timetableList.size} timetables successful!")
|
||||||
}
|
}
|
||||||
|
@ -176,32 +179,26 @@ class APIController {
|
||||||
* during the update process the old data will be returned for a API request
|
* during the update process the old data will be returned for a API request
|
||||||
* update if the last update was 6 hours ago
|
* update if the last update was 6 hours ago
|
||||||
*/
|
*/
|
||||||
private fun checkTimetableCourse(courseName: String) = runBlocking {
|
private fun checkTimetableCourse(courseName: String, week: Int) = runBlocking {
|
||||||
val currentTime = System.currentTimeMillis() / 1000
|
val currentTime = System.currentTimeMillis() / 1000
|
||||||
var currentWeek = TimetableWeek()
|
var timetable = TimetableWeek()
|
||||||
var nextWeek = TimetableWeek()
|
|
||||||
// check if the timetable already exists and is up to date
|
// check if the timetable already exists and is up to date
|
||||||
val result = timetableList.stream().filter { x -> x.meta.courseName == courseName }.findAny().orElse(null)
|
val result = timetableList.stream().filter { x -> x.meta.courseName == courseName && x.meta.week == week }.findAny().orElse(null)
|
||||||
|
|
||||||
when (result) {
|
when (result) {
|
||||||
// there is no such course yet, create one
|
// there is no such course yet, create one
|
||||||
null -> {
|
null -> {
|
||||||
val courseLink = coursesLinkList.stream().filter { x -> x.courseName == courseName }.findFirst().orElse(null).courseLink
|
val courseLink = coursesLinkList.stream().filter { x -> x.courseName == courseName }.findFirst().orElse(null).courseLink
|
||||||
val timetableMeta = TimetableMeta(courseName, courseLink, currentTime)
|
val timetableMeta = TimetableCourseMeta(currentTime, courseName, week, courseLink.replace("week=0","week=$week"))
|
||||||
|
|
||||||
val jobCurrent = GlobalScope.async {
|
val jobTimetable = GlobalScope.async {
|
||||||
currentWeek = TimetableParser().getTimeTable(courseLink)
|
timetable = TimetableParser().getTimeTable(timetableMeta.link)
|
||||||
}
|
}
|
||||||
|
|
||||||
val jobNext = GlobalScope.async {
|
jobTimetable.await()
|
||||||
nextWeek = TimetableParser().getTimeTable(courseLink.replace("week=0","week=1"))
|
|
||||||
}
|
|
||||||
|
|
||||||
jobCurrent.await()
|
timetableList.add(TimetableCourseWeek(timetableMeta, timetable))
|
||||||
jobNext.await()
|
logger.info("added new timetable for $courseName, week $week")
|
||||||
|
|
||||||
timetableList.add(TimetableCourse(timetableMeta, currentWeek, nextWeek))
|
|
||||||
logger.info("added new timetable for $courseName")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,9 +56,9 @@ data class TimetableDay(val timeslots: Array<ArrayList<Lesson>> = Array(6) { Arr
|
||||||
|
|
||||||
data class TimetableWeek(val days: Array<TimetableDay> = Array(6) { TimetableDay() })
|
data class TimetableWeek(val days: Array<TimetableDay> = Array(6) { TimetableDay() })
|
||||||
|
|
||||||
data class TimetableMeta(val courseName: String, val courseLink: String, var time: Long)
|
data class TimetableCourseMeta(var updateTime: Long, val courseName: String, val week: Int, val link: String)
|
||||||
|
|
||||||
data class TimetableCourse(val meta: TimetableMeta, var currentWeek: TimetableWeek, var nextWeek: TimetableWeek)
|
data class TimetableCourseWeek(val meta: TimetableCourseMeta, var timetable: TimetableWeek)
|
||||||
|
|
||||||
|
|
||||||
// data classes for the status part
|
// data classes for the status part
|
||||||
|
|
Loading…
Reference in New Issue