#22 - Need to strip html tags from overviews

pull/702/head
LukePulverenti 11 years ago
parent 6b327581c6
commit 0cc0fbbe43

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

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

@ -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; }
}
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Loading…
Cancel
Save