/* This code is part of Freenet. It is distributed under the GNU General * Public License, version 2 (or at your option any later version). See * http://www.gnu.org/ for further details of the GPL. */ package freenet.node.useralerts; import java.lang.ref.WeakReference; import java.text.DateFormat; import java.util.Date; import freenet.clients.fcp.FCPMessage; import freenet.clients.fcp.TextFeedMessage; import freenet.l10n.NodeL10n; import freenet.node.DarknetPeerNode; import freenet.node.PeerNode; import freenet.support.HTMLNode; // Node To Node Text Message User Alert public class N2NTMUserAlert extends AbstractUserAlert { private final WeakReference<PeerNode> peerRef; private final String messageText; private final int fileNumber; private final long composedTime; private final long sentTime; private final long receivedTime; private String sourceNodeName; private String sourcePeer; public N2NTMUserAlert(DarknetPeerNode sourcePeerNode, String message, int fileNumber, long composedTime, long sentTime, long receivedTime) { super(true, null, null, null, null, UserAlert.MINOR, true, null, true, null); this.messageText = message; this.fileNumber = fileNumber; this.composedTime = composedTime; this.sentTime = sentTime; this.receivedTime = receivedTime; peerRef = sourcePeerNode.getWeakRef(); sourceNodeName = sourcePeerNode.getName(); sourcePeer = sourcePeerNode.getPeer().toString(); } @Override public String getTitle() { return l10n("title", new String[] { "number", "peername", "peer" }, new String[] { Integer.toString(fileNumber), sourceNodeName, sourcePeer }); } @Override public String getText() { return l10n("header", new String[] { "from", "composed", "sent", "received" }, new String[] { sourceNodeName, DateFormat.getInstance().format(new Date(composedTime)), DateFormat.getInstance().format(new Date(sentTime)), DateFormat.getInstance().format(new Date(receivedTime)) }) + ": " + messageText; } @Override public String getShortText() { return l10n("headerShort", "from", sourceNodeName); } @Override public HTMLNode getHTMLText() { HTMLNode alertNode = new HTMLNode("div"); alertNode.addChild("p", l10n("header", new String[] { "from", "composed", "sent", "received" }, new String[] { sourceNodeName, DateFormat.getInstance().format(new Date(composedTime)), DateFormat.getInstance().format(new Date(sentTime)), DateFormat.getInstance().format(new Date(receivedTime)) })); String[] lines = messageText.split("\n"); for (int i = 0, c = lines.length; i < c; i++) { alertNode.addChild("#", lines[i]); if (i != lines.length - 1) alertNode.addChild("br"); } DarknetPeerNode pn = (DarknetPeerNode) peerRef.get(); if(pn != null) alertNode.addChild("p").addChild("a", "href", "/send_n2ntm/?peernode_hashcode=" + pn.hashCode(), l10n("reply")); return alertNode; } @Override public String dismissButtonText() { return l10n("delete"); } private String l10n(String key) { return NodeL10n.getBase().getString("N2NTMUserAlert." + key); } private String l10n(String key, String[] patterns, String[] values) { return NodeL10n.getBase().getString("N2NTMUserAlert." + key, patterns, values); } private String l10n(String key, String pattern, String value) { return NodeL10n.getBase().getString("N2NTMUserAlert." + key, pattern, value); } @Override public void onDismiss() { DarknetPeerNode pn = (DarknetPeerNode) peerRef.get(); if(pn != null) pn.deleteExtraPeerDataFile(fileNumber); } @Override public FCPMessage getFCPMessage() { return new TextFeedMessage(getTitle(), getShortText(), getText(), getPriorityClass(), getUpdatedTime(), sourceNodeName, composedTime, sentTime, receivedTime, messageText); } @Override public long getUpdatedTime() { return receivedTime; } @Override public boolean isValid() { DarknetPeerNode pn = (DarknetPeerNode) peerRef.get(); if(pn != null) { sourceNodeName = pn.getName(); sourcePeer = pn.getPeer().toString(); } return true; } }