fix warings in TCoRAPIController

This commit is contained in:
Jannik 2020-06-05 19:17:49 +02:00
parent bea1b47396
commit 72e9efb9e7
Signed by: Seil0
GPG Key ID: E8459F3723C52C24
2 changed files with 70 additions and 51 deletions

View File

@ -32,6 +32,7 @@ import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.mensaCacheTime import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.mensaCacheTime
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.timetableCacheTime import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.timetableCacheTime
import org.mosad.seil0.projectlaogai.hsoparser.CoursesList import org.mosad.seil0.projectlaogai.hsoparser.CoursesList
import org.mosad.seil0.projectlaogai.hsoparser.Lesson
import org.mosad.seil0.projectlaogai.hsoparser.MensaMenu import org.mosad.seil0.projectlaogai.hsoparser.MensaMenu
import org.mosad.seil0.projectlaogai.hsoparser.TimetableCourseWeek import org.mosad.seil0.projectlaogai.hsoparser.TimetableCourseWeek
import java.io.BufferedWriter import java.io.BufferedWriter
@ -49,29 +50,27 @@ class TCoRAPIController {
* Get a array of all currently available courses at the tcor API. * Get a array of all currently available courses at the tcor API.
* Read the json object from tcor api and write it as file (cache). * Read the json object from tcor api and write it as file (cache).
*/ */
fun getCoursesList(context: Context) = GlobalScope.launch { fun getCoursesList(context: Context): Job {
val url = URL("$tcorBaseURL/courseList") val url = URL("$tcorBaseURL/courseList")
val file = File(context.filesDir, "courses.json") val file = File(context.filesDir, "courses.json")
try { return GlobalScope.launch(Dispatchers.IO) {
// read data from the API try {
val coursesObject = JSONObject(url.readText()) //JSONObject(inReader.readLine()) // read data from the API
val coursesObject = JSONObject(url.readText())
// write the json object to a file // write the json object to a file
withContext(Dispatchers.IO) {
val writer = BufferedWriter(FileWriter(file)) val writer = BufferedWriter(FileWriter(file))
writer.write(coursesObject.toString()) writer.write(coursesObject.toString())
writer.close() writer.close()
}
// update cache time // update cache time
coursesCacheTime = System.currentTimeMillis() / 1000 coursesCacheTime = System.currentTimeMillis() / 1000
PreferencesController.save(context) PreferencesController.save(context)
} catch (ex: Exception) { } catch (ex: Exception) {
Log.e(className, "failed to get /courseList", ex) Log.e(className, "failed to get /courseList", ex)
// write a empty file, since it is loaded later // write a empty file, since it is loaded later
withContext(Dispatchers.IO) {
val writer = BufferedWriter(FileWriter(file)) val writer = BufferedWriter(FileWriter(file))
writer.write(GsonBuilder().create().toJson(CoursesList())) writer.write(GsonBuilder().create().toJson(CoursesList()))
writer.close() writer.close()
@ -83,29 +82,27 @@ class TCoRAPIController {
* Get this and next weeks mensa menus from the tcor API. * Get this and next weeks mensa menus from the tcor API.
* Read the json object from tcor api and write it as file (cache). * Read the json object from tcor api and write it as file (cache).
*/ */
fun getMensaMenu(context: Context) = GlobalScope.launch { fun getMensaMenu(context: Context): Job {
val url = URL("$tcorBaseURL/mensamenu") val url = URL("$tcorBaseURL/mensamenu")
val file = File(context.filesDir, "mensa.json") val file = File(context.filesDir, "mensa.json")
try { return GlobalScope.launch(Dispatchers.IO) {
// read data from the API try {
val mensaObject = JSONObject(url.readText()) //JSONObject(inReader.readLine()) // read data from the API
val mensaObject = JSONObject(url.readText())
// write the json object to a file // write the json object to a file
withContext(Dispatchers.IO) {
val writer = BufferedWriter(FileWriter(file)) val writer = BufferedWriter(FileWriter(file))
writer.write(mensaObject.toString()) writer.write(mensaObject.toString())
writer.close() writer.close()
}
// update cache time // update cache time
mensaCacheTime = System.currentTimeMillis() / 1000 mensaCacheTime = System.currentTimeMillis() / 1000
PreferencesController.save(context) PreferencesController.save(context)
} catch (ex: Exception) { } catch (ex: Exception) {
Log.e(className, "failed to get /mensamenu", ex) Log.e(className, "failed to get /mensamenu", ex)
// write a empty file, since it is loaded later // write a empty file, since it is loaded later
withContext(Dispatchers.IO) {
val writer = BufferedWriter(FileWriter(file)) val writer = BufferedWriter(FileWriter(file))
writer.write(GsonBuilder().create().toJson(MensaMenu())) writer.write(GsonBuilder().create().toJson(MensaMenu()))
writer.close() writer.close()
@ -118,29 +115,27 @@ class TCoRAPIController {
* Get the timetable for @param courseName at week @param week * Get the timetable for @param courseName at week @param week
* Read the json object from tcor api and write it as file (cache). * Read the json object from tcor api and write it as file (cache).
*/ */
fun getTimetable(courseName: String, week: Int, context: Context) = GlobalScope.launch { fun getTimetable(courseName: String, week: Int, context: Context): Job {
val url = URL("$tcorBaseURL/timetable?courseName=$courseName&week=$week") val url = URL("$tcorBaseURL/timetable?courseName=$courseName&week=$week")
val file = File(context.filesDir, "timetable-$courseName-$week.json") val file = File(context.filesDir, "timetable-$courseName-$week.json")
try { return GlobalScope.launch(Dispatchers.IO) {
// read data from the API try {
val timetableObject = JSONObject(url.readText()) //JSONObject(inReader.readLine()) // read data from the API
val timetableObject = JSONObject(url.readText())
// write the json object to a file // write the json object to a file
withContext(Dispatchers.IO) {
val writer = BufferedWriter(FileWriter(file)) val writer = BufferedWriter(FileWriter(file))
writer.write(timetableObject.toString()) writer.write(timetableObject.toString())
writer.close() writer.close()
}
// update cache time // update cache time
timetableCacheTime = System.currentTimeMillis() / 1000 timetableCacheTime = System.currentTimeMillis() / 1000
PreferencesController.save(context) PreferencesController.save(context)
} catch (ex: Exception) { } catch (ex: Exception) {
Log.e(className, "failed to get /timetable", ex) Log.e(className, "failed to get /timetable", ex)
// write a empty file, since it is loaded later // write a empty file, since it is loaded later
withContext(Dispatchers.IO) {
val writer = BufferedWriter(FileWriter(file)) val writer = BufferedWriter(FileWriter(file))
writer.write(GsonBuilder().create().toJson(TimetableCourseWeek())) writer.write(GsonBuilder().create().toJson(TimetableCourseWeek()))
writer.close() writer.close()
@ -150,7 +145,9 @@ class TCoRAPIController {
} }
/** /**
* TODO * Get all lessons for a course at one week (async)
* @param courseName the course name
* @param week the week to look up
*/ */
fun getLessonSubjectListAsync(courseName: String, week: Int): Deferred<ArrayList<String>> { fun getLessonSubjectListAsync(courseName: String, week: Int): Deferred<ArrayList<String>> {
val url = URL("$tcorBaseURL/lessonSubjectList?courseName=$courseName&week=$week") val url = URL("$tcorBaseURL/lessonSubjectList?courseName=$courseName&week=$week")
@ -159,6 +156,20 @@ class TCoRAPIController {
Gson().fromJson(url.readText(), ArrayList<String>()::class.java) Gson().fromJson(url.readText(), ArrayList<String>()::class.java)
} }
} }
/**
* Get all occurrences of a lesson for a course at one week
* @param courseName the course name
* @param lessonSubject the subject to search for
* @param week the week to look up
*/
fun getLessonsAsync(courseName: String, lessonSubject: String, week: Int): Deferred<ArrayList<Lesson>> {
val url = URL("$tcorBaseURL/lessons?courseName=$courseName&lessonSubject=$lessonSubject&week=$week")
return GlobalScope.async {
Gson().fromJson(url.readText(), ArrayList<Lesson>()::class.java)
}
}
} }
} }

View File

@ -47,12 +47,13 @@ class AddLessonDialog(_context: Context) {
private val context = _context private val context = _context
private lateinit var spinnerCourses: Spinner private lateinit var spinnerCourses: Spinner
private lateinit var spinnerLessons: Spinner private lateinit var spinnerSubjects: Spinner
private val lessonSubjectsList = ArrayList<String>() private val subjectsList = ArrayList<String>()
private val courseNamesList = getCourseNames() private val courseNamesList = getCourseNames()
var selectedCourse = "" var selectedCourse = ""
var selectedSubject = ""
/** /**
* create a new AddLessonDialog (BottomSheet) * create a new AddLessonDialog (BottomSheet)
@ -64,22 +65,29 @@ class AddLessonDialog(_context: Context) {
.customView(R.layout.dialog_add_lesson) .customView(R.layout.dialog_add_lesson)
.setPeekHeight(900) .setPeekHeight(900)
.positiveButton(R.string.add) { .positiveButton(R.string.add) {
println("add course \"$selectedCourse\"") println("add lesson \"$selectedCourse: $selectedSubject\"")
// TODO call add function // TODO call add function
val test = runBlocking {
TCoRAPIController.getLessonsAsync(selectedCourse, selectedSubject, 0).await()
}
println(test.toString())
} }
.negativeButton(R.string.cancel) { } .negativeButton(R.string.cancel) { }
// initialize the spinners // initialize the spinners
spinnerCourses = dialog.getCustomView().findViewById(R.id.spinner_Courses) spinnerCourses = dialog.getCustomView().findViewById(R.id.spinner_Courses)
spinnerLessons = dialog.getCustomView().findViewById(R.id.spinner_Lessons) spinnerSubjects = dialog.getCustomView().findViewById(R.id.spinner_Lessons)
setArrayAdapter(spinnerCourses, courseNamesList) setArrayAdapter(spinnerCourses, courseNamesList)
val lessonsAdapter = setArrayAdapter(spinnerLessons, lessonSubjectsList) val lessonsAdapter = setArrayAdapter(spinnerSubjects, subjectsList)
spinnerCourses.setSelection(0,false) // don't call onItemSelected() on spinnerCourses.onItemSelectedListener spinnerCourses.setSelection(0,false) // don't call onItemSelected() on spinnerCourses.onItemSelectedListener
spinnerCourses.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { spinnerCourses.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, pos: Int, id: Long) { override fun onItemSelected(parent: AdapterView<*>, view: View, pos: Int, id: Long) {
selectedCourse = parent.getItemAtPosition(pos).toString()
// TODO show loading dialog while loading
val lessonSubjects = runBlocking { val lessonSubjects = runBlocking {
TCoRAPIController.getLessonSubjectListAsync(parent.getItemAtPosition(pos).toString(), 0).await() TCoRAPIController.getLessonSubjectListAsync(parent.getItemAtPosition(pos).toString(), 0).await()
} }
@ -94,10 +102,10 @@ class AddLessonDialog(_context: Context) {
} }
} }
spinnerLessons.setSelection(0,false) // don't call onItemSelected() on spinnerCourses.onItemSelectedListener spinnerSubjects.setSelection(0,false) // don't call onItemSelected() on spinnerCourses.onItemSelectedListener
spinnerLessons.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { spinnerSubjects.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, pos: Int, id: Long) { override fun onItemSelected(parent: AdapterView<*>, view: View, pos: Int, id: Long) {
selectedCourse = parent.getItemAtPosition(pos).toString() selectedSubject = parent.getItemAtPosition(pos).toString()
} }
override fun onNothingSelected(parent: AdapterView<*>) { override fun onNothingSelected(parent: AdapterView<*>) {