WIP Set up

Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
This commit is contained in:
rapterjet2004 2024-05-21 11:22:58 -05:00
parent 5242f9cd2b
commit 68681b50de
No known key found for this signature in database
GPG Key ID: 3AA5FDFED7944099
7 changed files with 219 additions and 0 deletions

View File

@ -0,0 +1,20 @@
/*
* Nextcloud Talk - Android Client
*
* SPDX-FileCopyrightText: 2024 Julius Linus <juliuslinus1@gmail.com>
* SPDX-License-Identifier: GPL-3.0-or-later
*/
package com.nextcloud.talk.chat.data.database
import androidx.room.Dao
import androidx.room.Query
import com.nextcloud.talk.chat.data.model.ChatMessageEntity
@Dao
abstract class ChatDao {
@Query(
"SELECT * FROM Messages WHERE token = :roomToken"
)
abstract fun pullChatMessages(roomToken: String): List<ChatMessageEntity>
}

View File

@ -0,0 +1,85 @@
/*
* Nextcloud Talk - Android Client
*
* SPDX-FileCopyrightText: 2024 Julius Linus <juliuslinus1@gmail.com>
* SPDX-License-Identifier: GPL-3.0-or-later
*/
package com.nextcloud.talk.chat.data.model
import android.os.Parcelable
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.TypeConverters
import com.nextcloud.talk.data.source.local.converters.HashMapHashMapConverter
import com.nextcloud.talk.models.json.chat.ChatMessage
import com.nextcloud.talk.models.json.converters.EnumSystemMessageTypeConverter
import kotlinx.parcelize.Parcelize
@Parcelize
@Entity(tableName = "Messages", primaryKeys = ["id"])
@TypeConverters(EnumSystemMessageTypeConverter::class, HashMapHashMapConverter::class)
data class ChatMessageEntity(
@ColumnInfo(name = "id")
var jsonMessageId: Int = 0,
@ColumnInfo(name = "token")
var token: String? = null,
// guests or users
@ColumnInfo(name = "actorType")
var actorType: String? = null,
@ColumnInfo(name = "actorId")
var actorId: String? = null,
// send when crafting a message
@ColumnInfo(name = "actorDisplayName")
var actorDisplayName: String? = null,
@ColumnInfo(name = "timestamp")
var timestamp: Long = 0,
// send when crafting a message, max 1000 lines
@ColumnInfo(name = "message")
var message: String? = null,
@ColumnInfo(name = "messageParameters")
var messageParameters: HashMap<String?, HashMap<String?, String?>>? = null,
@ColumnInfo(name = "systemMessage")
var systemMessageType: ChatMessage.SystemMessageType? = null,
@ColumnInfo(name = "isReplyable")
var replyable: Boolean = false,
@ColumnInfo(name = "parent")
var parentMessage: ChatMessage? = null,
@ColumnInfo(name = "messageType")
var messageType: String? = null,
@ColumnInfo(name = "reactions")
var reactions: LinkedHashMap<String, Int>? = null,
@ColumnInfo(name = "reactionsSelf")
var reactionsSelf: ArrayList<String>? = null,
@ColumnInfo(name = "expirationTimestamp")
var expirationTimestamp: Int = 0,
@ColumnInfo(name = "markdown")
var renderMarkdown: Boolean? = null,
@ColumnInfo(name = "lastEditActorDisplayName")
var lastEditActorDisplayName: String? = null,
@ColumnInfo(name = "lastEditActorId")
var lastEditActorId: String? = null,
@ColumnInfo(name = "lastEditActorType")
var lastEditActorType: String? = null,
@ColumnInfo(name = "lastEditTimestamp")
var lastEditTimestamp: Long = 0
) : Parcelable

View File

@ -0,0 +1,83 @@
/*
* Nextcloud Talk - Android Client
*
* SPDX-FileCopyrightText: 2024 Julius Linus <juliuslinus1@gmail.com>
* SPDX-License-Identifier: GPL-3.0-or-later
*/
package com.nextcloud.talk.chat.data.model
import android.os.Parcelable
import com.bluelinelabs.logansquare.annotation.JsonField
import com.bluelinelabs.logansquare.annotation.JsonObject
import com.nextcloud.talk.models.json.chat.ChatMessage
import com.nextcloud.talk.models.json.converters.EnumSystemMessageTypeConverter
import kotlinx.parcelize.Parcelize
// TODO map it to ChatMessage
@Parcelize
@JsonObject
data class ChatMessageJson(
@JsonField(name = ["id"])
var jsonMessageId: Int = 0,
@JsonField(name = ["token"])
var token: String? = null,
// guests or users
@JsonField(name = ["actorType"])
var actorType: String? = null,
@JsonField(name = ["actorId"])
var actorId: String? = null,
// send when crafting a message
@JsonField(name = ["actorDisplayName"])
var actorDisplayName: String? = null,
@JsonField(name = ["timestamp"])
var timestamp: Long = 0,
// send when crafting a message, max 1000 lines
@JsonField(name = ["message"])
var message: String? = null,
@JsonField(name = ["messageParameters"])
var messageParameters: HashMap<String?, HashMap<String?, String?>>? = null,
@JsonField(name = ["systemMessage"], typeConverter = EnumSystemMessageTypeConverter::class)
var systemMessageType: ChatMessage.SystemMessageType? = null,
@JsonField(name = ["isReplyable"])
var replyable: Boolean = false,
@JsonField(name = ["parent"])
var parentMessage: ChatMessage? = null,
@JsonField(name = ["messageType"])
var messageType: String? = null,
@JsonField(name = ["reactions"])
var reactions: LinkedHashMap<String, Int>? = null,
@JsonField(name = ["reactionsSelf"])
var reactionsSelf: ArrayList<String>? = null,
@JsonField(name = ["expirationTimestamp"])
var expirationTimestamp: Int = 0,
@JsonField(name = ["markdown"])
var renderMarkdown: Boolean? = null,
@JsonField(name = ["lastEditActorDisplayName"])
var lastEditActorDisplayName: String? = null,
@JsonField(name = ["lastEditActorId"])
var lastEditActorId: String? = null,
@JsonField(name = ["lastEditActorType"])
var lastEditActorType: String? = null,
@JsonField(name = ["lastEditTimestamp"])
var lastEditTimestamp: Long = 0
) : Parcelable

View File

@ -0,0 +1,13 @@
/*
* Nextcloud Talk - Android Client
*
* SPDX-FileCopyrightText: 2024 Your Name <your@email.com>
* SPDX-License-Identifier: GPL-3.0-or-later
*/
package com.nextcloud.talk.chat.data.utils
class ChatMessageEntityMapper {
// TODO
}

View File

@ -0,0 +1,13 @@
/*
* Nextcloud Talk - Android Client
*
* SPDX-FileCopyrightText: 2024 Your Name <your@email.com>
* SPDX-License-Identifier: GPL-3.0-or-later
*/
package com.nextcloud.talk.chat.data.utils
class ChatMessageJsonMapper {
// TODO
}

View File

@ -28,6 +28,8 @@ import kotlinx.parcelize.Parcelize
import java.security.MessageDigest
import java.util.Date
// TODO remove all Json tags, map ChatMessageJson to this
@Parcelize
@JsonObject
data class ChatMessage(

View File

@ -8,6 +8,7 @@
*/
package com.nextcloud.talk.models.json.converters
import androidx.room.TypeConverter
import com.bluelinelabs.logansquare.typeconverters.StringBasedTypeConverter
import com.nextcloud.talk.models.json.chat.ChatMessage
import com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.AUDIO_RECORDING_STARTED
@ -75,6 +76,7 @@ import com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.USER_RE
*
*/
class EnumSystemMessageTypeConverter : StringBasedTypeConverter<ChatMessage.SystemMessageType>() {
@TypeConverter
override fun getFromString(string: String): ChatMessage.SystemMessageType {
return when (string) {
"conversation_created" -> CONVERSATION_CREATED
@ -141,6 +143,7 @@ class EnumSystemMessageTypeConverter : StringBasedTypeConverter<ChatMessage.Syst
}
@Suppress("Detekt.ComplexMethod")
@TypeConverter
override fun convertToString(`object`: ChatMessage.SystemMessageType?): String {
return when (`object`) {
null -> ""