package com.khmelenko.lab.varis.task.travis;
import android.text.TextUtils;
import com.khmelenko.lab.varis.event.travis.LogFailEvent;
import com.khmelenko.lab.varis.event.travis.LogLoadedEvent;
import com.khmelenko.lab.varis.task.Task;
import com.khmelenko.lab.varis.task.TaskError;
import com.khmelenko.lab.varis.task.TaskException;
import retrofit.client.Header;
import retrofit.client.Response;
/**
* Task for getting log
*
* @author Dmytro Khmelenko
*/
public class LogTask extends Task<String> {
private final String mAuth;
private final long mJobId;
/**
* Constructor
*
* @param auth Authorization header
* @param jobId Job ID
*/
public LogTask(String auth, long jobId) {
mAuth = auth;
mJobId = jobId;
}
@Override
public String execute() throws TaskException {
String redirectUrl = "";
try {
Response response;
if (TextUtils.isEmpty(mAuth)) {
response = rawClient().getApiService().getLog(String.valueOf(mJobId));
} else {
response = rawClient().getApiService().getLog(mAuth, String.valueOf(mJobId));
}
// in case of success just return the url. It means that the log file can be accessed
// by this url already
if (response.getStatus() == 200) {
redirectUrl = response.getUrl();
}
} catch (TaskException exception) {
Response response = exception.getTaskError().getResponse();
for (Header header : response.getHeaders()) {
if (header.getName().equals("Location")) {
redirectUrl = header.getValue();
break;
}
}
boolean redirect = response.getStatus() == 307 && !TextUtils.isEmpty(redirectUrl);
if (!redirect) {
throw exception;
}
}
return redirectUrl;
}
@Override
public void onSuccess(String result) {
LogLoadedEvent event = new LogLoadedEvent(result);
eventBus().post(event);
}
@Override
public void onFail(TaskError error) {
LogFailEvent event = new LogFailEvent(error);
eventBus().post(event);
}
}