public void Initialize(Controls.ChatsControl ChatsControl, string LayoutStore)
        {
            ChatConfigStorage.Load(LayoutStore);

            foreach (string file in Directory.GetFiles(App.RootFolder + "/Chats/", "*.dll"))
            {
                try {
                    Assembly a = Assembly.LoadFile(file);
                    foreach (Type t in a.GetTypes())
                    {
                        Type iface = t.GetInterface("RatChat.Core.IChatSource");
                        if (iface != null)
                        {
                            var v = RatChat.Core.ChatNameAttribute.GetAttribute(t);
                            if (v != null)
                            {
                                Sources[v.Name] = t;
                            }
                            else
                            {
                                //Sources[Path.GetFileNameWithoutExtension(file)] = t;
                            }
                        }
                    }
                } catch {
                    //////
                }
            }

            RestoreChats(ChatsControl);
        }
        public void OnChatClosed(FrameworkElement vChat)
        {
            var data = vChat.Tag as Tuple <RatChat.Core.IChatSource, string>;

            data.Item1.OnNewMessagesArrived -= ichat_OnNewMessagesArrived;
            data.Item1.EndWork();


            RatChat.Core.IChatListener iListener = data.Item1 as RatChat.Core.IChatListener;
            if (iListener == null)
            {
                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)
                    {
                        data.Item1.OnNewMessagesArrived -= il.OnNewMessageReceived;
                    }
                    //i.OnNewMessagesArrived += iListener.OnNewMessageReceived;
                }
            }
            else
            {
                foreach (FrameworkElement fe in Chats)
                {
                    RatChat.Core.IChatSource i = ((Tuple <RatChat.Core.IChatSource, string>)fe.Tag).Item1;
                    i.OnNewMessagesArrived -= iListener.OnNewMessageReceived;
                }
            }

            Chats.Remove(vChat);

            ChatConfigStorage.RemoveWithPrefix(data.Item1.ConfigPrefix);
        }
        public void RestoreChats(Controls.ChatsControl ChatsControl)
        {
            string Settings = ChatConfigStorage.GetDefault("ChatManager.UberChatList", "");

            if (string.IsNullOrEmpty(Settings))
            {
                return;
            }

            string[] chats = Settings.Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries);

            for (int j = 0; j < chats.Length; ++j)
            {
                string[] vals = chats[j].Split('=');
                CreateChat(vals[1], vals[0]);

                if (vals.Length > 2)
                {
                    ChatsControl.SetChatHeightByIndex(j, double.Parse(vals[2], CultureInfo.InvariantCulture));
                }
            }
        }