Esempio n. 1
0
 public void RequestNewChat(string auctionId, string participant, Message message)
 {
     CurrentChat         = new Chat(auctionId, participant);
     CurrentChat.Message = message;
     Chats.Add(CurrentChat);
     OnChatCreated(EventArgs.Empty);
 }
        public SettingsViewModel(ISettingsDataService dataService, IGeneralDataService generalDataService)
        {
            settingsDataService = dataService;
            CurrentTheme        = Ubiquitous.Default.Config.AppConfig.ThemeName;
            settingsDataService.GetChatSettings((list) => {
                foreach (ChatConfig chatConfig in list)
                {
                    Chats.Add(new SettingsChatItemViewModel(chatConfig));
                }
            });

            var serviceList = generalDataService.Services.Select(service => new SettingsSectionViewModel(service));

            foreach (var service in serviceList)
            {
                ServiceItemViewModels.Add(service);
            }

            AppConfig = Ubiquitous.Default.Config.AppConfig;

            ThemeList = new ObservableCollection <ThemeDescription>(Theme.ThemesList);
            var currentTheme = ThemeList.FirstOrDefault(theme => theme.Title.Equals(Theme.CurrentTheme));

            if (currentTheme != null)
            {
                currentTheme.IsCurrent = true;
            }
        }
Esempio n. 3
0
        private void OnTelegramServiceNewMessage(object sender, EventArgs.NewMessageEventArgs e)
        {
            _dispatcherService.InvokeIfRequired(async() =>
            {
                try
                {
                    var chat     = Chats.FirstOrDefault(x => x.Chat.Id == e.Message.Chat.Id);
                    bool newChat = chat == null;

                    if (newChat)
                    {
                        chat = ChatViewModel.Create(e.Message.Chat);
                        Chats.Add(chat);
                    }

                    chat.AddMessage(e.Message);
                    Chats.MoveItemToTop(chat);

                    if (newChat)
                    {
                        await chat.LoadImageAsync();
                    }
                }
                catch (Exception ex)
                {
                    ProcessException(ex);
                }
            });
        }
Esempio n. 4
0
        private async void SendMessage()
        {
            if (string.IsNullOrEmpty(Message) || string.IsNullOrWhiteSpace(Message))
            {
                Message = null;
                return;
            }
            var chat = new Chat()
            {
                Sender = Settings.UsernameSettings,

                //SenderEmail = Settings.EmailSettings,
                SenderId     = Settings.KeySettings,
                SenderAvatar = Settings.AvatarSettings,
                Message      = Message.Trim(),
                Receiver     = Username,
                ReceiverId   = Id,
                //ReceiverEmail = Email,
                ReceiverAvatar = Avatar,
                Time           = DateTime.Now
            };

            Message = null;
            Chats.Add(chat);
            var send = await remoteService.SendMessage(chat);
        }
Esempio n. 5
0
        private void Transport_PhotoMessageReceived(object sender, EventArgs <BotPhotoMessage> e)
        {
            Core.Log.LibVerbose("Photo Message received...");
            var message = e.Item1;

            #region Get Chat
            if (Chats.TryGet(message.Chat.Id, out var storedChat))
            {
                message.Chat.State = storedChat.State;
            }
            else
            {
                Chats.Add(message.Chat);
            }
            #endregion

            #region Get User
            if (!Users.Contains(message.User.Id))
            {
                Users.Add(message.User);
            }
            #endregion

            OnPhotoMessageReceived?.Invoke(this, e);
        }
Esempio n. 6
0
 public Chat CreateChat(string auctionId, string participant, IMessageListener messageListener)
 {
     CurrentChat = new Chat(auctionId, participant);
     CurrentChat.AddIMessageListener(messageListener);
     Chats.Add(CurrentChat);
     OnChatCreated(EventArgs.Empty);
     return(CurrentChat);
 }
Esempio n. 7
0
 public Chat GetChat(long peerId)
 {
     if (!Chats.ContainsKey(peerId))
     {
         Chats.Add(peerId, new Chat(this, peerId));
     }
     return(Chats[peerId]);
 }
 private void LoadChats()
 {
     foreach (Chat chat in MessageManager.Instance.chats)
     {
         chat.Init();
         Chats.Add(chat);
     }
 }
Esempio n. 9
0
        private async void Transport_TextMessageReceived(object sender, EventArgs <BotTextMessage> e)
        {
            try
            {
                if (e?.Item1?.Text?.IsNullOrEmpty() != false)
                {
                    return;
                }
                Core.Log.LibVerbose("Message received, looking for command...");
                _counterMessagesReceived.Increment();
                var message   = e.Item1;
                var sCommands = Commands.Where((cmd, sMessage) => cmd.Condition(sMessage.Text), message).ToArray();
                if (sCommands.Any())
                {
                    #region Get Chat
                    if (Chats.TryGet(message.Chat.Id, out var storedChat))
                    {
                        storedChat.ChatType = message.Chat.ChatType;
                        storedChat.Name     = message.Chat.Name;
                        //
                        message.Chat.State = storedChat.State;
                    }
                    else
                    {
                        Chats.Add(message.Chat);
                    }
                    #endregion

                    #region Get User
                    if (!Users.Contains(message.User.Id))
                    {
                        Users.Add(message.User);
                    }
                    #endregion

                    foreach (var sCommand in sCommands)
                    {
                        Core.Log.LibVerbose("Executing command for: {0}", message.Text);
                        var res = await sCommand.Handler(this, message).ConfigureAwait(false);

                        Core.Log.LibVerbose("Command executed.");
                        if (res)
                        {
                            break;
                        }
                    }
                }
                else
                {
                    Core.Log.LibVerbose("Command not found for the message: {0}", message.Text);
                }
            }
            catch (Exception ex)
            {
                Core.Log.Write(ex);
            }
        }
Esempio n. 10
0
        private async Task InitAsync()
        {
            foreach (var chatInfo in _chatService.GetChatListe())
            {
                Angebot angebot = await _angebotService.LoadAngebotAsync(chatInfo.AnbieterID + "/" + chatInfo.AngebotID, DateTime.MinValue);

                Chats.Add(new ChatViewModel(chatInfo, Factory.GetChatPollingService(), Factory.GetChatService(), Factory.GetLoginService(), Factory.GetChatBufferService(), Factory.GetProfilService(), angebot));
            }
        }
Esempio n. 11
0
        private async void _chatController_NewChatOpened(ChatInfo newChat)
        {
            await ChatViewModel._coreDispatcher.RunAsync(CoreDispatcherPriority.Normal, async() =>
            {
                Angebot angebot = await _angebotService.LoadAngebotAsync(newChat.AnbieterID + "/" + newChat.AngebotID, DateTime.MinValue);

                Chats.Add(new ChatViewModel(newChat, Factory.GetChatPollingService(), Factory.GetChatService(), Factory.GetLoginService(), Factory.GetChatBufferService(), Factory.GetProfilService(), angebot));
            });
        }
Esempio n. 12
0
 public Chat CreateChat(string auctionId, IMessageListener messageListener)
 {
     CurrentChat = new Chat(auctionId, XMPPConnection.UserName);
     if (messageListener != null)
     {
         CurrentChat.AddIMessageListener(messageListener);
     }
     Chats.Add(CurrentChat);
     OnChatCreated(EventArgs.Empty);
     return(CurrentChat);
 }
Esempio n. 13
0
 public void AddToChat(Chat chat)
 {
     if (chat == null)
     {
         throw new ArgumentNullException();
     }
     if (chat.Users.Contains(this))
     {
         throw new InvalidOperationException();
     }
     Chats.Add(chat);
     chat.Users.Add(this);
 }
Esempio n. 14
0
        private async void RetrieveMessage()
        {
            var chats = await remoteService.RetrieveMessage();

            Chats.Clear();

            foreach (var item in chats)
            {
                if ((item.SenderId == Settings.KeySettings && item.ReceiverId == Id) || (item.SenderId == Id && item.ReceiverId == Settings.KeySettings))
                {
                    Chats.Add(item);
                }
            }
        }
Esempio n. 15
0
        public UserChat GetChat(long peerId = 0)
        {
            lock (_userLock)
            {
                var chat = Chats.FirstOrDefault(c => c.PeerId == (peerId == 0 ? (long)Id : peerId));

                if (chat == null)
                {
                    chat = new UserChat(peerId == 0 ? (long)Id : peerId);
                    Chats.Add(chat);
                }

                return(chat);
            }
        }
        /// <summary>
        ///		Añade una conexión
        /// </summary>
        internal bool Add(JabberConnection connection, JabberContact contact)
        {
            bool added = false;

            // Añade el chat si no existía
            if (!Exists(connection, contact))
            {
                // Añade el chat
                Chats.Add(GetKey(connection, contact));
                // Indica que se ha añadido
                added = true;
            }
            // Devuelve el valor que indica si se ha añadido
            return(added);
        }
Esempio n. 17
0
        public void OnSelectedChat(Chat chat)
        {
            var _chat = Chats.FirstOrDefault((x) => x.Name == chat.Name);

            if (_chat == null)
            {
                chat.CountOfUnreadMessages = 0;
                Chats.Add(chat);
                SelectedChat = chat;
            }
            else
            {
                SelectedChat = _chat;
            }
        }
Esempio n. 18
0
        private Chat CreateChat(IEnumerable <ChatUserSetting> chatUserSettings, bool isGroup, long userJoinedAt, ChatGroupInfo?chatGroupInfo)
        {
            if (isGroup && !chatGroupInfo.HasValue)
            {
                throw new ArgumentNullException(nameof(chatGroupInfo));
            }

            var time = DateTimeOffset.FromUnixTimeMilliseconds(userJoinedAt).DateTime;

            var chat = new Chat()
            {
                IsGroup   = isGroup,
                CreatedAt = time
            };

            Chats.Add(chat);

            Models.ChatSetting chatSetting = null;

            if (isGroup)
            {
                chatSetting = new Models.ChatSetting()
                {
                    Chat        = chat,
                    Address     = chatGroupInfo.Value.Address,
                    Name        = chatGroupInfo.Value.Name,
                    Description = chatGroupInfo.Value.Description,
                    PictureUrl  = chatGroupInfo.Value.Image,
                    PublicKey   = chatGroupInfo.Value.PublicKey,
                    PrivateKey  = chatGroupInfo.Value.PrivateKey,
                    IsPublic    = chatGroupInfo.Value.IsPublic,
                    CreatedAt   = time,
                };

                ChatSettings.Add(chatSetting);
            }

            foreach (var userSetting in chatUserSettings)
            {
                CreateChatUser(chat, userSetting, userJoinedAt);
            }

            chat.Setting = chatSetting;

            return(chat);
        }
Esempio n. 19
0
        /// <summary>
        /// Inizializza una chat, se non è già presente.
        /// </summary>
        /// <param name="InitUser">L'utente che cerca di aprire la chat.</param>
        /// <param name="ReceiveUser">L'utente "ricevente"</param>
        /// <returns>Nel primo caso restituisce la nuova chat, nel secondo quella corretta.</returns>
        public IMMessagesContainerDTO StarChat(IMUserDTO InitUser, IMUserDTO ReceiveUser)
        {
            IMMessagesContainerDTO TempChat = (from ct in Chats
                                               where ((ct.UserA.Id == InitUser.Id) && (ct.UserB.Id == ReceiveUser.Id) ||
                                                      (ct.UserA.Id == ReceiveUser.Id) && (ct.UserB.Id == InitUser.Id))
                                               select ct).FirstOrDefault();

            if (TempChat != null)
            {
                //Restituisco la chat corretta
                return(TempChat);
            }
            else
            {
                //Creo la nuova chat
                TempChat    = new Domain.IMMessagesContainerDTO();
                TempChat.Id = Guid.NewGuid();

                TempChat.UserA = InitUser;
                TempChat.UserB = ReceiveUser;

                TempChat.UserA.LastAccess = DateTime.Now;
                TempChat.UserB.LastAccess = DateTime.Now;

                TempChat.UserA.IsActive = true;
                TempChat.UserB.IsActive = false;

                TempChat.UserA.IsEnter = true;
                TempChat.UserB.IsEnter = false;
                //TempChat.Person1.IsChatvisible = true;
                //TempChat.Person2.IsChatvisible = true;

                TempChat.IsStarted = false;

                //Original: TempChat.UserDiscarded = ReceiveUser.Id;
                TempChat.UserDiscarded = ReceiveUser.PersonId;

                TempChat.Messages = new List <IMMessageDTO>();

                Chats.Add(TempChat);

                return(TempChat);
                //    this.Messages = new List<Ct1o1_Message_DTO>();
            }
        }
Esempio n. 20
0
        private void ReceiveMessage(object chat, object message, object user)
        {
            int    ChatId   = Convert.ToInt32(chat.GetType().GetProperty("Id").GetValue(chat).ToString());
            string ChatName = chat.GetType().GetProperty("Name").GetValue(chat).ToString();

            int    UserId        = Convert.ToInt32(user.GetType().GetProperty("Id").GetValue(user));
            string UserNickName  = user.GetType().GetProperty("Name").GetValue(user).ToString();
            string UserLastName  = user.GetType().GetProperty("LastName").GetValue(user).ToString();
            string UserFirstName = user.GetType().GetProperty("FirstName").GetValue(user).ToString();

            string MessageText = (string)message.GetType().GetProperty("Text").GetValue(message);

            try
            {
                using (ISession session = NHibernateHelper.OpenSession())
                {
                    Chat    ch = new Chat(ChatId, ChatName, session);
                    User    us = new User(UserId, UserNickName, UserLastName, UserFirstName, session);
                    Message ms = new Message(MessageText, ch, us);
                    using (ITransaction transaction = session.BeginTransaction())
                    {
                        ch.AddMessage(ms, session);
                        transaction.Commit();
                    }

                    if (ExistsOpenChat(ch.Id))
                    {
                        OpenedChat.ActiveChat.MessagesCollection.Add(ms);
                        OpenedChat.LastMessage = ms;
                    }
                    if (Chats.SingleOrDefault(c => c.Id == ch.Id) == null)
                    {
                        Chats.Add(ch);
                    }
                }
            }
            catch
            {
                throw;
            }
        }
Esempio n. 21
0
        public static async Task AddChat(long chatID)
        {
            if (Chats.All(x => x.Id != chatID))
            {
                await using (var db = new Database())
                {
                    var chat = new Chat
                    {
                        Id = chatID,
                        DisableAnnouncements = false,
                        DisableEvents        = true,
                        Locale = "ru"
                    };
                    Chats.Add(chat);
                    await db.Chats.AddAsync(chat);

                    await db.SaveChangesAsync();

                    Log.Information($"Added chat '{chatID}' to the chat list");
                }
            }
        }
Esempio n. 22
0
        public void EnsureAndOpenChat(AngebotViewModel angebotVM)
        {
            foreach (var chat in Chats)
            {
                if (chat.AngebotViewModel.Angebot.Id == angebotVM.Angebot.Id)
                {
                    Open(chat);
                    return;
                }
            }

            var chatInfo = new ChatInfo();

            chatInfo.AngebotID            = angebotVM.Angebot.Id;
            chatInfo.NachrichtenAccess    = angebotVM.Angebot.NachrichtenAccess;
            chatInfo.GegenseiteAnbieterID = angebotVM.Angebot.AnbieterId;

            var chatVM = new ChatViewModel(chatInfo, Factory.GetChatPollingService(), Factory.GetChatService(), Factory.GetLoginService(), Factory.GetChatBufferService(), Factory.GetProfilService(), angebotVM.Angebot);

            Chats.Add(chatVM);
            Open(chatVM);
        }
Esempio n. 23
0
        public async Task ExecuteLoadChatsCommand()
        {
            IsBusy = true;

            try
            {
                Chats.Clear();
                var chats = await DataStore.GetChats(Local.LocalUser.Id);

                foreach (var chat in chats)
                {
                    Chats.Add(new ChatVM(chat, Local.LocalUser.Id));
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
            }
            finally
            {
                IsBusy = false;
            }
        }
Esempio n. 24
0
        private void Initialize()
        {
            if (Chats == null)
            {
                Chats = new ObservableCollection <IChat>();
            }

            imageService       = _generalDataService.GetService(SettingsRegistry.ServiceTitleImageSaver);
            ImageServiceConfig = imageService.Config;
            StatusToImagePath  = ImageServiceConfig.GetParameterValue("FilenameStatus") as string;

            ChatsView                      = CollectionViewSource.GetDefaultView(Chats) as ListCollectionView;
            ChatsView.CustomSort           = new SortViewerCount();
            _dataService.ChatStatusHandler = (chat) =>
            {
                UI.Dispatch(() => {
                    Chats.RemoveAll(item => item.ChatName == chat.ChatName);
                    if (chat.Enabled == true)
                    {
                        Chats.Add(chat);
                        chat.Status.PropertyChanged += (o, e) =>
                        {
                            if (ImageServiceConfig.Enabled)
                            {
                                IsNeedSave = true;
                                IsNeedSave = false;
                            }
                        };
                    }
                    if (ChatsView.NeedsRefresh)
                    {
                        ChatsView.Refresh();
                    }
                });
            };
            AppConfig = Ubiquitous.Default.Config.AppConfig;
        }
Esempio n. 25
0
        //属于命令ChatWithUserCommand
        private void ChatWithUser(object obj)
        {
            ChatListVisibility   = Visibility.Visible;
            ChatMainVisibility   = Visibility.Visible;
            FriendListVisibility = Visibility.Hidden;
            FriendMainVisibility = Visibility.Hidden;
            //查看有无现有聊天
            bool ExistChat = false;

            if (Chats.Count != 0)
            {
                var searchedChats = from c in Chats
                                    where c.Name == selectedUser.NickName
                                    select c;
                if (searchedChats.Count() != 0)
                {
                    ExistChat = true;
                }
            }

            //若已存在,则进入聊天
            if (ExistChat)
            {
                SelectedChat = (from c in Chats
                                where c.Name == selectedUser.NickName
                                select c).Single();
            }
            //若不存在,则创建聊天
            else
            {
                PrivateChat newPrivateChat = new PrivateChat(selectedUser);
                Chats.Add(newPrivateChat);
                SelectedChat = newPrivateChat;
                dataService.GetAllChats();
                Utilities.Messenger.Default.Send(new UpdateChatsMessage(Chats));
            }
        }
Esempio n. 26
0
        private void Initialize()
        {
            if (_dataService == null || Chats == null)
            {
                return;
            }

            if (Chats.Count > 0)
            {
                Chats.Clear();
            }

            foreach (var chat in _dataService.Chats.ToList())
            {
                if (chat is IChatUserList)
                {
                    Chats.Add(new ChatUserListViewModel()
                    {
                        Chat     = chat,
                        UserList = (chat as IChatUserList).ChatUsers,
                    });
                }
            }
        }
Esempio n. 27
0
 public MockMainViewModel()
 {
     Chats.Add(new MockPublicChatViewModel("Public"));
 }
Esempio n. 28
0
        public ApplicationContext()
        {
            Database.EnsureDeleted();
            Database.EnsureCreated();

            UserData user = new UserData();

            user.Login    = "******";
            user.Password = "******";

            Users.Add(user);
            UserData user1 = new UserData();

            user1.Login    = "******";
            user1.Password = "******";
            Users.Add(user1);

            UserData user2 = new UserData();

            user2.Login    = "******";
            user2.Password = "******";
            Users.Add(user2);
            SaveChanges();

            Token token = new Token();

            token.UserId  = user.Id;
            token.TokenId = "dferw";
            Tokens.Add(token);

            Token token1 = new Token();

            token1.UserId  = user1.Id;
            token1.TokenId = "2w3e4r";
            Tokens.Add(token1);

            Token token2 = new Token();

            token2.UserId  = user2.Id;
            token2.TokenId = "98765";
            Tokens.Add(token2);
            SaveChanges();

            Chat chat = new Chat();

            chat.Name   = "Geography";
            chat.UserId = user.Id;

            Chats.Add(chat);
            SaveChanges();

            UserChat userChat = new UserChat();

            userChat.ChatId = chat.Id;
            userChat.UserId = user.Id;
            UserChats.Add(userChat);
            SaveChanges();

            UserChat userChat1 = new UserChat();

            userChat1.ChatId = chat.Id;
            userChat1.UserId = user1.Id;
            UserChats.Add(userChat1);
            SaveChanges();

            UserChat userChat2 = new UserChat();

            userChat2.ChatId = chat.Id;
            userChat2.UserId = user2.Id;
            UserChats.Add(userChat2);
            SaveChanges();
        }
Esempio n. 29
0
        private void CallbackOnNeedUpdateChats(object sender, EventArgs e)
        {
            if (sender is UpdateChatsResult data)
            {
                lock (lockChat)
                {
                    if (!String.IsNullOrEmpty(SearchUserText))
                    {
                        return;
                    }

                    _users = data.Users;
                    if (SendToChat != null)
                    {
                        var removeChat = Chats.Where(x => x.Users.Count == 2).ToList();
                        foreach (var chat in removeChat)
                        {
                            Chats.Remove(chat);
                        }
                    }

                    foreach (var newChatData in data.Chats)
                    {
                        var oldChat = Chats.SingleOrDefault(x => x.ChatGuid == newChatData.ChatGuid);
                        if (oldChat != null)
                        {
                            oldChat.ChatName = newChatData.ChatName;
                            oldChat.Users.Clear();
                            foreach (var userGuid in newChatData.UserGuids)
                            {
                                if (userGuid == CurrentUser.Guid)
                                {
                                    continue;
                                }

                                var newUser = new UserModel();
                                var user    = data.Users.Single(x => x.Guid == userGuid);
                                newUser.Guid          = userGuid;
                                newUser.Login         = user.Login;
                                newUser.Name          = user.Name;
                                newUser.Surname       = user.Surname;
                                newUser.Patronymic    = user.Patronymic;
                                newUser.Email         = user.Email;
                                newUser.IsOnline      = user.IsOnline;
                                newUser.Position      = user.Position;
                                newUser.EmployeePhoto =
                                    ImageHelper.ByteToImageSource(user.EmployeePhoto) ?? _emptyPhoto;

                                oldChat.Users.Add(newUser);
                            }
                        }
                        else
                        {
                            ChatModel newChat = new ChatModel();
                            newChat.ChatGuid = newChatData.ChatGuid;
                            newChat.ChatName = newChatData.ChatName;

                            foreach (var userGuid in newChatData.UserGuids)
                            {
                                if (userGuid == CurrentUser.Guid)
                                {
                                    continue;
                                }

                                var newUser = new UserModel();
                                var user    = data.Users.Single(x => x.Guid == userGuid);
                                newUser.Guid          = userGuid;
                                newUser.Login         = user.Login;
                                newUser.Name          = user.Name;
                                newUser.Surname       = user.Surname;
                                newUser.Patronymic    = user.Patronymic;
                                newUser.Email         = user.Email;
                                newUser.IsOnline      = user.IsOnline;
                                newUser.Position      = user.Position;
                                newUser.EmployeePhoto =
                                    ImageHelper.ByteToImageSource(user.EmployeePhoto) ?? _emptyPhoto;

                                newChat.Users.Add(newUser);
                            }

                            Chats.Add(newChat);
                        }
                    }

                    _oldChatsModel = new ObservableCollection <ChatModel>();

                    if (Chats != null)
                    {
                        foreach (var chat in Chats)
                        {
                            _oldChatsModel.Add((ChatModel)chat.Clone());
                        }
                    }
                }
            }
        }
        public void CreateChat(string ConfigPrefix, string SourceChatId)
        {
            if (!Sources.ContainsKey(SourceChatId))
            {
                return;
            }

            RatChat.Core.IChatSource ichat = Activator.CreateInstance(Sources[SourceChatId]) as RatChat.Core.IChatSource;
            ichat.ConfigPrefix = ConfigPrefix;
            ichat.OnLoad(ChatConfigStorage);
            ichat.OnNewMessagesArrived += ichat_OnNewMessagesArrived;


            if (ichat.SmilesUri != null)
            {
                foreach (var smile in ichat.SmilesUri)
                {
                    SmilesDataDase.AddSmileTuple(smile.Key, smile.Value);
                }
            }

            UserControl customView = ichat.CreateCustomView();

            if (customView == null)
            {
                RatChat.Controls.VisualChatCtrl vchat = new Controls.VisualChatCtrl();
                vchat.Manager = this;
                vchat.Tag     = new Tuple <RatChat.Core.IChatSource, string>(ichat, SourceChatId);
                Chats.Add(vchat);
                vchat.ConnectToChatSource(ichat);
            }
            else
            {
                RatChat.Controls.CustomControlContainer vchat = new Controls.CustomControlContainer();
                vchat.Manager = this;
                vchat.Tag     = new Tuple <RatChat.Core.IChatSource, string>(ichat, SourceChatId);
                Chats.Add(vchat);
                vchat.ConnectToChatSource(customView, ichat);
            }


            RatChat.Core.IChatListener iListener = ichat as RatChat.Core.IChatListener;
            if (iListener != null)
            {
                // При добавлении Listener, ищу ВСЕ Source и подписываюсь
                foreach (FrameworkElement fe in Chats)
                {
                    RatChat.Core.IChatSource i = ((Tuple <RatChat.Core.IChatSource, string>)fe.Tag).Item1;
                    i.OnNewMessagesArrived += iListener.OnNewMessageReceived;
                }
            }
            else
            {
                // При добавлении Source, ищу ВСЕ Listeners и подписываю
                foreach (FrameworkElement fe in Chats)
                {
                    RatChat.Core.IChatSource   i  = ((Tuple <RatChat.Core.IChatSource, string>)fe.Tag).Item1;
                    RatChat.Core.IChatListener il = i as RatChat.Core.IChatListener;
                    if (il != null)
                    {
                        ichat.OnNewMessagesArrived += il.OnNewMessageReceived;
                    }
                    //i.OnNewMessagesArrived += iListener.OnNewMessageReceived;
                }
            }
        }