package org.hwbot.prime.tasks;
import android.os.AsyncTask;
import android.util.Log;
import com.google.gson.*;
import org.hwbot.api.bench.dto.DeviceRecordsDTO;
import org.hwbot.api.esports.CompetitionStageDTO;
import org.hwbot.prime.api.CompetitionsStatusAware;
import org.hwbot.prime.api.HardwareRecordsStatusAware;
import org.hwbot.prime.api.NetworkStatusAware;
import org.hwbot.prime.service.BenchService;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.lang.reflect.Type;
import java.net.URL;
import java.net.UnknownHostException;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
public class AvailableCompetitionsTask extends AsyncTask<Integer, Void, List<CompetitionStageDTO>> {
private CompetitionsStatusAware observer;
private final NetworkStatusAware networkStatusAware;
public AvailableCompetitionsTask(NetworkStatusAware networkStatusAware, CompetitionsStatusAware observer) {
this.networkStatusAware = networkStatusAware;
this.observer = observer;
}
@Override
public List<CompetitionStageDTO> doInBackground(Integer... param) {
Integer deviceId = (param == null || param.length == 0) ? null : param[0];
if (deviceId == null){
// need to know device for competition
return Collections.emptyList();
}
if (observer == null) {
Log.w(this.getClass().getSimpleName(), "No device or observer loaded, can not load records.");
return null;
}
Reader reader = null;
try {
// Creates the json object which will manage the information received
GsonBuilder builder = new GsonBuilder();
// Register an adapter to manage the date types as long values
builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
return new Date(json.getAsJsonPrimitive().getAsLong());
}
});
Gson gson = builder.create();
URL url = new URL(BenchService.SERVER + "/api/round/stages/open?applicationId=57" + (deviceId == null ? "" : "&deviceId="+deviceId));
// Log.i(this.getClass().getSimpleName(), "Loading available competitions from: " + url);
reader = new BufferedReader(new InputStreamReader(url.openStream()));
CompetitionStageDTO[] list = gson.fromJson(reader, CompetitionStageDTO[].class);
// Log.i(this.getClass().getSimpleName(), "Loaded: " + (list == null ? "no competitions" : list.length + " competitions"));
if (list != null && list.length > 0){
observer.notifyAvailableCompetitions(Arrays.asList(list));
}
} catch (UnknownHostException e) {
Log.w(this.getClass().getSimpleName(), "No network access: " + e.getMessage());
networkStatusAware.showNetworkPopupOnce();
} catch (Exception e) {
Log.e(this.getClass().getSimpleName(), "Error: " + e.getMessage());
e.printStackTrace();
} finally {
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
}