@ -26,11 +26,13 @@ import android.content.Context
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import com.google.gson.JsonParser
import com.google.gson.reflect.TypeToken
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.cCourse
import org.mosad.seil0.projectlaogai.hsoparser.*
import java.io.BufferedReader
import java.io.File
import java.io.FileReader
import com.google.gson.reflect.TypeToken
import org.mosad.seil0.projectlaogai.hsoparser.*
import java.util.*
import kotlin.collections.ArrayList
class CacheController ( cont : Context ) {
@ -38,13 +40,71 @@ class CacheController(cont: Context) {
private val context = cont
init {
// TODO move cache check here
val cal = Calendar . getInstance ( )
val currentDay = Calendar . getInstance ( ) . get ( Calendar . DAY _OF _WEEK )
val currentTime = System . currentTimeMillis ( ) / 1000
// check if we need to update the mensa data before displaying it
readMensa ( context )
cal . time = Date ( mensaMenu . meta . updateTime * 1000 )
// if a) it's monday and the last cache update was on sunday or b) the cache is older than 24hr, update blocking
if ( ( currentDay == Calendar . MONDAY && cal . get ( Calendar . DAY _OF _WEEK ) == Calendar . SUNDAY ) || currentTime - mensaMenu . meta . updateTime > 86400 ) {
println ( " update mensa blocking " )
TCoRAPIController . getMensa ( context ) . get ( )
}
// check if we need to update the timetables before displaying them
readTimetable ( cCourse . courseName , 0 , context )
cal . time = Date ( timetables [ 0 ] . meta . updateTime * 1000 )
// if a) it`s monday and the last cache update was not on a sunday or b) the cache is older than 5 days, update blocking
if ( ( currentDay == Calendar . MONDAY && cal . get ( Calendar . DAY _OF _WEEK ) == Calendar . SUNDAY ) || currentTime - timetables [ 0 ] . meta . updateTime > 432000 ) {
println ( " updating timetable after sunday! " )
val jobA = TCoRAPIController . getTimetable ( cCourse . courseName , 0 , context )
val jobB = TCoRAPIController . getTimetable ( cCourse . courseName , 1 , context )
jobA . get ( )
jobB . get ( )
}
// check if an update is necessary, not blocking
if ( currentTime - PreferencesController . coursesCacheTime > 86400 )
TCoRAPIController . getCoursesList ( context )
if ( currentTime - PreferencesController . mensaCacheTime > 10800 )
TCoRAPIController . getMensa ( context )
if ( currentTime - PreferencesController . timetableCacheTime > 10800 ) {
TCoRAPIController . getTimetable ( cCourse . courseName , 0 , context )
TCoRAPIController . getTimetable ( cCourse . courseName , 1 , context )
}
readStartCache ( cCourse . courseName )
}
companion object {
var coursesList = ArrayList < Course > ( )
var timetables = ArrayList < TimetableWeek > ( )
var mensaMenu = MensaMenu ( MensaMeta ( 0 , " " ) , MensaWeek ( ) , MensaWeek ( ) )
var timetables = ArrayList < TimetableCourseWeek > ( )
var mensaMenu = MensaMenu ( )
/ * *
* read the courses list from the cached file
* add them to the coursesList object
* /
private fun readCoursesList ( context : Context ) {
val file = File ( context . filesDir , " courses.json " )
// make sure the file exists
if ( ! file . exists ( ) )
TCoRAPIController . getCoursesList ( context ) . get ( )
val fileReader = FileReader ( file )
val bufferedReader = BufferedReader ( fileReader )
val coursesObject = JsonParser ( ) . parse ( bufferedReader . readLine ( ) ) . asJsonObject
coursesList = Gson ( ) . fromJson ( coursesObject . getAsJsonArray ( " courses " ) , object : TypeToken < List < Course > > ( ) { } . type )
}
/ * *
* get the MensaMenu object from the cached json ,
@ -62,7 +122,7 @@ class CacheController(cont: Context) {
val bufferedReader = BufferedReader ( fileReader )
val mensaObject = JsonParser ( ) . parse ( bufferedReader . readLine ( ) ) . asJsonObject
mensaMenu = GsonBuilder ( ) . create ( ) . fromJson ( mensaObject , MensaMenu ( MensaMeta ( 0 , " " ) , MensaWeek ( ) , MensaWeek ( ) ) . javaClass )
mensaMenu = GsonBuilder ( ) . create ( ) . fromJson ( mensaObject , MensaMenu ( ) . javaClass )
}
/ * *
@ -82,10 +142,10 @@ class CacheController(cont: Context) {
val timetableObject = JsonParser ( ) . parse ( bufferedReader . readLine ( ) ) . asJsonObject
// make sure you add the single weeks in the exact order!
if ( timetables . size == week ) {
timetables . add ( Gson ( ) . fromJson ( timetableObject . getAsJsonObject ( " timetable " ) , TimetableWeek ( ) . javaClass ) )
} else if ( timetables . size >= week ) {
timetables [ week ] = Gson ( ) . fromJson ( timetableObject . getAsJsonObject ( " timetable " ) , TimetableWeek ( ) . javaClass )
if ( timetables . size > week ) {
timetables [ week ] = ( Gson ( ) . fromJson ( timetableObject , TimetableCours eWeek ( ) . javaClass ) )
} else {
timetables . add ( Gson ( ) . fromJson ( timetableObject , TimetableCourseWeek ( ) . javaClass ) )
}
}
}
@ -95,28 +155,10 @@ class CacheController(cont: Context) {
* @param courseName the course name ( e . g AI1 )
* /
fun readStartCache ( courseName : String ) {
readCoursesList ( )
readCoursesList ( context )
readMensa ( context )
readTimetable ( courseName , 0 , context )
readTimetable ( courseName , 1 , context )
}
/ * *
* read the courses list from the cached file
* add them to the coursesList object
* /
private fun readCoursesList ( ) {
val file = File ( context . filesDir , " courses.json " )
// make sure the file exists
if ( ! file . exists ( ) )
TCoRAPIController ( context ) . getCoursesList ( ) . get ( )
val fileReader = FileReader ( file )
val bufferedReader = BufferedReader ( fileReader )
val coursesObject = JsonParser ( ) . parse ( bufferedReader . readLine ( ) ) . asJsonObject
coursesList = Gson ( ) . fromJson ( coursesObject . getAsJsonArray ( " courses " ) , object : TypeToken < List < Course > > ( ) { } . type )
}
}