From dc8d9810b7a99bdcbc4959a77750b3cfee1e88b5 Mon Sep 17 00:00:00 2001 From: Techywarrior Date: Sat, 13 Apr 2013 11:11:01 -0700 Subject: [PATCH 1/9] updated for local videoJS --- .../MediaBrowser.WebDashboard.csproj | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj index 6f4d675edf..1eec75ba3d 100644 --- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj +++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj @@ -305,6 +305,18 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + PreserveNewest From 95b1bfb0de05ccd53da77fce499e4f208d3a9fa3 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 14 Apr 2013 16:47:09 -0400 Subject: [PATCH 2/9] fixed people images being occasionally incorrect --- MediaBrowser.Api/Images/ImageService.cs | 2 +- MediaBrowser.Controller/Dto/DtoBuilder.cs | 24 +++++++++++-------- .../Providers/ProviderManager.cs | 2 +- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/MediaBrowser.Api/Images/ImageService.cs b/MediaBrowser.Api/Images/ImageService.cs index 07bbaff749..1f69183cc8 100644 --- a/MediaBrowser.Api/Images/ImageService.cs +++ b/MediaBrowser.Api/Images/ImageService.cs @@ -293,7 +293,7 @@ namespace MediaBrowser.Api.Images if (string.IsNullOrEmpty(imagePath)) { - throw new ResourceNotFoundException(); + throw new ResourceNotFoundException(string.Format("{0} does not have an image of type {1}", item.Name, request.Type)); } // See if we can avoid a file system lookup by looking for the file in ResolveArgs diff --git a/MediaBrowser.Controller/Dto/DtoBuilder.cs b/MediaBrowser.Controller/Dto/DtoBuilder.cs index 0c47013bf8..84f9f8827e 100644 --- a/MediaBrowser.Controller/Dto/DtoBuilder.cs +++ b/MediaBrowser.Controller/Dto/DtoBuilder.cs @@ -566,29 +566,33 @@ namespace MediaBrowser.Controller.Dto return; } - // Attach People by transforming them into BaseItemPerson (DTO) - dto.People = new BaseItemPerson[item.People.Count]; - // Ordering by person type to ensure actors and artists are at the front. // This is taking advantage of the fact that they both begin with A // This should be improved in the future - var entities = await Task.WhenAll(item.People.OrderBy(i => i.Type).Select(c => + var people = item.People.OrderBy(i => i.Type).ToList(); + + // Attach People by transforming them into BaseItemPerson (DTO) + dto.People = new BaseItemPerson[people.Count]; + + var entities = await Task.WhenAll(people.Select(p => p.Name).Distinct(StringComparer.OrdinalIgnoreCase).Select(c => Task.Run(async () => { try { - return await _libraryManager.GetPerson(c.Name).ConfigureAwait(false); + return await _libraryManager.GetPerson(c).ConfigureAwait(false); } catch (IOException ex) { - _logger.ErrorException("Error getting person {0}", ex, c.Name); + _logger.ErrorException("Error getting person {0}", ex, c); return null; } }) )).ConfigureAwait(false); + var dictionary = entities.ToDictionary(i => i.Name, StringComparer.OrdinalIgnoreCase); + for (var i = 0; i < item.People.Count; i++) { var person = item.People[i]; @@ -600,15 +604,15 @@ namespace MediaBrowser.Controller.Dto Type = person.Type }; - var ibnObject = entities[i]; + Person entity; - if (ibnObject != null) + if (dictionary.TryGetValue(person.Name, out entity)) { - var primaryImagePath = ibnObject.PrimaryImagePath; + var primaryImagePath = entity.PrimaryImagePath; if (!string.IsNullOrEmpty(primaryImagePath)) { - baseItemPerson.PrimaryImageTag = Kernel.Instance.ImageManager.GetImageCacheTag(ibnObject, ImageType.Primary, primaryImagePath); + baseItemPerson.PrimaryImageTag = Kernel.Instance.ImageManager.GetImageCacheTag(entity, ImageType.Primary, primaryImagePath); } } diff --git a/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs b/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs index ff7222e7c1..58bb232a25 100644 --- a/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs +++ b/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs @@ -237,7 +237,7 @@ namespace MediaBrowser.Server.Implementations.Providers } catch (OperationCanceledException ex) { - _logger.Debug("{0} cancelled for {1}", provider.GetType().Name, item.Name); + _logger.Debug("{0} canceled for {1}", provider.GetType().Name, item.Name); // If the outer cancellation token is the one that caused the cancellation, throw it if (cancellationToken.IsCancellationRequested && ex.CancellationToken == cancellationToken) From 2567f15647eb303633b918c5bccf76f42e2e4d18 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 14 Apr 2013 17:13:04 -0400 Subject: [PATCH 3/9] update to latest js api client --- MediaBrowser.WebDashboard/ApiClient.js | 26 +++++++++++++---------- MediaBrowser.WebDashboard/packages.config | 2 +- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/MediaBrowser.WebDashboard/ApiClient.js b/MediaBrowser.WebDashboard/ApiClient.js index 4c88b35c3f..fe361a8685 100644 --- a/MediaBrowser.WebDashboard/ApiClient.js +++ b/MediaBrowser.WebDashboard/ApiClient.js @@ -95,6 +95,10 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { return name; }()); + function encodeName(name) { + return encodeURIComponent(name).replace("'", '%27'); + } + /** * Wraps around jQuery ajax methods to add additional info to the request. */ @@ -867,7 +871,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { throw new Error("null name"); } - var url = self.getUrl("Studios/" + name); + var url = self.getUrl("Studios/" + encodeName(name)); return self.ajax({ type: "GET", @@ -885,7 +889,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { throw new Error("null name"); } - var url = self.getUrl("Genres/" + name); + var url = self.getUrl("Genres/" + encodeName(name)); return self.ajax({ type: "GET", @@ -921,7 +925,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { throw new Error("null name"); } - var url = self.getUrl("Persons/" + name); + var url = self.getUrl("Persons/" + encodeName(name)); return self.ajax({ type: "GET", @@ -1047,7 +1051,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { }; - var url = "Persons/" + name + "/Images/" + options.type; + var url = "Persons/" + encodeName(name) + "/Images/" + options.type; if (options.index != null) { url += "/" + options.index; @@ -1117,7 +1121,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { }; - var url = "Genres/" + name + "/Images/" + options.type; + var url = "Genres/" + encodeName(name) + "/Images/" + options.type; if (options.index != null) { url += "/" + options.index; @@ -1131,7 +1135,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { }; /** - * Constructs a url for a genre image + * Constructs a url for a studio image * @param {String} name * @param {Object} options * Options supports the following properties: @@ -1152,7 +1156,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { }; - var url = "Studios/" + name + "/Images/" + options.type; + var url = "Studios/" + encodeName(name) + "/Images/" + options.type; if (options.index != null) { url += "/" + options.index; @@ -1739,7 +1743,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { throw new Error("null name"); } - var url = self.getUrl("Users/" + userId + "/ItemsByName/Favorites/" + name); + var url = self.getUrl("Users/" + userId + "/ItemsByName/Favorites/" + encodeName(name)); var method = isFavorite ? "POST" : "DELETE"; @@ -1766,7 +1770,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { throw new Error("null name"); } - var url = self.getUrl("Users/" + userId + "/ItemsByName/" + name + "/Rating", { + var url = self.getUrl("Users/" + userId + "/ItemsByName/" + encodeName(name) + "/Rating", { likes: likes }); @@ -1791,7 +1795,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { throw new Error("null name"); } - var url = self.getUrl("Users/" + userId + "/ItemsByName/" + name + "/Rating"); + var url = self.getUrl("Users/" + userId + "/ItemsByName/" + encodeName(name) + "/Rating"); return self.ajax({ type: "DELETE", @@ -1815,7 +1819,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { throw new Error("null name"); } - var url = self.getUrl("Users/" + userId + "/ItemsByName/" + name + "/UserData"); + var url = self.getUrl("Users/" + userId + "/ItemsByName/" + encodeName(name) + "/UserData"); return self.ajax({ type: "GET", diff --git a/MediaBrowser.WebDashboard/packages.config b/MediaBrowser.WebDashboard/packages.config index 01740f591a..edc26a2383 100644 --- a/MediaBrowser.WebDashboard/packages.config +++ b/MediaBrowser.WebDashboard/packages.config @@ -1,6 +1,6 @@  - + \ No newline at end of file From 4260ebeb4e8e509a6820b813a52cd61a6a1abf8c Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 14 Apr 2013 17:44:54 -0400 Subject: [PATCH 4/9] support box, menu & screenshot images --- .../ImageFromMediaLocationProvider.cs | 52 ++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs b/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs index 4cd9b20a1a..465cfec92b 100644 --- a/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs +++ b/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs @@ -160,6 +160,7 @@ namespace MediaBrowser.Controller.Providers private void PopulateBaseItemImages(BaseItem item) { var backdropFiles = new List(); + var screenshotFiles = new List(); // Primary Image var image = GetImage(item, "folder"); @@ -201,6 +202,22 @@ namespace MediaBrowser.Controller.Providers item.SetImage(ImageType.Thumb, image.Value.Path); } + // Thumbnail Image + image = GetImage(item, "box"); + + if (image.HasValue) + { + item.SetImage(ImageType.Box, image.Value.Path); + } + + // Thumbnail Image + image = GetImage(item, "menu"); + + if (image.HasValue) + { + item.SetImage(ImageType.Menu, image.Value.Path); + } + // Backdrop Image image = GetImage(item, "backdrop"); @@ -234,7 +251,40 @@ namespace MediaBrowser.Controller.Providers { item.BackdropImagePaths = backdropFiles; } - } + // Screenshot Image + image = GetImage(item, "screenshot"); + + if (image.HasValue) + { + screenshotFiles.Add(image.Value.Path); + } + + unfound = 0; + for (var i = 1; i <= 20; i++) + { + // Screenshot Image + image = GetImage(item, "screenshot" + i); + + if (image.HasValue) + { + screenshotFiles.Add(image.Value.Path); + } + else + { + unfound++; + + if (unfound >= 3) + { + break; + } + } + } + + if (screenshotFiles.Count > 0) + { + item.ScreenshotImagePaths = screenshotFiles; + } + } } } From 6138a7540bc25d6c1173bcd0f9fd2826ab84462a Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 14 Apr 2013 19:14:01 -0400 Subject: [PATCH 5/9] updated ffmpeg --- .../MediaBrowser.Server.Implementations.csproj | 2 +- .../MediaEncoder/ffmpeg20130408.zip.REMOVED.git-id | 1 - .../MediaEncoder/ffmpeg20130412.zip.REMOVED.git-id | 1 + 3 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 MediaBrowser.Server.Implementations/MediaEncoder/ffmpeg20130408.zip.REMOVED.git-id create mode 100644 MediaBrowser.Server.Implementations/MediaEncoder/ffmpeg20130412.zip.REMOVED.git-id diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index ba79ff5d59..66ec69f08f 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -256,7 +256,7 @@ - + diff --git a/MediaBrowser.Server.Implementations/MediaEncoder/ffmpeg20130408.zip.REMOVED.git-id b/MediaBrowser.Server.Implementations/MediaEncoder/ffmpeg20130408.zip.REMOVED.git-id deleted file mode 100644 index c1a4c08b1b..0000000000 --- a/MediaBrowser.Server.Implementations/MediaEncoder/ffmpeg20130408.zip.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -13efb0e506699c6d90c23a7600b3556d91dd31a1 \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/MediaEncoder/ffmpeg20130412.zip.REMOVED.git-id b/MediaBrowser.Server.Implementations/MediaEncoder/ffmpeg20130412.zip.REMOVED.git-id new file mode 100644 index 0000000000..71f2b701c6 --- /dev/null +++ b/MediaBrowser.Server.Implementations/MediaEncoder/ffmpeg20130412.zip.REMOVED.git-id @@ -0,0 +1 @@ +1b75cc4abcfd185b6db07bbe433d010f947d50ae \ No newline at end of file From 8c0718b5ee91fd21e74339cc7cb20332f6f08195 Mon Sep 17 00:00:00 2001 From: Techywarrior Date: Sun, 14 Apr 2013 20:37:07 -0700 Subject: [PATCH 6/9] rudimentary game view support --- MediaBrowser.WebDashboard/Api/DashboardService.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/MediaBrowser.WebDashboard/Api/DashboardService.cs b/MediaBrowser.WebDashboard/Api/DashboardService.cs index ad84b3ae33..0bc9a3bc7f 100644 --- a/MediaBrowser.WebDashboard/Api/DashboardService.cs +++ b/MediaBrowser.WebDashboard/Api/DashboardService.cs @@ -484,7 +484,14 @@ namespace MediaBrowser.WebDashboard.Api "userprofilespage.js", "wizardfinishpage.js", "wizardstartpage.js", - "wizarduserpage.js" + "wizarduserpage.js", + "gamesrecommendedpage.js", + "gamesystemspage.js", + "gamesystempage.js", + "gamespage.js", + "gamegenrespage.js", + "gamestudiospage.js", + "gamedetailpage.js" }; var memoryStream = new MemoryStream(); From 49e67b980b49bbf6609b105257ea880426364936 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 14 Apr 2013 23:53:18 -0400 Subject: [PATCH 7/9] fixing dashboard project --- .../Api/DashboardService.cs | 2 +- .../MediaBrowser.WebDashboard.csproj | 42 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/MediaBrowser.WebDashboard/Api/DashboardService.cs b/MediaBrowser.WebDashboard/Api/DashboardService.cs index 0bc9a3bc7f..a9bf0ac97f 100644 --- a/MediaBrowser.WebDashboard/Api/DashboardService.cs +++ b/MediaBrowser.WebDashboard/Api/DashboardService.cs @@ -489,7 +489,7 @@ namespace MediaBrowser.WebDashboard.Api "gamesystemspage.js", "gamesystempage.js", "gamespage.js", - "gamegenrespage.js", + "gamegenrepage.js", "gamestudiospage.js", "gamedetailpage.js" }; diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj index b55ba9573e..a8f7961485 100644 --- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj +++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj @@ -186,6 +186,27 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + PreserveNewest @@ -228,6 +249,27 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + PreserveNewest From 650016ef6209c3569fa83864e270d05c01a6f19c Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 15 Apr 2013 00:03:11 -0400 Subject: [PATCH 8/9] added BaseGame --- MediaBrowser.Controller/Entities/BaseGame.cs | 30 +++++++++++++++++++ .../MediaBrowser.Controller.csproj | 1 + MediaBrowser.Installer/MainWindow.xaml.cs | 2 +- 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 MediaBrowser.Controller/Entities/BaseGame.cs diff --git a/MediaBrowser.Controller/Entities/BaseGame.cs b/MediaBrowser.Controller/Entities/BaseGame.cs new file mode 100644 index 0000000000..5df1bfaf4a --- /dev/null +++ b/MediaBrowser.Controller/Entities/BaseGame.cs @@ -0,0 +1,30 @@ + +namespace MediaBrowser.Controller.Entities +{ + /// + /// Class BaseGame + /// + public class BaseGame : BaseItem + { + /// + /// Gets the type of the media. + /// + /// The type of the media. + public override string MediaType + { + get { return Model.Entities.MediaType.Game; } + } + + /// + /// Gets or sets the players supported. + /// + /// The players supported. + public int? PlayersSupported { get; set; } + + /// + /// Gets or sets the game system. + /// + /// The game system. + public string GameSystem { get; set; } + } +} diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index 71245a3bb4..90d3810d0f 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -77,6 +77,7 @@ + diff --git a/MediaBrowser.Installer/MainWindow.xaml.cs b/MediaBrowser.Installer/MainWindow.xaml.cs index 16cde95925..d037924a0e 100644 --- a/MediaBrowser.Installer/MainWindow.xaml.cs +++ b/MediaBrowser.Installer/MainWindow.xaml.cs @@ -273,7 +273,7 @@ namespace MediaBrowser.Installer } catch (Exception e) { - SystemClose("Error Extracting - " + e.GetType().FullName + "\n\n" + e.Message); + SystemClose("Error Extracting - " + e.GetType().FullName + "\n\n" + e.Message + "\n\n" + e.StackTrace); // Delete archive even if failed so we don't try again with this one TryDelete(archive); return; From a4cac9c95df1f169fd3457d25466f6896e12cd3f Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 15 Apr 2013 00:05:51 -0400 Subject: [PATCH 9/9] updated nuget --- Nuget/MediaBrowser.Common.Internal.nuspec | 4 ++-- Nuget/MediaBrowser.Common.nuspec | 2 +- Nuget/MediaBrowser.Server.Core.nuspec | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index 7663d918bc..213a00da5b 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common.Internal - 3.0.76 + 3.0.77 MediaBrowser.Common.Internal Luke ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains common components shared by Media Browser Theatre and Media Browser Server. Not intended for plugin developer consumption. Copyright © Media Browser 2013 - + diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index a2202f1db1..4a645f87e2 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.76 + 3.0.77 MediaBrowser.Common Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index b6870c309b..7e1cef288f 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.76 + 3.0.77 Media Browser.Server.Core Media Browser Team ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains core components required to build plugins for Media Browser Server. Copyright © Media Browser 2013 - +