diff --git a/src/commercial/roar.jar b/src/commercial/roar.jar
index 5553519b..d8fbec85 100644
Binary files a/src/commercial/roar.jar and b/src/commercial/roar.jar differ
diff --git a/src/java/org/jivesoftware/spark/PluginManager.java b/src/java/org/jivesoftware/spark/PluginManager.java
index b723d990..001bb145 100644
--- a/src/java/org/jivesoftware/spark/PluginManager.java
+++ b/src/java/org/jivesoftware/spark/PluginManager.java
@@ -19,7 +19,6 @@
*/
package org.jivesoftware.spark;
-import java.awt.Component;
import java.awt.EventQueue;
import java.io.File;
import java.io.FileOutputStream;
@@ -48,8 +47,6 @@ import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.jivesoftware.MainWindowListener;
import org.jivesoftware.Spark;
-import org.jivesoftware.resource.Res;
-import org.jivesoftware.resource.SparkRes;
import org.jivesoftware.spark.component.tabbedPane.SparkTabbedPane;
import org.jivesoftware.spark.plugin.Plugin;
import org.jivesoftware.spark.plugin.PluginClassLoader;
diff --git a/src/java/org/jivesoftware/spark/ui/RosterDialog.java b/src/java/org/jivesoftware/spark/ui/RosterDialog.java
index 02aec34e..f1a3ff0c 100644
--- a/src/java/org/jivesoftware/spark/ui/RosterDialog.java
+++ b/src/java/org/jivesoftware/spark/ui/RosterDialog.java
@@ -33,8 +33,6 @@ import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
diff --git a/src/plugins/roar/build/build.xml b/src/plugins/roar/build/build.xml
index f1a87cfb..a7041842 100644
--- a/src/plugins/roar/build/build.xml
+++ b/src/plugins/roar/build/build.xml
@@ -1,84 +1,98 @@
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
+
-
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/plugins/roar/src/java/org/jivesoftware/spark/roar/RoarMessageListener.java b/src/plugins/roar/src/java/org/jivesoftware/spark/roar/RoarMessageListener.java
index 732c38ab..7adbba02 100644
--- a/src/plugins/roar/src/java/org/jivesoftware/spark/roar/RoarMessageListener.java
+++ b/src/plugins/roar/src/java/org/jivesoftware/spark/roar/RoarMessageListener.java
@@ -19,9 +19,13 @@
*/
package org.jivesoftware.spark.roar;
+import java.util.Calendar;
+import javax.swing.JFrame;
import org.jivesoftware.smack.packet.Message;
+import org.jivesoftware.spark.SparkManager;
import org.jivesoftware.spark.roar.displaytype.RoarDisplayType;
import org.jivesoftware.spark.ui.ChatRoom;
+import org.jivesoftware.spark.ui.ChatRoomNotFoundException;
import org.jivesoftware.spark.ui.GlobalMessageListener;
/**
@@ -42,14 +46,110 @@ public class RoarMessageListener implements GlobalMessageListener {
@Override
public void messageReceived(ChatRoom room, Message message) {
- _displaytype.messageReceived(room, message);
+ try {
+ ChatRoom activeroom = SparkManager.getChatManager()
+ .getChatContainer().getActiveChatRoom();
+
+ int framestate = SparkManager.getChatManager().getChatContainer()
+ .getChatFrame().getState();
+
+ boolean isoldgroupchat = isOldGroupchat(message);
+
+ if (framestate == JFrame.NORMAL && activeroom.equals(room)
+ && room.isShowing() && isoldgroupchat) {
+ // Do Nothing
+ } else {
+ _displaytype.messageReceived(room, message);
+ }
+
+ } catch (ChatRoomNotFoundException e) {
+ // i dont care
+ }
+
+ }
+
+ /**
+ * Checks if the Messages come from a time prior entering the groupchat
+ *
+ * @param message
+ * @return true if this is an old Message
+ */
+ private boolean isOldGroupchat(Message message) {
+ Calendar cal = Calendar.getInstance();
+
+ int day = cal.get(Calendar.DATE);
+ int month = cal.get(Calendar.MONTH) + 1;
+ int year = cal.get(Calendar.YEAR);
+
+ StringBuilder build = new StringBuilder();
+ // Append leading 0's to hour,minute,seconds
+ build.append(year);
+ build.append(month < 10 ? "0" + month : month);
+ build.append(day < 10 ? "0" + day : day);
+
+ int todaysDate = Integer.parseInt(build.toString());
+
+ // Append leading 0's to hour,minute,seconds
+ String hour = cal.get(Calendar.HOUR_OF_DAY) < 10 ? "0"
+ + cal.get(Calendar.HOUR_OF_DAY) : ""
+ + cal.get(Calendar.HOUR_OF_DAY);
+ String minute = cal.get(Calendar.MINUTE) < 10 ? "0"
+ + cal.get(Calendar.MINUTE) : "" + cal.get(Calendar.MINUTE);
+ String second = cal.get(Calendar.SECOND) < 10 ? "0"
+ + cal.get(Calendar.SECOND) : "" + cal.get(Calendar.SECOND);
+
+ int todaysHour = Integer.parseInt(hour + minute + second);
+
+ String stamp = "";
+
+ // get String with timestamp
+ // 20110526T08:27:18
+ if (message.toXML().contains("stamp=")) {
+ stamp = extractDate(message.toXML());
+ }
+
+ boolean isoldgroupchat = false;
+
+ if (stamp.length() > 0) {
+ // 20110526T08:27:18
+ // split into 20110526
+ // and 08:27:18
+ String[] split = stamp.split("T");
+ int dateFromMessage = Integer.parseInt(split[0]);
+
+ int hourFromMessage = Integer.parseInt(split[1].replace(":", ""));
+
+ // if dateFromMessage < todaysDate it is an old Chat
+ isoldgroupchat = dateFromMessage < todaysDate;
+
+ // if is still not old chat
+ if (!isoldgroupchat) {
+ // check if the time from Message < time now
+ isoldgroupchat = hourFromMessage < todaysHour;
+ }
+
+ }
+ return isoldgroupchat;
}
@Override
public void messageSent(ChatRoom room, Message message) {
_displaytype.messageSent(room, message);
}
-
+
+ /**
+ * Extracts the time stamp from a given xmpp packet
+ *
+ * @param xmlstring
+ * @return String like 20110526T08:27:18, split at "T"
+ */
+ public String extractDate(String xmlstring) {
+ int indexofstamp = xmlstring.indexOf("stamp=");
+ String result = xmlstring
+ .substring(indexofstamp + 7, indexofstamp + 24);
+ return result;
+
+ }
}