package com.partynetwork.iparty.app.manager; import java.util.ArrayList; import java.util.List; import com.lidroid.xutils.db.sqlite.Selector; import com.lidroid.xutils.db.sqlite.WhereBuilder; import com.lidroid.xutils.db.table.DbModel; import com.lidroid.xutils.exception.DbException; import com.partynetwork.iparty.app.entities.ChartHisBean; import com.partynetwork.iparty.app.entities.IMessage; import android.content.Context; /** * * 消息管理 * */ public class MessageManager extends BaseManager { private static MessageManager messageManager = null; private MessageManager(Context context) { super(context); } public static MessageManager getInstance(Context context) { if (messageManager == null) { messageManager = new MessageManager(context); } return messageManager; } /** * * 保存消息. * */ public void saveIMessage(IMessage msg) { try { db.saveBindingId(msg); } catch (DbException e) { e.printStackTrace(); } } /** * * 更新消息. * */ public void updataIMessage(IMessage msg) { try { db.update(msg); } catch (DbException e) { e.printStackTrace(); } } /** * * 更新状态. * */ public void updateStatus(IMessage iMessage) { try { iMessage.setState(1); db.update(iMessage, "msg_state"); } catch (DbException e) { e.printStackTrace(); } } /** * 跟新默认的所有记录 * * @param to */ public void updateStatusByFrom(String from) { List<IMessage> lists; try { lists = db.findAll(Selector.from(IMessage.class).where( "msg_withUser", "=", from)); if (lists == null) { return; } for (IMessage message : lists) { if (message.getState() == 0) { message.setState(1); } } db.updateAll(lists, "msg_state"); } catch (DbException e) { } } /** * * 查找与某人的聊天记录聊天记录 * * @param pageNum * 第几页 * @param pageSize * 要查的记录条数 * @return * @throws DbException */ public List<IMessage> getMessageListByFrom(String fromUser, int pageNum, int pageSize) { List<IMessage> list = new ArrayList<IMessage>(); try { list = db.findAll(Selector.from(IMessage.class) .where("msg_withUser", "=", fromUser).orderBy("id")); } catch (DbException e) { e.printStackTrace(); } return list; } /** * * 查找与某人的聊天记录总数 * * @throws DbException * */ public long getChatCountWithSb(String fromUser) { long result = 0; try { result = db.count(Selector.from(IMessage.class).where( "msg_withUser", "=", fromUser)); } catch (DbException e) { e.printStackTrace(); } return result; } /** * 删除与某人的聊天记录 author shimiso * * @param fromUser */ public void delChatHisWithSb(String fromUser) { List<IMessage> list; try { list = db.findAll(Selector.from(IMessage.class).where( "msg_withUser", "=", fromUser)); db.deleteAll(list); } catch (DbException e) { e.printStackTrace(); } } public void delLastChatWithSb(IMessage iMessage) { try { db.delete(iMessage); } catch (DbException e) { e.printStackTrace(); } } /** * 获取最近聊天人聊天最后一条消息和未读消息总数 * * @return * @throws DbException */ public List<ChartHisBean> getRecentContactsWithLastMsg() { List<ChartHisBean> list = new ArrayList<ChartHisBean>(); try { List<DbModel> dbModels = db.findDbModelAll(Selector .from(IMessage.class) .groupBy("msg_withUser") .select("msg_withUser", "max(msg_time) as msg_time", "msg_content")); if (dbModels == null) { return list; } for (DbModel model : dbModels) { ChartHisBean bean = new ChartHisBean(); bean.setFrom(model.getString("msg_withUser")); bean.setNoticeTime(model.getString("msg_time")); bean.setContent(model.getString("msg_content")); bean.setNoticeSum((int) db.count(Selector .from(IMessage.class) .where("msg_state", "=", "0") .and("msg_withUser", "=", model.getString("msg_withUser")))); bean.setNoticeType(ChartHisBean.CHAT_MSG); list.add(bean); } } catch (DbException e) { } return list; } public void cleanManager() { messageManager=null; } }