fix crash on first start, if tcor is not reachable
This commit is contained in:
parent
ccc0f0f2bc
commit
faa07966da
|
@ -24,16 +24,22 @@ package org.mosad.seil0.projectlaogai.controller
|
|||
|
||||
import android.content.Context
|
||||
import android.util.Log
|
||||
import kotlinx.coroutines.*
|
||||
import com.google.gson.GsonBuilder
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.json.JSONObject
|
||||
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.coursesCacheTime
|
||||
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.mensaCacheTime
|
||||
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.timetableCacheTime
|
||||
import org.mosad.seil0.projectlaogai.hsoparser.CoursesList
|
||||
import org.mosad.seil0.projectlaogai.hsoparser.MensaMenu
|
||||
import org.mosad.seil0.projectlaogai.hsoparser.TimetableCourseWeek
|
||||
import java.io.BufferedWriter
|
||||
import java.io.File
|
||||
import java.io.FileWriter
|
||||
import java.net.URL
|
||||
import kotlin.Exception
|
||||
|
||||
class TCoRAPIController {
|
||||
|
||||
|
@ -45,10 +51,10 @@ class TCoRAPIController {
|
|||
* get the json object from tcor api and write it as file (cache)
|
||||
*/
|
||||
fun getCoursesList(context: Context) = GlobalScope.launch {
|
||||
try {
|
||||
val url = URL("$tcorBaseURL/courseList")
|
||||
val file = File(context.filesDir, "courses.json")
|
||||
val url = URL("$tcorBaseURL/courseList")
|
||||
val file = File(context.filesDir, "courses.json")
|
||||
|
||||
try {
|
||||
// read data from the API
|
||||
val coursesObject = JSONObject(url.readText()) //JSONObject(inReader.readLine())
|
||||
|
||||
|
@ -64,18 +70,24 @@ class TCoRAPIController {
|
|||
PreferencesController.save(context)
|
||||
} catch (ex: Exception) {
|
||||
Log.e(className, "failed to get /courseList", ex)
|
||||
}
|
||||
|
||||
// write a empty file, since it is loaded later
|
||||
withContext(Dispatchers.IO) {
|
||||
val writer = BufferedWriter(FileWriter(file))
|
||||
writer.write(GsonBuilder().create().toJson(CoursesList()))
|
||||
writer.close()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* get the json object from tcor api and write it as file (cache)
|
||||
*/
|
||||
fun getMensa(context: Context) = GlobalScope.launch {
|
||||
try {
|
||||
val url = URL("$tcorBaseURL/mensamenu")
|
||||
val file = File(context.filesDir, "mensa.json")
|
||||
val url = URL("$tcorBaseURL/mensamenu")
|
||||
val file = File(context.filesDir, "mensa.json")
|
||||
|
||||
try {
|
||||
// read data from the API
|
||||
val mensaObject = JSONObject(url.readText()) //JSONObject(inReader.readLine())
|
||||
|
||||
|
@ -91,6 +103,13 @@ class TCoRAPIController {
|
|||
PreferencesController.save(context)
|
||||
} catch (ex: Exception) {
|
||||
Log.e(className, "failed to get /mensamenu", ex)
|
||||
|
||||
// write a empty file, since it is loaded later
|
||||
withContext(Dispatchers.IO) {
|
||||
val writer = BufferedWriter(FileWriter(file))
|
||||
writer.write(GsonBuilder().create().toJson(MensaMenu()))
|
||||
writer.close()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -99,10 +118,10 @@ class TCoRAPIController {
|
|||
* get the json object from tcor api and write it as file (cache)
|
||||
*/
|
||||
fun getTimetable(courseName: String, week: Int, context: Context) = GlobalScope.launch {
|
||||
try {
|
||||
val url = URL("$tcorBaseURL/timetable?courseName=$courseName&week=$week")
|
||||
val file = File(context.filesDir, "timetable-$courseName-$week.json")
|
||||
val url = URL("$tcorBaseURL/timetable?courseName=$courseName&week=$week")
|
||||
val file = File(context.filesDir, "timetable-$courseName-$week.json")
|
||||
|
||||
try {
|
||||
// read data from the API
|
||||
val timetableObject = JSONObject(url.readText()) //JSONObject(inReader.readLine())
|
||||
|
||||
|
@ -118,6 +137,13 @@ class TCoRAPIController {
|
|||
PreferencesController.save(context)
|
||||
} catch (ex: Exception) {
|
||||
Log.e(className, "failed to get /timetable", ex)
|
||||
|
||||
// write a empty file, since it is loaded later
|
||||
withContext(Dispatchers.IO) {
|
||||
val writer = BufferedWriter(FileWriter(file))
|
||||
writer.write(GsonBuilder().create().toJson(TimetableCourseWeek()))
|
||||
writer.close()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -124,6 +124,10 @@ class NotRetardedCalendar {
|
|||
// data classes for the course part
|
||||
data class Course(val courseLink: String, val courseName: String)
|
||||
|
||||
data class CoursesMeta(val updateTime: Long = 0, val totalCourses: Int = 0)
|
||||
|
||||
data class CoursesList(val meta: CoursesMeta = CoursesMeta(), val courses: ArrayList<Course> = ArrayList())
|
||||
|
||||
// data classes for the Mensa part
|
||||
data class Meal(val day: String, val heading: String, val parts: ArrayList<String>, val additives: String)
|
||||
|
||||
|
|
Loading…
Reference in New Issue