浏览代码

Use typed UserManager GetPreference

crobibero 4 年之前
父节点
当前提交
b670937c3d

+ 6 - 6
Emby.Server.Implementations/Library/UserViewManager.cs

@@ -129,23 +129,23 @@ namespace Emby.Server.Implementations.Library
 
             if (!query.IncludeHidden)
             {
-                list = list.Where(i => !user.GetPreference(PreferenceKind.MyMediaExcludes).Contains(i.Id.ToString("N", CultureInfo.InvariantCulture))).ToList();
+                list = list.Where(i => !user.GetPreference<Guid>(PreferenceKind.MyMediaExcludes).Contains(i.Id)).ToList();
             }
 
             var sorted = _libraryManager.Sort(list, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending).ToList();
 
-            var orders = user.GetPreference(PreferenceKind.OrderedViews).ToList();
+            var orders = user.GetPreference<Guid>(PreferenceKind.OrderedViews);
 
             return list
                 .OrderBy(i =>
                 {
-                    var index = orders.IndexOf(i.Id.ToString("D", CultureInfo.InvariantCulture));
+                    var index = Array.IndexOf(orders, i.Id);
 
                     if (index == -1
                         && i is UserView view
                         && view.DisplayParentId != Guid.Empty)
                     {
-                        index = orders.IndexOf(view.DisplayParentId.ToString("D", CultureInfo.InvariantCulture));
+                        index = Array.IndexOf(orders, view.DisplayParentId);
                     }
 
                     return index == -1 ? int.MaxValue : index;
@@ -280,8 +280,8 @@ namespace Emby.Server.Implementations.Library
             {
                 parents = _libraryManager.GetUserRootFolder().GetChildren(user, true)
                     .Where(i => i is Folder)
-                    .Where(i => !user.GetPreference(PreferenceKind.LatestItemExcludes)
-                        .Contains(i.Id.ToString("N", CultureInfo.InvariantCulture)))
+                    .Where(i => !user.GetPreference<Guid>(PreferenceKind.LatestItemExcludes)
+                        .Contains(i.Id))
                     .ToList();
             }
 

+ 1 - 2
Emby.Server.Implementations/TV/TVSeriesManager.cs

@@ -75,8 +75,7 @@ namespace Emby.Server.Implementations.TV
             {
                 parents = _libraryManager.GetUserRootFolder().GetChildren(user, true)
                    .Where(i => i is Folder)
-                   .Where(i => !user.GetPreference(PreferenceKind.LatestItemExcludes)
-                       .Contains(i.Id.ToString("N", CultureInfo.InvariantCulture)))
+                   .Where(i => !user.GetPreference<Guid>(PreferenceKind.LatestItemExcludes).Contains(i.Id))
                    .ToArray();
             }
 

+ 8 - 8
Jellyfin.Api/Controllers/ItemsController.cs

@@ -254,18 +254,18 @@ namespace Jellyfin.Api.Controllers
                 includeItemTypes = new[] { "Playlist" };
             }
 
-            bool isInEnabledFolder = user!.GetPreference(PreferenceKind.EnabledFolders).Any(i => new Guid(i) == item.Id)
+            var enabledChannels = user!.GetPreference<Guid>(PreferenceKind.EnabledChannels);
+
+            bool isInEnabledFolder = Array.IndexOf(user.GetPreference<Guid>(PreferenceKind.EnabledFolders), item.Id) != -1
                                      // Assume all folders inside an EnabledChannel are enabled
-                                     || user.GetPreference(PreferenceKind.EnabledChannels).Any(i => new Guid(i) == item.Id)
+                                     || Array.IndexOf(enabledChannels, item.Id) != -1
                                      // Assume all items inside an EnabledChannel are enabled
-                                     || user.GetPreference(PreferenceKind.EnabledChannels).Any(i => new Guid(i) == item.ChannelId);
+                                     || Array.IndexOf(enabledChannels, item.ChannelId) != -1;
 
             var collectionFolders = _libraryManager.GetCollectionFolders(item);
             foreach (var collectionFolder in collectionFolders)
             {
-                if (user.GetPreference(PreferenceKind.EnabledFolders).Contains(
-                    collectionFolder.Id.ToString("N", CultureInfo.InvariantCulture),
-                    StringComparer.OrdinalIgnoreCase))
+                if (user.GetPreference<Guid>(PreferenceKind.EnabledFolders).Contains(collectionFolder.Id))
                 {
                     isInEnabledFolder = true;
                 }
@@ -786,12 +786,12 @@ namespace Jellyfin.Api.Controllers
 
             var ancestorIds = Array.Empty<Guid>();
 
-            var excludeFolderIds = user.GetPreference(PreferenceKind.LatestItemExcludes);
+            var excludeFolderIds = user.GetPreference<Guid>(PreferenceKind.LatestItemExcludes);
             if (parentIdGuid.Equals(Guid.Empty) && excludeFolderIds.Length > 0)
             {
                 ancestorIds = _libraryManager.GetUserRootFolder().GetChildren(user, true)
                     .Where(i => i is Folder)
-                    .Where(i => !excludeFolderIds.Contains(i.Id.ToString("N", CultureInfo.InvariantCulture)))
+                    .Where(i => !excludeFolderIds.Contains(i.Id))
                     .Select(i => i.Id)
                     .ToArray();
             }

+ 34 - 2
Jellyfin.Data/Entities/User.cs

@@ -2,6 +2,7 @@
 
 using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
 using System.Globalization;
@@ -413,6 +414,25 @@ 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[] GetPreference<T>(PreferenceKind preference)
+        {
+            var val = Preferences.First(p => p.Kind == preference).Value;
+            if (string.IsNullOrEmpty(val))
+            {
+                return Array.Empty<T>();
+            }
+
+            var converter = TypeDescriptor.GetConverter(typeof(T));
+            var stringValues = val.Split(Delimiter);
+            return Array.ConvertAll(stringValues, value => (T)converter.ConvertFromString(value));
+        }
+
         /// <summary>
         /// Sets the specified preference to the given value.
         /// </summary>
@@ -421,7 +441,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 +473,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(GetPreference<Guid>(PreferenceKind.GroupedFolders), id) != -1;
         }
 
         private static bool IsParentalScheduleAllowed(AccessSchedule schedule, DateTime date)

+ 8 - 10
Jellyfin.Server.Implementations/Users/UserManager.cs

@@ -376,14 +376,14 @@ namespace Jellyfin.Server.Implementations.Users
                     EnablePublicSharing = user.HasPermission(PermissionKind.EnablePublicSharing),
                     AccessSchedules = user.AccessSchedules.ToArray(),
                     BlockedTags = user.GetPreference(PreferenceKind.BlockedTags),
-                    EnabledChannels = user.GetPreference(PreferenceKind.EnabledChannels)?.Select(Guid.Parse).ToArray(),
+                    EnabledChannels = user.GetPreference<Guid>(PreferenceKind.EnabledChannels),
                     EnabledDevices = user.GetPreference(PreferenceKind.EnabledDevices),
-                    EnabledFolders = user.GetPreference(PreferenceKind.EnabledFolders)?.Select(Guid.Parse).ToArray(),
+                    EnabledFolders = user.GetPreference<Guid>(PreferenceKind.EnabledFolders),
                     EnableContentDeletionFromFolders = user.GetPreference(PreferenceKind.EnableContentDeletionFromFolders),
                     SyncPlayAccess = user.SyncPlayAccess,
-                    BlockedChannels = user.GetPreference(PreferenceKind.BlockedChannels)?.Select(Guid.Parse).ToArray(),
-                    BlockedMediaFolders = user.GetPreference(PreferenceKind.BlockedMediaFolders)?.Select(Guid.Parse).ToArray(),
-                    BlockUnratedItems = user.GetPreference(PreferenceKind.BlockUnratedItems).Select(Enum.Parse<UnratedItem>).ToArray()
+                    BlockedChannels = user.GetPreference<Guid>(PreferenceKind.BlockedChannels),
+                    BlockedMediaFolders = user.GetPreference<Guid>(PreferenceKind.BlockedMediaFolders),
+                    BlockUnratedItems = user.GetPreference<UnratedItem>(PreferenceKind.BlockUnratedItems)
                 }
             };
         }
@@ -704,13 +704,11 @@ namespace Jellyfin.Server.Implementations.Users
             }
 
             // TODO: fix this at some point
-            user.SetPreference(
-                PreferenceKind.BlockUnratedItems,
-                policy.BlockUnratedItems?.Select(i => i.ToString()).ToArray() ?? Array.Empty<string>());
+            user.SetPreference(PreferenceKind.BlockUnratedItems, policy.BlockUnratedItems ?? Array.Empty<UnratedItem>());
             user.SetPreference(PreferenceKind.BlockedTags, policy.BlockedTags);
-            user.SetPreference(PreferenceKind.EnabledChannels, policy.EnabledChannels?.Select(i => i.ToString("N", CultureInfo.InvariantCulture)).ToArray());
+            user.SetPreference(PreferenceKind.EnabledChannels, policy.EnabledChannels);
             user.SetPreference(PreferenceKind.EnabledDevices, policy.EnabledDevices);
-            user.SetPreference(PreferenceKind.EnabledFolders, policy.EnabledFolders?.Select(i => i.ToString("N", CultureInfo.InvariantCulture)).ToArray());
+            user.SetPreference(PreferenceKind.EnabledFolders, policy.EnabledFolders);
             user.SetPreference(PreferenceKind.EnableContentDeletionFromFolders, policy.EnableContentDeletionFromFolders);
 
             dbContext.Update(user);

+ 2 - 2
Jellyfin.Server/Migrations/Routines/MigrateUserDb.cs

@@ -168,9 +168,9 @@ namespace Jellyfin.Server.Migrations.Routines
                     }
 
                     user.SetPreference(PreferenceKind.BlockedTags, policy.BlockedTags);
-                    user.SetPreference(PreferenceKind.EnabledChannels, policy.EnabledChannels?.Select(i => i.ToString("N", CultureInfo.InvariantCulture)).ToArray());
+                    user.SetPreference(PreferenceKind.EnabledChannels, policy.EnabledChannels);
                     user.SetPreference(PreferenceKind.EnabledDevices, policy.EnabledDevices);
-                    user.SetPreference(PreferenceKind.EnabledFolders, policy.EnabledFolders?.Select(i => i.ToString("N", CultureInfo.InvariantCulture)).ToArray());
+                    user.SetPreference(PreferenceKind.EnabledFolders, policy.EnabledFolders);
                     user.SetPreference(PreferenceKind.EnableContentDeletionFromFolders, policy.EnableContentDeletionFromFolders);
                     user.SetPreference(PreferenceKind.OrderedViews, config.OrderedViews);
                     user.SetPreference(PreferenceKind.GroupedFolders, config.GroupedFolders);

+ 4 - 4
MediaBrowser.Controller/Channels/Channel.cs

@@ -17,9 +17,10 @@ namespace MediaBrowser.Controller.Channels
     {
         public override bool IsVisible(User user)
         {
-            if (user.GetPreference(PreferenceKind.BlockedChannels) != null)
+            var blockedChannelsPreference = user.GetPreference<Guid>(PreferenceKind.BlockedChannels);
+            if (blockedChannelsPreference.Length != 0)
             {
-                if (user.GetPreference(PreferenceKind.BlockedChannels).Contains(Id.ToString("N", CultureInfo.InvariantCulture), StringComparer.OrdinalIgnoreCase))
+                if (blockedChannelsPreference.Contains(Id))
                 {
                     return false;
                 }
@@ -27,8 +28,7 @@ namespace MediaBrowser.Controller.Channels
             else
             {
                 if (!user.HasPermission(PermissionKind.EnableAllChannels)
-                    && !user.GetPreference(PreferenceKind.EnabledChannels)
-                        .Contains(Id.ToString("N", CultureInfo.InvariantCulture), StringComparer.OrdinalIgnoreCase))
+                    && !user.GetPreference<Guid>(PreferenceKind.EnabledChannels).Contains(Id))
                 {
                     return false;
                 }

+ 1 - 1
MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs

@@ -120,7 +120,7 @@ namespace MediaBrowser.Controller.Entities.Audio
 
         protected override bool GetBlockUnratedValue(User user)
         {
-            return user.GetPreference(PreferenceKind.BlockUnratedItems).Contains(UnratedItem.Music.ToString());
+            return user.GetPreference<UnratedItem>(PreferenceKind.BlockUnratedItems).Contains(UnratedItem.Music);
         }
 
         public override UnratedItem GetBlockUnratedType()

+ 1 - 1
MediaBrowser.Controller/Entities/Audio/MusicArtist.cs

@@ -145,7 +145,7 @@ namespace MediaBrowser.Controller.Entities.Audio
 
         protected override bool GetBlockUnratedValue(User user)
         {
-            return user.GetPreference(PreferenceKind.BlockUnratedItems).Contains(UnratedItem.Music.ToString());
+            return user.GetPreference<UnratedItem>(PreferenceKind.BlockUnratedItems).Contains(UnratedItem.Music);
         }
 
         public override UnratedItem GetBlockUnratedType()

+ 4 - 4
MediaBrowser.Controller/Entities/BaseItem.cs

@@ -480,11 +480,11 @@ namespace MediaBrowser.Controller.Entities
                 return true;
             }
 
-            var allowed = user.GetPreference(PreferenceKind.EnableContentDeletionFromFolders);
+            var allowed = user.GetPreference<Guid>(PreferenceKind.EnableContentDeletionFromFolders);
 
             if (SourceType == SourceType.Channel)
             {
-                return allowed.Contains(ChannelId.ToString(""), StringComparer.OrdinalIgnoreCase);
+                return allowed.Contains(ChannelId);
             }
             else
             {
@@ -492,7 +492,7 @@ namespace MediaBrowser.Controller.Entities
 
                 foreach (var folder in collectionFolders)
                 {
-                    if (allowed.Contains(folder.Id.ToString("N", CultureInfo.InvariantCulture), StringComparer.OrdinalIgnoreCase))
+                    if (allowed.Contains(folder.Id))
                     {
                         return true;
                     }
@@ -1909,7 +1909,7 @@ namespace MediaBrowser.Controller.Entities
                 return false;
             }
 
-            return user.GetPreference(PreferenceKind.BlockUnratedItems).Contains(GetBlockUnratedType().ToString());
+            return user.GetPreference<UnratedItem>(PreferenceKind.BlockUnratedItems).Contains(GetBlockUnratedType());
         }
 
         /// <summary>

+ 1 - 1
MediaBrowser.Controller/Entities/Movies/BoxSet.cs

@@ -49,7 +49,7 @@ namespace MediaBrowser.Controller.Entities.Movies
 
         protected override bool GetBlockUnratedValue(User user)
         {
-            return user.GetPreference(PreferenceKind.BlockUnratedItems).Contains(UnratedItem.Movie.ToString());
+            return user.GetPreference<UnratedItem>(PreferenceKind.BlockUnratedItems).Contains(UnratedItem.Movie);
         }
 
         public override double GetDefaultPrimaryImageAspectRatio()

+ 1 - 1
MediaBrowser.Controller/Entities/TV/Series.cs

@@ -452,7 +452,7 @@ namespace MediaBrowser.Controller.Entities.TV
 
         protected override bool GetBlockUnratedValue(User user)
         {
-            return user.GetPreference(PreferenceKind.BlockUnratedItems).Contains(UnratedItem.Series.ToString());
+            return user.GetPreference<UnratedItem>(PreferenceKind.BlockUnratedItems).Contains(UnratedItem.Series);
         }
 
         public override UnratedItem GetBlockUnratedType()