package com.gzsll.hupu.ui.forum; import android.content.Context; import android.content.Intent; import android.support.annotation.NonNull; import com.gzsll.hupu.data.ForumRepository; import com.gzsll.hupu.db.Forum; import com.gzsll.hupu.injector.PerActivity; import com.gzsll.hupu.otto.DelForumAttentionEvent; import com.gzsll.hupu.service.OffLineService; import com.gzsll.hupu.util.ToastUtil; import com.squareup.otto.Bus; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Action1; /** * Created by sll on 2016/3/11. */ @PerActivity public class ForumListPresenter implements ForumListContract.Presenter { private final ForumRepository mForumRepository; private final Context mContext; private final Bus mBus; private ForumListContract.View mForumListView; private Subscription mSubscription; @Inject public ForumListPresenter(ForumRepository mForumRepository, Context mContext, Bus mBus) { this.mForumRepository = mForumRepository; this.mContext = mContext; this.mBus = mBus; } @Override public void onForumListReceive(final String forumId) { mForumListView.showLoading(); mSubscription = mForumRepository.getForumList(forumId).observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<List<Forum>>() { @Override public void call(List<Forum> fora) { if (fora == null || fora.isEmpty()) { mForumListView.onError(); } else { mForumListView.hideLoading(); mForumListView.renderForumList(fora); } } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { throwable.printStackTrace(); } }); } @Override public void onForumAttentionDelClick(final Forum forum) { mForumRepository.removeForum(forum.getFid()) .observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<Boolean>() { @Override public void call(Boolean aBoolean) { if (aBoolean != null && aBoolean) { ToastUtil.showToast("取消关注成功"); mBus.post(new DelForumAttentionEvent(forum.getFid())); mForumListView.removeForum(forum); } } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { ToastUtil.showToast("取消关注失败,请重试"); } }); } @Override public void onForumOfflineClick(Forum forum) { Intent intent = new Intent(mContext, OffLineService.class); ArrayList<Forum> forums = new ArrayList<>(); forums.add(forum); intent.putExtra(OffLineService.EXTRA_FORUMS, forums); intent.setAction(OffLineService.START_DOWNLOAD); mContext.startService(intent); } @Override public void onForumClick(Forum forum) { mForumListView.showThreadUi(forum.getFid()); } @Override public void attachView(@NonNull ForumListContract.View view) { mForumListView = view; } @Override public void detachView() { if (mSubscription != null && !mSubscription.isUnsubscribed()) { mSubscription.unsubscribe(); } mForumListView = null; } }