From 132b27adeef3ab4d305facda7dd035015b00766f Mon Sep 17 00:00:00 2001 From: steckbrief Date: Sat, 5 May 2018 20:28:04 +0200 Subject: introduces new message state model --- .../xmpp/chatmarkers/ChatMarkers.java | 28 +++++++++++++ .../xmpp/chatmarkers/ChatMarkersHandler.java | 11 +++++ .../xmpp/chatmarkers/ChatMarkersPacketHandler.java | 24 +++++++++++ .../xmpp/chatmarkers/ChatMarkersXep.java | 49 ++++++++++++++++++++++ 4 files changed, 112 insertions(+) create mode 100644 src/main/java/de/thedevstack/conversationsplus/xmpp/chatmarkers/ChatMarkers.java create mode 100644 src/main/java/de/thedevstack/conversationsplus/xmpp/chatmarkers/ChatMarkersHandler.java create mode 100644 src/main/java/de/thedevstack/conversationsplus/xmpp/chatmarkers/ChatMarkersPacketHandler.java create mode 100644 src/main/java/de/thedevstack/conversationsplus/xmpp/chatmarkers/ChatMarkersXep.java (limited to 'src/main/java/de/thedevstack/conversationsplus/xmpp/chatmarkers') diff --git a/src/main/java/de/thedevstack/conversationsplus/xmpp/chatmarkers/ChatMarkers.java b/src/main/java/de/thedevstack/conversationsplus/xmpp/chatmarkers/ChatMarkers.java new file mode 100644 index 00000000..a1822b7d --- /dev/null +++ b/src/main/java/de/thedevstack/conversationsplus/xmpp/chatmarkers/ChatMarkers.java @@ -0,0 +1,28 @@ +package de.thedevstack.conversationsplus.xmpp.chatmarkers; + +import de.thedevstack.conversationsplus.xml.Element; +import de.thedevstack.conversationsplus.xml.XmlElementContainer; + +/** + * Representation of the ChatMarkers hint. + *
+ *  
+ * 
+ */ +public enum ChatMarkers implements XmlElementContainer { + MARKABLE("markable"), + RECEIVED("received"), + DISPLAYED("displayed"), + ACKNOWLEDGED("acknowledged"); + + private final Element xmlElement; + + ChatMarkers(String elementName) { + this.xmlElement = new Element(elementName, ChatMarkersXep.NAMESPACE); + } + + @Override + public Element getXmlElement() { + return xmlElement; + } +} diff --git a/src/main/java/de/thedevstack/conversationsplus/xmpp/chatmarkers/ChatMarkersHandler.java b/src/main/java/de/thedevstack/conversationsplus/xmpp/chatmarkers/ChatMarkersHandler.java new file mode 100644 index 00000000..a8277a04 --- /dev/null +++ b/src/main/java/de/thedevstack/conversationsplus/xmpp/chatmarkers/ChatMarkersHandler.java @@ -0,0 +1,11 @@ +package de.thedevstack.conversationsplus.xmpp.chatmarkers; + +import de.thedevstack.conversationsplus.entities.Account; +import de.thedevstack.conversationsplus.xmpp.jid.Jid; + +/** + */ +public interface ChatMarkersHandler { + void messageReceived(Account account, Jid from, String messageId); + void messageDisplayed(Account account, Jid from, String messageId); +} diff --git a/src/main/java/de/thedevstack/conversationsplus/xmpp/chatmarkers/ChatMarkersPacketHandler.java b/src/main/java/de/thedevstack/conversationsplus/xmpp/chatmarkers/ChatMarkersPacketHandler.java new file mode 100644 index 00000000..89fd945a --- /dev/null +++ b/src/main/java/de/thedevstack/conversationsplus/xmpp/chatmarkers/ChatMarkersPacketHandler.java @@ -0,0 +1,24 @@ +package de.thedevstack.conversationsplus.xmpp.chatmarkers; + +import de.thedevstack.conversationsplus.entities.Account; +import de.thedevstack.conversationsplus.entities.Message; +import de.thedevstack.conversationsplus.xml.Element; +import de.thedevstack.conversationsplus.xmpp.stanzas.MessagePacket; + +/** + */ +public class ChatMarkersPacketHandler { + private ChatMarkersHandler handler; + + public void handleMessagePacket(Account account, MessagePacket packet, Message message) { + message.markable = packet.hasChild("markable", ChatMarkersXep.NAMESPACE); + Element received = packet.findChild("received", ChatMarkersXep.NAMESPACE); + if (null != received && null != handler) { + handler.messageReceived(account, packet.getFrom().toBareJid(), received.getAttribute("id")); + } + Element displayed = packet.findChild("displayed", ChatMarkersXep.NAMESPACE); + if (null != displayed && null != handler) { + handler.messageDisplayed(account, packet.getFrom().toBareJid(), displayed.getAttribute("id")); + } + } +} diff --git a/src/main/java/de/thedevstack/conversationsplus/xmpp/chatmarkers/ChatMarkersXep.java b/src/main/java/de/thedevstack/conversationsplus/xmpp/chatmarkers/ChatMarkersXep.java new file mode 100644 index 00000000..58f3f66e --- /dev/null +++ b/src/main/java/de/thedevstack/conversationsplus/xmpp/chatmarkers/ChatMarkersXep.java @@ -0,0 +1,49 @@ +package de.thedevstack.conversationsplus.xmpp.chatmarkers; + +import de.thedevstack.conversationsplus.xmpp.AbstractXep; +import de.thedevstack.conversationsplus.xmpp.IqPacketHandler; + +/** + */ +public class ChatMarkersXep extends AbstractXep { + public static final String NAMESPACE = "urn:xmpp:chat-markers:0"; + + public ChatMarkersXep(boolean enabled) { + super(enabled); + } + + @Override + public String xepNumber() { + return "0333"; + } + + @Override + public String shortName() { + return ""; + } + + @Override + public String name() { + return "Chat Markers"; + } + + @Override + public String namespace() { + return NAMESPACE; + } + + @Override + public String featureNamespace() { + return namespace(); + } + + @Override + public String elementName() { + return null; + } + + @Override + public IqPacketHandler handler() { + return null; + } +} -- cgit v1.2.3