package com.turhanoz.android.reactivedirectorychooser.operation; import com.turhanoz.android.reactivedirectorychooser.model.DirectoryTree; import com.turhanoz.android.reactivedirectorychooser.observable.MakeDirectoryObservable; import com.turhanoz.android.reactivedirectorychooser.observer.MakeDirectoryObserver; import java.io.File; import de.greenrobot.event.EventBus; import rx.Observable; import rx.Observer; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; public class MakeDirectoryOperation { Subscription subscription; DirectoryTree dataSet; EventBus bus; public MakeDirectoryOperation(DirectoryTree dataSet, EventBus bus) { this.dataSet = dataSet; this.bus = bus; } public void compute(File rootDirectory, String name) { cancelPreviousOperation(); Observable<File> observable = new MakeDirectoryObservable().create(rootDirectory, name); Observer<File> observer = new MakeDirectoryObserver(dataSet, bus); subscription = observable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(observer); } public void cancelPreviousOperation() { if (subscription != null && !subscription.isUnsubscribed()) { subscription.unsubscribe(); } subscription = null; } }