From 72e9efb9e70cb34780fed8fa934c26200488b94f Mon Sep 17 00:00:00 2001 From: Seil0 Date: Fri, 5 Jun 2020 19:17:49 +0200 Subject: [PATCH] fix warings in TCoRAPIController --- .../controller/TCoRAPIController.kt | 97 +++++++++++-------- .../uicomponents/AddLessonDialog.kt | 24 +++-- 2 files changed, 70 insertions(+), 51 deletions(-) diff --git a/app/src/main/java/org/mosad/seil0/projectlaogai/controller/TCoRAPIController.kt b/app/src/main/java/org/mosad/seil0/projectlaogai/controller/TCoRAPIController.kt index 1afa439..d12ede7 100644 --- a/app/src/main/java/org/mosad/seil0/projectlaogai/controller/TCoRAPIController.kt +++ b/app/src/main/java/org/mosad/seil0/projectlaogai/controller/TCoRAPIController.kt @@ -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.timetableCacheTime 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.TimetableCourseWeek import java.io.BufferedWriter @@ -49,29 +50,27 @@ class TCoRAPIController { * 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). */ - fun getCoursesList(context: Context) = GlobalScope.launch { + fun getCoursesList(context: Context): Job { 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()) + return GlobalScope.launch(Dispatchers.IO) { + try { + // read data from the API + val coursesObject = JSONObject(url.readText()) - // write the json object to a file - withContext(Dispatchers.IO) { + // write the json object to a file val writer = BufferedWriter(FileWriter(file)) writer.write(coursesObject.toString()) writer.close() - } - // update cache time - coursesCacheTime = System.currentTimeMillis() / 1000 - PreferencesController.save(context) - } catch (ex: Exception) { - Log.e(className, "failed to get /courseList", ex) + // update cache time + coursesCacheTime = System.currentTimeMillis() / 1000 + 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) { + // write a empty file, since it is loaded later val writer = BufferedWriter(FileWriter(file)) writer.write(GsonBuilder().create().toJson(CoursesList())) writer.close() @@ -83,29 +82,27 @@ class TCoRAPIController { * Get this and next weeks mensa menus from the tcor API. * 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 file = File(context.filesDir, "mensa.json") - try { - // read data from the API - val mensaObject = JSONObject(url.readText()) //JSONObject(inReader.readLine()) + return GlobalScope.launch(Dispatchers.IO) { + try { + // read data from the API + val mensaObject = JSONObject(url.readText()) - // write the json object to a file - withContext(Dispatchers.IO) { + // write the json object to a file val writer = BufferedWriter(FileWriter(file)) writer.write(mensaObject.toString()) writer.close() - } - // update cache time - mensaCacheTime = System.currentTimeMillis() / 1000 - PreferencesController.save(context) - } catch (ex: Exception) { - Log.e(className, "failed to get /mensamenu", ex) + // update cache time + mensaCacheTime = System.currentTimeMillis() / 1000 + 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) { + // write a empty file, since it is loaded later val writer = BufferedWriter(FileWriter(file)) writer.write(GsonBuilder().create().toJson(MensaMenu())) writer.close() @@ -118,29 +115,27 @@ class TCoRAPIController { * Get the timetable for @param courseName at week @param week * 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 file = File(context.filesDir, "timetable-$courseName-$week.json") - try { - // read data from the API - val timetableObject = JSONObject(url.readText()) //JSONObject(inReader.readLine()) + return GlobalScope.launch(Dispatchers.IO) { + try { + // read data from the API + val timetableObject = JSONObject(url.readText()) - // write the json object to a file - withContext(Dispatchers.IO) { + // write the json object to a file val writer = BufferedWriter(FileWriter(file)) writer.write(timetableObject.toString()) writer.close() - } - // update cache time - timetableCacheTime = System.currentTimeMillis() / 1000 - PreferencesController.save(context) - } catch (ex: Exception) { - Log.e(className, "failed to get /timetable", ex) + // update cache time + timetableCacheTime = System.currentTimeMillis() / 1000 + 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) { + // write a empty file, since it is loaded later val writer = BufferedWriter(FileWriter(file)) writer.write(GsonBuilder().create().toJson(TimetableCourseWeek())) 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> { val url = URL("$tcorBaseURL/lessonSubjectList?courseName=$courseName&week=$week") @@ -159,6 +156,20 @@ class TCoRAPIController { Gson().fromJson(url.readText(), ArrayList()::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> { + val url = URL("$tcorBaseURL/lessons?courseName=$courseName&lessonSubject=$lessonSubject&week=$week") + + return GlobalScope.async { + Gson().fromJson(url.readText(), ArrayList()::class.java) + } + } } } \ No newline at end of file diff --git a/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/AddLessonDialog.kt b/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/AddLessonDialog.kt index 8c05611..958713f 100644 --- a/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/AddLessonDialog.kt +++ b/app/src/main/java/org/mosad/seil0/projectlaogai/uicomponents/AddLessonDialog.kt @@ -47,12 +47,13 @@ class AddLessonDialog(_context: Context) { private val context = _context private lateinit var spinnerCourses: Spinner - private lateinit var spinnerLessons: Spinner + private lateinit var spinnerSubjects: Spinner - private val lessonSubjectsList = ArrayList() + private val subjectsList = ArrayList() private val courseNamesList = getCourseNames() var selectedCourse = "" + var selectedSubject = "" /** * create a new AddLessonDialog (BottomSheet) @@ -64,22 +65,29 @@ class AddLessonDialog(_context: Context) { .customView(R.layout.dialog_add_lesson) .setPeekHeight(900) .positiveButton(R.string.add) { - println("add course \"$selectedCourse\"") + println("add lesson \"$selectedCourse: $selectedSubject\"") // TODO call add function + val test = runBlocking { + TCoRAPIController.getLessonsAsync(selectedCourse, selectedSubject, 0).await() + } + + println(test.toString()) } .negativeButton(R.string.cancel) { } // initialize the spinners 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) - val lessonsAdapter = setArrayAdapter(spinnerLessons, lessonSubjectsList) + val lessonsAdapter = setArrayAdapter(spinnerSubjects, subjectsList) spinnerCourses.setSelection(0,false) // don't call onItemSelected() on spinnerCourses.onItemSelectedListener spinnerCourses.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { 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 { 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 - spinnerLessons.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + spinnerSubjects.setSelection(0,false) // don't call onItemSelected() on spinnerCourses.onItemSelectedListener + spinnerSubjects.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { 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<*>) {