MsgReceiveHelper.java 6.47 KB
Newer Older
konghaorui committed
1 2
package com.yidianling.im.helper;

3

konghaorui committed
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
import com.netease.nimlib.sdk.NIMClient;
import com.netease.nimlib.sdk.NIMSDK;
import com.netease.nimlib.sdk.RequestCallbackWrapper;
import com.netease.nimlib.sdk.msg.MsgService;
import com.netease.nimlib.sdk.msg.constant.NotificationType;
import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum;
import com.netease.nimlib.sdk.msg.model.RecentContact;
import com.netease.nimlib.sdk.team.model.MemberChangeAttachment;
import com.yidianling.common.tools.LogUtil;
import com.yidianling.im.event.UpdateTabUnreadNumEvent;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import de.greenrobot.event.EventBus;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;

/**
 * 接收到消息后的更新机制
 * Created by zqk on 2017/11/08;
 */
public class MsgReceiveHelper {

    private static Map<String, Integer> unreadNumMap = new HashMap<>();


    public static void updateNum(String accId, int unreadUnm) {
        unreadNumMap.put(accId, unreadUnm);
    }

    public static int getUnNum(String accId) {
        if (unreadNumMap.get(accId) != null) {
            return unreadNumMap.get(accId);
        } else {
            return 0;
        }
    }

43 44 45 46 47 48 49 50 51 52 53
    /**
     * 获取所有未读数
     * @return
     */
    public static int getAllUnNum() {

        Object[] list = unreadNumMap.values().toArray();

        int sum = 0;
        for (int i=0;i<list.length;i++) {
            try {
徐健 committed
54
                sum += Integer.parseInt(list[i].toString());
55 56 57 58 59 60 61 62
            }catch (Exception e) {
                sum += 0;
            }
        }

        return sum;
    }

konghaorui committed
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
    public static void onMessageReceived() {

        reQueryUnreadNum();
    }

    public static void reQueryUnreadNum() {
        NIMClient.getService(MsgService.class).queryRecentContacts()
                .setCallback(new RequestCallbackWrapper<List<RecentContact>>() {
                    @Override
                    public void onResult(int code, List<RecentContact> recentList, Throwable e) {
                        // recentList参数即为最近联系人列表(最近会话列表)
                        if (recentList != null && recentList.size() != 0) {
                            for (RecentContact r : recentList) {
                                if (r.getSessionType() == SessionTypeEnum.Team && r.getAttachment() instanceof MemberChangeAttachment) {
                                    if (((MemberChangeAttachment) r.getAttachment()).getType() == NotificationType.KickMember) {
                                        //如果是群聊,且有被踢的消息,删除该群聊
                                        NIMClient.getService(MsgService.class).deleteRecentContact(r);
                                        continue;
                                    }
                                }
                                LogUtil.d(MsgReceiveHelper.class.getSimpleName(), "account:" + r.getContactId() + "--" + "num:" + r.getUnreadCount());
                                MsgReceiveHelper.updateNum(r.getContactId(), r.getUnreadCount());
                            }
                        }
                        Observable.timer(500, TimeUnit.MILLISECONDS)
                                .observeOn(AndroidSchedulers.mainThread())
                                .subscribe(aLong -> {
                                    EventBus.getDefault().post(new UpdateTabUnreadNumEvent());
                                });
                    }
                });
    }

    public interface MessageRefreshCallback {
        void onSuccess();
    }

    //更新未读数量及最近联系人列表
    public static void reQueryUnreadNumber(MessageRefreshCallback callback) {
        NIMClient.getService(MsgService.class).queryRecentContacts()
                .setCallback(new RequestCallbackWrapper<List<RecentContact>>() {
                    @Override
                    public void onResult(int code, List<RecentContact> recentList, Throwable e) {
                        // recentList参数即为最近联系人列表(最近会话列表)
                        if (recentList != null && recentList.size() != 0) {
                            for (RecentContact r : recentList) {
                                if (r.getSessionType() == SessionTypeEnum.Team && r.getAttachment() instanceof MemberChangeAttachment) {
                                    if (((MemberChangeAttachment) r.getAttachment()).getType() == NotificationType.KickMember) {
                                        //如果是群聊,且有被踢的消息,删除该群聊
                                        NIMClient.getService(MsgService.class).deleteRecentContact(r);
                                        continue;
                                    }
                                }
                                MsgReceiveHelper.updateNum(r.getContactId(), r.getUnreadCount());
                            }
                        }
                        if (callback != null) {
                            callback.onSuccess();
                        }
                    }
                });
    }

    public static void markAllRead() {
        NIMSDK.getMsgService().clearAllUnreadCount();
        NIMClient.getService(MsgService.class).queryRecentContacts()
                .setCallback(new RequestCallbackWrapper<List<RecentContact>>() {
                    @Override
                    public void onResult(int code, List<RecentContact> recentList, Throwable e) {
                        // recentList参数即为最近联系人列表(最近会话列表)
                        if (recentList != null && recentList.size() != 0) {
                            for (RecentContact r : recentList) {
                                MsgReceiveHelper.updateNum(r.getContactId(), 0);
                            }
                        }
                    }
                });
        Observable.timer(1500, TimeUnit.MILLISECONDS)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(aLong -> EventBus.getDefault().post(new UpdateTabUnreadNumEvent()));
    }

    public static void markTeamChatRead(String contactId) {
        NIMClient.getService(MsgService.class).clearUnreadCount(contactId, SessionTypeEnum.Team);
        MsgReceiveHelper.updateNum(contactId, 0);
        //跟新首页底部未读消息树
        EventBus.getDefault().post(new UpdateTabUnreadNumEvent());
    }


    public static boolean isHasUnread = false;

}