[API/Edudziennik] Fix fix for semesters and getting grades on first login.

This commit is contained in:
Kacper Ziubryniewicz 2020-01-15 22:26:38 +01:00
parent 2050083bce
commit c5ce582678
3 changed files with 26 additions and 14 deletions

View File

@ -74,6 +74,11 @@ class DataEdudziennik(app: App, profile: Profile?, loginStore: LoginStore) : Dat
| | | | __| '_ \ / _ \ '__|
| |__| | |_| | | | __/ |
\____/ \__|_| |_|\___|*/
private var mCurrentSemester: Int? = null
var currentSemester: Int
get() { mCurrentSemester = mCurrentSemester ?: profile?.getStudentData("currentSemester", 1); return mCurrentSemester ?: 1 }
set(value) { profile?.putStudentData("currentSemester", value) ?: return; mCurrentSemester = value }
private var mSchoolName: String? = null
var schoolName: String?
get() { mSchoolName = mSchoolName ?: profile?.getStudentData("schoolName", null); return mSchoolName }

View File

@ -25,11 +25,11 @@ open class EdudziennikWeb(open val data: DataEdudziennik) {
val profile
get() = data.profile
fun webGet(tag: String, endpoint: String, xhr: Boolean = false, onSuccess: (text: String) -> Unit) {
fun webGet(tag: String, endpoint: String, xhr: Boolean = false, semester: Int? = null, onSuccess: (text: String) -> Unit) {
val url = "https://dziennikel.appspot.com/" + when (endpoint.endsWith('/') || endpoint.contains('?') || endpoint.isEmpty()) {
true -> endpoint
else -> "$endpoint/"
}
} + (semester?.let { "?semester=$it" } ?: "")
d(tag, "Request: Edudziennik/Web - $url")
@ -41,11 +41,17 @@ open class EdudziennikWeb(open val data: DataEdudziennik) {
return
}
val cookies = data.app.cookieJar.getForDomain("dziennikel.appspot.com")
val semester = cookies.firstOrNull { it.name() == "semester" }?.value()?.toIntOrNull()
if (semester == null && url.contains("start")) {
profile?.also { profile ->
val cookies = data.app.cookieJar.getForDomain("dziennikel.appspot.com")
val semesterCookie = cookies.firstOrNull { it.name() == "semester" }?.value()?.toIntOrNull()
if (profile != null && semester == 2 && profile!!.dateSemester2Start > Date.getToday())
profile!!.dateSemester2Start = Date.getToday().stepForward(0, 0, -1)
semesterCookie?.let { data.currentSemester = it }
if (semesterCookie == 2 && profile.dateSemester2Start > Date.getToday())
profile.dateSemester2Start = Date.getToday().stepForward(0, 0, -1)
}
}
try {
onSuccess(text)

View File

@ -27,17 +27,18 @@ class EdudziennikWebGrades(override val data: DataEdudziennik,
private const val TAG = "EdudziennikWebGrades"
}
private var semester: Int = 1
private var requestSemester: Int? = null
init { data.profile?.also { profile ->
semester = profile.currentSemester
init {
if (profile?.empty == true && data.currentSemester == 2) requestSemester = 1
getGrades()
} ?: onSuccess() }
}
private fun getGrades() { data.profile?.also { profile ->
webGet(TAG, data.studentEndpoint + "start/?semester=$semester") { text ->
val doc = Jsoup.parse(text)
webGet(TAG, data.studentEndpoint + "start", semester = requestSemester) { text ->
val semester = requestSemester ?: data.currentSemester
val doc = Jsoup.parse(text)
val subjects = doc.select("#student_grades tbody").firstOrNull()?.children()
subjects?.forEach { subjectElement ->
@ -212,8 +213,8 @@ class EdudziennikWebGrades(override val data: DataEdudziennik,
})
}
if (profile.empty && semester == 2) {
semester = 1
if (profile.empty && requestSemester == 1 && data.currentSemester == 2) {
requestSemester = null
getGrades()
} else {
data.setSyncNext(ENDPOINT_EDUDZIENNIK_WEB_GRADES, SYNC_ALWAYS)