more "Additional Lessons" work
* add TimetableController, this class will handle all timetable work (main + additional Subjects)
This commit is contained in:
parent
6c0624c793
commit
2d753851c0
|
@ -26,6 +26,8 @@ import android.content.Context
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import com.google.gson.GsonBuilder
|
import com.google.gson.GsonBuilder
|
||||||
|
import com.google.gson.JsonParser
|
||||||
|
import com.google.gson.reflect.TypeToken
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.coursesCacheTime
|
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.coursesCacheTime
|
||||||
|
@ -163,12 +165,21 @@ class TCoRAPIController {
|
||||||
* @param subject the subject to search for
|
* @param subject the subject to search for
|
||||||
* @param week the week to look up
|
* @param week the week to look up
|
||||||
*/
|
*/
|
||||||
fun getLessonsAsync(courseName: String, subject: String, week: Int): Deferred<ArrayList<Lesson>> {
|
fun getLessons(courseName: String, subject: String, week: Int): ArrayList<Lesson> {
|
||||||
val url = URL("$tcorBaseURL/lessons?course=$courseName&subject=$subject&week=$week")
|
val url = URL("$tcorBaseURL/lessons?course=$courseName&subject=$subject&week=$week")
|
||||||
|
var array: ArrayList<Lesson>
|
||||||
|
|
||||||
return GlobalScope.async {
|
runBlocking {
|
||||||
Gson().fromJson(url.readText(), ArrayList<Lesson>()::class.java)
|
withContext(Dispatchers.Default) {
|
||||||
|
array = Gson().fromJson(
|
||||||
|
JsonParser.parseString(url.readText()).asJsonArray,
|
||||||
|
object : TypeToken<ArrayList<Lesson>>() {}.type
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return array
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,66 @@
|
||||||
|
package org.mosad.seil0.projectlaogai.controller
|
||||||
|
|
||||||
|
import org.mosad.seil0.projectlaogai.util.Lesson
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO this controller contains
|
||||||
|
* * a list with all additional lessons
|
||||||
|
* * the main course and additional info for timetables
|
||||||
|
* * all concrete objects
|
||||||
|
*/
|
||||||
|
class TimetableController {
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
val aLessons = HashMap<String, Lesson>() // the key is courseName_lessonID
|
||||||
|
val aSubjectMap = HashMap<String, ArrayList<String>>()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* add a subject to the subjects map and all it's lessons
|
||||||
|
* to the aLessons list
|
||||||
|
* @param courseName course to which the subject belongs
|
||||||
|
* @param subject the subjects name
|
||||||
|
*/
|
||||||
|
fun addASubject(courseName: String, subject: String) {
|
||||||
|
// add subject
|
||||||
|
if (aSubjectMap.containsKey(courseName)) {
|
||||||
|
aSubjectMap[courseName]?.add(subject)
|
||||||
|
} else {
|
||||||
|
aSubjectMap[courseName] = arrayListOf(subject)
|
||||||
|
}
|
||||||
|
|
||||||
|
// add concrete lessons
|
||||||
|
TCoRAPIController.getLessons(courseName, subject, 0).forEach {lesson ->
|
||||||
|
//the courseName, subject and lessonID, separator: -
|
||||||
|
val key = "$courseName-$subject-${lesson.lessonID}"
|
||||||
|
aLessons[key] = lesson
|
||||||
|
}
|
||||||
|
println(aLessons)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* remove a subject from the subjects map and all it's lessons
|
||||||
|
* from the aLessons list
|
||||||
|
* @param courseName course to which the subject belongs
|
||||||
|
* @param subject the subjects name
|
||||||
|
*/
|
||||||
|
fun removeASubject(courseName: String, subject: String) {
|
||||||
|
// remove subject
|
||||||
|
|
||||||
|
aSubjectMap[courseName]?.remove(subject)
|
||||||
|
|
||||||
|
// remove concrete lessons
|
||||||
|
|
||||||
|
println(aLessons)
|
||||||
|
val iter = aLessons.iterator()
|
||||||
|
while (iter.hasNext()) {
|
||||||
|
val it = iter.next()
|
||||||
|
if(it.key.contains("$courseName-$subject")) {
|
||||||
|
println(it.key)
|
||||||
|
iter.remove() // use iterator to remove, otherwise ConcurrentModificationException
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -55,6 +55,7 @@ import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.
|
||||||
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.cCourse
|
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.cCourse
|
||||||
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.cShowBuffet
|
import org.mosad.seil0.projectlaogai.controller.PreferencesController.Companion.cShowBuffet
|
||||||
import org.mosad.seil0.projectlaogai.controller.TCoRAPIController
|
import org.mosad.seil0.projectlaogai.controller.TCoRAPIController
|
||||||
|
import org.mosad.seil0.projectlaogai.controller.TimetableController
|
||||||
import org.mosad.seil0.projectlaogai.util.DataTypes
|
import org.mosad.seil0.projectlaogai.util.DataTypes
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
@ -151,17 +152,27 @@ class SettingsFragment : Fragment() {
|
||||||
}
|
}
|
||||||
|
|
||||||
linLayoutManageLessons.setOnClickListener {
|
linLayoutManageLessons.setOnClickListener {
|
||||||
val myItems = listOf("Hello", "World")
|
val lessons = ArrayList<String>()
|
||||||
|
TimetableController.aSubjectMap.forEach { pair ->
|
||||||
|
pair.value.forEach {
|
||||||
|
lessons.add("${pair.key} - $it")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
MaterialDialog(context!!).show {
|
MaterialDialog(context!!).show {
|
||||||
title(R.string.manage_lessons)
|
title(R.string.manage_lessons)
|
||||||
listItemsMultiChoice(items = myItems)
|
positiveButton(R.string.delete)
|
||||||
positiveButton(R.string.delete) {
|
|
||||||
//TODO call delete action
|
|
||||||
}
|
|
||||||
negativeButton(R.string.cancel)
|
negativeButton(R.string.cancel)
|
||||||
getActionButton(WhichButton.POSITIVE).updateTextColor(cColorAccent)
|
getActionButton(WhichButton.POSITIVE).updateTextColor(cColorAccent)
|
||||||
getActionButton(WhichButton.NEGATIVE).updateTextColor(cColorAccent)
|
getActionButton(WhichButton.NEGATIVE).updateTextColor(cColorAccent)
|
||||||
|
|
||||||
|
listItemsMultiChoice(items = lessons) { dialog, indices, items ->
|
||||||
|
items.forEach {
|
||||||
|
val list = it.split(" - ")
|
||||||
|
TimetableController.removeASubject(list[0], list[1])
|
||||||
|
// TODO save
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,7 @@ import kotlinx.coroutines.runBlocking
|
||||||
import org.mosad.seil0.projectlaogai.R
|
import org.mosad.seil0.projectlaogai.R
|
||||||
import org.mosad.seil0.projectlaogai.controller.CacheController
|
import org.mosad.seil0.projectlaogai.controller.CacheController
|
||||||
import org.mosad.seil0.projectlaogai.controller.TCoRAPIController
|
import org.mosad.seil0.projectlaogai.controller.TCoRAPIController
|
||||||
|
import org.mosad.seil0.projectlaogai.controller.TimetableController
|
||||||
import org.mosad.seil0.projectlaogai.util.Course
|
import org.mosad.seil0.projectlaogai.util.Course
|
||||||
import java.util.stream.Collectors
|
import java.util.stream.Collectors
|
||||||
|
|
||||||
|
@ -65,14 +66,13 @@ 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) {
|
||||||
val lessons = runBlocking {
|
val lessons = TCoRAPIController.getLessons(selectedCourse, selectedSubject, 0)
|
||||||
TCoRAPIController.getLessonsAsync(selectedCourse, selectedSubject, 0).await()
|
|
||||||
}
|
|
||||||
println("add lesson \"$selectedCourse: $selectedSubject\"")
|
println("add lesson \"$selectedCourse: $selectedSubject\"")
|
||||||
println(lessons.toString())
|
println(lessons.toString())
|
||||||
|
|
||||||
// TODO save lesson
|
TimetableController.addASubject(selectedCourse, selectedSubject)
|
||||||
// TODO refresh timetable (add a function to show additional lessons)
|
// TODO refresh timetable (add a function to show additional lessons)
|
||||||
|
// TODO save
|
||||||
}
|
}
|
||||||
.negativeButton(R.string.cancel)
|
.negativeButton(R.string.cancel)
|
||||||
|
|
||||||
|
|
|
@ -97,6 +97,7 @@ data class MensaMenu(val meta: MensaMeta = MensaMeta(), val currentWeek: MensaWe
|
||||||
|
|
||||||
// data classes for the timetable part
|
// data classes for the timetable part
|
||||||
data class Lesson(
|
data class Lesson(
|
||||||
|
val lessonID: String,
|
||||||
val lessonSubject: String,
|
val lessonSubject: String,
|
||||||
val lessonTeacher: String,
|
val lessonTeacher: String,
|
||||||
val lessonRoom: String,
|
val lessonRoom: String,
|
||||||
|
|
Loading…
Reference in New Issue