Browse Source

Add support for CHGHOST

tags/v0.9.0
Chris Smith 5 years ago
parent
commit
e4b9ec0be3

+ 1
- 0
CHANGELOG View File

12
  * Added support for batches
12
  * Added support for batches
13
    * All events in a batch are buffered until the batch is finished
13
    * All events in a batch are buffered until the batch is finished
14
    * The events are then published together in a single `BatchReceived` event
14
    * The events are then published together in a single `BatchReceived` event
15
+ * Added support for CHGHOST messages
15
  * (Internal) Introduced event mutators
16
  * (Internal) Introduced event mutators
16
    * Event mutators are now responsible for handling changing events in response to state
17
    * Event mutators are now responsible for handling changing events in response to state
17
      e.g. ChannelFanOutMutator creates Channel* events for global quits/nick changes/etc
18
      e.g. ChannelFanOutMutator creates Channel* events for global quits/nick changes/etc

+ 3
- 0
src/main/kotlin/com/dmdirc/ktirc/events/Events.kt View File

122
 /** Raised when a user changes nickname. */
122
 /** Raised when a user changes nickname. */
123
 class UserNickChanged(metadata: EventMetadata, val user: User, val newNick: String) : IrcEvent(metadata)
123
 class UserNickChanged(metadata: EventMetadata, val user: User, val newNick: String) : IrcEvent(metadata)
124
 
124
 
125
+/** Raised when a user changes hostname. */
126
+class UserHostChanged(metadata: EventMetadata, val user: User, val newIdent: String, val newHost: String) : IrcEvent(metadata)
127
+
125
 /**
128
 /**
126
  * Raised when a user's account changes (i.e., they auth'd or deauth'd with services).
129
  * Raised when a user's account changes (i.e., they auth'd or deauth'd with services).
127
  *
130
  *

+ 8
- 0
src/main/kotlin/com/dmdirc/ktirc/events/handlers/UserStateHandler.kt View File

14
             is ChannelNamesReceived -> handleNamesReceived(client, event)
14
             is ChannelNamesReceived -> handleNamesReceived(client, event)
15
             is UserAccountChanged -> handleAccountChanged(client, event)
15
             is UserAccountChanged -> handleAccountChanged(client, event)
16
             is UserNickChanged -> handleNickChanged(client, event)
16
             is UserNickChanged -> handleNickChanged(client, event)
17
+            is UserHostChanged -> handleHostChanged(client, event)
17
             is UserQuit -> handleQuit(client.userState, event)
18
             is UserQuit -> handleQuit(client.userState, event)
18
         }
19
         }
19
     }
20
     }
71
         }
72
         }
72
     }
73
     }
73
 
74
 
75
+    private fun handleHostChanged(client: IrcClient, event: UserHostChanged) {
76
+        client.userState[event.user]?.details?.let {
77
+            it.ident = event.newIdent
78
+            it.hostname = event.newHost
79
+        }
80
+    }
81
+
74
     private fun handleQuit(state: UserState, event: UserQuit) {
82
     private fun handleQuit(state: UserState, event: UserQuit) {
75
         state -= event.user
83
         state -= event.user
76
     }
84
     }

+ 14
- 0
src/main/kotlin/com/dmdirc/ktirc/messages/ChangeHostProcessor.kt View File

1
+package com.dmdirc.ktirc.messages
2
+
3
+import com.dmdirc.ktirc.events.UserHostChanged
4
+import com.dmdirc.ktirc.model.IrcMessage
5
+
6
+internal class ChangeHostProcessor : MessageProcessor {
7
+
8
+    override fun process(message: IrcMessage) = message.sourceUser?.let {
9
+        listOf(UserHostChanged(message.metadata, it, String(message.params[0]), String(message.params[1])))
10
+    } ?: emptyList()
11
+
12
+    override val commands = arrayOf("CHGHOST")
13
+
14
+}

+ 1
- 0
src/main/kotlin/com/dmdirc/ktirc/messages/MessageProcessor.kt View File

22
         AuthenticationProcessor(),
22
         AuthenticationProcessor(),
23
         BatchProcessor(),
23
         BatchProcessor(),
24
         CapabilityProcessor(),
24
         CapabilityProcessor(),
25
+        ChangeHostProcessor(),
25
         ISupportProcessor(),
26
         ISupportProcessor(),
26
         JoinProcessor(),
27
         JoinProcessor(),
27
         KickProcessor(),
28
         KickProcessor(),

+ 12
- 0
src/test/kotlin/com/dmdirc/ktirc/events/handlers/UserStateHandlerTest.kt View File

230
         assertNull(userState["AcidBurn"])
230
         assertNull(userState["AcidBurn"])
231
         assertEquals("acid~", userState["acid~"]?.details?.nickname)
231
         assertEquals("acid~", userState["acid~"]?.details?.nickname)
232
     }
232
     }
233
+
234
+    @Test
235
+    fun `updates details for remote host changes`() {
236
+        val user = User("acidBurn", "libby", "root.localhost")
237
+        userState += User("AcidBurn")
238
+
239
+        handler.processEvent(ircClient, UserHostChanged(EventMetadata(TestConstants.time), user, "burn", "root.gibson"))
240
+
241
+        assertEquals("burn", userState["acidBurn"]?.details?.ident)
242
+        assertEquals("root.gibson", userState["acidBurn"]?.details?.hostname)
243
+    }
244
+
233
 }
245
 }

+ 29
- 0
src/test/kotlin/com/dmdirc/ktirc/messages/ChangeHostProcessorTest.kt View File

1
+package com.dmdirc.ktirc.messages
2
+
3
+import com.dmdirc.ktirc.model.IrcMessage
4
+import com.dmdirc.ktirc.model.User
5
+import com.dmdirc.ktirc.params
6
+import org.junit.jupiter.api.Assertions.assertEquals
7
+import org.junit.jupiter.api.Assertions.assertTrue
8
+import org.junit.jupiter.api.Test
9
+
10
+internal class ChangeHostProcessorTest {
11
+
12
+    private val processor = ChangeHostProcessor()
13
+
14
+    @Test
15
+    fun `does nothing if no prefix is supplied`() {
16
+        val events = processor.process(IrcMessage(emptyMap(), null, "CHGHOST", emptyList()))
17
+        assertTrue(events.isEmpty())
18
+    }
19
+
20
+    @Test
21
+    fun `raises event when chghost is received`() {
22
+        val events = processor.process(IrcMessage(emptyMap(), "acidBurn".toByteArray(), "CHGHOST", params("libby", "root.gibson")))
23
+        assertEquals(1, events.size)
24
+        assertEquals(User("acidBurn"), events[0].user)
25
+        assertEquals("libby", events[0].newIdent)
26
+        assertEquals("root.gibson", events[0].newHost)
27
+    }
28
+
29
+}

Loading…
Cancel
Save