diff options
| author | Claus Vium <cvium@users.noreply.github.com> | 2022-03-28 23:02:42 +0200 |
|---|---|---|
| committer | Joshua Boniface <joshua@boniface.me> | 2022-03-29 02:24:51 -0400 |
| commit | a6273253c352adb9a1e1cfcbe187d8b596656e9f (patch) | |
| tree | 52cea7d7b650863908539f34f6e1a71a48cab847 | |
| parent | e778877f558bee526b3b4a952e19bebcf560f464 (diff) | |
Merge pull request #7506 from crobibero/set-permissions
Safely get/set User permission/preference
(cherry picked from commit d2ce315c1dd229c0a0d6c996ee5399e12cec7457)
Signed-off-by: Joshua Boniface <joshua@boniface.me>
| -rw-r--r-- | Jellyfin.Data/Entities/User.cs | 42 |
1 files changed, 33 insertions, 9 deletions
diff --git a/Jellyfin.Data/Entities/User.cs b/Jellyfin.Data/Entities/User.cs index e309e54de..26c46a704 100644 --- a/Jellyfin.Data/Entities/User.cs +++ b/Jellyfin.Data/Entities/User.cs @@ -362,7 +362,7 @@ namespace Jellyfin.Data.Entities /// <returns><c>True</c> if the user has the specified permission.</returns> public bool HasPermission(PermissionKind kind) { - return Permissions.First(p => p.Kind == kind).Value; + return Permissions.FirstOrDefault(p => p.Kind == kind)?.Value ?? false; } /// <summary> @@ -372,7 +372,15 @@ namespace Jellyfin.Data.Entities /// <param name="value">The value to set.</param> public void SetPermission(PermissionKind kind, bool value) { - Permissions.First(p => p.Kind == kind).Value = value; + var currentPermission = Permissions.FirstOrDefault(p => p.Kind == kind); + if (currentPermission == null) + { + Permissions.Add(new Permission(kind, value)); + } + else + { + currentPermission.Value = value; + } } /// <summary> @@ -382,9 +390,9 @@ namespace Jellyfin.Data.Entities /// <returns>A string array containing the user's preferences.</returns> public string[] GetPreference(PreferenceKind preference) { - var val = Preferences.First(p => p.Kind == preference).Value; + var val = Preferences.FirstOrDefault(p => p.Kind == preference)?.Value; - return Equals(val, string.Empty) ? Array.Empty<string>() : val.Split(Delimiter); + return string.IsNullOrEmpty(val) ? Array.Empty<string>() : val.Split(Delimiter); } /// <summary> @@ -395,7 +403,7 @@ namespace Jellyfin.Data.Entities /// <returns>A {T} array containing the user's preference.</returns> public T[] GetPreferenceValues<T>(PreferenceKind preference) { - var val = Preferences.First(p => p.Kind == preference).Value; + var val = Preferences.FirstOrDefault(p => p.Kind == preference)?.Value; if (string.IsNullOrEmpty(val)) { return Array.Empty<T>(); @@ -432,8 +440,16 @@ namespace Jellyfin.Data.Entities /// <param name="values">The values.</param> public void SetPreference(PreferenceKind preference, string[] values) { - Preferences.First(p => p.Kind == preference).Value - = string.Join(Delimiter, values); + var value = string.Join(Delimiter, values); + var currentPreference = Preferences.FirstOrDefault(p => p.Kind == preference); + if (currentPreference == null) + { + Preferences.Add(new Preference(preference, value)); + } + else + { + currentPreference.Value = value; + } } /// <summary> @@ -444,8 +460,16 @@ namespace Jellyfin.Data.Entities /// <typeparam name="T">The type of value.</typeparam> public void SetPreference<T>(PreferenceKind preference, T[] values) { - Preferences.First(p => p.Kind == preference).Value - = string.Join(Delimiter, values); + var value = string.Join(Delimiter, values); + var currentPreference = Preferences.FirstOrDefault(p => p.Kind == preference); + if (currentPreference == null) + { + Preferences.Add(new Preference(preference, value)); + } + else + { + currentPreference.Value = value; + } } /// <summary> |
