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

This commit is contained in:
Kacper Ziubryniewicz 2020-01-15 21:19:48 +01:00
parent 92e6bdb562
commit 2050083bce
6 changed files with 32 additions and 37 deletions

View File

@ -7,11 +7,7 @@ package pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik
import pl.szczodrzynski.edziennik.* import pl.szczodrzynski.edziennik.*
import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_EDUDZIENNIK_WEB import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_EDUDZIENNIK_WEB
import pl.szczodrzynski.edziennik.data.api.models.Data import pl.szczodrzynski.edziennik.data.api.models.Data
import pl.szczodrzynski.edziennik.data.db.entity.EventType import pl.szczodrzynski.edziennik.data.db.entity.*
import pl.szczodrzynski.edziennik.data.db.entity.LoginStore
import pl.szczodrzynski.edziennik.data.db.entity.Profile
import pl.szczodrzynski.edziennik.data.db.entity.Subject
import pl.szczodrzynski.edziennik.data.db.entity.Teacher
/** /**
* Use http://patorjk.com/software/taag/#p=display&f=Big for the ascii art * Use http://patorjk.com/software/taag/#p=display&f=Big for the ascii art
@ -78,11 +74,6 @@ 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 private var mSchoolName: String? = null
var schoolName: String? var schoolName: String?
get() { mSchoolName = mSchoolName ?: profile?.getStudentData("schoolName", null); return mSchoolName } get() { mSchoolName = mSchoolName ?: profile?.getStudentData("schoolName", null); return mSchoolName }

View File

@ -12,6 +12,7 @@ import pl.szczodrzynski.edziennik.data.api.*
import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.DataEdudziennik import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.DataEdudziennik
import pl.szczodrzynski.edziennik.data.api.models.ApiError import pl.szczodrzynski.edziennik.data.api.models.ApiError
import pl.szczodrzynski.edziennik.utils.Utils.d import pl.szczodrzynski.edziennik.utils.Utils.d
import pl.szczodrzynski.edziennik.utils.models.Date
open class EdudziennikWeb(open val data: DataEdudziennik) { open class EdudziennikWeb(open val data: DataEdudziennik) {
companion object { companion object {
@ -40,6 +41,12 @@ open class EdudziennikWeb(open val data: DataEdudziennik) {
return return
} }
val cookies = data.app.cookieJar.getForDomain("dziennikel.appspot.com")
val semester = cookies.firstOrNull { it.name() == "semester" }?.value()?.toIntOrNull()
if (profile != null && semester == 2 && profile!!.dateSemester2Start > Date.getToday())
profile!!.dateSemester2Start = Date.getToday().stepForward(0, 0, -1)
try { try {
onSuccess(text) onSuccess(text)
} catch (e: Exception) { } catch (e: Exception) {
@ -67,11 +74,6 @@ open class EdudziennikWeb(open val data: DataEdudziennik) {
.name("sessionid") .name("sessionid")
.value(data.webSessionId!!) .value(data.webSessionId!!)
.domain("dziennikel.appspot.com") .domain("dziennikel.appspot.com")
.secure().httpOnly().build(),
Cookie.Builder()
.name("semester")
.value((data.currentSemester).toString())
.domain("dziennikel.appspot.com")
.secure().httpOnly().build() .secure().httpOnly().build()
)) ))

View File

@ -69,7 +69,7 @@ class EdudziennikWebAttendance(override val data: DataEdudziennik,
id, id,
lesson?.displayTeacherId ?: -1, lesson?.displayTeacherId ?: -1,
lesson?.displaySubjectId ?: -1, lesson?.displaySubjectId ?: -1,
data.currentSemester, profile.currentSemester,
name, name,
date, date,
lesson?.displayStartTime ?: startTime, lesson?.displayStartTime ?: startTime,

View File

@ -13,10 +13,10 @@ import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.DataEdudziennik
import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.ENDPOINT_EDUDZIENNIK_WEB_GRADES import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.ENDPOINT_EDUDZIENNIK_WEB_GRADES
import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.EdudziennikWeb import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.EdudziennikWeb
import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel
import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
import pl.szczodrzynski.edziennik.data.db.entity.Grade import pl.szczodrzynski.edziennik.data.db.entity.Grade
import pl.szczodrzynski.edziennik.data.db.entity.Grade.* import pl.szczodrzynski.edziennik.data.db.entity.Grade.*
import pl.szczodrzynski.edziennik.data.db.entity.Metadata import pl.szczodrzynski.edziennik.data.db.entity.Metadata
import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
import pl.szczodrzynski.edziennik.get import pl.szczodrzynski.edziennik.get
import pl.szczodrzynski.edziennik.utils.Utils import pl.szczodrzynski.edziennik.utils.Utils
import pl.szczodrzynski.edziennik.utils.models.Date import pl.szczodrzynski.edziennik.utils.models.Date
@ -27,8 +27,15 @@ class EdudziennikWebGrades(override val data: DataEdudziennik,
private const val TAG = "EdudziennikWebGrades" private const val TAG = "EdudziennikWebGrades"
} }
private var semester: Int = 1
init { data.profile?.also { profile -> init { data.profile?.also { profile ->
webGet(TAG, data.studentEndpoint + "start") { text -> semester = profile.currentSemester
getGrades()
} ?: onSuccess() }
private fun getGrades() { data.profile?.also { profile ->
webGet(TAG, data.studentEndpoint + "start/?semester=$semester") { text ->
val doc = Jsoup.parse(text) val doc = Jsoup.parse(text)
val subjects = doc.select("#student_grades tbody").firstOrNull()?.children() val subjects = doc.select("#student_grades tbody").firstOrNull()?.children()
@ -107,7 +114,7 @@ class EdudziennikWebGrades(override val data: DataEdudziennik,
name, name,
value, value,
if (gradeCountToAverage) weight else 0f, if (gradeCountToAverage) weight else 0f,
data.currentSemester, semester,
teacher.id, teacher.id,
subject.id subject.id
).apply { ).apply {
@ -137,7 +144,7 @@ class EdudziennikWebGrades(override val data: DataEdudziennik,
proposed, proposed,
proposed.toFloatOrNull() ?: 0f, proposed.toFloatOrNull() ?: 0f,
0f, 0f,
data.currentSemester, semester,
-1, -1,
subject.id subject.id
).apply { ).apply {
@ -170,7 +177,7 @@ class EdudziennikWebGrades(override val data: DataEdudziennik,
final, final,
final.toFloatOrNull() ?: 0f, final.toFloatOrNull() ?: 0f,
0f, 0f,
data.currentSemester, semester,
-1, -1,
subject.id subject.id
).apply { ).apply {
@ -201,12 +208,17 @@ class EdudziennikWebGrades(override val data: DataEdudziennik,
TYPE_SEMESTER1_FINAL, TYPE_SEMESTER1_FINAL,
TYPE_SEMESTER2_FINAL TYPE_SEMESTER2_FINAL
).map { ).map {
DataRemoveModel.Grades.semesterWithType(data.currentSemester, it) DataRemoveModel.Grades.semesterWithType(semester, it)
}) })
} }
if (profile.empty && semester == 2) {
semester = 1
getGrades()
} else {
data.setSyncNext(ENDPOINT_EDUDZIENNIK_WEB_GRADES, SYNC_ALWAYS) data.setSyncNext(ENDPOINT_EDUDZIENNIK_WEB_GRADES, SYNC_ALWAYS)
onSuccess() onSuccess()
} }
}} }
} ?: onSuccess() }
} }

View File

@ -10,9 +10,9 @@ import pl.szczodrzynski.edziennik.data.api.Regexes.EDUDZIENNIK_NOTE_ID
import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.DataEdudziennik import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.DataEdudziennik
import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.ENDPOINT_EDUDZIENNIK_WEB_NOTES import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.ENDPOINT_EDUDZIENNIK_WEB_NOTES
import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.EdudziennikWeb import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.EdudziennikWeb
import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
import pl.szczodrzynski.edziennik.data.db.entity.Metadata import pl.szczodrzynski.edziennik.data.db.entity.Metadata
import pl.szczodrzynski.edziennik.data.db.entity.Notice import pl.szczodrzynski.edziennik.data.db.entity.Notice
import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
import pl.szczodrzynski.edziennik.get import pl.szczodrzynski.edziennik.get
import pl.szczodrzynski.edziennik.utils.models.Date import pl.szczodrzynski.edziennik.utils.models.Date
@ -42,7 +42,7 @@ class EdudziennikWebNotes(override val data: DataEdudziennik,
profileId, profileId,
id, id,
description, description,
data.currentSemester, profile.currentSemester,
Notice.TYPE_NEUTRAL, Notice.TYPE_NEUTRAL,
teacher.id teacher.id
) )

View File

@ -13,7 +13,6 @@ import pl.szczodrzynski.edziennik.data.api.models.ApiError
import pl.szczodrzynski.edziennik.getUnixDate import pl.szczodrzynski.edziennik.getUnixDate
import pl.szczodrzynski.edziennik.isNotNullNorEmpty import pl.szczodrzynski.edziennik.isNotNullNorEmpty
import pl.szczodrzynski.edziennik.utils.Utils.d import pl.szczodrzynski.edziennik.utils.Utils.d
import pl.szczodrzynski.edziennik.utils.models.Date
class EdudziennikLoginWeb(val data: DataEdudziennik, val onSuccess: () -> Unit) { class EdudziennikLoginWeb(val data: DataEdudziennik, val onSuccess: () -> Unit) {
companion object { companion object {
@ -62,7 +61,6 @@ class EdudziennikLoginWeb(val data: DataEdudziennik, val onSuccess: () -> Unit)
val cookies = data.app.cookieJar.getForDomain("dziennikel.appspot.com") val cookies = data.app.cookieJar.getForDomain("dziennikel.appspot.com")
val sessionId = cookies.firstOrNull { it.name() == "sessionid" }?.value() val sessionId = cookies.firstOrNull { it.name() == "sessionid" }?.value()
val semester = cookies.firstOrNull { it.name() == "semester" }?.value()?.toIntOrNull()
if (sessionId == null) { if (sessionId == null) {
data.error(ApiError(TAG, ERROR_LOGIN_EDUDZIENNIK_WEB_NO_SESSION_ID) data.error(ApiError(TAG, ERROR_LOGIN_EDUDZIENNIK_WEB_NO_SESSION_ID)
@ -72,14 +70,6 @@ class EdudziennikLoginWeb(val data: DataEdudziennik, val onSuccess: () -> Unit)
} }
data.webSessionId = sessionId data.webSessionId = sessionId
if (data.profile != null && semester != null) {
data.currentSemester = semester
if (semester == 2 && data.profile.dateSemester2Start > Date.getToday())
data.profile.dateSemester2Start = Date.getToday().stepForward(0, 0, -1)
}
data.webSessionIdExpiryTime = response.getUnixDate() + 45 * 60 /* 45 min */ data.webSessionIdExpiryTime = response.getUnixDate() + 45 * 60 /* 45 min */
onSuccess() onSuccess()
} }