#22 - Need to strip html tags from overviews

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

@ -134,7 +134,7 @@ namespace MediaBrowser.Api.Library
// Get everything // Get everything
var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)); 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); return ToOptimizedResult(result);
} }
@ -151,7 +151,7 @@ namespace MediaBrowser.Api.Library
// Get everything // Get everything
var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)); 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); return ToOptimizedResult(result);
} }
@ -168,7 +168,7 @@ namespace MediaBrowser.Api.Library
// Get everything // Get everything
var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)); 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); return ToOptimizedResult(result);
} }
@ -185,7 +185,7 @@ namespace MediaBrowser.Api.Library
// Get everything // Get everything
var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)); 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); return ToOptimizedResult(result);
} }

@ -150,7 +150,7 @@ namespace MediaBrowser.Api.UserLibrary
return null; 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(); dto.ChildCount = stub.Item2();

@ -52,7 +52,7 @@ namespace MediaBrowser.Api.UserLibrary
/// Fields to return within the items, in addition to basic information /// Fields to return within the items, in addition to basic information
/// </summary> /// </summary>
/// <value>The fields.</value> /// <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; } public string Fields { get; set; }
} }
} }

@ -169,9 +169,9 @@ namespace MediaBrowser.Api.UserLibrary
var fields = GetItemFields(request).ToList(); 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 return new ItemsResult
{ {

@ -383,9 +383,9 @@ namespace MediaBrowser.Api.UserLibrary
var movie = (Movie)item; 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); return ToOptimizedResult(items);
} }
@ -404,9 +404,9 @@ namespace MediaBrowser.Api.UserLibrary
// Get everything // Get everything
var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)).ToList(); 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); return ToOptimizedResult(items);
} }
@ -425,9 +425,9 @@ namespace MediaBrowser.Api.UserLibrary
// Get everything // Get everything
var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)).ToList(); 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); return ToOptimizedResult(result);
} }
@ -441,9 +441,9 @@ namespace MediaBrowser.Api.UserLibrary
// Get everything // Get everything
var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)).ToList(); 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); return ToOptimizedResult(result);
} }

@ -137,13 +137,14 @@ namespace MediaBrowser.Api
/// The _user manager /// The _user manager
/// </summary> /// </summary>
private readonly IUserManager _userManager; private readonly IUserManager _userManager;
private readonly ILibraryManager _libraryManager;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="UserService" /> class. /// Initializes a new instance of the <see cref="UserService" /> class.
/// </summary> /// </summary>
/// <param name="xmlSerializer">The XML serializer.</param> /// <param name="xmlSerializer">The XML serializer.</param>
/// <exception cref="System.ArgumentNullException">xmlSerializer</exception> /// <exception cref="System.ArgumentNullException">xmlSerializer</exception>
public UserService(IXmlSerializer xmlSerializer, IUserManager userManager) public UserService(IXmlSerializer xmlSerializer, IUserManager userManager, ILibraryManager libraryManager)
: base() : base()
{ {
if (xmlSerializer == null) if (xmlSerializer == null)
@ -153,6 +154,7 @@ namespace MediaBrowser.Api
_xmlSerializer = xmlSerializer; _xmlSerializer = xmlSerializer;
_userManager = userManager; _userManager = userManager;
_libraryManager = libraryManager;
} }
/// <summary> /// <summary>
@ -162,7 +164,7 @@ namespace MediaBrowser.Api
/// <returns>System.Object.</returns> /// <returns>System.Object.</returns>
public object Get(GetUsers request) 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(); 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"); 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); return ToOptimizedResult(result);
} }
@ -299,7 +301,7 @@ namespace MediaBrowser.Api
newUser.UpdateConfiguration(dtoUser.Configuration, _xmlSerializer); 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); return ToOptimizedResult(result);
} }

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Security.Cryptography; using System.Security.Cryptography;
using System.Text; using System.Text;
using System.Text.RegularExpressions;
namespace MediaBrowser.Common.Extensions namespace MediaBrowser.Common.Extensions
{ {
@ -43,6 +44,18 @@ namespace MediaBrowser.Common.Extensions
return val.Split(new[] { separator }, options); 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> /// <summary>
/// Shuffles an IEnumerable /// Shuffles an IEnumerable
/// </summary> /// </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.Audio;
using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Entities.TV;
@ -6,12 +7,12 @@ using MediaBrowser.Model.Drawing;
using MediaBrowser.Model.Dto; using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Querying;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Model.Querying;
namespace MediaBrowser.Controller.Library namespace MediaBrowser.Controller.Library
{ {
@ -26,10 +27,12 @@ namespace MediaBrowser.Controller.Library
const string IndexFolderDelimeter = "-index-"; const string IndexFolderDelimeter = "-index-";
private readonly ILogger _logger; private readonly ILogger _logger;
private readonly ILibraryManager _libraryManager;
public DtoBuilder(ILogger logger) public DtoBuilder(ILogger logger, ILibraryManager libraryManager)
{ {
_logger = logger; _logger = logger;
_libraryManager = libraryManager;
} }
/// <summary> /// <summary>
@ -39,7 +42,7 @@ namespace MediaBrowser.Controller.Library
/// <param name="fields">The fields.</param> /// <param name="fields">The fields.</param>
/// <returns>Task{DtoBaseItem}.</returns> /// <returns>Task{DtoBaseItem}.</returns>
/// <exception cref="System.ArgumentNullException">item</exception> /// <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) if (item == null)
{ {
@ -74,7 +77,7 @@ namespace MediaBrowser.Controller.Library
if (fields.Contains(ItemFields.People)) if (fields.Contains(ItemFields.People))
{ {
tasks.Add(AttachPeople(dto, item, libraryManager)); tasks.Add(AttachPeople(dto, item));
} }
AttachBasicFields(dto, item, fields); AttachBasicFields(dto, item, fields);
@ -94,10 +97,9 @@ namespace MediaBrowser.Controller.Library
/// <param name="item">The item.</param> /// <param name="item">The item.</param>
/// <param name="user">The user.</param> /// <param name="user">The user.</param>
/// <param name="fields">The fields.</param> /// <param name="fields">The fields.</param>
/// <param name="libraryManager">The library manager.</param>
/// <returns>Task{DtoBaseItem}.</returns> /// <returns>Task{DtoBaseItem}.</returns>
/// <exception cref="System.ArgumentNullException">item</exception> /// <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) if (item == null)
{ {
@ -136,7 +138,7 @@ namespace MediaBrowser.Controller.Library
if (fields.Contains(ItemFields.People)) if (fields.Contains(ItemFields.People))
{ {
tasks.Add(AttachPeople(dto, item, libraryManager)); tasks.Add(AttachPeople(dto, item));
} }
AttachBasicFields(dto, item, fields); AttachBasicFields(dto, item, fields);
@ -296,6 +298,11 @@ namespace MediaBrowser.Controller.Library
dto.Overview = item.Overview; 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 there are no backdrops, indicate what parent has them in case the Ui wants to allow inheritance
if (dto.BackdropImageTags.Count == 0) if (dto.BackdropImageTags.Count == 0)
{ {
@ -515,7 +522,7 @@ namespace MediaBrowser.Controller.Library
/// <param name="item">The item.</param> /// <param name="item">The item.</param>
/// <param name="libraryManager">The library manager.</param> /// <param name="libraryManager">The library manager.</param>
/// <returns>Task.</returns> /// <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) if (item.People == null)
{ {
@ -531,7 +538,7 @@ namespace MediaBrowser.Controller.Library
{ {
try try
{ {
return await libraryManager.GetPerson(c.Name).ConfigureAwait(false); return await _libraryManager.GetPerson(c.Name).ConfigureAwait(false);
} }
catch (IOException ex) catch (IOException ex)
{ {

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

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

@ -1,11 +1,7 @@
using System; using MediaBrowser.Common.Extensions;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using System;
namespace MediaBrowser.Controller.Providers.Music namespace MediaBrowser.Controller.Providers.Music
{ {
@ -18,11 +14,6 @@ namespace MediaBrowser.Controller.Providers.Music
{ {
var overview = data.bio != null ? data.bio.content : null; var overview = data.bio != null ? data.bio.content : null;
if (!string.IsNullOrEmpty(overview))
{
overview = StripHtml(overview);
}
artist.Overview = overview; artist.Overview = overview;
var yearFormed = 0; var yearFormed = 0;
@ -53,11 +44,6 @@ namespace MediaBrowser.Controller.Providers.Music
var overview = data.wiki != null ? data.wiki.content : null; var overview = data.wiki != null ? data.wiki.content : null;
if (!string.IsNullOrEmpty(overview))
{
overview = StripHtml(overview);
}
item.Overview = overview; item.Overview = overview;
var release = DateTime.MinValue; 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) private static void AddGenres(BaseItem item, LastfmTags tags)
{ {
foreach (var tag in tags.tag) foreach (var tag in tags.tag)

@ -426,6 +426,13 @@ namespace MediaBrowser.Model.Dto
[ProtoMember(69)] [ProtoMember(69)]
public string MediaType { get; set; } 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> /// <summary>
/// Gets a value indicating whether this instance can resume. /// Gets a value indicating whether this instance can resume.
/// </summary> /// </summary>

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

@ -174,7 +174,7 @@ namespace MediaBrowser.ServerApplication.EntryPoints
/// <param name="e">The e.</param> /// <param name="e">The e.</param>
async void userManager_UserUpdated(object sender, GenericEventArgs<User> e) 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); _serverManager.SendWebSocketMessage("UserUpdated", dto);
} }

@ -35,6 +35,7 @@ namespace MediaBrowser.WebDashboard.Api
/// The _user manager /// The _user manager
/// </summary> /// </summary>
private readonly IUserManager _userManager; private readonly IUserManager _userManager;
private readonly ILibraryManager _libraryManager;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="DashboardInfoWebSocketListener" /> class. /// Initializes a new instance of the <see cref="DashboardInfoWebSocketListener" /> class.
@ -57,7 +58,7 @@ namespace MediaBrowser.WebDashboard.Api
/// <returns>Task{IEnumerable{TaskInfo}}.</returns> /// <returns>Task{IEnumerable{TaskInfo}}.</returns>
protected override Task<DashboardInfo> GetDataToSend(object state) 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 IUserManager _userManager;
private readonly IServerApplicationHost _appHost; private readonly IServerApplicationHost _appHost;
private readonly ILibraryManager _libraryManager;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="DashboardService" /> class. /// Initializes a new instance of the <see cref="DashboardService" /> class.
/// </summary> /// </summary>
/// <param name="taskManager">The task manager.</param> /// <param name="taskManager">The task manager.</param>
/// <param name="userManager">The user 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; _taskManager = taskManager;
_userManager = userManager; _userManager = userManager;
_appHost = appHost; _appHost = appHost;
_libraryManager = libraryManager;
} }
/// <summary> /// <summary>
@ -111,7 +113,7 @@ namespace MediaBrowser.WebDashboard.Api
/// <returns>System.Object.</returns> /// <returns>System.Object.</returns>
public object Get(GetDashboardInfo request) public object Get(GetDashboardInfo request)
{ {
return GetDashboardInfo(_appHost, Logger, _taskManager, _userManager).Result; return GetDashboardInfo(_appHost, Logger, _taskManager, _userManager, _libraryManager).Result;
} }
/// <summary> /// <summary>
@ -121,11 +123,11 @@ namespace MediaBrowser.WebDashboard.Api
/// <param name="taskManager">The task manager.</param> /// <param name="taskManager">The task manager.</param>
/// <param name="userManager">The user manager.</param> /// <param name="userManager">The user manager.</param>
/// <returns>DashboardInfo.</returns> /// <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 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 tasks = userManager.Users.Where(u => connections.Any(c => c.UserId == u.Id)).Select(dtoBuilder.GetUserDto);
var users = await Task.WhenAll(tasks).ConfigureAwait(false); var users = await Task.WhenAll(tasks).ConfigureAwait(false);

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

Loading…
Cancel
Save