package com.fourtails.usuariolecturista.jobs;
import android.os.Bundle;
import com.activeandroid.query.Select;
import com.appspot.ocr_backend.backend.Backend;
import com.appspot.ocr_backend.backend.model.MessagesGetMeters;
import com.appspot.ocr_backend.backend.model.MessagesGetMetersResponse;
import com.fourtails.usuariolecturista.MainActivity;
import com.fourtails.usuariolecturista.model.Meter;
import com.fourtails.usuariolecturista.ottoEvents.CheckBalanceEvent;
import com.google.api.client.extensions.android.http.AndroidHttp;
import com.google.api.client.extensions.android.json.AndroidJsonFactory;
import com.orhanobut.logger.Logger;
import com.path.android.jobqueue.Job;
import com.path.android.jobqueue.Params;
/**
* CheckBalanceJob async job
*/
public class CheckBalanceJob extends Job {
boolean responseOk = false;
boolean retry = true;
String emailAsUserIdFromActivity;
Bundle savedInstanceState;
boolean mIsFirstTime;
public CheckBalanceJob(String emailAsUserIdFromActivity, Bundle savedInstanceState, boolean isFirstTime) {
super(new Params(Priority.HIGH).requireNetwork().groupBy("check-balance"));
this.emailAsUserIdFromActivity = emailAsUserIdFromActivity;
this.savedInstanceState = savedInstanceState;
this.mIsFirstTime = isFirstTime;
}
@Override
public void onAdded() {
Logger.d("CheckBalanceJob initiated");
}
@Override
public void onRun() throws Throwable {
Meter meter = checkForSavedMeter();
// Use a builder to help formulate the API request.
Backend.Builder builder = new Backend.Builder(
AndroidHttp.newCompatibleTransport(),
new AndroidJsonFactory(),
null);
Backend service = builder.build();
MessagesGetMeters messagesGetMeters = new MessagesGetMeters();
messagesGetMeters.setUser(emailAsUserIdFromActivity);
MessagesGetMetersResponse response = service.meter().getAllAssignedToUser(messagesGetMeters).execute();
if (response.getOk()) {
Logger.json(response.toPrettyString());
meter.balance = response.getMeters().get(0).getBalance();
meter.save();
MainActivity.bus.post(new CheckBalanceEvent(CheckBalanceEvent.Type.COMPLETED, 1, meter.balance, savedInstanceState, mIsFirstTime));
} else {
Logger.e(response.getError());
}
}
public static Meter checkForSavedMeter() {
return new Select().from(Meter.class).executeSingle();
}
@Override
protected void onCancel() {
Logger.d("CheckBalanceJob canceled");
MainActivity.bus.post(new CheckBalanceEvent(CheckBalanceEvent.Type.COMPLETED, 99, 99999999, null, mIsFirstTime));
responseOk = false;
}
@Override
protected boolean shouldReRunOnThrowable(Throwable throwable) {
return retry;
}
}