Browse Source

Handle account name tags

tags/v0.1.0
Chris Smith 5 years ago
parent
commit
13d0783ac6

+ 2
- 3
src/main/kotlin/com/dmdirc/ktirc/messages/JoinProcessor.kt View File

@@ -2,14 +2,13 @@ package com.dmdirc.ktirc.messages
2 2
 
3 3
 import com.dmdirc.ktirc.events.ChannelJoined
4 4
 import com.dmdirc.ktirc.model.IrcMessage
5
-import com.dmdirc.ktirc.model.asUser
6 5
 
7 6
 internal class JoinProcessor : MessageProcessor {
8 7
 
9 8
     override val commands = arrayOf("JOIN")
10 9
 
11
-    override fun process(message: IrcMessage) = message.prefix?.let {
12
-        listOf(ChannelJoined(message.time, it.asUser(), String(message.params[0])))
10
+    override fun process(message: IrcMessage) = message.sourceUser?.let { user ->
11
+        listOf(ChannelJoined(message.time, user, String(message.params[0])))
13 12
     } ?: emptyList()
14 13
 
15 14
 }

+ 2
- 3
src/main/kotlin/com/dmdirc/ktirc/messages/PartProcessor.kt View File

@@ -2,14 +2,13 @@ package com.dmdirc.ktirc.messages
2 2
 
3 3
 import com.dmdirc.ktirc.events.ChannelParted
4 4
 import com.dmdirc.ktirc.model.IrcMessage
5
-import com.dmdirc.ktirc.model.asUser
6 5
 
7 6
 internal class PartProcessor : MessageProcessor {
8 7
 
9 8
     override val commands = arrayOf("PART")
10 9
 
11
-    override fun process(message: IrcMessage) = message.prefix?.let {
12
-        listOf(ChannelParted(message.time, it.asUser(), message.channel, message.reason))
10
+    override fun process(message: IrcMessage) = message.sourceUser?.let { user ->
11
+        listOf(ChannelParted(message.time, user, message.channel, message.reason))
13 12
     } ?: emptyList()
14 13
 
15 14
     private val IrcMessage.channel

+ 2
- 3
src/main/kotlin/com/dmdirc/ktirc/messages/PrivmsgProcessor.kt View File

@@ -2,14 +2,13 @@ package com.dmdirc.ktirc.messages
2 2
 
3 3
 import com.dmdirc.ktirc.events.MessageReceived
4 4
 import com.dmdirc.ktirc.model.IrcMessage
5
-import com.dmdirc.ktirc.model.asUser
6 5
 
7 6
 internal class PrivmsgProcessor : MessageProcessor {
8 7
 
9 8
     override val commands = arrayOf("PRIVMSG")
10 9
 
11
-    override fun process(message: IrcMessage) = message.prefix?.let {
12
-        listOf(MessageReceived(message.time, it.asUser(), String(message.params[0]), String(message.params[1])))
10
+    override fun process(message: IrcMessage) = message.sourceUser?.let { user ->
11
+        listOf(MessageReceived(message.time, user, String(message.params[0]), String(message.params[1])))
13 12
     } ?: emptyList()
14 13
 
15 14
 }

+ 2
- 3
src/main/kotlin/com/dmdirc/ktirc/messages/QuitProcessor.kt View File

@@ -2,14 +2,13 @@ package com.dmdirc.ktirc.messages
2 2
 
3 3
 import com.dmdirc.ktirc.events.UserQuit
4 4
 import com.dmdirc.ktirc.model.IrcMessage
5
-import com.dmdirc.ktirc.model.asUser
6 5
 
7 6
 internal class QuitProcessor : MessageProcessor {
8 7
 
9 8
     override val commands = arrayOf("QUIT")
10 9
 
11
-    override fun process(message: IrcMessage) = message.prefix?.let {
12
-        listOf(UserQuit(message.time, it.asUser(), message.reason))
10
+    override fun process(message: IrcMessage) = message.sourceUser?.let { user ->
11
+        listOf(UserQuit(message.time, user, message.reason))
13 12
     } ?: emptyList()
14 13
 
15 14
     private val IrcMessage.reason

+ 6
- 0
src/main/kotlin/com/dmdirc/ktirc/model/IrcMessage.kt View File

@@ -17,6 +17,12 @@ class IrcMessage(val tags: Map<MessageTag, String>, val prefix: ByteArray?, val
17 17
         currentTimeProvider()
18 18
     }
19 19
 
20
+    val sourceUser by lazy {
21
+        prefix?.asUser()?.apply {
22
+            tags[MessageTag.AccountName]?.let { account = it }
23
+        }
24
+    }
25
+
20 26
 }
21 27
 
22 28
 sealed class MessageTag(val name: String) {

+ 8
- 1
src/main/kotlin/com/dmdirc/ktirc/model/User.kt View File

@@ -1,6 +1,13 @@
1 1
 package com.dmdirc.ktirc.model
2 2
 
3
-data class User(val nickname: String, val ident: String? = null, val hostname: String? = null)
3
+data class User(
4
+        var nickname: String,
5
+        var ident: String? = null,
6
+        var hostname: String? = null,
7
+        var account: String? = null,
8
+        var realName: String? = null,
9
+        var awayMessage: String? = null
10
+)
4 11
 
5 12
 fun ByteArray.asUser(): User {
6 13
     val string = String(this)

+ 23
- 0
src/test/kotlin/com/dmdirc/ktirc/model/IrcMessageTest.kt View File

@@ -2,6 +2,7 @@ package com.dmdirc.ktirc.model
2 2
 
3 3
 import com.dmdirc.ktirc.TestConstants
4 4
 import org.junit.jupiter.api.Assertions.assertEquals
5
+import org.junit.jupiter.api.Assertions.assertNull
5 6
 import org.junit.jupiter.api.Test
6 7
 import java.time.LocalDateTime
7 8
 import java.time.ZoneId
@@ -29,4 +30,26 @@ internal class IrcMessageTest {
29 30
         assertEquals(LocalDateTime.parse("1995-09-15T09:00:00"), message.time)
30 31
     }
31 32
 
33
+    @Test
34
+    fun `Can parse the prefix as a source user`() {
35
+        val message = IrcMessage(emptyMap(), "acidBurn!libby@root.localhost".toByteArray(), "", emptyList())
36
+        val user = message.sourceUser!!
37
+
38
+        assertEquals("acidBurn", user.nickname)
39
+        assertEquals("libby", user.ident)
40
+        assertEquals("root.localhost", user.hostname)
41
+        assertNull(user.account)
42
+    }
43
+
44
+    @Test
45
+    fun `Uses account-name tag when creating a source user`() {
46
+        val message = IrcMessage(hashMapOf(MessageTag.AccountName to "acidBurn"), "acidBurn!libby@root.localhost".toByteArray(), "", emptyList())
47
+        val user = message.sourceUser!!
48
+
49
+        assertEquals("acidBurn", user.nickname)
50
+        assertEquals("libby", user.ident)
51
+        assertEquals("root.localhost", user.hostname)
52
+        assertEquals("acidBurn", user.account)
53
+    }
54
+
32 55
 }

Loading…
Cancel
Save