private void AppendMessage(string message) { _source.Messages.Add(message); MessagesTableView.ReloadData(); // Scroll to the bottom var indexPath = NSIndexPath.FromRowSection(MessagesTableView.NumberOfRowsInSection(0) - 1, 0); MessagesTableView.ScrollToRow(indexPath, UITableViewScrollPosition.Bottom, animated: true); }
private void Messages_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { dataSource = new MessagesListDataSource(viewModel.Messages); MessagesTableView.Source = dataSource; MessagesTableView.ReloadData(); if (viewModel.Messages.Count > 0) { View.BringSubviewToFront(MessagesTableView); } }
private void UpdateInfo() { new Thread(new ThreadStart(async() => { await RemoteService.GetInfo(); UpdateLocalMessages(); InvokeOnMainThread(() => { MessagesTableView.Source = new MessagesTableSource(messages, textField, this); MessagesTableView.ReloadData(); if (messages.Count > minimumAmountOfMessagesToScroll) { MessagesTableView.ScrollToRow(NSIndexPath.FromItemSection((nint)messages.Count - 1, 0), UITableViewScrollPosition.Bottom, true); } }); })).Start(); }
private void GetAndSendTheImage(UIImagePickerMediaPickedEventArgs e) { UIImage originalImage = e.Info[UIImagePickerController.OriginalImage] as UIImage; if (originalImage != null) { new Thread(new ThreadStart(async() => { StringBuilder fileName = new StringBuilder(); for (int i = 0; i <= 32; i++) { if (i == 8 || i == 16) { fileName.Append('-'); i++; } if (gnr.NextDouble() < 0.3) { fileName.Append(Math.Floor(gnr.NextDouble() * 10)); } else { fileName.Append((char)Convert.ToInt32(Math.Floor(gnr.NextDouble() * 26) + 'a')); } } Message message = new Message() { Text = fileName.ToString(), Sender = Profile.Instance.Status, SendTime = string.Format($"{DateTime.Now.Day:d2}.{DateTime.Now.Month:d2}.{DateTime.Now.Year} {DateTime.Now.Hour:d2}:{DateTime.Now.Minute:d2}:{DateTime.Now.Second:d2}"), UserId = messages[0].UserId, TicketId = messages[0].TicketId, Type = "Picture" }; try { originalImage.AsJPEG().Save(Constants.Images + fileName.ToString() + ".jpg", false); if (!File.Exists(Constants.Images + fileName.ToString() + ".jpg")) { throw new Exception(); } UIImage image = await ImageService.Instance.LoadFile(Constants.Images + fileName.ToString() + ".jpg") .DownSample(width: 385) .AsUIImageAsync(); image.AsJPEG().Save(Constants.Images + fileName.ToString() + ".jpg", false); Ticket ticket = RemoteService.Tickets.Find(x => x.Id == message.TicketId); ticket.LastMessageText = "Picture"; ticket.LastMessageTime = message.SendTime; await RemoteService.UpdateTicketInfo(ticket); DateTime previousMessageTime = DateTime.ParseExact(messages[messages.Count - 1].SendTime, "dd.MM.yyyy HH:mm:ss", CultureInfo.InvariantCulture); Message dateMessage = null; if (previousMessageTime.Date != DateTime.Today) { dateMessage = new Message() { Text = $"{DateTime.Now.Day:d2}.{DateTime.Now.Month:d2}.{DateTime.Now.Year}", Sender = "System", SendTime = string.Format($"{DateTime.Now.Day:d2}.{DateTime.Now.Month:d2}.{DateTime.Now.Year} {DateTime.Now.Hour:d2}:{DateTime.Now.Minute:d2}:{DateTime.Now.Second:d2}"), UserId = messages[0].UserId, TicketId = messages[0].TicketId, Type = "Text" }; await RemoteService.SendMessage(dateMessage); } } catch (Exception) { return; } await RemoteService.SendPictureAsAttachment(message, Profile.Instance, Constants.Images + fileName.ToString() + ".jpg"); if (File.Exists(Constants.Images + fileName.ToString() + ".jpg")) { File.Delete(Constants.Images + fileName.ToString() + ".jpg"); } await RemoteService.UpdateMessages(); UpdateLocalMessages(); InvokeOnMainThread(() => { MessagesTableView.Source = new MessagesTableSource(messages, textField, this); MessagesTableView.ReloadData(); if (messages.Count > minimumAmountOfMessagesToScroll) { MessagesTableView.ScrollToRow(NSIndexPath.FromItemSection((nint)messages.Count - 1, 0), UITableViewScrollPosition.Bottom, true); } }); })).Start(); } }