package com.openfire.manager;
import java.util.Calendar;
import java.util.Iterator;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smackx.OfflineMessageManager;
import android.content.Context;
import android.content.Intent;
import com.partynetwork.dataprovider.util.TimeUtil;
import com.partynetwork.iparty.app.entities.IMessage;
import com.partynetwork.iparty.app.manager.MessageManager;
import com.partynetwork.iparty.imessage.OpenfireConstant;
/**
*
* 离线信息管理类.
*
*/
public class OfflineMsgManager {
private static OfflineMsgManager offlineMsgManager = null;
private Context context;
private OfflineMsgManager(Context context) {
this.context = context;
}
public static OfflineMsgManager getInstance(Context context) {
if (offlineMsgManager == null) {
offlineMsgManager = new OfflineMsgManager(context);
}
return offlineMsgManager;
}
/**
*
* 处理离线消息.
*
* @param connection
* @author shimiso
* @update 2012-7-9 下午5:45:32
*/
public void dealOfflineMsg(XMPPConnection connection) {
OfflineMessageManager offlineManager = new OfflineMessageManager(
connection);
try {
Iterator<org.jivesoftware.smack.packet.Message> it = offlineManager
.getMessages();
while (it.hasNext()) {
org.jivesoftware.smack.packet.Message message = it.next();
if (message != null && message.getBody() != null
&& !message.getBody().equals("null")) {
String time = (String) message
.getProperty(IMessage.KEY_TIME);
time = time == null ? TimeUtil
.date2Str(Calendar.getInstance(),
OpenfireConstant.MS_FORMART) : time;
// 发送者
String from = message.getFrom().split("/")[0];
from=from.substring(0, from.indexOf("@"));
// 历史记录
IMessage newMessage = new IMessage();
newMessage.setState(0);
newMessage.setIsCome(1);
newMessage.setWithUser(from);
String utfString=new String(message.getBody().getBytes(), "UTF-8");
newMessage.setContent(utfString);
newMessage.setTime(time);
if (Message.Type.error == message.getType()) {
newMessage.setState(-1);
}
MessageManager.getInstance(context).saveIMessage(newMessage);
Intent intent = new Intent(
OpenfireConstant.NEW_MESSAGE_ACTION);
intent.putExtra(IMessage.IMMESSAGE_KEY, newMessage);
context.sendBroadcast(intent);
}
}
offlineManager.deleteMessages();
} catch (Exception e) {
e.printStackTrace();
}
}
}