package com.ztspeech.simutalk2.data; import java.util.Date; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; public class MsgGroupList extends DataListObejct { private MsgGroupTable mTable = MsgGroupTable.getInstance(); public static final String PARAM_TYPE = "type"; public static final String PARAM_ID = "id"; private boolean mIsChanged = true; private static MsgGroupList mInstance = null; public static MsgGroupList getInstance() { if (mInstance == null) { mInstance = new MsgGroupList(); } return mInstance; } public void addMsgToDB(MsgInfoData data) { addToDB(data); } public MsgDataList addMsg(MsgInfoData data) { MsgDataList list = findAndNewItem(data.linkId, data.type); list.add(data); return list; } private boolean addToDB(MsgInfoData data) { return mTable.addToDB(data); } public boolean setDBLookover(long id) { return mTable.setDBLookover(id); } public boolean delete(long id) { synchronized(items) { int nSize = items.size(); for (int i = 0; i < nSize; i++) { MsgDataList data = (MsgDataList) items.get(i); if (data.id == id) { int nItems = data.size(); boolean remove = true; for (int n = 0; n < nItems; n++) { MsgInfoData info = (MsgInfoData) data.get(n); if (info.look_over != MsgInfoData.Define.LOOK_OVER) { remove = false; } } mTable.deleteLookOverMsg(id); if (remove) { items.remove(i); } return true; } } } return false; } public void load() { clear(); SQLiteDatabase reader = mTable.getReadableDatabase(); int nMaxId = 1; Cursor cursor = reader.rawQuery("select max(dataid) from " + mTable.tableName, null); if (cursor.moveToNext()) { nMaxId = cursor.getInt(0); } MsgInfoData.initId(nMaxId); cursor.close(); cursor = reader.rawQuery("select dataid,function, link_id, type,sender_id," + "sender_name,look_over,msg_time,text,sound_length,sound, state from " + mTable.tableName + " order by msg_time asc", null); while (cursor.moveToNext()) { int i = 0; MsgInfoData data = new MsgInfoData(); data.id = cursor.getInt(i++); data.setCmd(cursor.getString(i++)); data.linkId = cursor.getLong(i++); data.type = cursor.getInt(i++); data.senderId = cursor.getInt(i++); data.name = cursor.getString(i++); data.look_over = cursor.getInt(i++); data.time = new Date(cursor.getLong(i++)); data.text = cursor.getString(i++); data.vLen = cursor.getInt(i++); data.vId = cursor.getString(i++); data.state = cursor.getInt(i++); addMsg(data); } cursor.close(); } public MsgDataList findAndNewItem(long linkId, int type) { MsgDataList list = findItem(linkId, type); if (list != null) { return list; } return newItem(linkId, type); } public MsgDataList findItem(long linkId, int type) { synchronized(items) { int nCount = items.size(); for (int i = 0; i < nCount; i++) { MsgDataList list = (MsgDataList) items.get(i); if (list.id == linkId && list.type == type) { return list; } } } return null; } public void setMsgChanged(boolean b) { mIsChanged = b; } public boolean isMsgChanged() { return mIsChanged; } private MsgDataList findItemByLinkId(long linkId) { synchronized(items) { int nCount = items.size(); for (int i = 0; i < nCount; i++) { MsgDataList list = (MsgDataList) items.get(i); if (list.id == linkId) { return list; } } } return null; } public MsgDataList newItem(long linkId, int type) { MsgDataList list = new MsgDataList(); items.add(list); list.id = linkId; list.type = type; return list; } public void clearMsg() { mIsChanged = true; mTable.clearMsg(); this.clear(); } public boolean setItemLookOver(int msgId) { synchronized(items) { int nSize = items.size(); for (int i = 0; i < nSize; i++) { MsgDataList list = (MsgDataList) items.get(i); if (list.setItemLookOver(msgId)) { return true; } } } return false; } public boolean setState(long linkId, int state) { synchronized(items) { int nSize = items.size(); for (int i = 0; i < nSize; i++) { MsgDataList list = (MsgDataList) items.get(i); if (list.id == linkId) { return list.setState(linkId, state); } } } return false; } public void clearMsgBySenderId(long linkId) { mTable.clearMsgBySenderId(linkId); MsgDataList list = this.findItemByLinkId(linkId); if (list != null) { list.clear(); } } public MsgDataList findItemBySenderId(int mSendToId) { synchronized(items) { int nCount = items.size(); for (int i = 0; i < nCount; i++) { MsgDataList list = (MsgDataList) items.get(i); if (list.senderId == mSendToId) { return list; } } } return null; } public boolean setDBState(long linkId, int state) { return mTable.setState(linkId, state); } public int getNewsQACount() { int nCount = 0; synchronized(items) { int nSize = items.size(); for (int i = 0; i < nSize; i++) { MsgDataList data = (MsgDataList) items.get(i); if (data.type == MsgInfoData.Define.TYPE_QA) { if (data.getNewsCount() > 0) { nCount++; } } } } return nCount; } public int getFriendNewsCount() { int nCount = 0; synchronized(items) { int nSize = items.size(); for (int i = 0; i < nSize; i++) { MsgDataList data = (MsgDataList) items.get(i); if (data.type == MsgInfoData.Define.TYPE_MSG) { if (data.getNewsCount() > 0) { nCount++; } } } } return nCount; } public int getNewsCount() { int nCount = getNewsQACount() + getFriendNewsCount(); return nCount; } /** * ������Ϣ�Ƿ���� * @param linkId * @param time * @param type * @return */ public MsgInfoData findMessage(int senderId, long linkId, Date time, int type) { int nCount = items.size(); MsgInfoData data = null; for (int i = 0; i < nCount; i++) { MsgDataList list = (MsgDataList) items.get(i); data = list.findMessage(senderId, linkId, time, type); if (data != null) { return data; } } return null; } }