mirror of
https://github.com/szkolny-eu/szkolny-android.git
synced 2025-01-18 12:56:45 -06:00
[APIv2/Librus] Add getting homework using Synergia
This commit is contained in:
parent
bfcbeb7140
commit
74ce9cd38d
@ -46,6 +46,7 @@ const val ENDPOINT_LIBRUS_API_SCHOOL_FREE_DAYS = 1120
|
|||||||
const val ENDPOINT_LIBRUS_API_CLASS_FREE_DAYS = 1130
|
const val ENDPOINT_LIBRUS_API_CLASS_FREE_DAYS = 1130
|
||||||
const val ENDPOINT_LIBRUS_SYNERGIA_INFO = 2010
|
const val ENDPOINT_LIBRUS_SYNERGIA_INFO = 2010
|
||||||
const val ENDPOINT_LIBRUS_SYNERGIA_GRADES = 2020
|
const val ENDPOINT_LIBRUS_SYNERGIA_GRADES = 2020
|
||||||
|
const val ENDPOINT_LIBRUS_SYNERGIA_HOMEWORK = 2030
|
||||||
const val ENDPOINT_LIBRUS_MESSAGES_RECEIVED = 3010
|
const val ENDPOINT_LIBRUS_MESSAGES_RECEIVED = 3010
|
||||||
const val ENDPOINT_LIBRUS_MESSAGES_SENT = 3020
|
const val ENDPOINT_LIBRUS_MESSAGES_SENT = 3020
|
||||||
const val ENDPOINT_LIBRUS_MESSAGES_TRASH = 3030
|
const val ENDPOINT_LIBRUS_MESSAGES_TRASH = 3030
|
||||||
@ -212,8 +213,15 @@ val LibrusFeatures = listOf(
|
|||||||
ENDPOINT_LIBRUS_SYNERGIA_GRADES to LOGIN_METHOD_LIBRUS_SYNERGIA
|
ENDPOINT_LIBRUS_SYNERGIA_GRADES to LOGIN_METHOD_LIBRUS_SYNERGIA
|
||||||
), listOf(LOGIN_METHOD_LIBRUS_SYNERGIA)),*/
|
), listOf(LOGIN_METHOD_LIBRUS_SYNERGIA)),*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Homework - using scrapper.
|
||||||
|
* Sync only if account has not premium access.
|
||||||
|
*/
|
||||||
|
Feature(LOGIN_TYPE_LIBRUS, FEATURE_HOMEWORK, listOf(
|
||||||
|
ENDPOINT_LIBRUS_SYNERGIA_HOMEWORK to LOGIN_METHOD_LIBRUS_SYNERGIA
|
||||||
|
), listOf(LOGIN_METHOD_LIBRUS_SYNERGIA)).withShouldSync { data ->
|
||||||
|
!(data as DataLibrus).isPremium
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Messages inbox - using messages website.
|
* Messages inbox - using messages website.
|
||||||
|
@ -7,6 +7,7 @@ package pl.szczodrzynski.edziennik.api.v2.librus.data
|
|||||||
import pl.szczodrzynski.edziennik.R
|
import pl.szczodrzynski.edziennik.R
|
||||||
import pl.szczodrzynski.edziennik.api.v2.librus.*
|
import pl.szczodrzynski.edziennik.api.v2.librus.*
|
||||||
import pl.szczodrzynski.edziennik.api.v2.librus.data.api.*
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.api.*
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.synergia.LibrusSynergiaHomework
|
||||||
import pl.szczodrzynski.edziennik.utils.Utils
|
import pl.szczodrzynski.edziennik.utils.Utils
|
||||||
|
|
||||||
class LibrusData(val data: DataLibrus, val onSuccess: () -> Unit) {
|
class LibrusData(val data: DataLibrus, val onSuccess: () -> Unit) {
|
||||||
@ -83,6 +84,10 @@ class LibrusData(val data: DataLibrus, val onSuccess: () -> Unit) {
|
|||||||
data.startProgress(R.string.edziennik_progress_endpoint_teacher_free_days)
|
data.startProgress(R.string.edziennik_progress_endpoint_teacher_free_days)
|
||||||
LibrusApiTeacherFreeDays(data) { onSuccess() }
|
LibrusApiTeacherFreeDays(data) { onSuccess() }
|
||||||
}
|
}
|
||||||
|
ENDPOINT_LIBRUS_SYNERGIA_HOMEWORK -> {
|
||||||
|
data.startProgress(R.string.edziennik_progress_endpoint_homework)
|
||||||
|
LibrusSynergiaHomework(data) { onSuccess() }
|
||||||
|
}
|
||||||
else -> onSuccess()
|
else -> onSuccess()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,94 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Kacper Ziubryniewicz 2019-10-22.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.synergia
|
||||||
|
|
||||||
|
import org.jsoup.Jsoup
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.POST
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_SYNERGIA_HOMEWORK
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusSynergia
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.modules.events.Event
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
||||||
|
import pl.szczodrzynski.edziennik.get
|
||||||
|
import pl.szczodrzynski.edziennik.singleOrNull
|
||||||
|
import pl.szczodrzynski.edziennik.utils.models.Date
|
||||||
|
|
||||||
|
class LibrusSynergiaHomework(override val data: DataLibrus, val onSuccess: () -> Unit) : LibrusSynergia(data) {
|
||||||
|
companion object {
|
||||||
|
const val TAG = "LibrusSynergiaHomework"
|
||||||
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
apiGet(TAG, "moje_zadania", method = POST, parameters = mapOf(
|
||||||
|
"dataOd" to Date.getToday().stringY_m_d,
|
||||||
|
"dataDo" to profile!!.getSemesterEnd(profile?.currentSemester ?: 2).stringY_m_d,
|
||||||
|
"przedmiot" to -1
|
||||||
|
|
||||||
|
)) { text ->
|
||||||
|
val doc = Jsoup.parse(text)
|
||||||
|
|
||||||
|
doc.select("table.myHomeworkTable > tbody").firstOrNull()?.also { homeworkTable ->
|
||||||
|
val homeworkElements = homeworkTable.children()
|
||||||
|
|
||||||
|
val graphElements = doc.select("table[border].center td[align=left] tbody").first().children()
|
||||||
|
|
||||||
|
homeworkElements.forEachIndexed { i, el ->
|
||||||
|
val elements = el.children()
|
||||||
|
|
||||||
|
val subjectName = elements[0].text().trim()
|
||||||
|
val subjectId = data.subjectList.singleOrNull { it.longName == subjectName }?.id
|
||||||
|
?: -1
|
||||||
|
val teacherName = elements[1].text().trim()
|
||||||
|
val teacherId = data.teacherList.singleOrNull { teacherName == "${it.name} ${it.surname}" }?.id
|
||||||
|
?: -1
|
||||||
|
val topic = elements[2].text().trim()
|
||||||
|
val addedDate = Date.fromY_m_d(elements[4].text().trim()).inMillis
|
||||||
|
val eventDate = Date.fromY_m_d(elements[6].text().trim())
|
||||||
|
val id = "/podglad/([0-9]+)'".toRegex().find(
|
||||||
|
elements[9].select("input").attr("onclick")
|
||||||
|
)?.get(1)?.toLong() ?: return@forEachIndexed
|
||||||
|
val startTime = data.lessonList.singleOrNull {
|
||||||
|
it.weekDay == eventDate.weekDay && it.subjectId == subjectId
|
||||||
|
}?.startTime
|
||||||
|
|
||||||
|
val moreInfo = graphElements[2 * i + 1].select("td[title]")
|
||||||
|
.attr("title").trim()
|
||||||
|
val description = "Treść: (.*)".toRegex(RegexOption.DOT_MATCHES_ALL).find(moreInfo)
|
||||||
|
?.get(1)?.replace("<br.*/>".toRegex(), "\n")?.trim()
|
||||||
|
|
||||||
|
val notify = (profile?.empty ?: false) && Date.getToday() < eventDate
|
||||||
|
|
||||||
|
val eventObject = Event(
|
||||||
|
profileId,
|
||||||
|
id,
|
||||||
|
eventDate,
|
||||||
|
startTime,
|
||||||
|
"$topic\n$description",
|
||||||
|
-1,
|
||||||
|
Event.TYPE_HOMEWORK,
|
||||||
|
false,
|
||||||
|
teacherId,
|
||||||
|
subjectId,
|
||||||
|
data.teamClass?.id ?: -1
|
||||||
|
)
|
||||||
|
|
||||||
|
data.eventList.add(eventObject)
|
||||||
|
data.metadataList.add(Metadata(
|
||||||
|
profileId,
|
||||||
|
Metadata.TYPE_HOMEWORK,
|
||||||
|
id,
|
||||||
|
notify,
|
||||||
|
notify,
|
||||||
|
addedDate
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data.setSyncNext(ENDPOINT_LIBRUS_SYNERGIA_HOMEWORK, SYNC_ALWAYS)
|
||||||
|
onSuccess()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user