forked from github/szkolny
[API/Edudziennik] Fix semesters and getting grades on first login.
This commit is contained in:
parent
92e6bdb562
commit
2050083bce
@ -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 }
|
||||||
|
@ -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()
|
||||||
))
|
))
|
||||||
|
|
||||||
|
@ -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,
|
||||||
|
@ -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)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
data.setSyncNext(ENDPOINT_EDUDZIENNIK_WEB_GRADES, SYNC_ALWAYS)
|
if (profile.empty && semester == 2) {
|
||||||
onSuccess()
|
semester = 1
|
||||||
|
getGrades()
|
||||||
|
} else {
|
||||||
|
data.setSyncNext(ENDPOINT_EDUDZIENNIK_WEB_GRADES, SYNC_ALWAYS)
|
||||||
|
onSuccess()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}}
|
} ?: onSuccess() }
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
)
|
)
|
||||||
|
@ -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()
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user