Ejemplo n.º 1
0
        public void FillAllChats()
        {
            new Task(() => Loading()).Start();
            MessengerClient msClient = new MessengerClient();
            AccountDTO      account  = null;

            Dispatcher.Invoke(() => account = Account);
            List <ChatDTO>    chats        = msClient.GetAllMessagesInChats(account).ToList();
            bool              isExist      = false;
            List <StackPanel> dialogPanels = new List <StackPanel>();

            foreach (var item in chats)
            {
                foreach (var panel in dialogPanels)
                {
                    ChatDTO chatPanel = null;
                    Dispatcher.Invoke(() => chatPanel = panel.Tag as ChatDTO);
                    if (item.Participants == chatPanel.Participants)
                    {
                        Dispatcher.Invoke(() => AddMessage(panel, msClient.GetMessageById(item.MessageId.Value)));
                        isExist = true;
                        Dispatcher.Invoke(() => panel.Tag = item);
                    }
                }
                if (!isExist)
                {
                    StackPanel panel     = null;
                    bool       isContact = false;
                    Dispatcher.Invoke(() =>
                    {
                        foreach (Chip ac in panelContacts.Children)
                        {
                            if (item.Participants.Contains((ac.Tag as AccountDTO).Id.ToString()))
                            {
                                isContact = true;
                            }
                        }
                        AccountDTO acc = messengerClient.GetUserById(messengerClient.GetMessageById(item.MessageId.Value).DeliverId.Value);
                        if (!isContact & acc.Id != Account.Id)
                        {
                            ms = new MemoryStream(acc.Image);
                            listMails.Items.Add(new SearchClass {
                                Img = BitmapFrame.Create(ms), Text = acc.Name, Tag = acc
                            });
                        }
                        panel = new StackPanel {
                            Tag = item, Width = 907
                        };
                        AddMessage(panel, msClient.GetMessageById(item.MessageId.Value));
                    });
                    dialogPanels.Add(panel);
                }
                isExist = false;
            }
            Dispatcher.Invoke(() =>
            {
                DialogPanels.AddRange(dialogPanels.ToArray());
                for (int i = 0; i < DialogPanels.Count; i++)
                {
                    DialogPanels[i].Tag = dialogPanels[i].Tag as ChatDTO;
                }
                timer.Stop();
                pnlLoading.Visibility = Visibility.Hidden;
                tbLoading.Visibility  = Visibility.Hidden;
            });
            IsChatsFill = true;
        }