Browse Source

fix crash on first start, if tcor is not reachable

pull/46/head
Jannik 2 years ago
parent
commit
faa07966da
Signed by: Seil0
GPG Key ID: E8459F3723C52C24
  1. 50
      app/src/main/java/org/mosad/seil0/projectlaogai/controller/TCoRAPIController.kt
  2. 4
      app/src/main/java/org/mosad/seil0/projectlaogai/hsoparser/DataTypes.kt

50
app/src/main/java/org/mosad/seil0/projectlaogai/controller/TCoRAPIController.kt

@ -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()
}
}
}

4
app/src/main/java/org/mosad/seil0/projectlaogai/hsoparser/DataTypes.kt

@ -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…
Cancel
Save

Du besuchst diese Seite mit einem veralteten IPv4-Internetzugang. Möglicherweise treten in Zukunft Probleme mit der Erreichbarkeit und Performance auf. Bitte frage deinen Internetanbieter oder Netzwerkadministrator nach IPv6-Unterstützung.
You are visiting this site with an outdated IPv4 internet access. You may experience problems with accessibility and performance in the future. Please ask your ISP or network administrator for IPv6 support.
Weitere Infos | More Information
Klicke zum schließen | Click to close