예제 #1
0
        public void UpdateList()
        {
            lock (this)
            {
                //SuspendLayout();

                List <ConnectionInfo> serversList;
                lock (Engine.Instance.Connections)
                {
                    serversList = Engine.Instance.GetConnections(ShowAll);
                }

                Dictionary <string, ConnectionInfo> servers = new Dictionary <string, ConnectionInfo>();
                foreach (ConnectionInfo infoServer in serversList)
                {
                    servers[infoServer.Code] = infoServer;
                }

                foreach (ConnectionInfo infoServer in servers.Values)
                {
                    if (ItemsServers.ContainsKey(infoServer.Code) == false)
                    {
                        Controls.ListViewItemServer listItemServer = new Controls.ListViewItemServer();
                        listItemServer.Info = infoServer;
                        listItemServer.Update();
                        ItemsServers.Add(infoServer.Code, listItemServer);
                        Items.Add(listItemServer); // TOFIX: Mono impressive slow. 'Show all' took around 5 seconds to add 150 items.
                    }
                    else
                    {
                        Controls.ListViewItemServer listItemServer = ItemsServers[infoServer.Code] as ListViewItemServer;
                        listItemServer.Update();
                    }
                }

                List <ListViewItemServer> itemsToRemove = new List <ListViewItemServer>();

                foreach (ListViewItemServer viewItem in ItemsServers.Values)
                {
                    if (servers.ContainsKey(viewItem.Info.Code) == false)
                    {
                        itemsToRemove.Add(viewItem);
                    }
                }

                if (itemsToRemove.Count > 0)
                {
                    if (Platform.IsWindows())
                    {
                        foreach (ListViewItemServer viewItem in itemsToRemove)
                        {
                            Items.Remove(viewItem);
                            ItemsServers.Remove(viewItem.Info.Code);
                        }
                    }
                    else
                    {
                        // Mono workaround to avoid a crash, like this: http://sourceforge.net/p/keepass/bugs/1314/
                        // Reproduce the crash by whitelist some server and switch "Show all" continuosly.
                        List <ListViewItemServer> items = new List <ListViewItemServer>();
                        foreach (ListViewItemServer itemCurrent in Items)
                        {
                            if (itemsToRemove.Contains(itemCurrent) == false)
                            {
                                items.Add(itemCurrent);
                            }
                        }
                        Items.Clear();
                        ItemsServers.Clear();
                        foreach (ListViewItemServer itemCurrent in items)
                        {
                            ItemsServers.Add(itemCurrent.Info.Code, itemCurrent);
                            Items.Add(itemCurrent);
                        }
                    }
                }

                Sort();

                //ResumeLayout();
            }
        }
예제 #2
0
		public void UpdateList()
		{
			lock (this)
			{
				//SuspendLayout();

				List<ServerInfo> servers;
				lock (Engine.Instance.Servers)
				{
					servers = Engine.Instance.GetServers(ShowAll);
				}

				foreach (ServerInfo infoServer in servers)
				{
					if (ItemsServers.ContainsKey(infoServer.Name) == false)
					{
						Controls.ListViewItemServer listItemServer = new Controls.ListViewItemServer();
						listItemServer.Name = infoServer.Name;
						listItemServer.Info = infoServer;
						listItemServer.Update();
						ItemsServers.Add(infoServer.Name, listItemServer);
						Items.Add(listItemServer);
					}
					else
					{
						Controls.ListViewItemServer listItemServer = ItemsServers[infoServer.Name] as ListViewItemServer;
						listItemServer.Update();
					}
				}

				List<ListViewItemServer> itemsToRemove = new List<ListViewItemServer>();

				foreach (ListViewItemServer viewItem in ItemsServers.Values)
				{
					if (servers.Contains(viewItem.Info) == false)
					{
						itemsToRemove.Add(viewItem);
					}
				}

				if (Platform.IsWindows())
				{
					foreach (ListViewItemServer viewItem in itemsToRemove)
					{
						Items.Remove(viewItem);
						ItemsServers.Remove(viewItem.Info.Name);
					}
				}
				else
				{
					// Mono workaround to avoid a crash, like this: http://sourceforge.net/p/keepass/bugs/1314/
					List<ListViewItemServer> items = new List<ListViewItemServer>();
					foreach (ListViewItemServer itemCurrent in Items)
					{
						if (itemsToRemove.Contains(itemCurrent) == false)
							items.Add(itemCurrent);
					}
					Items.Clear();
					ItemsServers.Clear();
					foreach (ListViewItemServer itemCurrent in items)
					{
						ItemsServers.Add(itemCurrent.Info.Name, itemCurrent);
						Items.Add(itemCurrent);
					}
				}

				Sort();

				//ResumeLayout();
			}
		}
예제 #3
0
        public void UpdateList()
        {
            lock (this)
            {
                //SuspendLayout();

                List <ServerInfo> servers;
                lock (Engine.Instance.Servers)
                {
                    servers = Engine.Instance.GetServers(ShowAll);
                }

                foreach (ServerInfo infoServer in servers)
                {
                    if (ItemsServers.ContainsKey(infoServer.Name) == false)
                    {
                        Controls.ListViewItemServer listItemServer = new Controls.ListViewItemServer();
                        listItemServer.Name = infoServer.Name;
                        listItemServer.Info = infoServer;
                        listItemServer.Update();
                        ItemsServers.Add(infoServer.Name, listItemServer);
                        Items.Add(listItemServer);
                    }
                    else
                    {
                        Controls.ListViewItemServer listItemServer = ItemsServers[infoServer.Name] as ListViewItemServer;
                        listItemServer.Update();
                    }
                }

                List <ListViewItemServer> itemsToRemove = new List <ListViewItemServer>();

                foreach (ListViewItemServer viewItem in ItemsServers.Values)
                {
                    if (servers.Contains(viewItem.Info) == false)
                    {
                        itemsToRemove.Add(viewItem);
                    }
                }

                if (Platform.IsWindows())
                {
                    foreach (ListViewItemServer viewItem in itemsToRemove)
                    {
                        Items.Remove(viewItem);
                        ItemsServers.Remove(viewItem.Info.Name);
                    }
                }
                else
                {
                    // Mono workaround to avoid a crash, like this: http://sourceforge.net/p/keepass/bugs/1314/
                    List <ListViewItemServer> items = new List <ListViewItemServer>();
                    foreach (ListViewItemServer itemCurrent in Items)
                    {
                        if (itemsToRemove.Contains(itemCurrent) == false)
                        {
                            items.Add(itemCurrent);
                        }
                    }
                    Items.Clear();
                    ItemsServers.Clear();
                    foreach (ListViewItemServer itemCurrent in items)
                    {
                        ItemsServers.Add(itemCurrent.Info.Name, itemCurrent);
                        Items.Add(itemCurrent);
                    }
                }

                Sort();

                //ResumeLayout();
            }
        }
예제 #4
0
        public void UpdateList()
        {
            lock (this)
            {
                //SuspendLayout();

                List<ServerInfo> serversList;
                lock (Engine.Instance.Servers)
                {
                    serversList = Engine.Instance.GetServers(ShowAll);
                }

                Dictionary<string, ServerInfo> servers = new Dictionary<string, ServerInfo>();
                foreach (ServerInfo infoServer in serversList)
                {
                    servers[infoServer.Code] = infoServer;
                }

                foreach (ServerInfo infoServer in servers.Values)
                {
                    if (ItemsServers.ContainsKey(infoServer.Code) == false)
                    {
                        Controls.ListViewItemServer listItemServer = new Controls.ListViewItemServer();
                        listItemServer.Info = infoServer;
                        listItemServer.Update();
                        ItemsServers.Add(infoServer.Code, listItemServer);
                        Items.Add(listItemServer); // TOFIX: Mono impressive slow. 'Show all' took around 5 seconds to add 150 items.
                    }
                    else
                    {
                        Controls.ListViewItemServer listItemServer = ItemsServers[infoServer.Code] as ListViewItemServer;
                        listItemServer.Update();
                    }
                }

                List<ListViewItemServer> itemsToRemove = new List<ListViewItemServer>();

                foreach (ListViewItemServer viewItem in ItemsServers.Values)
                {
                    if (servers.ContainsKey(viewItem.Info.Code) == false)
                    {
                        itemsToRemove.Add(viewItem);
                    }
                }

                if (itemsToRemove.Count > 0)
                {
                    if (Platform.IsWindows())
                    {
                        foreach (ListViewItemServer viewItem in itemsToRemove)
                        {
                            Items.Remove(viewItem);
                            ItemsServers.Remove(viewItem.Info.Code);
                        }
                    }
                    else
                    {
                        // Mono workaround to avoid a crash, like this: http://sourceforge.net/p/keepass/bugs/1314/
                        // Reproduce the crash by whitelist some server and switch "Show all" continuosly.
                        List<ListViewItemServer> items = new List<ListViewItemServer>();
                        foreach (ListViewItemServer itemCurrent in Items)
                        {
                            if (itemsToRemove.Contains(itemCurrent) == false)
                                items.Add(itemCurrent);
                        }
                        Items.Clear();
                        ItemsServers.Clear();
                        foreach (ListViewItemServer itemCurrent in items)
                        {
                            ItemsServers.Add(itemCurrent.Info.Code, itemCurrent);
                            Items.Add(itemCurrent);
                        }
                    }
                }

                Sort();

                //ResumeLayout();
            }
        }