mirror of
https://github.com/szkolny-eu/szkolny-android.git
synced 2025-01-31 13:48:20 +01:00
[Vulcan/Hebe] Add getting grades.
This commit is contained in:
parent
ae20c30c88
commit
c7d2ac4e3e
@ -127,6 +127,7 @@ const val VULCAN_WEB_ENDPOINT_LUCKY_NUMBER = "Start.mvc/GetKidsLuckyNumbers"
|
|||||||
const val VULCAN_WEB_ENDPOINT_REGISTER_DEVICE = "RejestracjaUrzadzeniaToken.mvc/Get"
|
const val VULCAN_WEB_ENDPOINT_REGISTER_DEVICE = "RejestracjaUrzadzeniaToken.mvc/Get"
|
||||||
const val VULCAN_HEBE_ENDPOINT_REGISTER_NEW = "api/mobile/register/new"
|
const val VULCAN_HEBE_ENDPOINT_REGISTER_NEW = "api/mobile/register/new"
|
||||||
const val VULCAN_HEBE_ENDPOINT_MAIN = "api/mobile/register/hebe"
|
const val VULCAN_HEBE_ENDPOINT_MAIN = "api/mobile/register/hebe"
|
||||||
|
const val VULCAN_HEBE_ENDPOINT_GRADES = "api/mobile/grade"
|
||||||
|
|
||||||
const val EDUDZIENNIK_USER_AGENT = "Szkolny.eu/${BuildConfig.VERSION_NAME}"
|
const val EDUDZIENNIK_USER_AGENT = "Szkolny.eu/${BuildConfig.VERSION_NAME}"
|
||||||
|
|
||||||
|
@ -20,6 +20,8 @@ const val ENDPOINT_VULCAN_API_ATTENDANCE = 1080
|
|||||||
const val ENDPOINT_VULCAN_API_MESSAGES_INBOX = 1090
|
const val ENDPOINT_VULCAN_API_MESSAGES_INBOX = 1090
|
||||||
const val ENDPOINT_VULCAN_API_MESSAGES_SENT = 1100
|
const val ENDPOINT_VULCAN_API_MESSAGES_SENT = 1100
|
||||||
const val ENDPOINT_VULCAN_WEB_LUCKY_NUMBERS = 2010
|
const val ENDPOINT_VULCAN_WEB_LUCKY_NUMBERS = 2010
|
||||||
|
const val ENDPOINT_VULCAN_HEBE_MAIN = 3000
|
||||||
|
const val ENDPOINT_VULCAN_HEBE_GRADES = 3040
|
||||||
|
|
||||||
val VulcanFeatures = listOf(
|
val VulcanFeatures = listOf(
|
||||||
// timetable
|
// timetable
|
||||||
@ -35,6 +37,9 @@ val VulcanFeatures = listOf(
|
|||||||
ENDPOINT_VULCAN_API_GRADES to LOGIN_METHOD_VULCAN_API,
|
ENDPOINT_VULCAN_API_GRADES to LOGIN_METHOD_VULCAN_API,
|
||||||
ENDPOINT_VULCAN_API_GRADES_SUMMARY to LOGIN_METHOD_VULCAN_API
|
ENDPOINT_VULCAN_API_GRADES_SUMMARY to LOGIN_METHOD_VULCAN_API
|
||||||
), listOf(LOGIN_METHOD_VULCAN_API)),
|
), listOf(LOGIN_METHOD_VULCAN_API)),
|
||||||
|
Feature(LOGIN_TYPE_VULCAN, FEATURE_GRADES, listOf(
|
||||||
|
ENDPOINT_VULCAN_HEBE_GRADES to LOGIN_METHOD_VULCAN_HEBE
|
||||||
|
), listOf(LOGIN_METHOD_VULCAN_HEBE)),
|
||||||
// homework
|
// homework
|
||||||
Feature(LOGIN_TYPE_VULCAN, FEATURE_HOMEWORK, listOf(
|
Feature(LOGIN_TYPE_VULCAN, FEATURE_HOMEWORK, listOf(
|
||||||
ENDPOINT_VULCAN_API_HOMEWORK to LOGIN_METHOD_VULCAN_API
|
ENDPOINT_VULCAN_API_HOMEWORK to LOGIN_METHOD_VULCAN_API
|
||||||
|
@ -7,6 +7,7 @@ package pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data
|
|||||||
import pl.szczodrzynski.edziennik.R
|
import pl.szczodrzynski.edziennik.R
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.*
|
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.api.*
|
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.api.*
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.hebe.VulcanHebeGrades
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.web.VulcanWebLuckyNumber
|
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.web.VulcanWebLuckyNumber
|
||||||
import pl.szczodrzynski.edziennik.utils.Utils
|
import pl.szczodrzynski.edziennik.utils.Utils
|
||||||
|
|
||||||
@ -91,6 +92,10 @@ class VulcanData(val data: DataVulcan, val onSuccess: () -> Unit) {
|
|||||||
data.startProgress(R.string.edziennik_progress_endpoint_lucky_number)
|
data.startProgress(R.string.edziennik_progress_endpoint_lucky_number)
|
||||||
VulcanWebLuckyNumber(data, lastSync, onSuccess)
|
VulcanWebLuckyNumber(data, lastSync, onSuccess)
|
||||||
}
|
}
|
||||||
|
ENDPOINT_VULCAN_HEBE_GRADES -> {
|
||||||
|
data.startProgress(R.string.edziennik_progress_endpoint_grades)
|
||||||
|
VulcanHebeGrades(data, lastSync, onSuccess)
|
||||||
|
}
|
||||||
else -> onSuccess(endpointId)
|
else -> onSuccess(endpointId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data
|
package pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data
|
||||||
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
|
import androidx.core.util.set
|
||||||
import com.google.gson.JsonArray
|
import com.google.gson.JsonArray
|
||||||
import com.google.gson.JsonElement
|
import com.google.gson.JsonElement
|
||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
@ -14,6 +15,8 @@ import pl.szczodrzynski.edziennik.data.api.*
|
|||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.DataVulcan
|
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.DataVulcan
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.hebe.HebeFilterType
|
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.hebe.HebeFilterType
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Subject
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Teacher
|
||||||
import pl.szczodrzynski.edziennik.utils.Utils.d
|
import pl.szczodrzynski.edziennik.utils.Utils.d
|
||||||
import pl.szczodrzynski.edziennik.utils.models.Date
|
import pl.szczodrzynski.edziennik.utils.models.Date
|
||||||
import java.net.HttpURLConnection
|
import java.net.HttpURLConnection
|
||||||
@ -36,6 +39,47 @@ open class VulcanHebe(open val data: DataVulcan, open val lastSync: Long?) {
|
|||||||
val profile
|
val profile
|
||||||
get() = data.profile
|
get() = data.profile
|
||||||
|
|
||||||
|
fun getDate(json: JsonObject?, key: String): Long {
|
||||||
|
val date = json.getJsonObject(key)
|
||||||
|
return date.getLong("Timestamp") ?: return System.currentTimeMillis()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getTeacherId(json: JsonObject?, key: String): Long {
|
||||||
|
val teacher = json.getJsonObject(key)
|
||||||
|
val teacherId = teacher.getLong("Id") ?: return -1
|
||||||
|
if (data.teacherList[teacherId] == null) {
|
||||||
|
data.teacherList[teacherId] = Teacher(
|
||||||
|
data.profileId,
|
||||||
|
teacherId,
|
||||||
|
teacher.getString("Name") ?: "",
|
||||||
|
teacher.getString("Surname") ?: ""
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return teacherId
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getSubjectId(json: JsonObject?, key: String): Long {
|
||||||
|
val subject = json.getJsonObject(key)
|
||||||
|
val subjectId = subject.getLong("Id") ?: return -1
|
||||||
|
if (data.subjectList[subjectId] == null) {
|
||||||
|
data.subjectList[subjectId] = Subject(
|
||||||
|
data.profileId,
|
||||||
|
subjectId,
|
||||||
|
subject.getString("Name") ?: "",
|
||||||
|
subject.getString("Kod") ?: ""
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return subjectId
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getSemester(json: JsonObject?): Int {
|
||||||
|
val periodId = json.getInt("PeriodId") ?: return 1
|
||||||
|
return if (periodId == data.semester1Id)
|
||||||
|
1
|
||||||
|
else
|
||||||
|
2
|
||||||
|
}
|
||||||
|
|
||||||
inline fun <reified T> apiRequest(
|
inline fun <reified T> apiRequest(
|
||||||
tag: String,
|
tag: String,
|
||||||
endpoint: String,
|
endpoint: String,
|
||||||
@ -168,7 +212,9 @@ open class VulcanHebe(open val data: DataVulcan, open val lastSync: Long?) {
|
|||||||
firebaseToken: String? = null,
|
firebaseToken: String? = null,
|
||||||
crossinline onSuccess: (json: T, response: Response?) -> Unit
|
crossinline onSuccess: (json: T, response: Response?) -> Unit
|
||||||
) {
|
) {
|
||||||
val queryPath = query.map { it.key + "=" + URLEncoder.encode(it.value, "UTF-8") }.join("&")
|
val queryPath = query.map {
|
||||||
|
it.key + "=" + URLEncoder.encode(it.value, "UTF-8").replace("+", "%20")
|
||||||
|
}.join("&")
|
||||||
apiRequest(
|
apiRequest(
|
||||||
tag,
|
tag,
|
||||||
if (query.isNotEmpty()) "$endpoint?$queryPath" else endpoint,
|
if (query.isNotEmpty()) "$endpoint?$queryPath" else endpoint,
|
||||||
|
@ -0,0 +1,119 @@
|
|||||||
|
package pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.hebe
|
||||||
|
|
||||||
|
import pl.szczodrzynski.edziennik.*
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.VULCAN_HEBE_ENDPOINT_GRADES
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.DataVulcan
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.ENDPOINT_VULCAN_HEBE_GRADES
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.VulcanHebe
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Grade
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
|
||||||
|
import java.text.DecimalFormat
|
||||||
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
|
class VulcanHebeGrades(
|
||||||
|
override val data: DataVulcan,
|
||||||
|
override val lastSync: Long?,
|
||||||
|
val onSuccess: (endpointId: Int) -> Unit
|
||||||
|
) : VulcanHebe(data, lastSync) {
|
||||||
|
companion object {
|
||||||
|
const val TAG = "VulcanApiGrades"
|
||||||
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
apiGetList(
|
||||||
|
TAG,
|
||||||
|
VULCAN_HEBE_ENDPOINT_GRADES,
|
||||||
|
HebeFilterType.BY_PUPIL,
|
||||||
|
lastSync = lastSync
|
||||||
|
) { list, _ ->
|
||||||
|
list.forEach { grade ->
|
||||||
|
val id = grade.getLong("Id") ?: return@forEach
|
||||||
|
|
||||||
|
val column = grade.getJsonObject("Column")
|
||||||
|
val category = column.getJsonObject("Category")
|
||||||
|
val categoryText = category.getString("Name")
|
||||||
|
|
||||||
|
val teacherId = getTeacherId(grade, "Creator")
|
||||||
|
val subjectId = getSubjectId(column, "Subject")
|
||||||
|
|
||||||
|
val description = column.getString("Name")
|
||||||
|
val comment = grade.getString("Comment")
|
||||||
|
var value = grade.getFloat("Value")
|
||||||
|
var weight = column.getFloat("Weight") ?: 0.0f
|
||||||
|
val numerator = grade.getFloat("Numerator ")
|
||||||
|
val denominator = grade.getFloat("Denominator")
|
||||||
|
val addedDate = getDate(grade, "DateModify")
|
||||||
|
|
||||||
|
var finalDescription = ""
|
||||||
|
|
||||||
|
var name = when (numerator != null && denominator != null) {
|
||||||
|
true -> {
|
||||||
|
value = numerator / denominator
|
||||||
|
finalDescription += DecimalFormat("#.##").format(numerator) +
|
||||||
|
"/" + DecimalFormat("#.##").format(denominator)
|
||||||
|
weight = 0.0f
|
||||||
|
(value * 100).roundToInt().toString() + "%"
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
if (value == null) weight = 0.0f
|
||||||
|
|
||||||
|
grade.getString("Content") ?: ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
comment?.also {
|
||||||
|
if (name == "") name = it
|
||||||
|
else finalDescription = (if (finalDescription == "") "" else " ") + it
|
||||||
|
}
|
||||||
|
|
||||||
|
description?.also {
|
||||||
|
finalDescription = (if (finalDescription == "") "" else " - ") + it
|
||||||
|
}
|
||||||
|
|
||||||
|
val columnColor = column.getInt("Color") ?: 0
|
||||||
|
val color = if (columnColor == 0)
|
||||||
|
when (name) {
|
||||||
|
"1-", "1", "1+" -> 0xffd65757
|
||||||
|
"2-", "2", "2+" -> 0xff9071b3
|
||||||
|
"3-", "3", "3+" -> 0xffd2ab24
|
||||||
|
"4-", "4", "4+" -> 0xff50b6d6
|
||||||
|
"5-", "5", "5+" -> 0xff2cbd92
|
||||||
|
"6-", "6", "6+" -> 0xff91b43c
|
||||||
|
else -> 0xff3D5F9C
|
||||||
|
}.toInt()
|
||||||
|
else
|
||||||
|
columnColor
|
||||||
|
|
||||||
|
val gradeObject = Grade(
|
||||||
|
profileId = profileId,
|
||||||
|
id = id,
|
||||||
|
name = name,
|
||||||
|
type = Grade.TYPE_NORMAL,
|
||||||
|
value = value ?: 0.0f,
|
||||||
|
weight = weight,
|
||||||
|
color = color,
|
||||||
|
category = categoryText,
|
||||||
|
description = finalDescription,
|
||||||
|
comment = null,
|
||||||
|
semester = getSemester(column),
|
||||||
|
teacherId = teacherId,
|
||||||
|
subjectId = subjectId,
|
||||||
|
addedDate = addedDate
|
||||||
|
)
|
||||||
|
|
||||||
|
data.gradeList.add(gradeObject)
|
||||||
|
data.metadataList.add(
|
||||||
|
Metadata(
|
||||||
|
profileId,
|
||||||
|
Metadata.TYPE_GRADE,
|
||||||
|
id,
|
||||||
|
profile?.empty ?: true,
|
||||||
|
profile?.empty ?: true
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
onSuccess(ENDPOINT_VULCAN_HEBE_GRADES)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -5,10 +5,9 @@ import pl.szczodrzynski.edziennik.*
|
|||||||
import pl.szczodrzynski.edziennik.data.api.LOGIN_TYPE_VULCAN
|
import pl.szczodrzynski.edziennik.data.api.LOGIN_TYPE_VULCAN
|
||||||
import pl.szczodrzynski.edziennik.data.api.VULCAN_HEBE_ENDPOINT_MAIN
|
import pl.szczodrzynski.edziennik.data.api.VULCAN_HEBE_ENDPOINT_MAIN
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.DataVulcan
|
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.DataVulcan
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.ENDPOINT_VULCAN_API_PUSH_CONFIG
|
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.ENDPOINT_VULCAN_HEBE_MAIN
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.VulcanHebe
|
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.VulcanHebe
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Profile
|
import pl.szczodrzynski.edziennik.data.db.entity.Profile
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
|
|
||||||
import pl.szczodrzynski.edziennik.utils.models.Date
|
import pl.szczodrzynski.edziennik.utils.models.Date
|
||||||
|
|
||||||
class VulcanHebeMain(
|
class VulcanHebeMain(
|
||||||
@ -146,7 +145,7 @@ class VulcanHebeMain(
|
|||||||
dateYearEnd?.let { newProfile.dateYearEnd = it }
|
dateYearEnd?.let { newProfile.dateYearEnd = it }
|
||||||
|
|
||||||
if (profile != null)
|
if (profile != null)
|
||||||
data.setSyncNext(ENDPOINT_VULCAN_API_PUSH_CONFIG, SYNC_ALWAYS)
|
data.setSyncNext(ENDPOINT_VULCAN_HEBE_MAIN, 1 * DAY)
|
||||||
|
|
||||||
profileList?.add(newProfile)
|
profileList?.add(newProfile)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user