Roar updates:

- When joining a groupchat, old messages will no longer popup


- import cleanups in RosterDialog.java and PluginManager.java

git-svn-id: http://svn.igniterealtime.org/svn/repos/spark/trunk@12430 b35dd754-fafc-0310-a699-88a17e54d16e
This commit is contained in:
Wolf Posdorfer
2011-05-30 10:57:45 +00:00
committed by wolf.posdorfer
parent 247bf52f3b
commit 891a7580d5
5 changed files with 177 additions and 68 deletions

Binary file not shown.

View File

@ -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;

View File

@ -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;

View File

@ -1,84 +1,98 @@
<project name="roar" default="jar" basedir="..">
<property name="plug.dir" value="${basedir}"/>
<property name="plug.lib.dir" value="${plug.dir}/build/lib"/>
<property name="plug.lib.dist.dir" value="${plug.lib.dir}/dist"/>
<property name="plug.dir" value="${basedir}"/>
<property name="plug.lib.dir" value="${plug.dir}/build/lib"/>
<property name="plug.lib.dist.dir" value="${plug.lib.dir}/dist"/>
<property name="spark.home" value="${basedir}/../../.."/>
<property name="spark.target" value="${basedir}/../../../target"/>
<property name="spark.build" value="${basedir}/../../../target/build"/>
<property name="spark.home" value="${basedir}/../../.."/>
<property name="spark.target" value="${basedir}/../../../target"/>
<property name="spark.build" value="${basedir}/../../../target/build"/>
<property name="classes.dir" value="${spark.target}/plugins-dev/roar/classes"/>
<property name="src.dir" value="${plug.dir}/src/java"/>
<property name="resources.dir" location="${plug.dir}/src/resources"/>
<property name="classes.dir" value="${spark.target}/plugins-dev/roar/classes"/>
<property name="src.dir" value="${plug.dir}/src/java"/>
<property name="resources.dir" location="${plug.dir}/src/resources"/>
<property name="target.dir" value="${spark.target}/plugins/roar"/>
<property name="target.lib.dir" value="${target.dir}/lib"/>
<property name="jar.file" value="${target.dir}/lib/plugin-classes.jar"/>
<property name="target.dir" value="${spark.target}/plugins/roar"/>
<property name="target.lib.dir" value="${target.dir}/lib"/>
<property name="jar.file" value="${target.dir}/lib/plugin-classes.jar"/>
<path id="lib.classpath">
<fileset dir="${plug.lib.dir}" includes="**/*.jar, **/*.zip"/>
<fileset dir="${spark.home}/target/build/lib" includes="**/*.jar, **/*.zip"/>
<fileset dir="${spark.home}/target/build/lib/windows" includes="**/*.jar"/>
</path>
<path id="lib.classpath">
<fileset dir="${plug.lib.dir}" includes="**/*.jar, **/*.zip"/>
<fileset dir="${spark.home}/target/build/lib" includes="**/*.jar, **/*.zip"/>
<fileset dir="${spark.home}/target/build/lib/windows" includes="**/*.jar"/>
</path>
<target name="clean" description="Cleans all build related output">
<delete file="${jar.file}"/>
<delete dir="${classes.dir}"/>
<delete dir="${target.dir}"/>
</target>
<target name="clean" description="Cleans all build related output">
<delete file="${jar.file}"/>
<delete dir="${classes.dir}"/>
<delete dir="${target.dir}"/>
</target>
<target name="compile" description="Compiles plugin source">
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}"
<target name="compile" description="Compiles plugin source">
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}"
destdir="${classes.dir}"
classpathref="lib.classpath"
source="1.6"
debug="true"
target="1.6"/>
<copy todir="${classes.dir}">
<fileset dir="${src.dir}" includes="**/*.png"/>
<fileset dir="${src.dir}" includes="**/*.gif"/>
<fileset dir="${src.dir}" includes="**/*.jpg"/>
<fileset dir="${src.dir}" includes="**/*.jpeg"/>
<fileset dir="${src.dir}" includes="**/*.wav"/>
<fileset dir="${src.dir}" includes="**/*.properties"/>
</copy>
</target>
<copy todir="${classes.dir}">
<fileset dir="${src.dir}" includes="**/*.png"/>
<fileset dir="${src.dir}" includes="**/*.gif"/>
<fileset dir="${src.dir}" includes="**/*.jpg"/>
<fileset dir="${src.dir}" includes="**/*.jpeg"/>
<fileset dir="${src.dir}" includes="**/*.wav"/>
<fileset dir="${src.dir}" includes="**/*.properties"/>
</copy>
</target>
<target name="jar" depends="clean,compile,resources" description="Makes a plugin jar">
<mkdir dir="${target.dir}"/>
<mkdir dir="${target.lib.dir}"/>
<target name="jar" depends="clean,compile,resources" description="Makes a plugin jar">
<mkdir dir="${target.dir}"/>
<mkdir dir="${target.lib.dir}"/>
<copy todir="${target.lib.dir}">
<fileset file="${plug.lib.dir}/lib" includes="**/*"/>
</copy>
<copy todir="${target.lib.dir}">
<fileset file="${plug.lib.dir}/lib" includes="**/*"/>
</copy>
<copy todir="${target.dir}">
<fileset file="${plug.dir}/plugin.xml"/>
</copy>
<copy todir="${target.dir}">
<fileset file="${plug.dir}/plugin.xml"/>
</copy>
<jar basedir="${classes.dir}" file="${jar.file}" update="false"/>
<jar basedir="${classes.dir}" file="${jar.file}" update="false"/>
<zip zipfile="${spark.build}/plugins/roar.jar" basedir="${target.dir}"/>
<zip zipfile="${spark.build}/plugins/roar.jar" basedir="${target.dir}"/>
<copy todir="${spark.home}/src/commercial">
<fileset file="${spark.build}/plugins/roar.jar"/>
</copy>
</target>
<copy todir="${spark.home}/src/commercial">
<fileset file="${spark.build}/plugins/roar.jar"/>
</copy>
</target>
<!-- resources =================================================================================== -->
<target name="resources">
<copy todir="${classes.dir}">
<fileset dir="${resources.dir}">
<include name="**/*"/>
</fileset>
<fileset dir="${src.dir}">
<include name="**/*.properties"/>
</fileset>
</copy>
</target>
<property name="pluginsstuff" value="${basedir}\..\..\..\target\build\plugins"/>
<target name="copy" depends="jar">
<echo message="${pluginsstuff}"/>
<copy todir="${pluginsstuff}">
<fileset file="${spark.build}/plugins/roar.jar"/>
</copy>
</target>
<!-- resources =================================================================================== -->
<target name="resources">
<copy todir="${classes.dir}">
<fileset dir="${resources.dir}">
<include name="**/*"/>
</fileset>
<fileset dir="${src.dir}">
<include name="**/*.properties"/>
</fileset>
</copy>
</target>
</project>

View File

@ -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 <b>20110526T08:27:18</b>, split at "T"
*/
public String extractDate(String xmlstring) {
int indexofstamp = xmlstring.indexOf("stamp=");
String result = xmlstring
.substring(indexofstamp + 7, indexofstamp + 24);
return result;
}
}