Przeglądaj źródła

Tidy up nick change handling.

It doesn't make sense to have a public method in Connection to
muddle around with how queries are tracked, nor for queries to
tell servers when they change (creating a dependency loop).

Instead, have the ServerEventHandler tell Server.
pull/695/head
Chris Smith 7 lat temu
rodzic
commit
c01e26f5b9

+ 2
- 5
src/main/java/com/dmdirc/Query.java Wyświetl plik

@@ -45,13 +45,12 @@ import com.dmdirc.parser.interfaces.ClientInfo;
45 45
 import com.dmdirc.parser.interfaces.Parser;
46 46
 import com.dmdirc.ui.core.components.WindowComponent;
47 47
 import com.dmdirc.ui.messages.BackBufferFactory;
48
+import net.engio.mbassy.listener.Handler;
48 49
 
49
-import java.awt.Toolkit;
50
+import java.awt.*;
50 51
 import java.util.Arrays;
51 52
 import java.util.Optional;
52 53
 
53
-import net.engio.mbassy.listener.Handler;
54
-
55 54
 /**
56 55
  * The Query class represents the client's view of a query with another user. It handles callbacks
57 56
  * for query events from the parser, maintains the corresponding QueryWindow, and handles user input
@@ -176,8 +175,6 @@ public class Query extends FrameContainer implements PrivateChat {
176 175
         final ClientInfo client = event.getClient();
177 176
         final String oldNick = event.getOldNick();
178 177
         if (client.getNickname().equals(getNickname())) {
179
-            connection.updateQuery(this, oldNick, client.getNickname());
180
-
181 178
             getEventBus().publish(new QueryNickChangeEvent(this, oldNick, client.getNickname()));
182 179
             updateTitle();
183 180
 

+ 20
- 12
src/main/java/com/dmdirc/Server.java Wyświetl plik

@@ -79,11 +79,11 @@ import javax.annotation.Nonnull;
79 79
 import javax.annotation.Nullable;
80 80
 import javax.net.ssl.SSLException;
81 81
 
82
+import net.engio.mbassy.listener.Handler;
83
+
82 84
 import org.slf4j.Logger;
83 85
 import org.slf4j.LoggerFactory;
84 86
 
85
-import net.engio.mbassy.listener.Handler;
86
-
87 87
 import static com.dmdirc.util.LogUtils.APP_ERROR;
88 88
 import static com.google.common.base.Preconditions.checkNotNull;
89 89
 
@@ -144,7 +144,7 @@ public class Server implements Connection {
144 144
     private final ServerEventHandler eventHandler;
145 145
     /** Our ignore list. */
146 146
     private final IgnoreList ignoreList = new IgnoreList();
147
-    /** Our string convertor. */
147
+    /** Our string converter. */
148 148
     private StringConverter converter = new DefaultStringConverter();
149 149
     /** ParserFactory we use for creating parsers. */
150 150
     private final ParserFactory parserFactory;
@@ -483,15 +483,23 @@ public class Server implements Connection {
483 483
         return queries.get(lnick);
484 484
     }
485 485
 
486
-    @Override
487
-    public void updateQuery(final Query query, final String oldNick, final String newNick) {
488
-        windowModel.getInputModel().get().getTabCompleter()
489
-                .removeEntry(TabCompletionType.QUERY_NICK, oldNick);
490
-        windowModel.getInputModel().get().getTabCompleter()
491
-                .addEntry(TabCompletionType.QUERY_NICK, newNick);
486
+    /**
487
+     * Updates tab completer and queries after a user changes their nickname.
488
+     *
489
+     * @param client The client that changed nickname
490
+     * @param oldNick The old nickname they used.
491
+     */
492
+    void handleNickChange(final ClientInfo client, final String oldNick) {
493
+        if (queries.containsKey(converter.toLowerCase(oldNick))) {
494
+            windowModel.getInputModel().get().getTabCompleter()
495
+                    .removeEntry(TabCompletionType.QUERY_NICK, oldNick);
496
+            windowModel.getInputModel().get().getTabCompleter()
497
+                    .addEntry(TabCompletionType.QUERY_NICK, client.getNickname());
492 498
 
493
-        queries.put(converter.toLowerCase(newNick), query);
494
-        queries.remove(converter.toLowerCase(oldNick));
499
+            queries.put(
500
+                    converter.toLowerCase(client.getNickname()),
501
+                    queries.remove(converter.toLowerCase(oldNick)));
502
+        }
495 503
     }
496 504
 
497 505
     @Override
@@ -1005,7 +1013,7 @@ public class Server implements Connection {
1005 1013
      * {@code orElse} value.
1006 1014
      */
1007 1015
     private <T> T withParserReadLock(
1008
-            final Function<? super Parser, ? extends T> func,
1016
+            final Function<Parser, T> func,
1009 1017
             final T orElse) {
1010 1018
         try {
1011 1019
             parserLock.readLock().lock();

+ 6
- 7
src/main/java/com/dmdirc/ServerEventHandler.java Wyświetl plik

@@ -86,18 +86,15 @@ import com.dmdirc.parser.events.WallDesyncEvent;
86 86
 import com.dmdirc.parser.events.WallopEvent;
87 87
 import com.dmdirc.parser.events.WalluserEvent;
88 88
 import com.dmdirc.ui.StatusMessage;
89
+import net.engio.mbassy.listener.Handler;
90
+import org.slf4j.Logger;
91
+import org.slf4j.LoggerFactory;
89 92
 
93
+import javax.annotation.Nonnull;
90 94
 import java.util.List;
91 95
 import java.util.Optional;
92 96
 import java.util.Random;
93 97
 
94
-import javax.annotation.Nonnull;
95
-
96
-import org.slf4j.Logger;
97
-import org.slf4j.LoggerFactory;
98
-
99
-import net.engio.mbassy.listener.Handler;
100
-
101 98
 import static com.dmdirc.util.LogUtils.APP_ERROR;
102 99
 import static com.dmdirc.util.LogUtils.USER_ERROR;
103 100
 
@@ -408,6 +405,8 @@ public class ServerEventHandler extends EventHandler {
408 405
                     event.getOldNick(), event.getClient().getNickname()));
409 406
             owner.updateTitle();
410 407
         }
408
+
409
+        owner.handleNickChange(event.getClient(), event.getOldNick());
411 410
     }
412 411
 
413 412
     @Handler

+ 1
- 15
src/main/java/com/dmdirc/interfaces/Connection.java Wyświetl plik

@@ -30,12 +30,11 @@ import com.dmdirc.interfaces.config.ConfigProvider;
30 30
 import com.dmdirc.parser.common.IgnoreList;
31 31
 import com.dmdirc.parser.interfaces.Parser;
32 32
 
33
+import javax.annotation.Nonnull;
33 34
 import java.net.URI;
34 35
 import java.util.Collection;
35 36
 import java.util.Optional;
36 37
 
37
-import javax.annotation.Nonnull;
38
-
39 38
 /**
40 39
  * Represents an abstract connection to a remote chat system.
41 40
  */
@@ -292,19 +291,6 @@ public interface Connection {
292 291
      */
293 292
     void updateIgnoreList();
294 293
 
295
-    /**
296
-     * Updates the state of this server following a nick change of someone that the user has a query
297
-     * open with. Namely, this updates the tabcompleter with the new name, and ensures that the
298
-     * <code>queries</code> map uses the correct nickname.
299
-     *
300
-     * @param query   The query object being updated
301
-     * @param oldNick The old nickname of the user
302
-     * @param newNick The new nickname of the user
303
-     *
304
-     * @since 0.6.4
305
-     */
306
-    void updateQuery(final Query query, final String oldNick, final String newNick);
307
-
308 294
     /**
309 295
      * Updates the name and title of this window.
310 296
      */

Ładowanie…
Anuluj
Zapisz