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