[APIv2/Mobidziennik] Add Notices, Grades, fix Attendance

This commit is contained in:
Kuba Szczodrzyński 2019-10-08 19:16:19 +02:00
parent 6127e574db
commit bbaa405c59
6 changed files with 155 additions and 6 deletions

View File

@ -6,6 +6,7 @@ package pl.szczodrzynski.edziennik.api.v2.mobidziennik
import android.util.LongSparseArray
import android.util.SparseArray
import android.util.SparseIntArray
import pl.szczodrzynski.edziennik.App
import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_MOBIDZIENNIK_WEB
import pl.szczodrzynski.edziennik.api.v2.models.Data
@ -33,6 +34,10 @@ class DataMobidziennik(app: App, profile: Profile?, loginStore: LoginStore) : Da
val teachersMap = LongSparseArray<String>()
val subjectsMap = LongSparseArray<String>()
val gradeAddedDates = SparseArray<Long>()
val gradeAverages = SparseArray<Float>()
val gradeColors = SparseIntArray()
private var mLoginServerName: String? = null
var loginServerName: String?
get() { mLoginServerName = mLoginServerName ?: loginStore.getLoginData("serverName", null); return mLoginServerName }

View File

@ -40,9 +40,9 @@ class MobidziennikApi(override val data: DataMobidziennik,
14 -> MobidziennikApiGradeCategories(data, rows)
15 -> MobidziennikApiLessons(data, rows)
16 -> MobidziennikApiAttendance(data, rows)
/*17 -> MobidziennikApiNotices(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)*/
}

View File

@ -5,7 +5,6 @@
package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.web.apidata
import androidx.core.util.contains
import pl.szczodrzynski.edziennik.App.profileId
import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik
import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance
import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.*
@ -36,7 +35,7 @@ class MobidziennikApiAttendance(val data: DataMobidziennik, rows: List<String>)
val semester = data.profile?.dateToSemester(lesson.date) ?: 1
val attendanceObject = Attendance(
profileId,
data.profileId,
id,
lesson.teacherId,
lesson.subjectId,
@ -49,7 +48,7 @@ class MobidziennikApiAttendance(val data: DataMobidziennik, rows: List<String>)
data.attendanceList.add(attendanceObject)
data.metadataList.add(
Metadata(
profileId,
data.profileId,
Metadata.TYPE_ATTENDANCE,
id,
data.profile?.empty ?: false,

View File

@ -0,0 +1,88 @@
/*
* Copyright (c) Kuba Szczodrzyński 2019-10-8.
*/
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.grades.Grade
import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.*
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
class MobidziennikApiGrades(val data: DataMobidziennik, rows: List<String>) {
init { run {
data.db.gradeDao().getDetails(
data.profileId,
data.gradeAddedDates,
data.gradeAverages,
data.gradeColors
)
var addedDate = System.currentTimeMillis()
for (row in rows) {
if (row.isEmpty())
continue
val cols = row.split("|")
val studentId = cols[2].toInt()
if (studentId != data.studentId)
return@run
val id = cols[0].toLong()
val categoryId = cols[6].toLongOrNull() ?: -1
val categoryColumn = cols[10].toIntOrNull() ?: 1
val name = cols[7]
val value = cols[11].toFloat()
val semester = cols[5].toInt()
val teacherId = cols[2].toLong()
val subjectId = cols[3].toLong()
var type = when (cols[8]) {
"3" -> if (semester == 1) TYPE_SEMESTER1_PROPOSED else TYPE_SEMESTER2_PROPOSED
"1" -> if (semester == 1) TYPE_SEMESTER1_FINAL else TYPE_SEMESTER2_FINAL
"4" -> TYPE_YEAR_PROPOSED
"2" -> TYPE_YEAR_FINAL
else -> TYPE_NORMAL
}
var weight = 0.0f
var category = ""
var description = ""
var color = -1
data.gradeCategories.get(categoryId)?.let { gradeCategory ->
weight = gradeCategory.weight
category = gradeCategory.text
description = gradeCategory.columns[categoryColumn-1]
color = gradeCategory.color
}
// fix for "0" value grades, so they're not counted in the average
if (value == 0.0f/* && data.app.appConfig.dontCountZeroToAverage*/) {
weight = 0.0f
}
val gradeObject = Grade(
data.profileId,
id,
category,
color,
description,
name,
value,
weight,
semester,
teacherId,
subjectId)
data.gradeList.add(gradeObject)
data.metadataList.add(
Metadata(
data.profileId,
Metadata.TYPE_GRADE,
id,
data.profile?.empty ?: false,
data.profile?.empty ?: false,
addedDate
))
addedDate++
}
}}
}

View File

@ -0,0 +1,57 @@
/*
* Copyright (c) Kuba Szczodrzyński 2019-10-8.
*/
package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.web.apidata
import pl.szczodrzynski.edziennik.App
import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik
import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice
import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher
import pl.szczodrzynski.edziennik.utils.models.Date
class MobidziennikApiNotices(val data: DataMobidziennik, rows: List<String>) {
init { run {
for (row in rows) {
if (row.isEmpty())
continue
val cols = row.split("|")
val studentId = cols[2].toInt()
if (studentId != data.studentId)
return@run
val id = cols[0].toLong()
val text = cols[4]
val semester = cols[6].toInt()
val type = when (cols[3]) {
"0" -> Notice.TYPE_NEGATIVE
"1" -> Notice.TYPE_POSITIVE
else -> Notice.TYPE_NEUTRAL
}
val teacherId = cols[5].toLong()
val addedDate = Date.fromYmd(cols[7]).inMillis
val noticeObject = Notice(
data.profileId,
id,
text,
semester,
type,
teacherId)
data.noticeList.add(noticeObject)
data.metadataList.add(
Metadata(
data.profileId,
Metadata.TYPE_NOTICE,
id,
data.profile?.empty ?: false,
data.profile?.empty ?: false,
addedDate
))
}
}}
}

View File

@ -141,7 +141,7 @@ open class Data(val app: App, val profile: Profile?, val loginStore: LoginStore)
val metadataList = mutableListOf<Metadata>()
val messageMetadataList = mutableListOf<Metadata>()
private val db by lazy { app.db }
val db by lazy { app.db }
init {