blob: 8977a28d258dd51b4d706d2e3caa113b7c5b9dd2 [file] [log] [blame]
package org.apache.fineract.jobs;
import android.annotation.SuppressLint;
import android.content.Intent;
import androidx.annotation.NonNull;
import com.evernote.android.job.Job;
import com.evernote.android.job.JobRequest;
import org.apache.fineract.data.datamanager.api.DataManagerCustomer;
import org.apache.fineract.data.datamanager.contracts.ManagerCustomer;
import org.apache.fineract.data.local.database.helpers.DatabaseHelperCustomer;
import org.apache.fineract.data.models.customer.CustomerPage;
import java.util.concurrent.TimeUnit;
import javax.inject.Inject;
import javax.inject.Singleton;
import io.reactivex.observers.DisposableObserver;
import io.reactivex.schedulers.Schedulers;
@Singleton
public class StartSyncJob extends Job {
public static final String TAG = "CUSTOMERS_SYNC";
public static final String STATUS = "status";
private ManagerCustomer dataManagerCustomer;
private DatabaseHelperCustomer dbHelper;
@Inject
public StartSyncJob(DataManagerCustomer dataManagerCustomer, DatabaseHelperCustomer
dbHelper) {
this.dataManagerCustomer = dataManagerCustomer;
this.dbHelper = dbHelper;
}
@SuppressLint("CheckResult")
@NonNull
@Override
protected Result onRunJob(@NonNull Params params) {
updateStatus(JobStatus.STARTED);
dataManagerCustomer.fetchCustomers(0, 50)
.subscribeOn(Schedulers.io())
.subscribeWith(new DisposableObserver<CustomerPage>() {
@Override
public void onNext(CustomerPage customerPage) {
dbHelper.saveCustomers(customerPage);
updateStatus(JobStatus.ENDED);
//starting other jobs once it finishes the StartSyncJob
StartSyncJob.schedulePeriodic();
CreationUpdationCustomerJob.schedulePeriodic();
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
return Result.SUCCESS;
}
private void updateStatus(JobStatus status) {
Intent intent = new Intent("org.apache.fineract.JobsReceiver");
intent.putExtra(STATUS, status);
getContext().sendBroadcast(intent);
}
public static void schedulePeriodic() {
new JobRequest.Builder(StartSyncJob.TAG)
.setPeriodic(TimeUnit.DAYS.toMillis(1),
TimeUnit.MINUTES.toMillis(10))
.setUpdateCurrent(true)
.build()
.schedule();
}
public static void scheduleItNow() {
new JobRequest.Builder(StartSyncJob.TAG)
.startNow()
.build()
.schedule();
}
public enum JobStatus {
STARTED,
ENDED
}
}