parent
f229ab730f
commit
b9ca7abb52
|
@ -489,6 +489,7 @@ exports[`render unread +999 1`] = `
|
|||
>
|
||||
NA
|
||||
</Text>
|
||||
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
@ -635,6 +636,7 @@ exports[`render unread 1`] = `
|
|||
>
|
||||
NA
|
||||
</Text>
|
||||
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
@ -781,6 +783,7 @@ exports[`renders correctly 1`] = `
|
|||
>
|
||||
NA
|
||||
</Text>
|
||||
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
|
|
@ -38,6 +38,7 @@ exports[`Storyshots Avatar avatar 1`] = `
|
|||
>
|
||||
TE
|
||||
</Text>
|
||||
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
@ -74,6 +75,7 @@ exports[`Storyshots Avatar avatar 1`] = `
|
|||
>
|
||||
AA
|
||||
</Text>
|
||||
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
@ -110,6 +112,7 @@ exports[`Storyshots Avatar avatar 1`] = `
|
|||
>
|
||||
BB
|
||||
</Text>
|
||||
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
@ -146,6 +149,7 @@ exports[`Storyshots Avatar avatar 1`] = `
|
|||
>
|
||||
TE
|
||||
</Text>
|
||||
|
||||
</View>
|
||||
</View>
|
||||
</RCTScrollView>
|
||||
|
@ -229,6 +233,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
|
|||
>
|
||||
RC
|
||||
</Text>
|
||||
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
@ -350,6 +355,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
|
|||
>
|
||||
RC
|
||||
</Text>
|
||||
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
@ -473,6 +479,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
|
|||
>
|
||||
RC
|
||||
</Text>
|
||||
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
@ -614,6 +621,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
|
|||
>
|
||||
LC
|
||||
</Text>
|
||||
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
@ -757,6 +765,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
|
|||
>
|
||||
LC
|
||||
</Text>
|
||||
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
@ -898,6 +907,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
|
|||
>
|
||||
LC
|
||||
</Text>
|
||||
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
@ -1039,6 +1049,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
|
|||
>
|
||||
LC
|
||||
</Text>
|
||||
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
@ -1180,6 +1191,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
|
|||
>
|
||||
LC
|
||||
</Text>
|
||||
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
@ -1321,6 +1333,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
|
|||
>
|
||||
W
|
||||
</Text>
|
||||
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
@ -1442,6 +1455,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
|
|||
>
|
||||
WW
|
||||
</Text>
|
||||
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
@ -1563,6 +1577,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
|
|||
>
|
||||
|
||||
</Text>
|
||||
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 2.9 KiB |
|
@ -19,6 +19,12 @@ export function setCurrentServer(server) {
|
|||
};
|
||||
}
|
||||
|
||||
export function addSettings(settings) {
|
||||
return {
|
||||
type: types.ADD_SETTINGS,
|
||||
payload: settings
|
||||
};
|
||||
}
|
||||
export function setAllSettings(settings) {
|
||||
return {
|
||||
type: types.SET_ALL_SETTINGS,
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
export const SET_CURRENT_SERVER = 'SET_CURRENT_SERVER';
|
||||
export const SET_ALL_SETTINGS = 'SET_ALL_SETTINGS';
|
||||
export const SET_ALL_PERMISSIONS = 'SET_ALL_PERMISSIONS';
|
||||
export const ADD_SETTINGS = 'ADD_SETTINGS';
|
||||
|
|
|
@ -21,7 +21,7 @@ const styles = StyleSheet.create({
|
|||
});
|
||||
|
||||
@connect(state => ({
|
||||
baseUrl: state.settings.Site_Url
|
||||
baseUrl: state.settings.Site_Url || state.server ? state.server.server : ''
|
||||
}))
|
||||
|
||||
class Avatar extends React.PureComponent {
|
||||
|
|
|
@ -9,7 +9,7 @@ import RocketChat from '../../lib/rocketchat';
|
|||
import { editRequest, editCancel, clearInput } from '../../actions/messages';
|
||||
import styles from './style';
|
||||
import MyIcon from '../icons';
|
||||
import realm from '../../lib/realm';
|
||||
import database from '../../lib/realm';
|
||||
import Avatar from '../Avatar';
|
||||
import AnimatedContainer from './AnimatedContainer';
|
||||
|
||||
|
@ -23,7 +23,7 @@ const onlyUnique = function onlyUnique(value, index, self) {
|
|||
room: state.room,
|
||||
message: state.messages.message,
|
||||
editing: state.messages.editing,
|
||||
baseUrl: state.settings.Site_Url
|
||||
baseUrl: state.settings.Site_Url || state.server ? state.server.server : ''
|
||||
}), dispatch => ({
|
||||
editCancel: () => dispatch(editCancel()),
|
||||
editRequest: message => dispatch(editRequest(message)),
|
||||
|
@ -200,7 +200,7 @@ export default class MessageBox extends React.Component {
|
|||
}
|
||||
|
||||
async _getUsers(keyword) {
|
||||
this.users = realm.objects('users');
|
||||
this.users = database.objects('users');
|
||||
if (keyword) {
|
||||
this.users = this.users.filtered('username CONTAINS[c] $0', keyword);
|
||||
}
|
||||
|
@ -222,28 +222,24 @@ export default class MessageBox extends React.Component {
|
|||
RocketChat.spotlight(keyword, usernames, { users: true }),
|
||||
new Promise((resolve, reject) => (this.oldPromise = reject))
|
||||
]);
|
||||
realm.write(() => {
|
||||
database.write(() => {
|
||||
results.users.forEach((user) => {
|
||||
user._server = {
|
||||
id: this.props.baseUrl,
|
||||
current: true
|
||||
};
|
||||
realm.create('users', user, true);
|
||||
database.create('users', user, true);
|
||||
});
|
||||
});
|
||||
} catch (e) {
|
||||
console.log('spotlight canceled');
|
||||
} finally {
|
||||
delete this.oldPromise;
|
||||
this.users = realm.objects('users').filtered('username CONTAINS[c] $0', keyword);
|
||||
this.users = database.objects('users').filtered('username CONTAINS[c] $0', keyword);
|
||||
this.setState({ mentions: this.users.slice() });
|
||||
}
|
||||
}
|
||||
|
||||
async _getRooms(keyword = '') {
|
||||
this.roomsCache = this.roomsCache || [];
|
||||
this.rooms = realm.objects('subscriptions')
|
||||
.filtered('_server.id = $0 AND t != $1', this.props.baseUrl, 'd');
|
||||
this.rooms = database.objects('subscriptions')
|
||||
.filtered('t != $0', 'd');
|
||||
if (keyword) {
|
||||
this.rooms = this.rooms.filtered('name CONTAINS[c] $0', keyword);
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ import ActionSheet from 'react-native-actionsheet';
|
|||
|
||||
import { errorActionsHide } from '../actions/messages';
|
||||
import RocketChat from '../lib/rocketchat';
|
||||
import realm from '../lib/realm';
|
||||
import database from '../lib/realm';
|
||||
|
||||
@connect(
|
||||
state => ({
|
||||
|
@ -41,9 +41,9 @@ export default class MessageActions extends React.Component {
|
|||
handleResend = () => RocketChat.resendMessage(this.props.actionMessage._id);
|
||||
|
||||
handleDelete = () => {
|
||||
realm.write(() => {
|
||||
const msg = realm.objects('messages').filtered('_id = $0', this.props.actionMessage._id);
|
||||
realm.delete(msg);
|
||||
database.write(() => {
|
||||
const msg = database.objects('messages').filtered('_id = $0', this.props.actionMessage._id);
|
||||
database.delete(msg);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -31,13 +31,13 @@ export default class Routes extends React.Component {
|
|||
}
|
||||
|
||||
componentDidMount() {
|
||||
if (!this.props.app.starting) {
|
||||
if (this.props.app.ready) {
|
||||
SplashScreen.hide();
|
||||
}
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps) {
|
||||
if (!nextProps.app.starting && this.props.app.starting !== nextProps.app.starting) {
|
||||
if (nextProps.app.ready && this.props.app.ready !== nextProps.app.ready) {
|
||||
SplashScreen.hide();
|
||||
}
|
||||
}
|
||||
|
@ -49,6 +49,10 @@ export default class Routes extends React.Component {
|
|||
render() {
|
||||
const { login } = this.props;
|
||||
|
||||
if (this.props.app.starting) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!login.token || login.isRegistering) {
|
||||
return (<PublicRoutes ref={nav => this.navigator = nav} />);
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ import { ScrollView, Text, View, StyleSheet, FlatList, TouchableHighlight } from
|
|||
import { DrawerItems } from 'react-navigation';
|
||||
import { connect } from 'react-redux';
|
||||
|
||||
import realm from '../lib/realm';
|
||||
import database from '../lib/realm';
|
||||
import { setServer, gotoAddServer } from '../actions/server';
|
||||
import { logout } from '../actions/login';
|
||||
|
||||
|
@ -54,12 +54,12 @@ export default class Sidebar extends Component {
|
|||
}
|
||||
|
||||
componentWillMount() {
|
||||
realm.addListener('change', this.updateState);
|
||||
realm.databases.serversDB.addListener('change', this.updateState);
|
||||
this.setState(this.getState());
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
realm.removeListener('change', this.updateState);
|
||||
realm.databases.serversDB.removeListener('change', this.updateState);
|
||||
}
|
||||
|
||||
onItemPress = ({ route, focused }) => {
|
||||
|
@ -75,7 +75,7 @@ export default class Sidebar extends Component {
|
|||
}
|
||||
|
||||
getState = () => ({
|
||||
servers: realm.objects('servers')
|
||||
servers: realm.databases.serversDB.objects('servers')
|
||||
})
|
||||
|
||||
updateState = () => {
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
import Realm from 'realm';
|
||||
|
||||
// import { AsyncStorage } from 'react-native';
|
||||
// Realm.clearTestState();
|
||||
// AsyncStorage.clear();
|
||||
|
||||
const serversSchema = {
|
||||
name: 'servers',
|
||||
|
@ -15,7 +18,6 @@ const settingsSchema = {
|
|||
primaryKey: '_id',
|
||||
properties: {
|
||||
_id: 'string',
|
||||
_server: 'servers',
|
||||
valueAsString: { type: 'string', optional: true },
|
||||
valueAsBoolean: { type: 'bool', optional: true },
|
||||
valueAsNumber: { type: 'int', optional: true },
|
||||
|
@ -36,7 +38,6 @@ const permissionsSchema = {
|
|||
primaryKey: '_id',
|
||||
properties: {
|
||||
_id: 'string',
|
||||
_server: 'servers',
|
||||
roles: { type: 'list', objectType: 'permissionsRoles' },
|
||||
_updatedAt: { type: 'date', optional: true }
|
||||
}
|
||||
|
@ -47,7 +48,6 @@ const roomsSchema = {
|
|||
primaryKey: '_id',
|
||||
properties: {
|
||||
_id: 'string',
|
||||
_server: 'servers',
|
||||
t: 'string',
|
||||
_updatedAt: { type: 'date', optional: true }
|
||||
}
|
||||
|
@ -65,7 +65,6 @@ const subscriptionSchema = {
|
|||
primaryKey: '_id',
|
||||
properties: {
|
||||
_id: 'string',
|
||||
_server: 'servers',
|
||||
f: { type: 'bool', optional: true },
|
||||
t: 'string',
|
||||
ts: { type: 'date', optional: true },
|
||||
|
@ -89,7 +88,6 @@ const usersSchema = {
|
|||
primaryKey: '_id',
|
||||
properties: {
|
||||
_id: 'string',
|
||||
_server: 'servers',
|
||||
username: 'string',
|
||||
name: { type: 'string', optional: true }
|
||||
}
|
||||
|
@ -157,7 +155,6 @@ const messagesSchema = {
|
|||
primaryKey: '_id',
|
||||
properties: {
|
||||
_id: 'string',
|
||||
_server: 'servers',
|
||||
msg: { type: 'string', optional: true },
|
||||
t: { type: 'string', optional: true },
|
||||
rid: 'string',
|
||||
|
@ -178,13 +175,8 @@ const messagesSchema = {
|
|||
editedBy: 'messagesEditedBy'
|
||||
}
|
||||
};
|
||||
//
|
||||
// Realm.clearTestState();
|
||||
// AsyncStorage.clear();
|
||||
const realm = new Realm({
|
||||
schema: [
|
||||
const schema = [
|
||||
settingsSchema,
|
||||
serversSchema,
|
||||
subscriptionSchema,
|
||||
subscriptionRolesSchema,
|
||||
messagesSchema,
|
||||
|
@ -196,10 +188,43 @@ const realm = new Realm({
|
|||
permissionsSchema,
|
||||
permissionsRolesSchema,
|
||||
url
|
||||
];
|
||||
class DB {
|
||||
databases = {
|
||||
serversDB: new Realm({
|
||||
path: 'default.realm',
|
||||
schema: [
|
||||
serversSchema
|
||||
],
|
||||
deleteRealmIfMigrationNeeded: true
|
||||
})
|
||||
};
|
||||
deleteAll(...args) {
|
||||
return this.database.write(() => this.database.deleteAll(...args));
|
||||
}
|
||||
write(...args) {
|
||||
return this.database.write(...args);
|
||||
}
|
||||
create(...args) {
|
||||
return this.database.create(...args);
|
||||
}
|
||||
objects(...args) {
|
||||
return this.database.objects(...args);
|
||||
}
|
||||
get database() {
|
||||
return this.databases.activeDB;
|
||||
}
|
||||
|
||||
setActiveDB(database) {
|
||||
const path = database.replace(/(^\w+:|^)\/\//, '');
|
||||
return this.databases.activeDB = new Realm({
|
||||
path: `${ path }.realm`,
|
||||
schema,
|
||||
deleteRealmIfMigrationNeeded: true
|
||||
});
|
||||
export default realm;
|
||||
}
|
||||
}
|
||||
export default new DB();
|
||||
|
||||
// realm.write(() => {
|
||||
// realm.create('servers', { id: 'https://open.rocket.chat', current: false }, true);
|
||||
|
|
|
@ -6,7 +6,7 @@ import RNFetchBlob from 'react-native-fetch-blob';
|
|||
import reduxStore from './createStore';
|
||||
import settingsType from '../constants/settings';
|
||||
import messagesStatus from '../constants/messagesStatus';
|
||||
import realm from './realm';
|
||||
import database from './realm';
|
||||
import * as actions from '../actions';
|
||||
import { someoneTyping } from '../actions/room';
|
||||
import { setUser } from '../actions/login';
|
||||
|
@ -77,7 +77,9 @@ const RocketChat = {
|
|||
this.ddp.on('disconnected', () => {
|
||||
reduxStore.dispatch(disconnect());
|
||||
});
|
||||
this.ddp.on('open', async() => resolve(reduxStore.dispatch(connectSuccess())));
|
||||
this.ddp.on('open', async() => {
|
||||
resolve(reduxStore.dispatch(connectSuccess()));
|
||||
});
|
||||
this.ddp.on('connected', () => {
|
||||
RocketChat.getSettings();
|
||||
RocketChat.getPermissions();
|
||||
|
@ -90,16 +92,15 @@ const RocketChat = {
|
|||
|
||||
this.ddp.on('connected', () => this.ddp.subscribe('activeUsers', null, false));
|
||||
|
||||
|
||||
this.ddp.on('users', (ddpMessage) => {
|
||||
if (ddpMessage.collection === 'users') {
|
||||
return RocketChat._setUser(ddpMessage);
|
||||
}
|
||||
});
|
||||
|
||||
this.ddp.on('stream-room-messages', ddpMessage => realm.write(() => {
|
||||
this.ddp.on('stream-room-messages', ddpMessage => database.write(() => {
|
||||
const message = this._buildMessage(ddpMessage.fields.args[0]);
|
||||
realm.create('messages', message, true);
|
||||
database.create('messages', message, true);
|
||||
}));
|
||||
|
||||
this.ddp.on('stream-notify-room', (ddpMessage) => {
|
||||
|
@ -117,13 +118,13 @@ const RocketChat = {
|
|||
if (data.roles) {
|
||||
data.roles = data.roles.map(role => ({ value: role }));
|
||||
}
|
||||
realm.write(() => {
|
||||
realm.create('subscriptions', data, true);
|
||||
database.write(() => {
|
||||
database.create('subscriptions', data, true);
|
||||
});
|
||||
}
|
||||
if (/rooms/.test(ev) && type === 'updated') {
|
||||
const sub = realm.objects('subscriptions').filtered('rid == $0', data._id)[0];
|
||||
realm.write(() => {
|
||||
const sub = database.objects('subscriptions').filtered('rid == $0', data._id)[0];
|
||||
database.write(() => {
|
||||
sub.roomUpdatedAt = data._updatedAt;
|
||||
});
|
||||
}
|
||||
|
@ -208,20 +209,11 @@ const RocketChat = {
|
|||
},
|
||||
|
||||
loadSubscriptions(cb) {
|
||||
const { server } = reduxStore.getState().server;
|
||||
this.ddp.call('subscriptions/get').then((data) => {
|
||||
if (data.length) {
|
||||
realm.write(() => {
|
||||
database.write(() => {
|
||||
data.forEach((subscription) => {
|
||||
// const subscription = {
|
||||
// _id: item._id
|
||||
// };
|
||||
// if (typeof item.value === 'string') {
|
||||
// subscription.value = item.value;
|
||||
// }
|
||||
subscription._server = { id: server };
|
||||
// write('subscriptions', subscription);
|
||||
realm.create('subscriptions', subscription, true);
|
||||
database.create('subscriptions', subscription, true);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -262,9 +254,7 @@ const RocketChat = {
|
|||
});
|
||||
},
|
||||
_buildMessage(message) {
|
||||
const { server } = reduxStore.getState().server;
|
||||
message.status = messagesStatus.SENT;
|
||||
message._server = { id: server };
|
||||
message.attachments = message.attachments || [];
|
||||
if (message.urls) {
|
||||
message.urls = RocketChat._parseUrls(message.urls);
|
||||
|
@ -278,9 +268,9 @@ const RocketChat = {
|
|||
return this.ddp.call('loadHistory', rid, end, 20).then((data) => {
|
||||
if (data && data.messages.length) {
|
||||
const messages = data.messages.map(message => this._buildMessage(message));
|
||||
realm.write(() => {
|
||||
database.write(() => {
|
||||
messages.forEach((message) => {
|
||||
realm.create('messages', message, true);
|
||||
database.create('messages', message, true);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -300,7 +290,6 @@ const RocketChat = {
|
|||
|
||||
getMessage(rid, msg = {}) {
|
||||
const _id = Random.id();
|
||||
// console.log('reduxStore.getState().login.id ', reduxStore.getState().login);
|
||||
const message = {
|
||||
_id,
|
||||
rid,
|
||||
|
@ -308,16 +297,14 @@ const RocketChat = {
|
|||
ts: new Date(),
|
||||
_updatedAt: new Date(),
|
||||
status: messagesStatus.TEMP,
|
||||
_server: { id: reduxStore.getState().server.server },
|
||||
u: {
|
||||
_id: reduxStore.getState().login.user.id || '1',
|
||||
username: reduxStore.getState().login.user.username
|
||||
}
|
||||
};
|
||||
|
||||
realm.write(() => {
|
||||
realm.create('messages', message, true);
|
||||
// write('messages', message, true);
|
||||
database.write(() => {
|
||||
database.create('messages', message, true);
|
||||
});
|
||||
return message;
|
||||
},
|
||||
|
@ -327,9 +314,9 @@ const RocketChat = {
|
|||
const timeoutCall = new Promise(resolve => setTimeout(resolve, SERVER_TIMEOUT, 'timeout'));
|
||||
const result = await Promise.race([sendMessageCall, timeoutCall]);
|
||||
if (result === 'timeout') {
|
||||
realm.write(() => {
|
||||
database.write(() => {
|
||||
message.status = messagesStatus.ERROR;
|
||||
realm.create('messages', message, true);
|
||||
database.create('messages', message, true);
|
||||
});
|
||||
}
|
||||
},
|
||||
|
@ -338,10 +325,10 @@ const RocketChat = {
|
|||
return RocketChat._sendMessageCall(tempMessage);
|
||||
},
|
||||
async resendMessage(messageId) {
|
||||
const message = await realm.objects('messages').filtered('_id = $0', messageId)[0];
|
||||
realm.write(() => {
|
||||
const message = await database.objects('messages').filtered('_id = $0', messageId)[0];
|
||||
database.write(() => {
|
||||
message.status = messagesStatus.TEMP;
|
||||
realm.create('messages', message, true);
|
||||
database.create('messages', message, true);
|
||||
});
|
||||
return RocketChat._sendMessageCall(message);
|
||||
},
|
||||
|
@ -413,17 +400,16 @@ const RocketChat = {
|
|||
} catch (e) {
|
||||
return e;
|
||||
} finally {
|
||||
realm.write(() => {
|
||||
const msg = realm.objects('messages').filtered('_id = $0', placeholder._id);
|
||||
realm.delete(msg);
|
||||
database.write(() => {
|
||||
const msg = database.objects('messages').filtered('_id = $0', placeholder._id);
|
||||
database.delete(msg);
|
||||
});
|
||||
}
|
||||
},
|
||||
async getRooms() {
|
||||
const { server, login } = reduxStore.getState();
|
||||
let lastMessage = realm
|
||||
const { login } = reduxStore.getState();
|
||||
let lastMessage = database
|
||||
.objects('subscriptions')
|
||||
.filtered('_server.id = $0', server.server)
|
||||
.sorted('roomUpdatedAt', true)[0];
|
||||
lastMessage = lastMessage && new Date(lastMessage.roomUpdatedAt);
|
||||
let [subscriptions, rooms] = await Promise.all([call('subscriptions/get', lastMessage), call('rooms/get', lastMessage)]);
|
||||
|
@ -441,12 +427,11 @@ const RocketChat = {
|
|||
if (subscription.roles) {
|
||||
subscription.roles = subscription.roles.map(role => ({ value: role }));
|
||||
}
|
||||
subscription._server = { id: server.server };
|
||||
return subscription;
|
||||
});
|
||||
realm.write(() => {
|
||||
database.write(() => {
|
||||
data.forEach(subscription =>
|
||||
realm.create('subscriptions', subscription, true));
|
||||
database.create('subscriptions', subscription, true));
|
||||
});
|
||||
this.ddp.subscribe('stream-notify-user', `${ login.user.id }/subscriptions-changed`, false);
|
||||
this.ddp.subscribe('stream-notify-user', `${ login.user.id }/rooms-changed`, false);
|
||||
|
@ -481,20 +466,20 @@ const RocketChat = {
|
|||
logout({ server }) {
|
||||
if (this.ddp) {
|
||||
this.ddp.logout();
|
||||
// this.disconnect();
|
||||
}
|
||||
database.deleteAll();
|
||||
AsyncStorage.removeItem(TOKEN_KEY);
|
||||
AsyncStorage.removeItem(`${ TOKEN_KEY }-${ server }`);
|
||||
},
|
||||
async getSettings() {
|
||||
const temp = realm.objects('settings').sorted('_updatedAt', true)[0];
|
||||
const temp = database.objects('settings').sorted('_updatedAt', true)[0];
|
||||
const result = await (!temp ? call('public-settings/get') : call('public-settings/get', new Date(temp._updatedAt)));
|
||||
const settings = temp ? result.update : result;
|
||||
const filteredSettings = RocketChat._prepareSettings(RocketChat._filterSettings(settings));
|
||||
realm.write(() => {
|
||||
filteredSettings.forEach(setting => realm.create('settings', setting, true));
|
||||
database.write(() => {
|
||||
filteredSettings.forEach(setting => database.create('settings', setting, true));
|
||||
});
|
||||
reduxStore.dispatch(actions.setAllSettings(RocketChat.parseSettings(filteredSettings)));
|
||||
reduxStore.dispatch(actions.addSettings(RocketChat.parseSettings(filteredSettings)));
|
||||
},
|
||||
parseSettings: settings => settings.reduce((ret, item) => {
|
||||
ret[item._id] = item[settingsType[item.type]] || item.valueAsString || item.valueAsNumber ||
|
||||
|
@ -509,12 +494,12 @@ const RocketChat = {
|
|||
},
|
||||
_filterSettings: settings => settings.filter(setting => settingsType[setting.type] && setting.value),
|
||||
async getPermissions() {
|
||||
const temp = realm.objects('permissions').sorted('_updatedAt', true)[0];
|
||||
const temp = database.objects('permissions').sorted('_updatedAt', true)[0];
|
||||
const result = await (!temp ? call('permissions/get') : call('permissions/get', new Date(temp._updatedAt)));
|
||||
let permissions = temp ? result.update : result;
|
||||
permissions = RocketChat._preparePermissions(permissions);
|
||||
realm.write(() => {
|
||||
permissions.forEach(permission => realm.create('permissions', permission, true));
|
||||
database.write(() => {
|
||||
permissions.forEach(permission => database.create('permissions', permission, true));
|
||||
});
|
||||
reduxStore.dispatch(actions.setAllPermissions(RocketChat.parsePermissions(permissions)));
|
||||
},
|
||||
|
@ -545,7 +530,7 @@ const RocketChat = {
|
|||
return call('pinMessage', message);
|
||||
},
|
||||
getRoom(rid) {
|
||||
const result = realm.objects('subscriptions').filtered('rid = $0', rid);
|
||||
const result = database.objects('subscriptions').filtered('rid = $0', rid);
|
||||
if (result.length === 0) {
|
||||
return Promise.reject(new Error('Room not found'));
|
||||
}
|
||||
|
|
|
@ -13,5 +13,12 @@ export default function permissions(state = initialState.permissions, action) {
|
|||
};
|
||||
}
|
||||
|
||||
if (action.type === types.ADD_PERMISSIONS) {
|
||||
return {
|
||||
...state,
|
||||
...action.payload
|
||||
};
|
||||
}
|
||||
|
||||
return state;
|
||||
}
|
||||
|
|
|
@ -3,11 +3,15 @@ import initialState from './initialState';
|
|||
|
||||
export default function settings(state = initialState.settings, action) {
|
||||
if (action.type === types.SET_ALL_SETTINGS) {
|
||||
return {
|
||||
...action.payload
|
||||
};
|
||||
}
|
||||
if (action.type === types.ADD_SETTINGS) {
|
||||
return {
|
||||
...state,
|
||||
...action.payload
|
||||
};
|
||||
}
|
||||
|
||||
return state;
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ const initialState = {
|
|||
connected: false,
|
||||
errorMessage: '',
|
||||
failure: false,
|
||||
server: ''
|
||||
server: {}
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ import * as actions from '../actions';
|
|||
import { setServer } from '../actions/server';
|
||||
import { restoreToken } from '../actions/login';
|
||||
import { APP } from '../actions/actionsTypes';
|
||||
import realm from '../lib/realm';
|
||||
import database from '../lib/realm';
|
||||
import RocketChat from '../lib/rocketchat';
|
||||
|
||||
const restore = function* restore() {
|
||||
|
@ -17,9 +17,9 @@ const restore = function* restore() {
|
|||
const currentServer = yield call([AsyncStorage, 'getItem'], 'currentServer');
|
||||
if (currentServer) {
|
||||
yield put(setServer(currentServer));
|
||||
const settings = realm.objects('settings');
|
||||
const settings = database.objects('settings');
|
||||
yield put(actions.setAllSettings(RocketChat.parseSettings(settings.slice(0, settings.length))));
|
||||
const permissions = realm.objects('permissions');
|
||||
const permissions = database.objects('permissions');
|
||||
yield put(actions.setAllPermissions(RocketChat.parsePermissions(permissions.slice(0, permissions.length))));
|
||||
}
|
||||
yield put(actions.appReady({}));
|
||||
|
|
|
@ -2,10 +2,11 @@ import { put, call, takeLatest, race, take } from 'redux-saga/effects';
|
|||
import { delay } from 'redux-saga';
|
||||
import { AsyncStorage } from 'react-native';
|
||||
import { SERVER } from '../actions/actionsTypes';
|
||||
import * as actions from '../actions';
|
||||
import { connectRequest, disconnect, disconnect_by_user } from '../actions/connect';
|
||||
import { changedServer, serverSuccess, serverFailure, serverRequest, setServer } from '../actions/server';
|
||||
import RocketChat from '../lib/rocketchat';
|
||||
import realm from '../lib/realm';
|
||||
import database from '../lib/realm';
|
||||
import * as NavigationService from '../containers/routes/NavigationService';
|
||||
|
||||
const validate = function* validate(server) {
|
||||
|
@ -13,10 +14,15 @@ const validate = function* validate(server) {
|
|||
};
|
||||
|
||||
const selectServer = function* selectServer({ server }) {
|
||||
yield database.setActiveDB(server);
|
||||
yield put(disconnect_by_user());
|
||||
yield put(disconnect());
|
||||
yield put(changedServer(server));
|
||||
yield call([AsyncStorage, 'setItem'], 'currentServer', server);
|
||||
const settings = database.objects('settings');
|
||||
yield put(actions.setAllSettings(RocketChat.parseSettings(settings.slice(0, settings.length))));
|
||||
const permissions = database.objects('permissions');
|
||||
yield put(actions.setAllPermissions(RocketChat.parsePermissions(permissions.slice(0, permissions.length))));
|
||||
yield put(connectRequest(server));
|
||||
};
|
||||
|
||||
|
@ -39,8 +45,8 @@ const addServer = function* addServer({ server }) {
|
|||
success: take(SERVER.SUCCESS)
|
||||
});
|
||||
if (!error) {
|
||||
realm.write(() => {
|
||||
realm.create('servers', { id: server, current: false }, true);
|
||||
database.databases.serversDB.write(() => {
|
||||
database.databases.serversDB.create('servers', { id: server, current: false }, true);
|
||||
});
|
||||
yield put(setServer(server));
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ import Zeroconf from 'react-native-zeroconf';
|
|||
import { View, Text, SectionList, StyleSheet, SafeAreaView } from 'react-native';
|
||||
import { connect } from 'react-redux';
|
||||
import { setServer } from '../actions/server';
|
||||
import realm from '../lib/realm';
|
||||
import database from '../lib/realm';
|
||||
import Fade from '../animations/fade';
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
|
@ -83,8 +83,9 @@ export default class ListServerView extends React.Component {
|
|||
this.state = {
|
||||
sections: []
|
||||
};
|
||||
this.data = database.databases.serversDB.objects('servers');
|
||||
this.redirected = false;
|
||||
realm.addListener('change', this.updateState);
|
||||
this.data.addListener(this.updateState);
|
||||
}
|
||||
|
||||
componentWillMount() {
|
||||
|
@ -109,7 +110,7 @@ export default class ListServerView extends React.Component {
|
|||
|
||||
componentWillUnmount() {
|
||||
zeroconf.stop();
|
||||
realm.removeListener('change', this.updateState);
|
||||
this.data.removeAllListeners();
|
||||
zeroconf.removeListener('update', this.updateState);
|
||||
}
|
||||
|
||||
|
@ -120,7 +121,7 @@ export default class ListServerView extends React.Component {
|
|||
getState = () => {
|
||||
const sections = [{
|
||||
title: 'My servers',
|
||||
data: realm.objects('servers')
|
||||
data: this.data
|
||||
}];
|
||||
|
||||
this.state.nearBy = zeroconf.getServices();
|
||||
|
|
|
@ -1,15 +1,11 @@
|
|||
import React from 'react';
|
||||
|
||||
import Spinner from 'react-native-loading-spinner-overlay';
|
||||
|
||||
import PropTypes from 'prop-types';
|
||||
import { Keyboard, Text, TextInput, View, ScrollView, TouchableOpacity, SafeAreaView } from 'react-native';
|
||||
import { connect } from 'react-redux';
|
||||
import { bindActionCreators } from 'redux';
|
||||
// import * as actions from '../actions';
|
||||
import * as loginActions from '../actions/login';
|
||||
import KeyboardView from '../presentation/KeyboardView';
|
||||
// import { Keyboard } from 'react-native'
|
||||
|
||||
import styles from './Styles';
|
||||
|
||||
|
@ -81,7 +77,6 @@ class LoginView extends React.Component {
|
|||
return null;
|
||||
}
|
||||
|
||||
// {this.props.login.isFetching && <Text> LOGANDO</Text>}
|
||||
render() {
|
||||
return (
|
||||
<KeyboardView
|
||||
|
@ -157,7 +152,6 @@ class LoginView extends React.Component {
|
|||
}
|
||||
|
||||
function mapStateToProps(state) {
|
||||
// console.log(Object.keys(state));
|
||||
return {
|
||||
server: state.server.server,
|
||||
Accounts_EmailOrUsernamePlaceholder: state.settings.Accounts_EmailOrUsernamePlaceholder,
|
||||
|
|
|
@ -12,7 +12,7 @@ import styles from './styles';
|
|||
|
||||
@connect(state => ({
|
||||
user: state.login.user,
|
||||
baseUrl: state.settings.Site_Url,
|
||||
baseUrl: state.settings.Site_Url || state.server ? state.server.server : '',
|
||||
activeUsers: state.activeUsers
|
||||
}))
|
||||
export default class extends React.Component {
|
||||
|
|
|
@ -8,7 +8,7 @@ import { bindActionCreators } from 'redux';
|
|||
import * as actions from '../../actions';
|
||||
import { openRoom } from '../../actions/room';
|
||||
import { editCancel } from '../../actions/messages';
|
||||
import realm from '../../lib/realm';
|
||||
import database from '../../lib/realm';
|
||||
import RocketChat from '../../lib/rocketchat';
|
||||
import Message from '../../containers/message';
|
||||
import MessageActions from '../../containers/MessageActions';
|
||||
|
@ -25,8 +25,7 @@ const ds = new ListView.DataSource({ rowHasChanged: (r1, r2) => r1._id !== r2._i
|
|||
const typing = () => <Typing />;
|
||||
@connect(
|
||||
state => ({
|
||||
server: state.server.server,
|
||||
Site_Url: state.settings.Site_Url,
|
||||
Site_Url: state.settings.Site_Url || state.server ? state.server.server : '',
|
||||
Message_TimeFormat: state.settings.Message_TimeFormat,
|
||||
loading: state.messages.isFetching,
|
||||
user: state.login.user
|
||||
|
@ -44,7 +43,6 @@ export default class RoomView extends React.Component {
|
|||
user: PropTypes.object.isRequired,
|
||||
editCancel: PropTypes.func,
|
||||
rid: PropTypes.string,
|
||||
server: PropTypes.string,
|
||||
name: PropTypes.string,
|
||||
Site_Url: PropTypes.string,
|
||||
Message_TimeFormat: PropTypes.string,
|
||||
|
@ -64,11 +62,10 @@ export default class RoomView extends React.Component {
|
|||
this.props.navigation.state.params.name ||
|
||||
this.props.navigation.state.params.room.name;
|
||||
|
||||
this.data = realm
|
||||
.objects('messages')
|
||||
.filtered('_server.id = $0 AND rid = $1', this.props.server, this.rid)
|
||||
this.data = database.objects('messages')
|
||||
.filtered('rid = $0', this.rid)
|
||||
.sorted('ts', true);
|
||||
this.room = realm.objects('subscriptions').filtered('rid = $0', this.rid);
|
||||
this.room = database.objects('subscriptions').filtered('rid = $0', this.rid);
|
||||
this.state = {
|
||||
dataSource: ds.cloneWithRows([]),
|
||||
loaded: true,
|
||||
|
|
|
@ -16,7 +16,7 @@ import styles from './styles';
|
|||
@connect(state => ({
|
||||
user: state.login.user,
|
||||
connected: state.meteor.connected,
|
||||
baseUrl: state.settings.Site_Url
|
||||
baseUrl: state.settings.Site_Url || state.server ? state.server.server : ''
|
||||
}), dispatch => ({
|
||||
setSearch: searchText => dispatch(setSearch(searchText))
|
||||
}))
|
||||
|
|
|
@ -7,7 +7,7 @@ import { Platform, View, TextInput, SafeAreaView } from 'react-native';
|
|||
import { connect } from 'react-redux';
|
||||
import * as actions from '../../actions';
|
||||
import * as server from '../../actions/connect';
|
||||
import realm from '../../lib/realm';
|
||||
import database from '../../lib/realm';
|
||||
import RocketChat from '../../lib/rocketchat';
|
||||
import RoomItem from '../../presentation/RoomItem';
|
||||
import Banner from '../../containers/Banner';
|
||||
|
@ -47,7 +47,7 @@ export default class RoomsListView extends React.Component {
|
|||
dataSource: ds.cloneWithRows([]),
|
||||
searchText: ''
|
||||
};
|
||||
this.data = realm.objects('subscriptions').filtered('_server.id = $0', this.props.server).sorted('roomUpdatedAt', true);
|
||||
this.data = database.objects('subscriptions').sorted('roomUpdatedAt', true);
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
|
@ -63,7 +63,7 @@ export default class RoomsListView extends React.Component {
|
|||
componentWillReceiveProps(props) {
|
||||
if (this.props.server !== props.server) {
|
||||
this.data.removeListener(this.updateState);
|
||||
this.data = realm.objects('subscriptions').filtered('_server.id = $0', props.server).sorted('roomUpdatedAt', true);
|
||||
this.data = database.objects('subscriptions').sorted('roomUpdatedAt', true);
|
||||
this.data.addListener(this.updateState);
|
||||
} else if (this.props.searchText !== props.searchText) {
|
||||
this.search(props.searchText);
|
||||
|
@ -151,7 +151,8 @@ export default class RoomsListView extends React.Component {
|
|||
if (item.t === 'd') {
|
||||
RocketChat.createDirectMessage(item.username)
|
||||
.then(room => new Promise((resolve) => {
|
||||
const data = realm.objects('subscriptions').filtered('_server.id = $0 AND rid = $1', this.props.server, room.rid);
|
||||
const data = database.objects('subscriptions')
|
||||
.filtered('rid = $1', room.rid);
|
||||
|
||||
if (data.length) {
|
||||
return resolve(data[0]);
|
||||
|
|
|
@ -8,7 +8,7 @@ import { connect } from 'react-redux';
|
|||
import * as actions from '../actions';
|
||||
import * as server from '../actions/connect';
|
||||
import * as createChannelActions from '../actions/createChannel';
|
||||
import realm from '../lib/realm';
|
||||
import database from '../lib/realm';
|
||||
import RocketChat from '../lib/rocketchat';
|
||||
import RoomItem from '../presentation/RoomItem';
|
||||
import Banner from '../containers/Banner';
|
||||
|
@ -57,7 +57,6 @@ const styles = StyleSheet.create({
|
|||
const ds = new ListView.DataSource({ rowHasChanged: (r1, r2) => r1 !== r2 });
|
||||
@connect(
|
||||
state => ({
|
||||
server: state.server.server,
|
||||
login: state.login,
|
||||
Site_Url: state.settings.Site_Url,
|
||||
users: state.createChannel.users
|
||||
|
@ -74,7 +73,6 @@ export default class RoomsListView extends React.Component {
|
|||
static propTypes = {
|
||||
navigation: PropTypes.object.isRequired,
|
||||
Site_Url: PropTypes.string,
|
||||
server: PropTypes.string,
|
||||
addUser: PropTypes.func.isRequired,
|
||||
removeUser: PropTypes.func.isRequired,
|
||||
resetCreateChannel: PropTypes.func.isRequired,
|
||||
|
@ -83,15 +81,12 @@ export default class RoomsListView extends React.Component {
|
|||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.data = realm
|
||||
this.data = database
|
||||
.objects('subscriptions')
|
||||
.filtered('_server.id = $0 AND t = $1', this.props.server, 'd');
|
||||
.filtered('t = $0', 'd');
|
||||
this.state = {
|
||||
dataSource: ds.cloneWithRows(this.data),
|
||||
// searching: false,
|
||||
// searchDataSource: [],
|
||||
searchText: ''
|
||||
// login: false
|
||||
};
|
||||
this.data.addListener(this.updateState);
|
||||
}
|
||||
|
@ -105,7 +100,6 @@ export default class RoomsListView extends React.Component {
|
|||
const searchText = text.trim();
|
||||
this.setState({
|
||||
searchText: text
|
||||
// searching: searchText !== ''
|
||||
});
|
||||
if (searchText === '') {
|
||||
return this.setState({
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
]
|
||||
},
|
||||
"dependencies": {
|
||||
"@storybook/addons": "^3.2.18",
|
||||
"@storybook/addons": "^3.3.1",
|
||||
"@storybook/react-native": "^3.2.18",
|
||||
"babel-plugin-transform-decorators-legacy": "^1.3.4",
|
||||
"babel-plugin-transform-remove-console": "^6.8.5",
|
||||
|
|
Loading…
Reference in New Issue