package com.khmelenko.lab.varis.presenter;
import android.text.TextUtils;
import com.khmelenko.lab.varis.common.Constants;
import com.khmelenko.lab.varis.event.travis.FindReposEvent;
import com.khmelenko.lab.varis.event.travis.LoadingFailedEvent;
import com.khmelenko.lab.varis.event.travis.UserSuccessEvent;
import com.khmelenko.lab.varis.mvp.MvpPresenter;
import com.khmelenko.lab.varis.network.response.User;
import com.khmelenko.lab.varis.network.retrofit.travis.TravisRestClient;
import com.khmelenko.lab.varis.storage.AppSettings;
import com.khmelenko.lab.varis.storage.CacheStorage;
import com.khmelenko.lab.varis.task.TaskManager;
import com.khmelenko.lab.varis.view.RepositoriesView;
import javax.inject.Inject;
import de.greenrobot.event.EventBus;
/**
* Repositories presenter
*
* @author Dmytro Khmelenko (d.khmelenko@gmail.com)
*/
public class RepositoriesPresenter extends MvpPresenter<RepositoriesView> {
private final TravisRestClient mTravisRestClient;
private final EventBus mEventBus;
private final TaskManager mTaskManager;
private final CacheStorage mCache;
private User mUser;
@Inject
public RepositoriesPresenter(TravisRestClient restClient, EventBus eventBus,
TaskManager taskManager, CacheStorage storage) {
mTravisRestClient = restClient;
mEventBus = eventBus;
mTaskManager = taskManager;
mCache = storage;
}
@Override
public void onAttach() {
mEventBus.register(this);
mUser = mCache.restoreUser();
getView().updateMenuState(AppSettings.getAccessToken());
getView().updateUserData(mUser);
getView().showProgress();
reloadRepos();
}
@Override
public void onDetach() {
mEventBus.unregister(this);
getView().hideProgress();
}
/**
* Starts loading repositories
*/
public void reloadRepos() {
String accessToken = AppSettings.getAccessToken();
if (TextUtils.isEmpty(accessToken)) {
mTaskManager.findRepos(null);
} else {
mTaskManager.getUser();
}
}
/**
* Raised on loaded repositories
*
* @param event Event data
*/
public void onEvent(FindReposEvent event) {
getView().hideProgress();
getView().setRepos(event.getRepos());
mCache.saveRepos(event.getRepos());
}
/**
* Raised on failed loading data
*
* @param event Event data
*/
public void onEvent(LoadingFailedEvent event) {
getView().hideProgress();
getView().showError(event.getTaskError().getMessage());
}
/**
* Raised on loaded user information
*
* @param event Event data
*/
public void onEvent(UserSuccessEvent event) {
mUser = event.getUser();
// cache user data
mCache.saveUser(mUser);
getView().updateUserData(mUser);
String loginName = mUser.getLogin();
mTaskManager.userRepos(loginName);
}
/**
* Does user logout
*/
public void userLogout() {
mCache.deleteUser();
mCache.deleteRepos();
AppSettings.putAccessToken("");
// reset back to open source url
AppSettings.putServerUrl(Constants.OPEN_SOURCE_TRAVIS_URL);
mTravisRestClient.updateTravisEndpoint(AppSettings.getServerUrl());
}
}