diff --git a/app/containers/ConnectionBadge.js b/app/containers/ConnectionBadge.js
index c357e980a..e2f9818a9 100644
--- a/app/containers/ConnectionBadge.js
+++ b/app/containers/ConnectionBadge.js
@@ -1,6 +1,6 @@
import React, { Component } from 'react';
import {
- Text, StyleSheet, ActivityIndicator, Animated, TouchableWithoutFeedback, Easing
+ Text, StyleSheet, ActivityIndicator, Animated, Easing
} from 'react-native';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
@@ -50,20 +50,30 @@ class ConnectionBadge extends Component {
static propTypes = {
connecting: PropTypes.bool,
connected: PropTypes.bool,
- disconnected: PropTypes.bool // eslint-disable-line
+ disconnected: PropTypes.bool
}
constructor(props) {
super(props);
this.animatedValue = new Animated.Value(0);
+ if (props.connecting) {
+ this.show();
+ }
}
componentDidUpdate() {
- this.show();
+ const { connected, disconnected } = this.props;
+ this.show(connected || disconnected);
+ }
+
+ componentWillUnmount() {
+ if (this.timeout) {
+ clearTimeout(this.timeout);
+ }
}
// eslint-disable-next-line react/sort-comp
- animate = debounce((toValue) => {
+ animate = debounce((toValue, autoHide) => {
Animated.timing(
this.animatedValue,
{
@@ -73,7 +83,7 @@ class ConnectionBadge extends Component {
useNativeDriver: true
},
).start(() => {
- if (toValue === 1) {
+ if (toValue === 1 && autoHide) {
if (this.timeout) {
clearTimeout(this.timeout);
}
@@ -84,8 +94,8 @@ class ConnectionBadge extends Component {
});
}, 300);
- show = () => {
- this.animate(1);
+ show = (autoHide) => {
+ this.animate(1, autoHide);
}
hide = () => {
@@ -102,29 +112,23 @@ class ConnectionBadge extends Component {
if (connecting) {
return (
-
-
-
- {I18n.t('Connecting')}
-
-
+
+
+ {I18n.t('Connecting')}
+
);
} else if (connected) {
return (
-
-
- {I18n.t('Connected')}
-
-
+
+ {I18n.t('Connected')}
+
);
}
return (
-
-
- {I18n.t('Offline')}
-
-
+
+ {I18n.t('Offline')}
+
);
}
}
diff --git a/app/lib/methods/subscriptions/room.js b/app/lib/methods/subscriptions/room.js
index 43df59c36..fa3508361 100644
--- a/app/lib/methods/subscriptions/room.js
+++ b/app/lib/methods/subscriptions/room.js
@@ -1,18 +1,12 @@
import log from '../../../utils/log';
const unsubscribe = subscriptions => subscriptions.forEach(sub => sub.unsubscribe().catch(() => console.log('unsubscribeRoom')));
+const removeListener = listener => listener.stop();
let promises;
let timer = null;
-
-const stop = () => {
- if (promises) {
- promises.then(unsubscribe);
- promises = false;
- }
-
- clearTimeout(timer);
-};
+let connectedListener;
+let disconnectedListener;
export default function subscribeRoom({ rid }) {
if (promises) {
@@ -23,31 +17,48 @@ export default function subscribeRoom({ rid }) {
if (timer) {
return;
}
- timer = setTimeout(async() => {
+ timer = setTimeout(() => {
try {
clearTimeout(timer);
timer = false;
- if (this.sdk.userId) {
- await this.loadMissedMessages({ rid });
- loop();
- }
+ this.loadMissedMessages({ rid });
+ loop();
} catch (e) {
loop();
}
}, 5000);
};
- this.sdk.onStreamData('connected', () => {
- if (this.sdk.userId) {
- this.loadMissedMessages({ rid });
- }
+ const handleConnected = () => {
+ this.loadMissedMessages({ rid });
clearTimeout(timer);
timer = false;
- });
+ };
- this.sdk.onStreamData('close', () => {
- loop();
- });
+ const handleDisconnected = () => {
+ if (this.sdk.userId) {
+ loop();
+ }
+ };
+
+ const stop = () => {
+ if (promises) {
+ promises.then(unsubscribe);
+ promises = false;
+ }
+ if (connectedListener) {
+ connectedListener.then(removeListener);
+ connectedListener = false;
+ }
+ if (disconnectedListener) {
+ disconnectedListener.then(removeListener);
+ disconnectedListener = false;
+ }
+ clearTimeout(timer);
+ };
+
+ connectedListener = this.sdk.onStreamData('connected', handleConnected);
+ disconnectedListener = this.sdk.onStreamData('close', handleDisconnected);
try {
promises = this.sdk.subscribeRoom(rid);
diff --git a/app/lib/rocketchat.js b/app/lib/rocketchat.js
index da4c82746..9d4f673b1 100644
--- a/app/lib/rocketchat.js
+++ b/app/lib/rocketchat.js
@@ -141,7 +141,7 @@ const RocketChat = {
this.sdk.subscribe('roles');
this.getPermissions();
this.getCustomEmoji();
- this.registerPushToken().then(result => console.log(result)).catch(e => console.log(e));
+ this.registerPushToken().catch(e => console.log(e));
},
connect({ server, user }) {
database.setActiveDB(server);
@@ -151,6 +151,11 @@ const RocketChat = {
clearTimeout(this.connectTimeout);
}
+ if (this.sdk) {
+ this.sdk.disconnect();
+ this.sdk = null;
+ }
+
// Use useSsl: false only if server url starts with http://
const useSsl = !/http:\/\//.test(server);
diff --git a/app/reducers/connect.js b/app/reducers/connect.js
index 324cb710a..a8ef2bea1 100644
--- a/app/reducers/connect.js
+++ b/app/reducers/connect.js
@@ -10,7 +10,8 @@ export default function connect(state = initialState, action) {
case METEOR.REQUEST:
return {
...state,
- connecting: true
+ connecting: true,
+ connected: false
};
case METEOR.SUCCESS:
return {
diff --git a/app/reducers/rooms.js b/app/reducers/rooms.js
index f9931babc..5903c0891 100644
--- a/app/reducers/rooms.js
+++ b/app/reducers/rooms.js
@@ -1,7 +1,7 @@
import * as types from '../actions/actionsTypes';
const initialState = {
- isFetching: true,
+ isFetching: false,
failure: false,
errorMessage: {},
searchText: '',
diff --git a/package.json b/package.json
index 24ea281ef..2bb76fc8a 100644
--- a/package.json
+++ b/package.json
@@ -21,7 +21,7 @@
},
"dependencies": {
"@remobile/react-native-toast": "^1.0.7",
- "@rocket.chat/sdk": "1.0.0-alpha.24",
+ "@rocket.chat/sdk": "1.0.0-alpha.25",
"deep-equal": "^1.0.1",
"ejson": "^2.1.2",
"js-base64": "^2.5.1",
diff --git a/yarn.lock b/yarn.lock
index b0040c680..49be735b9 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -988,10 +988,10 @@
resolved "https://registry.yarnpkg.com/@remobile/react-native-toast/-/react-native-toast-1.0.7.tgz#b2e3684cdb13e1c9d9b4ed08e667157d4ad0fab2"
integrity sha512-iOD1PRnTSVr9sDWQdesIpfRrwJhHfeEQe5BpalQxC5OhM9thpiE6cu2NlW1KBWl0RJG4ZiJaF1xLlCo9YxU6dA==
-"@rocket.chat/sdk@1.0.0-alpha.24":
- version "1.0.0-alpha.24"
- resolved "https://registry.yarnpkg.com/@rocket.chat/sdk/-/sdk-1.0.0-alpha.24.tgz#8a6d3ff869c050b34f62bb7ef972d14c1a4d4f79"
- integrity sha512-5EXVWkzQLGyKB5EdLZdpH86/gQ2rYY12OZ1ClRpAqYZs8svBKOn9pGBEWBW9i0C6ZowedFm8SdQjX4VHw+60hg==
+"@rocket.chat/sdk@1.0.0-alpha.25":
+ version "1.0.0-alpha.25"
+ resolved "https://registry.yarnpkg.com/@rocket.chat/sdk/-/sdk-1.0.0-alpha.25.tgz#7fd6fce64e29c2ab9eb77000f1a65bdd3b0379bb"
+ integrity sha512-/IfiLhTZooJQX1kimPZiY0FNSDw3kZcL/yquxD14kZbKRKm0ZSg5BJeWFpkinQq5Y9XjySX+k3mjmXX3Es97Cg==
dependencies:
"@types/event-emitter" "^0.3.2"
"@types/eventemitter3" "^2.0.2"