mirror of
https://github.com/szkolny-eu/szkolny-android.git
synced 2025-01-18 21:06:44 -06:00
[API/Vulcan] Add syncing first semester. Disable counting releases in attendance.
This commit is contained in:
parent
1a8134459a
commit
35f4f34342
@ -124,6 +124,15 @@ class DataVulcan(app: App, profile: Profile?, loginStore: LoginStore) : Data(app
|
|||||||
get() { mStudentSemesterId = mStudentSemesterId ?: profile?.getStudentData("studentSemesterId", 0); return mStudentSemesterId ?: 0 }
|
get() { mStudentSemesterId = mStudentSemesterId ?: profile?.getStudentData("studentSemesterId", 0); return mStudentSemesterId ?: 0 }
|
||||||
set(value) { profile?.putStudentData("studentSemesterId", value) ?: return; mStudentSemesterId = value }
|
set(value) { profile?.putStudentData("studentSemesterId", value) ?: return; mStudentSemesterId = value }
|
||||||
|
|
||||||
|
private var mSemester1Id: Int? = null
|
||||||
|
var semester1Id: Int
|
||||||
|
get() { mSemester1Id = mSemester1Id ?: profile?.getStudentData("semester1Id", 0); return mSemester1Id ?: 0 }
|
||||||
|
set(value) { profile?.putStudentData("semester1Id", value) ?: return; mSemester1Id = value }
|
||||||
|
private var mSemester2Id: Int? = null
|
||||||
|
var semester2Id: Int
|
||||||
|
get() { mSemester2Id = mSemester2Id ?: profile?.getStudentData("semester2Id", 0); return mSemester2Id ?: 0 }
|
||||||
|
set(value) { profile?.putStudentData("semester2Id", value) ?: return; mSemester2Id = value }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ListaUczniow/OkresNumer, e.g. 1 or 2
|
* ListaUczniow/OkresNumer, e.g. 1 or 2
|
||||||
*/
|
*/
|
||||||
|
@ -9,6 +9,7 @@ import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.VulcanApi
|
|||||||
import pl.szczodrzynski.edziennik.data.db.entity.Attendance
|
import pl.szczodrzynski.edziennik.data.db.entity.Attendance
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Attendance.Companion.TYPE_PRESENT
|
import pl.szczodrzynski.edziennik.data.db.entity.Attendance.Companion.TYPE_PRESENT
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
|
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Profile
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
|
import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
|
||||||
import pl.szczodrzynski.edziennik.utils.models.Date
|
import pl.szczodrzynski.edziennik.utils.models.Date
|
||||||
|
|
||||||
@ -25,15 +26,38 @@ class VulcanApiAttendance(override val data: DataVulcan,
|
|||||||
data.db.attendanceTypeDao().getAllNow(profileId).toSparseArray(data.attendanceTypes) { it.id }
|
data.db.attendanceTypeDao().getAllNow(profileId).toSparseArray(data.attendanceTypes) { it.id }
|
||||||
}
|
}
|
||||||
|
|
||||||
val startDate: String = profile.getSemesterStart(profile.currentSemester).stringY_m_d
|
val semesterId = data.studentSemesterId
|
||||||
val endDate: String = profile.getSemesterEnd(profile.currentSemester).stringY_m_d
|
val semesterNumber = data.studentSemesterNumber
|
||||||
|
if (semesterNumber == 2 && lastSync ?: 0 < profile.dateSemester1Start.inMillis) {
|
||||||
|
getAttendance(profile, semesterId - 1, semesterNumber - 1) {
|
||||||
|
getAttendance(profile, semesterId, semesterNumber) {
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
getAttendance(profile, semesterId, semesterNumber) {
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} ?: onSuccess(ENDPOINT_VULCAN_API_ATTENDANCE) }
|
||||||
|
|
||||||
|
private fun finish() {
|
||||||
|
data.setSyncNext(ENDPOINT_VULCAN_API_ATTENDANCE, SYNC_ALWAYS)
|
||||||
|
onSuccess(ENDPOINT_VULCAN_API_ATTENDANCE)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getAttendance(profile: Profile, semesterId: Int, semesterNumber: Int, onSuccess: () -> Unit) {
|
||||||
|
val startDate = profile.getSemesterStart(semesterNumber).stringY_m_d
|
||||||
|
val endDate = profile.getSemesterEnd(semesterNumber).stringY_m_d
|
||||||
|
|
||||||
apiGet(TAG, VULCAN_API_ENDPOINT_ATTENDANCE, parameters = mapOf(
|
apiGet(TAG, VULCAN_API_ENDPOINT_ATTENDANCE, parameters = mapOf(
|
||||||
"DataPoczatkowa" to startDate,
|
"DataPoczatkowa" to startDate,
|
||||||
"DataKoncowa" to endDate,
|
"DataKoncowa" to endDate,
|
||||||
"IdOddzial" to data.studentClassId,
|
"IdOddzial" to data.studentClassId,
|
||||||
"IdUczen" to data.studentId,
|
"IdUczen" to data.studentId,
|
||||||
"IdOkresKlasyfikacyjny" to data.studentSemesterId
|
"IdOkresKlasyfikacyjny" to semesterId
|
||||||
)) { json, _ ->
|
)) { json, _ ->
|
||||||
json.getJsonObject("Data")?.getJsonArray("Frekwencje")?.forEach { attendanceEl ->
|
json.getJsonObject("Data")?.getJsonArray("Frekwencje")?.forEach { attendanceEl ->
|
||||||
val attendance = attendanceEl.asJsonObject
|
val attendance = attendanceEl.asJsonObject
|
||||||
@ -47,7 +71,7 @@ class VulcanApiAttendance(override val data: DataVulcan,
|
|||||||
val lessonDate = Date.fromMillis(lessonDateMillis)
|
val lessonDate = Date.fromMillis(lessonDateMillis)
|
||||||
val startTime = data.lessonRanges.get(attendance.getInt("Numer") ?: 0)?.startTime
|
val startTime = data.lessonRanges.get(attendance.getInt("Numer") ?: 0)?.startTime
|
||||||
|
|
||||||
val lessonSemester = profile.dateToSemester(lessonDate)
|
val lessonSemester = semesterNumber
|
||||||
|
|
||||||
val attendanceObject = Attendance(
|
val attendanceObject = Attendance(
|
||||||
profileId = profileId,
|
profileId = profileId,
|
||||||
@ -65,6 +89,7 @@ class VulcanApiAttendance(override val data: DataVulcan,
|
|||||||
addedDate = lessonDate.combineWith(startTime)
|
addedDate = lessonDate.combineWith(startTime)
|
||||||
).also {
|
).also {
|
||||||
it.lessonNumber = attendance.getInt("Numer")
|
it.lessonNumber = attendance.getInt("Numer")
|
||||||
|
it.isCounted = it.baseType != Attendance.TYPE_RELEASED
|
||||||
}
|
}
|
||||||
|
|
||||||
data.attendanceList.add(attendanceObject)
|
data.attendanceList.add(attendanceObject)
|
||||||
@ -79,8 +104,7 @@ class VulcanApiAttendance(override val data: DataVulcan,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data.setSyncNext(ENDPOINT_VULCAN_API_ATTENDANCE, SYNC_ALWAYS)
|
onSuccess()
|
||||||
onSuccess(ENDPOINT_VULCAN_API_ATTENDANCE)
|
}
|
||||||
}
|
}
|
||||||
} ?: onSuccess(ENDPOINT_VULCAN_API_ATTENDANCE) }
|
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.VulcanApi
|
|||||||
import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel
|
import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Event
|
import pl.szczodrzynski.edziennik.data.db.entity.Event
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
|
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Profile
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
|
import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
|
||||||
import pl.szczodrzynski.edziennik.getBoolean
|
import pl.szczodrzynski.edziennik.getBoolean
|
||||||
import pl.szczodrzynski.edziennik.getJsonArray
|
import pl.szczodrzynski.edziennik.getJsonArray
|
||||||
@ -31,11 +32,43 @@ class VulcanApiEvents(override val data: DataVulcan,
|
|||||||
|
|
||||||
init { data.profile?.also { profile ->
|
init { data.profile?.also { profile ->
|
||||||
|
|
||||||
val startDate: String = when (profile.empty) {
|
val semesterId = data.studentSemesterId
|
||||||
true -> profile.getSemesterStart(profile.currentSemester).stringY_m_d
|
val semesterNumber = data.studentSemesterNumber
|
||||||
|
if (semesterNumber == 2 && lastSync ?: 0 < profile.dateSemester1Start.inMillis) {
|
||||||
|
getEvents(profile, semesterId - 1, semesterNumber - 1) {
|
||||||
|
getEvents(profile, semesterId, semesterNumber) {
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
getEvents(profile, semesterId, semesterNumber) {
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} ?: onSuccess(if (isHomework) ENDPOINT_VULCAN_API_HOMEWORK else ENDPOINT_VULCAN_API_EVENTS) }
|
||||||
|
|
||||||
|
private fun finish() {
|
||||||
|
when (isHomework) {
|
||||||
|
true -> {
|
||||||
|
data.toRemove.add(DataRemoveModel.Events.futureWithType(Event.TYPE_HOMEWORK))
|
||||||
|
data.setSyncNext(ENDPOINT_VULCAN_API_HOMEWORK, SYNC_ALWAYS)
|
||||||
|
}
|
||||||
|
false -> {
|
||||||
|
data.toRemove.add(DataRemoveModel.Events.futureExceptType(Event.TYPE_HOMEWORK))
|
||||||
|
data.setSyncNext(ENDPOINT_VULCAN_API_EVENTS, SYNC_ALWAYS)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
onSuccess(if (isHomework) ENDPOINT_VULCAN_API_HOMEWORK else ENDPOINT_VULCAN_API_EVENTS)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getEvents(profile: Profile, semesterId: Int, semesterNumber: Int, onSuccess: () -> Unit) {
|
||||||
|
val startDate = when (profile.empty) {
|
||||||
|
true -> profile.getSemesterStart(semesterNumber).stringY_m_d
|
||||||
else -> Date.getToday().stepForward(0, -1, 0).stringY_m_d
|
else -> Date.getToday().stepForward(0, -1, 0).stringY_m_d
|
||||||
}
|
}
|
||||||
val endDate: String = profile.getSemesterEnd(profile.currentSemester).stringY_m_d
|
val endDate = profile.getSemesterEnd(semesterNumber).stringY_m_d
|
||||||
|
|
||||||
val endpoint = when (isHomework) {
|
val endpoint = when (isHomework) {
|
||||||
true -> VULCAN_API_ENDPOINT_HOMEWORK
|
true -> VULCAN_API_ENDPOINT_HOMEWORK
|
||||||
@ -46,7 +79,7 @@ class VulcanApiEvents(override val data: DataVulcan,
|
|||||||
"DataKoncowa" to endDate,
|
"DataKoncowa" to endDate,
|
||||||
"IdOddzial" to data.studentClassId,
|
"IdOddzial" to data.studentClassId,
|
||||||
"IdUczen" to data.studentId,
|
"IdUczen" to data.studentId,
|
||||||
"IdOkresKlasyfikacyjny" to data.studentSemesterId
|
"IdOkresKlasyfikacyjny" to semesterId
|
||||||
)) { json, _ ->
|
)) { json, _ ->
|
||||||
val events = json.getJsonArray("Data")
|
val events = json.getJsonArray("Data")
|
||||||
|
|
||||||
@ -94,17 +127,7 @@ class VulcanApiEvents(override val data: DataVulcan,
|
|||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
when (isHomework) {
|
onSuccess()
|
||||||
true -> {
|
|
||||||
data.toRemove.add(DataRemoveModel.Events.futureWithType(Event.TYPE_HOMEWORK))
|
|
||||||
data.setSyncNext(ENDPOINT_VULCAN_API_HOMEWORK, SYNC_ALWAYS)
|
|
||||||
}
|
|
||||||
false -> {
|
|
||||||
data.toRemove.add(DataRemoveModel.Events.futureExceptType(Event.TYPE_HOMEWORK))
|
|
||||||
data.setSyncNext(ENDPOINT_VULCAN_API_EVENTS, SYNC_ALWAYS)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
onSuccess(if (isHomework) ENDPOINT_VULCAN_API_HOMEWORK else ENDPOINT_VULCAN_API_EVENTS)
|
|
||||||
}
|
|
||||||
} ?: onSuccess(if (isHomework) ENDPOINT_VULCAN_API_HOMEWORK else ENDPOINT_VULCAN_API_EVENTS) }
|
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel
|
|||||||
import pl.szczodrzynski.edziennik.data.db.entity.Grade
|
import pl.szczodrzynski.edziennik.data.db.entity.Grade
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Grade.Companion.TYPE_NORMAL
|
import pl.szczodrzynski.edziennik.data.db.entity.Grade.Companion.TYPE_NORMAL
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
|
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Profile
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
|
import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
|
||||||
import java.text.DecimalFormat
|
import java.text.DecimalFormat
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
@ -27,9 +28,33 @@ class VulcanApiGrades(override val data: DataVulcan,
|
|||||||
|
|
||||||
init { data.profile?.also { profile ->
|
init { data.profile?.also { profile ->
|
||||||
|
|
||||||
|
val semesterId = data.studentSemesterId
|
||||||
|
val semesterNumber = data.studentSemesterNumber
|
||||||
|
if (semesterNumber == 2 && lastSync ?: 0 < profile.dateSemester1Start.inMillis) {
|
||||||
|
getGrades(profile, semesterId - 1, semesterNumber - 1) {
|
||||||
|
getGrades(profile, semesterId, semesterNumber) {
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
getGrades(profile, semesterId, semesterNumber) {
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} ?: onSuccess(ENDPOINT_VULCAN_API_GRADES) }
|
||||||
|
|
||||||
|
private fun finish() {
|
||||||
|
data.toRemove.add(DataRemoveModel.Grades.semesterWithType(data.studentSemesterNumber, TYPE_NORMAL))
|
||||||
|
data.setSyncNext(ENDPOINT_VULCAN_API_GRADES, SYNC_ALWAYS)
|
||||||
|
onSuccess(ENDPOINT_VULCAN_API_GRADES)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getGrades(profile: Profile, semesterId: Int, semesterNumber: Int, onSuccess: () -> Unit) {
|
||||||
apiGet(TAG, VULCAN_API_ENDPOINT_GRADES, parameters = mapOf(
|
apiGet(TAG, VULCAN_API_ENDPOINT_GRADES, parameters = mapOf(
|
||||||
"IdUczen" to data.studentId,
|
"IdUczen" to data.studentId,
|
||||||
"IdOkresKlasyfikacyjny" to data.studentSemesterId
|
"IdOkresKlasyfikacyjny" to semesterId
|
||||||
)) { json, _ ->
|
)) { json, _ ->
|
||||||
val grades = json.getJsonArray("Data")
|
val grades = json.getJsonArray("Data")
|
||||||
|
|
||||||
@ -99,7 +124,7 @@ class VulcanApiGrades(override val data: DataVulcan,
|
|||||||
category = category,
|
category = category,
|
||||||
description = finalDescription,
|
description = finalDescription,
|
||||||
comment = null,
|
comment = null,
|
||||||
semester = data.studentSemesterNumber,
|
semester = semesterNumber,
|
||||||
teacherId = teacherId,
|
teacherId = teacherId,
|
||||||
subjectId = subjectId,
|
subjectId = subjectId,
|
||||||
addedDate = addedDate
|
addedDate = addedDate
|
||||||
@ -115,9 +140,7 @@ class VulcanApiGrades(override val data: DataVulcan,
|
|||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
data.toRemove.add(DataRemoveModel.Grades.semesterWithType(data.studentSemesterNumber, Grade.TYPE_NORMAL))
|
onSuccess()
|
||||||
data.setSyncNext(ENDPOINT_VULCAN_API_GRADES, SYNC_ALWAYS)
|
}
|
||||||
onSuccess(ENDPOINT_VULCAN_API_GRADES)
|
|
||||||
}
|
}
|
||||||
} ?: onSuccess(ENDPOINT_VULCAN_API_GRADES) }
|
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@ import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.ENDPOINT_VULCAN_API_
|
|||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.VulcanApi
|
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.VulcanApi
|
||||||
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.Profile
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
|
import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
|
||||||
import pl.szczodrzynski.edziennik.getJsonArray
|
import pl.szczodrzynski.edziennik.getJsonArray
|
||||||
import pl.szczodrzynski.edziennik.getLong
|
import pl.szczodrzynski.edziennik.getLong
|
||||||
@ -30,6 +31,29 @@ class VulcanApiNotices(override val data: DataVulcan,
|
|||||||
data.db.noticeTypeDao().getAllNow(profileId).toSparseArray(data.noticeTypes) { it.id }
|
data.db.noticeTypeDao().getAllNow(profileId).toSparseArray(data.noticeTypes) { it.id }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val semesterId = data.studentSemesterId
|
||||||
|
val semesterNumber = data.studentSemesterNumber
|
||||||
|
if (semesterNumber == 2 && lastSync ?: 0 < profile.dateSemester1Start.inMillis) {
|
||||||
|
getNotices(profile, semesterId - 1, semesterNumber - 1) {
|
||||||
|
getNotices(profile, semesterId, semesterNumber) {
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
getNotices(profile, semesterId, semesterNumber) {
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} ?: onSuccess(ENDPOINT_VULCAN_API_NOTICES) }
|
||||||
|
|
||||||
|
private fun finish() {
|
||||||
|
data.setSyncNext(ENDPOINT_VULCAN_API_NOTICES, SYNC_ALWAYS)
|
||||||
|
onSuccess(ENDPOINT_VULCAN_API_NOTICES)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getNotices(profile: Profile, semesterId: Int, semesterNumber: Int, onSuccess: () -> Unit) {
|
||||||
apiGet(TAG, VULCAN_API_ENDPOINT_NOTICES, parameters = mapOf(
|
apiGet(TAG, VULCAN_API_ENDPOINT_NOTICES, parameters = mapOf(
|
||||||
"IdUczen" to data.studentId,
|
"IdUczen" to data.studentId,
|
||||||
"IdOkresKlasyfikacyjny" to data.studentSemesterId
|
"IdOkresKlasyfikacyjny" to data.studentSemesterId
|
||||||
@ -67,8 +91,7 @@ class VulcanApiNotices(override val data: DataVulcan,
|
|||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
data.setSyncNext(ENDPOINT_VULCAN_API_NOTICES, SYNC_ALWAYS)
|
onSuccess()
|
||||||
onSuccess(ENDPOINT_VULCAN_API_NOTICES)
|
}
|
||||||
}
|
}
|
||||||
} ?: onSuccess(ENDPOINT_VULCAN_API_NOTICES) }
|
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import pl.szczodrzynski.edziennik.data.db.entity.Grade.Companion.TYPE_SEMESTER1_
|
|||||||
import pl.szczodrzynski.edziennik.data.db.entity.Grade.Companion.TYPE_SEMESTER2_FINAL
|
import pl.szczodrzynski.edziennik.data.db.entity.Grade.Companion.TYPE_SEMESTER2_FINAL
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Grade.Companion.TYPE_SEMESTER2_PROPOSED
|
import pl.szczodrzynski.edziennik.data.db.entity.Grade.Companion.TYPE_SEMESTER2_PROPOSED
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
|
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Profile
|
||||||
import pl.szczodrzynski.edziennik.getJsonArray
|
import pl.szczodrzynski.edziennik.getJsonArray
|
||||||
import pl.szczodrzynski.edziennik.getJsonObject
|
import pl.szczodrzynski.edziennik.getJsonObject
|
||||||
import pl.szczodrzynski.edziennik.utils.Utils
|
import pl.szczodrzynski.edziennik.utils.Utils
|
||||||
@ -27,32 +28,54 @@ class VulcanApiProposedGrades(override val data: DataVulcan,
|
|||||||
|
|
||||||
init { data.profile?.also { profile ->
|
init { data.profile?.also { profile ->
|
||||||
|
|
||||||
|
val semesterId = data.studentSemesterId
|
||||||
|
val semesterNumber = data.studentSemesterNumber
|
||||||
|
if (semesterNumber == 2 && lastSync ?: 0 < profile.dateSemester1Start.inMillis) {
|
||||||
|
getProposedGrades(profile, semesterId - 1, semesterNumber - 1) {
|
||||||
|
getProposedGrades(profile, semesterId, semesterNumber) {
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
getProposedGrades(profile, semesterId, semesterNumber) {
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} ?: onSuccess(ENDPOINT_VULCAN_API_GRADES_SUMMARY) }
|
||||||
|
|
||||||
|
private fun finish() {
|
||||||
|
data.setSyncNext(ENDPOINT_VULCAN_API_GRADES_SUMMARY, 6*HOUR)
|
||||||
|
onSuccess(ENDPOINT_VULCAN_API_GRADES_SUMMARY)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getProposedGrades(profile: Profile, semesterId: Int, semesterNumber: Int, onSuccess: () -> Unit) {
|
||||||
apiGet(TAG, VULCAN_API_ENDPOINT_GRADES_PROPOSITIONS, parameters = mapOf(
|
apiGet(TAG, VULCAN_API_ENDPOINT_GRADES_PROPOSITIONS, parameters = mapOf(
|
||||||
"IdUczen" to data.studentId,
|
"IdUczen" to data.studentId,
|
||||||
"IdOkresKlasyfikacyjny" to data.studentSemesterId
|
"IdOkresKlasyfikacyjny" to semesterId
|
||||||
)) { json, _ ->
|
)) { json, _ ->
|
||||||
val grades = json.getJsonObject("Data")
|
val grades = json.getJsonObject("Data")
|
||||||
|
|
||||||
grades.getJsonArray("OcenyPrzewidywane")?.let {
|
grades.getJsonArray("OcenyPrzewidywane")?.let {
|
||||||
processGradeList(it, isFinal = false)
|
processGradeList(it, semesterNumber, isFinal = false)
|
||||||
}
|
}
|
||||||
|
|
||||||
grades.getJsonArray("OcenyKlasyfikacyjne")?.let {
|
grades.getJsonArray("OcenyKlasyfikacyjne")?.let {
|
||||||
processGradeList(it, isFinal = true)
|
processGradeList(it, semesterNumber, isFinal = true)
|
||||||
}
|
}
|
||||||
|
|
||||||
data.setSyncNext(ENDPOINT_VULCAN_API_GRADES_SUMMARY, 6*HOUR)
|
onSuccess()
|
||||||
onSuccess(ENDPOINT_VULCAN_API_GRADES_SUMMARY)
|
}
|
||||||
}
|
}
|
||||||
} ?: onSuccess(ENDPOINT_VULCAN_API_GRADES_SUMMARY) }
|
|
||||||
|
|
||||||
private fun processGradeList(grades: JsonArray, isFinal: Boolean) {
|
private fun processGradeList(grades: JsonArray, semesterNumber: Int, isFinal: Boolean) {
|
||||||
grades.asJsonObjectList()?.forEach { grade ->
|
grades.asJsonObjectList().forEach { grade ->
|
||||||
val name = grade.get("Wpis").asString
|
val name = grade.get("Wpis").asString
|
||||||
val value = Utils.getGradeValue(name)
|
val value = Utils.getGradeValue(name)
|
||||||
val subjectId = grade.get("IdPrzedmiot").asLong
|
val subjectId = grade.get("IdPrzedmiot").asLong
|
||||||
|
|
||||||
val id = subjectId * -100 - data.studentSemesterNumber
|
val id = subjectId * -100 - semesterNumber
|
||||||
|
|
||||||
val color = Utils.getVulcanGradeColor(name)
|
val color = Utils.getVulcanGradeColor(name)
|
||||||
|
|
||||||
@ -60,7 +83,7 @@ class VulcanApiProposedGrades(override val data: DataVulcan,
|
|||||||
profileId = profileId,
|
profileId = profileId,
|
||||||
id = id,
|
id = id,
|
||||||
name = name,
|
name = name,
|
||||||
type = if (data.studentSemesterNumber == 1) {
|
type = if (semesterNumber == 1) {
|
||||||
if (isFinal) TYPE_SEMESTER1_FINAL else TYPE_SEMESTER1_PROPOSED
|
if (isFinal) TYPE_SEMESTER1_FINAL else TYPE_SEMESTER1_PROPOSED
|
||||||
} else {
|
} else {
|
||||||
if (isFinal) TYPE_SEMESTER2_FINAL else TYPE_SEMESTER2_PROPOSED
|
if (isFinal) TYPE_SEMESTER2_FINAL else TYPE_SEMESTER2_PROPOSED
|
||||||
@ -71,7 +94,7 @@ class VulcanApiProposedGrades(override val data: DataVulcan,
|
|||||||
category = "",
|
category = "",
|
||||||
description = null,
|
description = null,
|
||||||
comment = null,
|
comment = null,
|
||||||
semester = data.studentSemesterNumber,
|
semester = semesterNumber,
|
||||||
teacherId = -1,
|
teacherId = -1,
|
||||||
subjectId = subjectId
|
subjectId = subjectId
|
||||||
)
|
)
|
||||||
|
@ -60,6 +60,7 @@ class VulcanApiUpdateSemester(override val data: DataVulcan,
|
|||||||
data.studentClassId = studentClassId
|
data.studentClassId = studentClassId
|
||||||
data.studentSemesterId = studentSemesterId
|
data.studentSemesterId = studentSemesterId
|
||||||
data.studentSemesterNumber = studentSemesterNumber
|
data.studentSemesterNumber = studentSemesterNumber
|
||||||
|
data.profile.studentData["semester${studentSemesterNumber}Id"] = studentSemesterId
|
||||||
data.currentSemesterEndDate = currentSemesterEndDate
|
data.currentSemesterEndDate = currentSemesterEndDate
|
||||||
profile.studentClassName = studentClassName
|
profile.studentClassName = studentClassName
|
||||||
dateSemester1Start?.let {
|
dateSemester1Start?.let {
|
||||||
|
@ -93,6 +93,7 @@ class VulcanFirstLogin(val data: DataVulcan, val onSuccess: () -> Unit) {
|
|||||||
studentData["studentClassId"] = studentClassId
|
studentData["studentClassId"] = studentClassId
|
||||||
studentData["studentSemesterId"] = studentSemesterId
|
studentData["studentSemesterId"] = studentSemesterId
|
||||||
studentData["studentSemesterNumber"] = studentSemesterNumber
|
studentData["studentSemesterNumber"] = studentSemesterNumber
|
||||||
|
studentData["semester${studentSemesterNumber}Id"] = studentSemesterId
|
||||||
studentData["schoolSymbol"] = schoolSymbol
|
studentData["schoolSymbol"] = schoolSymbol
|
||||||
studentData["schoolName"] = schoolName
|
studentData["schoolName"] = schoolName
|
||||||
studentData["currentSemesterEndDate"] = currentSemesterEndDate
|
studentData["currentSemesterEndDate"] = currentSemesterEndDate
|
||||||
|
@ -29,6 +29,11 @@ class VulcanLoginApi(val data: DataVulcan, val onSuccess: () -> Unit) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
init { run {
|
init { run {
|
||||||
|
if (data.studentSemesterNumber == 1 && data.semester1Id == 0)
|
||||||
|
data.semester1Id = data.studentSemesterNumber
|
||||||
|
if (data.studentSemesterNumber == 2 && data.semester2Id == 0)
|
||||||
|
data.semester2Id = data.studentSemesterNumber
|
||||||
|
|
||||||
if (data.profile != null && data.isApiLoginValid()) {
|
if (data.profile != null && data.isApiLoginValid()) {
|
||||||
onSuccess()
|
onSuccess()
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,7 @@ import pl.szczodrzynski.edziennik.data.db.migration.*
|
|||||||
LibrusLesson::class,
|
LibrusLesson::class,
|
||||||
TimetableManual::class,
|
TimetableManual::class,
|
||||||
Metadata::class
|
Metadata::class
|
||||||
], version = 87)
|
], version = 88)
|
||||||
@TypeConverters(
|
@TypeConverters(
|
||||||
ConverterTime::class,
|
ConverterTime::class,
|
||||||
ConverterDate::class,
|
ConverterDate::class,
|
||||||
@ -172,7 +172,8 @@ abstract class AppDb : RoomDatabase() {
|
|||||||
Migration84(),
|
Migration84(),
|
||||||
Migration85(),
|
Migration85(),
|
||||||
Migration86(),
|
Migration86(),
|
||||||
Migration87()
|
Migration87(),
|
||||||
|
Migration88()
|
||||||
).allowMainThreadQueries().build()
|
).allowMainThreadQueries().build()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,15 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Kuba Szczodrzyński 2020-5-9.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package pl.szczodrzynski.edziennik.data.db.migration
|
||||||
|
|
||||||
|
import androidx.room.migration.Migration
|
||||||
|
import androidx.sqlite.db.SupportSQLiteDatabase
|
||||||
|
|
||||||
|
class Migration88 : Migration(87, 88) {
|
||||||
|
override fun migrate(database: SupportSQLiteDatabase) {
|
||||||
|
database.execSQL("UPDATE endpointTimers SET endpointLastSync = 0 WHERE endpointId IN (1030, 1040, 1050, 1060, 1070, 1080);")
|
||||||
|
database.execSQL("UPDATE profiles SET empty = 1 WHERE loginStoreType = 4")
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user