Skip to content

Commit f8e5db2

Browse files
committed
Add TARGMAX support
1 parent 127dfa9 commit f8e5db2

File tree

3 files changed

+101
-0
lines changed

3 files changed

+101
-0
lines changed
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/*
2+
* * Copyright (C) 2013-2021 Matt Baxter https://kitteh.org
3+
*
4+
* Permission is hereby granted, free of charge, to any person
5+
* obtaining a copy of this software and associated documentation
6+
* files (the "Software"), to deal in the Software without
7+
* restriction, including without limitation the rights to use, copy,
8+
* modify, merge, publish, distribute, sublicense, and/or sell copies
9+
* of the Software, and to permit persons to whom the Software is
10+
* furnished to do so, subject to the following conditions:
11+
*
12+
* The above copyright notice and this permission notice shall be
13+
* included in all copies or substantial portions of the Software.
14+
*
15+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19+
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20+
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22+
* SOFTWARE.
23+
*/
24+
package org.kitteh.irc.client.library.defaults.element.isupport;
25+
26+
import org.checkerframework.checker.nullness.qual.NonNull;
27+
import org.checkerframework.checker.nullness.qual.Nullable;
28+
import org.kitteh.irc.client.library.Client;
29+
import org.kitteh.irc.client.library.defaults.element.DefaultISupportParameter;
30+
import org.kitteh.irc.client.library.element.ISupportParameter;
31+
import org.kitteh.irc.client.library.util.CIKeyMap;
32+
import org.kitteh.irc.client.library.util.Pair;
33+
34+
import java.util.Collections;
35+
import java.util.HashSet;
36+
import java.util.OptionalInt;
37+
import java.util.Set;
38+
39+
/**
40+
* Default implementation of {@link org.kitteh.irc.client.library.element.ISupportParameter.TargMax}.
41+
*/
42+
public class DefaultISupportTargMax extends DefaultISupportParameter implements ISupportParameter.TargMax {
43+
private final CIKeyMap<Pair<String, OptionalInt>> map;
44+
45+
/**
46+
* Constructs the object.
47+
*
48+
* @param client client
49+
* @param name parameter name
50+
* @param value parameter value, if present
51+
*/
52+
public DefaultISupportTargMax(@NonNull Client client, @NonNull String name, @Nullable String value) {
53+
super(client, name, value);
54+
this.map = new CIKeyMap<>(client);
55+
if (value != null) {
56+
for (String string : value.split(",")) {
57+
String[] parts = string.split(":");
58+
this.map.put(parts[0], Pair.of(parts[0], parts.length==1?OptionalInt.empty() : OptionalInt.of(Integer.parseInt(parts[1]))));
59+
}
60+
}
61+
}
62+
63+
@Override
64+
public @NonNull Set<Pair<String, OptionalInt>> getEntries() {
65+
return Collections.unmodifiableSet(new HashSet<>(this.map.values()));
66+
}
67+
68+
@Override
69+
public @NonNull OptionalInt getMax(@NonNull String command) {
70+
Pair<String,OptionalInt> pair = this.map.get(command);
71+
return pair == null ? OptionalInt.empty() : pair.getRight();
72+
}
73+
}

src/main/java/org/kitteh/irc/client/library/defaults/feature/DefaultISupportManager.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import org.kitteh.irc.client.library.defaults.element.isupport.DefaultISupportPrefix;
4949
import org.kitteh.irc.client.library.defaults.element.isupport.DefaultISupportSilence;
5050
import org.kitteh.irc.client.library.defaults.element.isupport.DefaultISupportStatusMsg;
51+
import org.kitteh.irc.client.library.defaults.element.isupport.DefaultISupportTargMax;
5152
import org.kitteh.irc.client.library.defaults.element.isupport.DefaultISupportTopicLen;
5253
import org.kitteh.irc.client.library.defaults.element.isupport.DefaultISupportUserLen;
5354
import org.kitteh.irc.client.library.defaults.element.isupport.DefaultISupportWhoX;
@@ -91,6 +92,7 @@ public DefaultISupportManager(Client.WithManagement client) {
9192
this.registerParameter(ISupportParameter.Prefix.NAME, DefaultISupportPrefix::new);
9293
this.registerParameter(ISupportParameter.Silence.NAME, DefaultISupportSilence::new);
9394
this.registerParameter(ISupportParameter.StatusMsg.NAME, DefaultISupportStatusMsg::new);
95+
this.registerParameter(ISupportParameter.TargMax.NAME, DefaultISupportTargMax::new);
9496
this.registerParameter(ISupportParameter.TopicLen.NAME, DefaultISupportTopicLen::new);
9597
this.registerParameter(ISupportParameter.UserLen.NAME, DefaultISupportUserLen::new);
9698
this.registerParameter(ISupportParameter.WhoX.NAME, DefaultISupportWhoX::new);

src/main/java/org/kitteh/irc/client/library/element/ISupportParameter.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.checkerframework.checker.nullness.qual.NonNull;
2727
import org.kitteh.irc.client.library.element.mode.ChannelMode;
2828
import org.kitteh.irc.client.library.element.mode.ChannelUserMode;
29+
import org.kitteh.irc.client.library.util.Pair;
2930

3031
import java.util.List;
3132
import java.util.Map;
@@ -452,6 +453,31 @@ interface StatusMsg extends ISupportParameter {
452453
Set<Character> getPrefixes();
453454
}
454455

456+
/**
457+
* Limits of targets for commands.
458+
*/
459+
interface TargMax extends ISupportParameter {
460+
/**
461+
* Parameter name.
462+
*/
463+
String NAME = "TARGMAX";
464+
465+
/**
466+
* Gets the set of max target entries.
467+
*
468+
* @return set of entries, empty if none specified.
469+
*/
470+
@NonNull Set<Pair<String, OptionalInt>> getEntries();
471+
472+
/**
473+
* Gets the max, if any, for a given command.
474+
*
475+
* @param command command
476+
* @return max, if any, for the command
477+
*/
478+
@NonNull OptionalInt getMax(@NonNull String command);
479+
}
480+
455481
/**
456482
* Represents the length limit of topics.
457483
*/

0 commit comments

Comments
 (0)