LayoutDataFetcherImpl.java 10.2 KB
package com.wd.layoutdataimpl.fetcher;

import android.content.Context;
import android.text.TextUtils;

import androidx.recyclerview.widget.RecyclerView;

import com.alibaba.android.arouter.facade.annotation.Route;
import com.wd.capability.layout.page.data.IPaperPageListener;
import com.wd.capability.layout.page.model.CompLogicDataBean;
import com.wd.capability.layout.page.vm.PageViewModel;
import com.wd.capability.layout.ui.channel.vm.ChannelViewModel;
import com.wd.capability.layout.ui.follow.listener.LocalAskDataListener;
import com.wd.capability.network.fetcher.BaseDataFetcher;
import com.wd.common.interact.follow.model.FollowDataFetcher;
import com.wd.common.interact.follow.model.HomeFollowDataFetcher;
import com.wd.common.interact.follow.model.LocalAskDataFetcher;
import com.wd.common.interact.interacts.callback.ICommonDyListener;
import com.wd.common.interact.interacts.fetcher.InteractFetcher;
import com.wd.foundation.bean.custom.content.CommentItem;
import com.wd.foundation.bean.custom.content.ContentBean;
import com.wd.foundation.bean.response.AppointmentStatusBean;
import com.wd.foundation.bean.response.FollowBean;
import com.wd.capability.layout.constant.LayoutDataConstant;
import com.wd.capability.layout.ui.follow.fetcher.ILayoutDataFetcher;
import com.wd.capability.layout.ui.follow.listener.BatchCallback;
import com.wd.capability.layout.ui.follow.listener.FollowDataListener;
import com.wd.capability.layout.ui.follow.listener.GetFollowStatusListener;
import com.wd.capability.layout.ui.follow.listener.HomeFollowDataListener;
import com.wd.layoutdataimpl.model.AppointmentDataFetcher;
import com.wd.layoutdataimpl.model.ChannelDataFetcherNews;
import com.wd.layoutdataimpl.model.PageDataFetcher;
import com.wd.layoutdataimpl.model.PaperPageFetcher;

import java.util.List;
import java.util.Map;

/**
 * @author wangkai
 * @version [V1.0.0, 2024/11/19]
 * @brief
 */
@Route(path = LayoutDataConstant.PATH_DATA_FETCHER)
public class LayoutDataFetcherImpl implements ILayoutDataFetcher {

    @Override
    public void init(Context context) {

    }

    @Override
    public void sendBatchCommentLikesRequest(List<ContentBean> contentBeanList, BatchCallback<List<CommentItem>> batchCallback) {
        InteractFetcher interactFetcher = new InteractFetcher(new ICommonDyListener() {
            @Override
            public void onInteractDataSuccess(List<CommentItem> dataList) {
                for (ContentBean bean : contentBeanList) {
                    if (bean.getCommentInfo() != null) {
                        String id = bean.getCommentInfo().getCommentId();
                        if (TextUtils.isEmpty(id)) {
                            continue;
                        }
                        for (CommentItem dataBean : dataList) {
                            String tempId = dataBean.getCommentId();
                            if (id.equals(tempId)) {
                                bean.getCommentInfo().setLikeNum(dataBean.getLikeNum());
                                break;
                            }
                        }
                    }

                }

                if (batchCallback != null) {
                    batchCallback.success(dataList);
                }

            }

            @Override
            public void onInteractDataError(String errorMsg) {
                if (batchCallback != null) {
                    batchCallback.error(errorMsg);
                }

            }
        });
        String key = interactFetcher.onBatchCommentLikes(contentBeanList);
        if (batchCallback != null) {
            batchCallback.parameter(key);
        }
    }

    @Override
    public void localAsk(BaseDataFetcher localAskDataFetcher, Map<String, Object> map) {
        ((LocalAskDataFetcher)localAskDataFetcher).localAsk(map);
    }

    @Override
    public void operation(BaseDataFetcher followDataFetcher, String attentionUserId, String attentionUserType, String attentionCreatorId, int status) {
        ((FollowDataFetcher) followDataFetcher).operation(attentionUserId, attentionUserType, attentionCreatorId, status);
    }

    @Override
    public void getMasterStatusRequest(BaseDataFetcher followDataFetcher, String creatorId, GetFollowStatusListener mGetFollowStatusListener) {
        ((FollowDataFetcher) followDataFetcher).getMasterStatusRequest(creatorId, mGetFollowStatusListener);
    }

    @Override
    public void recommendMaterList(BaseDataFetcher followDataFetcher, FollowDataListener mDataListener) {
        ((FollowDataFetcher) followDataFetcher).recommendMaterList();
    }

    @Override
    public void batchAttention(BaseDataFetcher followDataFetcher, List<FollowBean> selectedUserInfor, FollowDataListener mDataListener) {
        ((FollowDataFetcher) followDataFetcher).batchAttention(selectedUserInfor);
    }

    @Override
    public void getPageData(BaseDataFetcher homeFollowDataFetcher, String oneTabChannelId, String pageId, int pageNum, boolean contryGrayFlag, boolean receiveCancelFollowStatus) {
        ((HomeFollowDataFetcher) homeFollowDataFetcher).getPageData(oneTabChannelId, pageId, pageNum, contryGrayFlag, receiveCancelFollowStatus);
    }

    @Override
    public void sendHomeFollowRequest(BaseDataFetcher homeFollowDataFetcher, int pageNum) {
        ((HomeFollowDataFetcher) homeFollowDataFetcher).sendHomeFollowRequest(pageNum);
    }

    @Override
    public void getPageData(BaseDataFetcher pageDataFetcher, boolean iscache, CompLogicDataBean compLogicDataBean) {
        // 是否是加载更多数据请求
        if (compLogicDataBean.loadMore) {
            ((PageDataFetcher) pageDataFetcher).loadMoreCompData(compLogicDataBean.group);
        } else {
            ((PageDataFetcher) pageDataFetcher).getPageData(iscache, compLogicDataBean);
        }
    }

    @Override
    public void cancelPage(BaseDataFetcher pageDataFetcher) {
        if (pageDataFetcher != null) {
            ((PageDataFetcher) pageDataFetcher).cancel();
        }
    }

    @Override
    public void getPaperTime(BaseDataFetcher paperPageFetcher, String date) {
        ((PaperPageFetcher)paperPageFetcher).getPaperTime(date);
    }

    @Override
    public void getPaperList(BaseDataFetcher paperPageFetcher, String date, Object o, String elWh, boolean initFlag, boolean firstPage) {
        ((PaperPageFetcher)paperPageFetcher).getPaperList(date, null, elWh, initFlag, firstPage);
    }

    @Override
    public void getNavData(BaseDataFetcher channelDataFetcherNews, String id, boolean isNewsChannl) {
        ((ChannelDataFetcherNews) channelDataFetcherNews).getPageTopNavData(id, isNewsChannl);
    }

    @Override
    public void getPageInfor(BaseDataFetcher channelDataFetcherNews, String pageId) {
        ((ChannelDataFetcherNews) channelDataFetcherNews).getPageInfor(pageId);
    }

    @Override
    public void cancelChannel(BaseDataFetcher channelDataFetcherNews) {
        if (channelDataFetcherNews != null) {
            ((ChannelDataFetcherNews) channelDataFetcherNews).cancel();
        }
    }

    @Override
    public void getAppointmentStatus(List<ContentBean> dataBeanList, RecyclerView.Adapter adapter, int startIndex, BatchCallback<List<AppointmentStatusBean>> batchCallback) {
        AppointmentDataFetcher appointmentDataFetcher = new AppointmentDataFetcher(new AppointmentDataFetcher.IAppointmentListener() {
            @Override
            public void onGetFailed(String error) {
                if (batchCallback != null) {
                    batchCallback.error(error);
                }

            }

            @Override
            public void onGetAppointmentStatusSuccess(List<AppointmentStatusBean> response) {
                if (response == null || response.isEmpty()) {
                    return;
                }
                response.stream()
                        .forEach(statusBean -> dataBeanList.stream()
                                .filter(contentBean -> (
                                        !TextUtils.isEmpty(contentBean.getObjectId()) &&
                                                contentBean.getObjectId().equals(statusBean.getLiveId()) &&
                                                contentBean.getRelId().equals(statusBean.getRelationId())
                                ))
                                .findFirst()
                                .ifPresent(contentBean -> {
                                    contentBean.setSubscribe(statusBean.subscribe);
                                }));

                if (adapter != null) {
                    if (startIndex == 0) {
                        adapter.notifyDataSetChanged();
                    } else {
                        adapter.notifyItemRangeChanged(startIndex, dataBeanList.size());
                    }
                }

                if (batchCallback != null) {
                    batchCallback.success(response);
                }
            }
        });

        String parameterStr = appointmentDataFetcher.getAppointmentStatus(dataBeanList);
        if (batchCallback != null) {
            batchCallback.parameter(parameterStr);
        }
    }

    @Override
    public BaseDataFetcher newFollowDataFetcher(FollowDataListener mDataListener) {
        return new FollowDataFetcher(mDataListener);
    }

    @Override
    public BaseDataFetcher newHomeFollowDataFetcher(HomeFollowDataListener homeFollowDataListener) {
        return new HomeFollowDataFetcher(homeFollowDataListener);
    }

    @Override
    public void setHomeFollowListener(BaseDataFetcher homeFollowDataFetcher, HomeFollowDataListener homeFollowDataListener) {
        ((HomeFollowDataFetcher) homeFollowDataFetcher).setHomeFollowListener(homeFollowDataListener);
    }

    @Override
    public BaseDataFetcher newLocalAskDataFetcher(LocalAskDataListener dataListener) {
        return new LocalAskDataFetcher(dataListener);
    }

    @Override
    public BaseDataFetcher newPaperPageFetcher(IPaperPageListener iPaperPageListener) {
        return new PaperPageFetcher(iPaperPageListener);
    }

    @Override
    public BaseDataFetcher newPageDataFetcher(PageViewModel.InnerListener innerListener) {
        return new PageDataFetcher(innerListener);
    }

    @Override
    public BaseDataFetcher newChannelDataFetcherNews(ChannelViewModel.InnerListener innerListener) {
        return new ChannelDataFetcherNews(innerListener);
    }
}