Browse Source

Add user parameter to mode changed event

tags/v0.11.0
Chris Smith 5 years ago
parent
commit
fa98c18345

+ 1
- 0
CHANGELOG View File

4
  * Added ChannelJoinFailed event
4
  * Added ChannelJoinFailed event
5
  * Added ChannelMembershipAdjustment interface for events that concern
5
  * Added ChannelMembershipAdjustment interface for events that concern
6
    users joining/leaving channels
6
    users joining/leaving channels
7
+ * Added missing user parameter to ModeChangedEvent
7
 
8
 
8
 v0.10.3
9
 v0.10.3
9
 
10
 

+ 2
- 1
src/main/kotlin/com/dmdirc/ktirc/events/Events.kt View File

274
  * and the given modes are thus exhaustive. Otherwise, the modes are a sequence of changes to apply to the existing
274
  * and the given modes are thus exhaustive. Otherwise, the modes are a sequence of changes to apply to the existing
275
  * state.
275
  * state.
276
  */
276
  */
277
-class ModeChanged(metadata: EventMetadata, target: String, val modes: String, val arguments: Array<String>, val discovered: Boolean = false) : TargetedEvent(metadata, target)
277
+class ModeChanged(metadata: EventMetadata, override val user: User, target: String, val modes: String, val arguments: Array<String>, val discovered: Boolean = false)
278
+    : TargetedEvent(metadata, target), SourcedEvent
278
 
279
 
279
 /** Raised when an AUTHENTICATION message is received. [argument] is `null` if the server sent an empty reply ("+") */
280
 /** Raised when an AUTHENTICATION message is received. [argument] is `null` if the server sent an empty reply ("+") */
280
 class AuthenticationMessage(metadata: EventMetadata, val argument: String?) : IrcEvent(metadata)
281
 class AuthenticationMessage(metadata: EventMetadata, val argument: String?) : IrcEvent(metadata)

+ 2
- 0
src/main/kotlin/com/dmdirc/ktirc/messages/processors/ModeProcessor.kt View File

4
 import com.dmdirc.ktirc.messages.RPL_CHANNELMODEIS
4
 import com.dmdirc.ktirc.messages.RPL_CHANNELMODEIS
5
 import com.dmdirc.ktirc.messages.RPL_UMODEIS
5
 import com.dmdirc.ktirc.messages.RPL_UMODEIS
6
 import com.dmdirc.ktirc.model.IrcMessage
6
 import com.dmdirc.ktirc.model.IrcMessage
7
+import com.dmdirc.ktirc.model.User
7
 import com.dmdirc.ktirc.util.logger
8
 import com.dmdirc.ktirc.util.logger
8
 
9
 
9
 internal class ModeProcessor : MessageProcessor {
10
 internal class ModeProcessor : MessageProcessor {
23
 
24
 
24
         return listOf(ModeChanged(
25
         return listOf(ModeChanged(
25
                 message.metadata,
26
                 message.metadata,
27
+                user = message.sourceUser ?: User("*"),
26
                 target = String(message.params[paramOffset]),
28
                 target = String(message.params[paramOffset]),
27
                 modes = String(message.params[paramOffset + 1]),
29
                 modes = String(message.params[paramOffset + 1]),
28
                 arguments = message.params.takeLast(message.params.size - paramOffset - 2).map { String(it) }.toTypedArray(),
30
                 arguments = message.params.takeLast(message.params.size - paramOffset - 2).map { String(it) }.toTypedArray(),

+ 9
- 9
src/test/kotlin/com/dmdirc/ktirc/events/handlers/ChannelStateHandlerTest.kt View File

290
         fakeChannelState += channel
290
         fakeChannelState += channel
291
         fakeServerState.features[ServerFeature.ChannelModes] = arrayOf("ab", "cd", "ef", "gh")
291
         fakeServerState.features[ServerFeature.ChannelModes] = arrayOf("ab", "cd", "ef", "gh")
292
 
292
 
293
-        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), "#thegibson", "+", emptyArray(), true))
293
+        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), User("acidBurn"), "#thegibson", "+", emptyArray(), true))
294
 
294
 
295
         assertTrue(channel.modesDiscovered)
295
         assertTrue(channel.modesDiscovered)
296
     }
296
     }
301
         fakeChannelState += channel
301
         fakeChannelState += channel
302
         fakeServerState.features[ServerFeature.ChannelModes] = arrayOf("ab", "cd", "ef", "gh")
302
         fakeServerState.features[ServerFeature.ChannelModes] = arrayOf("ab", "cd", "ef", "gh")
303
 
303
 
304
-        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), "#thegibson", "+ceg", arrayOf("CCC", "EEE"), true))
304
+        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), User("acidBurn"), "#thegibson", "+ceg", arrayOf("CCC", "EEE"), true))
305
 
305
 
306
         assertEquals("CCC", channel.modes['c'])
306
         assertEquals("CCC", channel.modes['c'])
307
         assertEquals("EEE", channel.modes['e'])
307
         assertEquals("EEE", channel.modes['e'])
317
         fakeChannelState += channel
317
         fakeChannelState += channel
318
         fakeServerState.features[ServerFeature.ChannelModes] = arrayOf("ab", "cd", "ef", "gh")
318
         fakeServerState.features[ServerFeature.ChannelModes] = arrayOf("ab", "cd", "ef", "gh")
319
 
319
 
320
-        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), "#thegibson", "-c+d-eh+fg", arrayOf("CCC", "DDD", "FFF"), true))
320
+        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), User("acidBurn"), "#thegibson", "-c+d-eh+fg", arrayOf("CCC", "DDD", "FFF"), true))
321
 
321
 
322
         assertNull(channel.modes['c'])
322
         assertNull(channel.modes['c'])
323
         assertEquals("DDD", channel.modes['d'])
323
         assertEquals("DDD", channel.modes['d'])
334
             fakeChannelState += this
334
             fakeChannelState += this
335
         }
335
         }
336
 
336
 
337
-        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), "#thegibson", "+o", arrayOf("zeroCool")))
337
+        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), User("acidBurn"), "#thegibson", "+o", arrayOf("zeroCool")))
338
 
338
 
339
         assertEquals("o", fakeChannelState["#thegibson"]?.users?.get("zeroCool")?.modes)
339
         assertEquals("o", fakeChannelState["#thegibson"]?.users?.get("zeroCool")?.modes)
340
     }
340
     }
346
             fakeChannelState += this
346
             fakeChannelState += this
347
         }
347
         }
348
 
348
 
349
-        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), "#thegibson", "+v", arrayOf("zeroCool")))
349
+        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), User("acidBurn"), "#thegibson", "+v", arrayOf("zeroCool")))
350
 
350
 
351
         assertEquals("ov", fakeChannelState["#thegibson"]?.users?.get("zeroCool")?.modes)
351
         assertEquals("ov", fakeChannelState["#thegibson"]?.users?.get("zeroCool")?.modes)
352
     }
352
     }
358
             fakeChannelState += this
358
             fakeChannelState += this
359
         }
359
         }
360
 
360
 
361
-        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), "#thegibson", "+o", arrayOf("zeroCool")))
361
+        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), User("acidBurn"), "#thegibson", "+o", arrayOf("zeroCool")))
362
 
362
 
363
         assertEquals("ov", fakeChannelState["#thegibson"]?.users?.get("zeroCool")?.modes)
363
         assertEquals("ov", fakeChannelState["#thegibson"]?.users?.get("zeroCool")?.modes)
364
     }
364
     }
370
             fakeChannelState += this
370
             fakeChannelState += this
371
         }
371
         }
372
 
372
 
373
-        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), "#thegibson", "+vo", arrayOf("zeroCool", "zeroCool")))
373
+        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), User("acidBurn"), "#thegibson", "+vo", arrayOf("zeroCool", "zeroCool")))
374
 
374
 
375
         assertEquals("ov", fakeChannelState["#thegibson"]?.users?.get("zeroCool")?.modes)
375
         assertEquals("ov", fakeChannelState["#thegibson"]?.users?.get("zeroCool")?.modes)
376
     }
376
     }
382
             fakeChannelState += this
382
             fakeChannelState += this
383
         }
383
         }
384
 
384
 
385
-        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), "#thegibson", "-vo", arrayOf("zeroCool", "zeroCool")))
385
+        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), User("acidBurn"), "#thegibson", "-vo", arrayOf("zeroCool", "zeroCool")))
386
 
386
 
387
         assertEquals("", fakeChannelState["#thegibson"]?.users?.get("zeroCool")?.modes)
387
         assertEquals("", fakeChannelState["#thegibson"]?.users?.get("zeroCool")?.modes)
388
     }
388
     }
395
         }
395
         }
396
         fakeServerState.features[ServerFeature.ChannelModes] = arrayOf("ab", "cd", "ef", "gh")
396
         fakeServerState.features[ServerFeature.ChannelModes] = arrayOf("ab", "cd", "ef", "gh")
397
 
397
 
398
-        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), "#thegibson", "oa-v+b", arrayOf("zeroCool", "aaa", "zeroCool", "bbb")))
398
+        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), User("acidBurn"), "#thegibson", "oa-v+b", arrayOf("zeroCool", "aaa", "zeroCool", "bbb")))
399
 
399
 
400
         assertEquals("o", fakeChannelState["#thegibson"]?.users?.get("zeroCool")?.modes)
400
         assertEquals("o", fakeChannelState["#thegibson"]?.users?.get("zeroCool")?.modes)
401
         assertEquals("aaa", fakeChannelState["#thegibson"]?.modes?.get('a'))
401
         assertEquals("aaa", fakeChannelState["#thegibson"]?.modes?.get('a'))

+ 23
- 0
src/test/kotlin/com/dmdirc/ktirc/messages/processors/ModeProcessorTest.kt View File

2
 
2
 
3
 import com.dmdirc.ktirc.TestConstants
3
 import com.dmdirc.ktirc.TestConstants
4
 import com.dmdirc.ktirc.model.IrcMessage
4
 import com.dmdirc.ktirc.model.IrcMessage
5
+import com.dmdirc.ktirc.model.User
5
 import com.dmdirc.ktirc.params
6
 import com.dmdirc.ktirc.params
6
 import com.dmdirc.ktirc.util.currentTimeProvider
7
 import com.dmdirc.ktirc.util.currentTimeProvider
7
 import org.junit.jupiter.api.Assertions.*
8
 import org.junit.jupiter.api.Assertions.*
22
         assertEquals(1, events.size)
23
         assertEquals(1, events.size)
23
 
24
 
24
         assertEquals(TestConstants.time, events[0].metadata.time)
25
         assertEquals(TestConstants.time, events[0].metadata.time)
26
+        assertEquals(User("acidburn", "libby", "root.localhost"), events[0].user)
25
         assertEquals("acidBurn", events[0].target)
27
         assertEquals("acidBurn", events[0].target)
26
         assertEquals("+hax", events[0].modes)
28
         assertEquals("+hax", events[0].modes)
27
         assertEquals(0, events[0].arguments.size)
29
         assertEquals(0, events[0].arguments.size)
35
         assertEquals(1, events.size)
37
         assertEquals(1, events.size)
36
 
38
 
37
         assertEquals(TestConstants.time, events[0].metadata.time)
39
         assertEquals(TestConstants.time, events[0].metadata.time)
40
+        assertEquals(User("acidburn", "libby", "root.localhost"), events[0].user)
38
         assertEquals("acidBurn", events[0].target)
41
         assertEquals("acidBurn", events[0].target)
39
         assertEquals("+hax", events[0].modes)
42
         assertEquals("+hax", events[0].modes)
40
         assertEquals(2, events[0].arguments.size)
43
         assertEquals(2, events[0].arguments.size)
50
         assertEquals(1, events.size)
53
         assertEquals(1, events.size)
51
 
54
 
52
         assertEquals(TestConstants.time, events[0].metadata.time)
55
         assertEquals(TestConstants.time, events[0].metadata.time)
56
+        assertEquals(User("acidburn", "libby", "root.localhost"), events[0].user)
53
         assertEquals("acidBurn", events[0].target)
57
         assertEquals("acidBurn", events[0].target)
54
         assertEquals("+hax", events[0].modes)
58
         assertEquals("+hax", events[0].modes)
55
         assertEquals(0, events[0].arguments.size)
59
         assertEquals(0, events[0].arguments.size)
63
         assertEquals(1, events.size)
67
         assertEquals(1, events.size)
64
 
68
 
65
         assertEquals(TestConstants.time, events[0].metadata.time)
69
         assertEquals(TestConstants.time, events[0].metadata.time)
70
+        assertEquals(User("acidburn", "libby", "root.localhost"), events[0].user)
66
         assertEquals("acidBurn", events[0].target)
71
         assertEquals("acidBurn", events[0].target)
67
         assertEquals("+hax", events[0].modes)
72
         assertEquals("+hax", events[0].modes)
68
         assertEquals(2, events[0].arguments.size)
73
         assertEquals(2, events[0].arguments.size)
78
         assertEquals(1, events.size)
83
         assertEquals(1, events.size)
79
 
84
 
80
         assertEquals(TestConstants.time, events[0].metadata.time)
85
         assertEquals(TestConstants.time, events[0].metadata.time)
86
+        assertEquals(User("acidburn", "libby", "root.localhost"), events[0].user)
87
+        assertEquals("#thegibson", events[0].target)
88
+        assertEquals("+hax", events[0].modes)
89
+        assertEquals(0, events[0].arguments.size)
90
+        assertTrue(events[0].discovered)
91
+    }
92
+
93
+    @Test
94
+    fun `raises event for channel mode discovery with no params and no prefix`() {
95
+        val events = ModeProcessor().process(
96
+                IrcMessage(emptyMap(), null, "324", params("acidBurn", "#thegibson", "+hax")))
97
+        assertEquals(1, events.size)
98
+
99
+        assertEquals(TestConstants.time, events[0].metadata.time)
100
+        assertEquals(User("*"), events[0].user)
81
         assertEquals("#thegibson", events[0].target)
101
         assertEquals("#thegibson", events[0].target)
82
         assertEquals("+hax", events[0].modes)
102
         assertEquals("+hax", events[0].modes)
83
         assertEquals(0, events[0].arguments.size)
103
         assertEquals(0, events[0].arguments.size)
91
         assertEquals(1, events.size)
111
         assertEquals(1, events.size)
92
 
112
 
93
         assertEquals(TestConstants.time, events[0].metadata.time)
113
         assertEquals(TestConstants.time, events[0].metadata.time)
114
+        assertEquals(User("acidburn", "libby", "root.localhost"), events[0].user)
94
         assertEquals("#thegibson", events[0].target)
115
         assertEquals("#thegibson", events[0].target)
95
         assertEquals("+hax", events[0].modes)
116
         assertEquals("+hax", events[0].modes)
96
         assertEquals(2, events[0].arguments.size)
117
         assertEquals(2, events[0].arguments.size)
106
         assertEquals(1, events.size)
127
         assertEquals(1, events.size)
107
 
128
 
108
         assertEquals(TestConstants.time, events[0].metadata.time)
129
         assertEquals(TestConstants.time, events[0].metadata.time)
130
+        assertEquals(User("acidburn", "libby", "root.localhost"), events[0].user)
109
         assertEquals("#thegibson", events[0].target)
131
         assertEquals("#thegibson", events[0].target)
110
         assertEquals("+hax", events[0].modes)
132
         assertEquals("+hax", events[0].modes)
111
         assertEquals(0, events[0].arguments.size)
133
         assertEquals(0, events[0].arguments.size)
119
         assertEquals(1, events.size)
141
         assertEquals(1, events.size)
120
 
142
 
121
         assertEquals(TestConstants.time, events[0].metadata.time)
143
         assertEquals(TestConstants.time, events[0].metadata.time)
144
+        assertEquals(User("acidburn", "libby", "root.localhost"), events[0].user)
122
         assertEquals("#thegibson", events[0].target)
145
         assertEquals("#thegibson", events[0].target)
123
         assertEquals("+hax", events[0].modes)
146
         assertEquals("+hax", events[0].modes)
124
         assertEquals(2, events[0].arguments.size)
147
         assertEquals(2, events[0].arguments.size)

Loading…
Cancel
Save