package com.mogujie.tt.imlib;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import com.mogujie.tt.entity.MessageInfo;
import com.mogujie.tt.log.Logger;
public class IMUnreadMsgManager extends IMManager {
private static IMUnreadMsgManager inst;
public static IMUnreadMsgManager instance() {
synchronized (IMUnreadMsgManager.class) {
if (inst == null) {
inst = new IMUnreadMsgManager();
}
return inst;
}
}
private Logger logger = Logger.getLogger(IMUnreadMsgManager.class);
//todo eric, add session type
// key = session_id
private HashMap<String, List<MessageInfo>> unreadMsgs = new HashMap<String, List<MessageInfo>>();
public synchronized void add(MessageInfo msg) {
logger.d("unread#unreadMgr#add unread msg:%s", msg);
List<MessageInfo> msgList = unreadMsgs.get(msg.sessionId);
if (msgList == null) {
msgList = new ArrayList<MessageInfo>();
}
msgList.add(msg);
unreadMsgs.put(msg.sessionId, msgList);
}
public synchronized List<MessageInfo> popUnreadMsgList(String sessionId) {
logger.d("unread#getUnreadMsgList sessionId:%s", sessionId);
List<MessageInfo> msgList = unreadMsgs.remove(sessionId);
if (msgList == null) {
logger.w("unread# sessionId:%s has no unreadMsgs", sessionId);
return null;
}
return msgList;
}
public synchronized int getUnreadMsgListCnt(String sessionId) {
logger.d("unread#getUnreadMsgListCnt sessionId:%s", sessionId);
List<MessageInfo> msgList = unreadMsgs.get(sessionId);
if (msgList == null) {
return 0;
}
return msgList.size();
}
public synchronized MessageInfo getLatestMessage(String sessionId) {
logger.d("unread#getLatestMessage sessionId:%s", sessionId);
List<MessageInfo> msgList = unreadMsgs.get(sessionId);
if (msgList == null || msgList.isEmpty()) {
return null;
}
return msgList.get(msgList.size() - 1);
}
// public synchronized MessageInfo getUnreadMsg(String sessionId, String msgId) {
// logger.d("unread#getUnreadMsg sessionId:%s, msgId:%s", sessionId, msgId);
//
// List<MessageInfo> msgList = unreadMsgs.get(sessionId);
// if (msgList == null) {
// logger.w("unread# sessionId:%s has no unreadMsgs", sessionId);
// return null;
// }
//
// for (MessageInfo msg : msgList) {
// if (msg.msgId.equals(msgId)) {
// return msg;
// }
// }
//
// logger.d("unread#no such unread msg");
// return null;
// }
}