Merge branch '1722-lastChatActivity' into 'master'

Include last private chat activity in list of contacts

Closes #1722

See merge request briar/briar!1242
This commit is contained in:
akwizgran
2020-04-27 09:20:08 +00:00
6 changed files with 23 additions and 10 deletions

View File

@@ -67,7 +67,8 @@ Returns a JSON array of contacts:
"contactId": 1,
"alias" : "A local nickname",
"handshakePublicKey": "XnYRd7a7E4CTqgAvh4hCxh/YZ0EPscxknB9ZcEOpSzY=",
"verified": true
"verified": true,
"lastChatActivity": 1557838312175
}
```

View File

@@ -17,6 +17,7 @@ import org.briarproject.bramble.api.event.Event
import org.briarproject.bramble.api.event.EventListener
import org.briarproject.bramble.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH
import org.briarproject.bramble.util.StringUtils.toUtf8
import org.briarproject.briar.api.conversation.ConversationManager
import org.briarproject.briar.headless.event.WebSocketController
import org.briarproject.briar.headless.getContactIdFromPathParam
import org.briarproject.briar.headless.getFromJson
@@ -38,6 +39,7 @@ internal class ContactControllerImpl
@Inject
constructor(
private val contactManager: ContactManager,
private val conversationManager: ConversationManager,
private val objectMapper: ObjectMapper,
private val webSocket: WebSocketController
) : ContactController, EventListener {
@@ -61,7 +63,8 @@ constructor(
override fun list(ctx: Context): Context {
val contacts = contactManager.contacts.map { contact ->
contact.output()
val latestMsgTime = conversationManager.getGroupCount(contact.id).latestMsgTime
contact.output(latestMsgTime)
}
return ctx.json(contacts)
}

View File

@@ -3,12 +3,14 @@ package org.briarproject.briar.headless.contact
import org.briarproject.bramble.api.contact.Contact
import org.briarproject.bramble.api.contact.event.ContactAddedEvent
import org.briarproject.bramble.identity.output
import org.briarproject.briar.api.conversation.ConversationManager
import org.briarproject.briar.headless.json.JsonDict
internal fun Contact.output() = JsonDict(
internal fun Contact.output(latestMsgTime: Long) = JsonDict(
"contactId" to id.int,
"author" to author.output(),
"verified" to isVerified
"verified" to isVerified,
"lastChatActivity" to latestMsgTime
).apply {
alias?.let { put("alias", it) }
handshakePublicKey?.let { put("handshakePublicKey", it.encoded) }

View File

@@ -14,6 +14,7 @@ import org.briarproject.bramble.api.sync.Message
import org.briarproject.bramble.api.system.Clock
import org.briarproject.bramble.test.TestUtils.*
import org.briarproject.bramble.util.StringUtils.getRandomString
import org.briarproject.briar.api.conversation.ConversationManager
import org.briarproject.briar.headless.event.WebSocketController
import org.skyscreamer.jsonassert.JSONAssert.assertEquals
import org.skyscreamer.jsonassert.JSONCompareMode.STRICT
@@ -23,6 +24,7 @@ import javax.servlet.http.HttpServletResponse
abstract class ControllerTest {
protected val contactManager = mockk<ContactManager>()
protected val conversationManager = mockk<ConversationManager>()
protected val identityManager = mockk<IdentityManager>()
protected val clock = mockk<Clock>()
protected val ctx = mockk<Context>()

View File

@@ -34,8 +34,12 @@ internal class ContactControllerTest : ControllerTest() {
private val pendingContact = getPendingContact()
private val controller =
ContactControllerImpl(contactManager, objectMapper, webSocketController)
private val controller = ContactControllerImpl(
contactManager,
conversationManager,
objectMapper,
webSocketController
)
@Test
fun testEmptyContactList() {
@@ -47,7 +51,8 @@ internal class ContactControllerTest : ControllerTest() {
@Test
fun testList() {
every { contactManager.contacts } returns listOf(contact)
every { ctx.json(listOf(contact.output())) } returns ctx
every { conversationManager.getGroupCount(contact.id).latestMsgTime } returns timestamp
every { ctx.json(listOf(contact.output(timestamp))) } returns ctx
controller.list(ctx)
}
@@ -271,10 +276,11 @@ internal class ContactControllerTest : ControllerTest() {
"author": ${toJson(author.output())},
"alias" : "${contact.alias}",
"handshakePublicKey": ${toJson(contact.handshakePublicKey!!.encoded)},
"verified": ${contact.isVerified}
"verified": ${contact.isVerified},
"lastChatActivity": $timestamp
}
"""
assertJsonEquals(json, contact.output())
assertJsonEquals(json, contact.output(timestamp))
}
@Test

View File

@@ -32,7 +32,6 @@ import org.junit.jupiter.api.Test
internal class MessagingControllerImplTest : ControllerTest() {
private val messagingManager = mockk<MessagingManager>()
private val conversationManager = mockk<ConversationManager>()
private val privateMessageFactory = mockk<PrivateMessageFactory>()
private val dbExecutor = ImmediateExecutor()