forked from github/szkolny
[Vulcan/Hebe] Implement sending messages.
This commit is contained in:
parent
1eecd24d91
commit
b599d679c4
@ -538,6 +538,12 @@ fun String.md5(): String {
|
|||||||
return BigInteger(1, md.digest(toByteArray())).toString(16).padStart(32, '0')
|
return BigInteger(1, md.digest(toByteArray())).toString(16).padStart(32, '0')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun String.sha1Hex(): String {
|
||||||
|
val md = MessageDigest.getInstance("SHA-1")
|
||||||
|
md.update(toByteArray())
|
||||||
|
return md.digest().joinToString("") { "%02x".format(it) }
|
||||||
|
}
|
||||||
|
|
||||||
fun String.sha256(): ByteArray {
|
fun String.sha256(): ByteArray {
|
||||||
val md = MessageDigest.getInstance("SHA-256")
|
val md = MessageDigest.getInstance("SHA-256")
|
||||||
md.update(toByteArray())
|
md.update(toByteArray())
|
||||||
|
@ -139,6 +139,7 @@ const val VULCAN_HEBE_ENDPOINT_NOTICES = "api/mobile/note"
|
|||||||
const val VULCAN_HEBE_ENDPOINT_ATTENDANCE = "api/mobile/lesson"
|
const val VULCAN_HEBE_ENDPOINT_ATTENDANCE = "api/mobile/lesson"
|
||||||
const val VULCAN_HEBE_ENDPOINT_MESSAGES = "api/mobile/message"
|
const val VULCAN_HEBE_ENDPOINT_MESSAGES = "api/mobile/message"
|
||||||
const val VULCAN_HEBE_ENDPOINT_MESSAGES_STATUS = "api/mobile/message/status"
|
const val VULCAN_HEBE_ENDPOINT_MESSAGES_STATUS = "api/mobile/message/status"
|
||||||
|
const val VULCAN_HEBE_ENDPOINT_MESSAGES_SEND = "api/mobile/message"
|
||||||
const val VULCAN_HEBE_ENDPOINT_LUCKY_NUMBER = "api/mobile/school/lucky"
|
const val VULCAN_HEBE_ENDPOINT_LUCKY_NUMBER = "api/mobile/school/lucky"
|
||||||
|
|
||||||
const val EDUDZIENNIK_USER_AGENT = "Szkolny.eu/${BuildConfig.VERSION_NAME}"
|
const val EDUDZIENNIK_USER_AGENT = "Szkolny.eu/${BuildConfig.VERSION_NAME}"
|
||||||
|
@ -14,6 +14,7 @@ import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.api.VulcanApiAt
|
|||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.api.VulcanApiMessagesChangeStatus
|
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.api.VulcanApiMessagesChangeStatus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.api.VulcanApiSendMessage
|
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.api.VulcanApiSendMessage
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.hebe.VulcanHebeMessagesChangeStatus
|
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.hebe.VulcanHebeMessagesChangeStatus
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.hebe.VulcanHebeSendMessage
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.firstlogin.VulcanFirstLogin
|
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.firstlogin.VulcanFirstLogin
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.login.VulcanLogin
|
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.login.VulcanLogin
|
||||||
import pl.szczodrzynski.edziennik.data.api.events.AttachmentGetEvent
|
import pl.szczodrzynski.edziennik.data.api.events.AttachmentGetEvent
|
||||||
@ -135,6 +136,15 @@ class Vulcan(val app: App, val profile: Profile?, val loginStore: LoginStore, va
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun sendMessage(recipients: List<Teacher>, subject: String, text: String) {
|
override fun sendMessage(recipients: List<Teacher>, subject: String, text: String) {
|
||||||
|
if (loginStore.mode != LOGIN_MODE_VULCAN_API) {
|
||||||
|
login(LOGIN_METHOD_VULCAN_HEBE) {
|
||||||
|
VulcanHebeSendMessage(data, recipients, subject, text) {
|
||||||
|
completed()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
login(LOGIN_METHOD_VULCAN_API) {
|
login(LOGIN_METHOD_VULCAN_API) {
|
||||||
VulcanApiSendMessage(data, recipients, subject, text) {
|
VulcanApiSendMessage(data, recipients, subject, text) {
|
||||||
completed()
|
completed()
|
||||||
|
@ -0,0 +1,82 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Kuba Szczodrzyński 2021-2-22.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.hebe
|
||||||
|
|
||||||
|
import com.google.gson.JsonObject
|
||||||
|
import org.greenrobot.eventbus.EventBus
|
||||||
|
import pl.szczodrzynski.edziennik.*
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.VULCAN_HEBE_ENDPOINT_MESSAGES_SEND
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.DataVulcan
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.VulcanHebe
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.events.MessageSentEvent
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Message
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Metadata
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.entity.Teacher
|
||||||
|
|
||||||
|
class VulcanHebeSendMessage(
|
||||||
|
override val data: DataVulcan,
|
||||||
|
val recipients: List<Teacher>,
|
||||||
|
val subject: String,
|
||||||
|
val text: String,
|
||||||
|
val onSuccess: () -> Unit
|
||||||
|
) : VulcanHebe(data, null) {
|
||||||
|
companion object {
|
||||||
|
const val TAG = "VulcanHebeSendMessage"
|
||||||
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
val recipientsArray = JsonArray()
|
||||||
|
recipients.forEach { teacher ->
|
||||||
|
recipientsArray += JsonObject(
|
||||||
|
"Address" to teacher.fullNameLastFirst,
|
||||||
|
"LoginId" to (teacher.loginId?.toIntOrNull() ?: return@forEach),
|
||||||
|
"Initials" to teacher.initialsLastFirst,
|
||||||
|
"AddressHash" to teacher.fullNameLastFirst.sha1Hex()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
val senderName = (profile?.accountName ?: profile?.studentNameLong)
|
||||||
|
?.swapFirstLastName() ?: ""
|
||||||
|
val sender = JsonObject(
|
||||||
|
"Address" to senderName,
|
||||||
|
"LoginId" to data.studentLoginId.toString(),
|
||||||
|
"Initials" to senderName.getNameInitials(),
|
||||||
|
"AddressHash" to senderName.sha1Hex()
|
||||||
|
)
|
||||||
|
|
||||||
|
apiPost(
|
||||||
|
TAG,
|
||||||
|
VULCAN_HEBE_ENDPOINT_MESSAGES_SEND,
|
||||||
|
payload = JsonObject(
|
||||||
|
"Status" to 1,
|
||||||
|
"Sender" to sender,
|
||||||
|
"DateSent" to null,
|
||||||
|
"DateRead" to null,
|
||||||
|
"Content" to text,
|
||||||
|
"Receiver" to recipientsArray,
|
||||||
|
"Id" to 0,
|
||||||
|
"Subject" to subject,
|
||||||
|
"Attachments" to null,
|
||||||
|
"Self" to null
|
||||||
|
)
|
||||||
|
) { json: JsonObject, _ ->
|
||||||
|
val messageId = json.getLong("Id")
|
||||||
|
|
||||||
|
if (messageId == null) {
|
||||||
|
// TODO error
|
||||||
|
return@apiPost
|
||||||
|
}
|
||||||
|
|
||||||
|
VulcanHebeMessages(data, null) {
|
||||||
|
val message = data.messageList.firstOrNull { it.type == Message.TYPE_SENT && it.subject == subject }
|
||||||
|
val metadata = data.metadataList.firstOrNull { it.thingType == Metadata.TYPE_MESSAGE && it.thingId == messageId }
|
||||||
|
val event = MessageSentEvent(data.profileId, message, message?.addedDate)
|
||||||
|
|
||||||
|
EventBus.getDefault().postSticky(event)
|
||||||
|
onSuccess()
|
||||||
|
}.getMessages(Message.TYPE_SENT)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -11,6 +11,7 @@ import androidx.room.Entity
|
|||||||
import androidx.room.Ignore
|
import androidx.room.Ignore
|
||||||
import pl.szczodrzynski.edziennik.R
|
import pl.szczodrzynski.edziennik.R
|
||||||
import pl.szczodrzynski.edziennik.fixName
|
import pl.szczodrzynski.edziennik.fixName
|
||||||
|
import pl.szczodrzynski.edziennik.getNameInitials
|
||||||
import pl.szczodrzynski.edziennik.join
|
import pl.szczodrzynski.edziennik.join
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@ -180,6 +181,9 @@ open class Teacher {
|
|||||||
@delegate:Ignore
|
@delegate:Ignore
|
||||||
val fullNameLastFirst by lazy { "$surname $name".fixName() }
|
val fullNameLastFirst by lazy { "$surname $name".fixName() }
|
||||||
|
|
||||||
|
@delegate:Ignore
|
||||||
|
val initialsLastFirst by lazy { fullNameLastFirst.getNameInitials() }
|
||||||
|
|
||||||
val shortName: String
|
val shortName: String
|
||||||
get() = (if (name == null || name?.length == 0) "" else name!![0].toString()) + "." + surname
|
get() = (if (name == null || name?.length == 0) "" else name!![0].toString()) + "." + surname
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user