package com.wangdaye.mysplash.photo.presenter;
import android.content.Context;
import com.wangdaye.mysplash.common.data.entity.unsplash.Photo;
import com.wangdaye.mysplash.common.data.service.PhotoInfoService;
import com.wangdaye.mysplash.common.i.model.PhotoInfoModel;
import com.wangdaye.mysplash.common.i.presenter.PhotoInfoPresenter;
import com.wangdaye.mysplash.common.i.view.PhotoInfoView;
import com.wangdaye.mysplash.common.ui.adapter.PhotoInfoAdapter;
import retrofit2.Call;
import retrofit2.Response;
/**
* Photo info implementor.
* */
public class PhotoInfoImplementor
implements PhotoInfoPresenter {
private PhotoInfoModel model;
private PhotoInfoView view;
private OnRequestPhotoDetailsListener listener;
public PhotoInfoImplementor(PhotoInfoModel model, PhotoInfoView view) {
this.model = model;
this.view = view;
}
@Override
public void requestPhoto(Context context) {
listener = new OnRequestPhotoDetailsListener();
// model.getPhotoInfoService().requestAPhoto(model.getPhoto().id, listener);
model.getPhotoService().requestAPhoto(model.getPhoto().id, listener);
}
@Override
public void cancelRequest() {
if (listener != null) {
listener.cancel();
}
// model.getPhotoInfoService().cancel();
model.getPhotoService().cancel();
}
@Override
public void touchMenuItem(int itemId) {
view.touchMenuItem(itemId);
}
@Override
public Photo getPhoto() {
return model.getPhoto();
}
@Override
public PhotoInfoAdapter getAdapter() {
return model.getAdapter();
}
@Override
public boolean isFailed() {
return model.isFailed();
}
@Override
public void setFailed(boolean b) {
model.setFailed(b);
}
// interface.
private class OnRequestPhotoDetailsListener
implements PhotoInfoService.OnRequestSinglePhotoListener {
private boolean canceled;
OnRequestPhotoDetailsListener() {
this.canceled = false;
}
public void cancel() {
this.canceled = true;
}
@Override
public void onRequestSinglePhotoSuccess(Call<Photo> call, Response<Photo> response) {
if (canceled) {
return;
}
if (response.isSuccessful() && response.body() != null) {
Photo photo = response.body();
photo.complete = true;
model.setPhoto(photo);
model.setFailed(false);
view.requestPhotoSuccess(photo);
} else {
view.requestPhotoFailed();
}
}
@Override
public void onRequestSinglePhotoFailed(Call<Photo> call, Throwable t) {
if (canceled) {
return;
}
view.requestPhotoFailed();
}
}
}