Переглянути джерело

#22 - Need to strip html tags from overviews

LukePulverenti 12 роки тому
батько
коміт
0cc0fbbe43

+ 4 - 4
MediaBrowser.Api/Library/LibraryService.cs

@@ -134,7 +134,7 @@ namespace MediaBrowser.Api.Library
             // Get everything
             var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true));
 
-            var result = new DtoBuilder(Logger).GetBaseItemDto(item, fields.ToList(), _libraryManager).Result;
+            var result = new DtoBuilder(Logger, _libraryManager).GetBaseItemDto(item, fields.ToList()).Result;
 
             return ToOptimizedResult(result);
         }
@@ -151,7 +151,7 @@ namespace MediaBrowser.Api.Library
             // Get everything
             var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true));
 
-            var result = new DtoBuilder(Logger).GetBaseItemDto(item, fields.ToList(), _libraryManager).Result;
+            var result = new DtoBuilder(Logger, _libraryManager).GetBaseItemDto(item, fields.ToList()).Result;
 
             return ToOptimizedResult(result);
         }
@@ -168,7 +168,7 @@ namespace MediaBrowser.Api.Library
             // Get everything
             var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true));
 
-            var result = new DtoBuilder(Logger).GetBaseItemDto(item, fields.ToList(), _libraryManager).Result;
+            var result = new DtoBuilder(Logger, _libraryManager).GetBaseItemDto(item, fields.ToList()).Result;
 
             return ToOptimizedResult(result);
         }
@@ -185,7 +185,7 @@ namespace MediaBrowser.Api.Library
             // Get everything
             var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true));
 
-            var result = new DtoBuilder(Logger).GetBaseItemDto(item, fields.ToList(), _libraryManager).Result;
+            var result = new DtoBuilder(Logger, _libraryManager).GetBaseItemDto(item, fields.ToList()).Result;
 
             return ToOptimizedResult(result);
         }

+ 1 - 1
MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs

@@ -150,7 +150,7 @@ namespace MediaBrowser.Api.UserLibrary
                 return null;
             }
 
-            var dto = await new DtoBuilder(Logger).GetBaseItemDto(item, user, fields, LibraryManager).ConfigureAwait(false);
+            var dto = await new DtoBuilder(Logger, LibraryManager).GetBaseItemDto(item, user, fields).ConfigureAwait(false);
 
             dto.ChildCount = stub.Item2();
 

+ 1 - 1
MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs

@@ -52,7 +52,7 @@ namespace MediaBrowser.Api.UserLibrary
         /// Fields to return within the items, in addition to basic information
         /// </summary>
         /// <value>The fields.</value>
-        [ApiMember(Name = "Fields", Description = "Optional. Specify additional fields of information to return in the output. This allows multiple, comma delimeted. Options: AudioInfo, Chapters, DateCreated, DisplayMediaType, DisplayPreferences, Genres, ItemCounts, IndexOptions, MediaStreams, Overview, ParentId, Path, People, ProviderIds, PrimaryImageAspectRatio, SeriesInfo, SortName, Studios, Taglines, TrailerUrls, UserData", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)]
+        [ApiMember(Name = "Fields", Description = "Optional. Specify additional fields of information to return in the output. This allows multiple, comma delimeted. Options: AudioInfo, Chapters, DateCreated, DisplayMediaType, DisplayPreferences, Genres, ItemCounts, IndexOptions, MediaStreams, Overview, OverviewHtml, ParentId, Path, People, ProviderIds, PrimaryImageAspectRatio, SeriesInfo, SortName, Studios, Taglines, TrailerUrls, UserData", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)]
         public string Fields { get; set; }
     }
 }

+ 2 - 2
MediaBrowser.Api/UserLibrary/ItemsService.cs

@@ -169,9 +169,9 @@ namespace MediaBrowser.Api.UserLibrary
 
             var fields = GetItemFields(request).ToList();
 
-            var dtoBuilder = new DtoBuilder(Logger);
+            var dtoBuilder = new DtoBuilder(Logger, _libraryManager);
 
-            var returnItems = await Task.WhenAll(pagedItems.Select(i => dtoBuilder.GetBaseItemDto(i, user, fields, _libraryManager))).ConfigureAwait(false);
+            var returnItems = await Task.WhenAll(pagedItems.Select(i => dtoBuilder.GetBaseItemDto(i, user, fields))).ConfigureAwait(false);
 
             return new ItemsResult
             {

+ 8 - 8
MediaBrowser.Api/UserLibrary/UserLibraryService.cs

@@ -383,9 +383,9 @@ namespace MediaBrowser.Api.UserLibrary
 
             var movie = (Movie)item;
 
-            var dtoBuilder = new DtoBuilder(Logger);
+            var dtoBuilder = new DtoBuilder(Logger, _libraryManager);
 
-            var items = movie.SpecialFeatures.Select(i => dtoBuilder.GetBaseItemDto(i, user, fields, _libraryManager)).AsParallel().Select(t => t.Result).ToList();
+            var items = movie.SpecialFeatures.Select(i => dtoBuilder.GetBaseItemDto(i, user, fields)).AsParallel().Select(t => t.Result).ToList();
 
             return ToOptimizedResult(items);
         }
@@ -404,9 +404,9 @@ namespace MediaBrowser.Api.UserLibrary
             // Get everything
             var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)).ToList();
 
-            var dtoBuilder = new DtoBuilder(Logger);
+            var dtoBuilder = new DtoBuilder(Logger, _libraryManager);
 
-            var items = item.LocalTrailers.Select(i => dtoBuilder.GetBaseItemDto(i, user, fields, _libraryManager)).AsParallel().Select(t => t.Result).ToList();
+            var items = item.LocalTrailers.Select(i => dtoBuilder.GetBaseItemDto(i, user, fields)).AsParallel().Select(t => t.Result).ToList();
 
             return ToOptimizedResult(items);
         }
@@ -425,9 +425,9 @@ namespace MediaBrowser.Api.UserLibrary
             // Get everything
             var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)).ToList();
 
-            var dtoBuilder = new DtoBuilder(Logger);
+            var dtoBuilder = new DtoBuilder(Logger, _libraryManager);
 
-            var result = dtoBuilder.GetBaseItemDto(item, user, fields, _libraryManager).Result;
+            var result = dtoBuilder.GetBaseItemDto(item, user, fields).Result;
 
             return ToOptimizedResult(result);
         }
@@ -441,9 +441,9 @@ namespace MediaBrowser.Api.UserLibrary
             // Get everything
             var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)).ToList();
 
-            var dtoBuilder = new DtoBuilder(Logger);
+            var dtoBuilder = new DtoBuilder(Logger, _libraryManager);
 
-            var result = dtoBuilder.GetBaseItemDto(item, user, fields, _libraryManager).Result;
+            var result = dtoBuilder.GetBaseItemDto(item, user, fields).Result;
 
             return ToOptimizedResult(result);
         }

+ 8 - 6
MediaBrowser.Api/UserService.cs

@@ -137,13 +137,14 @@ namespace MediaBrowser.Api
         /// The _user manager
         /// </summary>
         private readonly IUserManager _userManager;
-        
+        private readonly ILibraryManager _libraryManager;
+
         /// <summary>
         /// Initializes a new instance of the <see cref="UserService" /> class.
         /// </summary>
         /// <param name="xmlSerializer">The XML serializer.</param>
         /// <exception cref="System.ArgumentNullException">xmlSerializer</exception>
-        public UserService(IXmlSerializer xmlSerializer, IUserManager userManager)
+        public UserService(IXmlSerializer xmlSerializer, IUserManager userManager, ILibraryManager libraryManager)
             : base()
         {
             if (xmlSerializer == null)
@@ -153,6 +154,7 @@ namespace MediaBrowser.Api
 
             _xmlSerializer = xmlSerializer;
             _userManager = userManager;
+            _libraryManager = libraryManager;
         }
 
         /// <summary>
@@ -162,7 +164,7 @@ namespace MediaBrowser.Api
         /// <returns>System.Object.</returns>
         public object Get(GetUsers request)
         {
-            var dtoBuilder = new DtoBuilder(Logger);
+            var dtoBuilder = new DtoBuilder(Logger, _libraryManager);
 
             var tasks = _userManager.Users.OrderBy(u => u.Name).Select(dtoBuilder.GetUserDto).ToArray();
 
@@ -185,7 +187,7 @@ namespace MediaBrowser.Api
                 throw new ResourceNotFoundException("User not found");
             }
 
-            var result = new DtoBuilder(Logger).GetUserDto(user).Result;
+            var result = new DtoBuilder(Logger, _libraryManager).GetUserDto(user).Result;
 
             return ToOptimizedResult(result);
         }
@@ -298,8 +300,8 @@ namespace MediaBrowser.Api
             var newUser = _userManager.CreateUser(dtoUser.Name).Result;
 
             newUser.UpdateConfiguration(dtoUser.Configuration, _xmlSerializer);
-            
-            var result = new DtoBuilder(Logger).GetUserDto(newUser).Result;
+
+            var result = new DtoBuilder(Logger, _libraryManager).GetUserDto(newUser).Result;
 
             return ToOptimizedResult(result);
         }

+ 13 - 0
MediaBrowser.Common/Extensions/BaseExtensions.cs

@@ -3,6 +3,7 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Security.Cryptography;
 using System.Text;
+using System.Text.RegularExpressions;
 
 namespace MediaBrowser.Common.Extensions
 {
@@ -43,6 +44,18 @@ namespace MediaBrowser.Common.Extensions
             return val.Split(new[] { separator }, options);
         }
 
+        /// <summary>
+        /// Strips the HTML.
+        /// </summary>
+        /// <param name="htmlString">The HTML string.</param>
+        /// <returns>System.String.</returns>
+        public static string StripHtml(this string htmlString)
+        {
+            // http://stackoverflow.com/questions/1349023/how-can-i-strip-html-from-text-in-net
+            const string pattern = @"<(.|\n)*?>";
+            return Regex.Replace(htmlString, pattern, string.Empty);
+        }
+        
         /// <summary>
         /// Shuffles an IEnumerable
         /// </summary>

+ 17 - 10
MediaBrowser.Controller/Library/DtoBuilder.cs

@@ -1,4 +1,5 @@
-using MediaBrowser.Controller.Entities;
+using MediaBrowser.Common.Extensions;
+using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Entities.Movies;
 using MediaBrowser.Controller.Entities.TV;
@@ -6,12 +7,12 @@ using MediaBrowser.Model.Drawing;
 using MediaBrowser.Model.Dto;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Logging;
+using MediaBrowser.Model.Querying;
 using System;
 using System.Collections.Generic;
 using System.IO;
 using System.Linq;
 using System.Threading.Tasks;
-using MediaBrowser.Model.Querying;
 
 namespace MediaBrowser.Controller.Library
 {
@@ -26,10 +27,12 @@ namespace MediaBrowser.Controller.Library
         const string IndexFolderDelimeter = "-index-";
 
         private readonly ILogger _logger;
+        private readonly ILibraryManager _libraryManager;
 
-        public DtoBuilder(ILogger logger)
+        public DtoBuilder(ILogger logger, ILibraryManager libraryManager)
         {
             _logger = logger;
+            _libraryManager = libraryManager;
         }
 
         /// <summary>
@@ -39,7 +42,7 @@ namespace MediaBrowser.Controller.Library
         /// <param name="fields">The fields.</param>
         /// <returns>Task{DtoBaseItem}.</returns>
         /// <exception cref="System.ArgumentNullException">item</exception>
-        public async Task<BaseItemDto> GetBaseItemDto(BaseItem item, List<ItemFields> fields, ILibraryManager libraryManager)
+        public async Task<BaseItemDto> GetBaseItemDto(BaseItem item, List<ItemFields> fields)
         {
             if (item == null)
             {
@@ -74,7 +77,7 @@ namespace MediaBrowser.Controller.Library
 
             if (fields.Contains(ItemFields.People))
             {
-                tasks.Add(AttachPeople(dto, item, libraryManager));
+                tasks.Add(AttachPeople(dto, item));
             }
 
             AttachBasicFields(dto, item, fields);
@@ -94,10 +97,9 @@ namespace MediaBrowser.Controller.Library
         /// <param name="item">The item.</param>
         /// <param name="user">The user.</param>
         /// <param name="fields">The fields.</param>
-        /// <param name="libraryManager">The library manager.</param>
         /// <returns>Task{DtoBaseItem}.</returns>
         /// <exception cref="System.ArgumentNullException">item</exception>
-        public async Task<BaseItemDto> GetBaseItemDto(BaseItem item, User user, List<ItemFields> fields, ILibraryManager libraryManager)
+        public async Task<BaseItemDto> GetBaseItemDto(BaseItem item, User user, List<ItemFields> fields)
         {
             if (item == null)
             {
@@ -136,7 +138,7 @@ namespace MediaBrowser.Controller.Library
 
             if (fields.Contains(ItemFields.People))
             {
-                tasks.Add(AttachPeople(dto, item, libraryManager));
+                tasks.Add(AttachPeople(dto, item));
             }
 
             AttachBasicFields(dto, item, fields);
@@ -296,6 +298,11 @@ namespace MediaBrowser.Controller.Library
                 dto.Overview = item.Overview;
             }
 
+            if (fields.Contains(ItemFields.OverviewHtml))
+            {
+                dto.OverviewHtml = string.IsNullOrEmpty(item.Overview) ? item.Overview : item.Overview.StripHtml();
+            }
+            
             // If there are no backdrops, indicate what parent has them in case the Ui wants to allow inheritance
             if (dto.BackdropImageTags.Count == 0)
             {
@@ -515,7 +522,7 @@ namespace MediaBrowser.Controller.Library
         /// <param name="item">The item.</param>
         /// <param name="libraryManager">The library manager.</param>
         /// <returns>Task.</returns>
-        private async Task AttachPeople(BaseItemDto dto, BaseItem item, ILibraryManager libraryManager)
+        private async Task AttachPeople(BaseItemDto dto, BaseItem item)
         {
             if (item.People == null)
             {
@@ -531,7 +538,7 @@ namespace MediaBrowser.Controller.Library
                     {
                         try
                         {
-                            return await libraryManager.GetPerson(c.Name).ConfigureAwait(false);
+                            return await _libraryManager.GetPerson(c.Name).ConfigureAwait(false);
                         }
                         catch (IOException ex)
                         {

+ 1 - 2
MediaBrowser.Controller/Providers/MediaInfo/BaseFFProbeProvider.cs

@@ -2,14 +2,13 @@
 using MediaBrowser.Controller.Configuration;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.MediaInfo;
-using MediaBrowser.Controller.Persistence;
 using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.Logging;
 using System;
 using System.Collections.Generic;
 using System.IO;
 using System.Threading;
 using System.Threading.Tasks;
-using MediaBrowser.Model.Logging;
 
 namespace MediaBrowser.Controller.Providers.MediaInfo
 {

+ 1 - 1
MediaBrowser.Controller/Providers/Music/LastfmBaseProvider.cs

@@ -54,7 +54,7 @@ namespace MediaBrowser.Controller.Providers.Music
         {
             get
             {
-                return "3-12-13.2";
+                return "3-12-13.3";
             }
         }
 

+ 2 - 23
MediaBrowser.Controller/Providers/Music/LastfmHelper.cs

@@ -1,11 +1,7 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Threading.Tasks;
+using MediaBrowser.Common.Extensions;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Model.Entities;
+using System;
 
 namespace MediaBrowser.Controller.Providers.Music
 {
@@ -18,11 +14,6 @@ namespace MediaBrowser.Controller.Providers.Music
         {
             var overview = data.bio != null ? data.bio.content : null;
 
-            if (!string.IsNullOrEmpty(overview))
-            {
-                overview = StripHtml(overview);
-            }
-
             artist.Overview = overview;
 
             var yearFormed = 0;
@@ -53,11 +44,6 @@ namespace MediaBrowser.Controller.Providers.Music
 
             var overview = data.wiki != null ? data.wiki.content : null;
 
-            if (!string.IsNullOrEmpty(overview))
-            {
-                overview = StripHtml(overview);
-            }
-
             item.Overview = overview;
 
             var release = DateTime.MinValue;
@@ -70,13 +56,6 @@ namespace MediaBrowser.Controller.Providers.Music
             }
         }
 
-        private static string StripHtml(string htmlString)
-        {
-            // http://stackoverflow.com/questions/1349023/how-can-i-strip-html-from-text-in-net
-            const string pattern = @"<(.|\n)*?>";
-            return Regex.Replace(htmlString, pattern, string.Empty);
-        }
-
         private static void AddGenres(BaseItem item, LastfmTags tags)
         {
             foreach (var tag in tags.tag)

+ 7 - 0
MediaBrowser.Model/DTO/BaseItemDto.cs

@@ -426,6 +426,13 @@ namespace MediaBrowser.Model.Dto
         [ProtoMember(69)]
         public string MediaType { get; set; }
 
+        /// <summary>
+        /// Gets or sets the overview HTML.
+        /// </summary>
+        /// <value>The overview HTML.</value>
+        [ProtoMember(70)]
+        public string OverviewHtml { get; set; }
+        
         /// <summary>
         /// Gets a value indicating whether this instance can resume.
         /// </summary>

+ 5 - 0
MediaBrowser.Model/Querying/ItemFields.cs

@@ -51,6 +51,11 @@ namespace MediaBrowser.Model.Querying
         /// </summary>
         Overview,
 
+        /// <summary>
+        /// The overview HTML
+        /// </summary>
+        OverviewHtml,
+        
         /// <summary>
         /// The id of the item's parent
         /// </summary>

+ 1 - 1
MediaBrowser.ServerApplication/EntryPoints/WebSocketEvents.cs

@@ -174,7 +174,7 @@ namespace MediaBrowser.ServerApplication.EntryPoints
         /// <param name="e">The e.</param>
         async void userManager_UserUpdated(object sender, GenericEventArgs<User> e)
         {
-            var dto = await new DtoBuilder(_logger).GetUserDto(e.Argument).ConfigureAwait(false);
+            var dto = await new DtoBuilder(_logger, _libraryManager).GetUserDto(e.Argument).ConfigureAwait(false);
 
             _serverManager.SendWebSocketMessage("UserUpdated", dto);
         }

+ 2 - 1
MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs

@@ -35,6 +35,7 @@ namespace MediaBrowser.WebDashboard.Api
         /// The _user manager
         /// </summary>
         private readonly IUserManager _userManager;
+        private readonly ILibraryManager _libraryManager;
 
         /// <summary>
         /// Initializes a new instance of the <see cref="DashboardInfoWebSocketListener" /> class.
@@ -57,7 +58,7 @@ namespace MediaBrowser.WebDashboard.Api
         /// <returns>Task{IEnumerable{TaskInfo}}.</returns>
         protected override Task<DashboardInfo> GetDataToSend(object state)
         {
-            return DashboardService.GetDashboardInfo(_appHost, Logger, _taskManager, _userManager);
+            return DashboardService.GetDashboardInfo(_appHost, Logger, _taskManager, _userManager, _libraryManager);
         }
     }
 }

+ 6 - 4
MediaBrowser.WebDashboard/Api/DashboardService.cs

@@ -91,17 +91,19 @@ namespace MediaBrowser.WebDashboard.Api
         private readonly IUserManager _userManager;
 
         private readonly IServerApplicationHost _appHost;
+        private readonly ILibraryManager _libraryManager;
 
         /// <summary>
         /// Initializes a new instance of the <see cref="DashboardService" /> class.
         /// </summary>
         /// <param name="taskManager">The task manager.</param>
         /// <param name="userManager">The user manager.</param>
-        public DashboardService(ITaskManager taskManager, IUserManager userManager, IServerApplicationHost appHost)
+        public DashboardService(ITaskManager taskManager, IUserManager userManager, IServerApplicationHost appHost, ILibraryManager libraryManager)
         {
             _taskManager = taskManager;
             _userManager = userManager;
             _appHost = appHost;
+            _libraryManager = libraryManager;
         }
 
         /// <summary>
@@ -111,7 +113,7 @@ namespace MediaBrowser.WebDashboard.Api
         /// <returns>System.Object.</returns>
         public object Get(GetDashboardInfo request)
         {
-            return GetDashboardInfo(_appHost, Logger, _taskManager, _userManager).Result;
+            return GetDashboardInfo(_appHost, Logger, _taskManager, _userManager, _libraryManager).Result;
         }
 
         /// <summary>
@@ -121,11 +123,11 @@ namespace MediaBrowser.WebDashboard.Api
         /// <param name="taskManager">The task manager.</param>
         /// <param name="userManager">The user manager.</param>
         /// <returns>DashboardInfo.</returns>
-        public static async Task<DashboardInfo> GetDashboardInfo(IServerApplicationHost appHost, ILogger logger, ITaskManager taskManager, IUserManager userManager)
+        public static async Task<DashboardInfo> GetDashboardInfo(IServerApplicationHost appHost, ILogger logger, ITaskManager taskManager, IUserManager userManager, ILibraryManager libraryManager)
         {
             var connections = userManager.ConnectedUsers.ToArray();
 
-            var dtoBuilder = new DtoBuilder(logger);
+            var dtoBuilder = new DtoBuilder(logger, libraryManager);
 
             var tasks = userManager.Users.Where(u => connections.Any(c => c.UserId == u.Id)).Select(dtoBuilder.GetUserDto);
             var users = await Task.WhenAll(tasks).ConfigureAwait(false);

+ 3 - 0
MediaBrowser.sln

@@ -237,4 +237,7 @@ Global
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
 	EndGlobalSection
+	GlobalSection(Performance) = preSolution
+		HasPerformanceSessions = true
+	EndGlobalSection
 EndGlobal