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; + + } }