mirror of
https://github.com/szkolny-eu/szkolny-android.git
synced 2025-01-31 05:48:19 +01:00
[API/Librus] Add getting homework body and downloading homework attachments.
This commit is contained in:
parent
12d8de1def
commit
b052b5bd66
@ -56,6 +56,8 @@ const val LIBRUS_SYNERGIA_TOKEN_LOGIN_URL = "https://synergia.librus.pl/loguj/to
|
|||||||
const val LIBRUS_MESSAGES_URL = "https://wiadomosci.librus.pl/module"
|
const val LIBRUS_MESSAGES_URL = "https://wiadomosci.librus.pl/module"
|
||||||
const val LIBRUS_SANDBOX_URL = "https://sandbox.librus.pl/index.php?action="
|
const val LIBRUS_SANDBOX_URL = "https://sandbox.librus.pl/index.php?action="
|
||||||
|
|
||||||
|
const val LIBRUS_SYNERGIA_HOMEWORK_ATTACHMENT_URL = "https://synergia.librus.pl/homework/downloadFile"
|
||||||
|
|
||||||
const val IDZIENNIK_USER_AGENT = SYNERGIA_USER_AGENT
|
const val IDZIENNIK_USER_AGENT = SYNERGIA_USER_AGENT
|
||||||
const val IDZIENNIK_WEB_URL = "https://iuczniowie.progman.pl/idziennik"
|
const val IDZIENNIK_WEB_URL = "https://iuczniowie.progman.pl/idziennik"
|
||||||
const val IDZIENNIK_WEB_LOGIN = "login.aspx"
|
const val IDZIENNIK_WEB_LOGIN = "login.aspx"
|
||||||
|
@ -13,6 +13,8 @@ import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.messages.Librus
|
|||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.messages.LibrusMessagesGetMessage
|
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.messages.LibrusMessagesGetMessage
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.messages.LibrusMessagesGetRecipientList
|
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.messages.LibrusMessagesGetRecipientList
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.messages.LibrusMessagesSendMessage
|
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.messages.LibrusMessagesSendMessage
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.synergia.LibrusSynergiaGetHomework
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.synergia.LibrusSynergiaHomeworkGetAttachment
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.synergia.LibrusSynergiaMarkAllAnnouncementsAsRead
|
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.synergia.LibrusSynergiaMarkAllAnnouncementsAsRead
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.firstlogin.LibrusFirstLogin
|
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.edziennik.librus.login.LibrusLogin
|
||||||
@ -20,6 +22,7 @@ import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikCallback
|
|||||||
import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface
|
import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.LoginStore
|
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.Profile
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Teacher
|
import pl.szczodrzynski.edziennik.data.db.entity.Teacher
|
||||||
import pl.szczodrzynski.edziennik.data.db.full.AnnouncementFull
|
import pl.szczodrzynski.edziennik.data.db.full.AnnouncementFull
|
||||||
@ -120,8 +123,18 @@ class Librus(val app: App, val profile: Profile?, val loginStore: LoginStore, va
|
|||||||
|
|
||||||
override fun getAttachment(owner: Any, attachmentId: Long, attachmentName: String) {
|
override fun getAttachment(owner: Any, attachmentId: Long, attachmentName: String) {
|
||||||
login(LOGIN_METHOD_LIBRUS_MESSAGES) {
|
login(LOGIN_METHOD_LIBRUS_MESSAGES) {
|
||||||
LibrusMessagesGetAttachment(data, owner, attachmentId, attachmentName) {
|
when (owner) {
|
||||||
completed()
|
is Message -> {
|
||||||
|
LibrusMessagesGetAttachment(data, owner, attachmentId, attachmentName) {
|
||||||
|
completed()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
is EventFull -> {
|
||||||
|
LibrusSynergiaHomeworkGetAttachment(data, owner, attachmentId, attachmentName) {
|
||||||
|
completed()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else -> completed()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -134,7 +147,13 @@ class Librus(val app: App, val profile: Profile?, val loginStore: LoginStore, va
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getEvent(eventFull: EventFull) {}
|
override fun getEvent(eventFull: EventFull) {
|
||||||
|
login(LOGIN_METHOD_LIBRUS_SYNERGIA) {
|
||||||
|
LibrusSynergiaGetHomework(data, eventFull) {
|
||||||
|
completed()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun firstLogin() { LibrusFirstLogin(data) { completed() } }
|
override fun firstLogin() { LibrusFirstLogin(data) { completed() } }
|
||||||
override fun cancel() {
|
override fun cancel() {
|
||||||
|
@ -35,7 +35,7 @@ open class LibrusSynergia(open val data: DataLibrus, open val lastSync: Long?) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!text.contains("jesteś zalogowany")) {
|
if (!text.contains("jesteś zalogowany") && !text.contains("Podgląd zadania")) {
|
||||||
when {
|
when {
|
||||||
text.contains("stop.png") -> ERROR_LIBRUS_SYNERGIA_ACCESS_DENIED
|
text.contains("stop.png") -> ERROR_LIBRUS_SYNERGIA_ACCESS_DENIED
|
||||||
text.contains("Przerwa techniczna") -> ERROR_LIBRUS_SYNERGIA_MAINTENANCE
|
text.contains("Przerwa techniczna") -> ERROR_LIBRUS_SYNERGIA_MAINTENANCE
|
||||||
@ -48,7 +48,6 @@ open class LibrusSynergia(open val data: DataLibrus, open val lastSync: Long?) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
onSuccess(text)
|
onSuccess(text)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
@ -90,4 +89,42 @@ open class LibrusSynergia(open val data: DataLibrus, open val lastSync: Long?) {
|
|||||||
.build()
|
.build()
|
||||||
.enqueue()
|
.enqueue()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun redirectUrlGet(tag: String, url: String, onSuccess: (url: String) -> Unit) {
|
||||||
|
val callback = object : TextCallbackHandler() {
|
||||||
|
override fun onSuccess(text: String?, response: Response) {
|
||||||
|
val redirectUrl = response.headers().get("Location")
|
||||||
|
|
||||||
|
if (redirectUrl != null) {
|
||||||
|
try {
|
||||||
|
onSuccess(redirectUrl)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
data.error(ApiError(tag, EXCEPTION_LIBRUS_SYNERGIA_REQUEST)
|
||||||
|
.withResponse(response)
|
||||||
|
.withThrowable(e)
|
||||||
|
.withApiResponse(text))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
data.error(ApiError(tag, ERROR_LIBRUS_SYNERGIA_OTHER)
|
||||||
|
.withResponse(response)
|
||||||
|
.withApiResponse(text))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onFailure(response: Response?, throwable: Throwable?) {
|
||||||
|
data.error(ApiError(tag, ERROR_REQUEST_FAILURE)
|
||||||
|
.withResponse(response)
|
||||||
|
.withThrowable(throwable))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Request.builder()
|
||||||
|
.url(url)
|
||||||
|
.userAgent(LIBRUS_USER_AGENT)
|
||||||
|
.withClient(data.app.httpLazy)
|
||||||
|
.get()
|
||||||
|
.callback(callback)
|
||||||
|
.build()
|
||||||
|
.enqueue()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,24 +4,16 @@
|
|||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.messages
|
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.messages
|
||||||
|
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import org.greenrobot.eventbus.EventBus
|
import kotlinx.coroutines.Dispatchers
|
||||||
import pl.szczodrzynski.edziennik.data.api.*
|
import kotlinx.coroutines.Job
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusMessages
|
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusMessages
|
||||||
import pl.szczodrzynski.edziennik.data.api.events.AttachmentGetEvent
|
|
||||||
import pl.szczodrzynski.edziennik.data.api.events.AttachmentGetEvent.Companion.TYPE_FINISHED
|
|
||||||
import pl.szczodrzynski.edziennik.data.api.events.AttachmentGetEvent.Companion.TYPE_PROGRESS
|
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.entity.Message
|
import pl.szczodrzynski.edziennik.data.db.entity.Message
|
||||||
import pl.szczodrzynski.edziennik.get
|
|
||||||
import pl.szczodrzynski.edziennik.getString
|
|
||||||
import pl.szczodrzynski.edziennik.utils.Utils
|
|
||||||
import java.io.File
|
|
||||||
import kotlin.coroutines.CoroutineContext
|
import kotlin.coroutines.CoroutineContext
|
||||||
|
|
||||||
class LibrusMessagesGetAttachment(override val data: DataLibrus,
|
class LibrusMessagesGetAttachment(override val data: DataLibrus,
|
||||||
val owner: Any,
|
val message: Message,
|
||||||
val attachmentId: Long,
|
val attachmentId: Long,
|
||||||
val attachmentName: String,
|
val attachmentName: String,
|
||||||
val onSuccess: () -> Unit
|
val onSuccess: () -> Unit
|
||||||
@ -35,91 +27,15 @@ class LibrusMessagesGetAttachment(override val data: DataLibrus,
|
|||||||
override val coroutineContext: CoroutineContext
|
override val coroutineContext: CoroutineContext
|
||||||
get() = job + Dispatchers.Default
|
get() = job + Dispatchers.Default
|
||||||
|
|
||||||
private var getAttachmentCheckKeyTries = 0
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
val message = owner as Message
|
|
||||||
|
|
||||||
messagesGet(TAG, "GetFileDownloadLink", parameters = mapOf(
|
messagesGet(TAG, "GetFileDownloadLink", parameters = mapOf(
|
||||||
"fileId" to attachmentId,
|
"fileId" to attachmentId,
|
||||||
"msgId" to message.id,
|
"msgId" to message.id,
|
||||||
"archive" to 0
|
"archive" to 0
|
||||||
)) { doc ->
|
)) { doc ->
|
||||||
val downloadLink = doc.select("response GetFileDownloadLink downloadLink").text()
|
val downloadLink = doc.select("response GetFileDownloadLink downloadLink").text()
|
||||||
val keyMatcher = Regexes.LIBRUS_ATTACHMENT_KEY.find(downloadLink)
|
|
||||||
|
|
||||||
if (keyMatcher != null) {
|
LibrusSandboxDownloadAttachment(data, downloadLink, message, attachmentId, attachmentName, onSuccess)
|
||||||
getAttachmentCheckKeyTries = 0
|
|
||||||
|
|
||||||
val attachmentKey = keyMatcher[1]
|
|
||||||
getAttachmentCheckKey(attachmentKey) {
|
|
||||||
downloadAttachment("${LIBRUS_SANDBOX_URL}CSDownload&singleUseKey=$attachmentKey", method = POST)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
downloadAttachment("$downloadLink/get", method = GET)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun getAttachmentCheckKey(attachmentKey: String, callback: () -> Unit) {
|
|
||||||
sandboxGet(TAG, "CSCheckKey",
|
|
||||||
parameters = mapOf("singleUseKey" to attachmentKey)) { json ->
|
|
||||||
|
|
||||||
when (json.getString("status")) {
|
|
||||||
"not_downloaded_yet" -> {
|
|
||||||
if (getAttachmentCheckKeyTries++ > 5) {
|
|
||||||
data.error(ApiError(TAG, ERROR_FILE_DOWNLOAD)
|
|
||||||
.withApiResponse(json))
|
|
||||||
return@sandboxGet
|
|
||||||
}
|
|
||||||
launch {
|
|
||||||
delay(2000)
|
|
||||||
getAttachmentCheckKey(attachmentKey, callback)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
"ready" -> {
|
|
||||||
launch { callback() }
|
|
||||||
}
|
|
||||||
|
|
||||||
else -> {
|
|
||||||
data.error(ApiError(TAG, EXCEPTION_LIBRUS_MESSAGES_REQUEST)
|
|
||||||
.withApiResponse(json))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun downloadAttachment(url: String, method: Int = GET) {
|
|
||||||
val targetFile = File(Utils.getStorageDir(), attachmentName)
|
|
||||||
|
|
||||||
sandboxGetFile(TAG, url, targetFile, { file ->
|
|
||||||
|
|
||||||
val event = AttachmentGetEvent(
|
|
||||||
profileId,
|
|
||||||
owner,
|
|
||||||
attachmentId,
|
|
||||||
TYPE_FINISHED,
|
|
||||||
file.absolutePath
|
|
||||||
)
|
|
||||||
|
|
||||||
val attachmentDataFile = File(Utils.getStorageDir(), ".${profileId}_${event.ownerId}_${event.attachmentId}")
|
|
||||||
Utils.writeStringToFile(attachmentDataFile, event.fileName)
|
|
||||||
|
|
||||||
EventBus.getDefault().postSticky(event)
|
|
||||||
|
|
||||||
onSuccess()
|
|
||||||
|
|
||||||
}) { written, _ ->
|
|
||||||
val event = AttachmentGetEvent(
|
|
||||||
profileId,
|
|
||||||
owner,
|
|
||||||
attachmentId,
|
|
||||||
TYPE_PROGRESS,
|
|
||||||
bytesWritten = written
|
|
||||||
)
|
|
||||||
|
|
||||||
EventBus.getDefault().postSticky(event)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,110 @@
|
|||||||
|
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.messages
|
||||||
|
|
||||||
|
import kotlinx.coroutines.*
|
||||||
|
import org.greenrobot.eventbus.EventBus
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.*
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusMessages
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.events.AttachmentGetEvent
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
||||||
|
import pl.szczodrzynski.edziennik.get
|
||||||
|
import pl.szczodrzynski.edziennik.getString
|
||||||
|
import pl.szczodrzynski.edziennik.utils.Utils
|
||||||
|
import java.io.File
|
||||||
|
import kotlin.coroutines.CoroutineContext
|
||||||
|
|
||||||
|
class LibrusSandboxDownloadAttachment(override val data: DataLibrus,
|
||||||
|
downloadLink: String,
|
||||||
|
val owner: Any,
|
||||||
|
val attachmentId: Long,
|
||||||
|
val attachmentName: String,
|
||||||
|
val onSuccess: () -> Unit
|
||||||
|
) : LibrusMessages(data, null), CoroutineScope {
|
||||||
|
companion object {
|
||||||
|
const val TAG = "LibrusSandboxDownloadAttachment"
|
||||||
|
}
|
||||||
|
|
||||||
|
private var job = Job()
|
||||||
|
|
||||||
|
override val coroutineContext: CoroutineContext
|
||||||
|
get() = job + Dispatchers.Default
|
||||||
|
|
||||||
|
private var getAttachmentCheckKeyTries = 0
|
||||||
|
|
||||||
|
init {
|
||||||
|
val keyMatcher = Regexes.LIBRUS_ATTACHMENT_KEY.find(downloadLink)
|
||||||
|
|
||||||
|
if (keyMatcher != null) {
|
||||||
|
getAttachmentCheckKeyTries = 0
|
||||||
|
|
||||||
|
val attachmentKey = keyMatcher[1]
|
||||||
|
getAttachmentCheckKey(attachmentKey) {
|
||||||
|
downloadAttachment("${LIBRUS_SANDBOX_URL}CSDownload&singleUseKey=$attachmentKey", method = POST)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
downloadAttachment("$downloadLink/get", method = GET)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getAttachmentCheckKey(attachmentKey: String, callback: () -> Unit) {
|
||||||
|
sandboxGet(LibrusMessagesGetAttachment.TAG, "CSCheckKey",
|
||||||
|
parameters = mapOf("singleUseKey" to attachmentKey)) { json ->
|
||||||
|
|
||||||
|
when (json.getString("status")) {
|
||||||
|
"not_downloaded_yet" -> {
|
||||||
|
if (getAttachmentCheckKeyTries++ > 5) {
|
||||||
|
data.error(ApiError(LibrusMessagesGetAttachment.TAG, ERROR_FILE_DOWNLOAD)
|
||||||
|
.withApiResponse(json))
|
||||||
|
return@sandboxGet
|
||||||
|
}
|
||||||
|
launch {
|
||||||
|
delay(2000)
|
||||||
|
getAttachmentCheckKey(attachmentKey, callback)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
"ready" -> {
|
||||||
|
launch { callback() }
|
||||||
|
}
|
||||||
|
|
||||||
|
else -> {
|
||||||
|
data.error(ApiError(LibrusMessagesGetAttachment.TAG, EXCEPTION_LIBRUS_MESSAGES_REQUEST)
|
||||||
|
.withApiResponse(json))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun downloadAttachment(url: String, method: Int = GET) {
|
||||||
|
val targetFile = File(Utils.getStorageDir(), attachmentName)
|
||||||
|
|
||||||
|
sandboxGetFile(LibrusMessagesGetAttachment.TAG, url, targetFile, { file ->
|
||||||
|
|
||||||
|
val event = AttachmentGetEvent(
|
||||||
|
profileId,
|
||||||
|
owner,
|
||||||
|
attachmentId,
|
||||||
|
AttachmentGetEvent.TYPE_FINISHED,
|
||||||
|
file.absolutePath
|
||||||
|
)
|
||||||
|
|
||||||
|
val attachmentDataFile = File(Utils.getStorageDir(), ".${profileId}_${event.ownerId}_${event.attachmentId}")
|
||||||
|
Utils.writeStringToFile(attachmentDataFile, event.fileName)
|
||||||
|
|
||||||
|
EventBus.getDefault().postSticky(event)
|
||||||
|
|
||||||
|
onSuccess()
|
||||||
|
|
||||||
|
}) { written, _ ->
|
||||||
|
val event = AttachmentGetEvent(
|
||||||
|
profileId,
|
||||||
|
owner,
|
||||||
|
attachmentId,
|
||||||
|
AttachmentGetEvent.TYPE_PROGRESS,
|
||||||
|
bytesWritten = written
|
||||||
|
)
|
||||||
|
|
||||||
|
EventBus.getDefault().postSticky(event)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,44 @@
|
|||||||
|
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.synergia
|
||||||
|
|
||||||
|
import org.greenrobot.eventbus.EventBus
|
||||||
|
import org.jsoup.Jsoup
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusSynergia
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.events.EventGetEvent
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.full.EventFull
|
||||||
|
|
||||||
|
class LibrusSynergiaGetHomework(override val data: DataLibrus,
|
||||||
|
val event: EventFull,
|
||||||
|
val onSuccess: () -> Unit
|
||||||
|
) : LibrusSynergia(data, null) {
|
||||||
|
companion object {
|
||||||
|
const val TAG = "LibrusSynergiaGetHomework"
|
||||||
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
synergiaGet(TAG, "moje_zadania/podglad/${event.id}") { text ->
|
||||||
|
val doc = Jsoup.parse(text)
|
||||||
|
|
||||||
|
val table = doc.select("table.decorated tbody > tr")
|
||||||
|
|
||||||
|
event.topic = table[1].select("td")[1].text()
|
||||||
|
event.homeworkBody = table[5].select("td")[1].text()
|
||||||
|
|
||||||
|
event.attachmentIds = mutableListOf()
|
||||||
|
event.attachmentNames = mutableListOf()
|
||||||
|
table[6].select("a").forEach { a ->
|
||||||
|
val attachmentId = a.attr("href").split('/')
|
||||||
|
.last().toLongOrNull() ?: return@forEach
|
||||||
|
val filename = a.text()
|
||||||
|
event.attachmentIds?.add(attachmentId)
|
||||||
|
event.attachmentNames?.add(filename)
|
||||||
|
}
|
||||||
|
|
||||||
|
data.eventList.add(event)
|
||||||
|
data.eventListReplace = true
|
||||||
|
|
||||||
|
EventBus.getDefault().postSticky(EventGetEvent(event))
|
||||||
|
onSuccess()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -42,8 +42,6 @@ class LibrusSynergiaHomework(override val data: DataLibrus,
|
|||||||
doc.select("table.myHomeworkTable > tbody").firstOrNull()?.also { homeworkTable ->
|
doc.select("table.myHomeworkTable > tbody").firstOrNull()?.also { homeworkTable ->
|
||||||
val homeworkElements = homeworkTable.children()
|
val homeworkElements = homeworkTable.children()
|
||||||
|
|
||||||
val graphElements = doc.select("table[border].center td[align=left] tbody").first().children()
|
|
||||||
|
|
||||||
homeworkElements.forEachIndexed { i, el ->
|
homeworkElements.forEachIndexed { i, el ->
|
||||||
val elements = el.children()
|
val elements = el.children()
|
||||||
|
|
||||||
@ -63,26 +61,6 @@ class LibrusSynergiaHomework(override val data: DataLibrus,
|
|||||||
val lessons = data.db.timetableDao().getForDateNow(profileId, eventDate)
|
val lessons = data.db.timetableDao().getForDateNow(profileId, eventDate)
|
||||||
val startTime = lessons.firstOrNull { it.subjectId == subjectId }?.startTime
|
val startTime = lessons.firstOrNull { it.subjectId == subjectId }?.startTime
|
||||||
|
|
||||||
/*val moreInfo = graphElements[2 * i + 1].select("td[title]")
|
|
||||||
.attr("title").trim()*/
|
|
||||||
|
|
||||||
var description = ""
|
|
||||||
|
|
||||||
graphElements.forEach { graphEl ->
|
|
||||||
graphEl.select("td[title]")?.also {
|
|
||||||
val title = it.attr("title")
|
|
||||||
val r = "Temat: (.*?)<br.?/>Data udostępnienia: (.*?)<br.?/>Termin wykonania: (.*?)<br.?/>Treść: (.*)"
|
|
||||||
.toRegex(RegexOption.DOT_MATCHES_ALL).find(title) ?: return@forEach
|
|
||||||
val gTopic = r[1].trim()
|
|
||||||
val gAddedDate = Date.fromY_m_d(r[2].trim())
|
|
||||||
val gEventDate = Date.fromY_m_d(r[3].trim())
|
|
||||||
if (gTopic == topic && gAddedDate == addedDate && gEventDate == eventDate) {
|
|
||||||
description = r[4].replace("<br.?/>".toRegex(), "\n").trim()
|
|
||||||
return@forEach
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val seen = when (profile.empty) {
|
val seen = when (profile.empty) {
|
||||||
true -> true
|
true -> true
|
||||||
else -> eventDate < Date.getToday()
|
else -> eventDate < Date.getToday()
|
||||||
@ -93,7 +71,7 @@ class LibrusSynergiaHomework(override val data: DataLibrus,
|
|||||||
id = id,
|
id = id,
|
||||||
date = eventDate,
|
date = eventDate,
|
||||||
time = startTime,
|
time = startTime,
|
||||||
topic = "$topic\n$description",
|
topic = topic,
|
||||||
color = null,
|
color = null,
|
||||||
type = Event.TYPE_HOMEWORK,
|
type = Event.TYPE_HOMEWORK,
|
||||||
teacherId = teacherId,
|
teacherId = teacherId,
|
||||||
|
@ -0,0 +1,25 @@
|
|||||||
|
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.synergia
|
||||||
|
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.LIBRUS_SYNERGIA_HOMEWORK_ATTACHMENT_URL
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusSynergia
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.messages.LibrusSandboxDownloadAttachment
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.full.EventFull
|
||||||
|
|
||||||
|
class LibrusSynergiaHomeworkGetAttachment(
|
||||||
|
override val data: DataLibrus,
|
||||||
|
val event: EventFull,
|
||||||
|
val attachmentId: Long,
|
||||||
|
val attachmentName: String,
|
||||||
|
val onSuccess: () -> Unit
|
||||||
|
) : LibrusSynergia(data, null) {
|
||||||
|
companion object {
|
||||||
|
const val TAG = "LibrusSynergiaHomeworkGetAttachment"
|
||||||
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
redirectUrlGet(TAG, "$LIBRUS_SYNERGIA_HOMEWORK_ATTACHMENT_URL/$attachmentId") { url ->
|
||||||
|
LibrusSandboxDownloadAttachment(data, url, event, attachmentId, attachmentName, onSuccess)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -39,8 +39,8 @@ class MobidziennikWebGetHomework(override val data: DataMobidziennik,
|
|||||||
|
|
||||||
event.attachmentIds = mutableListOf()
|
event.attachmentIds = mutableListOf()
|
||||||
event.attachmentNames = mutableListOf()
|
event.attachmentNames = mutableListOf()
|
||||||
Regexes.MOBIDZIENNIK_HOMEWORK_ATTACHMENT.findAll(tableRow).forEach {
|
Regexes.MOBIDZIENNIK_HOMEWORK_ATTACHMENT.findAll(tableRow).onEach {
|
||||||
event.attachmentIds?.add(it[1].toLongOrNull() ?: return@forEach)
|
event.attachmentIds?.add(it[1].toLongOrNull() ?: return@onEach)
|
||||||
event.attachmentNames?.add(it[2])
|
event.attachmentNames?.add(it[2])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,4 +6,4 @@ package pl.szczodrzynski.edziennik.data.api.events
|
|||||||
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.full.EventFull
|
import pl.szczodrzynski.edziennik.data.db.full.EventFull
|
||||||
|
|
||||||
data class EventGetEvent(val message: EventFull)
|
data class EventGetEvent(val event: EventFull)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user