Skip to content

Commit c176776

Browse files
committed
Consider own name in multiline
1 parent 0c39cbb commit c176776

3 files changed

Lines changed: 37 additions & 8 deletions

File tree

src/main/java/org/kitteh/irc/client/library/Client.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -380,9 +380,7 @@ default void sendMultiLineMessage(@Nonnull String target, @Nonnull String messag
380380
* @param cutter cutter to utilize
381381
* @throws IllegalArgumentException for null parameters
382382
*/
383-
default void sendMultiLineMessage(@Nonnull String target, @Nonnull String message, @Nonnull Cutter cutter) {
384-
cutter.split(message, 510 - ("PRIVMSG " + target + " :").length()).forEach(line -> this.sendMessage(target, line));
385-
}
383+
void sendMultiLineMessage(@Nonnull String target, @Nonnull String message, @Nonnull Cutter cutter);
386384

387385
/**
388386
* Sends a potentially multi-line message to a target user or channel
@@ -412,7 +410,8 @@ default void sendMultiLineMessage(@Nonnull MessageReceiver target, @Nonnull Stri
412410
* @throws IllegalArgumentException for null parameters
413411
*/
414412
default void sendMultiLineMessage(@Nonnull MessageReceiver target, @Nonnull String message, @Nonnull Cutter cutter) {
415-
cutter.split(message, 510 - ("PRIVMSG " + target.getMessagingName() + " :").length()).forEach(line -> this.sendMessage(target, line));
413+
Sanity.nullCheck(target, "Target cannot be null");
414+
this.sendMultiLineMessage(target.getName(), message, cutter);
416415
}
417416

418417
/**
@@ -442,9 +441,7 @@ default void sendMultiLineNotice(@Nonnull String target, @Nonnull String message
442441
* @param cutter cutter to utilize
443442
* @throws IllegalArgumentException for null parameters
444443
*/
445-
default void sendMultiLineNotice(@Nonnull String target, @Nonnull String message, @Nonnull Cutter cutter) {
446-
cutter.split(message, 510 - ("NOTICE " + target + " :").length()).forEach(line -> this.sendNotice(target, line));
447-
}
444+
void sendMultiLineNotice(@Nonnull String target, @Nonnull String message, @Nonnull Cutter cutter);
448445

449446
/**
450447
* Sends a potentially multi-line notice to a target user or channel
@@ -474,7 +471,8 @@ default void sendMultiLineNotice(@Nonnull MessageReceiver target, @Nonnull Strin
474471
* @throws IllegalArgumentException for null parameters
475472
*/
476473
default void sendMultiLineNotice(@Nonnull MessageReceiver target, @Nonnull String message, @Nonnull Cutter cutter) {
477-
cutter.split(message, 510 - ("NOTICE " + target.getMessagingName() + " :").length()).forEach(line -> this.sendNotice(target, line));
474+
Sanity.nullCheck(target, "Target cannot be null");
475+
this.sendMultiLineNotice(target.getName(), message, cutter);
478476
}
479477

480478
/**

src/main/java/org/kitteh/irc/client/library/implementation/IRCClient.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,27 @@ public void sendMessage(@Nonnull String target, @Nonnull String message) {
292292
this.sendRawLine("PRIVMSG " + target + " :" + message);
293293
}
294294

295+
@Override
296+
public void sendMultiLineMessage(@Nonnull String target, @Nonnull String message, @Nonnull Cutter cutter) {
297+
cutter.split(message, this.getRemainingLength("PRIVMSG", target)).forEach(line -> this.sendMessage(target, line));
298+
}
299+
300+
@Override
301+
public void sendMultiLineNotice(@Nonnull String target, @Nonnull String message, @Nonnull Cutter cutter) {
302+
cutter.split(message, this.getRemainingLength("NOTICE", target)).forEach(line -> this.sendNotice(target, line));
303+
}
304+
305+
private int getRemainingLength(@Nonnull String type, @Nonnull String target) {
306+
// :nick!name@host PRIVMSG/NOTICE TARGET :MESSAGE\r\n
307+
// So that's two colons, three spaces, CR, and LF. 7 chars.
308+
// 512 - 7 = 505
309+
// Then, drop the user's full name (nick!name@host) and target
310+
// If self name is unknown, let's just do 100 for now
311+
// TODO arbitrary
312+
// Lastly drop the PRIVMSG or NOTICE length
313+
return 505 - this.getUser().map(user -> user.getName().length()).orElse(100) - target.length() - type.length();
314+
}
315+
295316
@Override
296317
public void sendNotice(@Nonnull String target, @Nonnull String message) {
297318
Sanity.safeMessageCheck(target, "Target");

src/test/java/org/kitteh/irc/client/library/implementation/FakeClient.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,16 @@ public void sendNotice(@Nonnull MessageReceiver target, @Nonnull String message)
297297

298298
}
299299

300+
@Override
301+
public void sendMultiLineMessage(@Nonnull String target, @Nonnull String message, @Nonnull Cutter cutter) {
302+
303+
}
304+
305+
@Override
306+
public void sendMultiLineNotice(@Nonnull String target, @Nonnull String message, @Nonnull Cutter cutter) {
307+
308+
}
309+
300310
@Override
301311
public void sendRawLine(@Nonnull String message) {
302312

0 commit comments

Comments
 (0)