Skip to content

Commit f8df77e

Browse files
committed
Support Message IDs
1 parent 8f02ff2 commit f8df77e

File tree

3 files changed

+76
-1
lines changed

3 files changed

+76
-1
lines changed
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/*
2+
* * Copyright (C) 2013-2019 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.messagetag;
25+
26+
import org.checkerframework.checker.nullness.qual.NonNull;
27+
import org.kitteh.irc.client.library.Client;
28+
import org.kitteh.irc.client.library.element.MessageTag;
29+
import org.kitteh.irc.client.library.feature.MessageTagManager;
30+
import org.kitteh.irc.client.library.util.TriFunction;
31+
32+
import java.util.Objects;
33+
34+
/**
35+
* Default implementation of {@link MsgId}.
36+
*/
37+
public class DefaultMessageTagMsgId extends MessageTagManager.DefaultMessageTag implements MessageTag.MsgId {
38+
/**
39+
* Function to create this message tag.
40+
*/
41+
@SuppressWarnings("ConstantConditions")
42+
public static final TriFunction<Client, String, String, DefaultMessageTagMsgId> FUNCTION = (client, name, value) -> new DefaultMessageTagMsgId(name, value);
43+
44+
private final String id;
45+
46+
private DefaultMessageTagMsgId(@NonNull String name, @NonNull String value) {
47+
super(name, value);
48+
this.id = value;
49+
}
50+
51+
@Override
52+
public @NonNull String getId() {
53+
return this.id;
54+
}
55+
56+
@Override
57+
public boolean equals(Object o) {
58+
return o instanceof MessageTag.MsgId && this.id.equals(((MessageTag.MsgId) o).getId());
59+
}
60+
61+
@Override
62+
public int hashCode() {
63+
return Objects.hash("MsgId", this.id);
64+
}
65+
}

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@
2626
import org.checkerframework.checker.nullness.qual.NonNull;
2727
import org.checkerframework.checker.nullness.qual.Nullable;
2828
import org.kitteh.irc.client.library.Client;
29+
import org.kitteh.irc.client.library.defaults.element.messagetag.DefaultMessageTagMsgId;
2930
import org.kitteh.irc.client.library.defaults.element.messagetag.DefaultMessageTagTime;
3031
import org.kitteh.irc.client.library.element.MessageTag;
3132
import org.kitteh.irc.client.library.exception.KittehServerMessageTagException;
33+
import org.kitteh.irc.client.library.feature.CapabilityManager;
3234
import org.kitteh.irc.client.library.feature.MessageTagManager;
3335
import org.kitteh.irc.client.library.util.AbstractNameValueProcessor;
3436
import org.kitteh.irc.client.library.util.ToStringer;
@@ -80,7 +82,8 @@ private TagCreator(@NonNull String capability, @NonNull TriFunction<Client, Stri
8082
*/
8183
public DefaultMessageTagManager(Client.WithManagement client) {
8284
super(client);
83-
this.registerTagCreator("server-time", "time", DefaultMessageTagTime.FUNCTION);
85+
this.registerTagCreator(CapabilityManager.Defaults.SERVER_TIME, "time", DefaultMessageTagTime.FUNCTION);
86+
this.registerTagCreator(CapabilityManager.Defaults.MESSAGE_TAGS, "msgid", DefaultMessageTagMsgId.FUNCTION);
8487
}
8588

8689
@Override

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@
3232
* Reflects a message tag.
3333
*/
3434
public interface MessageTag {
35+
/**
36+
* Represents the `msgid` tag as specified by the Message IDs spec.
37+
*/
38+
interface MsgId extends MessageTag {
39+
@NonNull String getId();
40+
}
41+
3542
/**
3643
* Represents the 'time' tag as specified by the 'server-time' extension.
3744
*/

0 commit comments

Comments
 (0)