|
|
|
@ -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)
|
|
|
|
|