Loading lib/build.gradle +1 −0 Original line number Diff line number Diff line Loading @@ -113,6 +113,7 @@ dependencies { api 'com.google.code.gson:gson:2.10.1' implementation 'io.reactivex.rxjava2:rxjava:2.2.21' implementation 'io.reactivex.rxjava3:rxjava:3.1.5' implementation 'commons-io:commons-io:2.11.0' Loading lib/src/main/java/com/nextcloud/android/sso/api/NextcloudAPI.java +12 −0 Original line number Diff line number Diff line Loading @@ -119,6 +119,18 @@ public class NextcloudAPI { }); } public <T> io.reactivex.rxjava3.core.Observable<ParsedResponse<T>> performRequestObservableV3(final Type type, final NextcloudRequest request) { return io.reactivex.rxjava3.core.Observable.fromPublisher( s -> { try { final Response response = performNetworkRequestV2(request); s.onNext(ParsedResponse.of(convertStreamToTargetEntity(response.getBody(), type), response.getPlainHeaders())); s.onComplete(); } catch (Exception e) { s.onError(e); } }); } public <T> T performRequestV2(final @NonNull Type type, NextcloudRequest request) throws Exception { Log.d(TAG, "performRequestV2() called with: type = [" + type + "], request = [" + request + "]"); final Response response = performNetworkRequestV2(request); Loading lib/src/main/java/com/nextcloud/android/sso/api/NextcloudRetrofitServiceMethod.java +21 −5 Original line number Diff line number Diff line Loading @@ -179,22 +179,34 @@ public class NextcloudRetrofitServiceMethod<T> { if(this.returnType instanceof ParameterizedType) { ParameterizedType type = (ParameterizedType) returnType; Type ownerType = type.getRawType(); if(ownerType == Observable.class) { if(ownerType == Observable.class || ownerType == io.reactivex.rxjava3.core.Observable.class) { Type typeArgument = type.getActualTypeArguments()[0]; Log.d(TAG, "invoke call to api using observable " + typeArgument); // Streaming if(typeArgument == ResponseBody.class) { if(ownerType == Observable.class) { return (T) Observable.fromCallable(() -> Okhttp3Helper.getResponseBodyFromRequestV2(nextcloudAPI, request)); } else { return (T) io.reactivex.rxjava3.core.Observable.fromCallable(() -> Okhttp3Helper.getResponseBodyFromRequestV2(nextcloudAPI, request)); } } else if (typeArgument instanceof ParameterizedType) { ParameterizedType innerType = (ParameterizedType) typeArgument; Type innerOwnerType = innerType.getRawType(); if(innerOwnerType == ParsedResponse.class) { if(ownerType == Observable.class) { return (T) nextcloudAPI.performRequestObservableV2(innerType.getActualTypeArguments()[0], request); } else { return (T) nextcloudAPI.performRequestObservableV3(innerType.getActualTypeArguments()[0], request); } } } //fallback if(ownerType == Observable.class) { return (T) nextcloudAPI.performRequestObservableV2(typeArgument, request).map(r -> r.getResponse()); } else { return (T) nextcloudAPI.performRequestObservableV3(typeArgument, request).map(r -> r.getResponse()); } } else if(ownerType == Call.class) { Type typeArgument = type.getActualTypeArguments()[0]; Loading @@ -202,8 +214,12 @@ public class NextcloudRetrofitServiceMethod<T> { } } else if (this.returnType == Observable.class) { return (T) nextcloudAPI.performRequestObservableV2(Object.class, request).map(r -> r.getResponse()); } else if (this.returnType == io.reactivex.rxjava3.core.Observable.class) { return (T) nextcloudAPI.performRequestObservableV3(Object.class, request).map(r -> r.getResponse()); } else if (this.returnType == Completable.class) { return (T) ReactivexHelper.wrapInCompletable(nextcloudAPI, request); } else if (this.returnType == io.reactivex.rxjava3.core.Completable.class) { return (T) ReactivexHelper.wrapInCompletableV3(nextcloudAPI, request); } return nextcloudAPI.performRequestV2(this.returnType, request); Loading lib/src/main/java/com/nextcloud/android/sso/helper/ReactivexHelper.java +4 −0 Original line number Diff line number Diff line Loading @@ -32,5 +32,9 @@ public final class ReactivexHelper { return Completable.fromAction(() -> nextcloudAPI.performRequestV2(Void.class, request)); } public static io.reactivex.rxjava3.core.Completable wrapInCompletableV3(final NextcloudAPI nextcloudAPI, final NextcloudRequest request) { return io.reactivex.rxjava3.core.Completable.fromAction(() -> nextcloudAPI.performRequestV2(Void.class, request)); } } Loading
lib/build.gradle +1 −0 Original line number Diff line number Diff line Loading @@ -113,6 +113,7 @@ dependencies { api 'com.google.code.gson:gson:2.10.1' implementation 'io.reactivex.rxjava2:rxjava:2.2.21' implementation 'io.reactivex.rxjava3:rxjava:3.1.5' implementation 'commons-io:commons-io:2.11.0' Loading
lib/src/main/java/com/nextcloud/android/sso/api/NextcloudAPI.java +12 −0 Original line number Diff line number Diff line Loading @@ -119,6 +119,18 @@ public class NextcloudAPI { }); } public <T> io.reactivex.rxjava3.core.Observable<ParsedResponse<T>> performRequestObservableV3(final Type type, final NextcloudRequest request) { return io.reactivex.rxjava3.core.Observable.fromPublisher( s -> { try { final Response response = performNetworkRequestV2(request); s.onNext(ParsedResponse.of(convertStreamToTargetEntity(response.getBody(), type), response.getPlainHeaders())); s.onComplete(); } catch (Exception e) { s.onError(e); } }); } public <T> T performRequestV2(final @NonNull Type type, NextcloudRequest request) throws Exception { Log.d(TAG, "performRequestV2() called with: type = [" + type + "], request = [" + request + "]"); final Response response = performNetworkRequestV2(request); Loading
lib/src/main/java/com/nextcloud/android/sso/api/NextcloudRetrofitServiceMethod.java +21 −5 Original line number Diff line number Diff line Loading @@ -179,22 +179,34 @@ public class NextcloudRetrofitServiceMethod<T> { if(this.returnType instanceof ParameterizedType) { ParameterizedType type = (ParameterizedType) returnType; Type ownerType = type.getRawType(); if(ownerType == Observable.class) { if(ownerType == Observable.class || ownerType == io.reactivex.rxjava3.core.Observable.class) { Type typeArgument = type.getActualTypeArguments()[0]; Log.d(TAG, "invoke call to api using observable " + typeArgument); // Streaming if(typeArgument == ResponseBody.class) { if(ownerType == Observable.class) { return (T) Observable.fromCallable(() -> Okhttp3Helper.getResponseBodyFromRequestV2(nextcloudAPI, request)); } else { return (T) io.reactivex.rxjava3.core.Observable.fromCallable(() -> Okhttp3Helper.getResponseBodyFromRequestV2(nextcloudAPI, request)); } } else if (typeArgument instanceof ParameterizedType) { ParameterizedType innerType = (ParameterizedType) typeArgument; Type innerOwnerType = innerType.getRawType(); if(innerOwnerType == ParsedResponse.class) { if(ownerType == Observable.class) { return (T) nextcloudAPI.performRequestObservableV2(innerType.getActualTypeArguments()[0], request); } else { return (T) nextcloudAPI.performRequestObservableV3(innerType.getActualTypeArguments()[0], request); } } } //fallback if(ownerType == Observable.class) { return (T) nextcloudAPI.performRequestObservableV2(typeArgument, request).map(r -> r.getResponse()); } else { return (T) nextcloudAPI.performRequestObservableV3(typeArgument, request).map(r -> r.getResponse()); } } else if(ownerType == Call.class) { Type typeArgument = type.getActualTypeArguments()[0]; Loading @@ -202,8 +214,12 @@ public class NextcloudRetrofitServiceMethod<T> { } } else if (this.returnType == Observable.class) { return (T) nextcloudAPI.performRequestObservableV2(Object.class, request).map(r -> r.getResponse()); } else if (this.returnType == io.reactivex.rxjava3.core.Observable.class) { return (T) nextcloudAPI.performRequestObservableV3(Object.class, request).map(r -> r.getResponse()); } else if (this.returnType == Completable.class) { return (T) ReactivexHelper.wrapInCompletable(nextcloudAPI, request); } else if (this.returnType == io.reactivex.rxjava3.core.Completable.class) { return (T) ReactivexHelper.wrapInCompletableV3(nextcloudAPI, request); } return nextcloudAPI.performRequestV2(this.returnType, request); Loading
lib/src/main/java/com/nextcloud/android/sso/helper/ReactivexHelper.java +4 −0 Original line number Diff line number Diff line Loading @@ -32,5 +32,9 @@ public final class ReactivexHelper { return Completable.fromAction(() -> nextcloudAPI.performRequestV2(Void.class, request)); } public static io.reactivex.rxjava3.core.Completable wrapInCompletableV3(final NextcloudAPI nextcloudAPI, final NextcloudRequest request) { return io.reactivex.rxjava3.core.Completable.fromAction(() -> nextcloudAPI.performRequestV2(Void.class, request)); } }