mirror of
https://github.com/szkolny-eu/szkolny-android.git
synced 2025-01-18 12:56:45 -06:00
[APIv2/Librus] Refactor structure
This commit is contained in:
parent
fabacfdcca
commit
bb0a366ef1
@ -4,10 +4,10 @@
|
||||
|
||||
package pl.szczodrzynski.edziennik.api.v2
|
||||
|
||||
import pl.szczodrzynski.edziennik.api.v2.librus.login.LoginLibrusPortal
|
||||
import pl.szczodrzynski.edziennik.api.v2.librus.login.LoginLibrusApi
|
||||
import pl.szczodrzynski.edziennik.api.v2.librus.login.LoginLibrusMessages
|
||||
import pl.szczodrzynski.edziennik.api.v2.librus.login.LoginLibrusSynergia
|
||||
import pl.szczodrzynski.edziennik.api.v2.librus.login.LibrusLoginPortal
|
||||
import pl.szczodrzynski.edziennik.api.v2.librus.login.LibrusLoginApi
|
||||
import pl.szczodrzynski.edziennik.api.v2.librus.login.LibrusLoginMessages
|
||||
import pl.szczodrzynski.edziennik.api.v2.librus.login.LibrusLoginSynergia
|
||||
import pl.szczodrzynski.edziennik.api.v2.models.LoginMethod
|
||||
|
||||
val SYNERGIA_API_ENABLED = "true".toBoolean()
|
||||
@ -39,13 +39,13 @@ const val LOGIN_METHOD_VULCAN_WEB = 100
|
||||
const val LOGIN_METHOD_VULCAN_API = 200
|
||||
|
||||
val librusLoginMethods = listOf(
|
||||
LoginMethod(LOGIN_TYPE_LIBRUS, LOGIN_METHOD_LIBRUS_PORTAL, LoginLibrusPortal::class.java)
|
||||
LoginMethod(LOGIN_TYPE_LIBRUS, LOGIN_METHOD_LIBRUS_PORTAL, LibrusLoginPortal::class.java)
|
||||
.withIsPossible { _, loginStore ->
|
||||
loginStore.mode == LOGIN_MODE_LIBRUS_EMAIL
|
||||
}
|
||||
.withRequiredLoginMethod { _, _ -> LOGIN_METHOD_NOT_NEEDED },
|
||||
|
||||
LoginMethod(LOGIN_TYPE_LIBRUS, LOGIN_METHOD_LIBRUS_API, LoginLibrusApi::class.java)
|
||||
LoginMethod(LOGIN_TYPE_LIBRUS, LOGIN_METHOD_LIBRUS_API, LibrusLoginApi::class.java)
|
||||
.withIsPossible { _, loginStore ->
|
||||
loginStore.mode != LOGIN_MODE_LIBRUS_SYNERGIA || SYNERGIA_API_ENABLED
|
||||
}
|
||||
@ -53,13 +53,13 @@ val librusLoginMethods = listOf(
|
||||
if (loginStore.mode == LOGIN_MODE_LIBRUS_EMAIL) LOGIN_METHOD_LIBRUS_PORTAL else LOGIN_METHOD_NOT_NEEDED
|
||||
},
|
||||
|
||||
LoginMethod(LOGIN_TYPE_LIBRUS, LOGIN_METHOD_LIBRUS_SYNERGIA, LoginLibrusSynergia::class.java)
|
||||
LoginMethod(LOGIN_TYPE_LIBRUS, LOGIN_METHOD_LIBRUS_SYNERGIA, LibrusLoginSynergia::class.java)
|
||||
.withIsPossible { _, _ -> true }
|
||||
.withRequiredLoginMethod { profile, _ ->
|
||||
if (profile?.hasStudentData("accountPassword") == false) LOGIN_METHOD_LIBRUS_API else LOGIN_METHOD_NOT_NEEDED
|
||||
},
|
||||
|
||||
LoginMethod(LOGIN_TYPE_LIBRUS, LOGIN_METHOD_LIBRUS_MESSAGES, LoginLibrusMessages::class.java)
|
||||
LoginMethod(LOGIN_TYPE_LIBRUS, LOGIN_METHOD_LIBRUS_MESSAGES, LibrusLoginMessages::class.java)
|
||||
.withIsPossible { _, _ -> true }
|
||||
.withRequiredLoginMethod { profile, _ ->
|
||||
if (profile?.hasStudentData("accountPassword") == false) LOGIN_METHOD_LIBRUS_SYNERGIA else LOGIN_METHOD_NOT_NEEDED
|
||||
|
@ -12,6 +12,8 @@ import pl.szczodrzynski.edziennik.api.v2.endpoints
|
||||
import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikCallback
|
||||
import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikInterface
|
||||
import pl.szczodrzynski.edziennik.api.v2.librus.data.DataLibrus
|
||||
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusData
|
||||
import pl.szczodrzynski.edziennik.api.v2.librus.login.LibrusLogin
|
||||
import pl.szczodrzynski.edziennik.api.v2.librusLoginMethods
|
||||
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
|
||||
import pl.szczodrzynski.edziennik.api.v2.models.Endpoint
|
||||
@ -122,7 +124,7 @@ class Librus(val app: App, val profile: Profile?, val loginStore: LoginStore, va
|
||||
Log.d(TAG, "Endpoint IDs: ${data.targetEndpointIds}")
|
||||
|
||||
LibrusLogin(data) {
|
||||
LibrusEndpoints(data) {
|
||||
LibrusData(data) {
|
||||
completed()
|
||||
}
|
||||
}
|
||||
|
@ -1,16 +1,17 @@
|
||||
/*
|
||||
* Copyright (c) Kuba Szczodrzyński 2019-10-1.
|
||||
* Copyright (c) Kuba Szczodrzyński 2019-10-5.
|
||||
*/
|
||||
|
||||
package pl.szczodrzynski.edziennik.api.v2.librus
|
||||
package pl.szczodrzynski.edziennik.api.v2.librus.data
|
||||
|
||||
import pl.szczodrzynski.edziennik.R
|
||||
import pl.szczodrzynski.edziennik.api.v2.ENDPOINT_LIBRUS_API_ME
|
||||
import pl.szczodrzynski.edziennik.api.v2.librus.data.DataLibrus
|
||||
import pl.szczodrzynski.edziennik.api.v2.ENDPOINT_LIBRUS_API_SCHOOLS
|
||||
import pl.szczodrzynski.edziennik.api.v2.librus.data.api.LibrusApiMe
|
||||
import pl.szczodrzynski.edziennik.api.v2.librus.data.api.LibrusApiSchools
|
||||
import pl.szczodrzynski.edziennik.utils.Utils
|
||||
|
||||
class LibrusEndpoints(val data: DataLibrus, val onSuccess: () -> Unit) {
|
||||
class LibrusData(val data: DataLibrus, val onSuccess: () -> Unit) {
|
||||
companion object {
|
||||
private const val TAG = "LibrusEndpoints"
|
||||
}
|
||||
@ -42,6 +43,10 @@ class LibrusEndpoints(val data: DataLibrus, val onSuccess: () -> Unit) {
|
||||
data.startProgress(R.string.edziennik_progress_endpoint_student_info)
|
||||
LibrusApiMe(data) { onSuccess() }
|
||||
}
|
||||
ENDPOINT_LIBRUS_API_SCHOOLS -> {
|
||||
data.startProgress(R.string.edziennik_progress_endpoint_school_info)
|
||||
LibrusApiSchools(data) { onSuccess() }
|
||||
}
|
||||
else -> onSuccess()
|
||||
}
|
||||
}
|
@ -1,8 +1,8 @@
|
||||
/*
|
||||
* Copyright (c) Kuba Szczodrzyński 2019-10-1.
|
||||
* Copyright (c) Kuba Szczodrzyński 2019-10-5.
|
||||
*/
|
||||
|
||||
package pl.szczodrzynski.edziennik.api.v2.librus
|
||||
package pl.szczodrzynski.edziennik.api.v2.librus.login
|
||||
|
||||
import pl.szczodrzynski.edziennik.R
|
||||
import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_LIBRUS_API
|
||||
@ -10,10 +10,6 @@ import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_LIBRUS_MESSAGES
|
||||
import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_LIBRUS_PORTAL
|
||||
import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_LIBRUS_SYNERGIA
|
||||
import pl.szczodrzynski.edziennik.api.v2.librus.data.DataLibrus
|
||||
import pl.szczodrzynski.edziennik.api.v2.librus.login.LoginLibrusApi
|
||||
import pl.szczodrzynski.edziennik.api.v2.librus.login.LoginLibrusMessages
|
||||
import pl.szczodrzynski.edziennik.api.v2.librus.login.LoginLibrusPortal
|
||||
import pl.szczodrzynski.edziennik.api.v2.librus.login.LoginLibrusSynergia
|
||||
import pl.szczodrzynski.edziennik.utils.Utils
|
||||
|
||||
class LibrusLogin(val data: DataLibrus, val onSuccess: () -> Unit) {
|
||||
@ -53,19 +49,19 @@ class LibrusLogin(val data: DataLibrus, val onSuccess: () -> Unit) {
|
||||
when (loginMethodId) {
|
||||
LOGIN_METHOD_LIBRUS_PORTAL -> {
|
||||
data.startProgress(R.string.edziennik_progress_login_librus_portal)
|
||||
LoginLibrusPortal(data) { onSuccess(loginMethodId) }
|
||||
LibrusLoginPortal(data) { onSuccess(loginMethodId) }
|
||||
}
|
||||
LOGIN_METHOD_LIBRUS_API -> {
|
||||
data.startProgress(R.string.edziennik_progress_login_librus_api)
|
||||
LoginLibrusApi(data) { onSuccess(loginMethodId) }
|
||||
LibrusLoginApi(data) { onSuccess(loginMethodId) }
|
||||
}
|
||||
LOGIN_METHOD_LIBRUS_SYNERGIA -> {
|
||||
data.startProgress(R.string.edziennik_progress_login_librus_synergia)
|
||||
LoginLibrusSynergia(data) { onSuccess(loginMethodId) }
|
||||
LibrusLoginSynergia(data) { onSuccess(loginMethodId) }
|
||||
}
|
||||
LOGIN_METHOD_LIBRUS_MESSAGES -> {
|
||||
data.startProgress(R.string.edziennik_progress_login_librus_messages)
|
||||
LoginLibrusMessages(data) { onSuccess(loginMethodId) }
|
||||
LibrusLoginMessages(data) { onSuccess(loginMethodId) }
|
||||
}
|
||||
}
|
||||
}
|
@ -15,7 +15,7 @@ import pl.szczodrzynski.edziennik.api.v2.librus.data.DataLibrus
|
||||
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
|
||||
import java.net.HttpURLConnection.*
|
||||
|
||||
class LoginLibrusApi {
|
||||
class LibrusLoginApi {
|
||||
companion object {
|
||||
private const val TAG = "LoginLibrusApi"
|
||||
}
|
@ -16,7 +16,7 @@ import pl.szczodrzynski.edziennik.api.v2.models.ApiError
|
||||
import pl.szczodrzynski.edziennik.currentTimeUnix
|
||||
import pl.szczodrzynski.edziennik.getUnixDate
|
||||
|
||||
class LoginLibrusMessages(val data: DataLibrus, val onSuccess: () -> Unit) {
|
||||
class LibrusLoginMessages(val data: DataLibrus, val onSuccess: () -> Unit) {
|
||||
companion object {
|
||||
private const val TAG = "LoginLibrusMessages"
|
||||
}
|
@ -15,7 +15,7 @@ import java.net.HttpURLConnection.HTTP_UNAUTHORIZED
|
||||
import java.util.ArrayList
|
||||
import java.util.regex.Pattern
|
||||
|
||||
class LoginLibrusPortal(val data: DataLibrus, val onSuccess: () -> Unit) {
|
||||
class LibrusLoginPortal(val data: DataLibrus, val onSuccess: () -> Unit) {
|
||||
companion object {
|
||||
private const val TAG = "LoginLibrusPortal"
|
||||
}
|
@ -17,7 +17,7 @@ import pl.szczodrzynski.edziennik.getString
|
||||
import pl.szczodrzynski.edziennik.getUnixDate
|
||||
import java.net.HttpURLConnection
|
||||
|
||||
class LoginLibrusSynergia(val data: DataLibrus, val onSuccess: () -> Unit) {
|
||||
class LibrusLoginSynergia(val data: DataLibrus, val onSuccess: () -> Unit) {
|
||||
companion object {
|
||||
private const val TAG = "LoginLibrusSynergia"
|
||||
}
|
@ -1,86 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) Kuba Szczodrzyński 2019-9-21.
|
||||
*/
|
||||
|
||||
package pl.szczodrzynski.edziennik.api.v2.librus.login
|
||||
|
||||
import pl.szczodrzynski.edziennik.R
|
||||
import pl.szczodrzynski.edziennik.api.v2.*
|
||||
import pl.szczodrzynski.edziennik.api.v2.librus.data.DataLibrus
|
||||
import pl.szczodrzynski.edziennik.api.v2.models.LoginMethod
|
||||
import pl.szczodrzynski.edziennik.utils.Utils.d
|
||||
import kotlin.math.log
|
||||
|
||||
class LoginLibrus(val data: DataLibrus, vararg loginMethodIds: Int, val onSuccess: () -> Unit) {
|
||||
companion object {
|
||||
private const val TAG = "LoginLibrus"
|
||||
}
|
||||
|
||||
private var loginMethodList = mutableListOf<Int>()
|
||||
|
||||
init {
|
||||
for (loginMethodId in loginMethodIds) {
|
||||
var requiredLoginMethod: Int? = loginMethodId
|
||||
while (requiredLoginMethod != LOGIN_METHOD_NOT_NEEDED) {
|
||||
librusLoginMethods.singleOrNull { it.loginMethodId == requiredLoginMethod }?.let { loginMethod ->
|
||||
if (requiredLoginMethod != null)
|
||||
loginMethodList.add(requiredLoginMethod!!)
|
||||
requiredLoginMethod = loginMethod.requiredLoginMethod(data.profile, data.loginStore)
|
||||
}
|
||||
}
|
||||
}
|
||||
loginMethodList = loginMethodList.toHashSet().toMutableList()
|
||||
loginMethodList.sort()
|
||||
|
||||
//data.satisfyLoginMethods()
|
||||
nextLoginMethod()
|
||||
}
|
||||
|
||||
private fun nextLoginMethod() {
|
||||
if (loginMethodList.isEmpty()) {
|
||||
onSuccess()
|
||||
return
|
||||
}
|
||||
useLoginMethod(loginMethodList.removeAt(0)) {
|
||||
nextLoginMethod()
|
||||
}
|
||||
}
|
||||
|
||||
private fun useLoginMethod(loginMethodId: Int, onSuccess: () -> Unit) {
|
||||
if (data.loginMethods.contains(loginMethodId)) {
|
||||
onSuccess()
|
||||
return
|
||||
}
|
||||
d(TAG, "Using login method $loginMethodId")
|
||||
when (loginMethodId) {
|
||||
LOGIN_METHOD_LIBRUS_PORTAL -> {
|
||||
data.startProgress(R.string.edziennik_progress_login_librus_portal)
|
||||
LoginLibrusPortal(data) {
|
||||
data.loginMethods.add(loginMethodId)
|
||||
onSuccess()
|
||||
}
|
||||
}
|
||||
LOGIN_METHOD_LIBRUS_API -> {
|
||||
data.startProgress(R.string.edziennik_progress_login_librus_api)
|
||||
LoginLibrusApi(data) {
|
||||
data.loginMethods.add(loginMethodId)
|
||||
onSuccess()
|
||||
}
|
||||
}
|
||||
LOGIN_METHOD_LIBRUS_SYNERGIA -> {
|
||||
data.startProgress(R.string.edziennik_progress_login_librus_synergia)
|
||||
LoginLibrusSynergia(data) {
|
||||
data.loginMethods.add(loginMethodId)
|
||||
onSuccess()
|
||||
}
|
||||
}
|
||||
LOGIN_METHOD_LIBRUS_MESSAGES -> {
|
||||
data.startProgress(R.string.edziennik_progress_login_librus_messages)
|
||||
LoginLibrusMessages(data) {
|
||||
data.loginMethods.add(loginMethodId)
|
||||
onSuccess()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user