|
@@ -2,9 +2,9 @@
|
|
|
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
+using System.ComponentModel;
|
|
|
using System.ComponentModel.DataAnnotations;
|
|
|
using System.ComponentModel.DataAnnotations.Schema;
|
|
|
-using System.Globalization;
|
|
|
using System.Linq;
|
|
|
using System.Text.Json.Serialization;
|
|
|
using Jellyfin.Data.Enums;
|
|
@@ -413,6 +413,44 @@ namespace Jellyfin.Data.Entities
|
|
|
return Equals(val, string.Empty) ? Array.Empty<string>() : val.Split(Delimiter);
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// Gets the user's preferences for the given preference kind.
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="preference">The preference kind.</param>
|
|
|
+ /// <typeparam name="T">Type of preference.</typeparam>
|
|
|
+ /// <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;
|
|
|
+ if (string.IsNullOrEmpty(val))
|
|
|
+ {
|
|
|
+ return Array.Empty<T>();
|
|
|
+ }
|
|
|
+
|
|
|
+ // Convert array of {string} to array of {T}
|
|
|
+ var converter = TypeDescriptor.GetConverter(typeof(T));
|
|
|
+ var stringValues = val.Split(Delimiter);
|
|
|
+ var convertedCount = 0;
|
|
|
+ var parsedValues = new T[stringValues.Length];
|
|
|
+ for (var i = 0; i < stringValues.Length; i++)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ var parsedValue = converter.ConvertFromString(stringValues[i].Trim());
|
|
|
+ if (parsedValue != null)
|
|
|
+ {
|
|
|
+ parsedValues[convertedCount++] = (T)parsedValue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (FormatException)
|
|
|
+ {
|
|
|
+ // Unable to convert value
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return parsedValues[..convertedCount];
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// Sets the specified preference to the given value.
|
|
|
/// </summary>
|
|
@@ -421,7 +459,19 @@ namespace Jellyfin.Data.Entities
|
|
|
public void SetPreference(PreferenceKind preference, string[] values)
|
|
|
{
|
|
|
Preferences.First(p => p.Kind == preference).Value
|
|
|
- = string.Join(Delimiter.ToString(CultureInfo.InvariantCulture), values);
|
|
|
+ = string.Join(Delimiter, values);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// Sets the specified preference to the given value.
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="preference">The preference kind.</param>
|
|
|
+ /// <param name="values">The values.</param>
|
|
|
+ /// <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);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -441,7 +491,7 @@ namespace Jellyfin.Data.Entities
|
|
|
/// <returns><c>True</c> if the folder is in the user's grouped folders.</returns>
|
|
|
public bool IsFolderGrouped(Guid id)
|
|
|
{
|
|
|
- return GetPreference(PreferenceKind.GroupedFolders).Any(i => new Guid(i) == id);
|
|
|
+ return Array.IndexOf(GetPreferenceValues<Guid>(PreferenceKind.GroupedFolders), id) != -1;
|
|
|
}
|
|
|
|
|
|
private static bool IsParentalScheduleAllowed(AccessSchedule schedule, DateTime date)
|