diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/Regexes.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/Regexes.kt
new file mode 100644
index 00000000..82c7136d
--- /dev/null
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/Regexes.kt
@@ -0,0 +1,16 @@
+/*
+ * Copyright (c) Kuba Szczodrzyński 2019-10-6.
+ */
+
+package pl.szczodrzynski.edziennik.api.v2
+
+import java.util.regex.Pattern
+
+object Regexes {
+ val MOBIDZIENNIK_GRADES_SUBJECT_NAME by lazy {
+ "
\\n*\\s*(.+?)\\s*\\n*(?:<.*?)??".toRegex(RegexOption.DOT_MATCHES_ALL)
+ }
+ val MOBIDZIENNIK_EVENT_TYPE by lazy {
+ "\\(([0-9A-ząęóżźńśłć]*?)\\)$".toRegex(RegexOption.DOT_MATCHES_ALL)
+ }
+}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/MobidziennikApi.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/MobidziennikApi.kt
index 83b55f36..f9cbbd9b 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/MobidziennikApi.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/MobidziennikApi.kt
@@ -4,9 +4,6 @@
package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.web
-import android.util.SparseArray
-import androidx.collection.SparseArrayCompat
-import androidx.core.util.forEach
import pl.szczodrzynski.edziennik.api.v2.ERROR_MOBIDZIENNIK_WEB_INVALID_RESPONSE
import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik
import pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.MobidziennikWeb
@@ -42,9 +39,9 @@ class MobidziennikApi(override val data: DataMobidziennik,
16 -> MobidziennikApiAttendance(data, rows)
17 -> MobidziennikApiNotices(data, rows)
18 -> MobidziennikApiGrades(data, rows)
- /*21 -> MobidziennikApiEvents(data, rows)
+ 21 -> MobidziennikApiEvents(data, rows)
23 -> MobidziennikApiHomework(data, rows)
- 24 -> MobidziennikApiTimetable(data, rows)*/
+ 24 -> MobidziennikApiTimetable(data, rows)
}
}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/apidata/MobidziennikApiEvents.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/apidata/MobidziennikApiEvents.kt
new file mode 100644
index 00000000..2baf4b22
--- /dev/null
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/apidata/MobidziennikApiEvents.kt
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) Kuba Szczodrzyński 2019-10-8.
+ */
+
+package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.web.apidata
+
+import android.graphics.Color
+import androidx.core.util.contains
+import pl.szczodrzynski.edziennik.api.v2.Regexes
+import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik
+import pl.szczodrzynski.edziennik.data.db.modules.events.Event
+import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory
+import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
+import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice
+import pl.szczodrzynski.edziennik.utils.models.Date
+import pl.szczodrzynski.edziennik.utils.models.Time
+import java.text.ParseException
+import java.text.SimpleDateFormat
+import java.util.*
+
+class MobidziennikApiEvents(val data: DataMobidziennik, rows: List) {
+ init {
+ for (row in rows) {
+ if (row.isEmpty())
+ continue
+ val cols = row.split("|")
+
+ val teamId = cols[2].toLong()
+ if (data.teamList.contains(teamId)) {
+
+ val id = cols[0].toLong()
+ val teacherId = cols[1].toLong()
+ val subjectId = cols[3].toLong()
+ var type = Event.TYPE_DEFAULT
+ var topic = cols[5]
+ Regexes.MOBIDZIENNIK_EVENT_TYPE.find(topic)?.let {
+ val typeText = it.value
+ when (typeText) {
+ "sprawdzian" -> type = Event.TYPE_EXAM
+ "kartkówka" -> type = Event.TYPE_SHORT_QUIZ
+ }
+ topic = topic.replace("($typeText)", "").trim()
+ }
+ val eventDate = Date.fromYmd(cols[4])
+ val startTime = Time.fromYmdHm(cols[6])
+ val format = SimpleDateFormat("yyyyMMddHHmmss", Locale.US)
+ val addedDate = try {
+ format.parse(cols[7]).time
+ } catch (e: ParseException) {
+ e.printStackTrace()
+ System.currentTimeMillis()
+ }
+
+
+ val eventObject = Event(
+ data.profileId,
+ id,
+ eventDate,
+ startTime,
+ topic,
+ -1,
+ type,
+ false,
+ teacherId,
+ subjectId,
+ teamId)
+
+ data.eventList.add(eventObject)
+ data.metadataList.add(
+ Metadata(
+ data.profileId,
+ Metadata.TYPE_EVENT,
+ id,
+ data.profile?.empty ?: false,
+ data.profile?.empty ?: false,
+ addedDate
+ ))
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/apidata/MobidziennikApiHomework.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/apidata/MobidziennikApiHomework.kt
new file mode 100644
index 00000000..af597202
--- /dev/null
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/apidata/MobidziennikApiHomework.kt
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) Kuba Szczodrzyński 2019-10-8.
+ */
+
+package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.web.apidata
+
+import android.graphics.Color
+import androidx.core.util.contains
+import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik
+import pl.szczodrzynski.edziennik.data.db.modules.events.Event
+import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory
+import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
+import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice
+import pl.szczodrzynski.edziennik.utils.models.Date
+import pl.szczodrzynski.edziennik.utils.models.Time
+
+class MobidziennikApiHomework(val data: DataMobidziennik, rows: List) {
+ init {
+ for (row in rows) {
+ if (row.isEmpty())
+ continue
+ val cols = row.split("|")
+
+ val teamId = cols[5].toLong()
+ if (data.teamList.contains(teamId)) {
+
+ val id = cols[0].toLong()
+ val teacherId = cols[7].toLong()
+ val subjectId = cols[6].toLong()
+ val topic = cols[1]
+ val eventDate = Date.fromYmd(cols[2])
+ val startTime = Time.fromYmdHm(cols[3])
+
+ val eventObject = Event(
+ data.profileId,
+ id,
+ eventDate,
+ startTime,
+ topic,
+ -1,
+ Event.TYPE_HOMEWORK,
+ false,
+ teacherId,
+ subjectId,
+ teamId)
+
+ data.eventList.add(eventObject)
+ data.metadataList.add(
+ Metadata(
+ data.profileId,
+ Metadata.TYPE_HOMEWORK,
+ id,
+ data.profile?.empty ?: false,
+ data.profile?.empty ?: false,
+ System.currentTimeMillis()
+ ))
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/apidata/MobidziennikApiTimetable.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/apidata/MobidziennikApiTimetable.kt
new file mode 100644
index 00000000..38f69990
--- /dev/null
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/apidata/MobidziennikApiTimetable.kt
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) Kuba Szczodrzyński 2019-10-8.
+ */
+
+package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.web.apidata
+
+import android.graphics.Color
+import androidx.core.util.contains
+import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik
+import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson
+import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange
+import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
+import pl.szczodrzynski.edziennik.fixWhiteSpaces
+import pl.szczodrzynski.edziennik.singleOrNull
+import pl.szczodrzynski.edziennik.utils.Utils.strToInt
+
+class MobidziennikApiTimetable(val data: DataMobidziennik, rows: List) {
+ init {
+ for (lessonStr in rows) {
+ if (lessonStr.isNotEmpty()) {
+ val lesson = lessonStr.split("|")
+
+ if (lesson[0].toInt() != data.studentId)
+ continue
+
+ if (lesson[1] == "plan_lekcji" || lesson[1] == "lekcja") {
+ val lessonObject = Lesson(data.profileId, lesson[2], lesson[3], lesson[4])
+
+ data.subjectList.singleOrNull { it.longName == lesson[5] }?.let {
+ lessonObject.subjectId = it.id
+ }
+ data.teacherList.singleOrNull { it.fullNameLastFirst == (lesson[7]+" "+lesson[6]).fixWhiteSpaces() }?.let {
+ lessonObject.teacherId = it.id
+ }
+ data.teamList.singleOrNull { it.name == lesson[8]+lesson[9] }?.let {
+ lessonObject.teamId = it.id
+ }
+ lessonObject.classroomName = lesson[11]
+ data.lessonList.add(lessonObject)
+ }
+ }
+ }
+
+ // searching for all changes
+ for (lessonStr in rows) {
+ if (lessonStr.isNotEmpty()) {
+ val lesson = lessonStr.split("|")
+
+ if (lesson[0].toInt() != data.studentId)
+ continue
+
+ if (lesson[1] == "zastepstwo" || lesson[1] == "lekcja_odwolana") {
+ val lessonChange = LessonChange(data.profileId, lesson[2], lesson[3], lesson[4])
+
+ data.subjectList.singleOrNull { it.longName == lesson[5] }?.let {
+ lessonChange.subjectId = it.id
+ }
+ data.teacherList.singleOrNull { it.fullNameLastFirst == (lesson[7]+" "+lesson[6]).fixWhiteSpaces() }?.let {
+ lessonChange.teacherId = it.id
+ }
+ data.teamList.singleOrNull { it.name == lesson[8]+lesson[9] }?.let {
+ lessonChange.teamId = it.id
+ }
+
+ if (lesson[1] == "zastepstwo") {
+ lessonChange.type = LessonChange.TYPE_CHANGE
+ }
+ else if (lesson[1] == "lekcja_odwolana") {
+ lessonChange.type = LessonChange.TYPE_CANCELLED
+ }
+ else if (lesson[1] == "lekcja") {
+ lessonChange.type = LessonChange.TYPE_ADDED
+ }
+ lessonChange.classroomName = lesson[11]
+
+ val originalLesson = lessonChange.getOriginalLesson(data.lessonList)
+
+ if (lessonChange.type == LessonChange.TYPE_ADDED) {
+ if (originalLesson == null) {
+ // original lesson doesn't exist, save a new addition
+ // TODO
+ /*if (!RegisterLessonChange.existsAddition(app.profile, registerLessonChange)) {
+ app.profile.timetable.addLessonAddition(registerLessonChange);
+ }*/
+ } else {
+ // original lesson exists, so we need to compare them
+ if (!lessonChange.matches(originalLesson)) {
+ // the lessons are different, so it's probably a lesson change
+ // ahhh this damn API
+ lessonChange.type = LessonChange.TYPE_CHANGE
+ }
+ }
+
+ }
+ if (lessonChange.type != LessonChange.TYPE_ADDED) {
+ // it's not a lesson addition
+ data.lessonChangeList.add(lessonChange)
+ data.metadataList.add(
+ Metadata(
+ data.profileId,
+ Metadata.TYPE_LESSON_CHANGE,
+ lessonChange.id,
+ data.profile?.empty ?: false,
+ data.profile?.empty ?: false,
+ System.currentTimeMillis()
+ ))
+ if (originalLesson == null) {
+ // there is no original lesson, so we have to add one in order to change it
+ data.lessonList.add(Lesson.fromLessonChange(lessonChange))
+ }
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/apidata/MobidziennikApiUsers.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/apidata/MobidziennikApiUsers.kt
index 77d4f454..4d3fb7cf 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/apidata/MobidziennikApiUsers.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/apidata/MobidziennikApiUsers.kt
@@ -6,6 +6,7 @@ package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.web.apidata
import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik
import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher
+import pl.szczodrzynski.edziennik.fixWhiteSpaces
class MobidziennikApiUsers(val data: DataMobidziennik, rows: List) {
init {
@@ -15,8 +16,8 @@ class MobidziennikApiUsers(val data: DataMobidziennik, rows: List) {
val cols = row.split("|")
val id = cols[0].toLong()
- val name = cols[4].trim()
- val surname = cols[5].trim()
+ val name = cols[4].fixWhiteSpaces()
+ val surname = cols[5].fixWhiteSpaces()
data.teachersMap.put(id, "$surname $name")
data.teacherList.put(id, Teacher(data.profileId, id, name, surname))