diff --git a/Logo.png b/Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c8da5de4b0816c30d3f83372218c9bc031508c35 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 cde69bcccec65160d92116f20ffce4fce0b5245c..dedb762194f20839e5629a3ebbc0e89aa537178d 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 0000000000000000000000000000000000000000..30bac2eb97a3b17f36d7a7e90b42eb2511f46715 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 c133a0cbd379f5af6dbf1a899a0293ca5eccfad0..55b6e50757f00cf7304a65f42fa79d3b13dd89b9 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 bfa42f0e7b91d006d22352c9ff2f134e504e3c1d..46157230a5a0fb954d9a6e86e8f824bede1c6db7 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 324e72cdd7480cb983fa1bcc7ce686e51ef87fe7..364e32a5be60d55c286f41ea581c895b52779780 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 0000000000000000000000000000000000000000..e0026d7793a0a25f1005bc442b94cfc1a0d688b2 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 3bf56c788f0019412d01458b7e3c0744324536cb..46b0c4056d1452b85f3c5d517d86646a52e37514 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 e1c2b51c3be68f8a096584a6fe19f72277b71964..73eb71ea28b84bdaef8af0367cd8d009a9bd098d 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 677a04e20c1db5b8e4c2b9fcad46a4547bf64c79..de927cf9ee58b80f427e9c1746a498d1182c2fa7 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 0000000000000000000000000000000000000000..b99bfabddedf54d7f555b5760d5d29e5b24ce5bb --- /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 ( + <View style={styles.roomItem}> + <Image style={styles.avatar} source={{uri: `http://localhost:3000/avatar/${ this.props.item.u.username }`}}> + </Image> + <View> + <Text onPress={this._onPress} style={styles.username}> + {this.props.item.u.username} + </Text> + <Markdown whitelist={['link', 'url']}> + {this.props.item.msg} + </Markdown> + </View> + </View> + ); + } +} + +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}) => ( + <RoomItem + id={item._id} + onPressItem={this._onPressItem} + selected={true} + item={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 ( + <View style={styles.separator} /> + ); + }; + + + render() { + return ( + <View style={styles.container}> + <FlatList + style={styles.list} + data={this.state.dataSource} + renderItem={this.renderItem} + keyExtractor={item => item._id} + ItemSeparatorComponent={this.renderSeparator} + /> + </View> + ); + } +} diff --git a/app/rooms.js b/app/rooms.js index a91cc7e7b73a964c88887f5e769c32645f830099..dd81b337ce8a5575eaaa4d7ad1222166ec1ed2c0 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 118c98f7461bf98b2bc7e061150d8021121ad277..fd6012a4ba867f2daf4f639b0d117ea87f709bb8 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", - "size" : "29x29", + "filename" : "icon-20@2x.png", "scale" : "2x" }, { + "size" : "20x20", "idiom" : "iphone", - "size" : "29x29", + "filename" : "icon-20@3x.png", "scale" : "3x" }, { + "size" : "29x29", "idiom" : "iphone", - "size" : "40x40", + "filename" : "icon-29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "icon-29@2x.png", "scale" : "2x" }, { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "icon-29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", "idiom" : "iphone", + "filename" : "icon-40@2x.png", + "scale" : "2x" + }, + { "size" : "40x40", + "idiom" : "iphone", + "filename" : "icon-40@3x.png", "scale" : "3x" }, { + "size" : "57x57", "idiom" : "iphone", - "size" : "60x60", + "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 0000000000000000000000000000000000000000..a44cf50c60cfb9f804c021f20bd0870b6ead828a 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 0000000000000000000000000000000000000000..93ca1b0f052a0cc4f224f39397a3ea04e24c9d58 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 0000000000000000000000000000000000000000..e0f452f996de8fa9483dbb933753e9a6bb4a89bc 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 0000000000000000000000000000000000000000..24149f8b709f87898bb761d2bbc6f0e0908f5e15 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 0000000000000000000000000000000000000000..810ad80cec4c55a48ed11045d0050f422c155288 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 0000000000000000000000000000000000000000..7193c5f9c3bdcc4742a678b1418f6edc2fd3b7e2 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 0000000000000000000000000000000000000000..93ca1b0f052a0cc4f224f39397a3ea04e24c9d58 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 0000000000000000000000000000000000000000..a6c4a93d3a87534ae97652cfd2ad095065b37f71 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 0000000000000000000000000000000000000000..811f66c869dab115214abd4beadbd1ef480c3592 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 0000000000000000000000000000000000000000..e1729093fcf80ffa858665fdbccbb569dcbbaf8b 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 0000000000000000000000000000000000000000..ed85af3e921b15b232a84438be967b966709e818 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 0000000000000000000000000000000000000000..c5be0be039771ff0926cc98c53beb8f8d6a2f652 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 0000000000000000000000000000000000000000..c48a57cc27ba766f9e6630d814889ef0fae76b5a 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 0000000000000000000000000000000000000000..811f66c869dab115214abd4beadbd1ef480c3592 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 0000000000000000000000000000000000000000..95bb16a91ede31d458d79a1c38e294e0549ac24e 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 0000000000000000000000000000000000000000..dedb762194f20839e5629a3ebbc0e89aa537178d 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 0000000000000000000000000000000000000000..364e32a5be60d55c286f41ea581c895b52779780 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 0000000000000000000000000000000000000000..b0ad52b103f1bb966e10974cc02e728c7b19acfc 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 0000000000000000000000000000000000000000..b6d72ef6ce9e3312b16c081642ed1ff110dd859b 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 0000000000000000000000000000000000000000..800e4534cbc9ba15ce8af01b9b0f9f156a240393 Binary files /dev/null and b/ios/RocketChatRN/Images.xcassets/AppIcon.appiconset/icon-83.5@2x.png differ