public ChatPage(Friend friend, ChatBook chatBook) { InitializeComponent(); Friend = friend; BindingContext = App.Container.Resolve <ChatViewModel>( new TypedParameter(typeof(Friend), friend), new TypedParameter(typeof(ChatBook), chatBook)); }
public ChatViewModel(Friend friend, ChatBook chatBook, IChatService chatService, IRealmStore realmStore) { _friend = friend; _chatBook = chatBook; _chatService = chatService; _realmStore = realmStore; PostMessageCommand = new Command <string>(PostMessage); }
/// <summary> /// Discover new matching friends from the backend. /// </summary> public async Task DiscoverFriendsAsync(List <LocalContact> contacts) { //Find unassociated contacts var contactsFromFriends = Friends.Select(f => f.LocalContact); var unassociatedContacts = contacts .Except(contactsFromFriends, new ContactComparer(ContactComparer.CompareBy.PhoneNumber)).ToList(); var friends = await _friendsService .FetchFriends(unassociatedContacts.Select(f => f.NormalizedPhoneNumber)); if (friends == null) { return; } foreach (var friend in friends) { if (Friends.Contains(friend, new FriendsComparer())) { continue; } friend.LocalContact = unassociatedContacts .SingleOrDefault(c => c.NormalizedPhoneNumber == friend.PhoneNumber); //Persist friend await _keyValueStore.Insert(friend); Friends.Add(friend); //Persist chatbook var chatbook = new ChatBook() { FriendKey = friend.Key }; await _realmStore.AddAsync(chatbook); OnPropertyChanged(nameof(Friends)); } }