aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaus Vium <cvium@users.noreply.github.com>2022-03-28 23:02:42 +0200
committerJoshua Boniface <joshua@boniface.me>2022-03-29 02:24:51 -0400
commita6273253c352adb9a1e1cfcbe187d8b596656e9f (patch)
tree52cea7d7b650863908539f34f6e1a71a48cab847
parente778877f558bee526b3b4a952e19bebcf560f464 (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.cs42
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>