diff --git a/Logo.png b/Logo.png
new file mode 100644
index 000000000..c8da5de4b
Binary files /dev/null and b/Logo.png differ
diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
index cde69bccc..dedb76219 100644
Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-ldpi/ic_launcher.png b/android/app/src/main/res/mipmap-ldpi/ic_launcher.png
new file mode 100644
index 000000000..30bac2eb9
Binary files /dev/null and b/android/app/src/main/res/mipmap-ldpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
index c133a0cbd..55b6e5075 100644
Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
index bfa42f0e7..46157230a 100644
Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
index 324e72cdd..364e32a5b 100644
Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..e0026d779
Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/app/meteor.js b/app/meteor.js
index 3bf56c788..46b0c4056 100644
--- a/app/meteor.js
+++ b/app/meteor.js
@@ -35,11 +35,8 @@ export function connect(cb) {
}
export function loginWithPassword(selector, password, cb) {
- console.log(0);
Meteor.loginWithPassword(selector, password, function() {
- console.log(1);
Meteor.call('subscriptions/get', function(err, data) {
- console.log(2, err);
if (err) {
console.error(err);
}
@@ -59,3 +56,18 @@ export function loginWithPassword(selector, password, cb) {
cb();
});
}
+
+export function loadMessagesForRoom(rid) {
+ Meteor.call('loadHistory', rid, null, 50, function(err, data) {
+ if (err) {
+ console.error(err);
+ }
+ console.log(data);
+
+ realm.write(() => {
+ data.messages.forEach(message => {
+ realm.create('messages', message, true);
+ });
+ });
+ });
+}
diff --git a/app/navigation.js b/app/navigation.js
index e1c2b51c3..73eb71ea2 100644
--- a/app/navigation.js
+++ b/app/navigation.js
@@ -2,9 +2,11 @@ import { StackNavigator } from 'react-navigation';
import { LoginView } from './login';
import { NewServerView } from './new-server';
import { RoomsView } from './rooms';
+import { RoomView } from './room';
export default new StackNavigator({
+ // Room: { screen: RoomView },
Home: {
navigationOptions: {
header: null
@@ -12,7 +14,8 @@ export default new StackNavigator({
screen: NewServerView
},
Login: { screen: LoginView },
- Rooms: { screen: RoomsView }
+ Rooms: { screen: RoomsView },
+ Room: { screen: RoomView }
}, {
cardStyle: {
backgroundColor: '#fff'
diff --git a/app/realm.js b/app/realm.js
index 677a04e20..de927cf9e 100644
--- a/app/realm.js
+++ b/app/realm.js
@@ -40,10 +40,35 @@ const subscriptionSchema = {
}
};
+const usersSchema = {
+ name: 'users',
+ primaryKey: '_id',
+ properties: {
+ _id: 'string',
+ username: 'string',
+ name: {type: 'string', optional: true}
+ }
+}
+
+const messagesSchema = {
+ name: 'messages',
+ primaryKey: '_id',
+ properties: {
+ _id: 'string',
+ msg: {type: 'string', optional: true},
+ rid: 'string',
+ ts: 'date',
+ u: 'users',
+ // mentions: [],
+ // channels: [],
+ _updatedAt: 'date'
+ }
+};
+
// Realm.clearTestState();
const realm = new Realm({
- schema: [settingsSchema, serversSchema, subscriptionSchema]
+ schema: [settingsSchema, serversSchema, subscriptionSchema, messagesSchema, usersSchema]
});
export default realm;
diff --git a/app/room.js b/app/room.js
new file mode 100644
index 000000000..b99bfabdd
--- /dev/null
+++ b/app/room.js
@@ -0,0 +1,117 @@
+import React from 'react';
+import { View, Text, FlatList, StyleSheet, Image } from 'react-native';
+import realm from './realm';
+import { loadMessagesForRoom } from './meteor';
+import Markdown from 'react-native-simple-markdown';
+
+
+const styles = StyleSheet.create({
+ roomItem: {
+ borderColor: '#aaa',
+ padding: 14,
+ flexDirection: 'row'
+ },
+ avatar: {
+ backgroundColor: '#ccc',
+ width: 40,
+ height: 40,
+ marginRight: 10,
+ borderRadius: 5
+ },
+ username: {
+ fontWeight: 'bold',
+ marginBottom: 5
+ },
+ container: {
+ flex: 1
+ },
+ separator: {
+ height: 1,
+ // width: "86%",
+ backgroundColor: '#CED0CE'
+ // marginLeft: "14%"
+ }
+});
+
+class RoomItem extends React.PureComponent {
+ _onPress = () => {
+ this.props.onPressItem(this.props.id);
+ };
+
+ render() {
+ return (
+
+
+
+
+
+ {this.props.item.u.username}
+
+
+ {this.props.item.msg}
+
+
+
+ );
+ }
+}
+
+export class RoomView extends React.Component {
+ static navigationOptions = ({ navigation }) => ({
+ title: realm.objectForPrimaryKey('subscriptions', navigation.state.params.sid).name
+ // title: navigation.state.params.rid
+ });
+
+ _onPressItem(id) {
+ console.log('pressed', id);
+ }
+
+ renderItem = ({item}) => (
+
+ );
+
+ constructor(props) {
+ super(props);
+ this.rid = realm.objectForPrimaryKey('subscriptions', props.navigation.state.params.sid).rid;
+ // this.rid = 'GENERAL';
+
+ loadMessagesForRoom(this.rid);
+
+ const getState = () => {
+ return {
+ selected: new Map(),
+ dataSource: realm.objects('messages').filtered('rid = $0', this.rid)
+ };
+ };
+
+ realm.addListener('change', () => this.setState(getState()));
+
+ this.state = getState();
+ }
+
+ renderSeparator = () => {
+ return (
+
+ );
+ };
+
+
+ render() {
+ return (
+
+ item._id}
+ ItemSeparatorComponent={this.renderSeparator}
+ />
+
+ );
+ }
+}
diff --git a/app/rooms.js b/app/rooms.js
index a91cc7e7b..dd81b337c 100644
--- a/app/rooms.js
+++ b/app/rooms.js
@@ -34,8 +34,10 @@ class RoomItem extends React.PureComponent {
}
export class RoomsView extends React.Component {
- _onPressItem(id) {
+ _onPressItem = (id) => {
+ const { navigate } = this.props.navigation;
console.log('pressed', id);
+ navigate('Room', {sid: id});
}
renderItem = ({item}) => (
diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/Contents.json b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/Contents.json
index 118c98f74..fd6012a4b 100644
--- a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/Contents.json
+++ b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -1,38 +1,152 @@
{
"images" : [
{
+ "size" : "20x20",
"idiom" : "iphone",
+ "filename" : "icon-20@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "iphone",
+ "filename" : "icon-20@3x.png",
+ "scale" : "3x"
+ },
+ {
"size" : "29x29",
- "scale" : "2x"
+ "idiom" : "iphone",
+ "filename" : "icon-29@1x.png",
+ "scale" : "1x"
},
{
- "idiom" : "iphone",
"size" : "29x29",
- "scale" : "3x"
- },
- {
"idiom" : "iphone",
- "size" : "40x40",
+ "filename" : "icon-29@2x.png",
"scale" : "2x"
},
{
+ "size" : "29x29",
"idiom" : "iphone",
- "size" : "40x40",
+ "filename" : "icon-29@3x.png",
"scale" : "3x"
},
{
+ "size" : "40x40",
"idiom" : "iphone",
- "size" : "60x60",
+ "filename" : "icon-40@2x.png",
"scale" : "2x"
},
{
+ "size" : "40x40",
"idiom" : "iphone",
- "size" : "60x60",
+ "filename" : "icon-40@3x.png",
"scale" : "3x"
+ },
+ {
+ "size" : "57x57",
+ "idiom" : "iphone",
+ "filename" : "icon-57@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "57x57",
+ "idiom" : "iphone",
+ "filename" : "icon-57@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "60x60",
+ "idiom" : "iphone",
+ "filename" : "icon-60@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "60x60",
+ "idiom" : "iphone",
+ "filename" : "icon-60@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "ipad",
+ "filename" : "icon-20@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "ipad",
+ "filename" : "icon-20@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "ipad",
+ "filename" : "icon-29@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "ipad",
+ "filename" : "icon-29@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "ipad",
+ "filename" : "icon-40@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "ipad",
+ "filename" : "icon-40@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "50x50",
+ "idiom" : "ipad",
+ "filename" : "icon-50@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "50x50",
+ "idiom" : "ipad",
+ "filename" : "icon-50@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "72x72",
+ "idiom" : "ipad",
+ "filename" : "icon-72@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "72x72",
+ "idiom" : "ipad",
+ "filename" : "icon-72@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "76x76",
+ "idiom" : "ipad",
+ "filename" : "icon-76@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "76x76",
+ "idiom" : "ipad",
+ "filename" : "icon-76@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "83.5x83.5",
+ "idiom" : "ipad",
+ "filename" : "icon-83.5@2x.png",
+ "scale" : "2x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
-}
\ No newline at end of file
+}
diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-20@1x.png b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-20@1x.png
new file mode 100644
index 000000000..a44cf50c6
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-20@1x.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-20@2x.png b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-20@2x.png
new file mode 100644
index 000000000..93ca1b0f0
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-20@2x.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-20@3x.png b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-20@3x.png
new file mode 100644
index 000000000..e0f452f99
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-20@3x.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-29@1x.png b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-29@1x.png
new file mode 100644
index 000000000..24149f8b7
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-29@1x.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-29@2x.png b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-29@2x.png
new file mode 100644
index 000000000..810ad80ce
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-29@2x.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-29@3x.png b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-29@3x.png
new file mode 100644
index 000000000..7193c5f9c
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-29@3x.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-40@1x.png b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-40@1x.png
new file mode 100644
index 000000000..93ca1b0f0
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-40@1x.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-40@2x.png b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-40@2x.png
new file mode 100644
index 000000000..a6c4a93d3
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-40@2x.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-40@3x.png b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-40@3x.png
new file mode 100644
index 000000000..811f66c86
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-40@3x.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-50@1x.png b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-50@1x.png
new file mode 100644
index 000000000..e1729093f
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-50@1x.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-50@2x.png b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-50@2x.png
new file mode 100644
index 000000000..ed85af3e9
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-50@2x.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-57@1x.png b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-57@1x.png
new file mode 100644
index 000000000..c5be0be03
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-57@1x.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-57@2x.png b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-57@2x.png
new file mode 100644
index 000000000..c48a57cc2
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-57@2x.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-60@2x.png b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-60@2x.png
new file mode 100644
index 000000000..811f66c86
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-60@2x.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-60@3x.png b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-60@3x.png
new file mode 100644
index 000000000..95bb16a91
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-60@3x.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-72@1x.png b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-72@1x.png
new file mode 100644
index 000000000..dedb76219
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-72@1x.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-72@2x.png b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-72@2x.png
new file mode 100644
index 000000000..364e32a5b
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-72@2x.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-76@1x.png b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-76@1x.png
new file mode 100644
index 000000000..b0ad52b10
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-76@1x.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-76@2x.png b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-76@2x.png
new file mode 100644
index 000000000..b6d72ef6c
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-76@2x.png differ
diff --git a/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-83.5@2x.png b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-83.5@2x.png
new file mode 100644
index 000000000..800e4534c
Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-83.5@2x.png differ