version 0.6.0 #46
|
@ -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,20 +50,19 @@ 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")
|
||||||
|
|
||||||
|
return GlobalScope.launch(Dispatchers.IO) {
|
||||||
try {
|
try {
|
||||||
// read data from the API
|
// read data from the API
|
||||||
val coursesObject = JSONObject(url.readText()) //JSONObject(inReader.readLine())
|
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
|
||||||
|
@ -71,7 +71,6 @@ class TCoRAPIController {
|
||||||
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,20 +82,19 @@ 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")
|
||||||
|
|
||||||
|
return GlobalScope.launch(Dispatchers.IO) {
|
||||||
try {
|
try {
|
||||||
// read data from the API
|
// read data from the API
|
||||||
val mensaObject = JSONObject(url.readText()) //JSONObject(inReader.readLine())
|
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
|
||||||
|
@ -105,7 +103,6 @@ class TCoRAPIController {
|
||||||
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,20 +115,19 @@ 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")
|
||||||
|
|
||||||
|
return GlobalScope.launch(Dispatchers.IO) {
|
||||||
try {
|
try {
|
||||||
// read data from the API
|
// read data from the API
|
||||||
val timetableObject = JSONObject(url.readText()) //JSONObject(inReader.readLine())
|
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
|
||||||
|
@ -140,7 +136,6 @@ class TCoRAPIController {
|
||||||
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -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<*>) {
|
||||||
|
|
Loading…
Reference in New Issue