Rename meteor.js to rocketchat.js
This commit is contained in:
parent
8d52209935
commit
4c5adc5dc9
|
@ -1,173 +0,0 @@
|
||||||
import Meteor from 'react-native-meteor';
|
|
||||||
import Random from 'react-native-meteor/lib/Random';
|
|
||||||
import realm from './realm';
|
|
||||||
|
|
||||||
export { Accounts } from 'react-native-meteor';
|
|
||||||
|
|
||||||
const RocketChat = {
|
|
||||||
get currentServer() {
|
|
||||||
const current = realm.objects('servers').filtered('current = true')[0];
|
|
||||||
return current && current.id;
|
|
||||||
},
|
|
||||||
|
|
||||||
set currentServer(server) {
|
|
||||||
realm.write(() => {
|
|
||||||
realm.objects('servers').filtered('current = true').forEach(item => (item.current = false));
|
|
||||||
realm.create('servers', { id: server, current: true }, true);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export default RocketChat;
|
|
||||||
|
|
||||||
Meteor.Accounts.onLogin(() => {
|
|
||||||
Meteor.call('subscriptions/get', (err, data) => {
|
|
||||||
if (err) {
|
|
||||||
console.error(err);
|
|
||||||
}
|
|
||||||
|
|
||||||
realm.write(() => {
|
|
||||||
data.forEach((subscription) => {
|
|
||||||
// const subscription = {
|
|
||||||
// _id: item._id
|
|
||||||
// };
|
|
||||||
// if (typeof item.value === 'string') {
|
|
||||||
// subscription.value = item.value;
|
|
||||||
// }
|
|
||||||
subscription._server = { id: RocketChat.currentServer };
|
|
||||||
realm.create('subscriptions', subscription, true);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
Meteor.subscribe('stream-notify-user', `${ Meteor.userId() }/subscriptions-changed`, false);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
export function connect(cb) {
|
|
||||||
const url = `${ RocketChat.currentServer }/websocket`;
|
|
||||||
|
|
||||||
Meteor.connect(url);
|
|
||||||
|
|
||||||
Meteor.ddp.on('connected', () => {
|
|
||||||
console.log('connected');
|
|
||||||
|
|
||||||
Meteor.call('public-settings/get', (err, data) => {
|
|
||||||
if (err) {
|
|
||||||
console.error(err);
|
|
||||||
}
|
|
||||||
|
|
||||||
realm.write(() => {
|
|
||||||
data.forEach((item) => {
|
|
||||||
const setting = {
|
|
||||||
_id: item._id
|
|
||||||
};
|
|
||||||
setting._server = { id: RocketChat.currentServer };
|
|
||||||
if (typeof item.value === 'string') {
|
|
||||||
setting.value = item.value;
|
|
||||||
}
|
|
||||||
realm.create('settings', setting, true);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
cb();
|
|
||||||
});
|
|
||||||
|
|
||||||
Meteor.ddp.on('changed', (ddbMessage) => {
|
|
||||||
console.log('changed', ddbMessage);
|
|
||||||
if (ddbMessage.collection === 'stream-room-messages') {
|
|
||||||
realm.write(() => {
|
|
||||||
const message = ddbMessage.fields.args[0];
|
|
||||||
message.temp = false;
|
|
||||||
message._server = { id: RocketChat.currentServer };
|
|
||||||
realm.create('messages', message, true);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ddbMessage.collection === 'stream-notify-user') {
|
|
||||||
realm.write(() => {
|
|
||||||
const data = ddbMessage.fields.args[1];
|
|
||||||
data._server = { id: RocketChat.currentServer };
|
|
||||||
realm.create('subscriptions', data, true);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export function loginWithPassword(selector, password, cb) {
|
|
||||||
Meteor.loginWithPassword(selector, password, () => cb && cb());
|
|
||||||
}
|
|
||||||
|
|
||||||
export function loadSubscriptions(cb) {
|
|
||||||
Meteor.call('subscriptions/get', (err, data) => {
|
|
||||||
if (err) {
|
|
||||||
console.error(err);
|
|
||||||
}
|
|
||||||
|
|
||||||
realm.write(() => {
|
|
||||||
data.forEach((subscription) => {
|
|
||||||
// const subscription = {
|
|
||||||
// _id: item._id
|
|
||||||
// };
|
|
||||||
// if (typeof item.value === 'string') {
|
|
||||||
// subscription.value = item.value;
|
|
||||||
// }
|
|
||||||
subscription._server = { id: RocketChat.currentServer };
|
|
||||||
realm.create('subscriptions', subscription, true);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
return cb && cb();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export function loadMessagesForRoom(rid, cb) {
|
|
||||||
Meteor.call('loadHistory', rid, null, 50, (err, data) => {
|
|
||||||
if (err) {
|
|
||||||
console.error(err);
|
|
||||||
}
|
|
||||||
|
|
||||||
realm.write(() => {
|
|
||||||
data.messages.forEach((message) => {
|
|
||||||
message.temp = false;
|
|
||||||
message._server = { id: RocketChat.currentServer };
|
|
||||||
realm.create('messages', message, true);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
if (cb) {
|
|
||||||
cb();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Meteor.subscribe('stream-room-messages', rid, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function sendMessage(rid, msg) {
|
|
||||||
const _id = Random.id();
|
|
||||||
const user = Meteor.user();
|
|
||||||
|
|
||||||
realm.write(() => {
|
|
||||||
realm.create('messages', {
|
|
||||||
_id,
|
|
||||||
rid,
|
|
||||||
msg,
|
|
||||||
ts: new Date(),
|
|
||||||
_updatedAt: new Date(),
|
|
||||||
temp: true,
|
|
||||||
_server: { id: RocketChat.currentServer },
|
|
||||||
u: {
|
|
||||||
_id: user._id,
|
|
||||||
username: user.username
|
|
||||||
}
|
|
||||||
}, true);
|
|
||||||
});
|
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
Meteor.call('sendMessage', { _id, rid, msg }, (error, result) => {
|
|
||||||
if (error) {
|
|
||||||
return reject(error);
|
|
||||||
}
|
|
||||||
return resolve(result);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
|
@ -0,0 +1,175 @@
|
||||||
|
import Meteor from 'react-native-meteor';
|
||||||
|
import Random from 'react-native-meteor/lib/Random';
|
||||||
|
import realm from './realm';
|
||||||
|
|
||||||
|
export { Accounts } from 'react-native-meteor';
|
||||||
|
|
||||||
|
const RocketChat = {
|
||||||
|
get currentServer() {
|
||||||
|
const current = realm.objects('servers').filtered('current = true')[0];
|
||||||
|
return current && current.id;
|
||||||
|
},
|
||||||
|
|
||||||
|
set currentServer(server) {
|
||||||
|
realm.write(() => {
|
||||||
|
realm.objects('servers').filtered('current = true').forEach(item => (item.current = false));
|
||||||
|
realm.create('servers', { id: server, current: true }, true);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
connect(cb) {
|
||||||
|
const url = `${ RocketChat.currentServer }/websocket`;
|
||||||
|
|
||||||
|
Meteor.connect(url);
|
||||||
|
|
||||||
|
Meteor.ddp.on('connected', () => {
|
||||||
|
console.log('connected');
|
||||||
|
|
||||||
|
Meteor.call('public-settings/get', (err, data) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
realm.write(() => {
|
||||||
|
data.forEach((item) => {
|
||||||
|
const setting = {
|
||||||
|
_id: item._id
|
||||||
|
};
|
||||||
|
setting._server = { id: RocketChat.currentServer };
|
||||||
|
if (typeof item.value === 'string') {
|
||||||
|
setting.value = item.value;
|
||||||
|
}
|
||||||
|
realm.create('settings', setting, true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
if (cb) {
|
||||||
|
cb();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Meteor.ddp.on('changed', (ddbMessage) => {
|
||||||
|
console.log('changed', ddbMessage);
|
||||||
|
if (ddbMessage.collection === 'stream-room-messages') {
|
||||||
|
realm.write(() => {
|
||||||
|
const message = ddbMessage.fields.args[0];
|
||||||
|
message.temp = false;
|
||||||
|
message._server = { id: RocketChat.currentServer };
|
||||||
|
realm.create('messages', message, true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ddbMessage.collection === 'stream-notify-user') {
|
||||||
|
realm.write(() => {
|
||||||
|
const data = ddbMessage.fields.args[1];
|
||||||
|
data._server = { id: RocketChat.currentServer };
|
||||||
|
realm.create('subscriptions', data, true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
loginWithPassword(selector, password, cb) {
|
||||||
|
Meteor.loginWithPassword(selector, password, () => cb && cb());
|
||||||
|
},
|
||||||
|
|
||||||
|
loadSubscriptions(cb) {
|
||||||
|
Meteor.call('subscriptions/get', (err, data) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
realm.write(() => {
|
||||||
|
data.forEach((subscription) => {
|
||||||
|
// const subscription = {
|
||||||
|
// _id: item._id
|
||||||
|
// };
|
||||||
|
// if (typeof item.value === 'string') {
|
||||||
|
// subscription.value = item.value;
|
||||||
|
// }
|
||||||
|
subscription._server = { id: RocketChat.currentServer };
|
||||||
|
realm.create('subscriptions', subscription, true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
return cb && cb();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
loadMessagesForRoom(rid, cb) {
|
||||||
|
Meteor.call('loadHistory', rid, null, 50, (err, data) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
realm.write(() => {
|
||||||
|
data.messages.forEach((message) => {
|
||||||
|
message.temp = false;
|
||||||
|
message._server = { id: RocketChat.currentServer };
|
||||||
|
realm.create('messages', message, true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
if (cb) {
|
||||||
|
cb();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Meteor.subscribe('stream-room-messages', rid, false);
|
||||||
|
},
|
||||||
|
|
||||||
|
sendMessage(rid, msg) {
|
||||||
|
const _id = Random.id();
|
||||||
|
const user = Meteor.user();
|
||||||
|
|
||||||
|
realm.write(() => {
|
||||||
|
realm.create('messages', {
|
||||||
|
_id,
|
||||||
|
rid,
|
||||||
|
msg,
|
||||||
|
ts: new Date(),
|
||||||
|
_updatedAt: new Date(),
|
||||||
|
temp: true,
|
||||||
|
_server: { id: RocketChat.currentServer },
|
||||||
|
u: {
|
||||||
|
_id: user._id,
|
||||||
|
username: user.username
|
||||||
|
}
|
||||||
|
}, true);
|
||||||
|
});
|
||||||
|
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
Meteor.call('sendMessage', { _id, rid, msg }, (error, result) => {
|
||||||
|
if (error) {
|
||||||
|
return reject(error);
|
||||||
|
}
|
||||||
|
return resolve(result);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default RocketChat;
|
||||||
|
|
||||||
|
Meteor.Accounts.onLogin(() => {
|
||||||
|
Meteor.call('subscriptions/get', (err, data) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
realm.write(() => {
|
||||||
|
data.forEach((subscription) => {
|
||||||
|
// const subscription = {
|
||||||
|
// _id: item._id
|
||||||
|
// };
|
||||||
|
// if (typeof item.value === 'string') {
|
||||||
|
// subscription.value = item.value;
|
||||||
|
// }
|
||||||
|
subscription._server = { id: RocketChat.currentServer };
|
||||||
|
realm.create('subscriptions', subscription, true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
Meteor.subscribe('stream-notify-user', `${ Meteor.userId() }/subscriptions-changed`, false);
|
||||||
|
});
|
||||||
|
});
|
|
@ -1,7 +1,7 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { TextInput, StyleSheet } from 'react-native';
|
import { TextInput, StyleSheet } from 'react-native';
|
||||||
import { loginWithPassword } from '../lib/meteor';
|
import RocketChat from '../lib/rocketchat';
|
||||||
|
|
||||||
import KeyboardView from '../components/KeyboardView';
|
import KeyboardView from '../components/KeyboardView';
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ export default class LoginView extends React.Component {
|
||||||
};
|
};
|
||||||
|
|
||||||
this.submit = () => {
|
this.submit = () => {
|
||||||
loginWithPassword({ username: this.state.username }, this.state.password, () => {
|
RocketChat.loginWithPassword({ username: this.state.username }, this.state.password, () => {
|
||||||
this.props.navigation.dispatch({ type: 'Navigation/BACK' });
|
this.props.navigation.dispatch({ type: 'Navigation/BACK' });
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
|
||||||
import { Text, View, FlatList, StyleSheet } from 'react-native';
|
import { Text, View, FlatList, StyleSheet } from 'react-native';
|
||||||
// import Markdown from 'react-native-simple-markdown';
|
// import Markdown from 'react-native-simple-markdown';
|
||||||
import realm from '../lib/realm';
|
import realm from '../lib/realm';
|
||||||
import RocketChat, { loadMessagesForRoom, sendMessage } from '../lib/meteor';
|
import RocketChat from '../lib/rocketchat';
|
||||||
|
|
||||||
import Message from '../components/Message';
|
import Message from '../components/Message';
|
||||||
import MessageBox from '../components/MessageBox';
|
import MessageBox from '../components/MessageBox';
|
||||||
|
@ -54,7 +54,7 @@ export default class RoomView extends React.Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillMount() {
|
componentWillMount() {
|
||||||
loadMessagesForRoom(this.rid, () => {
|
RocketChat.loadMessagesForRoom(this.rid, () => {
|
||||||
this.setState({
|
this.setState({
|
||||||
...this.state,
|
...this.state,
|
||||||
loaded: true
|
loaded: true
|
||||||
|
@ -76,7 +76,7 @@ export default class RoomView extends React.Component {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
sendMessage = message => sendMessage(this.rid, message);
|
sendMessage = message => RocketChat.sendMessage(this.rid, message);
|
||||||
|
|
||||||
renderSeparator = () => (
|
renderSeparator = () => (
|
||||||
<View style={styles.separator} />
|
<View style={styles.separator} />
|
||||||
|
|
|
@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
|
||||||
import { Text, View, FlatList, StyleSheet } from 'react-native';
|
import { Text, View, FlatList, StyleSheet } from 'react-native';
|
||||||
import Meteor from 'react-native-meteor';
|
import Meteor from 'react-native-meteor';
|
||||||
import realm from '../lib/realm';
|
import realm from '../lib/realm';
|
||||||
import RocketChat, { connect } from '../lib/meteor';
|
import RocketChat from '../lib/rocketchat';
|
||||||
|
|
||||||
import RoomItem from '../components/RoomItem';
|
import RoomItem from '../components/RoomItem';
|
||||||
|
|
||||||
|
@ -75,9 +75,7 @@ export default class RoomsListView extends React.Component {
|
||||||
navigation = this.props.navigation;
|
navigation = this.props.navigation;
|
||||||
|
|
||||||
if (RocketChat.currentServer) {
|
if (RocketChat.currentServer) {
|
||||||
connect(() => {
|
RocketChat.connect();
|
||||||
// navigation.navigate('Login');
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
navigation.navigate('ListServerModal');
|
navigation.navigate('ListServerModal');
|
||||||
}
|
}
|
||||||
|
@ -127,7 +125,7 @@ export default class RoomsListView extends React.Component {
|
||||||
<View style={[styles.bannerContainer, { backgroundColor: 'orange' }]}>
|
<View style={[styles.bannerContainer, { backgroundColor: 'orange' }]}>
|
||||||
<Text style={[styles.bannerText, { color: '#a00' }]}>Authenticating...</Text>
|
<Text style={[styles.bannerText, { color: '#a00' }]}>Authenticating...</Text>
|
||||||
</View>
|
</View>
|
||||||
)
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ import Zeroconf from 'react-native-zeroconf';
|
||||||
import { View, Text, SectionList, Button, StyleSheet } from 'react-native';
|
import { View, Text, SectionList, Button, StyleSheet } from 'react-native';
|
||||||
|
|
||||||
import realm from '../lib/realm';
|
import realm from '../lib/realm';
|
||||||
import RocketChat, { connect } from '../lib/meteor';
|
import RocketChat from '../lib/rocketchat';
|
||||||
|
|
||||||
const styles = StyleSheet.create({
|
const styles = StyleSheet.create({
|
||||||
view: {
|
view: {
|
||||||
|
@ -88,7 +88,7 @@ export default class ListServerView extends React.Component {
|
||||||
onPressItem(item) {
|
onPressItem(item) {
|
||||||
RocketChat.currentServer = item.id;
|
RocketChat.currentServer = item.id;
|
||||||
|
|
||||||
connect(() => {});
|
RocketChat.connect();
|
||||||
this.props.navigation.dispatch({ type: 'Navigation/BACK' });
|
this.props.navigation.dispatch({ type: 'Navigation/BACK' });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ import React from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { TextInput, StyleSheet } from 'react-native';
|
import { TextInput, StyleSheet } from 'react-native';
|
||||||
|
|
||||||
import RocketChat from '../lib/meteor';
|
import RocketChat from '../lib/rocketchat';
|
||||||
|
|
||||||
import KeyboardView from '../components/KeyboardView';
|
import KeyboardView from '../components/KeyboardView';
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue