Commit 8af265c7 authored by Leonardo Aramaki's avatar Leonardo Aramaki

Refresh opened rooms if conn state is SESSION_ESTABLISHED loading

missed messages for that channel
parent 85c02cc3
...@@ -18,6 +18,7 @@ import android.widget.TextView; ...@@ -18,6 +18,7 @@ import android.widget.TextView;
import com.facebook.drawee.view.SimpleDraweeView; import com.facebook.drawee.view.SimpleDraweeView;
import java.util.List; import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import chat.rocket.android.LaunchUtil; import chat.rocket.android.LaunchUtil;
import chat.rocket.android.R; import chat.rocket.android.R;
...@@ -49,7 +50,7 @@ public class MainActivity extends AbstractAuthedActivity implements MainContract ...@@ -49,7 +50,7 @@ public class MainActivity extends AbstractAuthedActivity implements MainContract
private RoomToolbar toolbar; private RoomToolbar toolbar;
private SlidingPaneLayout pane; private SlidingPaneLayout pane;
private MainContract.Presenter presenter; private MainContract.Presenter presenter;
private volatile Snackbar statusTicker; private volatile AtomicReference<Snackbar> statusTicker = new AtomicReference<>();
@Override @Override
public int getLayoutContainerForFragment() { public int getLayoutContainerForFragment() {
...@@ -95,7 +96,9 @@ public class MainActivity extends AbstractAuthedActivity implements MainContract ...@@ -95,7 +96,9 @@ public class MainActivity extends AbstractAuthedActivity implements MainContract
presenter.release(); presenter.release();
} }
// Dismiss any status ticker // Dismiss any status ticker
if (statusTicker != null) statusTicker.dismiss(); if (statusTicker.get() != null) {
statusTicker.get().dismiss();
}
super.onPause(); super.onPause();
} }
...@@ -250,31 +253,47 @@ public class MainActivity extends AbstractAuthedActivity implements MainContract ...@@ -250,31 +253,47 @@ public class MainActivity extends AbstractAuthedActivity implements MainContract
} }
@Override @Override
public synchronized void showConnectionError() { public void showConnectionError() {
dismissStatusTickerIfShowing(); if (statusTicker.get() != null && statusTicker.get().isShown()) {
statusTicker = Snackbar.make(findViewById(getLayoutContainerForFragment()), statusTicker.get().setText(R.string.fragment_retry_login_error_title)
.setAction(R.string.fragment_retry_login_retry_title, view -> {
statusTicker.set(null);
showConnecting();
ConnectivityManager.getInstance(getApplicationContext()).keepAliveServer();
});
} else {
Snackbar newStatusTicker = Snackbar.make(findViewById(getLayoutContainerForFragment()),
R.string.fragment_retry_login_error_title, Snackbar.LENGTH_INDEFINITE) R.string.fragment_retry_login_error_title, Snackbar.LENGTH_INDEFINITE)
.setAction(R.string.fragment_retry_login_retry_title, view -> .setAction(R.string.fragment_retry_login_retry_title, view -> {
ConnectivityManager.getInstance(getApplicationContext()).keepAliveServer()); statusTicker.set(null);
statusTicker.show(); showConnecting();
ConnectivityManager.getInstance(getApplicationContext()).keepAliveServer();
});
statusTicker.set(newStatusTicker);
statusTicker.get().show();
}
} }
@Override @Override
public synchronized void showConnecting() { public void showConnecting() {
dismissStatusTickerIfShowing(); if (statusTicker.get() != null && statusTicker.get().isShown()) {
statusTicker = Snackbar.make(findViewById(getLayoutContainerForFragment()), statusTicker.get().setText(R.string.server_config_activity_authenticating);
} else {
Snackbar newStatusTicker = Snackbar.make(findViewById(getLayoutContainerForFragment()),
R.string.server_config_activity_authenticating, Snackbar.LENGTH_INDEFINITE); R.string.server_config_activity_authenticating, Snackbar.LENGTH_INDEFINITE);
statusTicker.show(); statusTicker.set(newStatusTicker);
statusTicker.get().show();
}
} }
@Override @Override
public synchronized void showConnectionOk() { public void showConnectionOk() {
dismissStatusTickerIfShowing(); dismissStatusTickerIfShowing();
} }
private void dismissStatusTickerIfShowing() { private void dismissStatusTickerIfShowing() {
if (statusTicker != null) { if (statusTicker != null) {
statusTicker.dismiss(); statusTicker.get().dismiss();
} }
} }
...@@ -334,7 +353,7 @@ public class MainActivity extends AbstractAuthedActivity implements MainContract ...@@ -334,7 +353,7 @@ public class MainActivity extends AbstractAuthedActivity implements MainContract
Fragment fragment = getSupportFragmentManager().findFragmentById(getLayoutContainerForFragment()); Fragment fragment = getSupportFragmentManager().findFragmentById(getLayoutContainerForFragment());
if (fragment != null && fragment instanceof RoomFragment) { if (fragment != null && fragment instanceof RoomFragment) {
RoomFragment roomFragment = (RoomFragment) fragment; RoomFragment roomFragment = (RoomFragment) fragment;
roomFragment.loadMessages(); roomFragment.loadMissedMessages();
} }
} }
......
...@@ -212,7 +212,7 @@ public class MainPresenter extends BasePresenter<MainContract.View> ...@@ -212,7 +212,7 @@ public class MainPresenter extends BasePresenter<MainContract.View>
return; return;
} }
view.showConnectionOk(); // view.showConnectionOk();
}, },
Logger::report Logger::report
); );
...@@ -227,12 +227,15 @@ public class MainPresenter extends BasePresenter<MainContract.View> ...@@ -227,12 +227,15 @@ public class MainPresenter extends BasePresenter<MainContract.View>
.subscribe( .subscribe(
connectivity -> { connectivity -> {
if (connectivity.state == ServerConnectivity.STATE_CONNECTED) { if (connectivity.state == ServerConnectivity.STATE_CONNECTED) {
view.showConnectionOk(); //TODO: notify almost connected or something like that.
view.refreshRoom(); // view.showConnectionOk();
} else if (connectivity.state == ServerConnectivity.STATE_DISCONNECTED) { } else if (connectivity.state == ServerConnectivity.STATE_DISCONNECTED) {
if (connectivity.code == DDPClient.REASON_NETWORK_ERROR) { if (connectivity.code == DDPClient.REASON_NETWORK_ERROR) {
view.showConnectionError(); view.showConnectionError();
} }
} else if (connectivity.state == ServerConnectivity.STATE_SESSION_ESTABLISHED) {
view.refreshRoom();
view.showConnectionOk();
} else { } else {
view.showConnecting(); view.showConnecting();
} }
......
...@@ -75,5 +75,7 @@ public interface RoomContract { ...@@ -75,5 +75,7 @@ public interface RoomContract {
void replyMessage(@NonNull Message message, boolean justQuote); void replyMessage(@NonNull Message message, boolean justQuote);
void acceptMessageDeleteFailure(Message message); void acceptMessageDeleteFailure(Message message);
void loadMissedMessages();
} }
} }
...@@ -716,7 +716,7 @@ public class RoomFragment extends AbstractChatRoomFragment implements ...@@ -716,7 +716,7 @@ public class RoomFragment extends AbstractChatRoomFragment implements
} }
} }
public void loadMessages() { public void loadMissedMessages() {
presenter.loadMessages(); presenter.loadMissedMessages();
} }
} }
\ No newline at end of file
...@@ -6,11 +6,17 @@ import android.support.v4.util.Pair; ...@@ -6,11 +6,17 @@ import android.support.v4.util.Pair;
import com.hadisatrio.optional.Optional; import com.hadisatrio.optional.Optional;
import org.json.JSONException;
import org.json.JSONObject;
import chat.rocket.android.BackgroundLooper; import chat.rocket.android.BackgroundLooper;
import chat.rocket.android.RocketChatApplication;
import chat.rocket.android.RocketChatCache;
import chat.rocket.android.api.MethodCallHelper; import chat.rocket.android.api.MethodCallHelper;
import chat.rocket.android.helper.AbsoluteUrlHelper; import chat.rocket.android.helper.AbsoluteUrlHelper;
import chat.rocket.android.helper.LogIfError; import chat.rocket.android.helper.LogIfError;
import chat.rocket.android.helper.Logger; import chat.rocket.android.helper.Logger;
import chat.rocket.android.log.RCLog;
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.SyncState; import chat.rocket.core.SyncState;
...@@ -38,7 +44,7 @@ public class RoomPresenter extends BasePresenter<RoomContract.View> ...@@ -38,7 +44,7 @@ public class RoomPresenter extends BasePresenter<RoomContract.View>
private final ConnectivityManagerApi connectivityManagerApi; private final ConnectivityManagerApi connectivityManagerApi;
private Room currentRoom; private Room currentRoom;
public RoomPresenter(String roomId, /* package */RoomPresenter(String roomId,
UserRepository userRepository, UserRepository userRepository,
MessageInteractor messageInteractor, MessageInteractor messageInteractor,
RoomRepository roomRepository, RoomRepository roomRepository,
...@@ -161,6 +167,23 @@ public class RoomPresenter extends BasePresenter<RoomContract.View> ...@@ -161,6 +167,23 @@ public class RoomPresenter extends BasePresenter<RoomContract.View>
addSubscription(subscription); addSubscription(subscription);
} }
@Override
public void loadMissedMessages() {
RocketChatApplication appContext = RocketChatApplication.getInstance();
JSONObject openedRooms = new RocketChatCache(appContext).getOpenedRooms();
if (openedRooms.has(roomId)) {
try {
JSONObject room = openedRooms.getJSONObject(roomId);
String rid = room.optString("rid");
long ls = room.optLong("ls");
methodCallHelper.loadMissedMessages(rid, ls)
.continueWith(new LogIfError());
} catch (JSONException e) {
RCLog.e(e);
}
}
}
private String buildReplyOrQuoteMarkdown(String baseUrl, Message message, boolean justQuote) { private String buildReplyOrQuoteMarkdown(String baseUrl, Message message, boolean justQuote) {
if (currentRoom == null || message.getUser() == null) { if (currentRoom == null || message.getUser() == null) {
return ""; return "";
...@@ -345,6 +368,11 @@ public class RoomPresenter extends BasePresenter<RoomContract.View> ...@@ -345,6 +368,11 @@ public class RoomPresenter extends BasePresenter<RoomContract.View>
}) })
.filter(Optional::isPresent) .filter(Optional::isPresent)
.map(Optional::get) .map(Optional::get)
.map(room -> {
new RocketChatCache(RocketChatApplication.getInstance())
.addOpenedRoom(room.getRoomId(), room.getLastSeen());
return room;
})
.flatMap(messageInteractor::getAllFrom) .flatMap(messageInteractor::getAllFrom)
.subscribeOn(AndroidSchedulers.from(BackgroundLooper.get())) .subscribeOn(AndroidSchedulers.from(BackgroundLooper.get()))
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
......
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