From dbf6081a9b5eb80cc96e0551e5631e2b1890a14c Mon Sep 17 00:00:00 2001 From: LukePulverenti Date: Fri, 8 Mar 2013 11:40:01 -0500 Subject: [PATCH] Add PrimaryImageAspectRatio to user dto --- MediaBrowser.Api/Library/LibraryService.cs | 8 +++---- .../UserLibrary/BaseItemsByNameService.cs | 2 +- MediaBrowser.Api/UserLibrary/ItemsService.cs | 2 +- .../UserLibrary/UserLibraryService.cs | 6 ++--- MediaBrowser.Api/UserService.cs | 10 ++++---- MediaBrowser.Controller/Library/DtoBuilder.cs | 24 +++++++++++++------ MediaBrowser.Model/DTO/BaseItemDto.cs | 2 +- MediaBrowser.Model/DTO/UserDto.cs | 9 ++++++- MediaBrowser.Model/Dto/IItemDto.cs | 8 +++++++ MediaBrowser.Model/MediaBrowser.Model.csproj | 1 + .../HttpServer/BaseRestService.cs | 2 +- .../EntryPoints/WebSocketEvents.cs | 6 +++-- .../MainWindow.xaml | 2 ++ .../MainWindow.xaml.cs | 5 ++++ .../Api/DashboardInfoWebSocketListener.cs | 2 +- .../Api/DashboardService.cs | 9 ++++--- 16 files changed, 69 insertions(+), 29 deletions(-) create mode 100644 MediaBrowser.Model/Dto/IItemDto.cs diff --git a/MediaBrowser.Api/Library/LibraryService.cs b/MediaBrowser.Api/Library/LibraryService.cs index 39cbe64901..5e705f5d8f 100644 --- a/MediaBrowser.Api/Library/LibraryService.cs +++ b/MediaBrowser.Api/Library/LibraryService.cs @@ -122,7 +122,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).GetDtoBaseItem(item, fields.ToList(), _libraryManager).Result; + var result = new DtoBuilder(Logger).GetBaseItemDto(item, fields.ToList(), _libraryManager).Result; return ToOptimizedResult(result); } @@ -139,7 +139,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).GetDtoBaseItem(item, fields.ToList(), _libraryManager).Result; + var result = new DtoBuilder(Logger).GetBaseItemDto(item, fields.ToList(), _libraryManager).Result; return ToOptimizedResult(result); } @@ -156,7 +156,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).GetDtoBaseItem(item, fields.ToList(), _libraryManager).Result; + var result = new DtoBuilder(Logger).GetBaseItemDto(item, fields.ToList(), _libraryManager).Result; return ToOptimizedResult(result); } @@ -173,7 +173,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).GetDtoBaseItem(item, fields.ToList(), _libraryManager).Result; + var result = new DtoBuilder(Logger).GetBaseItemDto(item, fields.ToList(), _libraryManager).Result; return ToOptimizedResult(result); } diff --git a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs index 9d056c699b..7fa430e39f 100644 --- a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs +++ b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs @@ -146,7 +146,7 @@ namespace MediaBrowser.Api.UserLibrary return null; } - var dto = await new DtoBuilder(Logger).GetDtoBaseItem(item, user, fields, LibraryManager).ConfigureAwait(false); + var dto = await new DtoBuilder(Logger).GetBaseItemDto(item, user, fields, LibraryManager).ConfigureAwait(false); dto.ChildCount = stub.Item2(); diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs index c2b01f9b0e..86c5169f26 100644 --- a/MediaBrowser.Api/UserLibrary/ItemsService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs @@ -208,7 +208,7 @@ namespace MediaBrowser.Api.UserLibrary var dtoBuilder = new DtoBuilder(Logger); - var returnItems = await Task.WhenAll(pagedItems.Select(i => dtoBuilder.GetDtoBaseItem(i, user, fields, _libraryManager))).ConfigureAwait(false); + var returnItems = await Task.WhenAll(pagedItems.Select(i => dtoBuilder.GetBaseItemDto(i, user, fields, _libraryManager))).ConfigureAwait(false); return new ItemsResult { diff --git a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs index ca439b346c..c9bab06858 100644 --- a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs +++ b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs @@ -342,7 +342,7 @@ namespace MediaBrowser.Api.UserLibrary var dtoBuilder = new DtoBuilder(Logger); - var items = movie.SpecialFeatures.Select(i => dtoBuilder.GetDtoBaseItem(i, user, fields, _libraryManager)).AsParallel().Select(t => t.Result).ToList(); + var items = movie.SpecialFeatures.Select(i => dtoBuilder.GetBaseItemDto(i, user, fields, _libraryManager)).AsParallel().Select(t => t.Result).ToList(); return ToOptimizedResult(items); } @@ -363,7 +363,7 @@ namespace MediaBrowser.Api.UserLibrary var dtoBuilder = new DtoBuilder(Logger); - var items = item.LocalTrailers.Select(i => dtoBuilder.GetDtoBaseItem(i, user, fields, _libraryManager)).AsParallel().Select(t => t.Result).ToList(); + var items = item.LocalTrailers.Select(i => dtoBuilder.GetBaseItemDto(i, user, fields, _libraryManager)).AsParallel().Select(t => t.Result).ToList(); return ToOptimizedResult(items); } @@ -384,7 +384,7 @@ namespace MediaBrowser.Api.UserLibrary var dtoBuilder = new DtoBuilder(Logger); - var result = dtoBuilder.GetDtoBaseItem(item, user, fields, _libraryManager).Result; + var result = dtoBuilder.GetBaseItemDto(item, user, fields, _libraryManager).Result; return ToOptimizedResult(result); } diff --git a/MediaBrowser.Api/UserService.cs b/MediaBrowser.Api/UserService.cs index d1606f954c..0eecad652a 100644 --- a/MediaBrowser.Api/UserService.cs +++ b/MediaBrowser.Api/UserService.cs @@ -169,9 +169,11 @@ namespace MediaBrowser.Api { var dtoBuilder = new DtoBuilder(Logger); - var result = _userManager.Users.OrderBy(u => u.Name).Select(dtoBuilder.GetDtoUser).ToList(); + var tasks = _userManager.Users.OrderBy(u => u.Name).Select(dtoBuilder.GetUserDto).ToArray(); - return ToOptimizedResult(result); + var task = Task.WhenAll(tasks); + + return ToOptimizedResult(task.Result); } /// @@ -188,7 +190,7 @@ namespace MediaBrowser.Api throw new ResourceNotFoundException("User not found"); } - var result = new DtoBuilder(Logger).GetDtoUser(user); + var result = new DtoBuilder(Logger).GetUserDto(user).Result; return ToOptimizedResult(result); } @@ -302,7 +304,7 @@ namespace MediaBrowser.Api newUser.UpdateConfiguration(dtoUser.Configuration, _xmlSerializer); - var result = new DtoBuilder(Logger).GetDtoUser(newUser); + var result = new DtoBuilder(Logger).GetUserDto(newUser).Result; return ToOptimizedResult(result); } diff --git a/MediaBrowser.Controller/Library/DtoBuilder.cs b/MediaBrowser.Controller/Library/DtoBuilder.cs index 0b14bb9522..d9beb43266 100644 --- a/MediaBrowser.Controller/Library/DtoBuilder.cs +++ b/MediaBrowser.Controller/Library/DtoBuilder.cs @@ -38,7 +38,7 @@ namespace MediaBrowser.Controller.Library /// The fields. /// Task{DtoBaseItem}. /// item - public async Task GetDtoBaseItem(BaseItem item, List fields, ILibraryManager libraryManager) + public async Task GetBaseItemDto(BaseItem item, List fields, ILibraryManager libraryManager) { if (item == null) { @@ -96,7 +96,7 @@ namespace MediaBrowser.Controller.Library /// The library manager. /// Task{DtoBaseItem}. /// item - public async Task GetDtoBaseItem(BaseItem item, User user, List fields, ILibraryManager libraryManager) + public async Task GetBaseItemDto(BaseItem item, User user, List fields, ILibraryManager libraryManager) { if (item == null) { @@ -168,7 +168,7 @@ namespace MediaBrowser.Controller.Library if (userData != null) { - dto.UserData = GetDtoUserItemData(userData); + dto.UserData = GetUserItemDataDto(userData); } } @@ -197,7 +197,7 @@ namespace MediaBrowser.Controller.Library /// The dto. /// The item. /// Task. - private async Task AttachPrimaryImageAspectRatio(BaseItemDto dto, BaseItem item) + private async Task AttachPrimaryImageAspectRatio(IItemDto dto, BaseItem item) { var path = item.PrimaryImagePath; @@ -647,7 +647,7 @@ namespace MediaBrowser.Controller.Library /// The data. /// DtoUserItemData. /// - public UserItemDataDto GetDtoUserItemData(UserItemData data) + public UserItemDataDto GetUserItemDataDto(UserItemData data) { if (data == null) { @@ -758,7 +758,7 @@ namespace MediaBrowser.Controller.Library /// The user. /// DtoUser. /// user - public UserDto GetDtoUser(User user) + public async Task GetUserDto(User user) { if (user == null) { @@ -780,8 +780,18 @@ namespace MediaBrowser.Controller.Library if (!string.IsNullOrEmpty(image)) { dto.PrimaryImageTag = Kernel.Instance.ImageManager.GetImageCacheTag(user, ImageType.Primary, image); - } + try + { + await AttachPrimaryImageAspectRatio(dto, user).ConfigureAwait(false); + } + catch (Exception ex) + { + // Have to use a catch-all unfortunately because some .net image methods throw plain Exceptions + _logger.ErrorException("Error generating PrimaryImageAspectRatio for {0}", ex, user.Name); + } + } + return dto; } diff --git a/MediaBrowser.Model/DTO/BaseItemDto.cs b/MediaBrowser.Model/DTO/BaseItemDto.cs index 67c7dabf60..4440e9bf60 100644 --- a/MediaBrowser.Model/DTO/BaseItemDto.cs +++ b/MediaBrowser.Model/DTO/BaseItemDto.cs @@ -12,7 +12,7 @@ namespace MediaBrowser.Model.Dto /// This holds information about a BaseItem in a format that is convenient for the client. /// [ProtoContract] - public class BaseItemDto : IHasProviderIds, INotifyPropertyChanged + public class BaseItemDto : IHasProviderIds, INotifyPropertyChanged, IItemDto { /// /// Gets or sets the name. diff --git a/MediaBrowser.Model/DTO/UserDto.cs b/MediaBrowser.Model/DTO/UserDto.cs index cfdba14fbe..979422dbe8 100644 --- a/MediaBrowser.Model/DTO/UserDto.cs +++ b/MediaBrowser.Model/DTO/UserDto.cs @@ -10,7 +10,7 @@ namespace MediaBrowser.Model.Dto /// Class UserDto /// [ProtoContract] - public class UserDto : INotifyPropertyChanged + public class UserDto : INotifyPropertyChanged, IItemDto { /// /// Gets or sets the name. @@ -61,6 +61,13 @@ namespace MediaBrowser.Model.Dto [ProtoMember(7)] public UserConfiguration Configuration { get; set; } + /// + /// Gets or sets the primary image aspect ratio. + /// + /// The primary image aspect ratio. + [ProtoMember(8)] + public double? PrimaryImageAspectRatio { get; set; } + /// /// Gets a value indicating whether this instance has primary image. /// diff --git a/MediaBrowser.Model/Dto/IItemDto.cs b/MediaBrowser.Model/Dto/IItemDto.cs new file mode 100644 index 0000000000..c970296559 --- /dev/null +++ b/MediaBrowser.Model/Dto/IItemDto.cs @@ -0,0 +1,8 @@ + +namespace MediaBrowser.Model.Dto +{ + public interface IItemDto + { + double? PrimaryImageAspectRatio { get; set; } + } +} diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index 0d0e20f815..6c2a62f911 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -44,6 +44,7 @@ + diff --git a/MediaBrowser.Server.Implementations/HttpServer/BaseRestService.cs b/MediaBrowser.Server.Implementations/HttpServer/BaseRestService.cs index b847084379..ef9483b6e4 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/BaseRestService.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/BaseRestService.cs @@ -53,7 +53,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer { throw new ArgumentNullException("result"); } - + Response.AddHeader("Vary", "Accept-Encoding"); return RequestContext.ToOptimizedResult(result); diff --git a/MediaBrowser.ServerApplication/EntryPoints/WebSocketEvents.cs b/MediaBrowser.ServerApplication/EntryPoints/WebSocketEvents.cs index 13359fced2..b498a6fe4c 100644 --- a/MediaBrowser.ServerApplication/EntryPoints/WebSocketEvents.cs +++ b/MediaBrowser.ServerApplication/EntryPoints/WebSocketEvents.cs @@ -172,9 +172,11 @@ namespace MediaBrowser.ServerApplication.EntryPoints /// /// The sender. /// The e. - void userManager_UserUpdated(object sender, GenericEventArgs e) + async void userManager_UserUpdated(object sender, GenericEventArgs e) { - _serverManager.SendWebSocketMessage("UserUpdated", new DtoBuilder(_logger).GetDtoUser(e.Argument)); + var dto = await new DtoBuilder(_logger).GetUserDto(e.Argument).ConfigureAwait(false); + + _serverManager.SendWebSocketMessage("UserUpdated", dto); } /// diff --git a/MediaBrowser.ServerApplication/MainWindow.xaml b/MediaBrowser.ServerApplication/MainWindow.xaml index 51f6714126..330bacd355 100644 --- a/MediaBrowser.ServerApplication/MainWindow.xaml +++ b/MediaBrowser.ServerApplication/MainWindow.xaml @@ -18,6 +18,8 @@ + + diff --git a/MediaBrowser.ServerApplication/MainWindow.xaml.cs b/MediaBrowser.ServerApplication/MainWindow.xaml.cs index 364dd9da65..872acea9c3 100644 --- a/MediaBrowser.ServerApplication/MainWindow.xaml.cs +++ b/MediaBrowser.ServerApplication/MainWindow.xaml.cs @@ -184,6 +184,11 @@ namespace MediaBrowser.ServerApplication App.OpenUrl("http://localhost:" + _configurationManager.Configuration.HttpServerPortNumber + "/" + Kernel.Instance.WebApplicationName + "/swagger-ui/index.html"); } + + void cmdGithubWiki_Click(object sender, EventArgs e) + { + App.OpenUrl("https://github.com/MediaBrowser/MediaBrowser/wiki"); + } /// /// Occurs when [property changed]. diff --git a/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs b/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs index cdcdb49dc4..38d5d32a80 100644 --- a/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs +++ b/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs @@ -57,7 +57,7 @@ namespace MediaBrowser.WebDashboard.Api /// Task{IEnumerable{TaskInfo}}. protected override Task GetDataToSend(object state) { - return Task.FromResult(DashboardService.GetDashboardInfo(_appHost, Logger, _taskManager, _userManager)); + return DashboardService.GetDashboardInfo(_appHost, Logger, _taskManager, _userManager); } } } diff --git a/MediaBrowser.WebDashboard/Api/DashboardService.cs b/MediaBrowser.WebDashboard/Api/DashboardService.cs index 136a9170ea..86e4c10ea7 100644 --- a/MediaBrowser.WebDashboard/Api/DashboardService.cs +++ b/MediaBrowser.WebDashboard/Api/DashboardService.cs @@ -110,7 +110,7 @@ namespace MediaBrowser.WebDashboard.Api /// System.Object. public object Get(GetDashboardInfo request) { - return GetDashboardInfo(_appHost, Logger, _taskManager, _userManager); + return GetDashboardInfo(_appHost, Logger, _taskManager, _userManager).Result; } /// @@ -120,12 +120,15 @@ namespace MediaBrowser.WebDashboard.Api /// The task manager. /// The user manager. /// DashboardInfo. - public static DashboardInfo GetDashboardInfo(IServerApplicationHost appHost, ILogger logger, ITaskManager taskManager, IUserManager userManager) + public static async Task GetDashboardInfo(IServerApplicationHost appHost, ILogger logger, ITaskManager taskManager, IUserManager userManager) { var connections = userManager.ConnectedUsers.ToArray(); var dtoBuilder = new DtoBuilder(logger); + var tasks = userManager.Users.Where(u => connections.Any(c => c.UserId == u.Id)).Select(dtoBuilder.GetUserDto); + var users = await Task.WhenAll(tasks).ConfigureAwait(false); + return new DashboardInfo { SystemInfo = appHost.GetSystemInfo(), @@ -138,7 +141,7 @@ namespace MediaBrowser.WebDashboard.Api ActiveConnections = connections, - Users = userManager.Users.Where(u => connections.Any(c => c.UserId == u.Id)).Select(dtoBuilder.GetDtoUser).ToArray() + Users = users }; }