package com.fourtails.usuariolecturista.jobs; 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.MeterRegistrationActivity; import com.fourtails.usuariolecturista.model.Meter; import com.fourtails.usuariolecturista.ottoEvents.CheckIfUserHasMeterEvent; 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; import static com.fourtails.usuariolecturista.ottoEvents.CheckIfUserHasMeterEvent.Type; /** * RegisterUserJob async job */ public class CheckIfUserHasMeterJob extends Job { boolean responseOk = false; boolean retry = true; private String emailAsUserIdFromActivity; boolean meterExists = false; public CheckIfUserHasMeterJob(String emailAsUserIdFromActivity) { super(new Params(Priority.MID).requireNetwork().groupBy("check-if-user-has-meter")); this.emailAsUserIdFromActivity = emailAsUserIdFromActivity; } @Override public void onAdded() { Logger.d("CheckIfUserHasMeterJob initiated"); } @Override public void onRun() throws Throwable { // 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 meter = new Meter( response.getMeters().get(0).getAccountNumber(), response.getMeters().get(0).getBalance(), response.getMeters().get(0).getModel(), response.getMeters().get(0).getUrlsafeKey() ); meter.save(); meterExists = true; MeterRegistrationActivity.bus.post(new CheckIfUserHasMeterEvent(Type.COMPLETED, 1, meterExists)); } else { if (response.getError().contains("No Meters found under specified criteria")) { Logger.d(response.getError()); meterExists = false; retry = false; MeterRegistrationActivity.bus.post(new CheckIfUserHasMeterEvent(Type.COMPLETED, 1, meterExists)); } if (response.getError().contains("User does not exist")) { Logger.d(response.getError()); meterExists = false; retry = false; MeterRegistrationActivity.bus.post(new CheckIfUserHasMeterEvent(Type.COMPLETED, 1, meterExists)); } else { Logger.e(response.getError()); } } } @Override protected void onCancel() { Logger.d("CheckIfUserHasMeterJob canceled"); MeterRegistrationActivity.bus.post(new CheckIfUserHasMeterEvent(Type.COMPLETED, 99, meterExists)); responseOk = false; } @Override protected boolean shouldReRunOnThrowable(Throwable throwable) { return retry; } }