Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
0
 private void OnSizeChanged(object sender, EventArgs e)
 {
     Device.BeginInvokeOnMainThread(() =>
     {
         MainScreenMessagesListView.ScrollTo(_viewModel.MessageList.LastOrDefault(), ScrollToPosition.MakeVisible, false);
     });
 }
Exemplo n.º 3
0
        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();
            });
        }