Browse Source

Reduce amount of raw sql

Bond_009 6 years ago
parent
commit
d961278b3d

+ 13 - 10
Emby.Server.Implementations/Data/SqliteUserRepository.cs

@@ -75,10 +75,8 @@ namespace Emby.Server.Implementations.Data
 
         private void RemoveEmptyPasswordHashes(ManagedConnection connection)
         {
-            foreach (var row in connection.Query("select id,guid,data from LocalUsersv2"))
+            foreach (var user in RetrieveAllUsers(connection))
             {
-                var user = GetUser(row);
-
                 // If the user password is the sha1 hash of the empty string, remove it
                 if (!string.Equals(user.Password, "DA39A3EE5E6B4B0D3255BFEF95601890AFD80709", StringComparison.Ordinal)
                     && !string.Equals(user.Password, "$SHA1$DA39A3EE5E6B4B0D3255BFEF95601890AFD80709", StringComparison.Ordinal))
@@ -198,17 +196,22 @@ namespace Emby.Server.Implementations.Data
         /// <returns>IEnumerable{User}.</returns>
         public List<User> RetrieveAllUsers()
         {
-            var list = new List<User>();
-
             using (var connection = GetConnection(true))
             {
-                foreach (var row in connection.Query("select id,guid,data from LocalUsersv2"))
-                {
-                    list.Add(GetUser(row));
-                }
+                return new List<User>(RetrieveAllUsers(connection));
             }
+        }
 
-            return list;
+        /// <summary>
+        /// Retrieve all users from the database
+        /// </summary>
+        /// <returns>IEnumerable{User}.</returns>
+        private IEnumerable<User> RetrieveAllUsers(ManagedConnection connection)
+        {
+            foreach (var row in connection.Query("select id,guid,data from LocalUsersv2"))
+            {
+                yield return GetUser(row);
+            }
         }
 
         /// <summary>

+ 21 - 21
Emby.Server.Implementations/Library/UserManager.cs

@@ -222,9 +222,8 @@ namespace Emby.Server.Implementations.Library
 
         public void Initialize()
         {
-            _users = LoadUsers();
-
-            var users = Users.ToList();
+            var users = LoadUsers();
+            _users = users.ToArray();
 
             // If there are no local users with admin rights, make them all admins
             if (!users.Any(i => i.Policy.IsAdministrator))
@@ -555,35 +554,36 @@ namespace Emby.Server.Implementations.Library
         /// Loads the users from the repository
         /// </summary>
         /// <returns>IEnumerable{User}.</returns>
-        private User[] LoadUsers()
+        private List<User> LoadUsers()
         {
             var users = UserRepository.RetrieveAllUsers();
 
             // There always has to be at least one user.
-            if (users.Count == 0)
+            if (users.Count != 0)
             {
-                var defaultName = Environment.UserName;
-                if (string.IsNullOrWhiteSpace(defaultName))
-                {
-                    defaultName = "MyJellyfinUser";
-                }
-                var name = MakeValidUsername(defaultName);
+                return users;
+            }
 
-                var user = InstantiateNewUser(name);
+            var defaultName = Environment.UserName;
+            if (string.IsNullOrWhiteSpace(defaultName))
+            {
+                defaultName = "MyJellyfinUser";
+            }
 
-                user.DateLastSaved = DateTime.UtcNow;
+            var name = MakeValidUsername(defaultName);
 
-                UserRepository.CreateUser(user);
+            var user = InstantiateNewUser(name);
+
+            user.DateLastSaved = DateTime.UtcNow;
 
-                users.Add(user);
+            UserRepository.CreateUser(user);
 
-                user.Policy.IsAdministrator = true;
-                user.Policy.EnableContentDeletion = true;
-                user.Policy.EnableRemoteControlOfOtherUsers = true;
-                UpdateUserPolicy(user, user.Policy, false);
-            }
+            user.Policy.IsAdministrator = true;
+            user.Policy.EnableContentDeletion = true;
+            user.Policy.EnableRemoteControlOfOtherUsers = true;
+            UpdateUserPolicy(user, user.Policy, false);
 
-            return users.ToArray();
+            return new List<User> { user };
         }
 
         public UserDto GetUserDto(User user, string remoteEndPoint = null)