Sfoglia il codice sorgente

Handle account name tags

tags/v0.1.0
Chris Smith 5 anni fa
parent
commit
13d0783ac6

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

2
 
2
 
3
 import com.dmdirc.ktirc.events.ChannelJoined
3
 import com.dmdirc.ktirc.events.ChannelJoined
4
 import com.dmdirc.ktirc.model.IrcMessage
4
 import com.dmdirc.ktirc.model.IrcMessage
5
-import com.dmdirc.ktirc.model.asUser
6
 
5
 
7
 internal class JoinProcessor : MessageProcessor {
6
 internal class JoinProcessor : MessageProcessor {
8
 
7
 
9
     override val commands = arrayOf("JOIN")
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
     } ?: emptyList()
12
     } ?: emptyList()
14
 
13
 
15
 }
14
 }

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

2
 
2
 
3
 import com.dmdirc.ktirc.events.ChannelParted
3
 import com.dmdirc.ktirc.events.ChannelParted
4
 import com.dmdirc.ktirc.model.IrcMessage
4
 import com.dmdirc.ktirc.model.IrcMessage
5
-import com.dmdirc.ktirc.model.asUser
6
 
5
 
7
 internal class PartProcessor : MessageProcessor {
6
 internal class PartProcessor : MessageProcessor {
8
 
7
 
9
     override val commands = arrayOf("PART")
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
     } ?: emptyList()
12
     } ?: emptyList()
14
 
13
 
15
     private val IrcMessage.channel
14
     private val IrcMessage.channel

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

2
 
2
 
3
 import com.dmdirc.ktirc.events.MessageReceived
3
 import com.dmdirc.ktirc.events.MessageReceived
4
 import com.dmdirc.ktirc.model.IrcMessage
4
 import com.dmdirc.ktirc.model.IrcMessage
5
-import com.dmdirc.ktirc.model.asUser
6
 
5
 
7
 internal class PrivmsgProcessor : MessageProcessor {
6
 internal class PrivmsgProcessor : MessageProcessor {
8
 
7
 
9
     override val commands = arrayOf("PRIVMSG")
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
     } ?: emptyList()
12
     } ?: emptyList()
14
 
13
 
15
 }
14
 }

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

2
 
2
 
3
 import com.dmdirc.ktirc.events.UserQuit
3
 import com.dmdirc.ktirc.events.UserQuit
4
 import com.dmdirc.ktirc.model.IrcMessage
4
 import com.dmdirc.ktirc.model.IrcMessage
5
-import com.dmdirc.ktirc.model.asUser
6
 
5
 
7
 internal class QuitProcessor : MessageProcessor {
6
 internal class QuitProcessor : MessageProcessor {
8
 
7
 
9
     override val commands = arrayOf("QUIT")
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
     } ?: emptyList()
12
     } ?: emptyList()
14
 
13
 
15
     private val IrcMessage.reason
14
     private val IrcMessage.reason

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

17
         currentTimeProvider()
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
 sealed class MessageTag(val name: String) {
28
 sealed class MessageTag(val name: String) {

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

1
 package com.dmdirc.ktirc.model
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
 fun ByteArray.asUser(): User {
12
 fun ByteArray.asUser(): User {
6
     val string = String(this)
13
     val string = String(this)

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

2
 
2
 
3
 import com.dmdirc.ktirc.TestConstants
3
 import com.dmdirc.ktirc.TestConstants
4
 import org.junit.jupiter.api.Assertions.assertEquals
4
 import org.junit.jupiter.api.Assertions.assertEquals
5
+import org.junit.jupiter.api.Assertions.assertNull
5
 import org.junit.jupiter.api.Test
6
 import org.junit.jupiter.api.Test
6
 import java.time.LocalDateTime
7
 import java.time.LocalDateTime
7
 import java.time.ZoneId
8
 import java.time.ZoneId
29
         assertEquals(LocalDateTime.parse("1995-09-15T09:00:00"), message.time)
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…
Annulla
Salva