blob: 26091e8bc93b5a73873e609838732eb683cd520a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
package it.niedermann.nextcloud.deck.api;
import androidx.annotation.NonNull;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import io.reactivex.Observable;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import io.reactivex.plugins.RxJavaPlugins;
import io.reactivex.schedulers.Schedulers;
import it.niedermann.nextcloud.deck.DeckLog;
public class RequestHelper {
private static final ExecutorService executor = Executors.newCachedThreadPool();
static {
RxJavaPlugins.setErrorHandler(DeckLog::logError);
}
public static <T> Disposable request(@NonNull final ApiProvider provider, @NonNull final ObservableProvider<T> call, @NonNull final ResponseCallback<T> callback) {
if (provider.getDeckAPI() == null) {
provider.initSsoApi(callback::onError);
}
final ResponseConsumer<T> cb = new ResponseConsumer<>(callback);
return call.getObservableFromCall()
.subscribeOn(Schedulers.from(executor))
.subscribe(cb, cb.getExceptionConsumer());
}
public interface ObservableProvider<T> {
Observable<T> getObservableFromCall();
}
public static class ResponseConsumer<T> implements Consumer<T> {
@NonNull
private final ResponseCallback<T> callback;
@NonNull
private final Consumer<Throwable> exceptionConsumer = new Consumer<>() {
@Override
public void accept(final Throwable throwable) {
callback.onError(throwable);
}
};
private ResponseConsumer(@NonNull ResponseCallback<T> callback) {
this.callback = callback;
}
@Override
public void accept(final T t) {
callback.fillAccountIDs(t);
callback.onResponse(t);
}
@NonNull
private Consumer<Throwable> getExceptionConsumer() {
return exceptionConsumer;
}
}
}
|