forked from github/szkolny
[API/Edudziennik] Add getting notes.
This commit is contained in:
parent
4950627850
commit
9f78b86c57
@ -45,6 +45,10 @@ class DataNotifications(val data: Data) {
|
|||||||
return@run
|
return@run
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val today = Date.getToday()
|
||||||
|
val todayValue = today.value
|
||||||
|
profile.currentSemester = profile.dateToSemester(today)
|
||||||
|
|
||||||
for (lesson in app.db.timetableDao().getNotNotifiedNow(profileId)) {
|
for (lesson in app.db.timetableDao().getNotNotifiedNow(profileId)) {
|
||||||
val text = app.getString(R.string.notification_lesson_change_format, lesson.getDisplayChangeType(app), if (lesson.displayDate == null) "" else lesson.displayDate!!.formattedString, lesson.changeSubjectName)
|
val text = app.getString(R.string.notification_lesson_change_format, lesson.getDisplayChangeType(app), if (lesson.displayDate == null) "" else lesson.displayDate!!.formattedString, lesson.changeSubjectName)
|
||||||
data.notifications += Notification(
|
data.notifications += Notification(
|
||||||
@ -90,10 +94,6 @@ class DataNotifications(val data: Data) {
|
|||||||
).addExtra("eventId", event.id).addExtra("eventDate", event.eventDate.value.toLong())
|
).addExtra("eventId", event.id).addExtra("eventDate", event.eventDate.value.toLong())
|
||||||
}
|
}
|
||||||
|
|
||||||
val today = Date.getToday()
|
|
||||||
val todayValue = today.value
|
|
||||||
profile.currentSemester = profile.dateToSemester(today)
|
|
||||||
|
|
||||||
for (grade in app.db.gradeDao().getNotNotifiedNow(profileId)) {
|
for (grade in app.db.gradeDao().getNotNotifiedNow(profileId)) {
|
||||||
val gradeName = when (grade.type) {
|
val gradeName = when (grade.type) {
|
||||||
TYPE_SEMESTER1_PROPOSED, TYPE_SEMESTER2_PROPOSED -> app.getString(R.string.grade_semester_proposed_format_2, grade.name)
|
TYPE_SEMESTER1_PROPOSED, TYPE_SEMESTER2_PROPOSED -> app.getString(R.string.grade_semester_proposed_format_2, grade.name)
|
||||||
|
@ -141,6 +141,9 @@ object Regexes {
|
|||||||
val EDUDZIENNIK_EVENT_ID by lazy {
|
val EDUDZIENNIK_EVENT_ID by lazy {
|
||||||
"""/KlassEvent/([\w-_]+?)/""".toRegex()
|
"""/KlassEvent/([\w-_]+?)/""".toRegex()
|
||||||
}
|
}
|
||||||
|
val EDUDZIENNIK_NOTE_ID by lazy {
|
||||||
|
"""/RegistryNotes/([\w-_]+?)/""".toRegex()
|
||||||
|
}
|
||||||
|
|
||||||
val EDUDZIENNIK_SCHOOL_DETAIL_ID by lazy {
|
val EDUDZIENNIK_SCHOOL_DETAIL_ID by lazy {
|
||||||
"""<a id="School_detail".*?/School/([\w-_]+?)/""".toRegex(DOT_MATCHES_ALL)
|
"""<a id="School_detail".*?/School/([\w-_]+?)/""".toRegex(DOT_MATCHES_ALL)
|
||||||
|
@ -92,6 +92,9 @@ class DataEdudziennik(app: App, profile: Profile?, loginStore: LoginStore) : Dat
|
|||||||
val schoolEndpoint: String
|
val schoolEndpoint: String
|
||||||
get() = "Schools/$schoolId/"
|
get() = "Schools/$schoolId/"
|
||||||
|
|
||||||
|
val classStudentEndpoint: String
|
||||||
|
get() = "Class/$studentId/"
|
||||||
|
|
||||||
val schoolClassEndpoint: String
|
val schoolClassEndpoint: String
|
||||||
get() = "Schools/$classId/"
|
get() = "Schools/$classId/"
|
||||||
|
|
||||||
@ -131,6 +134,16 @@ class DataEdudziennik(app: App, profile: Profile?, loginStore: LoginStore) : Dat
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getTeacherByFirstLast(nameFirstLast: String, longId: String? = null): Teacher {
|
||||||
|
val nameParts = nameFirstLast.split(" ")
|
||||||
|
return getTeacher(nameParts[0], nameParts[1], longId)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getTeacherByLastFirst(nameLastFirst: String, longId: String? = null): Teacher {
|
||||||
|
val nameParts = nameLastFirst.split(" ")
|
||||||
|
return getTeacher(nameParts[1], nameParts[0], longId)
|
||||||
|
}
|
||||||
|
|
||||||
fun getEventType(longId: String, name: String): EventType {
|
fun getEventType(longId: String, name: String): EventType {
|
||||||
val id = longId.crc16().toLong()
|
val id = longId.crc16().toLong()
|
||||||
return eventTypes.singleOrNull { it.id == id } ?: run {
|
return eventTypes.singleOrNull { it.id == id } ?: run {
|
||||||
|
@ -16,6 +16,7 @@ const val ENDPOINT_EDUDZIENNIK_WEB_ATTENDANCE = 1014
|
|||||||
const val ENDPOINT_EDUDZIENNIK_WEB_ANNOUNCEMENTS = 1015
|
const val ENDPOINT_EDUDZIENNIK_WEB_ANNOUNCEMENTS = 1015
|
||||||
const val ENDPOINT_EDUDZIENNIK_WEB_HOMEWORK = 1016
|
const val ENDPOINT_EDUDZIENNIK_WEB_HOMEWORK = 1016
|
||||||
const val ENDPOINT_EDUDZIENNIK_WEB_EVENTS = 1017
|
const val ENDPOINT_EDUDZIENNIK_WEB_EVENTS = 1017
|
||||||
|
const val ENDPOINT_EDUDZIENNIK_WEB_NOTES = 1018
|
||||||
const val ENDPOINT_EDUDZIENNIK_WEB_LUCKY_NUMBER = 1030
|
const val ENDPOINT_EDUDZIENNIK_WEB_LUCKY_NUMBER = 1030
|
||||||
|
|
||||||
val EdudziennikFeatures = listOf(
|
val EdudziennikFeatures = listOf(
|
||||||
@ -51,6 +52,11 @@ val EdudziennikFeatures = listOf(
|
|||||||
ENDPOINT_EDUDZIENNIK_WEB_HOMEWORK to LOGIN_METHOD_EDUDZIENNIK_WEB
|
ENDPOINT_EDUDZIENNIK_WEB_HOMEWORK to LOGIN_METHOD_EDUDZIENNIK_WEB
|
||||||
), listOf(LOGIN_METHOD_EDUDZIENNIK_WEB)),
|
), listOf(LOGIN_METHOD_EDUDZIENNIK_WEB)),
|
||||||
|
|
||||||
|
/* Behaviour */
|
||||||
|
Feature(LOGIN_TYPE_EDUDZIENNIK, FEATURE_BEHAVIOUR, listOf(
|
||||||
|
ENDPOINT_EDUDZIENNIK_WEB_NOTES to LOGIN_METHOD_EDUDZIENNIK_WEB
|
||||||
|
), listOf(LOGIN_METHOD_EDUDZIENNIK_WEB)),
|
||||||
|
|
||||||
/* Attendance */
|
/* Attendance */
|
||||||
Feature(LOGIN_TYPE_EDUDZIENNIK, FEATURE_ATTENDANCE, listOf(
|
Feature(LOGIN_TYPE_EDUDZIENNIK, FEATURE_ATTENDANCE, listOf(
|
||||||
ENDPOINT_EDUDZIENNIK_WEB_ATTENDANCE to LOGIN_METHOD_EDUDZIENNIK_WEB
|
ENDPOINT_EDUDZIENNIK_WEB_ATTENDANCE to LOGIN_METHOD_EDUDZIENNIK_WEB
|
||||||
|
@ -72,6 +72,10 @@ class EdudziennikData(val data: DataEdudziennik, val onSuccess: () -> Unit) {
|
|||||||
data.startProgress(R.string.edziennik_progress_endpoint_events)
|
data.startProgress(R.string.edziennik_progress_endpoint_events)
|
||||||
EdudziennikWebEvents(data, onSuccess)
|
EdudziennikWebEvents(data, onSuccess)
|
||||||
}
|
}
|
||||||
|
ENDPOINT_EDUDZIENNIK_WEB_NOTES -> {
|
||||||
|
data.startProgress(R.string.edziennik_progress_endpoint_notices)
|
||||||
|
EdudziennikWebNotes(data, onSuccess)
|
||||||
|
}
|
||||||
ENDPOINT_EDUDZIENNIK_WEB_LUCKY_NUMBER -> {
|
ENDPOINT_EDUDZIENNIK_WEB_LUCKY_NUMBER -> {
|
||||||
data.startProgress(R.string.edziennik_progress_endpoint_lucky_number)
|
data.startProgress(R.string.edziennik_progress_endpoint_lucky_number)
|
||||||
EdudziennikWebLuckyNumber(data, onSuccess)
|
EdudziennikWebLuckyNumber(data, onSuccess)
|
||||||
|
@ -0,0 +1,65 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Kacper Ziubryniewicz 2020-1-1
|
||||||
|
*/
|
||||||
|
|
||||||
|
package pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.web
|
||||||
|
|
||||||
|
import org.jsoup.Jsoup
|
||||||
|
import pl.szczodrzynski.edziennik.crc32
|
||||||
|
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.ENDPOINT_EDUDZIENNIK_WEB_NOTES
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.EdudziennikWeb
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice
|
||||||
|
import pl.szczodrzynski.edziennik.get
|
||||||
|
import pl.szczodrzynski.edziennik.utils.models.Date
|
||||||
|
|
||||||
|
class EdudziennikWebNotes(override val data: DataEdudziennik,
|
||||||
|
val onSuccess: () -> Unit) : EdudziennikWeb(data) {
|
||||||
|
companion object {
|
||||||
|
const val TAG = "EdudziennikWebNotes"
|
||||||
|
}
|
||||||
|
|
||||||
|
init { data.profile?.also { profile ->
|
||||||
|
webGet(TAG, data.classStudentEndpoint + "RegistryNotesStudent", xhr = true) { text ->
|
||||||
|
val doc = Jsoup.parseBodyFragment("<table>" + text.trim() + "</table>")
|
||||||
|
|
||||||
|
doc.getElementsByTag("tr").forEach { noteElement ->
|
||||||
|
val dateElement = noteElement.getElementsByClass("date").first().child(0)
|
||||||
|
val addedDate = Date.fromY_m_d(dateElement.text()).inMillis
|
||||||
|
|
||||||
|
val id = EDUDZIENNIK_NOTE_ID.find(dateElement.attr("href"))?.get(0)?.crc32()
|
||||||
|
?: return@forEach
|
||||||
|
|
||||||
|
val teacherName = noteElement.child(1).text()
|
||||||
|
val teacher = data.getTeacherByFirstLast(teacherName)
|
||||||
|
|
||||||
|
val description = noteElement.child(3).text()
|
||||||
|
|
||||||
|
val noticeObject = Notice(
|
||||||
|
profileId,
|
||||||
|
id,
|
||||||
|
description,
|
||||||
|
profile.currentSemester,
|
||||||
|
Notice.TYPE_NEUTRAL,
|
||||||
|
teacher.id
|
||||||
|
)
|
||||||
|
|
||||||
|
data.noticeList.add(noticeObject)
|
||||||
|
data.metadataList.add(Metadata(
|
||||||
|
profileId,
|
||||||
|
Metadata.TYPE_NOTICE,
|
||||||
|
id,
|
||||||
|
profile.empty,
|
||||||
|
profile.empty,
|
||||||
|
addedDate
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
data.setSyncNext(ENDPOINT_EDUDZIENNIK_WEB_NOTES, SYNC_ALWAYS)
|
||||||
|
onSuccess()
|
||||||
|
}
|
||||||
|
} ?: onSuccess() }
|
||||||
|
}
|
@ -78,6 +78,7 @@ class ProfileFull : Profile {
|
|||||||
fragmentIds.add(DRAWER_ITEM_AGENDA)
|
fragmentIds.add(DRAWER_ITEM_AGENDA)
|
||||||
fragmentIds.add(DRAWER_ITEM_GRADES)
|
fragmentIds.add(DRAWER_ITEM_GRADES)
|
||||||
fragmentIds.add(DRAWER_ITEM_HOMEWORK)
|
fragmentIds.add(DRAWER_ITEM_HOMEWORK)
|
||||||
|
fragmentIds.add(DRAWER_ITEM_BEHAVIOUR)
|
||||||
fragmentIds.add(DRAWER_ITEM_ATTENDANCE)
|
fragmentIds.add(DRAWER_ITEM_ATTENDANCE)
|
||||||
fragmentIds.add(DRAWER_ITEM_ANNOUNCEMENTS)
|
fragmentIds.add(DRAWER_ITEM_ANNOUNCEMENTS)
|
||||||
return fragmentIds
|
return fragmentIds
|
||||||
|
Loading…
x
Reference in New Issue
Block a user