private async Task LoadData() { var rawBlocks = await _viewModel.CheckBlock(); var blocks = JsonConvert.DeserializeObject <List <UserToBlockedUser> >(rawBlocks.content); ButtonSend.IsEnabled = true; EntrySend.IsEnabled = true; EntrySend.Placeholder = AppResources.ChatMessagePlaceholder; if (blocks.Any()) { ButtonSend.IsEnabled = false; EntrySend.IsEnabled = false; EntrySend.Placeholder = AppResources.ChatIsBlockedPlaceholder; } var connectTask = _viewModel.Connect(_tripId, _conversationId); var getMessagesTask = _viewModel.LoadMessageListAsync(_tripId, _conversationId); var(baseResult, content) = (new BaseResult(), string.Empty); if (_conversationId == Guid.Empty) { await connectTask; (baseResult, content) = await _viewModel.LoadMessageListAsync(_tripId, _viewModel.ConversationId); } else { await Task.WhenAny(connectTask, getMessagesTask); (baseResult, content) = await getMessagesTask; } switch (baseResult.Result) { case StatusCode.Ok: _viewModel.IsBusy = false; _viewModel.FillMessageList(content); Device.BeginInvokeOnMainThread(() => { MainScreenMessagesListView.ScrollTo(_viewModel.MessageList.LastOrDefault(), ScrollToPosition.MakeVisible, false); }); break; case StatusCode.Unauthorized when _viewModel.IsModalAuthWasOpen: return; case StatusCode.Unauthorized: await Navigation.PushAsync(new ModalAuthenticationPage(Chat)); _viewModel.IsModalAuthWasOpen = true; break; default: await DisplayAlert(AppResources.Notification, baseResult.Message, AppResources.Ok); _viewModel.IsModalAuthWasOpen = true; break; } }
private void OnSizeChanged(object sender, EventArgs e) { Device.BeginInvokeOnMainThread(() => { MainScreenMessagesListView.ScrollTo(_viewModel.MessageList.LastOrDefault(), ScrollToPosition.MakeVisible, false); }); }
public ChatPage(int tripId, int userId, Guid conversationId, string userName) { InitializeComponent(); _userName = userName; _tripId = tripId; _userId = userId; _conversationId = conversationId; _viewModel = new ChatViewModel(tripId, userId, conversationId, userName); BindingContext = _viewModel; Appearing += (object sender, EventArgs e) => EntrySend.Focus(); MessagingCenter.Subscribe <object>(this, "MessageReceived", (sender) => { Device.BeginInvokeOnMainThread(() => { MainScreenMessagesListView.ScrollTo(_viewModel.MessageList.LastOrDefault(), ScrollToPosition.Start, false); }); }); MessagingCenter.Subscribe <object>(this, "ClosedModalAuthChat", (sender) => { OnAppearing(); }); }