Commit 0c7a5148 authored by Leonardo Aramaki's avatar Leonardo Aramaki

Migrate RxJava 1.x to 2.x

parent e302d26c
...@@ -2,6 +2,7 @@ package chat.rocket.android_ddp; ...@@ -2,6 +2,7 @@ package chat.rocket.android_ddp;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import org.json.JSONObject; import org.json.JSONObject;
public class DDPClientCallback { public class DDPClientCallback {
......
package chat.rocket.android_ddp; package chat.rocket.android_ddp;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
......
package chat.rocket.android_ddp.rx; package chat.rocket.android_ddp.rx;
import java.io.IOException; import java.io.IOException;
import java.util.concurrent.TimeUnit;
import chat.rocket.android.log.RCLog; import chat.rocket.android.log.RCLog;
import io.reactivex.BackpressureStrategy; import io.reactivex.BackpressureStrategy;
......
package chat.rocket.android; package chat.rocket.android;
import android.os.StrictMode; import android.os.StrictMode;
import com.facebook.stetho.Stetho; import com.facebook.stetho.Stetho;
import com.tspoon.traceur.Traceur; import com.tspoon.traceur.Traceur;
import com.uphyca.stetho_realm.RealmInspectorModulesProvider; import com.uphyca.stetho_realm.RealmInspectorModulesProvider;
......
...@@ -5,8 +5,8 @@ import chat.rocket.android.RocketChatCache ...@@ -5,8 +5,8 @@ import chat.rocket.android.RocketChatCache
import chat.rocket.android.api.rest.CookieInterceptor import chat.rocket.android.api.rest.CookieInterceptor
import chat.rocket.android.api.rest.DefaultCookieProvider import chat.rocket.android.api.rest.DefaultCookieProvider
import com.facebook.stetho.okhttp3.StethoInterceptor import com.facebook.stetho.okhttp3.StethoInterceptor
import java.util.concurrent.TimeUnit
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import java.util.concurrent.TimeUnit
object OkHttpHelper { object OkHttpHelper {
......
...@@ -17,7 +17,6 @@ import java.util.UUID; ...@@ -17,7 +17,6 @@ import java.util.UUID;
import chat.rocket.android.helper.Logger; import chat.rocket.android.helper.Logger;
import chat.rocket.android.helper.TextUtils; import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.log.RCLog; import chat.rocket.android.log.RCLog;
import chat.rocket.android.push.PushManager;
import chat.rocket.core.utils.Pair; import chat.rocket.core.utils.Pair;
import io.reactivex.BackpressureStrategy; import io.reactivex.BackpressureStrategy;
import io.reactivex.Flowable; import io.reactivex.Flowable;
......
...@@ -8,8 +8,8 @@ import android.support.v4.app.Fragment; ...@@ -8,8 +8,8 @@ import android.support.v4.app.Fragment;
import chat.rocket.android.R; import chat.rocket.android.R;
import chat.rocket.android.fragment.server_config.LoginFragment; import chat.rocket.android.fragment.server_config.LoginFragment;
import chat.rocket.android.fragment.server_config.RetryLoginFragment; import chat.rocket.android.fragment.server_config.RetryLoginFragment;
import chat.rocket.core.interactors.SessionInteractor;
import chat.rocket.android.service.ConnectivityManager; import chat.rocket.android.service.ConnectivityManager;
import chat.rocket.core.interactors.SessionInteractor;
import chat.rocket.persistence.realm.repositories.RealmSessionRepository; import chat.rocket.persistence.realm.repositories.RealmSessionRepository;
/** /**
......
...@@ -2,14 +2,13 @@ package chat.rocket.android.activity; ...@@ -2,14 +2,13 @@ package chat.rocket.android.activity;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import chat.rocket.android.BackgroundLooper; import chat.rocket.android.BackgroundLooper;
import chat.rocket.android.helper.Logger; import chat.rocket.android.helper.Logger;
import chat.rocket.android.service.ConnectivityManagerApi; import chat.rocket.android.service.ConnectivityManagerApi;
import chat.rocket.android.shared.BasePresenter; import chat.rocket.android.shared.BasePresenter;
import chat.rocket.core.interactors.SessionInteractor; import chat.rocket.core.interactors.SessionInteractor;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
public class LoginPresenter extends BasePresenter<LoginContract.View> public class LoginPresenter extends BasePresenter<LoginContract.View>
implements LoginContract.Presenter { implements LoginContract.Presenter {
......
...@@ -28,7 +28,6 @@ import chat.rocket.core.models.Session; ...@@ -28,7 +28,6 @@ import chat.rocket.core.models.Session;
import chat.rocket.core.models.User; import chat.rocket.core.models.User;
import chat.rocket.core.repositories.PublicSettingRepository; import chat.rocket.core.repositories.PublicSettingRepository;
import chat.rocket.core.utils.Pair; import chat.rocket.core.utils.Pair;
import hu.akarnokd.rxjava.interop.RxJavaInterop;
import io.reactivex.Flowable; import io.reactivex.Flowable;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
...@@ -220,7 +219,7 @@ public class MainPresenter extends BasePresenter<MainContract.View> ...@@ -220,7 +219,7 @@ public class MainPresenter extends BasePresenter<MainContract.View>
} }
private void subscribeToNetworkChanges() { private void subscribeToNetworkChanges() {
Disposable disposable = RxJavaInterop.toV2Flowable(connectivityManagerApi.getServerConnectivityAsObservable()) Disposable disposable = connectivityManagerApi.getServerConnectivityAsObservable()
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe( .subscribe(
connectivity -> { connectivity -> {
......
package chat.rocket.android.api.rest; package chat.rocket.android.api.rest;
import java.io.IOException; import java.io.IOException;
import chat.rocket.android.helper.TextUtils; import chat.rocket.android.helper.TextUtils;
import okhttp3.Interceptor; import okhttp3.Interceptor;
import okhttp3.Request; import okhttp3.Request;
......
package chat.rocket.android.api.rest; package chat.rocket.android.api.rest;
import chat.rocket.android.RocketChatCache; import chat.rocket.android.RocketChatCache;
import chat.rocket.persistence.realm.models.ddp.RealmUser;
import chat.rocket.persistence.realm.models.internal.RealmSession;
import chat.rocket.persistence.realm.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.persistence.realm.RealmStore; import chat.rocket.persistence.realm.RealmStore;
import chat.rocket.persistence.realm.models.ddp.RealmUser;
import chat.rocket.persistence.realm.models.internal.RealmSession;
public class DefaultCookieProvider implements CookieProvider { public class DefaultCookieProvider implements CookieProvider {
......
...@@ -2,12 +2,13 @@ package chat.rocket.android.api.rest; ...@@ -2,12 +2,13 @@ package chat.rocket.android.api.rest;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import io.reactivex.BackpressureStrategy;
import io.reactivex.Flowable;
import io.reactivex.FlowableEmitter;
import org.json.JSONObject; import org.json.JSONObject;
import java.io.IOException; import java.io.IOException;
import io.reactivex.BackpressureStrategy;
import io.reactivex.Flowable;
import io.reactivex.FlowableEmitter;
import okhttp3.Call; import okhttp3.Call;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
import okhttp3.Request; import okhttp3.Request;
......
package chat.rocket.android.api.rest; package chat.rocket.android.api.rest;
import io.reactivex.Flowable;
import org.json.JSONObject; import org.json.JSONObject;
import io.reactivex.Flowable;
public interface ServerPolicyApi { public interface ServerPolicyApi {
String SECURE_PROTOCOL = "https://"; String SECURE_PROTOCOL = "https://";
......
...@@ -6,6 +6,7 @@ import android.support.annotation.Nullable; ...@@ -6,6 +6,7 @@ import android.support.annotation.Nullable;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import com.trello.rxlifecycle2.components.support.RxFragment; import com.trello.rxlifecycle2.components.support.RxFragment;
/** /**
......
...@@ -7,6 +7,7 @@ import android.support.constraint.ConstraintLayout; ...@@ -7,6 +7,7 @@ import android.support.constraint.ConstraintLayout;
import android.support.design.widget.Snackbar; import android.support.design.widget.Snackbar;
import android.view.View; import android.view.View;
import android.widget.TextView; import android.widget.TextView;
import chat.rocket.android.BuildConfig; import chat.rocket.android.BuildConfig;
import chat.rocket.android.LaunchUtil; import chat.rocket.android.LaunchUtil;
import chat.rocket.android.R; import chat.rocket.android.R;
......
package chat.rocket.android.fragment.add_server; package chat.rocket.android.fragment.add_server;
import chat.rocket.android.BackgroundLooper; import chat.rocket.android.BackgroundLooper;
import chat.rocket.android.helper.Logger;
import chat.rocket.android.helper.OkHttpHelper;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import chat.rocket.android.RocketChatCache; import chat.rocket.android.RocketChatCache;
import chat.rocket.android.api.rest.DefaultServerPolicyApi; import chat.rocket.android.api.rest.DefaultServerPolicyApi;
import chat.rocket.android.api.rest.ServerPolicyApi; import chat.rocket.android.api.rest.ServerPolicyApi;
import chat.rocket.android.helper.Logger;
import chat.rocket.android.helper.OkHttpHelper;
import chat.rocket.android.helper.ServerPolicyApiValidationHelper; import chat.rocket.android.helper.ServerPolicyApiValidationHelper;
import chat.rocket.android.helper.ServerPolicyHelper; import chat.rocket.android.helper.ServerPolicyHelper;
import chat.rocket.android.service.ConnectivityManagerApi; import chat.rocket.android.service.ConnectivityManagerApi;
import chat.rocket.android.shared.BasePresenter; import chat.rocket.android.shared.BasePresenter;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
public class InputHostnamePresenter extends BasePresenter<InputHostnameContract.View> implements InputHostnameContract.Presenter { public class InputHostnamePresenter extends BasePresenter<InputHostnameContract.View> implements InputHostnameContract.Presenter {
private final RocketChatCache rocketChatCache; private final RocketChatCache rocketChatCache;
......
...@@ -10,11 +10,6 @@ import android.support.v4.util.Pair; ...@@ -10,11 +10,6 @@ import android.support.v4.util.Pair;
import android.view.View; import android.view.View;
import android.widget.TextView; import android.widget.TextView;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
import chat.rocket.android.BackgroundLooper; import chat.rocket.android.BackgroundLooper;
import chat.rocket.android.R; import chat.rocket.android.R;
import chat.rocket.android.RocketChatCache; import chat.rocket.android.RocketChatCache;
...@@ -34,6 +29,10 @@ import chat.rocket.persistence.realm.repositories.RealmPublicSettingRepository; ...@@ -34,6 +29,10 @@ import chat.rocket.persistence.realm.repositories.RealmPublicSettingRepository;
import chat.rocket.persistence.realm.repositories.RealmRoomRepository; import chat.rocket.persistence.realm.repositories.RealmRoomRepository;
import chat.rocket.persistence.realm.repositories.RealmRoomRoleRepository; import chat.rocket.persistence.realm.repositories.RealmRoomRoleRepository;
import chat.rocket.persistence.realm.repositories.RealmUserRepository; import chat.rocket.persistence.realm.repositories.RealmUserRepository;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
public class MessageOptionsDialogFragment extends BottomSheetDialogFragment { public class MessageOptionsDialogFragment extends BottomSheetDialogFragment {
......
package chat.rocket.android.fragment.oauth; package chat.rocket.android.fragment.oauth;
import io.reactivex.android.schedulers.AndroidSchedulers;
import org.json.JSONObject; import org.json.JSONObject;
import chat.rocket.android.BackgroundLooper; import chat.rocket.android.BackgroundLooper;
...@@ -10,6 +9,7 @@ import chat.rocket.android.helper.Logger; ...@@ -10,6 +9,7 @@ import chat.rocket.android.helper.Logger;
import chat.rocket.android.helper.TextUtils; import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.shared.BasePresenter; import chat.rocket.android.shared.BasePresenter;
import chat.rocket.core.repositories.LoginServiceConfigurationRepository; import chat.rocket.core.repositories.LoginServiceConfigurationRepository;
import io.reactivex.android.schedulers.AndroidSchedulers;
public class OAuthPresenter extends BasePresenter<OAuthContract.View> public class OAuthPresenter extends BasePresenter<OAuthContract.View>
implements OAuthContract.Presenter { implements OAuthContract.Presenter {
......
package chat.rocket.android.fragment.server_config; package chat.rocket.android.fragment.server_config;
import java.util.List; import java.util.List;
import chat.rocket.android.shared.BaseContract; import chat.rocket.android.shared.BaseContract;
import chat.rocket.core.models.LoginServiceConfiguration; import chat.rocket.core.models.LoginServiceConfiguration;
......
...@@ -11,6 +11,7 @@ import android.widget.TextView; ...@@ -11,6 +11,7 @@ import android.widget.TextView;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import chat.rocket.android.R; import chat.rocket.android.R;
import chat.rocket.android.api.MethodCallHelper; import chat.rocket.android.api.MethodCallHelper;
import chat.rocket.android.layouthelper.oauth.OAuthProviderInfo; import chat.rocket.android.layouthelper.oauth.OAuthProviderInfo;
......
...@@ -3,7 +3,6 @@ package chat.rocket.android.fragment.server_config; ...@@ -3,7 +3,6 @@ package chat.rocket.android.fragment.server_config;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import com.hadisatrio.optional.Optional; import com.hadisatrio.optional.Optional;
import io.reactivex.android.schedulers.AndroidSchedulers;
import bolts.Task; import bolts.Task;
import chat.rocket.android.BackgroundLooper; import chat.rocket.android.BackgroundLooper;
...@@ -16,6 +15,7 @@ import chat.rocket.core.PublicSettingsConstants; ...@@ -16,6 +15,7 @@ import chat.rocket.core.PublicSettingsConstants;
import chat.rocket.core.models.PublicSetting; import chat.rocket.core.models.PublicSetting;
import chat.rocket.core.repositories.LoginServiceConfigurationRepository; import chat.rocket.core.repositories.LoginServiceConfigurationRepository;
import chat.rocket.core.repositories.PublicSettingRepository; import chat.rocket.core.repositories.PublicSettingRepository;
import io.reactivex.android.schedulers.AndroidSchedulers;
public class LoginPresenter extends BasePresenter<LoginContract.View> public class LoginPresenter extends BasePresenter<LoginContract.View>
implements LoginContract.Presenter { implements LoginContract.Presenter {
......
...@@ -3,7 +3,6 @@ package chat.rocket.android.fragment.server_config; ...@@ -3,7 +3,6 @@ package chat.rocket.android.fragment.server_config;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import com.hadisatrio.optional.Optional; import com.hadisatrio.optional.Optional;
import io.reactivex.android.schedulers.AndroidSchedulers;
import chat.rocket.android.BackgroundLooper; import chat.rocket.android.BackgroundLooper;
import chat.rocket.android.api.MethodCallHelper; import chat.rocket.android.api.MethodCallHelper;
...@@ -12,6 +11,7 @@ import chat.rocket.android.helper.TextUtils; ...@@ -12,6 +11,7 @@ import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.shared.BasePresenter; import chat.rocket.android.shared.BasePresenter;
import chat.rocket.core.interactors.SessionInteractor; import chat.rocket.core.interactors.SessionInteractor;
import chat.rocket.core.models.Session; import chat.rocket.core.models.Session;
import io.reactivex.android.schedulers.AndroidSchedulers;
public class RetryLoginPresenter extends BasePresenter<RetryLoginContract.View> public class RetryLoginPresenter extends BasePresenter<RetryLoginContract.View>
implements RetryLoginContract.Presenter { implements RetryLoginContract.Presenter {
......
...@@ -2,13 +2,14 @@ package chat.rocket.android.fragment.sidebar; ...@@ -2,13 +2,14 @@ package chat.rocket.android.fragment.sidebar;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import bolts.Continuation;
import chat.rocket.core.models.RoomSidebar;
import io.reactivex.Flowable;
import java.util.List; import java.util.List;
import bolts.Continuation;
import chat.rocket.android.shared.BaseContract; import chat.rocket.android.shared.BaseContract;
import chat.rocket.core.models.RoomSidebar;
import chat.rocket.core.models.Spotlight; import chat.rocket.core.models.Spotlight;
import chat.rocket.core.models.User; import chat.rocket.core.models.User;
import io.reactivex.Flowable;
public interface SidebarMainContract { public interface SidebarMainContract {
......
...@@ -5,11 +5,9 @@ import android.os.Bundle; ...@@ -5,11 +5,9 @@ import android.os.Bundle;
import android.view.View; import android.view.View;
import android.widget.AutoCompleteTextView; import android.widget.AutoCompleteTextView;
import android.widget.TextView; import android.widget.TextView;
import com.hadisatrio.optional.Optional; import com.hadisatrio.optional.Optional;
import com.jakewharton.rxbinding2.widget.RxTextView; import com.jakewharton.rxbinding2.widget.RxTextView;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.realm.Case;
import bolts.Task; import bolts.Task;
import chat.rocket.android.BackgroundLooper; import chat.rocket.android.BackgroundLooper;
...@@ -20,11 +18,14 @@ import chat.rocket.android.helper.Logger; ...@@ -20,11 +18,14 @@ import chat.rocket.android.helper.Logger;
import chat.rocket.android.helper.TextUtils; import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.layouthelper.sidebar.dialog.SuggestUserAdapter; import chat.rocket.android.layouthelper.sidebar.dialog.SuggestUserAdapter;
import chat.rocket.core.interactors.SessionInteractor; import chat.rocket.core.interactors.SessionInteractor;
import chat.rocket.persistence.realm.models.ddp.RealmUser;
import chat.rocket.persistence.realm.RealmAutoCompleteAdapter; import chat.rocket.persistence.realm.RealmAutoCompleteAdapter;
import chat.rocket.persistence.realm.models.ddp.RealmUser;
import chat.rocket.persistence.realm.repositories.RealmServerInfoRepository; import chat.rocket.persistence.realm.repositories.RealmServerInfoRepository;
import chat.rocket.persistence.realm.repositories.RealmSessionRepository; import chat.rocket.persistence.realm.repositories.RealmSessionRepository;
import chat.rocket.persistence.realm.repositories.RealmUserRepository; import chat.rocket.persistence.realm.repositories.RealmUserRepository;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.realm.Case;
/** /**
* add Direct RealmMessage. * add Direct RealmMessage.
......
package chat.rocket.android.helper; package chat.rocket.android.helper;
import com.hadisatrio.optional.Optional; import com.hadisatrio.optional.Optional;
import io.reactivex.Flowable;
import io.reactivex.Single;
import chat.rocket.android.fragment.chatroom.RocketChatAbsoluteUrl; import chat.rocket.android.fragment.chatroom.RocketChatAbsoluteUrl;
import chat.rocket.core.interactors.SessionInteractor; import chat.rocket.core.interactors.SessionInteractor;
import chat.rocket.core.repositories.ServerInfoRepository; import chat.rocket.core.repositories.ServerInfoRepository;
import chat.rocket.core.repositories.UserRepository; import chat.rocket.core.repositories.UserRepository;
import io.reactivex.Flowable;
import io.reactivex.Single;
public class AbsoluteUrlHelper { public class AbsoluteUrlHelper {
......
...@@ -9,6 +9,7 @@ import java.util.Calendar; ...@@ -9,6 +9,7 @@ import java.util.Calendar;
import java.util.GregorianCalendar; import java.util.GregorianCalendar;
import java.util.Locale; import java.util.Locale;
import java.util.TimeZone; import java.util.TimeZone;
import chat.rocket.android.log.RCLog; import chat.rocket.android.log.RCLog;
/** /**
......
...@@ -8,16 +8,18 @@ import android.os.ParcelFileDescriptor; ...@@ -8,16 +8,18 @@ import android.os.ParcelFileDescriptor;
import android.provider.OpenableColumns; import android.provider.OpenableColumns;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.webkit.MimeTypeMap; import android.webkit.MimeTypeMap;
import org.json.JSONObject; import org.json.JSONObject;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.util.UUID; import java.util.UUID;
import chat.rocket.android.log.RCLog; import chat.rocket.android.log.RCLog;
import chat.rocket.core.SyncState; import chat.rocket.core.SyncState;
import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.persistence.realm.models.ddp.RealmPublicSetting; import chat.rocket.persistence.realm.models.ddp.RealmPublicSetting;
import chat.rocket.persistence.realm.models.internal.FileUploading; import chat.rocket.persistence.realm.models.internal.FileUploading;
import chat.rocket.persistence.realm.RealmHelper;
/** /**
* utility class for uploading file. * utility class for uploading file.
......
package chat.rocket.android.helper; package chat.rocket.android.helper;
import io.realm.Realm;
import io.realm.RealmResults;
import java.util.List; import java.util.List;
import chat.rocket.persistence.realm.models.ddp.RealmPublicSetting;
import chat.rocket.core.PublicSettingsConstants; import chat.rocket.core.PublicSettingsConstants;
import chat.rocket.persistence.realm.models.ddp.RealmPublicSetting;
import io.realm.Realm;
import io.realm.RealmResults;
/** /**
* utility class for getting value comprehensibly from public settings list. * utility class for getting value comprehensibly from public settings list.
......
package chat.rocket.android.helper; package chat.rocket.android.helper;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import rx.Observable;
import rx.functions.Func1; import io.reactivex.Flowable;
import io.reactivex.functions.Function;
/** /**
* Rx operator and so on. * Rx operator and so on.
*/ */
public class RxHelper { public class RxHelper {
public static Func1<Observable<? extends Throwable>, Observable<?>> exponentialBackoff( public static Function<Flowable<? extends Throwable>, Flowable<?>> exponentialBackoff(
int maxRetryCount, long base, TimeUnit unit) { int maxRetryCount, long base, TimeUnit unit) {
// ref: https://github.com/ReactiveX/RxJava/blob/a8ba158839b67246a742b6f1531995ffd7545c08/src/main/java/io/reactivex/Observable.java#L9601 // ref: https://github.com/ReactiveX/RxJava/blob/a8ba158839b67246a742b6f1531995ffd7545c08/src/main/java/io/reactivex/Observable.java#L9601
return attempts -> attempts return attempts -> attempts
.zipWith(Observable.range(0, maxRetryCount), (error, retryCount) -> retryCount) .zipWith(Flowable.range(0, maxRetryCount), (error, retryCount) -> retryCount)
.flatMap(retryCount -> Observable.timer(base * (long) Math.pow(2, retryCount), unit)); .flatMap(retryCount -> Flowable.timer(base * (long) Math.pow(2, retryCount), unit));
} }
} }
...@@ -2,9 +2,8 @@ package chat.rocket.android.helper; ...@@ -2,9 +2,8 @@ package chat.rocket.android.helper;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import io.reactivex.Flowable;
import chat.rocket.android.api.rest.ServerPolicyApi; import chat.rocket.android.api.rest.ServerPolicyApi;
import io.reactivex.Flowable;
public class ServerPolicyApiValidationHelper { public class ServerPolicyApiValidationHelper {
......
...@@ -2,9 +2,10 @@ package chat.rocket.android.helper; ...@@ -2,9 +2,10 @@ package chat.rocket.android.helper;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import io.reactivex.Flowable;
import org.json.JSONObject; import org.json.JSONObject;
import io.reactivex.Flowable;
public class ServerPolicyHelper { public class ServerPolicyHelper {
private static final String DEFAULT_HOST = ".rocket.chat"; private static final String DEFAULT_HOST = ".rocket.chat";
......
...@@ -4,6 +4,7 @@ import android.support.annotation.Nullable; ...@@ -4,6 +4,7 @@ import android.support.annotation.Nullable;
import android.view.View; import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import chat.rocket.android.R; import chat.rocket.android.R;
import chat.rocket.android.helper.DateTime; import chat.rocket.android.helper.DateTime;
import chat.rocket.android.helper.TextUtils; import chat.rocket.android.helper.TextUtils;
......
...@@ -7,6 +7,7 @@ import android.view.View; ...@@ -7,6 +7,7 @@ import android.view.View;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import chat.rocket.android.R; import chat.rocket.android.R;
import chat.rocket.android.helper.TextUtils; import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.layouthelper.ExtModelListAdapter; import chat.rocket.android.layouthelper.ExtModelListAdapter;
......
package chat.rocket.android.layouthelper.chatroom; package chat.rocket.android.layouthelper.chatroom;
import android.view.View; import android.view.View;
import chat.rocket.android.R; import chat.rocket.android.R;
import chat.rocket.android.renderer.MessageRenderer; import chat.rocket.android.renderer.MessageRenderer;
import chat.rocket.android.widget.AbsoluteUrl; import chat.rocket.android.widget.AbsoluteUrl;
......
...@@ -7,13 +7,14 @@ import android.view.View; ...@@ -7,13 +7,14 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import java.util.List; import java.util.List;
import chat.rocket.android.R; import chat.rocket.android.R;
import chat.rocket.android.helper.TextUtils; import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.renderer.UserRenderer;
import chat.rocket.android.widget.AbsoluteUrl; import chat.rocket.android.widget.AbsoluteUrl;
import chat.rocket.core.models.User; import chat.rocket.core.models.User;
import chat.rocket.persistence.realm.models.ddp.RealmUser;
import chat.rocket.persistence.realm.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.renderer.UserRenderer; import chat.rocket.persistence.realm.models.ddp.RealmUser;
/** /**
* RecyclerView adapter for UsersOfRooms. * RecyclerView adapter for UsersOfRooms.
......
...@@ -2,9 +2,10 @@ package chat.rocket.android.layouthelper.chatroom.roomlist; ...@@ -2,9 +2,10 @@ package chat.rocket.android.layouthelper.chatroom.roomlist;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import chat.rocket.core.models.RoomSidebar;
import java.util.List; import java.util.List;
import chat.rocket.core.models.Room; import chat.rocket.core.models.Room;
import chat.rocket.core.models.RoomSidebar;
public class ChannelRoomListHeader implements RoomListHeader { public class ChannelRoomListHeader implements RoomListHeader {
......
...@@ -2,9 +2,10 @@ package chat.rocket.android.layouthelper.chatroom.roomlist; ...@@ -2,9 +2,10 @@ package chat.rocket.android.layouthelper.chatroom.roomlist;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import chat.rocket.core.models.RoomSidebar;
import java.util.List; import java.util.List;
import chat.rocket.core.models.Room; import chat.rocket.core.models.Room;
import chat.rocket.core.models.RoomSidebar;
public class DirectMessageRoomListHeader implements RoomListHeader { public class DirectMessageRoomListHeader implements RoomListHeader {
......
...@@ -2,9 +2,10 @@ package chat.rocket.android.layouthelper.chatroom.roomlist; ...@@ -2,9 +2,10 @@ package chat.rocket.android.layouthelper.chatroom.roomlist;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import chat.rocket.core.models.RoomSidebar;
import java.util.List; import java.util.List;
import chat.rocket.core.models.RoomSidebar;
public class FavoriteRoomListHeader implements RoomListHeader { public class FavoriteRoomListHeader implements RoomListHeader {
private final String title; private final String title;
......
...@@ -5,14 +5,15 @@ import android.support.v7.widget.RecyclerView; ...@@ -5,14 +5,15 @@ import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.ViewGroup; import android.view.ViewGroup;
import chat.rocket.core.models.RoomSidebar;
import chat.rocket.core.models.Spotlight;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import chat.rocket.android.R; import chat.rocket.android.R;
import chat.rocket.android.widget.internal.RoomListItemView; import chat.rocket.android.widget.internal.RoomListItemView;
import chat.rocket.core.models.RoomSidebar;
import chat.rocket.core.models.Spotlight;
public class RoomListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { public class RoomListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
......
...@@ -2,9 +2,10 @@ package chat.rocket.android.layouthelper.chatroom.roomlist; ...@@ -2,9 +2,10 @@ package chat.rocket.android.layouthelper.chatroom.roomlist;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import chat.rocket.core.models.RoomSidebar;
import java.util.List; import java.util.List;
import chat.rocket.core.models.RoomSidebar;
public interface RoomListHeader { public interface RoomListHeader {
String getTitle(); String getTitle();
......
...@@ -2,9 +2,10 @@ package chat.rocket.android.layouthelper.chatroom.roomlist; ...@@ -2,9 +2,10 @@ package chat.rocket.android.layouthelper.chatroom.roomlist;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import chat.rocket.core.models.RoomSidebar;
import java.util.List; import java.util.List;
import chat.rocket.core.models.RoomSidebar;
public class UnreadRoomListHeader implements RoomListHeader { public class UnreadRoomListHeader implements RoomListHeader {
private final String title; private final String title;
......
...@@ -3,6 +3,7 @@ package chat.rocket.android.layouthelper.oauth; ...@@ -3,6 +3,7 @@ package chat.rocket.android.layouthelper.oauth;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import chat.rocket.android.R; import chat.rocket.android.R;
import chat.rocket.android.fragment.oauth.AbstractOAuthFragment; import chat.rocket.android.fragment.oauth.AbstractOAuthFragment;
import chat.rocket.android.fragment.oauth.FacebookOAuthFragment; import chat.rocket.android.fragment.oauth.FacebookOAuthFragment;
......
...@@ -5,11 +5,12 @@ import android.view.View; ...@@ -5,11 +5,12 @@ import android.view.View;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import chat.rocket.android.R; import chat.rocket.android.R;
import chat.rocket.android.renderer.UserRenderer;
import chat.rocket.android.widget.AbsoluteUrl; import chat.rocket.android.widget.AbsoluteUrl;
import chat.rocket.persistence.realm.models.ddp.RealmUser;
import chat.rocket.persistence.realm.RealmAutoCompleteAdapter; import chat.rocket.persistence.realm.RealmAutoCompleteAdapter;
import chat.rocket.android.renderer.UserRenderer; import chat.rocket.persistence.realm.models.ddp.RealmUser;
/** /**
* adapter to suggest user names. * adapter to suggest user names.
......
...@@ -5,8 +5,8 @@ import android.content.BroadcastReceiver; ...@@ -5,8 +5,8 @@ import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log;
import android.support.v4.app.RemoteInput; import android.support.v4.app.RemoteInput;
import android.util.Log;
import chat.rocket.android.push.gcm.GCMIntentService; import chat.rocket.android.push.gcm.GCMIntentService;
......
...@@ -3,13 +3,14 @@ package chat.rocket.android.push.gcm; ...@@ -3,13 +3,14 @@ package chat.rocket.android.push.gcm;
import com.google.android.gms.iid.InstanceIDListenerService; import com.google.android.gms.iid.InstanceIDListenerService;
import java.util.List; import java.util.List;
import chat.rocket.android.helper.GcmPushSettingHelper; import chat.rocket.android.helper.GcmPushSettingHelper;
import chat.rocket.persistence.realm.models.ddp.RealmPublicSetting;
import chat.rocket.persistence.realm.models.internal.GcmPushRegistration;
import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.persistence.realm.RealmStore;
import chat.rocket.android.service.ConnectivityManager; import chat.rocket.android.service.ConnectivityManager;
import chat.rocket.core.models.ServerInfo; import chat.rocket.core.models.ServerInfo;
import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.persistence.realm.RealmStore;
import chat.rocket.persistence.realm.models.ddp.RealmPublicSetting;
import chat.rocket.persistence.realm.models.internal.GcmPushRegistration;
public class GcmInstanceIDListenerService extends InstanceIDListenerService { public class GcmInstanceIDListenerService extends InstanceIDListenerService {
......
...@@ -4,9 +4,10 @@ import android.support.annotation.NonNull; ...@@ -4,9 +4,10 @@ import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import java.util.List; import java.util.List;
import chat.rocket.core.models.ServerInfo; import chat.rocket.core.models.ServerInfo;
import rx.Observable; import io.reactivex.Observable;
import rx.Single; import io.reactivex.Single;
/** /**
* interfaces used for Activity/Fragment and other UI-related logic. * interfaces used for Activity/Fragment and other UI-related logic.
......
package chat.rocket.android.service; package chat.rocket.android.service;
import java.util.List; import java.util.List;
import chat.rocket.core.models.ServerInfo; import chat.rocket.core.models.ServerInfo;
/** /**
......
package chat.rocket.android.service; package chat.rocket.android.service;
import rx.Single; import io.reactivex.Single;
public interface ConnectivityServiceInterface { public interface ConnectivityServiceInterface {
Single<Boolean> ensureConnectionToServer(String hostname); Single<Boolean> ensureConnectionToServer(String hostname);
......
...@@ -20,10 +20,10 @@ import chat.rocket.android_ddp.DDPClient; ...@@ -20,10 +20,10 @@ import chat.rocket.android_ddp.DDPClient;
import chat.rocket.core.models.ServerInfo; import chat.rocket.core.models.ServerInfo;
import chat.rocket.persistence.realm.models.RealmBasedServerInfo; import chat.rocket.persistence.realm.models.RealmBasedServerInfo;
import hugo.weaving.DebugLog; import hugo.weaving.DebugLog;
import rx.Observable; import io.reactivex.Observable;
import rx.Single; import io.reactivex.Single;
import rx.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import rx.subjects.PublishSubject; import io.reactivex.subjects.PublishSubject;
/** /**
* Connectivity management implementation. * Connectivity management implementation.
...@@ -155,7 +155,7 @@ import rx.subjects.PublishSubject; ...@@ -155,7 +155,7 @@ import rx.subjects.PublishSubject;
@Override @Override
public Observable<ServerConnectivity> getServerConnectivityAsObservable() { public Observable<ServerConnectivity> getServerConnectivityAsObservable() {
return Observable.concat(Observable.from(getCurrentConnectivityList()), connectivitySubject); return Observable.concat(Observable.fromIterable(getCurrentConnectivityList()), connectivitySubject);
} }
@Override @Override
...@@ -176,11 +176,6 @@ import rx.subjects.PublishSubject; ...@@ -176,11 +176,6 @@ import rx.subjects.PublishSubject;
.flatMap(_val -> connectToServerIfNeeded(hostname, forceConnect)); .flatMap(_val -> connectToServerIfNeeded(hostname, forceConnect));
} }
// if (connectivity == ServerConnectivity.STATE_CONNECTING) {
// return waitForConnected(hostname)
// .doOnError(error -> notifyConnectionLost(hostname, REASON_NETWORK_ERROR));
// }
if (connectivity == ServerConnectivity.STATE_DISCONNECTED) { if (connectivity == ServerConnectivity.STATE_DISCONNECTED) {
notifyConnecting(hostname); notifyConnecting(hostname);
} }
...@@ -219,7 +214,7 @@ import rx.subjects.PublishSubject; ...@@ -219,7 +214,7 @@ import rx.subjects.PublishSubject;
.filter(state -> .filter(state ->
state == ServerConnectivity.STATE_CONNECTED state == ServerConnectivity.STATE_CONNECTED
|| state == ServerConnectivity.STATE_DISCONNECTED) || state == ServerConnectivity.STATE_DISCONNECTED)
.first() .firstElement()
.toSingle() .toSingle()
.flatMap(state -> .flatMap(state ->
state == ServerConnectivity.STATE_CONNECTED state == ServerConnectivity.STATE_CONNECTED
...@@ -233,7 +228,7 @@ import rx.subjects.PublishSubject; ...@@ -233,7 +228,7 @@ import rx.subjects.PublishSubject;
.filter(serverConnectivity -> hostname.equals(serverConnectivity.hostname)) .filter(serverConnectivity -> hostname.equals(serverConnectivity.hostname))
.map(serverConnectivity -> serverConnectivity.state) .map(serverConnectivity -> serverConnectivity.state)
.filter(state -> state == ServerConnectivity.STATE_DISCONNECTED) .filter(state -> state == ServerConnectivity.STATE_DISCONNECTED)
.first() .firstElement()
.toSingle() .toSingle()
.map(state -> true); .map(state -> true);
} }
......
...@@ -15,8 +15,8 @@ import chat.rocket.android.helper.Logger; ...@@ -15,8 +15,8 @@ import chat.rocket.android.helper.Logger;
import chat.rocket.android.log.RCLog; import chat.rocket.android.log.RCLog;
import chat.rocket.persistence.realm.RealmStore; import chat.rocket.persistence.realm.RealmStore;
import hugo.weaving.DebugLog; import hugo.weaving.DebugLog;
import rx.Observable; import io.reactivex.Observable;
import rx.Single; import io.reactivex.Single;
/** /**
* Background service for Rocket.Chat.Application class. * Background service for Rocket.Chat.Application class.
...@@ -72,7 +72,6 @@ public class RocketChatService extends Service implements ConnectivityServiceInt ...@@ -72,7 +72,6 @@ public class RocketChatService extends Service implements ConnectivityServiceInt
.doOnError(err -> { .doOnError(err -> {
err.printStackTrace(); err.printStackTrace();
currentWebSocketThread = null; currentWebSocketThread = null;
// connectivityManager.notifyConnectionLost(hostname, ConnectivityManagerInternal.REASON_NETWORK_ERROR);
}) })
.flatMap(webSocketThreads -> webSocketThreads.keepAlive()); .flatMap(webSocketThreads -> webSocketThreads.keepAlive());
} }
...@@ -93,7 +92,7 @@ public class RocketChatService extends Service implements ConnectivityServiceInt ...@@ -93,7 +92,7 @@ public class RocketChatService extends Service implements ConnectivityServiceInt
RealmStore.sStore.remove(hostname); RealmStore.sStore.remove(hostname);
}); });
} else { } else {
return Observable.timer(1, TimeUnit.SECONDS).toSingle() return Observable.timer(1, TimeUnit.SECONDS).singleOrError()
.flatMap(_val -> disconnectFromServer(hostname)); .flatMap(_val -> disconnectFromServer(hostname));
} }
}); });
......
...@@ -41,11 +41,10 @@ import chat.rocket.persistence.realm.RealmHelper; ...@@ -41,11 +41,10 @@ import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.persistence.realm.RealmStore; import chat.rocket.persistence.realm.RealmStore;
import chat.rocket.persistence.realm.models.internal.RealmSession; import chat.rocket.persistence.realm.models.internal.RealmSession;
import hugo.weaving.DebugLog; import hugo.weaving.DebugLog;
import io.reactivex.Completable;
import io.reactivex.Flowable; import io.reactivex.Flowable;
import io.reactivex.Single;
import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.CompositeDisposable;
import rx.Completable;
import rx.Single;
import rx.subscriptions.CompositeSubscription;
/** /**
* Thread for handling WebSocket connection. * Thread for handling WebSocket connection.
...@@ -74,7 +73,7 @@ public class RocketChatWebSocketThread extends HandlerThread { ...@@ -74,7 +73,7 @@ public class RocketChatWebSocketThread extends HandlerThread {
private final ConnectivityManagerInternal connectivityManager; private final ConnectivityManagerInternal connectivityManager;
private final ArrayList<Registrable> listeners = new ArrayList<>(); private final ArrayList<Registrable> listeners = new ArrayList<>();
private final CompositeDisposable hearbeatDisposable = new CompositeDisposable(); private final CompositeDisposable hearbeatDisposable = new CompositeDisposable();
private final CompositeSubscription reconnectSubscription = new CompositeSubscription(); private final CompositeDisposable reconnectSubscription = new CompositeDisposable();
private boolean listenersRegistered; private boolean listenersRegistered;
private static class KeepAliveTimer { private static class KeepAliveTimer {
...@@ -110,13 +109,14 @@ public class RocketChatWebSocketThread extends HandlerThread { ...@@ -110,13 +109,14 @@ public class RocketChatWebSocketThread extends HandlerThread {
*/ */
@DebugLog @DebugLog
public static Single<RocketChatWebSocketThread> getStarted(Context appContext, String hostname) { public static Single<RocketChatWebSocketThread> getStarted(Context appContext, String hostname) {
return Single.<RocketChatWebSocketThread>fromEmitter(objectSingleEmitter -> { return Single.<RocketChatWebSocketThread>fromPublisher(objectSingleEmitter -> {
new RocketChatWebSocketThread(appContext, hostname) { new RocketChatWebSocketThread(appContext, hostname) {
@Override @Override
protected void onLooperPrepared() { protected void onLooperPrepared() {
try { try {
super.onLooperPrepared(); super.onLooperPrepared();
objectSingleEmitter.onSuccess(this); objectSingleEmitter.onNext(this);
objectSingleEmitter.onComplete();
} catch (Exception exception) { } catch (Exception exception) {
objectSingleEmitter.onError(exception); objectSingleEmitter.onError(exception);
} }
...@@ -151,14 +151,15 @@ public class RocketChatWebSocketThread extends HandlerThread { ...@@ -151,14 +151,15 @@ public class RocketChatWebSocketThread extends HandlerThread {
@DebugLog @DebugLog
public Single<Boolean> terminate() { public Single<Boolean> terminate() {
if (isAlive()) { if (isAlive()) {
return Single.fromEmitter(emitter -> { return Single.fromPublisher(emitter -> {
new Handler(getLooper()).post(() -> { new Handler(getLooper()).post(() -> {
RCLog.d("thread %s: terminated()", Thread.currentThread().getId()); RCLog.d("thread %s: terminated()", Thread.currentThread().getId());
unregisterListenersAndClose(); unregisterListenersAndClose();
connectivityManager.notifyConnectionLost(hostname, connectivityManager.notifyConnectionLost(hostname,
DDPClient.REASON_CLOSED_BY_USER); DDPClient.REASON_CLOSED_BY_USER);
RocketChatWebSocketThread.super.quit(); RocketChatWebSocketThread.super.quit();
emitter.onSuccess(true); emitter.onNext(true);
emitter.onComplete();
}); });
}); });
} else { } else {
...@@ -198,7 +199,7 @@ public class RocketChatWebSocketThread extends HandlerThread { ...@@ -198,7 +199,7 @@ public class RocketChatWebSocketThread extends HandlerThread {
} }
keepAliveTimer.update(); keepAliveTimer.update();
return Single.fromEmitter(emitter -> { return Single.fromPublisher(emitter -> {
new Thread() { new Thread() {
@Override @Override
public void run() { public void run() {
...@@ -211,7 +212,8 @@ public class RocketChatWebSocketThread extends HandlerThread { ...@@ -211,7 +212,8 @@ public class RocketChatWebSocketThread extends HandlerThread {
emitter.onError(error); emitter.onError(error);
} else { } else {
keepAliveTimer.update(); keepAliveTimer.update();
emitter.onSuccess(true); emitter.onNext(true);
emitter.onComplete();
} }
return null; return null;
}); });
...@@ -251,10 +253,11 @@ public class RocketChatWebSocketThread extends HandlerThread { ...@@ -251,10 +253,11 @@ public class RocketChatWebSocketThread extends HandlerThread {
private Single<Boolean> connectDDPClient() { private Single<Boolean> connectDDPClient() {
return prepareDDPClient() return prepareDDPClient()
.flatMap(_val -> Single.fromEmitter(emitter -> { .flatMap(_val -> Single.fromPublisher(emitter -> {
ServerInfo info = connectivityManager.getServerInfoForHost(hostname); ServerInfo info = connectivityManager.getServerInfoForHost(hostname);
if (info == null) { if (info == null) {
emitter.onSuccess(false); emitter.onNext(false);
emitter.onComplete();
return; return;
} }
RCLog.d("DDPClient#connect"); RCLog.d("DDPClient#connect");
...@@ -292,7 +295,8 @@ public class RocketChatWebSocketThread extends HandlerThread { ...@@ -292,7 +295,8 @@ public class RocketChatWebSocketThread extends HandlerThread {
if (task.isFaulted()) { if (task.isFaulted()) {
emitter.onError(task.getError()); emitter.onError(task.getError());
} else { } else {
emitter.onSuccess(true); emitter.onNext(true);
emitter.onComplete();
} }
return null; return null;
}); });
...@@ -301,13 +305,11 @@ public class RocketChatWebSocketThread extends HandlerThread { ...@@ -301,13 +305,11 @@ public class RocketChatWebSocketThread extends HandlerThread {
private void reconnect() { private void reconnect() {
// if we are already trying to reconnect then return. // if we are already trying to reconnect then return.
if (reconnectSubscription.hasSubscriptions()) { if (reconnectSubscription.size() > 0) {
return; return;
} }
forceInvalidateTokens(); forceInvalidateTokens();
connectivityManager.notifyConnecting(hostname); connectivityManager.notifyConnecting(hostname);
// Needed to use subscriptions because of legacy code.
// TODO: Should update to RxJava 2
reconnectSubscription.add( reconnectSubscription.add(
connectWithExponentialBackoff() connectWithExponentialBackoff()
.subscribe( .subscribe(
...@@ -326,9 +328,9 @@ public class RocketChatWebSocketThread extends HandlerThread { ...@@ -326,9 +328,9 @@ public class RocketChatWebSocketThread extends HandlerThread {
); );
} }
private void logErrorAndUnsubscribe(CompositeSubscription subscriptions, Throwable err) { private void logErrorAndUnsubscribe(CompositeDisposable disposables, Throwable err) {
RCLog.e(err); RCLog.e(err);
subscriptions.clear(); disposables.clear();
} }
private Single<Boolean> connectWithExponentialBackoff() { private Single<Boolean> connectWithExponentialBackoff() {
...@@ -338,11 +340,12 @@ public class RocketChatWebSocketThread extends HandlerThread { ...@@ -338,11 +340,12 @@ public class RocketChatWebSocketThread extends HandlerThread {
@DebugLog @DebugLog
private Single<Boolean> connect() { private Single<Boolean> connect() {
return connectDDPClient() return connectDDPClient()
.flatMap(_val -> Single.fromEmitter(emitter -> { .flatMap(_val -> Single.fromPublisher(emitter -> {
fetchPublicSettings(); fetchPublicSettings();
fetchPermissions(); fetchPermissions();
registerListeners(); registerListeners();
emitter.onSuccess(true); emitter.onNext(true);
emitter.onComplete();
})); }));
} }
...@@ -376,9 +379,9 @@ public class RocketChatWebSocketThread extends HandlerThread { ...@@ -376,9 +379,9 @@ public class RocketChatWebSocketThread extends HandlerThread {
if (sessions != null && sessions.size() > 0) { if (sessions != null && sessions.size() > 0) {
// if we have a session try to resume it. At this point we're probably recovering from // if we have a session try to resume it. At this point we're probably recovering from
// a disconnection state // a disconnection state
final CompositeSubscription subscriptions = new CompositeSubscription(); final CompositeDisposable disposables = new CompositeDisposable();
MethodCallHelper methodCall = new MethodCallHelper(realmHelper); MethodCallHelper methodCall = new MethodCallHelper(realmHelper);
subscriptions.add( disposables.add(
Completable.defer(() -> { Completable.defer(() -> {
Task<Void> result = methodCall.loginWithToken(sessions.get(0).getToken()); Task<Void> result = methodCall.loginWithToken(sessions.get(0).getToken());
if (result.isFaulted()) { if (result.isFaulted()) {
...@@ -390,9 +393,9 @@ public class RocketChatWebSocketThread extends HandlerThread { ...@@ -390,9 +393,9 @@ public class RocketChatWebSocketThread extends HandlerThread {
.subscribe( .subscribe(
() -> { () -> {
createObserversAndRegister(); createObserversAndRegister();
subscriptions.clear(); disposables.clear();
}, },
error -> logErrorAndUnsubscribe(subscriptions, error) error -> logErrorAndUnsubscribe(disposables, error)
) )
); );
} else { } else {
......
...@@ -12,11 +12,12 @@ buildscript { ...@@ -12,11 +12,12 @@ buildscript {
google() google()
jcenter() jcenter()
maven { url 'https://maven.fabric.io/public' } maven { url 'https://maven.fabric.io/public' }
maven { url 'http://oss.jfrog.org/artifactory/oss-snapshot-local' }
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.0.0' classpath 'com.android.tools.build:gradle:3.0.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.51" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.51"
classpath 'io.realm:realm-gradle-plugin:3.0.0' classpath 'io.realm:realm-gradle-plugin:4.2.0-SNAPSHOT'
classpath 'com.jakewharton.hugo:hugo-plugin:1.2.1' classpath 'com.jakewharton.hugo:hugo-plugin:1.2.1'
classpath 'com.google.gms:google-services:3.0.0' classpath 'com.google.gms:google-services:3.0.0'
classpath 'com.github.triplet.gradle:play-publisher:1.1.5' classpath 'com.github.triplet.gradle:play-publisher:1.1.5'
...@@ -35,6 +36,7 @@ allprojects { ...@@ -35,6 +36,7 @@ allprojects {
maven { url 'http://dl.bintray.com/amulyakhare/maven' } //for TextDrawable. maven { url 'http://dl.bintray.com/amulyakhare/maven' } //for TextDrawable.
maven { url "https://clojars.org/repo/" } //for icepick. maven { url "https://clojars.org/repo/" } //for icepick.
maven { url 'https://jitpack.io' } //for widget-fontawesome. maven { url 'https://jitpack.io' } //for widget-fontawesome.
maven { url 'http://oss.jfrog.org/artifactory/oss-snapshot-local' } //for widget-fontawesome.
} }
} }
......
...@@ -37,7 +37,6 @@ dependencies { ...@@ -37,7 +37,6 @@ dependencies {
compile supportDependencies.annotation compile supportDependencies.annotation
compile supportDependencies.designSupportLibrary compile supportDependencies.designSupportLibrary
compile extraDependencies.rxAndroid compile extraDependencies.rxAndroid
compile 'com.github.akarnokd:rxjava2-interop:0.10.2'
provided extraDependencies.optional provided extraDependencies.optional
testCompile "org.jetbrains.kotlin:kotlin-test:$rootProject.ext.kotlinVersion" testCompile "org.jetbrains.kotlin:kotlin-test:$rootProject.ext.kotlinVersion"
testCompile "org.jetbrains.kotlin:kotlin-test-junit:$rootProject.ext.kotlinVersion" testCompile "org.jetbrains.kotlin:kotlin-test-junit:$rootProject.ext.kotlinVersion"
......
package chat.rocket.persistence.realm; package chat.rocket.persistence.realm;
import io.realm.DynamicRealm;
import io.realm.FieldAttribute;
import io.realm.RealmMigration;
import io.realm.RealmObjectSchema;
import io.realm.RealmSchema;
import chat.rocket.persistence.realm.models.ddp.RealmMessage; import chat.rocket.persistence.realm.models.ddp.RealmMessage;
import chat.rocket.persistence.realm.models.ddp.RealmPermission; import chat.rocket.persistence.realm.models.ddp.RealmPermission;
import chat.rocket.persistence.realm.models.ddp.RealmRole; import chat.rocket.persistence.realm.models.ddp.RealmRole;
import chat.rocket.persistence.realm.models.ddp.RealmRoomRole; import chat.rocket.persistence.realm.models.ddp.RealmRoomRole;
import chat.rocket.persistence.realm.models.ddp.RealmSpotlightRoom; import chat.rocket.persistence.realm.models.ddp.RealmSpotlightRoom;
import chat.rocket.persistence.realm.models.ddp.RealmSpotlightUser; import chat.rocket.persistence.realm.models.ddp.RealmSpotlightUser;
import io.realm.DynamicRealm;
import io.realm.FieldAttribute;
import io.realm.RealmMigration;
import io.realm.RealmObjectSchema;
import io.realm.RealmSchema;
public class Migration implements RealmMigration { public class Migration implements RealmMigration {
@Override @Override
......
...@@ -8,13 +8,14 @@ import android.view.ViewGroup; ...@@ -8,13 +8,14 @@ import android.view.ViewGroup;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.Filter; import android.widget.Filter;
import android.widget.TextView; import android.widget.TextView;
import io.realm.Realm;
import io.realm.RealmObject;
import io.realm.RealmResults;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import io.realm.Realm;
import io.realm.RealmObject;
import io.realm.RealmResults;
/** /**
* ListAdapter for AutoCompleteTextView. * ListAdapter for AutoCompleteTextView.
*/ */
......
...@@ -3,18 +3,20 @@ package chat.rocket.persistence.realm; ...@@ -3,18 +3,20 @@ package chat.rocket.persistence.realm;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;
import android.os.Looper; import android.os.Looper;
import io.realm.Realm;
import io.realm.RealmConfiguration;
import io.realm.RealmObject;
import io.realm.RealmQuery;
import io.realm.RealmResults;
import org.json.JSONException; import org.json.JSONException;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import bolts.Task; import bolts.Task;
import bolts.TaskCompletionSource; import bolts.TaskCompletionSource;
import chat.rocket.android.log.RCLog; import chat.rocket.android.log.RCLog;
import io.realm.Realm;
import io.realm.RealmConfiguration;
import io.realm.RealmObject;
import io.realm.RealmQuery;
import io.realm.RealmResults;
@SuppressLint("NewApi") @SuppressLint("NewApi")
public class RealmHelper { public class RealmHelper {
......
package chat.rocket.persistence.realm; package chat.rocket.persistence.realm;
import java.util.List;
import io.realm.Realm; import io.realm.Realm;
import io.realm.RealmChangeListener; import io.realm.RealmChangeListener;
import io.realm.RealmObject; import io.realm.RealmObject;
import io.realm.RealmResults; import io.realm.RealmResults;
import java.util.List;
public class RealmListObserver<T extends RealmObject> extends AbstractRealmResultsObserver<T> { public class RealmListObserver<T extends RealmObject> extends AbstractRealmResultsObserver<T> {
private final Query<T> query; private final Query<T> query;
private OnUpdateListener<T> onUpdateListener; private OnUpdateListener<T> onUpdateListener;
......
package chat.rocket.persistence.realm; package chat.rocket.persistence.realm;
import io.realm.Realm;
import io.realm.RealmConfiguration;
import java.util.HashMap; import java.util.HashMap;
import chat.rocket.persistence.realm.modules.RocketChatLibraryModule; import chat.rocket.persistence.realm.modules.RocketChatLibraryModule;
import chat.rocket.persistence.realm.modules.RocketChatServerModule; import chat.rocket.persistence.realm.modules.RocketChatServerModule;
import io.realm.Realm;
import io.realm.RealmConfiguration;
public class RealmStore { public class RealmStore {
public static HashMap<String, RealmConfiguration> sStore = new HashMap<>(); public static HashMap<String, RealmConfiguration> sStore = new HashMap<>();
......
package chat.rocket.persistence.realm; package chat.rocket.persistence.realm;
import android.content.Context; import android.content.Context;
import io.realm.Realm; import io.realm.Realm;
import io.realm.RealmConfiguration; import io.realm.RealmConfiguration;
......
...@@ -2,17 +2,18 @@ package chat.rocket.persistence.realm.models; ...@@ -2,17 +2,18 @@ package chat.rocket.persistence.realm.models;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.text.TextUtils; import android.text.TextUtils;
import io.realm.Realm;
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import chat.rocket.core.models.ServerInfo; import chat.rocket.core.models.ServerInfo;
import chat.rocket.persistence.realm.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.persistence.realm.RealmStore; import chat.rocket.persistence.realm.RealmStore;
import io.realm.Realm;
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;
/** /**
* Backend implementation to store ServerInfo. * Backend implementation to store ServerInfo.
...@@ -41,7 +42,7 @@ public class RealmBasedServerInfo extends RealmObject { ...@@ -41,7 +42,7 @@ public class RealmBasedServerInfo extends RealmObject {
.build(); .build();
} }
public static Realm getRealm() { public static Realm getServerRealm() {
return RealmStore.getRealm(DB_NAME); return RealmStore.getRealm(DB_NAME);
} }
......
package chat.rocket.persistence.realm.models.ddp; package chat.rocket.persistence.realm.models.ddp;
import chat.rocket.core.models.Email;
import io.realm.RealmObject; import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey; import io.realm.annotations.PrimaryKey;
import chat.rocket.core.models.Email;
/** /**
* Login-RealmUser's email. * Login-RealmUser's email.
*/ */
......
package chat.rocket.persistence.realm.models.ddp; package chat.rocket.persistence.realm.models.ddp;
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
...@@ -10,6 +8,7 @@ import java.util.ArrayList; ...@@ -10,6 +8,7 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import chat.rocket.core.JsonConstants; import chat.rocket.core.JsonConstants;
import chat.rocket.core.SyncState; import chat.rocket.core.SyncState;
import chat.rocket.core.models.Attachment; import chat.rocket.core.models.Attachment;
...@@ -21,6 +20,8 @@ import chat.rocket.core.models.WebContent; ...@@ -21,6 +20,8 @@ import chat.rocket.core.models.WebContent;
import chat.rocket.core.models.WebContentHeaders; import chat.rocket.core.models.WebContentHeaders;
import chat.rocket.core.models.WebContentMeta; import chat.rocket.core.models.WebContentMeta;
import chat.rocket.core.models.WebContentParsedUrl; import chat.rocket.core.models.WebContentParsedUrl;
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;
/** /**
* RealmMessage. * RealmMessage.
......
package chat.rocket.persistence.realm.models.ddp; package chat.rocket.persistence.realm.models.ddp;
import chat.rocket.core.models.LoginServiceConfiguration;
import io.realm.RealmObject; import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey; import io.realm.annotations.PrimaryKey;
import chat.rocket.core.models.LoginServiceConfiguration;
/** /**
* subscription model for "meteor_accounts_loginServiceConfiguration". * subscription model for "meteor_accounts_loginServiceConfiguration".
*/ */
......
package chat.rocket.persistence.realm.models.ddp; package chat.rocket.persistence.realm.models.ddp;
import io.realm.RealmList;
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import chat.rocket.core.models.Permission; import chat.rocket.core.models.Permission;
import chat.rocket.core.models.Role; import chat.rocket.core.models.Role;
import io.realm.RealmList;
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;
public class RealmPermission extends RealmObject { public class RealmPermission extends RealmObject {
......
package chat.rocket.persistence.realm.models.ddp; package chat.rocket.persistence.realm.models.ddp;
import chat.rocket.core.models.Preferences;
import io.realm.RealmObject; import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey; import io.realm.annotations.PrimaryKey;
import chat.rocket.core.models.Preferences;
@SuppressWarnings({"PMD.ShortVariable"}) @SuppressWarnings({"PMD.ShortVariable"})
public class RealmPreferences extends RealmObject { public class RealmPreferences extends RealmObject {
......
package chat.rocket.persistence.realm.models.ddp; package chat.rocket.persistence.realm.models.ddp;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import chat.rocket.core.JsonConstants; import chat.rocket.core.JsonConstants;
import chat.rocket.core.models.PublicSetting; import chat.rocket.core.models.PublicSetting;
import chat.rocket.persistence.realm.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;
/** /**
* public setting model. * public setting model.
......
package chat.rocket.persistence.realm.models.ddp; package chat.rocket.persistence.realm.models.ddp;
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import chat.rocket.core.models.Role; import chat.rocket.core.models.Role;
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;
public class RealmRole extends RealmObject { public class RealmRole extends RealmObject {
......
package chat.rocket.persistence.realm.models.ddp; package chat.rocket.persistence.realm.models.ddp;
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import chat.rocket.core.JsonConstants; import chat.rocket.core.JsonConstants;
import chat.rocket.core.models.Room; import chat.rocket.core.models.Room;
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;
/** /**
* Chat Room(Subscription). * Chat Room(Subscription).
......
package chat.rocket.persistence.realm.models.ddp; package chat.rocket.persistence.realm.models.ddp;
import io.realm.RealmList;
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import chat.rocket.core.models.Role; import chat.rocket.core.models.Role;
import chat.rocket.core.models.RoomRole; import chat.rocket.core.models.RoomRole;
import io.realm.RealmList;
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;
public class RealmRoomRole extends RealmObject { public class RealmRoomRole extends RealmObject {
......
package chat.rocket.persistence.realm.models.ddp; package chat.rocket.persistence.realm.models.ddp;
import chat.rocket.core.models.Settings;
import io.realm.RealmObject; import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey; import io.realm.annotations.PrimaryKey;
import chat.rocket.core.models.Settings;
@SuppressWarnings({"PMD.ShortVariable"}) @SuppressWarnings({"PMD.ShortVariable"})
public class RealmSettings extends RealmObject { public class RealmSettings extends RealmObject {
......
package chat.rocket.persistence.realm.models.ddp; package chat.rocket.persistence.realm.models.ddp;
import chat.rocket.core.models.SpotlightRoom;
import io.realm.RealmObject; import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey; import io.realm.annotations.PrimaryKey;
import chat.rocket.core.models.SpotlightRoom;
public class RealmSpotlightRoom extends RealmObject { public class RealmSpotlightRoom extends RealmObject {
public interface Columns { public interface Columns {
......
package chat.rocket.persistence.realm.models.ddp; package chat.rocket.persistence.realm.models.ddp;
import chat.rocket.core.models.SpotlightUser;
import io.realm.RealmObject; import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey; import io.realm.annotations.PrimaryKey;
import chat.rocket.core.models.SpotlightUser;
public class RealmSpotlightUser extends RealmObject { public class RealmSpotlightUser extends RealmObject {
public interface Columns { public interface Columns {
......
package chat.rocket.persistence.realm.models.internal; package chat.rocket.persistence.realm.models.internal;
import io.realm.Realm;
import io.realm.RealmObject;
import io.realm.RealmQuery;
import io.realm.annotations.PrimaryKey;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import chat.rocket.core.SyncState; import chat.rocket.core.SyncState;
import io.realm.Realm;
import io.realm.RealmObject;
import io.realm.RealmQuery;
import io.realm.annotations.PrimaryKey;
/** /**
* just stores gcm registration status. * just stores gcm registration status.
......
package chat.rocket.persistence.realm.models.internal; package chat.rocket.persistence.realm.models.internal;
import chat.rocket.core.models.RoomHistoryState;
import io.realm.RealmObject; import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey; import io.realm.annotations.PrimaryKey;
import chat.rocket.core.models.RoomHistoryState;
/** /**
* Load messages in the room. * Load messages in the room.
*/ */
......
package chat.rocket.persistence.realm.models.internal; package chat.rocket.persistence.realm.models.internal;
import android.text.TextUtils; import android.text.TextUtils;
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.HashMap; import java.util.HashMap;
import java.util.UUID; import java.util.UUID;
import bolts.Task; import bolts.Task;
import bolts.TaskCompletionSource; import bolts.TaskCompletionSource;
import chat.rocket.android.log.RCLog; import chat.rocket.android.log.RCLog;
...@@ -14,6 +14,8 @@ import chat.rocket.core.SyncState; ...@@ -14,6 +14,8 @@ import chat.rocket.core.SyncState;
import chat.rocket.persistence.realm.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.persistence.realm.RealmObjectObserver; import chat.rocket.persistence.realm.RealmObjectObserver;
import chat.rocket.persistence.realm.helpers.LogcatIfError; import chat.rocket.persistence.realm.helpers.LogcatIfError;
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;
public class MethodCall extends RealmObject { public class MethodCall extends RealmObject {
......
package chat.rocket.persistence.realm.models.internal; package chat.rocket.persistence.realm.models.internal;
import android.text.TextUtils; import android.text.TextUtils;
import io.realm.Realm;
import io.realm.RealmObject;
import io.realm.RealmQuery;
import io.realm.annotations.PrimaryKey;
import org.json.JSONObject; import org.json.JSONObject;
import chat.rocket.core.models.Session; import chat.rocket.core.models.Session;
import chat.rocket.persistence.realm.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.persistence.realm.helpers.LogcatIfError; import chat.rocket.persistence.realm.helpers.LogcatIfError;
import hugo.weaving.DebugLog; import hugo.weaving.DebugLog;
import io.realm.Realm;
import io.realm.RealmObject;
import io.realm.RealmQuery;
import io.realm.annotations.PrimaryKey;
/** /**
* Login session info. * Login session info.
......
package chat.rocket.persistence.realm.modules; package chat.rocket.persistence.realm.modules;
import io.realm.annotations.RealmModule;
import chat.rocket.persistence.realm.models.RealmBasedServerInfo; import chat.rocket.persistence.realm.models.RealmBasedServerInfo;
import io.realm.annotations.RealmModule;
@RealmModule(library = true, classes = {RealmBasedServerInfo.class}) @RealmModule(library = true, classes = {RealmBasedServerInfo.class})
public class RocketChatServerModule { public class RocketChatServerModule {
......
...@@ -2,19 +2,20 @@ package chat.rocket.persistence.realm.repositories; ...@@ -2,19 +2,20 @@ package chat.rocket.persistence.realm.repositories;
import android.os.Looper; import android.os.Looper;
import android.support.v4.util.Pair; import android.support.v4.util.Pair;
import com.hadisatrio.optional.Optional; import com.hadisatrio.optional.Optional;
import io.reactivex.Flowable;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.realm.RealmResults;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import chat.rocket.core.models.LoginServiceConfiguration; import chat.rocket.core.models.LoginServiceConfiguration;
import chat.rocket.core.repositories.LoginServiceConfigurationRepository; import chat.rocket.core.repositories.LoginServiceConfigurationRepository;
import chat.rocket.persistence.realm.RealmStore; import chat.rocket.persistence.realm.RealmStore;
import chat.rocket.persistence.realm.models.ddp.RealmMeteorLoginServiceConfiguration; import chat.rocket.persistence.realm.models.ddp.RealmMeteorLoginServiceConfiguration;
import hu.akarnokd.rxjava.interop.RxJavaInterop; import io.reactivex.Flowable;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.realm.RealmResults;
public class RealmLoginServiceConfigurationRepository extends RealmRepository public class RealmLoginServiceConfigurationRepository extends RealmRepository
implements LoginServiceConfigurationRepository { implements LoginServiceConfigurationRepository {
...@@ -34,11 +35,10 @@ public class RealmLoginServiceConfigurationRepository extends RealmRepository ...@@ -34,11 +35,10 @@ public class RealmLoginServiceConfigurationRepository extends RealmRepository
return Flowable.empty(); return Flowable.empty();
} }
return RxJavaInterop.toV2Flowable( return pair.first.where(RealmMeteorLoginServiceConfiguration.class)
pair.first.where(RealmMeteorLoginServiceConfiguration.class)
.equalTo(RealmMeteorLoginServiceConfiguration.SERVICE, serviceName) .equalTo(RealmMeteorLoginServiceConfiguration.SERVICE, serviceName)
.findAll() .findAll()
.<RealmResults<RealmMeteorLoginServiceConfiguration>>asObservable()); .<RealmResults<RealmMeteorLoginServiceConfiguration>>asFlowable();
}, },
pair -> close(pair.first, pair.second) pair -> close(pair.first, pair.second)
) )
...@@ -57,10 +57,9 @@ public class RealmLoginServiceConfigurationRepository extends RealmRepository ...@@ -57,10 +57,9 @@ public class RealmLoginServiceConfigurationRepository extends RealmRepository
return Flowable.empty(); return Flowable.empty();
} }
return RxJavaInterop return pair.first.where(RealmMeteorLoginServiceConfiguration.class)
.toV2Flowable(pair.first.where(RealmMeteorLoginServiceConfiguration.class)
.findAll() .findAll()
.asObservable()); .asFlowable();
}, },
pair -> close(pair.first, pair.second) pair -> close(pair.first, pair.second)
) )
......
...@@ -5,17 +5,10 @@ import android.support.v4.util.Pair; ...@@ -5,17 +5,10 @@ import android.support.v4.util.Pair;
import com.hadisatrio.optional.Optional; import com.hadisatrio.optional.Optional;
import chat.rocket.core.SyncState;
import io.reactivex.Flowable;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.realm.Realm;
import io.realm.RealmResults;
import io.realm.Sort;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import chat.rocket.core.SyncState;
import chat.rocket.core.models.Message; import chat.rocket.core.models.Message;
import chat.rocket.core.models.Room; import chat.rocket.core.models.Room;
import chat.rocket.core.models.User; import chat.rocket.core.models.User;
...@@ -23,7 +16,12 @@ import chat.rocket.core.repositories.MessageRepository; ...@@ -23,7 +16,12 @@ import chat.rocket.core.repositories.MessageRepository;
import chat.rocket.persistence.realm.RealmStore; import chat.rocket.persistence.realm.RealmStore;
import chat.rocket.persistence.realm.models.ddp.RealmMessage; import chat.rocket.persistence.realm.models.ddp.RealmMessage;
import chat.rocket.persistence.realm.models.ddp.RealmUser; import chat.rocket.persistence.realm.models.ddp.RealmUser;
import hu.akarnokd.rxjava.interop.RxJavaInterop; import io.reactivex.Flowable;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.realm.Realm;
import io.realm.RealmResults;
import io.realm.Sort;
public class RealmMessageRepository extends RealmRepository implements MessageRepository { public class RealmMessageRepository extends RealmRepository implements MessageRepository {
...@@ -42,11 +40,11 @@ public class RealmMessageRepository extends RealmRepository implements MessageRe ...@@ -42,11 +40,11 @@ public class RealmMessageRepository extends RealmRepository implements MessageRe
return Flowable.empty(); return Flowable.empty();
} }
return RxJavaInterop.toV2Flowable( return
pair.first.where(RealmMessage.class) pair.first.where(RealmMessage.class)
.equalTo(RealmMessage.ID, messageId) .equalTo(RealmMessage.ID, messageId)
.findAll() .findAll()
.<RealmResults<RealmMessage>>asObservable()); .<RealmResults<RealmMessage>>asFlowable();
}, },
pair -> close(pair.first, pair.second) pair -> close(pair.first, pair.second)
) )
...@@ -93,8 +91,8 @@ public class RealmMessageRepository extends RealmRepository implements MessageRe ...@@ -93,8 +91,8 @@ public class RealmMessageRepository extends RealmRepository implements MessageRe
realm.beginTransaction(); realm.beginTransaction();
return RxJavaInterop.toV2Flowable(realm.copyToRealmOrUpdate(realmMessage) return realm.copyToRealmOrUpdate(realmMessage)
.asObservable()) .asFlowable()
.filter(it -> it.isLoaded() && it.isValid()) .filter(it -> it.isLoaded() && it.isValid())
.firstElement() .firstElement()
.doOnSuccess(it -> realm.commitTransaction()) .doOnSuccess(it -> realm.commitTransaction())
...@@ -117,10 +115,10 @@ public class RealmMessageRepository extends RealmRepository implements MessageRe ...@@ -117,10 +115,10 @@ public class RealmMessageRepository extends RealmRepository implements MessageRe
realm.beginTransaction(); realm.beginTransaction();
return RxJavaInterop.toV2Flowable(realm.where(RealmMessage.class) return realm.where(RealmMessage.class)
.equalTo(RealmMessage.ID, message.getId()) .equalTo(RealmMessage.ID, message.getId())
.findAll() .findAll()
.<RealmResults<RealmMessage>>asObservable()) .<RealmResults<RealmMessage>>asFlowable()
.filter(realmObject -> realmObject.isLoaded() && realmObject.isValid()) .filter(realmObject -> realmObject.isLoaded() && realmObject.isValid())
.firstElement() .firstElement()
.toSingle() .toSingle()
...@@ -145,13 +143,13 @@ public class RealmMessageRepository extends RealmRepository implements MessageRe ...@@ -145,13 +143,13 @@ public class RealmMessageRepository extends RealmRepository implements MessageRe
return Flowable.empty(); return Flowable.empty();
} }
return RxJavaInterop.toV2Flowable(pair.first.where(RealmMessage.class) return pair.first.where(RealmMessage.class)
.notEqualTo(RealmMessage.SYNC_STATE, SyncState.DELETE_NOT_SYNCED) .notEqualTo(RealmMessage.SYNC_STATE, SyncState.DELETE_NOT_SYNCED)
.notEqualTo(RealmMessage.SYNC_STATE, SyncState.DELETING) .notEqualTo(RealmMessage.SYNC_STATE, SyncState.DELETING)
.equalTo(RealmMessage.ROOM_ID, room.getRoomId()) .equalTo(RealmMessage.ROOM_ID, room.getRoomId())
.isNotNull(RealmMessage.USER) .isNotNull(RealmMessage.USER)
.findAllSorted(RealmMessage.TIMESTAMP, Sort.DESCENDING) .findAllSorted(RealmMessage.TIMESTAMP, Sort.DESCENDING)
.asObservable()); .asFlowable();
}, },
pair -> close(pair.first, pair.second) pair -> close(pair.first, pair.second)
) )
...@@ -170,12 +168,12 @@ public class RealmMessageRepository extends RealmRepository implements MessageRe ...@@ -170,12 +168,12 @@ public class RealmMessageRepository extends RealmRepository implements MessageRe
return Flowable.empty(); return Flowable.empty();
} }
return RxJavaInterop.toV2Flowable(pair.first.where(RealmMessage.class) return pair.first.where(RealmMessage.class)
.equalTo(RealmMessage.ROOM_ID, room.getId()) .equalTo(RealmMessage.ROOM_ID, room.getId())
.greaterThanOrEqualTo(RealmMessage.TIMESTAMP, room.getLastSeen()) .greaterThanOrEqualTo(RealmMessage.TIMESTAMP, room.getLastSeen())
.notEqualTo(RealmMessage.USER_ID, user.getId()) .notEqualTo(RealmMessage.USER_ID, user.getId())
.findAll() .findAll()
.asObservable()); .asFlowable();
}, },
pair -> close(pair.first, pair.second) pair -> close(pair.first, pair.second)
) )
......
...@@ -2,17 +2,17 @@ package chat.rocket.persistence.realm.repositories; ...@@ -2,17 +2,17 @@ package chat.rocket.persistence.realm.repositories;
import android.os.Looper; import android.os.Looper;
import android.support.v4.util.Pair; import android.support.v4.util.Pair;
import com.hadisatrio.optional.Optional; import com.hadisatrio.optional.Optional;
import io.reactivex.Flowable;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.realm.RealmResults;
import chat.rocket.core.models.Permission; import chat.rocket.core.models.Permission;
import chat.rocket.core.repositories.PermissionRepository; import chat.rocket.core.repositories.PermissionRepository;
import chat.rocket.persistence.realm.RealmStore; import chat.rocket.persistence.realm.RealmStore;
import chat.rocket.persistence.realm.models.ddp.RealmPermission; import chat.rocket.persistence.realm.models.ddp.RealmPermission;
import hu.akarnokd.rxjava.interop.RxJavaInterop; import io.reactivex.Flowable;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.realm.RealmResults;
public class RealmPermissionRepository extends RealmRepository implements PermissionRepository { public class RealmPermissionRepository extends RealmRepository implements PermissionRepository {
...@@ -30,11 +30,10 @@ public class RealmPermissionRepository extends RealmRepository implements Permis ...@@ -30,11 +30,10 @@ public class RealmPermissionRepository extends RealmRepository implements Permis
if (pair.first == null) { if (pair.first == null) {
return Flowable.empty(); return Flowable.empty();
} }
return RxJavaInterop.toV2Flowable( return pair.first.where(RealmPermission.class)
pair.first.where(RealmPermission.class)
.equalTo(RealmPermission.Columns.ID, id) .equalTo(RealmPermission.Columns.ID, id)
.findAll() .findAll()
.<RealmResults<RealmPermission>>asObservable()); .<RealmResults<RealmPermission>>asFlowable();
}, },
pair -> close(pair.first, pair.second) pair -> close(pair.first, pair.second)
) )
......
...@@ -2,17 +2,17 @@ package chat.rocket.persistence.realm.repositories; ...@@ -2,17 +2,17 @@ package chat.rocket.persistence.realm.repositories;
import android.os.Looper; import android.os.Looper;
import android.support.v4.util.Pair; import android.support.v4.util.Pair;
import com.hadisatrio.optional.Optional; import com.hadisatrio.optional.Optional;
import io.reactivex.Flowable;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.realm.RealmResults;
import chat.rocket.core.models.PublicSetting; import chat.rocket.core.models.PublicSetting;
import chat.rocket.core.repositories.PublicSettingRepository; import chat.rocket.core.repositories.PublicSettingRepository;
import chat.rocket.persistence.realm.RealmStore; import chat.rocket.persistence.realm.RealmStore;
import chat.rocket.persistence.realm.models.ddp.RealmPublicSetting; import chat.rocket.persistence.realm.models.ddp.RealmPublicSetting;
import hu.akarnokd.rxjava.interop.RxJavaInterop; import io.reactivex.Flowable;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.realm.RealmResults;
public class RealmPublicSettingRepository extends RealmRepository public class RealmPublicSettingRepository extends RealmRepository
implements PublicSettingRepository { implements PublicSettingRepository {
...@@ -31,11 +31,10 @@ public class RealmPublicSettingRepository extends RealmRepository ...@@ -31,11 +31,10 @@ public class RealmPublicSettingRepository extends RealmRepository
if (pair.first == null) { if (pair.first == null) {
return Flowable.empty(); return Flowable.empty();
} }
return RxJavaInterop.toV2Flowable( return pair.first.where(RealmPublicSetting.class)
pair.first.where(RealmPublicSetting.class)
.equalTo(RealmPublicSetting.ID, id) .equalTo(RealmPublicSetting.ID, id)
.findAll() .findAll()
.<RealmResults<RealmPublicSetting>>asObservable()); .<RealmResults<RealmPublicSetting>>asFlowable();
}, },
pair -> close(pair.first, pair.second) pair -> close(pair.first, pair.second)
) )
......
...@@ -2,12 +2,13 @@ package chat.rocket.persistence.realm.repositories; ...@@ -2,12 +2,13 @@ package chat.rocket.persistence.realm.repositories;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import java.util.List;
import io.realm.Realm; import io.realm.Realm;
import io.realm.RealmObject; import io.realm.RealmObject;
import io.realm.RealmResults; import io.realm.RealmResults;
import java.util.List;
public class RealmRepository { public class RealmRepository {
protected void close(Realm realm, Looper looper) { protected void close(Realm realm, Looper looper) {
......
...@@ -15,7 +15,6 @@ import chat.rocket.core.repositories.RoomRepository; ...@@ -15,7 +15,6 @@ import chat.rocket.core.repositories.RoomRepository;
import chat.rocket.persistence.realm.RealmStore; import chat.rocket.persistence.realm.RealmStore;
import chat.rocket.persistence.realm.models.ddp.RealmRoom; import chat.rocket.persistence.realm.models.ddp.RealmRoom;
import chat.rocket.persistence.realm.models.internal.LoadMessageProcedure; import chat.rocket.persistence.realm.models.internal.LoadMessageProcedure;
import hu.akarnokd.rxjava.interop.RxJavaInterop;
import io.reactivex.Flowable; import io.reactivex.Flowable;
import io.reactivex.Single; import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
...@@ -42,10 +41,9 @@ public class RealmRoomRepository extends RealmRepository implements RoomReposito ...@@ -42,10 +41,9 @@ public class RealmRoomRepository extends RealmRepository implements RoomReposito
return Flowable.empty(); return Flowable.empty();
} }
return RxJavaInterop.toV2Flowable( return pair.first.where(RealmRoom.class)
pair.first.where(RealmRoom.class)
.findAll() .findAll()
.asObservable()); .asFlowable();
}, },
pair -> close(pair.first, pair.second) pair -> close(pair.first, pair.second)
) )
...@@ -72,13 +70,11 @@ public class RealmRoomRepository extends RealmRepository implements RoomReposito ...@@ -72,13 +70,11 @@ public class RealmRoomRepository extends RealmRepository implements RoomReposito
return Flowable.just(Optional.<RealmRoom>absent()); return Flowable.just(Optional.<RealmRoom>absent());
} }
return RxJavaInterop.toV2Flowable( return realmRoom.<RealmRoom>asFlowable()
realmRoom
.<RealmRoom>asObservable()
.filter( .filter(
roomSubscription -> roomSubscription.isLoaded() roomSubscription -> roomSubscription.isLoaded()
&& roomSubscription.isValid()) && roomSubscription.isValid())
.map(Optional::of)); .map(Optional::of);
}, },
pair -> close(pair.first, pair.second) pair -> close(pair.first, pair.second)
) )
...@@ -109,12 +105,10 @@ public class RealmRoomRepository extends RealmRepository implements RoomReposito ...@@ -109,12 +105,10 @@ public class RealmRoomRepository extends RealmRepository implements RoomReposito
return Flowable.just(Optional.<LoadMessageProcedure>absent()); return Flowable.just(Optional.<LoadMessageProcedure>absent());
} }
return RxJavaInterop.toV2Flowable( return messageProcedure.<LoadMessageProcedure>asFlowable()
messageProcedure
.<LoadMessageProcedure>asObservable()
.filter(loadMessageProcedure -> loadMessageProcedure.isLoaded() .filter(loadMessageProcedure -> loadMessageProcedure.isLoaded()
&& loadMessageProcedure.isValid()) && loadMessageProcedure.isValid())
.map(Optional::of)); .map(Optional::of);
}, },
pair -> close(pair.first, pair.second) pair -> close(pair.first, pair.second)
) )
...@@ -177,8 +171,7 @@ public class RealmRoomRepository extends RealmRepository implements RoomReposito ...@@ -177,8 +171,7 @@ public class RealmRoomRepository extends RealmRepository implements RoomReposito
if (pair.first == null) { if (pair.first == null) {
return Flowable.empty(); return Flowable.empty();
} }
return RxJavaInterop.toV2Flowable( return pair.first.where(RealmRoom.class)
pair.first.where(RealmRoom.class)
.like(RealmRoom.NAME, "*" + name + "*", Case.INSENSITIVE) .like(RealmRoom.NAME, "*" + name + "*", Case.INSENSITIVE)
.beginGroup() .beginGroup()
.equalTo(RealmRoom.TYPE, RealmRoom.TYPE_CHANNEL) .equalTo(RealmRoom.TYPE, RealmRoom.TYPE_CHANNEL)
...@@ -187,7 +180,7 @@ public class RealmRoomRepository extends RealmRepository implements RoomReposito ...@@ -187,7 +180,7 @@ public class RealmRoomRepository extends RealmRepository implements RoomReposito
.endGroup() .endGroup()
.findAllSorted(RealmRoom.NAME, .findAllSorted(RealmRoom.NAME,
direction.equals(SortDirection.ASC) ? Sort.ASCENDING : Sort.DESCENDING) direction.equals(SortDirection.ASC) ? Sort.ASCENDING : Sort.DESCENDING)
.asObservable()); .asFlowable();
}, },
pair -> close(pair.first, pair.second) pair -> close(pair.first, pair.second)
) )
...@@ -205,15 +198,14 @@ public class RealmRoomRepository extends RealmRepository implements RoomReposito ...@@ -205,15 +198,14 @@ public class RealmRoomRepository extends RealmRepository implements RoomReposito
if (pair.first == null) { if (pair.first == null) {
return Flowable.empty(); return Flowable.empty();
} }
return RxJavaInterop.toV2Flowable( return pair.first.where(RealmRoom.class)
pair.first.where(RealmRoom.class)
.beginGroup() .beginGroup()
.equalTo(RealmRoom.TYPE, RealmRoom.TYPE_CHANNEL) .equalTo(RealmRoom.TYPE, RealmRoom.TYPE_CHANNEL)
.or() .or()
.equalTo(RealmRoom.TYPE, RealmRoom.TYPE_PRIVATE) .equalTo(RealmRoom.TYPE, RealmRoom.TYPE_PRIVATE)
.endGroup() .endGroup()
.findAllSorted(RealmRoom.LAST_SEEN, Sort.ASCENDING) .findAllSorted(RealmRoom.LAST_SEEN, Sort.ASCENDING)
.asObservable()); .asFlowable();
}, },
pair -> close(pair.first, pair.second) pair -> close(pair.first, pair.second)
) )
......
...@@ -2,11 +2,8 @@ package chat.rocket.persistence.realm.repositories; ...@@ -2,11 +2,8 @@ package chat.rocket.persistence.realm.repositories;
import android.os.Looper; import android.os.Looper;
import android.support.v4.util.Pair; import android.support.v4.util.Pair;
import com.hadisatrio.optional.Optional; import com.hadisatrio.optional.Optional;
import io.reactivex.Flowable;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.realm.RealmResults;
import chat.rocket.core.models.Room; import chat.rocket.core.models.Room;
import chat.rocket.core.models.RoomRole; import chat.rocket.core.models.RoomRole;
...@@ -15,7 +12,10 @@ import chat.rocket.core.repositories.RoomRoleRepository; ...@@ -15,7 +12,10 @@ import chat.rocket.core.repositories.RoomRoleRepository;
import chat.rocket.persistence.realm.RealmStore; import chat.rocket.persistence.realm.RealmStore;
import chat.rocket.persistence.realm.models.ddp.RealmRoomRole; import chat.rocket.persistence.realm.models.ddp.RealmRoomRole;
import chat.rocket.persistence.realm.models.ddp.RealmUser; import chat.rocket.persistence.realm.models.ddp.RealmUser;
import hu.akarnokd.rxjava.interop.RxJavaInterop; import io.reactivex.Flowable;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.realm.RealmResults;
public class RealmRoomRoleRepository extends RealmRepository implements RoomRoleRepository { public class RealmRoomRoleRepository extends RealmRepository implements RoomRoleRepository {
...@@ -33,12 +33,11 @@ public class RealmRoomRoleRepository extends RealmRepository implements RoomRole ...@@ -33,12 +33,11 @@ public class RealmRoomRoleRepository extends RealmRepository implements RoomRole
if (pair.first == null) { if (pair.first == null) {
return Flowable.empty(); return Flowable.empty();
} }
return RxJavaInterop.toV2Flowable( return pair.first.where(RealmRoomRole.class)
pair.first.where(RealmRoomRole.class)
.equalTo(RealmRoomRole.Columns.ROOM_ID, room.getId()) .equalTo(RealmRoomRole.Columns.ROOM_ID, room.getId())
.equalTo(RealmRoomRole.Columns.USER + "." + RealmUser.ID, user.getId()) .equalTo(RealmRoomRole.Columns.USER + "." + RealmUser.ID, user.getId())
.findAll() .findAll()
.<RealmResults<RealmRoomRole>>asObservable()); .<RealmResults<RealmRoomRole>>asFlowable();
}, },
pair -> close(pair.first, pair.second) pair -> close(pair.first, pair.second)
) )
......
...@@ -2,21 +2,21 @@ package chat.rocket.persistence.realm.repositories; ...@@ -2,21 +2,21 @@ package chat.rocket.persistence.realm.repositories;
import android.os.Looper; import android.os.Looper;
import android.support.v4.util.Pair; import android.support.v4.util.Pair;
import com.hadisatrio.optional.Optional; import com.hadisatrio.optional.Optional;
import io.reactivex.Flowable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import chat.rocket.core.models.ServerInfo; import chat.rocket.core.models.ServerInfo;
import chat.rocket.core.repositories.ServerInfoRepository; import chat.rocket.core.repositories.ServerInfoRepository;
import chat.rocket.persistence.realm.models.RealmBasedServerInfo; import chat.rocket.persistence.realm.models.RealmBasedServerInfo;
import hu.akarnokd.rxjava.interop.RxJavaInterop; import io.reactivex.Flowable;
import io.reactivex.android.schedulers.AndroidSchedulers;
public class RealmServerInfoRepository extends RealmRepository implements ServerInfoRepository { public class RealmServerInfoRepository extends RealmRepository implements ServerInfoRepository {
@Override @Override
public Flowable<Optional<ServerInfo>> getByHostname(String hostname) { public Flowable<Optional<ServerInfo>> getByHostname(String hostname) {
return Flowable.defer(() -> Flowable.using( return Flowable.defer(() -> Flowable.using(
() -> new Pair<>(RealmBasedServerInfo.getRealm(), Looper.myLooper()), () -> new Pair<>(RealmBasedServerInfo.getServerRealm(), Looper.myLooper()),
pair -> { pair -> {
RealmBasedServerInfo info = pair.first.where(RealmBasedServerInfo.class) RealmBasedServerInfo info = pair.first.where(RealmBasedServerInfo.class)
.equalTo(RealmBasedServerInfo.ColumnName.HOSTNAME, hostname) .equalTo(RealmBasedServerInfo.ColumnName.HOSTNAME, hostname)
...@@ -26,10 +26,9 @@ public class RealmServerInfoRepository extends RealmRepository implements Server ...@@ -26,10 +26,9 @@ public class RealmServerInfoRepository extends RealmRepository implements Server
return Flowable.just(Optional.<RealmBasedServerInfo>absent()); return Flowable.just(Optional.<RealmBasedServerInfo>absent());
} }
return RxJavaInterop.toV2Flowable(info return info.<RealmBasedServerInfo>asFlowable()
.<RealmBasedServerInfo>asObservable()
.filter(it -> it.isLoaded() && it.isValid()) .filter(it -> it.isLoaded() && it.isValid())
.map(Optional::of)); .map(Optional::of);
}, },
pair -> close(pair.first, pair.second) pair -> close(pair.first, pair.second)
) )
......
...@@ -2,17 +2,17 @@ package chat.rocket.persistence.realm.repositories; ...@@ -2,17 +2,17 @@ package chat.rocket.persistence.realm.repositories;
import android.os.Looper; import android.os.Looper;
import android.support.v4.util.Pair; import android.support.v4.util.Pair;
import com.hadisatrio.optional.Optional; import com.hadisatrio.optional.Optional;
import io.reactivex.Flowable;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.realm.Realm;
import chat.rocket.core.models.Session; import chat.rocket.core.models.Session;
import chat.rocket.core.repositories.SessionRepository; import chat.rocket.core.repositories.SessionRepository;
import chat.rocket.persistence.realm.RealmStore; import chat.rocket.persistence.realm.RealmStore;
import chat.rocket.persistence.realm.models.internal.RealmSession; import chat.rocket.persistence.realm.models.internal.RealmSession;
import hu.akarnokd.rxjava.interop.RxJavaInterop; import io.reactivex.Flowable;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.realm.Realm;
public class RealmSessionRepository extends RealmRepository implements SessionRepository { public class RealmSessionRepository extends RealmRepository implements SessionRepository {
...@@ -31,11 +31,10 @@ public class RealmSessionRepository extends RealmRepository implements SessionRe ...@@ -31,11 +31,10 @@ public class RealmSessionRepository extends RealmRepository implements SessionRe
return Flowable.empty(); return Flowable.empty();
} }
return RxJavaInterop.toV2Flowable( return pair.first.where(RealmSession.class)
pair.first.where(RealmSession.class)
.equalTo(RealmSession.ID, id) .equalTo(RealmSession.ID, id)
.findAll() .findAll()
.<RealmSession>asObservable()); .<RealmSession>asFlowable();
}, },
pair -> close(pair.first, pair.second) pair -> close(pair.first, pair.second)
) )
...@@ -76,8 +75,8 @@ public class RealmSessionRepository extends RealmRepository implements SessionRe ...@@ -76,8 +75,8 @@ public class RealmSessionRepository extends RealmRepository implements SessionRe
realm.beginTransaction(); realm.beginTransaction();
return RxJavaInterop.toV2Flowable(realm.copyToRealmOrUpdate(realmSession) return realm.copyToRealmOrUpdate(realmSession)
.asObservable()) .asFlowable()
.filter(it -> it != null && it.isLoaded() && it.isValid()) .filter(it -> it != null && it.isLoaded() && it.isValid())
.firstElement() .firstElement()
.doOnSuccess(it -> realm.commitTransaction()) .doOnSuccess(it -> realm.commitTransaction())
......
...@@ -6,13 +6,12 @@ import chat.rocket.core.repositories.SpotlightRepository ...@@ -6,13 +6,12 @@ import chat.rocket.core.repositories.SpotlightRepository
import chat.rocket.persistence.realm.RealmStore import chat.rocket.persistence.realm.RealmStore
import chat.rocket.persistence.realm.models.ddp.RealmSpotlight import chat.rocket.persistence.realm.models.ddp.RealmSpotlight
import chat.rocket.persistence.realm.models.ddp.RealmSpotlight.Columns import chat.rocket.persistence.realm.models.ddp.RealmSpotlight.Columns
import hu.akarnokd.rxjava.interop.RxJavaInterop
import io.reactivex.Flowable import io.reactivex.Flowable
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
import io.realm.Realm import io.realm.Realm
import io.realm.RealmResults import io.realm.RealmResults
import io.realm.Sort import io.realm.Sort
import java.util.ArrayList import java.util.*
class RealmSpotlightRepository(private val hostname: String) : RealmRepository(), SpotlightRepository { class RealmSpotlightRepository(private val hostname: String) : RealmRepository(), SpotlightRepository {
...@@ -24,9 +23,9 @@ class RealmSpotlightRepository(private val hostname: String) : RealmRepository() ...@@ -24,9 +23,9 @@ class RealmSpotlightRepository(private val hostname: String) : RealmRepository()
return@using Flowable.empty() return@using Flowable.empty()
} }
return@using RxJavaInterop.toV2Flowable<RealmResults<RealmSpotlight>>(pair.first.where(RealmSpotlight::class.java) return@using pair.first.where(RealmSpotlight::class.java)
.findAllSorted(Columns.TYPE, Sort.DESCENDING) .findAllSorted(Columns.TYPE, Sort.DESCENDING)
.asObservable()) .asFlowable()
}) { pair -> close(pair.first, pair.second) } }) { pair -> close(pair.first, pair.second) }
.unsubscribeOn(AndroidSchedulers.from(Looper.myLooper()!!)) .unsubscribeOn(AndroidSchedulers.from(Looper.myLooper()!!))
.filter { realmSpotlightResults -> realmSpotlightResults.isLoaded && realmSpotlightResults.isValid } .filter { realmSpotlightResults -> realmSpotlightResults.isLoaded && realmSpotlightResults.isValid }
......
...@@ -2,20 +2,20 @@ package chat.rocket.persistence.realm.repositories; ...@@ -2,20 +2,20 @@ package chat.rocket.persistence.realm.repositories;
import android.os.Looper; import android.os.Looper;
import android.support.v4.util.Pair; import android.support.v4.util.Pair;
import io.reactivex.Flowable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.realm.Case;
import io.realm.Sort;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import chat.rocket.core.SortDirection; import chat.rocket.core.SortDirection;
import chat.rocket.core.models.SpotlightRoom; import chat.rocket.core.models.SpotlightRoom;
import chat.rocket.core.repositories.SpotlightRoomRepository; import chat.rocket.core.repositories.SpotlightRoomRepository;
import chat.rocket.persistence.realm.RealmStore; import chat.rocket.persistence.realm.RealmStore;
import chat.rocket.persistence.realm.models.ddp.RealmRoom; import chat.rocket.persistence.realm.models.ddp.RealmRoom;
import chat.rocket.persistence.realm.models.ddp.RealmSpotlightRoom; import chat.rocket.persistence.realm.models.ddp.RealmSpotlightRoom;
import hu.akarnokd.rxjava.interop.RxJavaInterop; import io.reactivex.Flowable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.realm.Case;
import io.realm.Sort;
public class RealmSpotlightRoomRepository extends RealmRepository implements SpotlightRoomRepository { public class RealmSpotlightRoomRepository extends RealmRepository implements SpotlightRoomRepository {
...@@ -34,8 +34,7 @@ public class RealmSpotlightRoomRepository extends RealmRepository implements Spo ...@@ -34,8 +34,7 @@ public class RealmSpotlightRoomRepository extends RealmRepository implements Spo
return Flowable.empty(); return Flowable.empty();
} }
return RxJavaInterop.toV2Flowable( return pair.first.where(RealmSpotlightRoom.class)
pair.first.where(RealmSpotlightRoom.class)
.like(RealmSpotlightRoom.Columns.NAME, "*" + name + "*", Case.INSENSITIVE) .like(RealmSpotlightRoom.Columns.NAME, "*" + name + "*", Case.INSENSITIVE)
.beginGroup() .beginGroup()
.equalTo(RealmSpotlightRoom.Columns.TYPE, RealmRoom.TYPE_CHANNEL) .equalTo(RealmSpotlightRoom.Columns.TYPE, RealmRoom.TYPE_CHANNEL)
...@@ -43,7 +42,7 @@ public class RealmSpotlightRoomRepository extends RealmRepository implements Spo ...@@ -43,7 +42,7 @@ public class RealmSpotlightRoomRepository extends RealmRepository implements Spo
.equalTo(RealmSpotlightRoom.Columns.TYPE, RealmRoom.TYPE_PRIVATE) .equalTo(RealmSpotlightRoom.Columns.TYPE, RealmRoom.TYPE_PRIVATE)
.endGroup() .endGroup()
.findAllSorted(RealmSpotlightRoom.Columns.NAME, direction.equals(SortDirection.ASC) ? Sort.ASCENDING : Sort.DESCENDING) .findAllSorted(RealmSpotlightRoom.Columns.NAME, direction.equals(SortDirection.ASC) ? Sort.ASCENDING : Sort.DESCENDING)
.asObservable()); .asFlowable();
}, },
pair -> close(pair.first, pair.second) pair -> close(pair.first, pair.second)
) )
......
...@@ -2,19 +2,19 @@ package chat.rocket.persistence.realm.repositories; ...@@ -2,19 +2,19 @@ package chat.rocket.persistence.realm.repositories;
import android.os.Looper; import android.os.Looper;
import android.support.v4.util.Pair; import android.support.v4.util.Pair;
import io.reactivex.Flowable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.realm.Case;
import io.realm.Sort;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import chat.rocket.core.SortDirection; import chat.rocket.core.SortDirection;
import chat.rocket.core.models.SpotlightUser; import chat.rocket.core.models.SpotlightUser;
import chat.rocket.core.repositories.SpotlightUserRepository; import chat.rocket.core.repositories.SpotlightUserRepository;
import chat.rocket.persistence.realm.RealmStore; import chat.rocket.persistence.realm.RealmStore;
import chat.rocket.persistence.realm.models.ddp.RealmSpotlightUser; import chat.rocket.persistence.realm.models.ddp.RealmSpotlightUser;
import hu.akarnokd.rxjava.interop.RxJavaInterop; import io.reactivex.Flowable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.realm.Case;
import io.realm.Sort;
public class RealmSpotlightUserRepository extends RealmRepository implements SpotlightUserRepository { public class RealmSpotlightUserRepository extends RealmRepository implements SpotlightUserRepository {
...@@ -33,8 +33,7 @@ public class RealmSpotlightUserRepository extends RealmRepository implements Spo ...@@ -33,8 +33,7 @@ public class RealmSpotlightUserRepository extends RealmRepository implements Spo
return Flowable.empty(); return Flowable.empty();
} }
return RxJavaInterop.toV2Flowable( return pair.first.where(RealmSpotlightUser.class)
pair.first.where(RealmSpotlightUser.class)
.beginGroup() .beginGroup()
.like(RealmSpotlightUser.Columns.USERNAME, "*" + name + "*", Case.INSENSITIVE) .like(RealmSpotlightUser.Columns.USERNAME, "*" + name + "*", Case.INSENSITIVE)
.isNull(RealmSpotlightUser.Columns.NAME) .isNull(RealmSpotlightUser.Columns.NAME)
...@@ -46,7 +45,7 @@ public class RealmSpotlightUserRepository extends RealmRepository implements Spo ...@@ -46,7 +45,7 @@ public class RealmSpotlightUserRepository extends RealmRepository implements Spo
.endGroup() .endGroup()
.findAllSorted(RealmSpotlightUser.Columns.USERNAME, .findAllSorted(RealmSpotlightUser.Columns.USERNAME,
direction.equals(SortDirection.ASC) ? Sort.ASCENDING : Sort.DESCENDING) direction.equals(SortDirection.ASC) ? Sort.ASCENDING : Sort.DESCENDING)
.asObservable()); .asFlowable();
}, },
pair -> close(pair.first, pair.second) pair -> close(pair.first, pair.second)
) )
......
...@@ -12,7 +12,6 @@ import chat.rocket.core.models.User; ...@@ -12,7 +12,6 @@ import chat.rocket.core.models.User;
import chat.rocket.core.repositories.UserRepository; import chat.rocket.core.repositories.UserRepository;
import chat.rocket.persistence.realm.RealmStore; import chat.rocket.persistence.realm.RealmStore;
import chat.rocket.persistence.realm.models.ddp.RealmUser; import chat.rocket.persistence.realm.models.ddp.RealmUser;
import hu.akarnokd.rxjava.interop.RxJavaInterop;
import io.reactivex.Flowable; import io.reactivex.Flowable;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.realm.Case; import io.realm.Case;
...@@ -36,10 +35,9 @@ public class RealmUserRepository extends RealmRepository implements UserReposito ...@@ -36,10 +35,9 @@ public class RealmUserRepository extends RealmRepository implements UserReposito
return Flowable.empty(); return Flowable.empty();
} }
return RxJavaInterop.toV2Flowable( return pair.first.where(RealmUser.class)
pair.first.where(RealmUser.class)
.findAll() .findAll()
.asObservable()); .asFlowable();
}, },
pair -> close(pair.first, pair.second)) pair -> close(pair.first, pair.second))
.unsubscribeOn(AndroidSchedulers.from(Looper.myLooper())) .unsubscribeOn(AndroidSchedulers.from(Looper.myLooper()))
...@@ -71,11 +69,10 @@ public class RealmUserRepository extends RealmRepository implements UserReposito ...@@ -71,11 +69,10 @@ public class RealmUserRepository extends RealmRepository implements UserReposito
return Flowable.empty(); return Flowable.empty();
} }
return RxJavaInterop.toV2Flowable( return pair.first.where(RealmUser.class)
pair.first.where(RealmUser.class)
.isNotEmpty(RealmUser.EMAILS) .isNotEmpty(RealmUser.EMAILS)
.findAll() .findAll()
.<RealmResults<RealmUser>>asObservable()); .<RealmResults<RealmUser>>asFlowable();
}, },
pair -> close(pair.first, pair.second)); pair -> close(pair.first, pair.second));
} }
...@@ -114,11 +111,9 @@ public class RealmUserRepository extends RealmRepository implements UserReposito ...@@ -114,11 +111,9 @@ public class RealmUserRepository extends RealmRepository implements UserReposito
return Flowable.just(Optional.absent()); return Flowable.just(Optional.absent());
} }
return RxJavaInterop.toV2Flowable( return realmUser.<RealmUser>asFlowable()
realmUser
.<RealmUser>asObservable()
.filter(user -> user.isLoaded() && user.isValid()) .filter(user -> user.isLoaded() && user.isValid())
.map(Optional::of)); .map(Optional::of);
} }
@Override @Override
...@@ -139,11 +134,10 @@ public class RealmUserRepository extends RealmRepository implements UserReposito ...@@ -139,11 +134,10 @@ public class RealmUserRepository extends RealmRepository implements UserReposito
return Flowable.empty(); return Flowable.empty();
} }
return RxJavaInterop.toV2Flowable( return pair.first.where(RealmUser.class)
pair.first.where(RealmUser.class)
.like(RealmUser.USERNAME, "*" + name + "*", Case.INSENSITIVE) .like(RealmUser.USERNAME, "*" + name + "*", Case.INSENSITIVE)
.findAllSorted(RealmUser.USERNAME, Sort.DESCENDING) .findAllSorted(RealmUser.USERNAME, Sort.DESCENDING)
.asObservable()); .asFlowable();
}, },
pair -> close(pair.first, pair.second)); pair -> close(pair.first, pair.second));
} }
......
...@@ -7,9 +7,11 @@ import android.os.Build; ...@@ -7,9 +7,11 @@ import android.os.Build;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import chat.rocket.android.widget.helper.FrescoHelper;
import com.facebook.drawee.view.SimpleDraweeView; import com.facebook.drawee.view.SimpleDraweeView;
import chat.rocket.android.widget.helper.FrescoHelper;
public class RocketChatAvatar extends FrameLayout { public class RocketChatAvatar extends FrameLayout {
private SimpleDraweeView simpleDraweeViewAvatar; private SimpleDraweeView simpleDraweeViewAvatar;
......
...@@ -3,6 +3,7 @@ package chat.rocket.android.widget.helper; ...@@ -3,6 +3,7 @@ package chat.rocket.android.widget.helper;
import android.support.annotation.StringRes; import android.support.annotation.StringRes;
import java.util.HashMap; import java.util.HashMap;
import chat.rocket.android.widget.R; import chat.rocket.android.widget.R;
public class IconProvider { public class IconProvider {
......
...@@ -15,6 +15,7 @@ import android.widget.TextView; ...@@ -15,6 +15,7 @@ import android.widget.TextView;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import chat.rocket.android.widget.R; import chat.rocket.android.widget.R;
public class InlineHightlighter { public class InlineHightlighter {
......
...@@ -5,7 +5,6 @@ import android.text.Selection; ...@@ -5,7 +5,6 @@ import android.text.Selection;
import android.text.Spannable; import android.text.Spannable;
import android.text.method.LinkMovementMethod; import android.text.method.LinkMovementMethod;
import android.text.method.MovementMethod; import android.text.method.MovementMethod;
import android.text.method.Touch;
import android.text.style.ClickableSpan; import android.text.style.ClickableSpan;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.widget.TextView; import android.widget.TextView;
......
...@@ -3,6 +3,7 @@ package chat.rocket.android.widget.helper; ...@@ -3,6 +3,7 @@ package chat.rocket.android.widget.helper;
import android.text.SpannableString; import android.text.SpannableString;
import android.text.Spanned; import android.text.Spanned;
import android.widget.TextView; import android.widget.TextView;
import org.nibor.autolink.LinkExtractor; import org.nibor.autolink.LinkExtractor;
import org.nibor.autolink.LinkSpan; import org.nibor.autolink.LinkSpan;
import org.nibor.autolink.LinkType; import org.nibor.autolink.LinkType;
......
...@@ -6,6 +6,7 @@ import android.support.v4.app.Fragment; ...@@ -6,6 +6,7 @@ import android.support.v4.app.Fragment;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import java.util.List; import java.util.List;
import chat.rocket.android.widget.R; import chat.rocket.android.widget.R;
import chat.rocket.android.widget.layouthelper.MessageExtraActionListAdapter; import chat.rocket.android.widget.layouthelper.MessageExtraActionListAdapter;
import chat.rocket.android.widget.message.MessageExtraActionItemPresenter; import chat.rocket.android.widget.message.MessageExtraActionItemPresenter;
......
...@@ -6,6 +6,7 @@ import android.view.View; ...@@ -6,6 +6,7 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import java.util.List; import java.util.List;
import chat.rocket.android.widget.R; import chat.rocket.android.widget.R;
import chat.rocket.android.widget.message.MessageExtraActionItemPresenter; import chat.rocket.android.widget.message.MessageExtraActionItemPresenter;
......
...@@ -16,6 +16,12 @@ import android.view.View; ...@@ -16,6 +16,12 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder;
import com.facebook.drawee.view.SimpleDraweeView;
import java.util.List;
import chat.rocket.android.widget.AbsoluteUrl; import chat.rocket.android.widget.AbsoluteUrl;
import chat.rocket.android.widget.R; import chat.rocket.android.widget.R;
import chat.rocket.android.widget.helper.FrescoHelper; import chat.rocket.android.widget.helper.FrescoHelper;
...@@ -24,10 +30,6 @@ import chat.rocket.core.models.AttachmentAuthor; ...@@ -24,10 +30,6 @@ import chat.rocket.core.models.AttachmentAuthor;
import chat.rocket.core.models.AttachmentField; import chat.rocket.core.models.AttachmentField;
import chat.rocket.core.models.AttachmentTitle; import chat.rocket.core.models.AttachmentTitle;
import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder;
import com.facebook.drawee.view.SimpleDraweeView;
import java.util.List;
/** /**
*/ */
public class RocketChatMessageAttachmentsLayout extends LinearLayout { public class RocketChatMessageAttachmentsLayout extends LinearLayout {
......
...@@ -8,6 +8,7 @@ import android.util.AttributeSet; ...@@ -8,6 +8,7 @@ import android.util.AttributeSet;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import com.emojione.Emojione; import com.emojione.Emojione;
import chat.rocket.android.widget.R; import chat.rocket.android.widget.R;
......
...@@ -11,12 +11,14 @@ import android.view.LayoutInflater; ...@@ -11,12 +11,14 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import chat.rocket.android.widget.helper.FrescoHelper;
import com.facebook.drawee.view.SimpleDraweeView; import com.facebook.drawee.view.SimpleDraweeView;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import chat.rocket.android.widget.R; import chat.rocket.android.widget.R;
import chat.rocket.android.widget.helper.FrescoHelper;
import chat.rocket.android.widget.helper.ImageFormat; import chat.rocket.android.widget.helper.ImageFormat;
import chat.rocket.core.models.WebContent; import chat.rocket.core.models.WebContent;
import chat.rocket.core.models.WebContentHeaders; import chat.rocket.core.models.WebContentHeaders;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment