Add support for conferences via eduOne

This commit is contained in:
Mikołaj Pich 2024-03-19 23:25:34 +01:00
parent e86fd1b332
commit 91e847ee47
No known key found for this signature in database
6 changed files with 80 additions and 5 deletions

View file

@ -432,7 +432,10 @@ class Scrapper {
else -> student.getNotes()
}
suspend fun getConferences(): List<Conference> = student.getConferences()
suspend fun getConferences(): List<Conference> = when (isEduOne) {
true -> studentPlus.getConferences(studentId, diaryId, unitId)
else -> student.getConferences()
}
suspend fun getMenu(date: LocalDate): List<Menu> = student.getMenu(date)

View file

@ -1,5 +1,6 @@
package io.github.wulkanowy.sdk.scrapper.conferences
import io.github.wulkanowy.sdk.scrapper.adapter.CustomDateAdapter
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@ -16,11 +17,11 @@ data class Conference(
val place: String,
@SerialName("TematZebrania")
@JsonNames("opis")
val topic: String,
@SerialName("Agenda")
@JsonNames("opis")
val agenda: String,
val agenda: String = "",
@SerialName("ObecniNaZebraniu")
@JsonNames("obecniNaZebraniu")
@ -34,6 +35,7 @@ data class Conference(
@JsonNames("id")
val id: Int,
@Transient
@JsonNames("dataCzas")
@Serializable(with = CustomDateAdapter::class)
val date: LocalDateTime = LocalDateTime.now(),
)

View file

@ -9,6 +9,7 @@ import io.github.wulkanowy.sdk.scrapper.attendance.AttendanceExcusePlusResponseI
import io.github.wulkanowy.sdk.scrapper.attendance.AttendanceExcusesPlusResponse
import io.github.wulkanowy.sdk.scrapper.attendance.AttendanceSummary
import io.github.wulkanowy.sdk.scrapper.attendance.SentExcuseStatus
import io.github.wulkanowy.sdk.scrapper.conferences.Conference
import io.github.wulkanowy.sdk.scrapper.exams.Exam
import io.github.wulkanowy.sdk.scrapper.exception.FeatureDisabledException
import io.github.wulkanowy.sdk.scrapper.exception.VulcanClientError
@ -349,4 +350,9 @@ internal class StudentPlusRepository(
}
.sortedWith(compareBy({ it.date }, { it.category }))
}
suspend fun getConferences(studentId: Int, diaryId: Int, unitId: Int): List<Conference> {
val key = getEncodedKey(studentId, diaryId, unitId)
return api.getConferences(key)
}
}

View file

@ -66,7 +66,9 @@ internal interface StudentPlusService {
suspend fun getDeviceRegistrationToken(): TokenResponse
@GET("api/Zebrania")
suspend fun getConferences(): List<Conference>
suspend fun getConferences(
@Query("key") key: String,
): List<Conference>
@GET("api/RealizacjaZajec")
suspend fun getCompletedLessons(

View file

@ -0,0 +1,44 @@
package io.github.wulkanowy.sdk.scrapper.conferences
import io.github.wulkanowy.sdk.scrapper.BaseLocalTest
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Test
class ConferencesPlusTest : BaseLocalTest() {
private val conferences by lazy {
runBlocking {
getStudentPlusRepo(ConferencesPlusTest::class.java, "ZebraniaPlus.json").getConferences(1, 2, 3)
}
}
@Test
fun getAllConferencesTest() {
assertEquals(2, conferences.size)
}
@Test
fun getSimpleConference() {
with(conferences[0]) {
assertEquals("Miejsce", place)
assertEquals("Temat", topic)
assertEquals("", agenda)
assertEquals("", presentOnConference)
assertEquals(2, id)
assertEquals(getLocalDateTime(2024, 3, 20, 23, 5, 0), date)
}
}
@Test
fun getFullConference() {
with(conferences[1]) {
assertEquals("", place)
assertEquals("Temat", topic)
assertEquals("", agenda)
assertEquals("Jan Kowalski", presentOnConference)
assertEquals(1, id)
assertEquals(getLocalDateTime(2024, 3, 19, 23, 5, 0), date)
}
}
}

View file

@ -0,0 +1,18 @@
[
{
"dataCzas": "2024-03-20T23:05:00+01:00",
"sala": "Miejsce",
"opis": "Temat",
"zebranieOnline": null,
"obecniNaZebraniu": "",
"id": 2
},
{
"dataCzas": "2024-03-19T23:05:00+01:00",
"sala": "",
"opis": "Temat",
"zebranieOnline": "",
"obecniNaZebraniu": "Jan Kowalski",
"id": 1
}
]