diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/Extensions.kt b/app/src/main/java/pl/szczodrzynski/edziennik/Extensions.kt index d323a796..fb185174 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/Extensions.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/Extensions.kt @@ -95,6 +95,15 @@ fun String.swapFirstLastName(): String { } } +fun String.getFirstLastName(): Pair? { + return this.split(" ").let { + if (it.size >= 2) Pair(it[0], it[1]) + else null + } +} + +fun String.getLastFirstName() = this.getFirstLastName() + fun changeStringCase(s: String): String { val delimiters = " '-/" val sb = StringBuilder() @@ -435,4 +444,4 @@ fun LiveData.observeOnce(lifecycleOwner: LifecycleOwner, observer: Observ removeObserver(this) } }) -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiMessagesInbox.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiMessagesInbox.kt index 3ce5e202..10b516a7 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiMessagesInbox.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiMessagesInbox.kt @@ -46,13 +46,10 @@ class VulcanApiMessagesInbox(override val data: DataVulcan, val onSuccess: () -> val senderLoginId = message.getString("NadawcaId") ?: return@forEach val senderId = data.teacherList .singleOrNull { it.loginId == senderLoginId }?.id ?: { + val senderName = message.getString("Nadawca") ?: "" - val senderNameSplit = senderName.split(" ") - - if (senderNameSplit.size >= 2) { - val senderLastName = senderNameSplit[0] - val senderFirstName = senderNameSplit[1] + senderName.getLastFirstName()?.let { (senderLastName, senderFirstName) -> val teacherObject = Teacher( profileId, -1 * Utils.crc16(senderName.toByteArray()).toLong(), @@ -62,8 +59,8 @@ class VulcanApiMessagesInbox(override val data: DataVulcan, val onSuccess: () -> ) data.teacherList.put(teacherObject.id, teacherObject) teacherObject.id - } else -1 - }.invoke() + } + }.invoke() ?: -1 val sentDate = message.getLong("DataWyslaniaUnixEpoch")?.let { it * 1000 } ?: -1 diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiMessagesSent.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiMessagesSent.kt index 390c1efc..87899a36 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiMessagesSent.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiMessagesSent.kt @@ -14,6 +14,8 @@ import pl.szczodrzynski.edziennik.data.db.modules.messages.Message import pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipient import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata +import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher +import pl.szczodrzynski.edziennik.utils.Utils import pl.szczodrzynski.edziennik.utils.models.Date class VulcanApiMessagesSent(override val data: DataVulcan, val onSuccess: () -> Unit) : VulcanApi(data) { @@ -23,11 +25,11 @@ class VulcanApiMessagesSent(override val data: DataVulcan, val onSuccess: () -> init { data.profile?.also { profile -> - val startDate: String = when (profile.empty) { - true -> profile.getSemesterStart(profile.currentSemester).stringY_m_d - else -> Date.getToday().stepForward(0, -1, 0).stringY_m_d + val startDate: Long = when (profile.empty) { + true -> profile.getSemesterStart(profile.currentSemester).inUnix + else -> Date.getToday().stepForward(0, -1, 0).inUnix } - val endDate: String = profile.getSemesterEnd(profile.currentSemester).stringY_m_d + val endDate: Long = profile.getSemesterEnd(profile.currentSemester).inUnix apiGet(TAG, VULCAN_API_ENDPOINT_MESSAGES_SENT, parameters = mapOf( "DataPoczatkowa" to startDate, @@ -43,23 +45,27 @@ class VulcanApiMessagesSent(override val data: DataVulcan, val onSuccess: () -> val unreadBy = message.getInt("Nieprzeczytane") ?: 0 val sentDate = message.getLong("DataWyslaniaUnixEpoch")?.let { it * 1000 } ?: -1 - val messageObject = Message( - profileId, - id, - subject, - body, - TYPE_SENT, - -1, - -1 - ) - message.getJsonArray("Adresaci")?.asJsonObjectList() - ?.onEach { recipient -> + ?.onEach { receiver -> - val recipientLoginId = recipient.getString("LoginId") - ?: return@onEach - val recipientId = data.teacherList.singleOrNull { it.loginId == recipientLoginId }?.id + val receiverLoginId = receiver.getString("LoginId") ?: return@onEach + val receiverId = data.teacherList.singleOrNull { it.loginId == receiverLoginId }?.id + ?: { + val receiverName = receiver.getString("Nazwa") ?: "" + + receiverName.getLastFirstName()?.let { (receiverLastName, receiverFirstName) -> + val teacherObject = Teacher( + profileId, + -1 * Utils.crc16(receiverName.toByteArray()).toLong(), + receiverFirstName, + receiverLastName, + receiverLoginId + ) + data.teacherList.put(teacherObject.id, teacherObject) + teacherObject.id + } + }.invoke() ?: -1 val readDate: Long = when (readBy) { 0 -> 0 @@ -71,7 +77,7 @@ class VulcanApiMessagesSent(override val data: DataVulcan, val onSuccess: () -> val messageRecipientObject = MessageRecipient( profileId, - recipientId, + receiverId, -1, readDate, id @@ -80,6 +86,16 @@ class VulcanApiMessagesSent(override val data: DataVulcan, val onSuccess: () -> data.messageRecipientList.add(messageRecipientObject) } + val messageObject = Message( + profileId, + id, + subject, + body, + TYPE_SENT, + -1, + -1 + ) + data.messageIgnoreList.add(messageObject) data.metadataList.add(Metadata( profileId, diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessageFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessageFragment.kt index 401895bf..c8e1a53a 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessageFragment.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/messages/MessageFragment.kt @@ -97,7 +97,7 @@ class MessageFragment : Fragment(), CoroutineScope { val msg = app.db.messageDao().getById(App.profileId, messageId)?.also { it.recipients = app.db.messageRecipientDao().getAllByMessageId(it.profileId, it.id) if (it.body != null && !it.seen) { - app.db.metadataDao().setSeen(it.profileId, message, true) + app.db.metadataDao().setSeen(it.profileId, it, true) } } msg