switch_chat_obj.js 9.58 KB
//更新最近会话的未读消息数

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 = "<span>" + unread_msg_count + "</span>";
        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, newMsg) {
    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) {
        let type_number;
        switch(sess_type){
            case 'GROUP': type_number = 2;break;
            case 'C2C': type_number = 1;break;
        }
        var selSess = webim.MsgStore.sessMap()[sess_type + to_id];
        if (sess_type == 'C2C') {
            webim.setAutoRead(selSess, true, false)
        } else {
            webim.groupMsgReaded({
                "GroupId": to_id,
                "MsgReadedSeq": recentSessMap['GROUP'+to_id].MsgGroupReadedSeq
            })
        }
        delChat(type_number, 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 = "<span>" + unread_msg_count + "</span>";
        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) {
            // 群组 id中含有特殊字符,直接用$(id)会报错
            var id = 'sessDiv_' + to_id;
            var selectIdStr = "[id='"+id+"']"
            $(selectIdStr).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;

            getLastGroupHistoryMsgs(function(msgList) {
                getHistoryMsgCallback(msgList);
                bindScrollHistoryEvent.init();
            }, function(err) {
                alert(err.ErrorInfo);
            });
            return;
            // 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);
    }
}