.*?
(.+?) (.+?)
""".toRegex(DOT_MATCHES_ALL)
- }
-
-
-
-
val LINKIFY_DATE_YMD by lazy {
"""(1\d{3}|20\d{2})[\-./](1[0-2]|0?\d)[\-./]([1-2]\d|3[0-1]|0?\d)""".toRegex()
}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/EdziennikTask.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/EdziennikTask.kt
index ab27dda9..e90813f2 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/EdziennikTask.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/EdziennikTask.kt
@@ -6,13 +6,14 @@ package pl.szczodrzynski.edziennik.data.api.edziennik
import com.google.gson.JsonObject
import org.greenrobot.eventbus.EventBus
-import pl.szczodrzynski.edziennik.*
-import pl.szczodrzynski.edziennik.data.api.*
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.Edudziennik
+import pl.szczodrzynski.edziennik.App
+import pl.szczodrzynski.edziennik.R
+import pl.szczodrzynski.edziennik.data.api.ERROR_PROFILE_ARCHIVED
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.Librus
import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.Mobidziennik
import pl.szczodrzynski.edziennik.data.api.edziennik.podlasie.Podlasie
import pl.szczodrzynski.edziennik.data.api.edziennik.template.Template
+import pl.szczodrzynski.edziennik.data.api.edziennik.usos.Usos
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.Vulcan
import pl.szczodrzynski.edziennik.data.api.events.RegisterAvailabilityEvent
import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikCallback
@@ -22,9 +23,13 @@ import pl.szczodrzynski.edziennik.data.api.task.IApiTask
import pl.szczodrzynski.edziennik.data.db.entity.LoginStore
import pl.szczodrzynski.edziennik.data.db.entity.Profile
import pl.szczodrzynski.edziennik.data.db.entity.Teacher
+import pl.szczodrzynski.edziennik.data.db.enums.FeatureType
+import pl.szczodrzynski.edziennik.data.db.enums.LoginType
import pl.szczodrzynski.edziennik.data.db.full.AnnouncementFull
import pl.szczodrzynski.edziennik.data.db.full.EventFull
import pl.szczodrzynski.edziennik.data.db.full.MessageFull
+import pl.szczodrzynski.edziennik.ext.isBeforeYear
+import pl.szczodrzynski.edziennik.ext.shouldArchive
import pl.szczodrzynski.edziennik.utils.Utils.d
import pl.szczodrzynski.edziennik.utils.managers.AvailabilityManager.Error.Type
@@ -37,10 +42,10 @@ open class EdziennikTask(override val profileId: Int, val request: Any) : IApiTa
fun firstLogin(loginStore: LoginStore) = EdziennikTask(-1, FirstLoginRequest(loginStore))
fun sync() = EdziennikTask(-1, SyncRequest())
- fun syncProfile(profileId: Int, viewIds: List
>? = null, onlyEndpoints: List? = null, arguments: JsonObject? = null) = EdziennikTask(profileId, SyncProfileRequest(viewIds, onlyEndpoints, arguments))
- fun syncProfileList(profileList: List) = EdziennikTask(-1, SyncProfileListRequest(profileList))
+ fun syncProfile(profileId: Int, featureTypes: Set? = null, onlyEndpoints: Set? = null, arguments: JsonObject? = null) = EdziennikTask(profileId, SyncProfileRequest(featureTypes, onlyEndpoints, arguments))
+ fun syncProfileList(profileList: Set) = EdziennikTask(-1, SyncProfileListRequest(profileList))
fun messageGet(profileId: Int, message: MessageFull) = EdziennikTask(profileId, MessageGetRequest(message))
- fun messageSend(profileId: Int, recipients: List, subject: String, text: String) = EdziennikTask(profileId, MessageSendRequest(recipients, subject, text))
+ fun messageSend(profileId: Int, recipients: Set, subject: String, text: String) = EdziennikTask(profileId, MessageSendRequest(recipients, subject, text))
fun announcementsRead(profileId: Int) = EdziennikTask(profileId, AnnouncementsReadRequest())
fun announcementGet(profileId: Int, announcement: AnnouncementFull) = EdziennikTask(profileId, AnnouncementGetRequest(announcement))
fun attachmentGet(profileId: Int, owner: Any, attachmentId: Long, attachmentName: String) = EdziennikTask(profileId, AttachmentGetRequest(owner, attachmentId, attachmentName))
@@ -109,12 +114,12 @@ open class EdziennikTask(override val profileId: Int, val request: Any) : IApiTa
}
edziennikInterface = when (loginStore.type) {
- LOGIN_TYPE_LIBRUS -> Librus(app, profile, loginStore, taskCallback)
- LOGIN_TYPE_MOBIDZIENNIK -> Mobidziennik(app, profile, loginStore, taskCallback)
- LOGIN_TYPE_VULCAN -> Vulcan(app, profile, loginStore, taskCallback)
- LOGIN_TYPE_EDUDZIENNIK -> Edudziennik(app, profile, loginStore, taskCallback)
- LOGIN_TYPE_PODLASIE -> Podlasie(app, profile, loginStore, taskCallback)
- LOGIN_TYPE_TEMPLATE -> Template(app, profile, loginStore, taskCallback)
+ LoginType.LIBRUS -> Librus(app, profile, loginStore, taskCallback)
+ LoginType.MOBIDZIENNIK -> Mobidziennik(app, profile, loginStore, taskCallback)
+ LoginType.VULCAN -> Vulcan(app, profile, loginStore, taskCallback)
+ LoginType.PODLASIE -> Podlasie(app, profile, loginStore, taskCallback)
+ LoginType.TEMPLATE -> Template(app, profile, loginStore, taskCallback)
+ LoginType.USOS -> Usos(app, profile, loginStore, taskCallback)
else -> null
}
if (edziennikInterface == null) {
@@ -123,9 +128,7 @@ open class EdziennikTask(override val profileId: Int, val request: Any) : IApiTa
when (request) {
is SyncProfileRequest -> edziennikInterface?.sync(
- featureIds = request.viewIds?.flatMap { Features.getIdsByView(it.first, it.second) }
- ?: Features.getAllIds(),
- viewId = request.viewIds?.get(0)?.first,
+ featureTypes = request.featureTypes,
onlyEndpoints = request.onlyEndpoints,
arguments = request.arguments)
is MessageGetRequest -> edziennikInterface?.getMessage(request.message)
@@ -150,10 +153,10 @@ open class EdziennikTask(override val profileId: Int, val request: Any) : IApiTa
data class FirstLoginRequest(val loginStore: LoginStore)
class SyncRequest
- data class SyncProfileRequest(val viewIds: List>? = null, val onlyEndpoints: List? = null, val arguments: JsonObject? = null)
- data class SyncProfileListRequest(val profileList: List)
+ data class SyncProfileRequest(val featureTypes: Set? = null, val onlyEndpoints: Set? = null, val arguments: JsonObject? = null)
+ data class SyncProfileListRequest(val profileList: Set)
data class MessageGetRequest(val message: MessageFull)
- data class MessageSendRequest(val recipients: List, val subject: String, val text: String)
+ data class MessageSendRequest(val recipients: Set, val subject: String, val text: String)
class AnnouncementsReadRequest
data class AnnouncementGetRequest(val announcement: AnnouncementFull)
data class AttachmentGetRequest(val owner: Any, val attachmentId: Long, val attachmentName: String)
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/ProfileArchiver.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/ProfileArchiver.kt
index 27c61abc..f4f8db2a 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/ProfileArchiver.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/ProfileArchiver.kt
@@ -6,8 +6,8 @@ package pl.szczodrzynski.edziennik.data.api.edziennik
import android.content.Intent
import pl.szczodrzynski.edziennik.App
-import pl.szczodrzynski.edziennik.data.api.*
import pl.szczodrzynski.edziennik.data.db.entity.Profile
+import pl.szczodrzynski.edziennik.data.db.enums.LoginType
import pl.szczodrzynski.edziennik.ext.Intent
import pl.szczodrzynski.edziennik.utils.Utils.d
import pl.szczodrzynski.edziennik.utils.models.Date
@@ -51,35 +51,32 @@ class ProfileArchiver(val app: App, val profile: Profile) {
d(TAG, "New profile ID for ${profile.name}: ${profile.id}")
when (profile.loginStoreType) {
- LOGIN_TYPE_LIBRUS -> {
- profile.removeStudentData("isPremium")
- profile.removeStudentData("pushDeviceId")
- profile.removeStudentData("startPointsSemester1")
- profile.removeStudentData("startPointsSemester2")
- profile.removeStudentData("enablePointGrades")
- profile.removeStudentData("enableDescriptiveGrades")
+ LoginType.LIBRUS -> {
+ profile.studentData.remove("isPremium")
+ profile.studentData.remove("pushDeviceId")
+ profile.studentData.remove("startPointsSemester1")
+ profile.studentData.remove("startPointsSemester2")
+ profile.studentData.remove("enablePointGrades")
+ profile.studentData.remove("enableDescriptiveGrades")
}
- LOGIN_TYPE_MOBIDZIENNIK -> {
-
- }
- LOGIN_TYPE_VULCAN -> {
+ LoginType.MOBIDZIENNIK -> {}
+ LoginType.VULCAN -> {
// DataVulcan.isApiLoginValid() returns false so it will update the semester
- profile.removeStudentData("currentSemesterEndDate")
- profile.removeStudentData("studentSemesterId")
- profile.removeStudentData("studentSemesterNumber")
- profile.removeStudentData("semester1Id")
- profile.removeStudentData("semester2Id")
- profile.removeStudentData("studentClassId")
+ profile.studentData.remove("currentSemesterEndDate")
+ profile.studentData.remove("studentSemesterId")
+ profile.studentData.remove("studentSemesterNumber")
+ profile.studentData.remove("semester1Id")
+ profile.studentData.remove("semester2Id")
+ profile.studentData.remove("studentClassId")
}
- LOGIN_TYPE_IDZIENNIK -> {
- profile.removeStudentData("schoolYearId")
- }
- LOGIN_TYPE_EDUDZIENNIK -> {
-
- }
- LOGIN_TYPE_PODLASIE -> {
-
+ LoginType.IDZIENNIK -> {
+ profile.studentData.remove("schoolYearId")
}
+ LoginType.EDUDZIENNIK -> {}
+ LoginType.PODLASIE -> {}
+ LoginType.USOS -> {}
+ LoginType.DEMO -> {}
+ LoginType.TEMPLATE -> {}
}
d(TAG, "Processed student data: ${profile.studentData}")
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/DataEdudziennik.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/DataEdudziennik.kt
deleted file mode 100644
index 76b0e9fd..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/DataEdudziennik.kt
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (c) Kacper Ziubryniewicz 2019-12-22
- */
-
-package pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik
-
-import pl.szczodrzynski.edziennik.App
-import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_EDUDZIENNIK_WEB
-import pl.szczodrzynski.edziennik.data.api.models.Data
-import pl.szczodrzynski.edziennik.data.db.entity.EventType
-import pl.szczodrzynski.edziennik.data.db.entity.LoginStore
-import pl.szczodrzynski.edziennik.data.db.entity.Profile
-import pl.szczodrzynski.edziennik.ext.*
-
-/**
- * Use http://patorjk.com/software/taag/#p=display&f=Big for the ascii art
- *
- * Use https://codepen.io/kubasz/pen/RwwwbGN to easily generate the student data getters/setters
- */
-class DataEdudziennik(app: App, profile: Profile?, loginStore: LoginStore) : Data(app, profile, loginStore) {
-
- fun isWebLoginValid() = webSessionIdExpiryTime-30 > currentTimeUnix() && webSessionId.isNotNullNorEmpty()
-
- override fun satisfyLoginMethods() {
- loginMethods.clear()
- if (isWebLoginValid()) {
- loginMethods += LOGIN_METHOD_EDUDZIENNIK_WEB
- }
- }
-
- override fun generateUserCode() = "$schoolName:$loginEmail:${studentId?.crc32()}"
-
- private var mLoginEmail: String? = null
- var loginEmail: String?
- get() { mLoginEmail = mLoginEmail ?: loginStore.getLoginData("email", null); return mLoginEmail }
- set(value) { loginStore.putLoginData("email", value); mLoginEmail = value }
-
- private var mLoginPassword: String? = null
- var loginPassword: String?
- get() { mLoginPassword = mLoginPassword ?: loginStore.getLoginData("password", null); return mLoginPassword }
- set(value) { loginStore.putLoginData("password", value); mLoginPassword = value }
-
- private var mStudentId: String? = null
- var studentId: String?
- get() { mStudentId = mStudentId ?: profile?.getStudentData("studentId", null); return mStudentId }
- set(value) { profile?.putStudentData("studentId", value) ?: return; mStudentId = value }
-
- private var mSchoolId: String? = null
- var schoolId: String?
- get() { mSchoolId = mSchoolId ?: profile?.getStudentData("schoolId", null); return mSchoolId }
- set(value) { profile?.putStudentData("schoolId", value) ?: return; mSchoolId = value }
-
- private var mClassId: String? = null
- var classId: String?
- get() { mClassId = mClassId ?: profile?.getStudentData("classId", null); return mClassId }
- set(value) { profile?.putStudentData("classId", value) ?: return; mClassId = value }
-
- /* __ __ _
- \ \ / / | |
- \ \ /\ / /__| |__
- \ \/ \/ / _ \ '_ \
- \ /\ / __/ |_) |
- \/ \/ \___|_._*/
- private var mWebSessionId: String? = null
- var webSessionId: String?
- get() { mWebSessionId = mWebSessionId ?: loginStore.getLoginData("webSessionId", null); return mWebSessionId }
- set(value) { loginStore.putLoginData("webSessionId", value); mWebSessionId = value }
-
- private var mWebSessionIdExpiryTime: Long? = null
- var webSessionIdExpiryTime: Long
- get() { mWebSessionIdExpiryTime = mWebSessionIdExpiryTime ?: loginStore.getLoginData("webSessionIdExpiryTime", 0L); return mWebSessionIdExpiryTime ?: 0L }
- set(value) { loginStore.putLoginData("webSessionIdExpiryTime", value); mWebSessionIdExpiryTime = value }
-
- /* ____ _ _
- / __ \| | | |
- | | | | |_| |__ ___ _ __
- | | | | __| '_ \ / _ \ '__|
- | |__| | |_| | | | __/ |
- \____/ \__|_| |_|\___|*/
- 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
- var schoolName: String?
- get() { mSchoolName = mSchoolName ?: profile?.getStudentData("schoolName", null); return mSchoolName }
- set(value) { profile?.putStudentData("schoolName", value) ?: return; mSchoolName = value }
-
- val studentEndpoint: String
- get() = "Students/$studentId/"
-
- val schoolEndpoint: String
- get() = "Schools/$schoolId/"
-
- val classStudentEndpoint: String
- get() = "Class/$studentId/"
-
- val schoolClassEndpoint: String
- get() = "Schools/$classId/"
-
- val studentAndClassEndpoint: String
- get() = "Students/$studentId/Klass/$classId/"
-
- val studentAndClassesEndpoint: String
- get() = "Students/$studentId/Classes/$classId/"
-
- val timetableEndpoint: String
- get() = "Plan/$studentId/"
-
- val studentAndTeacherClassEndpoint: String
- get() = "Students/$studentId/Teachers/$classId/"
-
- val courseStudentEndpoint: String
- get() = "Course/$studentId/"
-
- fun getEventType(longId: String, name: String): EventType {
- val id = longId.crc16().toLong()
- return eventTypes.singleOrNull { it.id == id } ?: run {
- val eventType = EventType(profileId, id, name, colorFromName(name))
- eventTypes.put(id, eventType)
- eventType
- }
- }
-}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/Edudziennik.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/Edudziennik.kt
deleted file mode 100644
index 23d9d3b1..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/Edudziennik.kt
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright (c) Kacper Ziubryniewicz 2019-12-22
- */
-
-package pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik
-
-import com.google.gson.JsonObject
-import pl.szczodrzynski.edziennik.App
-import pl.szczodrzynski.edziennik.data.api.*
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.EdudziennikData
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.web.EdudziennikWebGetAnnouncement
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.web.EdudziennikWebGetHomework
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.firstlogin.EdudziennikFirstLogin
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.login.EdudziennikLogin
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.login.EdudziennikLoginWeb
-import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikCallback
-import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface
-import pl.szczodrzynski.edziennik.data.api.models.ApiError
-import pl.szczodrzynski.edziennik.data.db.entity.LoginStore
-import pl.szczodrzynski.edziennik.data.db.entity.Profile
-import pl.szczodrzynski.edziennik.data.db.entity.Teacher
-import pl.szczodrzynski.edziennik.data.db.full.AnnouncementFull
-import pl.szczodrzynski.edziennik.data.db.full.EventFull
-import pl.szczodrzynski.edziennik.data.db.full.MessageFull
-import pl.szczodrzynski.edziennik.utils.Utils.d
-
-class Edudziennik(val app: App, val profile: Profile?, val loginStore: LoginStore, val callback: EdziennikCallback) : EdziennikInterface {
- companion object {
- private const val TAG = "Edudziennik"
- }
-
- val internalErrorList = mutableListOf()
- val data: DataEdudziennik
- private var afterLogin: (() -> Unit)? = null
-
- init {
- data = DataEdudziennik(app, profile, loginStore).apply {
- callback = wrapCallback(this@Edudziennik.callback)
- satisfyLoginMethods()
- }
- }
-
- private fun completed() {
- data.saveData()
- callback.onCompleted()
- }
-
- /* _______ _ _ _ _ _
- |__ __| | /\ | | (_) | | |
- | | | |__ ___ / \ | | __ _ ___ _ __ _| |_| |__ _ __ ___
- | | | '_ \ / _ \ / /\ \ | |/ _` |/ _ \| '__| | __| '_ \| '_ ` _ \
- | | | | | | __/ / ____ \| | (_| | (_) | | | | |_| | | | | | | | |
- |_| |_| |_|\___| /_/ \_\_|\__, |\___/|_| |_|\__|_| |_|_| |_| |_|
- __/ |
- |__*/
- override fun sync(featureIds: List, viewId: Int?, onlyEndpoints: List?, arguments: JsonObject?) {
- data.arguments = arguments
- data.prepare(edudziennikLoginMethods, EdudziennikFeatures, featureIds, viewId, onlyEndpoints)
- login()
- }
-
- private fun login(loginMethodId: Int? = null, afterLogin: (() -> Unit)? = null) {
- d(TAG, "Trying to login with ${data.targetLoginMethodIds}")
- if (internalErrorList.isNotEmpty()) {
- d(TAG, " - Internal errors:")
- internalErrorList.forEach { d(TAG, " - code $it") }
- }
- loginMethodId?.let { data.prepareFor(edudziennikLoginMethods, it) }
- afterLogin?.let { this.afterLogin = it }
- EdudziennikLogin(data) {
- data()
- }
- }
-
- private fun data() {
- d(TAG, "Endpoint IDs: ${data.targetEndpointIds}")
- if (internalErrorList.isNotEmpty()) {
- d(TAG, " - Internal errors:")
- internalErrorList.forEach { d(TAG, " - code $it") }
- }
- afterLogin?.invoke() ?: EdudziennikData(data) {
- completed()
- }
- }
-
- override fun getMessage(message: MessageFull) {}
- override fun sendMessage(recipients: List, subject: String, text: String) {}
- override fun markAllAnnouncementsAsRead() {}
-
- override fun getAnnouncement(announcement: AnnouncementFull) {
- EdudziennikLoginWeb(data) {
- EdudziennikWebGetAnnouncement(data, announcement) {
- completed()
- }
- }
- }
-
- override fun getAttachment(owner: Any, attachmentId: Long, attachmentName: String) {}
- override fun getRecipientList() {}
-
- override fun getEvent(eventFull: EventFull) {
- EdudziennikLoginWeb(data) {
- EdudziennikWebGetHomework(data, eventFull) {
- completed()
- }
- }
- }
-
- override fun firstLogin() { EdudziennikFirstLogin(data) { completed() } }
- override fun cancel() {
- d(TAG, "Cancelled")
- data.cancel()
- }
-
- private fun wrapCallback(callback: EdziennikCallback): EdziennikCallback {
- return object : EdziennikCallback {
- override fun onCompleted() { callback.onCompleted() }
- override fun onProgress(step: Float) { callback.onProgress(step) }
- override fun onStartProgress(stringRes: Int) { callback.onStartProgress(stringRes) }
- override fun onError(apiError: ApiError) {
- if (apiError.errorCode in internalErrorList) {
- // finish immediately if the same error occurs twice during the same sync
- callback.onError(apiError)
- return
- }
- internalErrorList.add(apiError.errorCode)
- when (apiError.errorCode) {
- ERROR_EDUDZIENNIK_WEB_SESSION_EXPIRED -> {
- login()
- }
- ERROR_LOGIN_EDUDZIENNIK_WEB_NO_SESSION_ID -> {
- login()
- }
- ERROR_EDUDZIENNIK_WEB_LIMITED_ACCESS -> {
- data()
- }
- else -> callback.onError(apiError)
- }
- }
- }
- }
-}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/EdudziennikFeatures.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/EdudziennikFeatures.kt
deleted file mode 100644
index c3fd17ed..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/EdudziennikFeatures.kt
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) Kacper Ziubryniewicz 2019-12-23
- */
-
-package pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik
-
-import pl.szczodrzynski.edziennik.data.api.*
-import pl.szczodrzynski.edziennik.data.api.models.Feature
-
-const val ENDPOINT_EDUDZIENNIK_WEB_START = 1000
-const val ENDPOINT_EDUDZIENNIK_WEB_TEACHERS = 1001
-const val ENDPOINT_EDUDZIENNIK_WEB_GRADES = 1011
-const val ENDPOINT_EDUDZIENNIK_WEB_TIMETABLE = 1012
-const val ENDPOINT_EDUDZIENNIK_WEB_EXAMS = 1013
-const val ENDPOINT_EDUDZIENNIK_WEB_ATTENDANCE = 1014
-const val ENDPOINT_EDUDZIENNIK_WEB_ANNOUNCEMENTS = 1015
-const val ENDPOINT_EDUDZIENNIK_WEB_HOMEWORK = 1016
-const val ENDPOINT_EDUDZIENNIK_WEB_EVENTS = 1017
-const val ENDPOINT_EDUDZIENNIK_WEB_NOTES = 1018
-const val ENDPOINT_EDUDZIENNIK_WEB_LUCKY_NUMBER = 1030
-
-val EdudziennikFeatures = listOf(
- /* School and team info and subjects */
- Feature(LOGIN_TYPE_EDUDZIENNIK, FEATURE_STUDENT_INFO, listOf(
- ENDPOINT_EDUDZIENNIK_WEB_START to LOGIN_METHOD_EDUDZIENNIK_WEB
- ), listOf(LOGIN_METHOD_EDUDZIENNIK_WEB)),
-
- /* Teachers */
- Feature(LOGIN_TYPE_EDUDZIENNIK, FEATURE_TEACHERS, listOf(
- ENDPOINT_EDUDZIENNIK_WEB_TEACHERS to LOGIN_METHOD_EDUDZIENNIK_WEB
- ), listOf(LOGIN_METHOD_EDUDZIENNIK_WEB)),
-
- /* Timetable */
- Feature(LOGIN_TYPE_EDUDZIENNIK, FEATURE_TIMETABLE, listOf(
- ENDPOINT_EDUDZIENNIK_WEB_TIMETABLE to LOGIN_METHOD_EDUDZIENNIK_WEB
- ), listOf(LOGIN_METHOD_EDUDZIENNIK_WEB)),
-
- /* Grades */
- Feature(LOGIN_TYPE_EDUDZIENNIK, FEATURE_GRADES, listOf(
- ENDPOINT_EDUDZIENNIK_WEB_GRADES to LOGIN_METHOD_EDUDZIENNIK_WEB
- ), listOf(LOGIN_METHOD_EDUDZIENNIK_WEB)),
-
- /* Agenda */
- Feature(LOGIN_TYPE_EDUDZIENNIK, FEATURE_AGENDA, listOf(
- ENDPOINT_EDUDZIENNIK_WEB_EXAMS to LOGIN_METHOD_EDUDZIENNIK_WEB,
- ENDPOINT_EDUDZIENNIK_WEB_HOMEWORK to LOGIN_METHOD_EDUDZIENNIK_WEB,
- ENDPOINT_EDUDZIENNIK_WEB_EVENTS to LOGIN_METHOD_EDUDZIENNIK_WEB
- ), listOf(LOGIN_METHOD_EDUDZIENNIK_WEB)),
-
- /* Homework */
- Feature(LOGIN_TYPE_EDUDZIENNIK, FEATURE_HOMEWORK, listOf(
- ENDPOINT_EDUDZIENNIK_WEB_HOMEWORK to 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 */
- Feature(LOGIN_TYPE_EDUDZIENNIK, FEATURE_ATTENDANCE, listOf(
- ENDPOINT_EDUDZIENNIK_WEB_ATTENDANCE to LOGIN_METHOD_EDUDZIENNIK_WEB
- ), listOf(LOGIN_METHOD_EDUDZIENNIK_WEB)),
-
- /* Announcements */
- Feature(LOGIN_TYPE_EDUDZIENNIK, FEATURE_ANNOUNCEMENTS, listOf(
- ENDPOINT_EDUDZIENNIK_WEB_ANNOUNCEMENTS to LOGIN_METHOD_EDUDZIENNIK_WEB
- ), listOf(LOGIN_METHOD_EDUDZIENNIK_WEB)),
-
- /* Lucky number */
- Feature(LOGIN_TYPE_EDUDZIENNIK, FEATURE_LUCKY_NUMBER, listOf(
- ENDPOINT_EDUDZIENNIK_WEB_LUCKY_NUMBER to LOGIN_METHOD_EDUDZIENNIK_WEB
- ), listOf(LOGIN_METHOD_EDUDZIENNIK_WEB))
-)
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/EdudziennikData.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/EdudziennikData.kt
deleted file mode 100644
index 7eb58d1c..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/EdudziennikData.kt
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) Kacper Ziubryniewicz 2019-12-22
- */
-
-package pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data
-
-import pl.szczodrzynski.edziennik.R
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.*
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.web.*
-import pl.szczodrzynski.edziennik.utils.Utils
-
-class EdudziennikData(val data: DataEdudziennik, val onSuccess: () -> Unit) {
- companion object {
- private const val TAG = "EdudziennikData"
- }
-
- init {
- nextEndpoint(onSuccess)
- }
-
- private fun nextEndpoint(onSuccess: () -> Unit) {
- if (data.targetEndpointIds.isEmpty()) {
- onSuccess()
- return
- }
- if (data.cancelled) {
- onSuccess()
- return
- }
- val id = data.targetEndpointIds.firstKey()
- val lastSync = data.targetEndpointIds.remove(id)
- useEndpoint(id, lastSync) { endpointId ->
- data.progress(data.progressStep)
- nextEndpoint(onSuccess)
- }
- }
-
- private fun useEndpoint(endpointId: Int, lastSync: Long?, onSuccess: (endpointId: Int) -> Unit) {
- Utils.d(TAG, "Using endpoint $endpointId. Last sync time = $lastSync")
- when (endpointId) {
- ENDPOINT_EDUDZIENNIK_WEB_START -> {
- data.startProgress(R.string.edziennik_progress_endpoint_data)
- EdudziennikWebStart(data, lastSync, onSuccess)
- }
- ENDPOINT_EDUDZIENNIK_WEB_TEACHERS -> {
- data.startProgress(R.string.edziennik_progress_endpoint_teachers)
- EdudziennikWebTeachers(data, lastSync, onSuccess)
- }
- ENDPOINT_EDUDZIENNIK_WEB_GRADES -> {
- data.startProgress(R.string.edziennik_progress_endpoint_grades)
- EdudziennikWebGrades(data, lastSync, onSuccess)
- }
- ENDPOINT_EDUDZIENNIK_WEB_TIMETABLE -> {
- data.startProgress(R.string.edziennik_progress_endpoint_timetable)
- EdudziennikWebTimetable(data, lastSync, onSuccess)
- }
- ENDPOINT_EDUDZIENNIK_WEB_EXAMS -> {
- data.startProgress(R.string.edziennik_progress_endpoint_exams)
- EdudziennikWebExams(data, lastSync, onSuccess)
- }
- ENDPOINT_EDUDZIENNIK_WEB_ATTENDANCE -> {
- data.startProgress(R.string.edziennik_progress_endpoint_attendance)
- EdudziennikWebAttendance(data, lastSync, onSuccess)
- }
- ENDPOINT_EDUDZIENNIK_WEB_ANNOUNCEMENTS -> {
- data.startProgress(R.string.edziennik_progress_endpoint_announcements)
- EdudziennikWebAnnouncements(data, lastSync, onSuccess)
- }
- ENDPOINT_EDUDZIENNIK_WEB_HOMEWORK -> {
- data.startProgress(R.string.edziennik_progress_endpoint_homework)
- EdudziennikWebHomework(data, lastSync, onSuccess)
- }
- ENDPOINT_EDUDZIENNIK_WEB_EVENTS -> {
- data.startProgress(R.string.edziennik_progress_endpoint_events)
- EdudziennikWebEvents(data, lastSync, onSuccess)
- }
- ENDPOINT_EDUDZIENNIK_WEB_NOTES -> {
- data.startProgress(R.string.edziennik_progress_endpoint_notices)
- EdudziennikWebNotes(data, lastSync, onSuccess)
- }
- ENDPOINT_EDUDZIENNIK_WEB_LUCKY_NUMBER -> {
- data.startProgress(R.string.edziennik_progress_endpoint_lucky_number)
- EdudziennikWebLuckyNumber(data, lastSync, onSuccess)
- }
- else -> onSuccess(endpointId)
- }
- }
-}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/EdudziennikWeb.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/EdudziennikWeb.kt
deleted file mode 100644
index f5adfc5d..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/EdudziennikWeb.kt
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) Kacper Ziubryniewicz 2019-12-22
- */
-
-package pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data
-
-import im.wangchao.mhttp.Request
-import im.wangchao.mhttp.Response
-import im.wangchao.mhttp.callback.TextCallbackHandler
-import pl.szczodrzynski.edziennik.data.api.*
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.DataEdudziennik
-import pl.szczodrzynski.edziennik.data.api.models.ApiError
-import pl.szczodrzynski.edziennik.utils.Utils.d
-import pl.szczodrzynski.edziennik.utils.models.Date
-
-open class EdudziennikWeb(open val data: DataEdudziennik, open val lastSync: Long?) {
- companion object {
- private const val TAG = "EdudziennikWeb"
- }
-
- val profileId
- get() = data.profile?.id ?: -1
-
- val profile
- get() = data.profile
-
- fun webGet(tag: String, endpoint: String, xhr: Boolean = false, semester: Int? = null, onSuccess: (text: String) -> Unit) {
- val url = "https://dziennikel.appspot.com/" + when (endpoint.endsWith('/') || endpoint.contains('?') || endpoint.isEmpty()) {
- true -> endpoint
- else -> "$endpoint/"
- } + (semester?.let { "?semester=" + if(it == -1) "all" else it } ?: "")
-
- d(tag, "Request: Edudziennik/Web - $url")
-
- val callback = object : TextCallbackHandler() {
- override fun onSuccess(text: String?, response: Response?) {
- if (text == null || response == null) {
- data.error(ApiError(tag, ERROR_RESPONSE_EMPTY)
- .withResponse(response))
- return
- }
-
- if (semester == null && url.contains("start")) {
- profile?.also { profile ->
- val cookies = data.app.cookieJar.getAll("dziennikel.appspot.com")
- val semesterCookie = cookies["semester"]?.toIntOrNull()
-
- semesterCookie?.let { data.currentSemester = it }
-
- if (semesterCookie == 2 && profile.dateSemester2Start > Date.getToday())
- profile.dateSemester2Start = Date.getToday().stepForward(0, 0, -1)
- }
- }
-
- try {
- onSuccess(text)
- } catch (e: Exception) {
- data.error(ApiError(tag, EXCEPTION_EDUDZIENNIK_WEB_REQUEST)
- .withThrowable(e)
- .withResponse(response)
- .withApiResponse(text))
- }
- }
-
- override fun onFailure(response: Response?, throwable: Throwable?) {
- val error = when (response?.code()) {
- 402 -> ERROR_EDUDZIENNIK_WEB_LIMITED_ACCESS
- 403 -> ERROR_EDUDZIENNIK_WEB_SESSION_EXPIRED
- else -> ERROR_REQUEST_FAILURE
- }
- data.error(ApiError(tag, error)
- .withResponse(response)
- .withThrowable(throwable))
- }
- }
-
- data.app.cookieJar.set("dziennikel.appspot.com", "sessionid", data.webSessionId)
-
- Request.builder()
- .url(url)
- .userAgent(EDUDZIENNIK_USER_AGENT)
- .apply {
- if (xhr) header("X-Requested-With", "XMLHttpRequest")
- }
- .get()
- .callback(callback)
- .build()
- .enqueue()
- }
-}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebAnnouncements.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebAnnouncements.kt
deleted file mode 100644
index a577a123..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebAnnouncements.kt
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (c) Kacper Ziubryniewicz 2019-12-26
- */
-
-package pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.web
-
-import org.jsoup.Jsoup
-import pl.szczodrzynski.edziennik.data.api.Regexes.EDUDZIENNIK_ANNOUNCEMENT_ID
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.DataEdudziennik
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.ENDPOINT_EDUDZIENNIK_WEB_ANNOUNCEMENTS
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.EdudziennikWeb
-import pl.szczodrzynski.edziennik.data.db.entity.Announcement
-import pl.szczodrzynski.edziennik.data.db.entity.Metadata
-import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
-import pl.szczodrzynski.edziennik.ext.crc32
-import pl.szczodrzynski.edziennik.ext.get
-import pl.szczodrzynski.edziennik.utils.models.Date
-
-class EdudziennikWebAnnouncements(override val data: DataEdudziennik,
- override val lastSync: Long?,
- val onSuccess: (endpointId: Int) -> Unit
-) : EdudziennikWeb(data, lastSync) {
- companion object {
- const val TAG = "EdudziennikWebAnnouncements"
- }
-
- init { data.profile?.also { profile ->
- webGet(TAG, data.schoolClassEndpoint + "Announcements") { text ->
- val doc = Jsoup.parse(text)
-
- if (doc.getElementsByClass("message").text().trim() != "Brak ogłoszeń.") {
- doc.select("table.list tbody tr").forEach { announcementElement ->
- val titleElement = announcementElement.child(0).child(0)
-
- val longId = EDUDZIENNIK_ANNOUNCEMENT_ID.find(titleElement.attr("href"))?.get(1)
- ?: return@forEach
- val id = longId.crc32()
- val subject = titleElement.text()
-
- val teacherName = announcementElement.child(1).text()
- val teacher = data.getTeacherByFirstLast(teacherName)
-
- val dateString = announcementElement.getElementsByClass("datetime").first()?.text()
- val startDate = Date.fromY_m_d(dateString)
- val addedDate = Date.fromIsoHm(dateString)
-
- val announcementObject = Announcement(
- profileId = profileId,
- id = id,
- subject = subject,
- text = null,
- startDate = startDate,
- endDate = null,
- teacherId = teacher.id,
- addedDate = addedDate
- ).also {
- it.idString = longId
- }
-
- data.announcementList.add(announcementObject)
- data.metadataList.add(Metadata(
- profileId,
- Metadata.TYPE_ANNOUNCEMENT,
- id,
- profile.empty,
- profile.empty
- ))
- }
- }
-
- data.setSyncNext(ENDPOINT_EDUDZIENNIK_WEB_ANNOUNCEMENTS, SYNC_ALWAYS)
- onSuccess(ENDPOINT_EDUDZIENNIK_WEB_ANNOUNCEMENTS)
- }
- } ?: onSuccess(ENDPOINT_EDUDZIENNIK_WEB_ANNOUNCEMENTS) }
-}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebAttendance.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebAttendance.kt
deleted file mode 100644
index 02ba0c85..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebAttendance.kt
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (c) Kacper Ziubryniewicz 2019-12-24
- */
-
-package pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.web
-
-import pl.szczodrzynski.edziennik.data.api.Regexes.EDUDZIENNIK_ATTENDANCE_ENTRIES
-import pl.szczodrzynski.edziennik.data.api.Regexes.EDUDZIENNIK_ATTENDANCE_TYPE
-import pl.szczodrzynski.edziennik.data.api.Regexes.EDUDZIENNIK_ATTENDANCE_TYPES
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.DataEdudziennik
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.ENDPOINT_EDUDZIENNIK_WEB_ATTENDANCE
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.EdudziennikWeb
-import pl.szczodrzynski.edziennik.data.db.entity.Attendance
-import pl.szczodrzynski.edziennik.data.db.entity.Metadata
-import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
-import pl.szczodrzynski.edziennik.ext.crc32
-import pl.szczodrzynski.edziennik.ext.get
-import pl.szczodrzynski.edziennik.ext.singleOrNull
-import pl.szczodrzynski.edziennik.utils.models.Date
-import java.util.*
-
-class EdudziennikWebAttendance(override val data: DataEdudziennik,
- override val lastSync: Long?,
- val onSuccess: (endpointId: Int) -> Unit
-) : EdudziennikWeb(data, lastSync) {
- companion object {
- private const val TAG = "EdudziennikWebAttendance"
- }
-
- private var requestSemester: Int? = null
-
- init {
- if (profile?.empty == true && data.currentSemester == 2) requestSemester = 1
- getAttendances()
- }
-
- private fun getAttendances() { data.profile?.also { profile ->
- webGet(TAG, data.studentEndpoint + "Presence", semester = requestSemester) { text ->
-
- val attendanceTypes = EDUDZIENNIK_ATTENDANCE_TYPES.find(text)?.get(1)?.split(',')?.map {
- val type = EDUDZIENNIK_ATTENDANCE_TYPE.find(it.trim())
- val symbol = type?.get(1)?.trim() ?: "?"
- val name = type?.get(2)?.trim() ?: "nieznany rodzaj"
- return@map Triple(
- symbol,
- name,
- when (name.lowercase()) {
- "obecność" -> Attendance.TYPE_PRESENT
- "nieobecność" -> Attendance.TYPE_ABSENT
- "spóźnienie" -> Attendance.TYPE_BELATED
- "nieobecność usprawiedliwiona" -> Attendance.TYPE_ABSENT_EXCUSED
- "dzień wolny" -> Attendance.TYPE_DAY_FREE
- "brak zajęć" -> Attendance.TYPE_DAY_FREE
- "oddelegowany" -> Attendance.TYPE_RELEASED
- else -> Attendance.TYPE_UNKNOWN
- }
- )
- } ?: emptyList()
-
- EDUDZIENNIK_ATTENDANCE_ENTRIES.findAll(text).forEach { attendanceElement ->
- val date = Date.fromY_m_d(attendanceElement[1])
- val lessonNumber = attendanceElement[2].toInt()
- val attendanceSymbol = attendanceElement[3]
-
- val lessons = data.app.db.timetableDao().getAllForDateNow(profileId, date)
- val lesson = lessons.firstOrNull { it.lessonNumber == lessonNumber }
-
- val id = "${date.stringY_m_d}:$lessonNumber:$attendanceSymbol".crc32()
-
- val (typeSymbol, typeName, baseType) = attendanceTypes.firstOrNull { (symbol, _, _) -> symbol == attendanceSymbol }
- ?: return@forEach
-
- val startTime = data.lessonRanges.singleOrNull { it.lessonNumber == lessonNumber }?.startTime
- ?: return@forEach
-
- val attendanceObject = Attendance(
- profileId = profileId,
- id = id,
- baseType = baseType,
- typeName = typeName,
- typeShort = data.app.attendanceManager.getTypeShort(baseType),
- typeSymbol = typeSymbol,
- typeColor = null,
- date = date,
- startTime = lesson?.displayStartTime ?: startTime,
- semester = profile.currentSemester,
- teacherId = lesson?.displayTeacherId ?: -1,
- subjectId = lesson?.displaySubjectId ?: -1
- ).also {
- it.lessonNumber = lessonNumber
- }
-
- data.attendanceList.add(attendanceObject)
- if (baseType != Attendance.TYPE_PRESENT) {
- data.metadataList.add(Metadata(
- profileId,
- Metadata.TYPE_ATTENDANCE,
- id,
- profile.empty || baseType == Attendance.TYPE_PRESENT_CUSTOM || baseType == Attendance.TYPE_UNKNOWN,
- profile.empty || baseType == Attendance.TYPE_PRESENT_CUSTOM || baseType == Attendance.TYPE_UNKNOWN
- ))
- }
- }
-
- if (profile.empty && requestSemester == 1 && data.currentSemester == 2) {
- requestSemester = null
- getAttendances()
- } else {
- data.setSyncNext(ENDPOINT_EDUDZIENNIK_WEB_ATTENDANCE, SYNC_ALWAYS)
- onSuccess(ENDPOINT_EDUDZIENNIK_WEB_ATTENDANCE)
- }
- }
- } ?: onSuccess(ENDPOINT_EDUDZIENNIK_WEB_ATTENDANCE) }
-}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebEvents.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebEvents.kt
deleted file mode 100644
index a296723c..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebEvents.kt
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * 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.data.api.Regexes.EDUDZIENNIK_EVENT_ID
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.DataEdudziennik
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.ENDPOINT_EDUDZIENNIK_WEB_EVENTS
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.EdudziennikWeb
-import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel
-import pl.szczodrzynski.edziennik.data.db.entity.Event
-import pl.szczodrzynski.edziennik.data.db.entity.Metadata
-import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
-import pl.szczodrzynski.edziennik.ext.crc32
-import pl.szczodrzynski.edziennik.ext.get
-import pl.szczodrzynski.edziennik.utils.models.Date
-
-class EdudziennikWebEvents(override val data: DataEdudziennik,
- override val lastSync: Long?,
- val onSuccess: (endpointId: Int) -> Unit
-) : EdudziennikWeb(data, lastSync) {
- companion object {
- const val TAG = "EdudziennikWebEvents"
- }
-
- init { data.profile?.also { profile ->
- webGet(TAG, data.studentAndClassesEndpoint + "KlassEvent", xhr = true) { text ->
- val doc = Jsoup.parseBodyFragment("")
-
- doc.getElementsByTag("tr").forEach { eventElement ->
- val date = Date.fromY_m_d(eventElement.child(1).text())
-
- val titleElement = eventElement.child(2).child(0)
- val title = titleElement.text().trim()
-
- val id = EDUDZIENNIK_EVENT_ID.find(titleElement.attr("href"))?.get(1)?.crc32()
- ?: return@forEach
-
- val eventObject = Event(
- profileId = profileId,
- id = id,
- date = date,
- time = null,
- topic = title,
- color = null,
- type = Event.TYPE_CLASS_EVENT,
- teacherId = -1,
- subjectId = -1,
- teamId = data.teamClass?.id ?: -1
- )
-
- data.eventList.add(eventObject)
- data.metadataList.add(Metadata(
- profileId,
- Metadata.TYPE_EVENT,
- id,
- profile.empty,
- profile.empty
- ))
- }
-
- data.toRemove.add(DataRemoveModel.Events.futureWithType(Event.TYPE_CLASS_EVENT))
-
- data.setSyncNext(ENDPOINT_EDUDZIENNIK_WEB_EVENTS, SYNC_ALWAYS)
- onSuccess(ENDPOINT_EDUDZIENNIK_WEB_EVENTS)
- }
- } ?: onSuccess(ENDPOINT_EDUDZIENNIK_WEB_EVENTS) }
-}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebExams.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebExams.kt
deleted file mode 100644
index a30cb421..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebExams.kt
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) Kacper Ziubryniewicz 2019-12-24
- */
-
-package pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.web
-
-import org.jsoup.Jsoup
-import pl.szczodrzynski.edziennik.data.api.Regexes.EDUDZIENNIK_EVENT_TYPE_ID
-import pl.szczodrzynski.edziennik.data.api.Regexes.EDUDZIENNIK_EXAM_ID
-import pl.szczodrzynski.edziennik.data.api.Regexes.EDUDZIENNIK_SUBJECT_ID
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.DataEdudziennik
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.ENDPOINT_EDUDZIENNIK_WEB_EXAMS
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.EdudziennikWeb
-import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel
-import pl.szczodrzynski.edziennik.data.db.entity.Event
-import pl.szczodrzynski.edziennik.data.db.entity.Metadata
-import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
-import pl.szczodrzynski.edziennik.ext.crc32
-import pl.szczodrzynski.edziennik.ext.get
-import pl.szczodrzynski.edziennik.utils.models.Date
-
-class EdudziennikWebExams(override val data: DataEdudziennik,
- override val lastSync: Long?,
- val onSuccess: (endpointId: Int) -> Unit
-) : EdudziennikWeb(data, lastSync) {
- companion object {
- const val TAG = "EdudziennikWebExams"
- }
-
- init { profile?.also { profile ->
- webGet(TAG, data.studentAndClassEndpoint + "Evaluations", xhr = true) { text ->
- val doc = Jsoup.parseBodyFragment("")
-
- doc.select("tr").forEach { examElement ->
- val id = EDUDZIENNIK_EXAM_ID.find(examElement.child(0).child(0).attr("href"))
- ?.get(1)?.crc32() ?: return@forEach
- val topic = examElement.child(0).text().trim()
-
- val subjectElement = examElement.child(1).child(0)
- val subjectId = EDUDZIENNIK_SUBJECT_ID.find(subjectElement.attr("href"))?.get(1)
- ?: return@forEach
- val subjectName = subjectElement.text().trim()
- val subject = data.getSubject(subjectId.crc32(), subjectName)
-
- val dateString = examElement.child(2).text().trim()
- if (dateString.isBlank()) return@forEach
- val date = Date.fromY_m_d(dateString)
-
- val lessons = data.app.db.timetableDao().getAllForDateNow(profileId, date)
- val startTime = lessons.firstOrNull { it.displaySubjectId == subject.id }?.displayStartTime
-
- val eventTypeElement = examElement.child(3).child(0)
- val eventTypeId = EDUDZIENNIK_EVENT_TYPE_ID.find(eventTypeElement.attr("href"))?.get(1)
- ?: return@forEach
- val eventTypeName = eventTypeElement.text()
- val eventType = data.getEventType(eventTypeId, eventTypeName)
-
- val eventObject = Event(
- profileId = profileId,
- id = id,
- date = date,
- time = startTime,
- topic = topic,
- color = null,
- type = eventType.id,
- teacherId = -1,
- subjectId = subject.id,
- teamId = data.teamClass?.id ?: -1
- )
-
- data.eventList.add(eventObject)
- data.metadataList.add(Metadata(
- profileId,
- Metadata.TYPE_EVENT,
- id,
- profile.empty,
- profile.empty
- ))
- }
-
- data.toRemove.add(DataRemoveModel.Events.futureExceptTypes(listOf(
- Event.TYPE_HOMEWORK,
- Event.TYPE_CLASS_EVENT
- )))
-
- data.setSyncNext(ENDPOINT_EDUDZIENNIK_WEB_EXAMS, SYNC_ALWAYS)
- onSuccess(ENDPOINT_EDUDZIENNIK_WEB_EXAMS)
- }
- }}
-}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebGetAnnouncement.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebGetAnnouncement.kt
deleted file mode 100644
index 5584b555..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebGetAnnouncement.kt
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) Kacper Ziubryniewicz 2019-12-26
- */
-
-package pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.web
-
-import org.greenrobot.eventbus.EventBus
-import pl.szczodrzynski.edziennik.data.api.Regexes
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.DataEdudziennik
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.EdudziennikWeb
-import pl.szczodrzynski.edziennik.data.api.events.AnnouncementGetEvent
-import pl.szczodrzynski.edziennik.data.db.full.AnnouncementFull
-import pl.szczodrzynski.edziennik.ext.get
-
-class EdudziennikWebGetAnnouncement(override val data: DataEdudziennik,
- private val announcement: AnnouncementFull,
- val onSuccess: () -> Unit
-) : EdudziennikWeb(data, null) {
- companion object {
- const val TAG = "EdudziennikWebGetAnnouncement"
- }
-
- init {
- webGet(TAG, "Announcement/${announcement.idString}") { text ->
- val description = Regexes.EDUDZIENNIK_ANNOUNCEMENT_DESCRIPTION.find(text)?.get(1)?.trim() ?: ""
-
- announcement.text = description
-
- EventBus.getDefault().postSticky(AnnouncementGetEvent(announcement))
-
- data.announcementList.add(announcement)
- onSuccess()
- }
- }
-}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebGetHomework.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebGetHomework.kt
deleted file mode 100644
index d6c568ab..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebGetHomework.kt
+++ /dev/null
@@ -1,47 +0,0 @@
-package pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.web
-
-import org.greenrobot.eventbus.EventBus
-import pl.szczodrzynski.edziennik.data.api.Regexes
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.DataEdudziennik
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.EdudziennikWeb
-import pl.szczodrzynski.edziennik.data.api.events.EventGetEvent
-import pl.szczodrzynski.edziennik.data.db.full.EventFull
-import pl.szczodrzynski.edziennik.ext.get
-import pl.szczodrzynski.edziennik.ext.isNotNullNorEmpty
-import pl.szczodrzynski.edziennik.utils.html.BetterHtml
-
-class EdudziennikWebGetHomework(
- override val data: DataEdudziennik,
- val event: EventFull,
- val onSuccess: () -> Unit
-) : EdudziennikWeb(data, null) {
- companion object {
- const val TAG = "EdudziennikWebGetHomework"
- }
-
- init {
- if (event.attachmentNames.isNotNullNorEmpty()) {
- val id = event.attachmentNames!![0]
-
- webGet(TAG, "Homework/$id") { text ->
- val description = Regexes.EDUDZIENNIK_HOMEWORK_DESCRIPTION.find(text)?.get(1)?.trim()
-
- if (description != null)
- event.topic = BetterHtml.fromHtml(context = null, description).toString()
-
- event.homeworkBody = ""
- event.isDownloaded = true
- event.attachmentNames = null
-
- data.eventList += event
- data.eventListReplace = true
-
- EventBus.getDefault().postSticky(EventGetEvent(event))
- onSuccess()
- }
- } else {
- EventBus.getDefault().postSticky(EventGetEvent(event))
- onSuccess()
- }
- }
-}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebGrades.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebGrades.kt
deleted file mode 100644
index 3ffba09b..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebGrades.kt
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Copyright (c) Kacper Ziubryniewicz 2019-12-25
- */
-
-package pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.web
-
-import android.graphics.Color
-import org.jsoup.Jsoup
-import pl.szczodrzynski.edziennik.data.api.Regexes
-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.data.EdudziennikWeb
-import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel
-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_POINT_SUM
-import pl.szczodrzynski.edziennik.data.db.entity.Grade.Companion.TYPE_SEMESTER1_FINAL
-import pl.szczodrzynski.edziennik.data.db.entity.Grade.Companion.TYPE_SEMESTER1_PROPOSED
-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.Metadata
-import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
-import pl.szczodrzynski.edziennik.ext.colorFromCssName
-import pl.szczodrzynski.edziennik.ext.crc32
-import pl.szczodrzynski.edziennik.ext.get
-import pl.szczodrzynski.edziennik.utils.Utils
-import pl.szczodrzynski.edziennik.utils.models.Date
-
-class EdudziennikWebGrades(override val data: DataEdudziennik,
- override val lastSync: Long?,
- val onSuccess: (endpointId: Int) -> Unit
-) : EdudziennikWeb(data, lastSync) {
- companion object {
- private const val TAG = "EdudziennikWebGrades"
- }
-
- private var requestSemester: Int? = null
-
- init {
- if (profile?.empty == true && data.currentSemester == 2) requestSemester = 1
- getGrades()
- }
-
- private fun getGrades() { data.profile?.also { profile ->
- webGet(TAG, data.studentEndpoint + "start", semester = requestSemester) { text ->
- val semester = requestSemester ?: data.currentSemester
-
- val doc = Jsoup.parse(text)
- val subjects = doc.select("#student_grades tbody").firstOrNull()?.children()
-
- subjects?.forEach { subjectElement ->
- if (subjectElement.id().isBlank()) return@forEach
-
- val subjectId = subjectElement.id().trim()
- val subjectName = subjectElement.child(0).text().trim()
- val subject = data.getSubject(subjectId.crc32(), subjectName)
-
- val gradeType = when {
- subjectElement.select("#sum").text().isNotBlank() -> TYPE_POINT_SUM
- else -> TYPE_NORMAL
- }
-
- val gradeCountToAverage = subjectElement.select("#avg").text().isNotBlank()
-
- val grades = subjectElement.select(".grade[data-edited]")
- val gradesInfo = subjectElement.select(".grade-tip")
-
- val gradeValues = if (grades.isNotEmpty()) {
- subjects.select(".avg-$subjectId .grade-tip > p").first()
- ?.text()?.split('+')?.map {
- val split = it.split('*')
- val value = split[1].trim().toFloatOrNull()
- val weight = value?.let { split[0].trim().toFloatOrNull() } ?: 0f
-
- Pair(value ?: 0f, weight)
- } ?: emptyList()
- } else emptyList()
-
- grades.forEachIndexed { index, gradeElement ->
- val id = Regexes.EDUDZIENNIK_GRADE_ID.find(gradeElement.attr("href"))?.get(1)?.crc32()
- ?: return@forEachIndexed
- val (value, weight) = gradeValues[index]
- val name = gradeElement.text().trim().let {
- if (it.contains(',') || it.contains('.')) {
- val replaced = it.replace(',', '.')
- val float = replaced.toFloatOrNull()
-
- if (float != null && float % 1 == 0f) float.toInt().toString()
- else it
- } else it
- }
-
- val info = gradesInfo[index]
- val fullName = info.child(0).text().trim()
- val columnName = info.child(4).text().trim()
- val comment = info.ownText()
-
- val description = columnName + if (comment.isNotBlank()) " - $comment" else null
-
- val teacherName = info.child(1).text()
- val teacher = data.getTeacherByLastFirst(teacherName)
-
- val addedDate = info.child(2).text().split(' ').let {
- val day = it[0].toInt()
- val month = Utils.monthFromName(it[1])
- val year = it[2].toInt()
-
- Date(year, month, day).inMillis
- }
-
- val color = Regexes.STYLE_CSS_COLOR.find(gradeElement.attr("style"))?.get(1)?.let {
- if (it.startsWith('#')) Color.parseColor(it)
- else colorFromCssName(it)
- } ?: -1
-
- val gradeObject = Grade(
- profileId = profileId,
- id = id,
- name = name,
- type = gradeType,
- value = value,
- weight = if (gradeCountToAverage) weight else 0f,
- color = color,
- category = fullName,
- description = description,
- comment = null,
- semester = semester,
- teacherId = teacher.id,
- subjectId = subject.id,
- addedDate = addedDate
- )
-
- data.gradeList.add(gradeObject)
- data.metadataList.add(Metadata(
- profileId,
- Metadata.TYPE_GRADE,
- id,
- profile.empty,
- profile.empty
- ))
- }
-
- val proposed = subjectElement.select(".proposal").firstOrNull()?.text()?.trim()
-
- if (proposed != null && proposed.isNotBlank()) {
- val proposedGradeObject = Grade(
- profileId = profileId,
- id = (-1 * subject.id) - 1,
- name = proposed,
- type = when (semester) {
- 1 -> TYPE_SEMESTER1_PROPOSED
- else -> TYPE_SEMESTER2_PROPOSED
- },
- value = proposed.toFloatOrNull() ?: 0f,
- weight = 0f,
- color = -1,
- category = null,
- description = null,
- comment = null,
- semester = semester,
- teacherId = -1,
- subjectId = subject.id
- )
-
- data.gradeList.add(proposedGradeObject)
- data.metadataList.add(Metadata(
- profileId,
- Metadata.TYPE_GRADE,
- proposedGradeObject.id,
- profile.empty,
- profile.empty
- ))
- }
-
- val final = subjectElement.select(".final").firstOrNull()?.text()?.trim()
-
- if (final != null && final.isNotBlank()) {
- val finalGradeObject = Grade(
- profileId = profileId,
- id = (-1 * subject.id) - 2,
- name = final,
- type = when (semester) {
- 1 -> TYPE_SEMESTER1_FINAL
- else -> TYPE_SEMESTER2_FINAL
- },
- value = final.toFloatOrNull() ?: 0f,
- weight = 0f,
- color = -1,
- category = null,
- description = null,
- comment = null,
- semester = semester,
- teacherId = -1,
- subjectId = subject.id
- )
-
- data.gradeList.add(finalGradeObject)
- data.metadataList.add(Metadata(
- data.profileId,
- Metadata.TYPE_GRADE,
- finalGradeObject.id,
- profile.empty,
- profile.empty
- ))
- }
- }
-
- if (!subjects.isNullOrEmpty()) {
- data.toRemove.addAll(listOf(
- TYPE_NORMAL,
- TYPE_POINT_SUM,
- TYPE_SEMESTER1_PROPOSED,
- TYPE_SEMESTER2_PROPOSED,
- TYPE_SEMESTER1_FINAL,
- TYPE_SEMESTER2_FINAL
- ).map {
- DataRemoveModel.Grades.semesterWithType(semester, it)
- })
- }
-
- if (profile.empty && requestSemester == 1 && data.currentSemester == 2) {
- requestSemester = null
- getGrades()
- } else {
- data.setSyncNext(ENDPOINT_EDUDZIENNIK_WEB_GRADES, SYNC_ALWAYS)
- onSuccess(ENDPOINT_EDUDZIENNIK_WEB_GRADES)
- }
- }
- } ?: onSuccess(ENDPOINT_EDUDZIENNIK_WEB_GRADES) }
-}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebHomework.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebHomework.kt
deleted file mode 100644
index 176c6d3d..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebHomework.kt
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) Kacper Ziubryniewicz 2019-12-29
- */
-
-package pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.web
-
-import org.jsoup.Jsoup
-import pl.szczodrzynski.edziennik.data.api.Regexes.EDUDZIENNIK_HOMEWORK_ID
-import pl.szczodrzynski.edziennik.data.api.Regexes.EDUDZIENNIK_SUBJECT_ID
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.DataEdudziennik
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.ENDPOINT_EDUDZIENNIK_WEB_HOMEWORK
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.EdudziennikWeb
-import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel
-import pl.szczodrzynski.edziennik.data.db.entity.Event
-import pl.szczodrzynski.edziennik.data.db.entity.Metadata
-import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
-import pl.szczodrzynski.edziennik.ext.crc32
-import pl.szczodrzynski.edziennik.ext.get
-import pl.szczodrzynski.edziennik.utils.models.Date
-
-class EdudziennikWebHomework(override val data: DataEdudziennik,
- override val lastSync: Long?,
- val onSuccess: (endpointId: Int) -> Unit
-) : EdudziennikWeb(data, lastSync) {
- companion object {
- const val TAG = "EdudziennikWebHomework"
- }
-
- init { data.profile?.also { profile ->
- webGet(TAG, data.courseStudentEndpoint + "Homework", xhr = true) { text ->
- val doc = Jsoup.parseBodyFragment("")
-
- if (doc.getElementsByClass("message").text().trim() != "Brak prac domowych") {
- doc.getElementsByTag("tr").forEach { homeworkElement ->
- val dateElement = homeworkElement.getElementsByClass("date").first()?.child(0) ?: return@forEach
- val idStr = EDUDZIENNIK_HOMEWORK_ID.find(dateElement.attr("href"))?.get(1) ?: return@forEach
- val id = idStr.crc32()
- val date = Date.fromY_m_d(dateElement.text())
-
- val subjectElement = homeworkElement.child(1).child(0)
- val subjectId = EDUDZIENNIK_SUBJECT_ID.find(subjectElement.attr("href"))?.get(1)
- ?: return@forEach
- val subjectName = subjectElement.text()
- val subject = data.getSubject(subjectId.crc32(), subjectName)
-
- val lessons = data.app.db.timetableDao().getAllForDateNow(profileId, date)
- val startTime = lessons.firstOrNull { it.subjectId == subject.id }?.displayStartTime
-
- val teacherName = homeworkElement.child(2).text()
- val teacher = data.getTeacherByFirstLast(teacherName)
-
- val topic = homeworkElement.child(4).text().trim()
-
- val eventObject = Event(
- profileId = profileId,
- id = id,
- date = date,
- time = startTime,
- topic = topic ?: "",
- color = null,
- type = Event.TYPE_HOMEWORK,
- teacherId = teacher.id,
- subjectId = subject.id,
- teamId = data.teamClass?.id ?: -1
- )
-
- eventObject.attachmentNames = mutableListOf(idStr)
-
- data.eventList.add(eventObject)
- data.metadataList.add(Metadata(
- profileId,
- Metadata.TYPE_HOMEWORK,
- id,
- profile.empty,
- profile.empty
- ))
- }
- }
-
- data.toRemove.add(DataRemoveModel.Events.futureWithType(Event.TYPE_HOMEWORK))
-
- data.setSyncNext(ENDPOINT_EDUDZIENNIK_WEB_HOMEWORK, SYNC_ALWAYS)
- onSuccess(ENDPOINT_EDUDZIENNIK_WEB_HOMEWORK)
- }
- } ?: onSuccess(ENDPOINT_EDUDZIENNIK_WEB_HOMEWORK) }
-}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebLuckyNumber.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebLuckyNumber.kt
deleted file mode 100644
index db8164c8..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebLuckyNumber.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) Kacper Ziubryniewicz 2019-12-23
- */
-
-package pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.web
-
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.DataEdudziennik
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.ENDPOINT_EDUDZIENNIK_WEB_LUCKY_NUMBER
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.EdudziennikWeb
-import pl.szczodrzynski.edziennik.data.db.entity.LuckyNumber
-import pl.szczodrzynski.edziennik.data.db.entity.Metadata
-import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
-import pl.szczodrzynski.edziennik.utils.models.Date
-
-class EdudziennikWebLuckyNumber(override val data: DataEdudziennik,
- override val lastSync: Long?,
- val onSuccess: (endpointId: Int) -> Unit
-) : EdudziennikWeb(data, lastSync) {
- companion object {
- private const val TAG = "EdudziennikWebLuckyNumber"
- }
-
- init { data.profile?.also { profile ->
- webGet(TAG, data.schoolEndpoint + "Lucky", xhr = true) { text ->
- text.toIntOrNull()?.also { luckyNumber ->
- val luckyNumberObject = LuckyNumber(
- profileId = profileId,
- date = Date.getToday(),
- number = luckyNumber
- )
-
- data.luckyNumberList.add(luckyNumberObject)
- data.metadataList.add(Metadata(
- profileId,
- Metadata.TYPE_LUCKY_NUMBER,
- luckyNumberObject.date.value.toLong(),
- true,
- profile.empty
- ))
- }
-
- data.setSyncNext(ENDPOINT_EDUDZIENNIK_WEB_LUCKY_NUMBER, SYNC_ALWAYS)
- onSuccess(ENDPOINT_EDUDZIENNIK_WEB_LUCKY_NUMBER)
- }
- } ?: onSuccess(ENDPOINT_EDUDZIENNIK_WEB_LUCKY_NUMBER) }
-}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebNotes.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebNotes.kt
deleted file mode 100644
index 56457a91..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebNotes.kt
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * 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.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.entity.Metadata
-import pl.szczodrzynski.edziennik.data.db.entity.Notice
-import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
-import pl.szczodrzynski.edziennik.ext.crc32
-import pl.szczodrzynski.edziennik.ext.get
-import pl.szczodrzynski.edziennik.utils.models.Date
-
-class EdudziennikWebNotes(override val data: DataEdudziennik,
- override val lastSync: Long?,
- val onSuccess: (endpointId: Int) -> Unit
-) : EdudziennikWeb(data, lastSync) {
- companion object {
- const val TAG = "EdudziennikWebNotes"
- }
-
- init { data.profile?.also { profile ->
- webGet(TAG, data.classStudentEndpoint + "RegistryNotesStudent", xhr = true) { text ->
- val doc = Jsoup.parseBodyFragment("")
-
- doc.getElementsByTag("tr").forEach { noteElement ->
- val dateElement = noteElement.getElementsByClass("date").first()?.child(0) ?: return@forEach
- 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 = profileId,
- id = id,
- type = Notice.TYPE_NEUTRAL,
- semester = profile.currentSemester,
- text = description,
- category = null,
- points = null,
- teacherId = teacher.id,
- addedDate = addedDate
- )
-
- data.noticeList.add(noticeObject)
- data.metadataList.add(Metadata(
- profileId,
- Metadata.TYPE_NOTICE,
- id,
- profile.empty,
- profile.empty
- ))
- }
-
- data.setSyncNext(ENDPOINT_EDUDZIENNIK_WEB_NOTES, SYNC_ALWAYS)
- onSuccess(ENDPOINT_EDUDZIENNIK_WEB_NOTES)
- }
- } ?: onSuccess(ENDPOINT_EDUDZIENNIK_WEB_NOTES) }
-}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebStart.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebStart.kt
deleted file mode 100644
index e415986c..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebStart.kt
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) Kacper Ziubryniewicz 2019-12-23
- */
-
-package pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.web
-
-import pl.szczodrzynski.edziennik.data.api.ERROR_EDUDZIENNIK_WEB_TEAM_MISSING
-import pl.szczodrzynski.edziennik.data.api.Regexes
-import pl.szczodrzynski.edziennik.data.api.Regexes.EDUDZIENNIK_SUBJECTS_START
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.DataEdudziennik
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.ENDPOINT_EDUDZIENNIK_WEB_START
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.EdudziennikWeb
-import pl.szczodrzynski.edziennik.data.api.models.ApiError
-import pl.szczodrzynski.edziennik.data.db.entity.Team
-import pl.szczodrzynski.edziennik.ext.MONTH
-import pl.szczodrzynski.edziennik.ext.crc32
-import pl.szczodrzynski.edziennik.ext.firstLettersName
-import pl.szczodrzynski.edziennik.ext.get
-
-class EdudziennikWebStart(override val data: DataEdudziennik,
- override val lastSync: Long?,
- val onSuccess: (endpointId: Int) -> Unit
-) : EdudziennikWeb(data, lastSync) {
- companion object {
- private const val TAG = "EdudziennikWebStart"
- }
-
- init {
- webGet(TAG, data.studentEndpoint + "start") { text ->
- getSchoolAndTeam(text)
- getSubjects(text)
-
- data.setSyncNext(ENDPOINT_EDUDZIENNIK_WEB_START, MONTH)
- onSuccess(ENDPOINT_EDUDZIENNIK_WEB_START)
- }
- }
-
- private fun getSchoolAndTeam(text: String) {
- val schoolId = Regexes.EDUDZIENNIK_SCHOOL_DETAIL_ID.find(text)?.get(1)?.trim()
- val schoolLongName = Regexes.EDUDZIENNIK_SCHOOL_DETAIL_NAME.find(text)?.get(1)?.trim()
- data.schoolId = schoolId
-
- val classId = Regexes.EDUDZIENNIK_CLASS_DETAIL_ID.find(text)?.get(1)?.trim()
- val className = Regexes.EDUDZIENNIK_CLASS_DETAIL_NAME.find(text)?.get(1)?.trim()
- data.classId = classId
-
- if (classId == null || className == null || schoolId == null || schoolLongName == null) {
- data.error(ApiError(TAG, ERROR_EDUDZIENNIK_WEB_TEAM_MISSING)
- .withApiResponse(text))
- return
- }
-
- val schoolName = schoolId.crc32().toString() + schoolLongName.firstLettersName + "_edu"
- data.schoolName = schoolName
-
- val teamId = classId.crc32()
- val teamCode = "$schoolName:$className"
-
- val teamObject = Team(
- data.profileId,
- teamId,
- className,
- Team.TYPE_CLASS,
- teamCode,
- -1
- )
-
- data.teamClass = teamObject
- data.teamList.put(teamObject.id, teamObject)
- }
-
- private fun getSubjects(text: String) {
- EDUDZIENNIK_SUBJECTS_START.findAll(text).forEach {
- val id = it[1].trim()
- val name = it[2].trim()
- data.getSubject(id.crc32(), name)
- }
- }
-}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebTeachers.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebTeachers.kt
deleted file mode 100644
index 115f9919..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebTeachers.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) Kacper Ziubryniewicz 2019-12-25
- */
-
-package pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.web
-
-import pl.szczodrzynski.edziennik.data.api.Regexes.EDUDZIENNIK_TEACHERS
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.DataEdudziennik
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.ENDPOINT_EDUDZIENNIK_WEB_TEACHERS
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.EdudziennikWeb
-import pl.szczodrzynski.edziennik.ext.MONTH
-import pl.szczodrzynski.edziennik.ext.get
-
-class EdudziennikWebTeachers(override val data: DataEdudziennik,
- override val lastSync: Long?,
- val onSuccess: (endpointId: Int) -> Unit
-) : EdudziennikWeb(data, lastSync) {
- companion object {
- private const val TAG = "EdudziennikWebTeachers"
- }
-
- init {
- webGet(TAG, data.studentAndTeacherClassEndpoint + "grid") { text ->
- EDUDZIENNIK_TEACHERS.findAll(text).forEach {
- val lastName = it[1].trim()
- val firstName = it[2].trim()
- data.getTeacher(firstName, lastName)
- }
-
- data.setSyncNext(ENDPOINT_EDUDZIENNIK_WEB_TEACHERS, MONTH)
- onSuccess(ENDPOINT_EDUDZIENNIK_WEB_TEACHERS)
- }
- }
-}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebTimetable.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebTimetable.kt
deleted file mode 100644
index 6cab6026..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebTimetable.kt
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (c) Kacper Ziubryniewicz 2019-12-23
- */
-
-package pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.web
-
-import org.jsoup.Jsoup
-import pl.szczodrzynski.edziennik.data.api.Regexes.EDUDZIENNIK_SUBJECT_ID
-import pl.szczodrzynski.edziennik.data.api.Regexes.EDUDZIENNIK_TEACHER_ID
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.DataEdudziennik
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.ENDPOINT_EDUDZIENNIK_WEB_TIMETABLE
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.EdudziennikWeb
-import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel
-import pl.szczodrzynski.edziennik.data.db.entity.Lesson
-import pl.szczodrzynski.edziennik.data.db.entity.LessonRange
-import pl.szczodrzynski.edziennik.data.db.entity.Metadata
-import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
-import pl.szczodrzynski.edziennik.ext.crc32
-import pl.szczodrzynski.edziennik.ext.get
-import pl.szczodrzynski.edziennik.ext.getString
-import pl.szczodrzynski.edziennik.ext.singleOrNull
-import pl.szczodrzynski.edziennik.utils.Utils.d
-import pl.szczodrzynski.edziennik.utils.models.Date
-import pl.szczodrzynski.edziennik.utils.models.Time
-import pl.szczodrzynski.edziennik.utils.models.Week
-
-class EdudziennikWebTimetable(override val data: DataEdudziennik,
- override val lastSync: Long?,
- val onSuccess: (endpointId: Int) -> Unit
-) : EdudziennikWeb(data, lastSync) {
- companion object {
- private const val TAG = "EdudziennikWebTimetable"
- }
-
- init { data.profile?.also { profile ->
-
- val currentWeekStart = Week.getWeekStart()
-
- if (Date.getToday().weekDay > 4) {
- currentWeekStart.stepForward(0, 0, 7)
- }
-
- val getDate = data.arguments?.getString("weekStart") ?: currentWeekStart.stringY_m_d
-
- val weekStart = Date.fromY_m_d(getDate)
- val weekEnd = weekStart.clone().stepForward(0, 0, 6)
-
- webGet(TAG, data.timetableEndpoint + "print?date=$getDate") { text ->
- val doc = Jsoup.parse(text)
-
- val dataDays = mutableListOf()
- val dataStart = weekStart.clone()
- while (dataStart <= weekEnd) {
- dataDays += dataStart.value
- dataStart.stepForward(0, 0, 1)
- }
-
- val table = doc.select("#Schedule tbody").first()
-
- if (table?.text()?.contains("Brak planu lekcji.") == false) {
- table.children().forEach { row ->
- val rowElements = row.children()
-
- val lessonNumber = rowElements[0].text().toInt()
-
- val times = rowElements[1].text().split('-')
- val startTime = Time.fromH_m(times[0].trim())
- val endTime = Time.fromH_m(times[1].trim())
-
- data.lessonRanges.singleOrNull {
- it.lessonNumber == lessonNumber && it.startTime == startTime && it.endTime == endTime
- } ?: run {
- data.lessonRanges.put(lessonNumber, LessonRange(profileId, lessonNumber, startTime, endTime))
- }
-
- rowElements.subList(2, rowElements.size).forEachIndexed { index, lesson ->
- val course = lesson.select(".course").firstOrNull() ?: return@forEachIndexed
- val info = course.select("span > span")
-
- if (info.isEmpty()) return@forEachIndexed
-
- val type = when (course.hasClass("substitute")) {
- true -> Lesson.TYPE_CHANGE
- else -> Lesson.TYPE_NORMAL
- }
-
- /* Getting subject */
-
- val subjectElement = info[0].child(0)
- val subjectId = EDUDZIENNIK_SUBJECT_ID.find(subjectElement.attr("href"))?.get(1)
- ?: return@forEachIndexed
- val subjectName = subjectElement.text().trim()
- val subject = data.getSubject(subjectId.crc32(), subjectName)
-
- /* Getting teacher */
-
- val teacherId = if (info.size >= 2) {
- val teacherElement = info[1].child(0)
- val teacherLongId = EDUDZIENNIK_TEACHER_ID.find(teacherElement.attr("href"))?.get(1)
- val teacherName = teacherElement.text().trim()
- data.getTeacherByLastFirst(teacherName, teacherLongId).id
- } else null
-
- val lessonObject = Lesson(profileId, -1).also {
- it.type = type
- it.date = weekStart.clone().stepForward(0, 0, index)
- it.lessonNumber = lessonNumber
- it.startTime = startTime
- it.endTime = endTime
- it.subjectId = subject.id
- it.teacherId = teacherId
- it.teamId = data.teamClass?.id
-
- it.id = it.buildId()
- }
-
- data.lessonList.add(lessonObject)
- dataDays.remove(lessonObject.date!!.value)
-
- if (type != Lesson.TYPE_NORMAL) {
- val seen = profile.empty || lessonObject.date!! < Date.getToday()
-
- data.metadataList.add(Metadata(
- profileId,
- Metadata.TYPE_LESSON_CHANGE,
- lessonObject.id,
- seen,
- seen
- ))
- }
- }
- }
- }
-
- for (day in dataDays) {
- val lessonDate = Date.fromValue(day)
- data.lessonList += Lesson(profileId, lessonDate.value.toLong()).apply {
- type = Lesson.TYPE_NO_LESSONS
- date = lessonDate
- }
- }
-
- d(TAG, "Clearing lessons between ${weekStart.stringY_m_d} and ${weekEnd.stringY_m_d} - timetable downloaded for $getDate")
-
- data.toRemove.add(DataRemoveModel.Timetable.between(weekStart, weekEnd))
- data.setSyncNext(ENDPOINT_EDUDZIENNIK_WEB_TIMETABLE, SYNC_ALWAYS)
- onSuccess(ENDPOINT_EDUDZIENNIK_WEB_TIMETABLE)
- }
- } ?: onSuccess(ENDPOINT_EDUDZIENNIK_WEB_TIMETABLE) }
-}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/firstlogin/EdudziennikFirstLogin.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/firstlogin/EdudziennikFirstLogin.kt
deleted file mode 100644
index 808435af..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/firstlogin/EdudziennikFirstLogin.kt
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) Kacper Ziubryniewicz 2019-12-22
- */
-
-package pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.firstlogin
-
-import org.greenrobot.eventbus.EventBus
-import pl.szczodrzynski.edziennik.data.api.LOGIN_TYPE_EDUDZIENNIK
-import pl.szczodrzynski.edziennik.data.api.Regexes.EDUDZIENNIK_ACCOUNT_NAME_START
-import pl.szczodrzynski.edziennik.data.api.Regexes.EDUDZIENNIK_STUDENTS_START
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.DataEdudziennik
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.EdudziennikWeb
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.login.EdudziennikLoginWeb
-import pl.szczodrzynski.edziennik.data.api.events.FirstLoginFinishedEvent
-import pl.szczodrzynski.edziennik.data.db.entity.Profile
-import pl.szczodrzynski.edziennik.ext.fixName
-import pl.szczodrzynski.edziennik.ext.get
-import pl.szczodrzynski.edziennik.ext.getShortName
-import pl.szczodrzynski.edziennik.ext.set
-
-class EdudziennikFirstLogin(val data: DataEdudziennik, val onSuccess: () -> Unit) {
- companion object {
- private const val TAG = "EdudziennikFirstLogin"
- }
-
- private val web = EdudziennikWeb(data, null)
- private val profileList = mutableListOf()
-
- init {
- val loginStoreId = data.loginStore.id
- val loginStoreType = LOGIN_TYPE_EDUDZIENNIK
- var firstProfileId = loginStoreId
-
- EdudziennikLoginWeb(data) {
- web.webGet(TAG, "") { text ->
- val accountNameLong = EDUDZIENNIK_ACCOUNT_NAME_START.find(text)?.get(1)?.fixName()
-
- EDUDZIENNIK_STUDENTS_START.findAll(text).forEach {
- val studentId = it[1]
- val studentNameLong = it[2].fixName()
-
- if (studentId.isBlank() || studentNameLong.isBlank()) return@forEach
-
- val studentNameShort = studentNameLong.getShortName()
- val accountName = if (accountNameLong == studentNameLong) null else accountNameLong
-
- val profile = Profile(
- firstProfileId++,
- loginStoreId,
- loginStoreType,
- studentNameLong,
- data.loginEmail,
- studentNameLong,
- studentNameShort,
- accountName
- ).apply {
- studentData["studentId"] = studentId
- }
- profileList.add(profile)
- }
-
- EventBus.getDefault().postSticky(FirstLoginFinishedEvent(profileList, data.loginStore))
- onSuccess()
- }
- }
- }
-}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/login/EdudziennikLogin.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/login/EdudziennikLogin.kt
deleted file mode 100644
index 1cb2fd07..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/login/EdudziennikLogin.kt
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) Kacper Ziubryniewicz 2019-12-22
- */
-
-package pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.login
-
-import pl.szczodrzynski.edziennik.R
-import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_EDUDZIENNIK_WEB
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.DataEdudziennik
-import pl.szczodrzynski.edziennik.utils.Utils
-
-class EdudziennikLogin(val data: DataEdudziennik, val onSuccess: () -> Unit) {
- companion object {
- private const val TAG = "EdudziennikLogin"
- }
-
- private var cancelled = false
-
- init {
- nextLoginMethod(onSuccess)
- }
-
- private fun nextLoginMethod(onSuccess: () -> Unit) {
- if (data.targetLoginMethodIds.isEmpty()) {
- onSuccess()
- return
- }
- if (cancelled) {
- onSuccess()
- return
- }
- useLoginMethod(data.targetLoginMethodIds.removeAt(0)) { usedMethodId ->
- data.progress(data.progressStep)
- if (usedMethodId != -1)
- data.loginMethods.add(usedMethodId)
- nextLoginMethod(onSuccess)
- }
- }
-
- private fun useLoginMethod(loginMethodId: Int, onSuccess: (usedMethodId: Int) -> Unit) {
- // this should never be true
- if (data.loginMethods.contains(loginMethodId)) {
- onSuccess(-1)
- return
- }
- Utils.d(TAG, "Using login method $loginMethodId")
- when (loginMethodId) {
- LOGIN_METHOD_EDUDZIENNIK_WEB -> {
- data.startProgress(R.string.edziennik_progress_login_edudziennik_web)
- EdudziennikLoginWeb(data) { onSuccess(loginMethodId) }
- }
- }
- }
-}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/login/EdudziennikLoginWeb.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/login/EdudziennikLoginWeb.kt
deleted file mode 100644
index d730fe91..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/login/EdudziennikLoginWeb.kt
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (c) Kacper Ziubryniewicz 2019-12-22
- */
-
-package pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.login
-
-import im.wangchao.mhttp.Request
-import im.wangchao.mhttp.Response
-import im.wangchao.mhttp.callback.TextCallbackHandler
-import pl.szczodrzynski.edziennik.data.api.*
-import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.DataEdudziennik
-import pl.szczodrzynski.edziennik.data.api.models.ApiError
-import pl.szczodrzynski.edziennik.ext.getUnixDate
-import pl.szczodrzynski.edziennik.ext.isNotNullNorEmpty
-import pl.szczodrzynski.edziennik.utils.Utils.d
-
-class EdudziennikLoginWeb(val data: DataEdudziennik, val onSuccess: () -> Unit) {
- companion object {
- private const val TAG = "EdudziennikLoginWeb"
- }
-
- init { run {
- if (data.isWebLoginValid()) {
- onSuccess()
- }
- else {
- data.app.cookieJar.clear("dziennikel.appspot.com")
- if (data.loginEmail.isNotNullNorEmpty() && data.loginPassword.isNotNullNorEmpty()) {
- loginWithCredentials()
- }
- else {
- data.error(ApiError(TAG, ERROR_LOGIN_DATA_MISSING))
- }
- }
- }}
-
- private fun loginWithCredentials() {
- d(TAG, "Request: Edudziennik/Login/Web - https://dziennikel.appspot.com/login/?next=/")
-
- val callback = object : TextCallbackHandler() {
- override fun onSuccess(text: String?, response: Response?) {
- if (text == null || response == null) {
- data.error(ApiError(TAG, ERROR_RESPONSE_EMPTY)
- .withResponse(response))
- return
- }
-
- val url = response.raw().request().url().toString()
-
- if (!url.contains("Student")) {
- when {
- text.contains("Wprowadzono nieprawidłową nazwę użytkownika lub hasło.") -> ERROR_LOGIN_EDUDZIENNIK_WEB_INVALID_LOGIN
- else -> ERROR_LOGIN_EDUDZIENNIK_WEB_OTHER
- }.let { errorCode ->
- data.error(ApiError(TAG, errorCode)
- .withApiResponse(text)
- .withResponse(response))
- return
- }
- }
-
- val cookies = data.app.cookieJar.getAll("dziennikel.appspot.com")
- val sessionId = cookies["sessionid"]
-
- if (sessionId == null) {
- data.error(ApiError(TAG, ERROR_LOGIN_EDUDZIENNIK_WEB_NO_SESSION_ID)
- .withResponse(response)
- .withApiResponse(text))
- return
- }
-
- data.webSessionId = sessionId
- data.webSessionIdExpiryTime = response.getUnixDate() + 45 * 60 /* 45 min */
- onSuccess()
- }
-
- override fun onFailure(response: Response?, throwable: Throwable?) {
- data.error(ApiError(TAG, ERROR_REQUEST_FAILURE)
- .withResponse(response)
- .withThrowable(throwable))
- }
- }
-
- Request.builder()
- .url("https://dziennikel.appspot.com/login/?next=/")
- .userAgent(EDUDZIENNIK_USER_AGENT)
- .contentType("application/x-www-form-urlencoded")
- .addParameter("email", data.loginEmail)
- .addParameter("password", data.loginPassword)
- .addParameter("auth_method", "password")
- .addParameter("next", "/")
- .post()
- .callback(callback)
- .build()
- .enqueue()
- }
-}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/DataLibrus.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/DataLibrus.kt
index 5d82191d..0702c203 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/DataLibrus.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/DataLibrus.kt
@@ -5,15 +5,14 @@
package pl.szczodrzynski.edziennik.data.api.edziennik.librus
import pl.szczodrzynski.edziennik.App
-import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_LIBRUS_API
-import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_LIBRUS_MESSAGES
-import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_LIBRUS_PORTAL
-import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_LIBRUS_SYNERGIA
import pl.szczodrzynski.edziennik.data.api.models.Data
import pl.szczodrzynski.edziennik.data.db.entity.LoginStore
import pl.szczodrzynski.edziennik.data.db.entity.Profile
+import pl.szczodrzynski.edziennik.data.db.enums.LoginMethod
import pl.szczodrzynski.edziennik.ext.currentTimeUnix
+import pl.szczodrzynski.edziennik.ext.getStudentData
import pl.szczodrzynski.edziennik.ext.isNotNullNorEmpty
+import pl.szczodrzynski.edziennik.ext.set
class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app, profile, loginStore) {
@@ -25,15 +24,15 @@ class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app
override fun satisfyLoginMethods() {
loginMethods.clear()
if (isPortalLoginValid())
- loginMethods += LOGIN_METHOD_LIBRUS_PORTAL
+ loginMethods += LoginMethod.LIBRUS_PORTAL
if (isApiLoginValid())
- loginMethods += LOGIN_METHOD_LIBRUS_API
+ loginMethods += LoginMethod.LIBRUS_API
if (isSynergiaLoginValid()) {
- loginMethods += LOGIN_METHOD_LIBRUS_SYNERGIA
+ loginMethods += LoginMethod.LIBRUS_SYNERGIA
app.cookieJar.set("synergia.librus.pl", "DZIENNIKSID", synergiaSessionId)
}
if (isMessagesLoginValid()) {
- loginMethods += LOGIN_METHOD_LIBRUS_MESSAGES
+ loginMethods += LoginMethod.LIBRUS_MESSAGES
app.cookieJar.set("wiadomosci.librus.pl", "DZIENNIKSID", messagesSessionId)
}
}
@@ -120,7 +119,7 @@ class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app
private var mApiLogin: String? = null
var apiLogin: String?
get() { mApiLogin = mApiLogin ?: profile?.getStudentData("accountLogin", null); return mApiLogin }
- set(value) { profile?.putStudentData("accountLogin", value); mApiLogin = value }
+ set(value) { profile["accountLogin"] = value; mApiLogin = value }
/**
* A Synergia password.
* Used: for login (API Login Method) in Synergia mode.
@@ -129,7 +128,7 @@ class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app
private var mApiPassword: String? = null
var apiPassword: String?
get() { mApiPassword = mApiPassword ?: profile?.getStudentData("accountPassword", null); return mApiPassword }
- set(value) { profile?.putStudentData("accountPassword", value); mApiPassword = value }
+ set(value) { profile["accountPassword"] = value; mApiPassword = value }
/**
* A JST login Code.
@@ -138,7 +137,7 @@ class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app
private var mApiCode: String? = null
var apiCode: String?
get() { mApiCode = mApiCode ?: loginStore.getLoginData("accountCode", null); return mApiCode }
- set(value) { profile?.putStudentData("accountCode", value); mApiCode = value }
+ set(value) { profile["accountCode"] = value; mApiCode = value }
/**
* A JST login PIN.
* Used only during first login in JST mode.
@@ -146,7 +145,7 @@ class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app
private var mApiPin: String? = null
var apiPin: String?
get() { mApiPin = mApiPin ?: loginStore.getLoginData("accountPin", null); return mApiPin }
- set(value) { profile?.putStudentData("accountPin", value); mApiPin = value }
+ set(value) { profile["accountPin"] = value; mApiPin = value }
/**
* A Synergia API access token.
@@ -157,7 +156,7 @@ class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app
private var mApiAccessToken: String? = null
var apiAccessToken: String?
get() { mApiAccessToken = mApiAccessToken ?: profile?.getStudentData("accountToken", null); return mApiAccessToken }
- set(value) { mApiAccessToken = value; profile?.putStudentData("accountToken", value) ?: return; }
+ set(value) { mApiAccessToken = value; profile["accountToken"] = value ?: return; }
/**
* A Synergia API refresh token.
* Used when refreshing the [apiAccessToken] in JST, Synergia modes.
@@ -165,7 +164,7 @@ class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app
private var mApiRefreshToken: String? = null
var apiRefreshToken: String?
get() { mApiRefreshToken = mApiRefreshToken ?: profile?.getStudentData("accountRefreshToken", null); return mApiRefreshToken }
- set(value) { mApiRefreshToken = value; profile?.putStudentData("accountRefreshToken", value) ?: return; }
+ set(value) { mApiRefreshToken = value; profile["accountRefreshToken"] = value ?: return; }
/**
* The expiry time for [apiAccessToken], as a UNIX timestamp.
* Used when refreshing the [apiAccessToken] in JST, Synergia modes.
@@ -174,7 +173,7 @@ class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app
private var mApiTokenExpiryTime: Long? = null
var apiTokenExpiryTime: Long
get() { mApiTokenExpiryTime = mApiTokenExpiryTime ?: profile?.getStudentData("accountTokenTime", 0L); return mApiTokenExpiryTime ?: 0L }
- set(value) { mApiTokenExpiryTime = value; profile?.putStudentData("accountTokenTime", value) ?: return; }
+ set(value) { mApiTokenExpiryTime = value; profile["accountTokenTime"] = value; }
/**
* A push device ID, generated by Librus when registering
@@ -184,7 +183,7 @@ class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app
private var mPushDeviceId: Int? = null
var pushDeviceId: Int
get() { mPushDeviceId = mPushDeviceId ?: profile?.getStudentData("pushDeviceId", 0); return mPushDeviceId ?: 0 }
- set(value) { mPushDeviceId = value; profile?.putStudentData("pushDeviceId", value) ?: return; }
+ set(value) { mPushDeviceId = value; profile["pushDeviceId"] = value; }
/* _____ _
/ ____| (_)
@@ -201,7 +200,7 @@ class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app
private var mSynergiaSessionId: String? = null
var synergiaSessionId: String?
get() { mSynergiaSessionId = mSynergiaSessionId ?: profile?.getStudentData("accountSID", null); return mSynergiaSessionId }
- set(value) { profile?.putStudentData("accountSID", value) ?: return; mSynergiaSessionId = value }
+ set(value) { profile["accountSID"] = value; mSynergiaSessionId = value }
/**
* The expiry time for [synergiaSessionId], as a UNIX timestamp.
* Used in endpoints with Synergia login method.
@@ -210,7 +209,7 @@ class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app
private var mSynergiaSessionIdExpiryTime: Long? = null
var synergiaSessionIdExpiryTime: Long
get() { mSynergiaSessionIdExpiryTime = mSynergiaSessionIdExpiryTime ?: profile?.getStudentData("accountSIDTime", 0L); return mSynergiaSessionIdExpiryTime ?: 0L }
- set(value) { profile?.putStudentData("accountSIDTime", value) ?: return; mSynergiaSessionIdExpiryTime = value }
+ set(value) { profile["accountSIDTime"] = value; mSynergiaSessionIdExpiryTime = value }
/**
@@ -220,7 +219,7 @@ class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app
private var mMessagesSessionId: String? = null
var messagesSessionId: String?
get() { mMessagesSessionId = mMessagesSessionId ?: profile?.getStudentData("messagesSID", null); return mMessagesSessionId }
- set(value) { profile?.putStudentData("messagesSID", value) ?: return; mMessagesSessionId = value }
+ set(value) { profile["messagesSID"] = value; mMessagesSessionId = value }
/**
* The expiry time for [messagesSessionId], as a UNIX timestamp.
* Used in endpoints with Messages login method.
@@ -229,7 +228,7 @@ class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app
private var mMessagesSessionIdExpiryTime: Long? = null
var messagesSessionIdExpiryTime: Long
get() { mMessagesSessionIdExpiryTime = mMessagesSessionIdExpiryTime ?: profile?.getStudentData("messagesSIDTime", 0L); return mMessagesSessionIdExpiryTime ?: 0L }
- set(value) { profile?.putStudentData("messagesSIDTime", value) ?: return; mMessagesSessionIdExpiryTime = value }
+ set(value) { profile["messagesSIDTime"] = value; mMessagesSessionIdExpiryTime = value }
/* ____ _ _
/ __ \| | | |
@@ -239,42 +238,42 @@ class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app
\____/ \__|_| |_|\___|*/
var isPremium
get() = profile?.getStudentData("isPremium", false) ?: false
- set(value) { profile?.putStudentData("isPremium", value) }
+ set(value) { profile["isPremium"] = value }
private var mSchoolName: String? = null
var schoolName: String?
get() { mSchoolName = mSchoolName ?: profile?.getStudentData("schoolName", null); return mSchoolName }
- set(value) { profile?.putStudentData("schoolName", value) ?: return; mSchoolName = value }
+ set(value) { profile["schoolName"] = value; mSchoolName = value }
private var mUnitId: Long? = null
var unitId: Long
get() { mUnitId = mUnitId ?: profile?.getStudentData("unitId", 0L); return mUnitId ?: 0L }
- set(value) { profile?.putStudentData("unitId", value) ?: return; mUnitId = value }
+ set(value) { profile["unitId"] = value; mUnitId = value }
private var mStartPointsSemester1: Int? = null
var startPointsSemester1: Int
get() { mStartPointsSemester1 = mStartPointsSemester1 ?: profile?.getStudentData("startPointsSemester1", 0); return mStartPointsSemester1 ?: 0 }
- set(value) { profile?.putStudentData("startPointsSemester1", value) ?: return; mStartPointsSemester1 = value }
+ set(value) { profile["startPointsSemester1"] = value; mStartPointsSemester1 = value }
private var mStartPointsSemester2: Int? = null
var startPointsSemester2: Int
get() { mStartPointsSemester2 = mStartPointsSemester2 ?: profile?.getStudentData("startPointsSemester2", 0); return mStartPointsSemester2 ?: 0 }
- set(value) { profile?.putStudentData("startPointsSemester2", value) ?: return; mStartPointsSemester2 = value }
+ set(value) { profile["startPointsSemester2"] = value; mStartPointsSemester2 = value }
private var mEnablePointGrades: Boolean? = null
var enablePointGrades: Boolean
get() { mEnablePointGrades = mEnablePointGrades ?: profile?.getStudentData("enablePointGrades", true); return mEnablePointGrades ?: true }
- set(value) { profile?.putStudentData("enablePointGrades", value) ?: return; mEnablePointGrades = value }
+ set(value) { profile["enablePointGrades"] = value; mEnablePointGrades = value }
private var mEnableDescriptiveGrades: Boolean? = null
var enableDescriptiveGrades: Boolean
get() { mEnableDescriptiveGrades = mEnableDescriptiveGrades ?: profile?.getStudentData("enableDescriptiveGrades", true); return mEnableDescriptiveGrades ?: true }
- set(value) { profile?.putStudentData("enableDescriptiveGrades", value) ?: return; mEnableDescriptiveGrades = value }
+ set(value) { profile["enableDescriptiveGrades"] = value; mEnableDescriptiveGrades = value }
private var mTimetableNotPublic: Boolean? = null
var timetableNotPublic: Boolean
get() { mTimetableNotPublic = mTimetableNotPublic ?: profile?.getStudentData("timetableNotPublic", false); return mTimetableNotPublic ?: false }
- set(value) { profile?.putStudentData("timetableNotPublic", value) ?: return; mTimetableNotPublic = value }
+ set(value) { profile["timetableNotPublic"] = value; mTimetableNotPublic = value }
/**
* Set to false when Recaptcha helper doesn't provide a working token.
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/Librus.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/Librus.kt
index abf3ac5f..5b29b9fe 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/Librus.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/Librus.kt
@@ -16,6 +16,7 @@ import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.messages.Librus
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.synergia.*
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.firstlogin.LibrusFirstLogin
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.login.LibrusLogin
+import pl.szczodrzynski.edziennik.data.api.events.UserActionRequiredEvent
import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikCallback
import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface
import pl.szczodrzynski.edziennik.data.api.models.ApiError
@@ -23,6 +24,8 @@ import pl.szczodrzynski.edziennik.data.db.entity.LoginStore
import pl.szczodrzynski.edziennik.data.db.entity.Message
import pl.szczodrzynski.edziennik.data.db.entity.Profile
import pl.szczodrzynski.edziennik.data.db.entity.Teacher
+import pl.szczodrzynski.edziennik.data.db.enums.FeatureType
+import pl.szczodrzynski.edziennik.data.db.enums.LoginMethod
import pl.szczodrzynski.edziennik.data.db.full.AnnouncementFull
import pl.szczodrzynski.edziennik.data.db.full.EventFull
import pl.szczodrzynski.edziennik.data.db.full.MessageFull
@@ -57,19 +60,19 @@ class Librus(val app: App, val profile: Profile?, val loginStore: LoginStore, va
|_| |_| |_|\___| /_/ \_\_|\__, |\___/|_| |_|\__|_| |_|_| |_| |_|
__/ |
|__*/
- override fun sync(featureIds: List, viewId: Int?, onlyEndpoints: List?, arguments: JsonObject?) {
+ override fun sync(featureTypes: Set?, onlyEndpoints: Set?, arguments: JsonObject?) {
data.arguments = arguments
- data.prepare(librusLoginMethods, LibrusFeatures, featureIds, viewId, onlyEndpoints)
+ data.prepare(LibrusFeatures, featureTypes, onlyEndpoints)
login()
}
- private fun login(loginMethodId: Int? = null, afterLogin: (() -> Unit)? = null) {
- d(TAG, "Trying to login with ${data.targetLoginMethodIds}")
+ private fun login(loginMethod: LoginMethod? = null, afterLogin: (() -> Unit)? = null) {
+ d(TAG, "Trying to login with ${data.targetLoginMethods}")
if (internalErrorList.isNotEmpty()) {
d(TAG, " - Internal errors:")
internalErrorList.forEach { d(TAG, " - code $it") }
}
- loginMethodId?.let { data.prepareFor(librusLoginMethods, it) }
+ loginMethod?.let { data.prepareFor(it) }
afterLogin?.let { this.afterLogin = it }
LibrusLogin(data) {
data()
@@ -77,7 +80,7 @@ class Librus(val app: App, val profile: Profile?, val loginStore: LoginStore, va
}
private fun data() {
- d(TAG, "Endpoint IDs: ${data.targetEndpointIds}")
+ d(TAG, "Endpoint IDs: ${data.targetEndpoints}")
if (internalErrorList.isNotEmpty()) {
d(TAG, " - Internal errors:")
internalErrorList.forEach { d(TAG, " - code $it") }
@@ -88,14 +91,14 @@ class Librus(val app: App, val profile: Profile?, val loginStore: LoginStore, va
}
override fun getMessage(message: MessageFull) {
- login(LOGIN_METHOD_LIBRUS_MESSAGES) {
+ login(LoginMethod.LIBRUS_MESSAGES) {
if (data.messagesLoginSuccessful) LibrusMessagesGetMessage(data, message) { completed() }
else LibrusSynergiaGetMessage(data, message) { completed() }
}
}
- override fun sendMessage(recipients: List, subject: String, text: String) {
- login(LOGIN_METHOD_LIBRUS_MESSAGES) {
+ override fun sendMessage(recipients: Set, subject: String, text: String) {
+ login(LoginMethod.LIBRUS_MESSAGES) {
LibrusMessagesSendMessage(data, recipients, subject, text) {
completed()
}
@@ -103,7 +106,7 @@ class Librus(val app: App, val profile: Profile?, val loginStore: LoginStore, va
}
override fun markAllAnnouncementsAsRead() {
- login(LOGIN_METHOD_LIBRUS_SYNERGIA) {
+ login(LoginMethod.LIBRUS_SYNERGIA) {
LibrusSynergiaMarkAllAnnouncementsAsRead(data) {
completed()
}
@@ -111,7 +114,7 @@ class Librus(val app: App, val profile: Profile?, val loginStore: LoginStore, va
}
override fun getAnnouncement(announcement: AnnouncementFull) {
- login(LOGIN_METHOD_LIBRUS_API) {
+ login(LoginMethod.LIBRUS_API) {
LibrusApiAnnouncementMarkAsRead(data, announcement) {
completed()
}
@@ -121,13 +124,13 @@ class Librus(val app: App, val profile: Profile?, val loginStore: LoginStore, va
override fun getAttachment(owner: Any, attachmentId: Long, attachmentName: String) {
when (owner) {
is Message -> {
- login(LOGIN_METHOD_LIBRUS_SYNERGIA) {
+ login(LoginMethod.LIBRUS_SYNERGIA) {
if (data.messagesLoginSuccessful) LibrusMessagesGetAttachment(data, owner, attachmentId, attachmentName) { completed() }
LibrusSynergiaGetAttachment(data, owner, attachmentId, attachmentName) { completed() }
}
}
is EventFull -> {
- login(LOGIN_METHOD_LIBRUS_SYNERGIA) {
+ login(LoginMethod.LIBRUS_SYNERGIA) {
LibrusSynergiaHomeworkGetAttachment(data, owner, attachmentId, attachmentName) {
completed()
}
@@ -138,7 +141,7 @@ class Librus(val app: App, val profile: Profile?, val loginStore: LoginStore, va
}
override fun getRecipientList() {
- login(LOGIN_METHOD_LIBRUS_MESSAGES) {
+ login(LoginMethod.LIBRUS_MESSAGES) {
LibrusMessagesGetRecipientList(data) {
completed()
}
@@ -146,7 +149,7 @@ class Librus(val app: App, val profile: Profile?, val loginStore: LoginStore, va
}
override fun getEvent(eventFull: EventFull) {
- login(LOGIN_METHOD_LIBRUS_SYNERGIA) {
+ login(LoginMethod.LIBRUS_SYNERGIA) {
LibrusSynergiaGetHomework(data, eventFull) {
completed()
}
@@ -162,6 +165,7 @@ class Librus(val app: App, val profile: Profile?, val loginStore: LoginStore, va
private fun wrapCallback(callback: EdziennikCallback): EdziennikCallback {
return object : EdziennikCallback {
override fun onCompleted() { callback.onCompleted() }
+ override fun onRequiresUserAction(event: UserActionRequiredEvent) { callback.onRequiresUserAction(event) }
override fun onProgress(step: Float) { callback.onProgress(step) }
override fun onStartProgress(stringRes: Int) { callback.onStartProgress(stringRes) }
override fun onError(apiError: ApiError) {
@@ -173,27 +177,27 @@ class Librus(val app: App, val profile: Profile?, val loginStore: LoginStore, va
internalErrorList.add(apiError.errorCode)
when (apiError.errorCode) {
ERROR_LIBRUS_PORTAL_ACCESS_DENIED -> {
- data.loginMethods.remove(LOGIN_METHOD_LIBRUS_PORTAL)
- data.prepareFor(librusLoginMethods, LOGIN_METHOD_LIBRUS_PORTAL)
+ data.loginMethods.remove(LoginMethod.LIBRUS_PORTAL)
+ data.prepareFor(LoginMethod.LIBRUS_PORTAL)
data.portalTokenExpiryTime = 0
login()
}
ERROR_LIBRUS_API_ACCESS_DENIED,
ERROR_LIBRUS_API_TOKEN_EXPIRED -> {
- data.loginMethods.remove(LOGIN_METHOD_LIBRUS_API)
- data.prepareFor(librusLoginMethods, LOGIN_METHOD_LIBRUS_API)
+ data.loginMethods.remove(LoginMethod.LIBRUS_API)
+ data.prepareFor(LoginMethod.LIBRUS_API)
data.apiTokenExpiryTime = 0
login()
}
ERROR_LIBRUS_SYNERGIA_ACCESS_DENIED -> {
- data.loginMethods.remove(LOGIN_METHOD_LIBRUS_SYNERGIA)
- data.prepareFor(librusLoginMethods, LOGIN_METHOD_LIBRUS_SYNERGIA)
+ data.loginMethods.remove(LoginMethod.LIBRUS_SYNERGIA)
+ data.prepareFor(LoginMethod.LIBRUS_SYNERGIA)
data.synergiaSessionIdExpiryTime = 0
login()
}
ERROR_LIBRUS_MESSAGES_ACCESS_DENIED -> {
- data.loginMethods.remove(LOGIN_METHOD_LIBRUS_MESSAGES)
- data.prepareFor(librusLoginMethods, LOGIN_METHOD_LIBRUS_MESSAGES)
+ data.loginMethods.remove(LoginMethod.LIBRUS_MESSAGES)
+ data.prepareFor(LoginMethod.LIBRUS_MESSAGES)
data.messagesSessionIdExpiryTime = 0
login()
}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/LibrusFeatures.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/LibrusFeatures.kt
index c14a00df..eaa05b99 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/LibrusFeatures.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/LibrusFeatures.kt
@@ -4,8 +4,10 @@
package pl.szczodrzynski.edziennik.data.api.edziennik.librus
-import pl.szczodrzynski.edziennik.data.api.*
import pl.szczodrzynski.edziennik.data.api.models.Feature
+import pl.szczodrzynski.edziennik.data.db.enums.FeatureType
+import pl.szczodrzynski.edziennik.data.db.enums.LoginMethod
+import pl.szczodrzynski.edziennik.data.db.enums.LoginType
const val ENDPOINT_LIBRUS_API_ME = 1001
const val ENDPOINT_LIBRUS_API_SCHOOLS = 1002
@@ -58,14 +60,14 @@ const val ENDPOINT_LIBRUS_MESSAGES_TRASH = 3030
val LibrusFeatures = listOf(
- Feature(LOGIN_TYPE_LIBRUS, FEATURE_ALWAYS_NEEDED, listOf(
- ENDPOINT_LIBRUS_API_LESSONS to LOGIN_METHOD_LIBRUS_API
- ), listOf(LOGIN_METHOD_LIBRUS_API)),
+ Feature(LoginType.LIBRUS, FeatureType.ALWAYS_NEEDED, listOf(
+ ENDPOINT_LIBRUS_API_LESSONS to LoginMethod.LIBRUS_API
+ )),
// push config
- Feature(LOGIN_TYPE_LIBRUS, FEATURE_PUSH_CONFIG, listOf(
- ENDPOINT_LIBRUS_API_PUSH_CONFIG to LOGIN_METHOD_LIBRUS_API
- ), listOf(LOGIN_METHOD_LIBRUS_API)).withShouldSync { data ->
+ Feature(LoginType.LIBRUS, FeatureType.PUSH_CONFIG, listOf(
+ ENDPOINT_LIBRUS_API_PUSH_CONFIG to LoginMethod.LIBRUS_API
+ )).withShouldSync { data ->
(data as DataLibrus).isPremium && !data.app.config.sync.tokenLibrusList.contains(data.profileId)
},
@@ -76,72 +78,72 @@ val LibrusFeatures = listOf(
/**
* Timetable - using API.
*/
- Feature(LOGIN_TYPE_LIBRUS, FEATURE_TIMETABLE, listOf(
- ENDPOINT_LIBRUS_API_TIMETABLES to LOGIN_METHOD_LIBRUS_API,
- ENDPOINT_LIBRUS_API_SUBSTITUTIONS to LOGIN_METHOD_LIBRUS_API
- ), listOf(LOGIN_METHOD_LIBRUS_API)),
+ Feature(LoginType.LIBRUS, FeatureType.TIMETABLE, listOf(
+ ENDPOINT_LIBRUS_API_TIMETABLES to LoginMethod.LIBRUS_API,
+ ENDPOINT_LIBRUS_API_SUBSTITUTIONS to LoginMethod.LIBRUS_API
+ )),
/**
* Agenda - using API.
* Events, Parent-teacher meetings, free days (teacher/school/class).
*/
- Feature(LOGIN_TYPE_LIBRUS, FEATURE_AGENDA, listOf(
- ENDPOINT_LIBRUS_API_EVENTS to LOGIN_METHOD_LIBRUS_API,
- ENDPOINT_LIBRUS_API_EVENT_TYPES to LOGIN_METHOD_LIBRUS_API,
- ENDPOINT_LIBRUS_API_PT_MEETINGS to LOGIN_METHOD_LIBRUS_API,
- ENDPOINT_LIBRUS_API_TEACHER_FREE_DAY_TYPES to LOGIN_METHOD_LIBRUS_API,
- ENDPOINT_LIBRUS_API_TEACHER_FREE_DAYS to LOGIN_METHOD_LIBRUS_API,
- ENDPOINT_LIBRUS_API_SCHOOL_FREE_DAYS to LOGIN_METHOD_LIBRUS_API,
- ENDPOINT_LIBRUS_API_CLASS_FREE_DAYS to LOGIN_METHOD_LIBRUS_API
- ), listOf(LOGIN_METHOD_LIBRUS_API)),
+ Feature(LoginType.LIBRUS, FeatureType.AGENDA, listOf(
+ ENDPOINT_LIBRUS_API_EVENTS to LoginMethod.LIBRUS_API,
+ ENDPOINT_LIBRUS_API_EVENT_TYPES to LoginMethod.LIBRUS_API,
+ ENDPOINT_LIBRUS_API_PT_MEETINGS to LoginMethod.LIBRUS_API,
+ ENDPOINT_LIBRUS_API_TEACHER_FREE_DAY_TYPES to LoginMethod.LIBRUS_API,
+ ENDPOINT_LIBRUS_API_TEACHER_FREE_DAYS to LoginMethod.LIBRUS_API,
+ ENDPOINT_LIBRUS_API_SCHOOL_FREE_DAYS to LoginMethod.LIBRUS_API,
+ ENDPOINT_LIBRUS_API_CLASS_FREE_DAYS to LoginMethod.LIBRUS_API
+ )),
/**
* Grades - using API.
* All grades + categories.
*/
- Feature(LOGIN_TYPE_LIBRUS, FEATURE_GRADES, listOf(
- ENDPOINT_LIBRUS_API_NORMAL_GRADE_CATEGORIES to LOGIN_METHOD_LIBRUS_API,
- ENDPOINT_LIBRUS_API_POINT_GRADE_CATEGORIES to LOGIN_METHOD_LIBRUS_API,
- ENDPOINT_LIBRUS_API_DESCRIPTIVE_GRADE_CATEGORIES to LOGIN_METHOD_LIBRUS_API,
+ Feature(LoginType.LIBRUS, FeatureType.GRADES, listOf(
+ ENDPOINT_LIBRUS_API_NORMAL_GRADE_CATEGORIES to LoginMethod.LIBRUS_API,
+ ENDPOINT_LIBRUS_API_POINT_GRADE_CATEGORIES to LoginMethod.LIBRUS_API,
+ ENDPOINT_LIBRUS_API_DESCRIPTIVE_GRADE_CATEGORIES to LoginMethod.LIBRUS_API,
// Commented out, because TextGrades/Categories is the same as Grades/Categories
- /* ENDPOINT_LIBRUS_API_TEXT_GRADE_CATEGORIES to LOGIN_METHOD_LIBRUS_API, */
- ENDPOINT_LIBRUS_API_DESCRIPTIVE_TEXT_GRADE_CATEGORIES to LOGIN_METHOD_LIBRUS_API,
- ENDPOINT_LIBRUS_API_BEHAVIOUR_GRADE_CATEGORIES to LOGIN_METHOD_LIBRUS_API,
- ENDPOINT_LIBRUS_API_NORMAL_GRADE_COMMENTS to LOGIN_METHOD_LIBRUS_API,
- ENDPOINT_LIBRUS_API_BEHAVIOUR_GRADE_COMMENTS to LOGIN_METHOD_LIBRUS_API,
- ENDPOINT_LIBRUS_API_NORMAL_GRADES to LOGIN_METHOD_LIBRUS_API,
- ENDPOINT_LIBRUS_API_POINT_GRADES to LOGIN_METHOD_LIBRUS_API,
- ENDPOINT_LIBRUS_API_DESCRIPTIVE_GRADES to LOGIN_METHOD_LIBRUS_API,
- ENDPOINT_LIBRUS_API_TEXT_GRADES to LOGIN_METHOD_LIBRUS_API,
- ENDPOINT_LIBRUS_API_DESCRIPTIVE_TEXT_GRADES to LOGIN_METHOD_LIBRUS_API,
- ENDPOINT_LIBRUS_API_BEHAVIOUR_GRADES to LOGIN_METHOD_LIBRUS_API
- ), listOf(LOGIN_METHOD_LIBRUS_API)),
+ /* ENDPOINT_LIBRUS_API_TEXT_GRADE_CATEGORIES to LoginMethod.LIBRUS_API, */
+ ENDPOINT_LIBRUS_API_DESCRIPTIVE_TEXT_GRADE_CATEGORIES to LoginMethod.LIBRUS_API,
+ ENDPOINT_LIBRUS_API_BEHAVIOUR_GRADE_CATEGORIES to LoginMethod.LIBRUS_API,
+ ENDPOINT_LIBRUS_API_NORMAL_GRADE_COMMENTS to LoginMethod.LIBRUS_API,
+ ENDPOINT_LIBRUS_API_BEHAVIOUR_GRADE_COMMENTS to LoginMethod.LIBRUS_API,
+ ENDPOINT_LIBRUS_API_NORMAL_GRADES to LoginMethod.LIBRUS_API,
+ ENDPOINT_LIBRUS_API_POINT_GRADES to LoginMethod.LIBRUS_API,
+ ENDPOINT_LIBRUS_API_DESCRIPTIVE_GRADES to LoginMethod.LIBRUS_API,
+ ENDPOINT_LIBRUS_API_TEXT_GRADES to LoginMethod.LIBRUS_API,
+ ENDPOINT_LIBRUS_API_DESCRIPTIVE_TEXT_GRADES to LoginMethod.LIBRUS_API,
+ ENDPOINT_LIBRUS_API_BEHAVIOUR_GRADES to LoginMethod.LIBRUS_API
+ )),
/**
* Homework - using API.
* Sync only if account has premium access.
*/
- /*Feature(LOGIN_TYPE_LIBRUS, FEATURE_HOMEWORK, listOf(
- ENDPOINT_LIBRUS_API_HOMEWORK to LOGIN_METHOD_LIBRUS_API
- ), listOf(LOGIN_METHOD_LIBRUS_API)).withShouldSync { data ->
+ /*Feature(LoginType.LIBRUS, FeatureType.HOMEWORK, listOf(
+ ENDPOINT_LIBRUS_API_HOMEWORK to LoginMethod.LIBRUS_API
+ )).withShouldSync { data ->
(data as DataLibrus).isPremium
},*/
/**
* Behaviour - using API.
*/
- Feature(LOGIN_TYPE_LIBRUS, FEATURE_BEHAVIOUR, listOf(
- ENDPOINT_LIBRUS_API_NOTICES to LOGIN_METHOD_LIBRUS_API
- ), listOf(LOGIN_METHOD_LIBRUS_API)),
+ Feature(LoginType.LIBRUS, FeatureType.BEHAVIOUR, listOf(
+ ENDPOINT_LIBRUS_API_NOTICES to LoginMethod.LIBRUS_API
+ )),
/**
* Attendance - using API.
*/
- Feature(LOGIN_TYPE_LIBRUS, FEATURE_ATTENDANCE, listOf(
- ENDPOINT_LIBRUS_API_ATTENDANCE_TYPES to LOGIN_METHOD_LIBRUS_API,
- ENDPOINT_LIBRUS_API_ATTENDANCES to LOGIN_METHOD_LIBRUS_API
- ), listOf(LOGIN_METHOD_LIBRUS_API)),
+ Feature(LoginType.LIBRUS, FeatureType.ATTENDANCE, listOf(
+ ENDPOINT_LIBRUS_API_ATTENDANCE_TYPES to LoginMethod.LIBRUS_API,
+ ENDPOINT_LIBRUS_API_ATTENDANCES to LoginMethod.LIBRUS_API
+ )),
/**
* Announcements - using API.
*/
- Feature(LOGIN_TYPE_LIBRUS, FEATURE_ANNOUNCEMENTS, listOf(
- ENDPOINT_LIBRUS_API_ANNOUNCEMENTS to LOGIN_METHOD_LIBRUS_API
- ), listOf(LOGIN_METHOD_LIBRUS_API)),
+ Feature(LoginType.LIBRUS, FeatureType.ANNOUNCEMENTS, listOf(
+ ENDPOINT_LIBRUS_API_ANNOUNCEMENTS to LoginMethod.LIBRUS_API
+ )),
@@ -150,99 +152,99 @@ val LibrusFeatures = listOf(
/**
* Student info - using API.
*/
- Feature(LOGIN_TYPE_LIBRUS, FEATURE_STUDENT_INFO, listOf(
- ENDPOINT_LIBRUS_API_ME to LOGIN_METHOD_LIBRUS_API
- ), listOf(LOGIN_METHOD_LIBRUS_API)),
+ Feature(LoginType.LIBRUS, FeatureType.STUDENT_INFO, listOf(
+ ENDPOINT_LIBRUS_API_ME to LoginMethod.LIBRUS_API
+ )),
/**
* School info - using API.
*/
- Feature(LOGIN_TYPE_LIBRUS, FEATURE_SCHOOL_INFO, listOf(
- ENDPOINT_LIBRUS_API_SCHOOLS to LOGIN_METHOD_LIBRUS_API,
- ENDPOINT_LIBRUS_API_UNITS to LOGIN_METHOD_LIBRUS_API
- ), listOf(LOGIN_METHOD_LIBRUS_API)),
+ Feature(LoginType.LIBRUS, FeatureType.SCHOOL_INFO, listOf(
+ ENDPOINT_LIBRUS_API_SCHOOLS to LoginMethod.LIBRUS_API,
+ ENDPOINT_LIBRUS_API_UNITS to LoginMethod.LIBRUS_API
+ )),
/**
* Class info - using API.
*/
- Feature(LOGIN_TYPE_LIBRUS, FEATURE_CLASS_INFO, listOf(
- ENDPOINT_LIBRUS_API_CLASSES to LOGIN_METHOD_LIBRUS_API
- ), listOf(LOGIN_METHOD_LIBRUS_API)),
+ Feature(LoginType.LIBRUS, FeatureType.CLASS_INFO, listOf(
+ ENDPOINT_LIBRUS_API_CLASSES to LoginMethod.LIBRUS_API
+ )),
/**
* Team info - using API.
*/
- Feature(LOGIN_TYPE_LIBRUS, FEATURE_TEAM_INFO, listOf(
- ENDPOINT_LIBRUS_API_VIRTUAL_CLASSES to LOGIN_METHOD_LIBRUS_API
- ), listOf(LOGIN_METHOD_LIBRUS_API)),
+ Feature(LoginType.LIBRUS, FeatureType.TEAM_INFO, listOf(
+ ENDPOINT_LIBRUS_API_VIRTUAL_CLASSES to LoginMethod.LIBRUS_API
+ )),
/**
* Lucky number - using API.
*/
- Feature(LOGIN_TYPE_LIBRUS, FEATURE_LUCKY_NUMBER, listOf(
- ENDPOINT_LIBRUS_API_LUCKY_NUMBER to LOGIN_METHOD_LIBRUS_API
- ), listOf(LOGIN_METHOD_LIBRUS_API)).withShouldSync { data -> data.shouldSyncLuckyNumber() },
+ Feature(LoginType.LIBRUS, FeatureType.LUCKY_NUMBER, listOf(
+ ENDPOINT_LIBRUS_API_LUCKY_NUMBER to LoginMethod.LIBRUS_API
+ )).withShouldSync { data -> data.shouldSyncLuckyNumber() },
/**
* Teacher list - using API.
*/
- Feature(LOGIN_TYPE_LIBRUS, FEATURE_TEACHERS, listOf(
- ENDPOINT_LIBRUS_API_USERS to LOGIN_METHOD_LIBRUS_API
- ), listOf(LOGIN_METHOD_LIBRUS_API)),
+ Feature(LoginType.LIBRUS, FeatureType.TEACHERS, listOf(
+ ENDPOINT_LIBRUS_API_USERS to LoginMethod.LIBRUS_API
+ )),
/**
* Subject list - using API.
*/
- Feature(LOGIN_TYPE_LIBRUS, FEATURE_SUBJECTS, listOf(
- ENDPOINT_LIBRUS_API_SUBJECTS to LOGIN_METHOD_LIBRUS_API
- ), listOf(LOGIN_METHOD_LIBRUS_API)),
+ Feature(LoginType.LIBRUS, FeatureType.SUBJECTS, listOf(
+ ENDPOINT_LIBRUS_API_SUBJECTS to LoginMethod.LIBRUS_API
+ )),
/**
* Classroom list - using API.
*/
- Feature(LOGIN_TYPE_LIBRUS, FEATURE_CLASSROOMS, listOf(
- ENDPOINT_LIBRUS_API_CLASSROOMS to LOGIN_METHOD_LIBRUS_API
- ), listOf(LOGIN_METHOD_LIBRUS_API)),
+ Feature(LoginType.LIBRUS, FeatureType.CLASSROOMS, listOf(
+ ENDPOINT_LIBRUS_API_CLASSROOMS to LoginMethod.LIBRUS_API
+ )),
/**
* Student info - using synergia scrapper.
*/
- Feature(LOGIN_TYPE_LIBRUS, FEATURE_STUDENT_INFO, listOf(
- ENDPOINT_LIBRUS_SYNERGIA_INFO to LOGIN_METHOD_LIBRUS_SYNERGIA
- ), listOf(LOGIN_METHOD_LIBRUS_SYNERGIA)),
+ Feature(LoginType.LIBRUS, FeatureType.STUDENT_INFO, listOf(
+ ENDPOINT_LIBRUS_SYNERGIA_INFO to LoginMethod.LIBRUS_SYNERGIA
+ )),
/**
* Student number - using synergia scrapper.
*/
- Feature(LOGIN_TYPE_LIBRUS, FEATURE_STUDENT_NUMBER, listOf(
- ENDPOINT_LIBRUS_SYNERGIA_INFO to LOGIN_METHOD_LIBRUS_SYNERGIA
- ), listOf(LOGIN_METHOD_LIBRUS_SYNERGIA)),
+ Feature(LoginType.LIBRUS, FeatureType.STUDENT_NUMBER, listOf(
+ ENDPOINT_LIBRUS_SYNERGIA_INFO to LoginMethod.LIBRUS_SYNERGIA
+ )),
/**
* Grades - using API + synergia scrapper.
*/
- /*Feature(LOGIN_TYPE_LIBRUS, FEATURE_GRADES, listOf(
- ENDPOINT_LIBRUS_API_NORMAL_GC to LOGIN_METHOD_LIBRUS_API,
- ENDPOINT_LIBRUS_API_NORMAL_GRADES to LOGIN_METHOD_LIBRUS_API,
- ENDPOINT_LIBRUS_SYNERGIA_GRADES to LOGIN_METHOD_LIBRUS_SYNERGIA
- ), listOf(LOGIN_METHOD_LIBRUS_API, LOGIN_METHOD_LIBRUS_SYNERGIA)),*/
- /*Endpoint(LOGIN_TYPE_LIBRUS, FEATURE_GRADES, listOf(
- ENDPOINT_LIBRUS_SYNERGIA_GRADES to LOGIN_METHOD_LIBRUS_SYNERGIA
- ), listOf(LOGIN_METHOD_LIBRUS_SYNERGIA)),*/
+ /*Feature(LoginType.LIBRUS, FeatureType.GRADES, listOf(
+ ENDPOINT_LIBRUS_API_NORMAL_GC to LoginMethod.LIBRUS_API,
+ ENDPOINT_LIBRUS_API_NORMAL_GRADES to LoginMethod.LIBRUS_API,
+ ENDPOINT_LIBRUS_SYNERGIA_GRADES to LoginMethod.LIBRUS_SYNERGIA
+ )),*/
+ /*Endpoint(LoginType.LIBRUS, FeatureType.GRADES, listOf(
+ ENDPOINT_LIBRUS_SYNERGIA_GRADES to LoginMethod.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 ->
+ Feature(LoginType.LIBRUS, FeatureType.HOMEWORK, listOf(
+ ENDPOINT_LIBRUS_SYNERGIA_HOMEWORK to LoginMethod.LIBRUS_SYNERGIA
+ ))/*.withShouldSync { data ->
!(data as DataLibrus).isPremium
}*/,
/**
* Messages inbox - using messages website.
*/
- Feature(LOGIN_TYPE_LIBRUS, FEATURE_MESSAGES_INBOX, listOf(
- ENDPOINT_LIBRUS_MESSAGES_RECEIVED to LOGIN_METHOD_LIBRUS_MESSAGES
- ), listOf(LOGIN_METHOD_LIBRUS_MESSAGES)),
+ Feature(LoginType.LIBRUS, FeatureType.MESSAGES_INBOX, listOf(
+ ENDPOINT_LIBRUS_MESSAGES_RECEIVED to LoginMethod.LIBRUS_MESSAGES
+ )),
/**
* Messages sent - using messages website.
*/
- Feature(LOGIN_TYPE_LIBRUS, FEATURE_MESSAGES_SENT, listOf(
- ENDPOINT_LIBRUS_MESSAGES_SENT to LOGIN_METHOD_LIBRUS_MESSAGES
- ), listOf(LOGIN_METHOD_LIBRUS_MESSAGES))
+ Feature(LoginType.LIBRUS, FeatureType.MESSAGES_SENT, listOf(
+ ENDPOINT_LIBRUS_MESSAGES_SENT to LoginMethod.LIBRUS_MESSAGES
+ ))
)
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/LibrusData.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/LibrusData.kt
index 877d803b..a5d9256e 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/LibrusData.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/LibrusData.kt
@@ -24,7 +24,7 @@ class LibrusData(val data: DataLibrus, val onSuccess: () -> Unit) {
}
private fun nextEndpoint(onSuccess: () -> Unit) {
- if (data.targetEndpointIds.isEmpty()) {
+ if (data.targetEndpoints.isEmpty()) {
onSuccess()
return
}
@@ -32,8 +32,8 @@ class LibrusData(val data: DataLibrus, val onSuccess: () -> Unit) {
onSuccess()
return
}
- val id = data.targetEndpointIds.firstKey()
- val lastSync = data.targetEndpointIds.remove(id)
+ val id = data.targetEndpoints.firstKey()
+ val lastSync = data.targetEndpoints.remove(id)
useEndpoint(id, lastSync) { endpointId ->
data.progress(data.progressStep)
nextEndpoint(onSuccess)
@@ -182,10 +182,6 @@ class LibrusData(val data: DataLibrus, val onSuccess: () -> Unit) {
data.startProgress(R.string.edziennik_progress_endpoint_pt_meetings)
LibrusApiPtMeetings(data, lastSync, onSuccess)
}
- ENDPOINT_LIBRUS_API_TEACHER_FREE_DAY_TYPES -> {
- data.startProgress(R.string.edziennik_progress_endpoint_teacher_free_day_types)
- LibrusApiTeacherFreeDayTypes(data, lastSync, onSuccess)
- }
ENDPOINT_LIBRUS_API_TEACHER_FREE_DAYS -> {
data.startProgress(R.string.edziennik_progress_endpoint_teacher_free_days)
LibrusApiTeacherFreeDays(data, lastSync, onSuccess)
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiAnnouncementMarkAsRead.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiAnnouncementMarkAsRead.kt
index 23cfceb4..8f45f9df 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiAnnouncementMarkAsRead.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiAnnouncementMarkAsRead.kt
@@ -12,6 +12,7 @@ import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
import pl.szczodrzynski.edziennik.data.api.events.AnnouncementGetEvent
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
+import pl.szczodrzynski.edziennik.data.db.enums.MetadataType
import pl.szczodrzynski.edziennik.data.db.full.AnnouncementFull
class LibrusApiAnnouncementMarkAsRead(override val data: DataLibrus,
@@ -34,7 +35,7 @@ class LibrusApiAnnouncementMarkAsRead(override val data: DataLibrus,
data.setSeenMetadataList.add(Metadata(
profileId,
- Metadata.TYPE_ANNOUNCEMENT,
+ MetadataType.ANNOUNCEMENT,
announcement.id,
announcement.seen,
announcement.notified
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiAnnouncements.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiAnnouncements.kt
index fcf68cad..ad7c0df8 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiAnnouncements.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiAnnouncements.kt
@@ -11,6 +11,7 @@ import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
import pl.szczodrzynski.edziennik.data.db.entity.Announcement
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
+import pl.szczodrzynski.edziennik.data.db.enums.MetadataType
import pl.szczodrzynski.edziennik.ext.*
import pl.szczodrzynski.edziennik.utils.models.Date
@@ -54,7 +55,7 @@ class LibrusApiAnnouncements(override val data: DataLibrus,
data.announcementList.add(announcementObject)
data.setSeenMetadataList.add(Metadata(
profileId,
- Metadata.TYPE_ANNOUNCEMENT,
+ MetadataType.ANNOUNCEMENT,
id,
read,
profile.empty || read
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiAttendances.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiAttendances.kt
index 314a0716..b9bb6152 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiAttendances.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiAttendances.kt
@@ -12,6 +12,7 @@ import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
import pl.szczodrzynski.edziennik.data.db.entity.Attendance
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
+import pl.szczodrzynski.edziennik.data.db.enums.MetadataType
import pl.szczodrzynski.edziennik.ext.*
import pl.szczodrzynski.edziennik.utils.models.Date
@@ -76,7 +77,7 @@ class LibrusApiAttendances(override val data: DataLibrus,
if(type?.baseType != Attendance.TYPE_PRESENT) {
data.metadataList.add(Metadata(
profileId,
- Metadata.TYPE_ATTENDANCE,
+ MetadataType.ATTENDANCE,
id,
profile?.empty ?: false || type?.baseType == Attendance.TYPE_PRESENT_CUSTOM || type?.baseType == Attendance.TYPE_UNKNOWN,
profile?.empty ?: false || type?.baseType == Attendance.TYPE_PRESENT_CUSTOM || type?.baseType == Attendance.TYPE_UNKNOWN
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiBehaviourGrades.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiBehaviourGrades.kt
index 7a528407..9d9e3015 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiBehaviourGrades.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiBehaviourGrades.kt
@@ -14,6 +14,7 @@ import pl.szczodrzynski.edziennik.data.db.entity.Grade.Companion.TYPE_POINT_SUM
import pl.szczodrzynski.edziennik.data.db.entity.GradeCategory
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
+import pl.szczodrzynski.edziennik.data.db.enums.MetadataType
import pl.szczodrzynski.edziennik.ext.*
import pl.szczodrzynski.edziennik.utils.models.Date
import java.text.DecimalFormat
@@ -63,7 +64,7 @@ class LibrusApiBehaviourGrades(override val data: DataLibrus,
data.gradeList.add(semester1StartGradeObject)
data.metadataList.add(Metadata(
profileId,
- Metadata.TYPE_GRADE,
+ MetadataType.GRADE,
semester1StartGradeObject.id,
true,
true
@@ -91,7 +92,7 @@ class LibrusApiBehaviourGrades(override val data: DataLibrus,
data.gradeList.add(semester2StartGradeObject)
data.metadataList.add(Metadata(
profileId,
- Metadata.TYPE_GRADE,
+ MetadataType.GRADE,
semester2StartGradeObject.id,
true,
true
@@ -165,7 +166,7 @@ class LibrusApiBehaviourGrades(override val data: DataLibrus,
data.gradeList.add(gradeObject)
data.metadataList.add(Metadata(
profileId,
- Metadata.TYPE_GRADE,
+ MetadataType.GRADE,
id,
profile.empty,
profile.empty
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiDescriptiveGrades.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiDescriptiveGrades.kt
index 9b214d04..d77d1bf4 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiDescriptiveGrades.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiDescriptiveGrades.kt
@@ -15,6 +15,7 @@ import pl.szczodrzynski.edziennik.data.db.entity.Grade.Companion.TYPE_TEXT
import pl.szczodrzynski.edziennik.data.db.entity.GradeCategory
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
+import pl.szczodrzynski.edziennik.data.db.enums.MetadataType
import pl.szczodrzynski.edziennik.ext.*
import pl.szczodrzynski.edziennik.utils.models.Date
@@ -73,7 +74,7 @@ class LibrusApiDescriptiveGrades(override val data: DataLibrus,
data.gradeList.add(gradeObject)
data.metadataList.add(Metadata(
profileId,
- Metadata.TYPE_GRADE,
+ MetadataType.GRADE,
id,
profile.empty,
profile.empty
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiEvents.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiEvents.kt
index 82a0e267..79722a8b 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiEvents.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiEvents.kt
@@ -13,6 +13,7 @@ import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel
import pl.szczodrzynski.edziennik.data.db.entity.Event
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
+import pl.szczodrzynski.edziennik.data.db.enums.MetadataType
import pl.szczodrzynski.edziennik.ext.*
import pl.szczodrzynski.edziennik.utils.models.Date
import pl.szczodrzynski.edziennik.utils.models.Time
@@ -71,7 +72,7 @@ class LibrusApiEvents(override val data: DataLibrus,
data.metadataList.add(
Metadata(
profileId,
- Metadata.TYPE_EVENT,
+ MetadataType.EVENT,
id,
profile?.empty ?: false,
profile?.empty ?: false
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiGradeComments.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiGradeComments.kt
index 96225b67..0e9ea16c 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiGradeComments.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiGradeComments.kt
@@ -4,7 +4,6 @@
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
-import pl.szczodrzynski.edziennik.*
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_NORMAL_GRADE_COMMENTS
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiGrades.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiGrades.kt
index 58621a0e..7c2d60f3 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiGrades.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiGrades.kt
@@ -16,6 +16,7 @@ import pl.szczodrzynski.edziennik.data.db.entity.Grade.Companion.TYPE_YEAR_PROPO
import pl.szczodrzynski.edziennik.data.db.entity.GradeCategory
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
+import pl.szczodrzynski.edziennik.data.db.enums.MetadataType
import pl.szczodrzynski.edziennik.ext.*
import pl.szczodrzynski.edziennik.utils.Utils
import pl.szczodrzynski.edziennik.utils.models.Date
@@ -97,7 +98,7 @@ class LibrusApiGrades(override val data: DataLibrus,
data.metadataList.add(
Metadata(
profileId,
- Metadata.TYPE_GRADE,
+ MetadataType.GRADE,
id,
profile.empty,
profile.empty
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiHomework.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiHomework.kt
index f304aaad..1c7741ce 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiHomework.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiHomework.kt
@@ -12,6 +12,7 @@ import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel
import pl.szczodrzynski.edziennik.data.db.entity.Event
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
+import pl.szczodrzynski.edziennik.data.db.enums.MetadataType
import pl.szczodrzynski.edziennik.ext.*
import pl.szczodrzynski.edziennik.utils.models.Date
@@ -51,7 +52,7 @@ class LibrusApiHomework(override val data: DataLibrus,
data.eventList.add(eventObject)
data.metadataList.add(Metadata(
profileId,
- Metadata.TYPE_HOMEWORK,
+ MetadataType.HOMEWORK,
id,
profile?.empty ?: false,
profile?.empty ?: false
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiLessons.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiLessons.kt
index 66075008..72605991 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiLessons.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiLessons.kt
@@ -4,7 +4,6 @@
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
-import pl.szczodrzynski.edziennik.*
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_LESSONS
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiLuckyNumber.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiLuckyNumber.kt
index 6ebe9e63..f93a06a3 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiLuckyNumber.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiLuckyNumber.kt
@@ -9,6 +9,7 @@ import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
import pl.szczodrzynski.edziennik.data.db.entity.LuckyNumber
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
+import pl.szczodrzynski.edziennik.data.db.enums.MetadataType
import pl.szczodrzynski.edziennik.ext.*
import pl.szczodrzynski.edziennik.utils.models.Date
import pl.szczodrzynski.edziennik.utils.models.Time
@@ -47,7 +48,7 @@ class LibrusApiLuckyNumber(override val data: DataLibrus,
data.metadataList.add(
Metadata(
profileId,
- Metadata.TYPE_LUCKY_NUMBER,
+ MetadataType.LUCKY_NUMBER,
luckyNumberObject.date.value.toLong(),
true,
profile?.empty ?: false
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiNotices.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiNotices.kt
index ea61428e..83536977 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiNotices.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiNotices.kt
@@ -12,6 +12,7 @@ import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
import pl.szczodrzynski.edziennik.data.db.entity.Notice
import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
+import pl.szczodrzynski.edziennik.data.db.enums.MetadataType
import pl.szczodrzynski.edziennik.ext.*
import pl.szczodrzynski.edziennik.utils.models.Date
@@ -35,7 +36,7 @@ class LibrusApiNotices(override val data: DataLibrus,
val id = note.getLong("Id") ?: return@forEach
val text = note.getString("Text") ?: ""
val categoryId = note.getJsonObject("Category")?.getLong("Id") ?: -1
- val teacherId = note.getJsonObject("AddedBy")?.getLong("Id") ?: -1
+ val teacherId = note.getJsonObject("Teacher")?.getLong("Id") ?: -1
val addedDate = note.getString("Date")?.let { Date.fromY_m_d(it) } ?: return@forEach
val type = when (note.getInt("Positive")) {
@@ -62,7 +63,7 @@ class LibrusApiNotices(override val data: DataLibrus,
data.metadataList.add(
Metadata(
profileId,
- Metadata.TYPE_NOTICE,
+ MetadataType.NOTICE,
id,
profile?.empty ?: false,
profile?.empty ?: false
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiPointGrades.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiPointGrades.kt
index 8a7ad29f..ee9fdfdf 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiPointGrades.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiPointGrades.kt
@@ -14,6 +14,7 @@ import pl.szczodrzynski.edziennik.data.db.entity.Grade.Companion.TYPE_POINT_AVG
import pl.szczodrzynski.edziennik.data.db.entity.GradeCategory
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
+import pl.szczodrzynski.edziennik.data.db.enums.MetadataType
import pl.szczodrzynski.edziennik.ext.*
import pl.szczodrzynski.edziennik.utils.models.Date
@@ -66,7 +67,7 @@ class LibrusApiPointGrades(override val data: DataLibrus,
data.gradeList.add(gradeObject)
data.metadataList.add(Metadata(
profileId,
- Metadata.TYPE_GRADE,
+ MetadataType.GRADE,
id,
profile.empty,
profile.empty
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiPtMeetings.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiPtMeetings.kt
index 170c6135..35818ac0 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiPtMeetings.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiPtMeetings.kt
@@ -11,6 +11,7 @@ import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel
import pl.szczodrzynski.edziennik.data.db.entity.Event
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
+import pl.szczodrzynski.edziennik.data.db.enums.MetadataType
import pl.szczodrzynski.edziennik.ext.*
import pl.szczodrzynski.edziennik.utils.models.Date
import pl.szczodrzynski.edziennik.utils.models.Time
@@ -56,7 +57,7 @@ class LibrusApiPtMeetings(override val data: DataLibrus,
data.metadataList.add(
Metadata(
profileId,
- Metadata.TYPE_EVENT,
+ MetadataType.EVENT,
id,
profile?.empty ?: false,
profile?.empty ?: false
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiSchools.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiSchools.kt
index e42ab949..c5581e4d 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiSchools.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiSchools.kt
@@ -4,14 +4,12 @@
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
-import pl.szczodrzynski.edziennik.*
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_SCHOOLS
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
import pl.szczodrzynski.edziennik.data.db.entity.LessonRange
import pl.szczodrzynski.edziennik.ext.*
import pl.szczodrzynski.edziennik.utils.models.Time
-import java.util.*
class LibrusApiSchools(override val data: DataLibrus,
override val lastSync: Long?,
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiSubjects.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiSubjects.kt
index 17e30559..b615d379 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiSubjects.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiSubjects.kt
@@ -4,7 +4,6 @@
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
-import pl.szczodrzynski.edziennik.*
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_SUBJECTS
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTeacherFreeDayTypes.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTeacherFreeDayTypes.kt
deleted file mode 100644
index c87e71d8..00000000
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTeacherFreeDayTypes.kt
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) Kacper Ziubryniewicz 2019-10-19
- */
-
-package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
-
-import pl.szczodrzynski.edziennik.*
-import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
-import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_TEACHER_FREE_DAY_TYPES
-import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
-import pl.szczodrzynski.edziennik.data.db.entity.TeacherAbsenceType
-import pl.szczodrzynski.edziennik.ext.*
-
-class LibrusApiTeacherFreeDayTypes(override val data: DataLibrus,
- override val lastSync: Long?,
- val onSuccess: (endpointId: Int) -> Unit
-) : LibrusApi(data, lastSync) {
- companion object {
- const val TAG = "LibrusApiTeacherFreeDayTypes"
- }
-
- init {
- apiGet(TAG, "TeacherFreeDays/Types") { json ->
- val teacherAbsenceTypes = json.getJsonArray("Types")?.asJsonObjectList()
-
- teacherAbsenceTypes?.forEach { teacherAbsenceType ->
- val id = teacherAbsenceType.getLong("Id") ?: return@forEach
- val name = teacherAbsenceType.getString("Name") ?: return@forEach
-
- val teacherAbsenceTypeObject = TeacherAbsenceType(
- profileId,
- id,
- name
- )
-
- data.teacherAbsenceTypes.put(id, teacherAbsenceTypeObject)
- }
-
- data.setSyncNext(ENDPOINT_LIBRUS_API_TEACHER_FREE_DAY_TYPES, 7 * DAY)
- onSuccess(ENDPOINT_LIBRUS_API_TEACHER_FREE_DAY_TYPES)
- }
- }
-}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTeacherFreeDays.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTeacherFreeDays.kt
index 54a3fb36..68053aeb 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTeacherFreeDays.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTeacherFreeDays.kt
@@ -5,13 +5,13 @@
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
import androidx.core.util.isEmpty
-import pl.szczodrzynski.edziennik.*
-import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_AGENDA
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_TEACHER_FREE_DAYS
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
import pl.szczodrzynski.edziennik.data.db.entity.TeacherAbsence
+import pl.szczodrzynski.edziennik.data.db.enums.FeatureType
+import pl.szczodrzynski.edziennik.data.db.enums.MetadataType
import pl.szczodrzynski.edziennik.ext.*
import pl.szczodrzynski.edziennik.utils.models.Date
import pl.szczodrzynski.edziennik.utils.models.Time
@@ -36,8 +36,6 @@ class LibrusApiTeacherFreeDays(override val data: DataLibrus,
val id = teacherAbsence.getLong("Id") ?: return@forEach
val teacherId = teacherAbsence.getJsonObject("Teacher")?.getLong("Id")
?: return@forEach
- val type = teacherAbsence.getJsonObject("Type").getLong("Id") ?: return@forEach
- val name = data.teacherAbsenceTypes.singleOrNull { it.id == type }?.name
val dateFrom = Date.fromY_m_d(teacherAbsence.getString("DateFrom"))
val dateTo = Date.fromY_m_d(teacherAbsence.getString("DateTo"))
val timeFrom = teacherAbsence.getString("TimeFrom")?.let { Time.fromH_m_s(it) }
@@ -46,8 +44,8 @@ class LibrusApiTeacherFreeDays(override val data: DataLibrus,
val teacherAbsenceObject = TeacherAbsence(
profileId = profileId,
id = id,
- type = type,
- name = name,
+ type = -1L,
+ name = null,
dateFrom = dateFrom,
dateTo = dateTo,
timeFrom = timeFrom,
@@ -58,14 +56,14 @@ class LibrusApiTeacherFreeDays(override val data: DataLibrus,
data.teacherAbsenceList.add(teacherAbsenceObject)
data.metadataList.add(Metadata(
profileId,
- Metadata.TYPE_TEACHER_ABSENCE,
+ MetadataType.TEACHER_ABSENCE,
id,
true,
profile?.empty ?: false
))
}
- data.setSyncNext(ENDPOINT_LIBRUS_API_TEACHER_FREE_DAYS, 6* HOUR, DRAWER_ITEM_AGENDA)
+ data.setSyncNext(ENDPOINT_LIBRUS_API_TEACHER_FREE_DAYS, 6* HOUR, FeatureType.AGENDA)
onSuccess(ENDPOINT_LIBRUS_API_TEACHER_FREE_DAYS)
}
}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTextGrades.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTextGrades.kt
index bb19f11f..ce4cbcc2 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTextGrades.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTextGrades.kt
@@ -14,6 +14,7 @@ import pl.szczodrzynski.edziennik.data.db.entity.Grade.Companion.TYPE_DESCRIPTIV
import pl.szczodrzynski.edziennik.data.db.entity.GradeCategory
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
+import pl.szczodrzynski.edziennik.data.db.enums.MetadataType
import pl.szczodrzynski.edziennik.ext.*
import pl.szczodrzynski.edziennik.utils.models.Date
@@ -68,7 +69,7 @@ class LibrusApiTextGrades(override val data: DataLibrus,
data.gradeList.add(gradeObject)
data.metadataList.add(Metadata(
profileId,
- Metadata.TYPE_GRADE,
+ MetadataType.GRADE,
id,
profile.empty,
profile.empty
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTimetables.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTimetables.kt
index b224a381..abd62272 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTimetables.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTimetables.kt
@@ -14,6 +14,7 @@ import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel
import pl.szczodrzynski.edziennik.data.db.entity.Lesson
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
import pl.szczodrzynski.edziennik.data.db.entity.SYNC_ALWAYS
+import pl.szczodrzynski.edziennik.data.db.enums.MetadataType
import pl.szczodrzynski.edziennik.ext.*
import pl.szczodrzynski.edziennik.utils.Utils.d
import pl.szczodrzynski.edziennik.utils.models.Date
@@ -189,6 +190,7 @@ class LibrusApiTimetables(override val data: DataLibrus,
}
lessonObject.id = lessonObject.buildId()
+ lessonObject.ownerId = lessonObject.buildOwnerId()
val seen = profile.empty || lessonDate < Date.getToday()
@@ -196,7 +198,7 @@ class LibrusApiTimetables(override val data: DataLibrus,
data.metadataList.add(
Metadata(
profileId,
- Metadata.TYPE_LESSON_CHANGE,
+ MetadataType.LESSON_CHANGE,
lessonObject.id,
seen,
seen
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesGetList.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesGetList.kt
index 7d0cfeef..1535e759 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesGetList.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesGetList.kt
@@ -4,7 +4,6 @@
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.messages
-import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_MESSAGES
import pl.szczodrzynski.edziennik.data.api.ERROR_NOT_IMPLEMENTED
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_MESSAGES_RECEIVED
@@ -12,6 +11,8 @@ import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_MESS
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusMessages
import pl.szczodrzynski.edziennik.data.db.entity.*
import pl.szczodrzynski.edziennik.data.db.entity.Message.Companion.TYPE_RECEIVED
+import pl.szczodrzynski.edziennik.data.db.enums.FeatureType
+import pl.szczodrzynski.edziennik.data.db.enums.MetadataType
import pl.szczodrzynski.edziennik.ext.DAY
import pl.szczodrzynski.edziennik.ext.fixName
import pl.szczodrzynski.edziennik.ext.singleOrNull
@@ -65,16 +66,17 @@ class LibrusMessagesGetList(override val data: DataLibrus,
val recipientId = data.teacherList.singleOrNull {
it.name == recipientFirstName && it.surname == recipientLastName
- }?.id ?: {
+ }?.id ?: run {
val teacherObject = Teacher(
- profileId,
- -1 * Utils.crc16("$recipientFirstName $recipientLastName".toByteArray()).toLong(),
- recipientFirstName,
- recipientLastName
+ profileId,
+ -1 * Utils.crc16("$recipientFirstName $recipientLastName".toByteArray())
+ .toLong(),
+ recipientFirstName,
+ recipientLastName
)
data.teacherList.put(teacherObject.id, teacherObject)
teacherObject.id
- }.invoke()
+ }
val senderId = when (type) {
TYPE_RECEIVED -> recipientId
@@ -118,7 +120,7 @@ class LibrusMessagesGetList(override val data: DataLibrus,
data.messageRecipientList.add(messageRecipientObject)
data.setSeenMetadataList.add(Metadata(
profileId,
- Metadata.TYPE_MESSAGE,
+ MetadataType.MESSAGE,
id,
notified,
notified
@@ -127,7 +129,7 @@ class LibrusMessagesGetList(override val data: DataLibrus,
when (type) {
TYPE_RECEIVED -> data.setSyncNext(ENDPOINT_LIBRUS_MESSAGES_RECEIVED, SYNC_ALWAYS)
- Message.TYPE_SENT -> data.setSyncNext(ENDPOINT_LIBRUS_MESSAGES_SENT, DAY, DRAWER_ITEM_MESSAGES)
+ Message.TYPE_SENT -> data.setSyncNext(ENDPOINT_LIBRUS_MESSAGES_SENT, DAY, FeatureType.MESSAGES_SENT)
}
onSuccess(endpointId)
}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesGetMessage.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesGetMessage.kt
index 8e6435c6..e8a1e1a6 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesGetMessage.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesGetMessage.kt
@@ -13,6 +13,7 @@ import pl.szczodrzynski.edziennik.data.db.entity.Message.Companion.TYPE_RECEIVED
import pl.szczodrzynski.edziennik.data.db.entity.Message.Companion.TYPE_SENT
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
import pl.szczodrzynski.edziennik.data.db.entity.Teacher
+import pl.szczodrzynski.edziennik.data.db.enums.MetadataType
import pl.szczodrzynski.edziennik.data.db.full.MessageFull
import pl.szczodrzynski.edziennik.data.db.full.MessageRecipientFull
import pl.szczodrzynski.edziennik.ext.fixName
@@ -124,7 +125,7 @@ class LibrusMessagesGetMessage(override val data: DataLibrus,
val receiverId = teacher?.id ?: -1
teacher?.loginId = receiverLoginId
- val readDateText = message.select("readed").text()
+ val readDateText = receiver.select("readed").text()
val readDate = when (readDateText.isNotNullNorEmpty()) {
true -> Date.fromIso(readDateText)
else -> 0
@@ -147,7 +148,7 @@ class LibrusMessagesGetMessage(override val data: DataLibrus,
if (!messageObject.seen) {
data.setSeenMetadataList.add(Metadata(
messageObject.profileId,
- Metadata.TYPE_MESSAGE,
+ MetadataType.MESSAGE,
messageObject.id,
true,
true
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesSendMessage.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesSendMessage.kt
index 02248e99..bcd01311 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesSendMessage.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesSendMessage.kt
@@ -16,7 +16,7 @@ import pl.szczodrzynski.edziennik.ext.getLong
import pl.szczodrzynski.edziennik.ext.getString
class LibrusMessagesSendMessage(override val data: DataLibrus,
- val recipients: List,
+ val recipients: Set,
val subject: String,
val text: String,
val onSuccess: () -> Unit
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaGetMessage.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaGetMessage.kt
index b9df2af1..36cadfaa 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaGetMessage.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaGetMessage.kt
@@ -8,6 +8,7 @@ import pl.szczodrzynski.edziennik.data.api.events.MessageGetEvent
import pl.szczodrzynski.edziennik.data.db.entity.Message
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
import pl.szczodrzynski.edziennik.data.db.entity.Teacher
+import pl.szczodrzynski.edziennik.data.db.enums.MetadataType
import pl.szczodrzynski.edziennik.data.db.full.MessageFull
import pl.szczodrzynski.edziennik.data.db.full.MessageRecipientFull
import pl.szczodrzynski.edziennik.ext.get
@@ -139,7 +140,7 @@ class LibrusSynergiaGetMessage(override val data: DataLibrus,
if (!messageObject.seen) {
data.setSeenMetadataList.add(Metadata(
messageObject.profileId,
- Metadata.TYPE_MESSAGE,
+ MetadataType.MESSAGE,
messageObject.id,
true,
true
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaGetMessages.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaGetMessages.kt
index 01cc69f6..626aec61 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaGetMessages.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaGetMessages.kt
@@ -1,12 +1,13 @@
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.synergia
import org.jsoup.Jsoup
-import pl.szczodrzynski.edziennik.*
import pl.szczodrzynski.edziennik.data.api.ERROR_NOT_IMPLEMENTED
import pl.szczodrzynski.edziennik.data.api.Regexes
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.*
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusSynergia
import pl.szczodrzynski.edziennik.data.db.entity.*
+import pl.szczodrzynski.edziennik.data.db.enums.FeatureType
+import pl.szczodrzynski.edziennik.data.db.enums.MetadataType
import pl.szczodrzynski.edziennik.ext.*
import pl.szczodrzynski.edziennik.utils.Utils
import pl.szczodrzynski.edziennik.utils.models.Date
@@ -96,7 +97,7 @@ class LibrusSynergiaGetMessages(override val data: DataLibrus,
data.messageRecipientList.add(messageRecipientObject)
data.setSeenMetadataList.add(Metadata(
profileId,
- Metadata.TYPE_MESSAGE,
+ MetadataType.MESSAGE,
id,
notified,
notified
@@ -105,7 +106,7 @@ class LibrusSynergiaGetMessages(override val data: DataLibrus,
when (type) {
Message.TYPE_RECEIVED -> data.setSyncNext(ENDPOINT_LIBRUS_MESSAGES_RECEIVED, SYNC_ALWAYS)
- Message.TYPE_SENT -> data.setSyncNext(ENDPOINT_LIBRUS_MESSAGES_SENT, DAY, MainActivity.DRAWER_ITEM_MESSAGES)
+ Message.TYPE_SENT -> data.setSyncNext(ENDPOINT_LIBRUS_MESSAGES_SENT, DAY, FeatureType.MESSAGES_SENT)
}
onSuccess(endpointId)
}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaHomework.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaHomework.kt
index ddf6635c..be9b4efc 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaHomework.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaHomework.kt
@@ -5,7 +5,6 @@
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.synergia
import org.jsoup.Jsoup
-import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_HOMEWORK
import pl.szczodrzynski.edziennik.data.api.POST
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_SYNERGIA_HOMEWORK
@@ -13,8 +12,11 @@ import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusSynergia
import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel
import pl.szczodrzynski.edziennik.data.db.entity.Event
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
+import pl.szczodrzynski.edziennik.data.db.enums.FeatureType
+import pl.szczodrzynski.edziennik.data.db.enums.MetadataType
import pl.szczodrzynski.edziennik.ext.HOUR
import pl.szczodrzynski.edziennik.ext.get
+import pl.szczodrzynski.edziennik.ext.getSemesterStart
import pl.szczodrzynski.edziennik.ext.singleOrNull
import pl.szczodrzynski.edziennik.utils.models.Date
@@ -84,7 +86,7 @@ class LibrusSynergiaHomework(override val data: DataLibrus,
data.eventList.add(eventObject)
data.metadataList.add(Metadata(
profileId,
- Metadata.TYPE_HOMEWORK,
+ MetadataType.HOMEWORK,
id,
seen,
seen
@@ -95,7 +97,7 @@ class LibrusSynergiaHomework(override val data: DataLibrus,
data.toRemove.add(DataRemoveModel.Events.futureWithType(Event.TYPE_HOMEWORK))
// because this requires a synergia login (2 more requests!!!) sync this every few hours or if explicit :D
- data.setSyncNext(ENDPOINT_LIBRUS_SYNERGIA_HOMEWORK, 5 * HOUR, DRAWER_ITEM_HOMEWORK)
+ data.setSyncNext(ENDPOINT_LIBRUS_SYNERGIA_HOMEWORK, 5 * HOUR, FeatureType.HOMEWORK)
onSuccess(ENDPOINT_LIBRUS_SYNERGIA_HOMEWORK)
}
} ?: onSuccess(ENDPOINT_LIBRUS_SYNERGIA_HOMEWORK) }
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaMarkAllAnnouncementsAsRead.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaMarkAllAnnouncementsAsRead.kt
index 04a7f5b6..2cb06942 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaMarkAllAnnouncementsAsRead.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaMarkAllAnnouncementsAsRead.kt
@@ -7,6 +7,7 @@ package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.synergia
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusSynergia
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
+import pl.szczodrzynski.edziennik.data.db.enums.MetadataType
class LibrusSynergiaMarkAllAnnouncementsAsRead(override val data: DataLibrus,
val onSuccess: () -> Unit
@@ -17,7 +18,7 @@ class LibrusSynergiaMarkAllAnnouncementsAsRead(override val data: DataLibrus,
init {
synergiaGet(TAG, "ogloszenia") {
- data.app.db.metadataDao().setAllSeen(profileId, Metadata.TYPE_ANNOUNCEMENT, true)
+ data.app.db.metadataDao().setAllSeen(profileId, MetadataType.ANNOUNCEMENT, true)
onSuccess()
}
}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/firstlogin/LibrusFirstLogin.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/firstlogin/LibrusFirstLogin.kt
index 43e5bda9..c29d3a85 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/firstlogin/LibrusFirstLogin.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/firstlogin/LibrusFirstLogin.kt
@@ -11,6 +11,8 @@ import pl.szczodrzynski.edziennik.data.api.edziennik.librus.login.LibrusLoginPor
import pl.szczodrzynski.edziennik.data.api.events.FirstLoginFinishedEvent
import pl.szczodrzynski.edziennik.data.api.models.ApiError
import pl.szczodrzynski.edziennik.data.db.entity.Profile
+import pl.szczodrzynski.edziennik.data.db.enums.LoginMode
+import pl.szczodrzynski.edziennik.data.db.enums.LoginType
import pl.szczodrzynski.edziennik.ext.*
class LibrusFirstLogin(val data: DataLibrus, val onSuccess: () -> Unit) {
@@ -23,11 +25,9 @@ class LibrusFirstLogin(val data: DataLibrus, val onSuccess: () -> Unit) {
private val profileList = mutableListOf()
init {
- val loginStoreId = data.loginStore.id
- val loginStoreType = LOGIN_TYPE_LIBRUS
- var firstProfileId = loginStoreId
+ var firstProfileId = data.loginStore.id
- if (data.loginStore.mode == LOGIN_MODE_LIBRUS_EMAIL) {
+ if (data.loginStore.mode == LoginMode.LIBRUS_EMAIL) {
// email login: use Portal for account list
LibrusLoginPortal(data) {
portal.portalGet(TAG, if (data.fakeLogin) FAKE_LIBRUS_ACCOUNTS else LIBRUS_ACCOUNTS_URL) { json, response ->
@@ -66,8 +66,8 @@ class LibrusFirstLogin(val data: DataLibrus, val onSuccess: () -> Unit) {
val profile = Profile(
firstProfileId++,
- loginStoreId,
- loginStoreType,
+ data.loginStore.id,
+ LoginType.LIBRUS,
studentNameLong,
data.portalEmail,
studentNameLong,
@@ -107,8 +107,8 @@ class LibrusFirstLogin(val data: DataLibrus, val onSuccess: () -> Unit) {
val profile = Profile(
firstProfileId++,
- loginStoreId,
- loginStoreType,
+ data.loginStore.id,
+ LoginType.LIBRUS,
studentNameLong,
login,
studentNameLong,
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLogin.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLogin.kt
index c79acd2e..6af1398b 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLogin.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLogin.kt
@@ -5,11 +5,8 @@
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.login
import pl.szczodrzynski.edziennik.R
-import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_LIBRUS_API
-import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_LIBRUS_MESSAGES
-import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_LIBRUS_PORTAL
-import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_LIBRUS_SYNERGIA
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
+import pl.szczodrzynski.edziennik.data.db.enums.LoginMethod
import pl.szczodrzynski.edziennik.utils.Utils
class LibrusLogin(val data: DataLibrus, val onSuccess: () -> Unit) {
@@ -24,7 +21,7 @@ class LibrusLogin(val data: DataLibrus, val onSuccess: () -> Unit) {
}
private fun nextLoginMethod(onSuccess: () -> Unit) {
- if (data.targetLoginMethodIds.isEmpty()) {
+ if (data.targetLoginMethods.isEmpty()) {
onSuccess()
return
}
@@ -32,38 +29,39 @@ class LibrusLogin(val data: DataLibrus, val onSuccess: () -> Unit) {
onSuccess()
return
}
- useLoginMethod(data.targetLoginMethodIds.removeAt(0)) { usedMethodId ->
+ useLoginMethod(data.targetLoginMethods.removeAt(0)) { usedMethod ->
data.progress(data.progressStep)
- if (usedMethodId != -1)
- data.loginMethods.add(usedMethodId)
+ if (usedMethod != null)
+ data.loginMethods.add(usedMethod)
nextLoginMethod(onSuccess)
}
}
- private fun useLoginMethod(loginMethodId: Int, onSuccess: (usedMethodId: Int) -> Unit) {
+ private fun useLoginMethod(loginMethod: LoginMethod, onSuccess: (usedMethod: LoginMethod?) -> Unit) {
// this should never be true
- if (data.loginMethods.contains(loginMethodId)) {
- onSuccess(-1)
+ if (data.loginMethods.contains(loginMethod)) {
+ onSuccess(null)
return
}
- Utils.d(TAG, "Using login method $loginMethodId")
- when (loginMethodId) {
- LOGIN_METHOD_LIBRUS_PORTAL -> {
+ Utils.d(TAG, "Using login method $loginMethod")
+ when (loginMethod) {
+ LoginMethod.LIBRUS_PORTAL -> {
data.startProgress(R.string.edziennik_progress_login_librus_portal)
- LibrusLoginPortal(data) { onSuccess(loginMethodId) }
+ LibrusLoginPortal(data) { onSuccess(loginMethod) }
}
- LOGIN_METHOD_LIBRUS_API -> {
+ LoginMethod.LIBRUS_API -> {
data.startProgress(R.string.edziennik_progress_login_librus_api)
- LibrusLoginApi(data) { onSuccess(loginMethodId) }
+ LibrusLoginApi(data) { onSuccess(loginMethod) }
}
- LOGIN_METHOD_LIBRUS_SYNERGIA -> {
+ LoginMethod.LIBRUS_SYNERGIA -> {
data.startProgress(R.string.edziennik_progress_login_librus_synergia)
- LibrusLoginSynergia(data) { onSuccess(loginMethodId) }
+ LibrusLoginSynergia(data) { onSuccess(loginMethod) }
}
- LOGIN_METHOD_LIBRUS_MESSAGES -> {
+ LoginMethod.LIBRUS_MESSAGES -> {
data.startProgress(R.string.edziennik_progress_login_librus_messages)
- LibrusLoginMessages(data) { onSuccess(loginMethodId) }
+ LibrusLoginMessages(data) { onSuccess(loginMethod) }
}
+ else -> {}
}
}
}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginApi.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginApi.kt
index 58f7181d..d2ef2336 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginApi.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginApi.kt
@@ -12,6 +12,8 @@ import im.wangchao.mhttp.callback.JsonCallbackHandler
import pl.szczodrzynski.edziennik.data.api.*
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
import pl.szczodrzynski.edziennik.data.api.models.ApiError
+import pl.szczodrzynski.edziennik.data.db.enums.LoginMethod
+import pl.szczodrzynski.edziennik.data.db.enums.LoginMode
import pl.szczodrzynski.edziennik.ext.getInt
import pl.szczodrzynski.edziennik.ext.getString
import pl.szczodrzynski.edziennik.ext.getUnixDate
@@ -32,7 +34,7 @@ class LibrusLoginApi {
this.data = data
this.onSuccess = onSuccess
- if (data.loginStore.mode == LOGIN_MODE_LIBRUS_EMAIL && data.profile == null) {
+ if (data.loginStore.mode == LoginMode.LIBRUS_EMAIL && data.profile == null) {
data.error(ApiError(TAG, ERROR_PROFILE_MISSING))
return
}
@@ -42,9 +44,9 @@ class LibrusLoginApi {
}
else {
when (data.loginStore.mode) {
- LOGIN_MODE_LIBRUS_EMAIL -> loginWithPortal()
- LOGIN_MODE_LIBRUS_SYNERGIA -> loginWithSynergia()
- LOGIN_MODE_LIBRUS_JST -> loginWithJst()
+ LoginMode.LIBRUS_EMAIL -> loginWithPortal()
+ LoginMode.LIBRUS_SYNERGIA -> loginWithSynergia()
+ LoginMode.LIBRUS_JST -> loginWithJst()
else -> {
data.error(ApiError(TAG, ERROR_INVALID_LOGIN_MODE))
}
@@ -53,7 +55,7 @@ class LibrusLoginApi {
}
private fun loginWithPortal() {
- if (!data.loginMethods.contains(LOGIN_METHOD_LIBRUS_PORTAL)) {
+ if (!data.loginMethods.contains(LoginMethod.LIBRUS_PORTAL)) {
data.error(ApiError(TAG, ERROR_LOGIN_METHOD_NOT_SATISFIED))
return
}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginMessages.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginMessages.kt
index 2a61f641..eeefe0f8 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginMessages.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginMessages.kt
@@ -12,6 +12,7 @@ import pl.szczodrzynski.edziennik.data.api.*
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.LibrusRecaptchaHelper
import pl.szczodrzynski.edziennik.data.api.models.ApiError
+import pl.szczodrzynski.edziennik.data.db.enums.LoginMethod
import pl.szczodrzynski.edziennik.ext.getUnixDate
import pl.szczodrzynski.edziennik.utils.Utils.d
import java.io.StringWriter
@@ -91,7 +92,7 @@ class LibrusLoginMessages(val data: DataLibrus, val onSuccess: () -> Unit) {
}
else {
data.app.cookieJar.clear("wiadomosci.librus.pl")
- if (data.loginMethods.contains(LOGIN_METHOD_LIBRUS_SYNERGIA)) {
+ if (data.loginMethods.contains(LoginMethod.LIBRUS_SYNERGIA)) {
loginWithSynergia()
}
else if (data.apiLogin != null && data.apiPassword != null && false) {
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginPortal.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginPortal.kt
index ed01d01f..d4aa3859 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginPortal.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginPortal.kt
@@ -10,7 +10,9 @@ import im.wangchao.mhttp.callback.TextCallbackHandler
import pl.szczodrzynski.edziennik.*
import pl.szczodrzynski.edziennik.data.api.*
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
+import pl.szczodrzynski.edziennik.data.api.events.UserActionRequiredEvent
import pl.szczodrzynski.edziennik.data.api.models.ApiError
+import pl.szczodrzynski.edziennik.data.db.enums.LoginMode
import pl.szczodrzynski.edziennik.ext.*
import pl.szczodrzynski.edziennik.utils.Utils.d
import java.net.HttpURLConnection.*
@@ -23,7 +25,7 @@ class LibrusLoginPortal(val data: DataLibrus, val onSuccess: () -> Unit) {
}
init { run {
- if (data.loginStore.mode != LOGIN_MODE_LIBRUS_EMAIL) {
+ if (data.loginStore.mode != LoginMode.LIBRUS_EMAIL) {
data.error(ApiError(TAG, ERROR_INVALID_LOGIN_MODE))
return@run
}
@@ -148,12 +150,23 @@ class LibrusLoginPortal(val data: DataLibrus, val onSuccess: () -> Unit) {
val error = if (response.code() == 200) null else
json.getJsonArray("errors")?.getString(0)
?: json.getJsonObject("errors")?.entrySet()?.firstOrNull()?.value?.asString
+
+ if (error?.contains("robotem") == true || json.getBoolean("captchaRequired") == true) {
+ data.requireUserAction(
+ type = UserActionRequiredEvent.Type.RECAPTCHA,
+ params = Bundle(
+ "siteKey" to LIBRUS_PORTAL_RECAPTCHA_KEY,
+ "referer" to LIBRUS_PORTAL_RECAPTCHA_REFERER,
+ ),
+ errorText = R.string.notification_user_action_required_captcha_librus,
+ )
+ return
+ }
+
error?.let { code ->
when {
code.contains("Sesja logowania wygasła") -> ERROR_LOGIN_LIBRUS_PORTAL_CSRF_EXPIRED
code.contains("Upewnij się, że nie") -> ERROR_LOGIN_LIBRUS_PORTAL_INVALID_LOGIN
- // this doesn't work anyway: `errors` is an object with `g-recaptcha-response` set
- code.contains("robotem") -> ERROR_CAPTCHA_LIBRUS_PORTAL
code.contains("Podany adres e-mail jest nieprawidłowy.") -> ERROR_LOGIN_LIBRUS_PORTAL_INVALID_LOGIN
else -> ERROR_LOGIN_LIBRUS_PORTAL_ACTION_ERROR
}.let { errorCode ->
@@ -163,12 +176,6 @@ class LibrusLoginPortal(val data: DataLibrus, val onSuccess: () -> Unit) {
return
}
}
- if (json.getBoolean("captchaRequired") == true) {
- data.error(ApiError(TAG, ERROR_CAPTCHA_LIBRUS_PORTAL)
- .withResponse(response)
- .withApiResponse(json))
- return
- }
authorize(json.getString("redirect", LIBRUS_AUTHORIZE_URL))
}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginSynergia.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginSynergia.kt
index a95af893..5f53890c 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginSynergia.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginSynergia.kt
@@ -12,6 +12,7 @@ import pl.szczodrzynski.edziennik.data.api.*
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
import pl.szczodrzynski.edziennik.data.api.models.ApiError
+import pl.szczodrzynski.edziennik.data.db.enums.LoginMethod
import pl.szczodrzynski.edziennik.ext.getString
import pl.szczodrzynski.edziennik.ext.getUnixDate
import pl.szczodrzynski.edziennik.utils.Utils.d
@@ -34,7 +35,7 @@ class LibrusLoginSynergia(override val data: DataLibrus, val onSuccess: () -> Un
}
else {
data.app.cookieJar.clear("synergia.librus.pl")
- if (data.loginMethods.contains(LOGIN_METHOD_LIBRUS_API)) {
+ if (data.loginMethods.contains(LoginMethod.LIBRUS_API)) {
loginWithApi()
}
else if (data.apiLogin != null && data.apiPassword != null && false) {
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/SynergiaTokenExtractor.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/SynergiaTokenExtractor.kt
index 807bb131..7e1dc012 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/SynergiaTokenExtractor.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/SynergiaTokenExtractor.kt
@@ -7,6 +7,7 @@ import pl.szczodrzynski.edziennik.data.api.*
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusPortal
import pl.szczodrzynski.edziennik.data.api.models.ApiError
+import pl.szczodrzynski.edziennik.data.db.enums.LoginMode
import pl.szczodrzynski.edziennik.ext.*
import pl.szczodrzynski.edziennik.utils.Utils.d
@@ -16,7 +17,7 @@ class SynergiaTokenExtractor(override val data: DataLibrus, val onSuccess: () ->
}
init { run {
- if (data.loginStore.mode != LOGIN_MODE_LIBRUS_EMAIL) {
+ if (data.loginStore.mode != LoginMode.LIBRUS_EMAIL) {
data.error(ApiError(TAG, ERROR_INVALID_LOGIN_MODE))
return@run
}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/DataMobidziennik.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/DataMobidziennik.kt
index 3553d72d..64507362 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/DataMobidziennik.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/DataMobidziennik.kt
@@ -6,12 +6,14 @@ package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik
import android.util.LongSparseArray
import pl.szczodrzynski.edziennik.App
-import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_MOBIDZIENNIK_WEB
import pl.szczodrzynski.edziennik.data.api.models.Data
import pl.szczodrzynski.edziennik.data.db.entity.LoginStore
import pl.szczodrzynski.edziennik.data.db.entity.Profile
+import pl.szczodrzynski.edziennik.data.db.enums.LoginMethod
import pl.szczodrzynski.edziennik.ext.currentTimeUnix
+import pl.szczodrzynski.edziennik.ext.getStudentData
import pl.szczodrzynski.edziennik.ext.isNotNullNorEmpty
+import pl.szczodrzynski.edziennik.ext.set
import pl.szczodrzynski.edziennik.utils.models.Date
import pl.szczodrzynski.edziennik.utils.models.Time
@@ -29,12 +31,37 @@ class DataMobidziennik(app: App, profile: Profile?, loginStore: LoginStore) : Da
override fun satisfyLoginMethods() {
loginMethods.clear()
if (isWebLoginValid()) {
- loginMethods += LOGIN_METHOD_MOBIDZIENNIK_WEB
+ loginMethods += LoginMethod.MOBIDZIENNIK_WEB
}
}
override fun generateUserCode() = "$loginServerName:$loginUsername:$studentId"
+ fun parseDateTime(dateStr: String): Pair