package fi.iki.murgo.irssinotifier;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Calendar;
import java.util.Locale;
import org.json.JSONException;
import org.json.JSONObject;
public class IrcMessage {
private static final String PRIVATE = "!PRIVATE";
private static final String TOOLONG = "toolong";
private String message;
private String channel;
private String nick;
private Date serverTimestamp;
private String externalId;
private boolean shown;
private boolean clearedFromFeed;
private long id;
public void deserialize(JSONObject obj) throws JSONException {
setMessage(obj.getString("message"));
setChannel(obj.getString("channel"));
setNick(obj.getString("nick"));
setServerTimestamp((long) (Double.parseDouble(obj.getString("server_timestamp")) * 1000));
if (obj.has("id")) {
String externalId = obj.getString("id");
if (externalId != null && externalId.length() > 0)
setExternalId(externalId);
}
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getChannel() {
return channel;
}
public void setChannel(String channel) {
this.channel = channel;
}
public String getNick() {
return nick;
}
public void setNick(String sender) {
this.nick = sender;
}
public Date getServerTimestamp() {
return serverTimestamp;
}
public void setServerTimestamp(long serverTimestamp) {
this.serverTimestamp = new Date(serverTimestamp);
}
public String getServerTimestampAsString() {
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");
return dateFormat.format(serverTimestamp);
}
private static Calendar clearTimes(Calendar c) {
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
return c;
}
public String getServerTimestampAsPrettyDate() {
Calendar today = Calendar.getInstance();
today = clearTimes(today);
Calendar yesterday = Calendar.getInstance();
yesterday.add(Calendar.DAY_OF_YEAR,-1);
yesterday = clearTimes(yesterday);
Calendar lastWeek = Calendar.getInstance();
lastWeek.add(Calendar.DAY_OF_YEAR,-7);
lastWeek = clearTimes(lastWeek);
if (serverTimestamp.getTime() > today.getTimeInMillis())
return "today";
else if (serverTimestamp.getTime() > yesterday.getTimeInMillis())
return "yesterday";
else if (serverTimestamp.getTime() > lastWeek.getTimeInMillis()) {
Locale locale = new Locale("US");
SimpleDateFormat dateFormat = new SimpleDateFormat("EEEE", locale);
return dateFormat.format(serverTimestamp);
}
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
return dateFormat.format(serverTimestamp);
}
public void decrypt(String encryptionKey) throws CryptoException {
if (message.equals(TOOLONG))
message = "Message too long";
else
message = Crypto.decrypt(encryptionKey, message);
channel = Crypto.decrypt(encryptionKey, channel);
nick = Crypto.decrypt(encryptionKey, nick);
message = message.replace('´', '\'');
channel = channel.replace('´', '\'');
nick = nick.replace('´', '\'');
}
public boolean isPrivate() {
return PRIVATE.equals(channel);
}
public String getLogicalChannel() {
return isPrivate() ? getNick() : getChannel();
}
public void setExternalId(String externalId) {
this.externalId = externalId;
}
public String getExternalId() {
return externalId;
}
public void setShown(boolean shown) {
this.shown = shown;
}
public boolean isShown() {
return shown;
}
public void setClearedFromFeed(boolean b) {
this.clearedFromFeed = b;
}
public boolean getClearedFromFeed() {
return clearedFromFeed;
}
public void setId(long id) {
this.id = id;
}
public long getId() {
return id;
}
}