Пример #1
0
        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();
            }
        }