Parcourir la source

Merge pull request #666 from csmith/master

Add source checks for eventbus handlers.
pull/667/head
Greg Holmes il y a 8 ans
Parent
révision
6bb1b2baf1

+ 7
- 5
src/com/dmdirc/GroupChatManagerImpl.java Voir le fichier

@@ -194,11 +194,13 @@ public class GroupChatManagerImpl implements GroupChatManager {
194 194
 
195 195
     @Handler
196 196
     void handleChannelClosing(final ChannelClosedEvent event) {
197
-        final GroupChat channel = event.getChannel();
198
-        connection.getWindowModel().getInputModel().get().getTabCompleter()
199
-                .removeEntry(TabCompletionType.CHANNEL, channel.getName());
200
-        channels.remove(channel.getName());
201
-        channel.getEventBus().unsubscribe(this);
197
+        if (event.getChannel().getConnection().equals(connection)) {
198
+            final GroupChat channel = event.getChannel();
199
+            connection.getWindowModel().getInputModel().get().getTabCompleter()
200
+                    .removeEntry(TabCompletionType.CHANNEL, channel.getName());
201
+            channels.remove(channel.getName());
202
+            channel.getEventBus().unsubscribe(this);
203
+        }
202 204
     }
203 205
 
204 206
 }

+ 4
- 2
src/com/dmdirc/Server.java Voir le fichier

@@ -207,7 +207,9 @@ public class Server implements Connection {
207 207
         windowModel.getConfigManager().addChangeListener("formatter", "serverName", configListener);
208 208
         windowModel.getConfigManager().addChangeListener("formatter", "serverTitle", configListener);
209 209
 
210
-        this.highlightManager = new HighlightManager(windowModel.getConfigManager(),
210
+        this.highlightManager = new HighlightManager(
211
+                windowModel,
212
+                windowModel.getConfigManager(),
211 213
                 new ColourManager(windowModel.getConfigManager()));
212 214
         highlightManager.init();
213 215
         windowModel.getEventBus().subscribe(highlightManager);
@@ -705,7 +707,7 @@ public class Server implements Connection {
705 707
 
706 708
     @Handler
707 709
     private void handleClose(final FrameClosingEvent event) {
708
-        if (event.getSource() == windowModel) {
710
+        if (event.getSource().equals(windowModel)) {
709 711
             synchronized (myStateLock) {
710 712
                 eventHandler.unregisterCallbacks();
711 713
                 windowModel.getConfigManager().removeListener(configListener);

+ 21
- 11
src/com/dmdirc/ui/messages/HighlightManager.java Voir le fichier

@@ -32,6 +32,7 @@ import com.dmdirc.events.QueryHighlightEvent;
32 32
 import com.dmdirc.events.ServerConnectedEvent;
33 33
 import com.dmdirc.events.ServerNickChangeEvent;
34 34
 import com.dmdirc.interfaces.User;
35
+import com.dmdirc.interfaces.WindowModel;
35 36
 import com.dmdirc.interfaces.config.AggregateConfigProvider;
36 37
 import com.dmdirc.util.colours.Colour;
37 38
 
@@ -53,6 +54,7 @@ public class HighlightManager {
53 54
             "(\\p{Space}|\\p{Punct}|$).*";
54 55
 
55 56
     private final Collection<Pattern> patterns = new ArrayList<>();
57
+    private final WindowModel serverWindow;
56 58
     private final AggregateConfigProvider configProvider;
57 59
     private final ColourManager colourManager;
58 60
 
@@ -62,8 +64,10 @@ public class HighlightManager {
62 64
     private Optional<Colour> foregroundColour = Optional.empty();
63 65
 
64 66
     public HighlightManager(
67
+            final WindowModel serverWindow,
65 68
             final AggregateConfigProvider configProvider,
66 69
             final ColourManager colourManager) {
70
+        this.serverWindow = serverWindow;
67 71
         this.configProvider = configProvider;
68 72
         this.colourManager = colourManager;
69 73
     }
@@ -78,7 +82,8 @@ public class HighlightManager {
78 82
 
79 83
     @Handler
80 84
     void handleChannelMessage(final BaseChannelTextEvent event) {
81
-        if (patterns.stream().anyMatch(p -> p.matcher(event.getMessage()).matches())) {
85
+        if (event.getChannel().getConnection().get().getWindowModel().equals(serverWindow)
86
+                && patterns.stream().anyMatch(p -> p.matcher(event.getMessage()).matches())) {
82 87
             setColours(event);
83 88
             event.getChannel().getEventBus().publishAsync(new ChannelHighlightEvent(event));
84 89
         }
@@ -86,7 +91,8 @@ public class HighlightManager {
86 91
 
87 92
     @Handler
88 93
     void handleQueryMessage(final BaseQueryTextEvent event) {
89
-        if (patterns.stream().anyMatch(p -> p.matcher(event.getMessage()).matches())) {
94
+        if (event.getUser().getConnection().getWindowModel().equals(serverWindow)
95
+                && patterns.stream().anyMatch(p -> p.matcher(event.getMessage()).matches())) {
90 96
             setColours(event);
91 97
             event.getQuery().getEventBus().publishAsync(new QueryHighlightEvent(event));
92 98
         }
@@ -94,21 +100,25 @@ public class HighlightManager {
94 100
 
95 101
     @Handler
96 102
     void handleNickChange(final ServerNickChangeEvent event) {
97
-        setNickname(event.getNewNick());
103
+        if (event.getConnection().getWindowModel().equals(serverWindow)) {
104
+            setNickname(event.getNewNick());
105
+        }
98 106
     }
99 107
 
100 108
     @Handler
101 109
     void handleConnected(final ServerConnectedEvent event) {
102
-        patterns.clear();
110
+        if (event.getConnection().getWindowModel().equals(serverWindow)) {
111
+            patterns.clear();
103 112
 
104
-        event.getConnection().getProfile().getHighlights()
105
-                .stream()
106
-                .map(this::compile)
107
-                .forEach(patterns::add);
113
+            event.getConnection().getProfile().getHighlights()
114
+                    .stream()
115
+                    .map(this::compile)
116
+                    .forEach(patterns::add);
108 117
 
109
-        event.getConnection().getLocalUser()
110
-                .map(User::getNickname)
111
-                .ifPresent(this::setNickname);
118
+            event.getConnection().getLocalUser()
119
+                    .map(User::getNickname)
120
+                    .ifPresent(this::setNickname);
121
+        }
112 122
     }
113 123
 
114 124
     @ConfigBinding(domain = "ui", key = "highlightLineForegroundColour", required = false)

+ 4
- 1
test/com/dmdirc/ui/messages/HighlightManagerTest.java Voir le fichier

@@ -32,6 +32,7 @@ import com.dmdirc.events.ServerNickChangeEvent;
32 32
 import com.dmdirc.interfaces.Connection;
33 33
 import com.dmdirc.interfaces.GroupChatUser;
34 34
 import com.dmdirc.interfaces.User;
35
+import com.dmdirc.interfaces.WindowModel;
35 36
 import com.dmdirc.interfaces.config.AggregateConfigProvider;
36 37
 
37 38
 import com.google.common.collect.Lists;
@@ -57,6 +58,7 @@ import static org.mockito.Mockito.when;
57 58
 public class HighlightManagerTest {
58 59
 
59 60
     @Mock private Connection connection;
61
+    @Mock private WindowModel windowModel;
60 62
     @Mock private User user;
61 63
     @Mock private Profile profile;
62 64
 
@@ -72,10 +74,11 @@ public class HighlightManagerTest {
72 74
     public void setup() {
73 75
         when(connection.getLocalUser()).thenReturn(Optional.of(user));
74 76
         when(connection.getProfile()).thenReturn(profile);
77
+        when(connection.getWindowModel()).thenReturn(windowModel);
75 78
 
76 79
         when(channel.getEventBus()).thenReturn(eventBus);
77 80
 
78
-        manager = new HighlightManager(configProvider, colourManager);
81
+        manager = new HighlightManager(windowModel, configProvider, colourManager);
79 82
     }
80 83
 
81 84
     @Test

Chargement…
Annuler
Enregistrer