Bladeren bron

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 8 jaren geleden
bovenliggende
commit
c01e26f5b9

+ 2
- 5
src/main/java/com/dmdirc/Query.java Bestand weergeven

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

+ 20
- 12
src/main/java/com/dmdirc/Server.java Bestand weergeven

79
 import javax.annotation.Nullable;
79
 import javax.annotation.Nullable;
80
 import javax.net.ssl.SSLException;
80
 import javax.net.ssl.SSLException;
81
 
81
 
82
+import net.engio.mbassy.listener.Handler;
83
+
82
 import org.slf4j.Logger;
84
 import org.slf4j.Logger;
83
 import org.slf4j.LoggerFactory;
85
 import org.slf4j.LoggerFactory;
84
 
86
 
85
-import net.engio.mbassy.listener.Handler;
86
-
87
 import static com.dmdirc.util.LogUtils.APP_ERROR;
87
 import static com.dmdirc.util.LogUtils.APP_ERROR;
88
 import static com.google.common.base.Preconditions.checkNotNull;
88
 import static com.google.common.base.Preconditions.checkNotNull;
89
 
89
 
144
     private final ServerEventHandler eventHandler;
144
     private final ServerEventHandler eventHandler;
145
     /** Our ignore list. */
145
     /** Our ignore list. */
146
     private final IgnoreList ignoreList = new IgnoreList();
146
     private final IgnoreList ignoreList = new IgnoreList();
147
-    /** Our string convertor. */
147
+    /** Our string converter. */
148
     private StringConverter converter = new DefaultStringConverter();
148
     private StringConverter converter = new DefaultStringConverter();
149
     /** ParserFactory we use for creating parsers. */
149
     /** ParserFactory we use for creating parsers. */
150
     private final ParserFactory parserFactory;
150
     private final ParserFactory parserFactory;
483
         return queries.get(lnick);
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
     @Override
505
     @Override
1005
      * {@code orElse} value.
1013
      * {@code orElse} value.
1006
      */
1014
      */
1007
     private <T> T withParserReadLock(
1015
     private <T> T withParserReadLock(
1008
-            final Function<? super Parser, ? extends T> func,
1016
+            final Function<Parser, T> func,
1009
             final T orElse) {
1017
             final T orElse) {
1010
         try {
1018
         try {
1011
             parserLock.readLock().lock();
1019
             parserLock.readLock().lock();

+ 6
- 7
src/main/java/com/dmdirc/ServerEventHandler.java Bestand weergeven

86
 import com.dmdirc.parser.events.WallopEvent;
86
 import com.dmdirc.parser.events.WallopEvent;
87
 import com.dmdirc.parser.events.WalluserEvent;
87
 import com.dmdirc.parser.events.WalluserEvent;
88
 import com.dmdirc.ui.StatusMessage;
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
 import java.util.List;
94
 import java.util.List;
91
 import java.util.Optional;
95
 import java.util.Optional;
92
 import java.util.Random;
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
 import static com.dmdirc.util.LogUtils.APP_ERROR;
98
 import static com.dmdirc.util.LogUtils.APP_ERROR;
102
 import static com.dmdirc.util.LogUtils.USER_ERROR;
99
 import static com.dmdirc.util.LogUtils.USER_ERROR;
103
 
100
 
408
                     event.getOldNick(), event.getClient().getNickname()));
405
                     event.getOldNick(), event.getClient().getNickname()));
409
             owner.updateTitle();
406
             owner.updateTitle();
410
         }
407
         }
408
+
409
+        owner.handleNickChange(event.getClient(), event.getOldNick());
411
     }
410
     }
412
 
411
 
413
     @Handler
412
     @Handler

+ 1
- 15
src/main/java/com/dmdirc/interfaces/Connection.java Bestand weergeven

30
 import com.dmdirc.parser.common.IgnoreList;
30
 import com.dmdirc.parser.common.IgnoreList;
31
 import com.dmdirc.parser.interfaces.Parser;
31
 import com.dmdirc.parser.interfaces.Parser;
32
 
32
 
33
+import javax.annotation.Nonnull;
33
 import java.net.URI;
34
 import java.net.URI;
34
 import java.util.Collection;
35
 import java.util.Collection;
35
 import java.util.Optional;
36
 import java.util.Optional;
36
 
37
 
37
-import javax.annotation.Nonnull;
38
-
39
 /**
38
 /**
40
  * Represents an abstract connection to a remote chat system.
39
  * Represents an abstract connection to a remote chat system.
41
  */
40
  */
292
      */
291
      */
293
     void updateIgnoreList();
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
      * Updates the name and title of this window.
295
      * Updates the name and title of this window.
310
      */
296
      */

Laden…
Annuleren
Opslaan