fix crash on first start, if tcor is not reachable
This commit is contained in:
		| @ -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) | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user