From 1a04a0b2cb5e04a9ee721d6f65b030f529aba1b2 Mon Sep 17 00:00:00 2001
From: GabrielTofvesson <gabriel.tofvesson@gmail.com>
Date: Tue, 15 May 2018 23:37:09 +0200
Subject: [PATCH] Fix serverside "list" command

---
 Client/Context/IntroContext.cs |  4 ----
 Server/Database.cs             | 27 +++++++++++++--------------
 2 files changed, 13 insertions(+), 18 deletions(-)

diff --git a/Client/Context/IntroContext.cs b/Client/Context/IntroContext.cs
index 6934145..2e3acae 100644
--- a/Client/Context/IntroContext.cs
+++ b/Client/Context/IntroContext.cs
@@ -1,8 +1,4 @@
 using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using Client.ConsoleForms;
 using Client.ConsoleForms.Graphics;
 
diff --git a/Server/Database.cs b/Server/Database.cs
index b85ed4a..5da55f4 100644
--- a/Server/Database.cs
+++ b/Server/Database.cs
@@ -317,28 +317,18 @@ namespace Server
         public User[] Users(Predicate<User> p)
         {
             List<User> l = new List<User>();
+
+            // Get changed users
             foreach (var entry in changeList)
                 if (p(entry))
                     l.Add(entry);
 
+            // Get loaded users
             foreach(var entry in loadedUsers)
                 if (!l.Contains(entry) && p(entry))
                     l.Add(entry);
 
-            /*
-            using (var reader = XmlReader.Create(DatabaseName))
-            {
-                if (!Traverse(reader, MasterEntry)) return null;
-                
-                while (((reader.NodeType==XmlNodeType.Element && reader.Name.Equals("User")) || SkipSpaces(reader)) && reader.NodeType != XmlNodeType.EndElement)
-                {
-                    if (reader.NodeType == XmlNodeType.EndElement) break;
-                    User e = User.Parse(ReadEntry(reader), this);
-                    if (e!=null && !l.Contains(e = FromEncoded(e)) && p(e)) l.Add(e);
-                }
-            }
-            */
-
+            // Get from database
             using (var reader = XmlReader.Create(DatabaseName))
             {
                 if (!Traverse(reader, MasterEntry)) return null;
@@ -355,6 +345,15 @@ namespace Server
                 }
             }
 
+            // Remove users scheduled for eviction
+            foreach(var user in toRemove)
+                for(int i = l.Count - 1; i>=0; --i)
+                    if (l[i].Name.Equals(user.Name))
+                    {
+                        l.RemoveAt(i);
+                        i = -1;
+                    }
+
             return l.ToArray();
         }