package com.mogujie.tt.cache.biz;
import java.util.List;
import java.util.Queue;
import android.content.Context;
import com.mogujie.tt.cache.CacheModel;
import com.mogujie.tt.cache.ContactCacheImpl;
import com.mogujie.tt.cache.MessageCacheImpl;
import com.mogujie.tt.db.ContactModel;
import com.mogujie.tt.db.UserModel;
import com.mogujie.tt.entity.MessageInfo;
import com.mogujie.tt.entity.User;
import com.mogujie.tt.imlib.utils.IMUIHelper;
import com.mogujie.tt.imlib.utils.IMUIHelper.SessionInfo;
public class CacheHub {
private static CacheHub instance;
public static CacheHub getInstance() {
if (null == instance) {
instance = new CacheHub();
}
return instance;
}
private SessionInfo sessionInfo;
/**
* @author shuchen
*/
private CacheHub() {
}
/**
* 清除所有缓存
*/
public void clear() {
CacheModel.getInstance().clear();
}
public void setSessionInfo(IMUIHelper.SessionInfo sessionIfo) {
this.sessionInfo = sessionIfo;
}
public SessionInfo getSessionInfo() {
return sessionInfo;
}
/*
* 设置用户信息
* @param user 用户信息
*/
public void setUser(User user, Context context) {
CacheModel.getInstance().setUser(user);
if (null != context) {
new UserModel(context).add(user);
}
}
/*
* 获得用户信息
* @param userId 用户ID
*/
public User getUser(String userId, Context context) {
User user = CacheModel.getInstance().getUser(userId);
if (null == user && null != context) {
user = new UserModel(context).query(userId);
CacheModel.getInstance().setUser(user);
}
return user;
}
/*
* 设置当前登入用户
* @param user 用户信息
*/
public void setLoginUser(User user) {
CacheModel.setLoginUser(user);
return;
}
/*
* 获得当前登入用户
*/
public User getLoginUser() {
return CacheModel.getLoginUser();
}
/*
* 获得当前登入用户Id
*/
public String getLoginUserId() {
return CacheModel.getLoginUserId();
}
/*
* 设置当前聊天对象ID
* @param userId 聊天对象用户ID
*/
public void setChatUserId(String userId) {
CacheModel.getInstance().setChatUserId(userId);
return;
}
/*
* 获得当前聊天对象用户ID
*/
public String getChatUserId() {
return CacheModel.getInstance().getChatUserId();
}
/*
* 设置当前聊天对象
* @param user 用户信息
*/
public void setChatUser(User user) {
CacheModel.getInstance().setChatUser(user);
return;
}
/*
* 清空当前聊天对象并设置前一回聊天对象
* @param user 用户信息
*/
public void clearChatUser() {
CacheModel.getInstance().clearChatUser();
return;
}
/*
* 获得当前聊天对象
*/
public User getChatUser() {
return CacheModel.getInstance().getChatUser(); // 参数判空放在下一层
}
/*
* 获得前一回聊天对象
*/
// public User getLastChatUser() {
// return CacheModel.getInstance().getLastChatUser(); // 参数判空放在下一层
// }
/*
* 清空前一回聊天对象
*/
// public void clearLastChatUser() {
// CacheModel.getInstance().clearLastChatUser();
// return; // 参数判空放在下一层
// }
/*
* 获得与好友聊天的最后一条信息
* @param userId 用户ID
*/
public MessageInfo getLastMessage(String friendUserId) {
return CacheModel.getInstance().getLastMessage(friendUserId);
}
/*
* 推送一条新消息到DB并更新最后一条消息
*/
public int obtainMsgId() {
return CacheModel.getInstance().obtainMsgId();
}
/*
* 推送一条新消息到DB并更新最后一条消息
*/
public boolean pushMsg(MessageInfo msgInfo) {
return CacheModel.getInstance().push(msgInfo);
}
/**
* 从数据库拉取信息两个用户之间部分信息(由偏移量和信息条数决定)
*
* @param userId 用户ID
* @param friendUserId 好友ID
* @param msgId 起始ID
* @param offset 距离起始ID的偏移量
* @param size 拉取的消息条数
* @return MessageInfo
*/
public List<MessageInfo> pullMsg(String userId, String friendUserId, int msgId, int offset,
int size) {
return CacheModel.getInstance().pullMsg(userId, friendUserId, msgId, offset, size);
}
public List<String> getFriendIdList(String ownerId, Context context) {
List<String> idList = CacheModel.getInstance().getFriendIdList();
if (idList.size() < 1 && null != context) {
idList = new ContactModel(context).queryFriendsIdList(ownerId);
CacheModel.getInstance().setFriendIdList(idList);
}
return idList;
}
public boolean setLoadedFriendId(String friendId) {
return CacheModel.getInstance().setLoadedFriendId(friendId);
}
public boolean isLoadedFriendId(String friendId) {
return CacheModel.getInstance().isLoadedFriendId(friendId);
}
/*
* 清空某个用户未读消息计数
* @param userId 用户ID
*/
public int clearUnreadCount(String userId) {
return MessageCacheImpl.getInstance().clearUnreadCount(userId);
}
/*
* 获得用户未读消息计数
* @param userId 用户ID
*/
public int getUnreadCount(String userId) {
return MessageCacheImpl.getInstance().getUnreadCount(userId);
}
/*
* 获得用户未读消息计数
* @param userId 用户ID
*/
public int getUnreadCount() {
return MessageCacheImpl.getUnreadCount();
}
/*
* 添加一条最近联系人
* @param userId 最近联系人
* @return void
*/
public void addFriendId(String userId) {
ContactCacheImpl.getInstance().addFriendId(userId);
}
public void addFriendList(Queue<String> list){
ContactCacheImpl.getInstance().addFriendList(list);
}
/*
* 根据消息ID更新DB中消息的加载状态
*/
public Boolean updateMsgStatus(String msgId, int state) {
//return CacheModel.getInstance().updateMsgStatus(msgId, state);
return false;
}
/*
* 更新两个用户之间的所有消息的加载状态
*/
public Boolean updateMsgStatus(String userId, String friendUserId, int state) {
return CacheModel.getInstance().updateMsgStatus(userId, friendUserId, state);
}
/*
* 根据消息ID更新DB中消息的是否已读或展现状态
*/
public Boolean updateMsgReadStatus(int msgId, int state) {
return CacheModel.getInstance().updateMsgReadStatus(msgId, state);
}
/*
* 更新消息ID,主要针对图文混排的消息
*/
public Boolean updateMsgParentId(int msgId, int msgParentId) {
return CacheModel.getInstance().updateMsgParentId(msgId, msgParentId);
}
/*
* 更新两个用户之间的所有消息是否已读或展现状态
*/
public Boolean updateMsgReadStatus(String userId, String friendUserId, int state) {
return CacheModel.getInstance().updateMsgReadStatus(userId, friendUserId, state);
}
/**
* 更改图片存储路径
*
* @param entityId
* @param friendUserId
* @return Boolean
*/
public Boolean updateMsgImageSavePath(String MsgId, String newPath) {
return CacheModel.getInstance().updateMsgImageSavePath(MsgId, newPath);
}
/*
* 初次打开时检查DB中消息是否达到上限,若达到则删除最老的部分信息
* @return 返回删除消息的时间分隔线
*/
public int checkAndDeleteIfNeed() {
// 如果需要的话,删除最老的部分历史信息
return CacheModel.getInstance().checkAndDeleteIfNeed();
}
}