//更新最近会话的未读消息数
function updateSessDiv(sess_type, to_id, name, unread_msg_count) {
var badgeDiv = document.getElementById("badgeDiv_" + to_id);
if (badgeDiv && unread_msg_count > 0) {
if (unread_msg_count >= 100) {
unread_msg_count = '99+';
}
badgeDiv.innerHTML = "" + unread_msg_count + "";
badgeDiv.style.display = "block";
} else if (badgeDiv == null) { //没有找到对应的聊天id
var headUrl;
if (sess_type == webim.SESSION_TYPE.C2C) {
headUrl = friendHeadUrl;
} else {
headUrl = groupHeadUrl;
}
addSess(sess_type, to_id, name, headUrl, unread_msg_count, 'sesslist');
}
}
//新增一条最近会话
function addSess(sess_type, to_id, name, face_url, unread_msg_count, sesslist, addPositonType) {
var sessDivId = "sessDiv_" + to_id;
var sessDiv = document.getElementById(sessDivId);
if (sessDiv) { //先判断是否存在会话DIV,已经存在,则不需要增加
return;
}
var sessList = document.getElementsByClassName(sesslist)[0];
sessDiv = document.createElement("div");
sessDiv.id = sessDivId;
//如果当前选中的用户是最后一个用户
sessDiv.className = "sessinfo";
//添加单击用户头像事件
sessDiv.onclick = function() {
if (sessDiv.className == "sessinfo-sel") return;
onSelSess(sess_type, to_id);
};
var faceImg = document.createElement("img");
faceImg.id = "faceImg_" + to_id;
faceImg.className = "face";
faceImg.src = face_url;
if (name.length > maxNameLen) { //名称过长,截取一部分
name = name.substr(0, maxNameLen) + "...";
}
var delchat = document.createElement("div");
delchat.className = 'delChat';
delchat.innerHTML = '删除会话';
delchat.onclick = function(e) {
var selSess = webim.MsgStore.sessByTypeId(sess_type, to_id)
if (sess_type == 'C2C') {
sess_type = 1;
webim.setAutoRead(selSess, true, false)
} else {
sess_type = 2;
webim.groupMsgReaded({
"GroupId": to_id,
"MsgReadedSeq": selSess._impl.curMaxMsgSeq
})
}
delChat(sess_type, to_id);
e.preventDefault()
e.stopPropagation()
return false;
}
var nameDiv = document.createElement("div");
nameDiv.id = "nameDiv_" + to_id;
nameDiv.className = "name";
nameDiv.innerHTML = name;
var badgeDiv = document.createElement("div");
badgeDiv.id = "badgeDiv_" + to_id;
badgeDiv.className = "badge";
if (unread_msg_count > 0) {
if (unread_msg_count >= 100) {
unread_msg_count = '99+';
}
badgeDiv.innerHTML = "" + unread_msg_count + "";
badgeDiv.style.display = "block";
}
sessDiv.appendChild(faceImg);
sessDiv.appendChild(nameDiv);
sessDiv.appendChild(badgeDiv);
sessDiv.appendChild(delchat);
if (!addPositonType || addPositonType == 'TAIL') {
sessList.appendChild(sessDiv); //默认插入尾部
} else if (addPositonType == 'HEAD') {
sessList.insertBefore(sessDiv); //插入头部
} else {
console.log(webim.Log.error('未知addPositonType' + addPositonType));
}
}
//删除会话
function delChat(sess_type, to_id) {
var data = {
'To_Account': to_id,
'chatType': sess_type
}
webim.deleteChat(
data,
function(resp) {
$("#sessDiv_" + to_id).remove();
}
);
}
//切换好友或群组聊天对象
function onSelSess(sess_type, to_id) {
if (selToID != null) {
//将之前选中用户的样式置为未选中样式
setSelSessStyleOff(selToID);
//设置之前会话的已读消息标记
webim.setAutoRead(selSess, false, false);
//保存当前的消息输入框内容到草稿
//获取消息内容
var msgtosend = document.getElementsByClassName("msgedit")[0].value;
var msgLen = webim.Tool.getStrBytes(msgtosend);
if (msgLen > 0) {
webim.Tool.setCookie("tmpmsg_" + selToID, msgtosend, 3600);
}
//清空聊天界面
document.getElementsByClassName("msgflow")[0].innerHTML = "";
selToID = to_id;
//设置当前选中用户的样式为选中样式
setSelSessStyleOn(to_id);
var tmgmsgtosend = webim.Tool.getCookie("tmpmsg_" + selToID);
if (tmgmsgtosend) {
$("#send_msg_text").val(tmgmsgtosend);
} else {
$("#send_msg_text").val('');
}
bindScrollHistoryEvent.reset();
var sessMap = webim.MsgStore.sessMap(); //获取到之前已经保存的消息
var sessCS = webim.SESSION_TYPE.GROUP + selToID;
if (sessMap && sessMap[sessCS]) { //判断之前是否保存过消息
selType = webim.SESSION_TYPE.GROUP
bindScrollHistoryEvent.init();
function compare(property) {
return function(a, b) {
var value1 = a[property];
var value2 = b[property];
return value1 - value2;
}
}
var sessMapOld = sessMap[sessCS]._impl.msgs.sort(compare('time'));
for (var i = 0; i < sessMapOld.length; i++) {
addMsg(sessMapOld[i]); //显示已经保存的消息
}
} else {
if (sess_type == webim.SESSION_TYPE.GROUP) {
if (selType == webim.SESSION_TYPE.C2C) {
selType = webim.SESSION_TYPE.GROUP;
}
selSess = null;
webim.MsgStore.delSessByTypeId(selType, selToID);
getLastGroupHistoryMsgs(function(msgList) {
getHistoryMsgCallback(msgList);
bindScrollHistoryEvent.init();
}, function(err) {
alert(err.ErrorInfo);
});
} else {
if (selType == webim.SESSION_TYPE.GROUP) {
selType = webim.SESSION_TYPE.C2C;
}
//如果是管理员账号,则为全员推送,没有历史消息
if (selToID == AdminAcount) {
var sess = webim.MsgStore.sessByTypeId(selType, selToID);
if (sess && sess.msgs() && sess.msgs().length > 0) {
getHistoryMsgCallback(sess.msgs());
} else {
getLastC2CHistoryMsgs(function(msgList) {
getHistoryMsgCallback(msgList);
bindScrollHistoryEvent.init();
}, function(err) {
alert(err.ErrorInfo);
});
}
return;
}
//拉取漫游消息
getLastC2CHistoryMsgs(function(msgList) {
getHistoryMsgCallback(msgList);
//绑定滚动操作
bindScrollHistoryEvent.init();
}, function(err) {
alert(err.ErrorInfo);
});
}
}
}
}
//删除会话
function deleteSessDiv(sess_type, to_id) {
var sessDiv = document.getElementById("sessDiv_" + to_id);
sessDiv && sessDiv.parentNode.removeChild(sessDiv);
}
//更新最近会话的名字
function updateSessNameDiv(sess_type, to_id, newName) {
var nameDivId = "nameDiv_" + to_id;
var nameDiv = document.getElementById(nameDivId);
if (nameDiv) {
if (newName.length > maxNameLen) { //帐号或昵称过长,截取一部分
newName = newName.substr(0, maxNameLen) + "...";
}
nameDiv.innerHTML = webim.Tool.formatText2Html(newName);
}
}
//更新最近会话的头像
function updateSessImageDiv(sess_type, to_id, newImageUrl) {
if (!newImageUrl) {
return;
}
var faceImageId = "faceImg_" + to_id;
var faceImage = document.getElementById(faceImageId);
if (faceImage) {
faceImage.innerHTML = webim.Tool.formatText2Html(newImageUrl);
}
}
function setSelSessStyleOn(newSelToID) {
var selSessDiv = document.getElementById("sessDiv_" + newSelToID);
if (selSessDiv) {
selSessDiv.className = "sessinfo-sel"; //设置当前选中用户的样式为选中样式
} else {
webim.Log.warn("不存在selSessDiv: selSessDivId=" + "sessDiv_" + newSelToID);
}
var selBadgeDiv = document.getElementById("badgeDiv_" + newSelToID);
if (selBadgeDiv) {
selBadgeDiv.style.display = "none";
} else {
webim.Log.warn("不存在selBadgeDiv: selBadgeDivId=" + "badgeDiv_" + selToID);
}
}
function setSelSessStyleOff(preSelToId) {
var preSessDiv = document.getElementById("sessDiv_" + preSelToId);
if (preSessDiv) {
preSessDiv.className = "sessinfo"; //将之前选中用户的样式置为未选中样式
} else {
webim.Log.warn("不存在preSessDiv: selSessDivId=" + "sessDiv_" + preSelToId);
}
}