diff options
Diffstat (limited to 'MediaBrowser.Api')
| -rw-r--r-- | MediaBrowser.Api/EnvironmentService.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.Api/Images/ImageService.cs | 37 | ||||
| -rw-r--r-- | MediaBrowser.Api/ItemUpdateService.cs | 34 | ||||
| -rw-r--r-- | MediaBrowser.Api/Library/LibraryHelpers.cs | 5 | ||||
| -rw-r--r-- | MediaBrowser.Api/LibraryService.cs | 40 | ||||
| -rw-r--r-- | MediaBrowser.Api/MediaBrowser.Api.csproj | 21 | ||||
| -rw-r--r-- | MediaBrowser.Api/SimilarItemsHelper.cs | 13 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/ItemsService.cs | 35 |
8 files changed, 137 insertions, 54 deletions
diff --git a/MediaBrowser.Api/EnvironmentService.cs b/MediaBrowser.Api/EnvironmentService.cs index 01466970a9..067da38534 100644 --- a/MediaBrowser.Api/EnvironmentService.cs +++ b/MediaBrowser.Api/EnvironmentService.cs @@ -116,12 +116,6 @@ namespace MediaBrowser.Api return ToOptimizedResult(GetNetworkShares(path).OrderBy(i => i.Path).ToList()); } - // Reject invalid input - if (!Path.IsPathRooted(path)) - { - throw new ArgumentException(string.Format("Invalid path: {0}", path)); - } - return ToOptimizedResult(GetFileSystemEntries(request).OrderBy(i => i.Path).ToList()); } diff --git a/MediaBrowser.Api/Images/ImageService.cs b/MediaBrowser.Api/Images/ImageService.cs index 27881d12ba..633d635141 100644 --- a/MediaBrowser.Api/Images/ImageService.cs +++ b/MediaBrowser.Api/Images/ImageService.cs @@ -92,7 +92,7 @@ namespace MediaBrowser.Api.Images [ApiMember(Name = "Id", Description = "Channel Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] public string Id { get; set; } } - + /// <summary> /// Class UpdateItemImageIndex /// </summary> @@ -281,7 +281,7 @@ namespace MediaBrowser.Api.Images [ApiMember(Name = "Id", Description = "Channel Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "DELETE")] public string Id { get; set; } } - + /// <summary> /// Class PostUserImage /// </summary> @@ -375,7 +375,7 @@ namespace MediaBrowser.Api.Images /// <value>The request stream.</value> public Stream RequestStream { get; set; } } - + /// <summary> /// Class ImageService /// </summary> @@ -400,7 +400,7 @@ namespace MediaBrowser.Api.Images private readonly IImageProcessor _imageProcessor; private readonly ILiveTvManager _liveTv; - + /// <summary> /// Initializes a new instance of the <see cref="ImageService" /> class. /// </summary> @@ -438,7 +438,7 @@ namespace MediaBrowser.Api.Images return ToOptimizedResult(result); } - + public object Get(GetItemByNameImageInfos request) { var result = GetItemByNameImageInfos(request); @@ -496,16 +496,20 @@ namespace MediaBrowser.Api.Images index = 0; - foreach (var image in item.ScreenshotImagePaths) + var hasScreenshots = item as IHasScreenshots; + if (hasScreenshots != null) { - var info = GetImageInfo(image, item, index, ImageType.Screenshot); - - if (info != null) + foreach (var image in hasScreenshots.ScreenshotImagePaths) { - list.Add(info); - } + var info = GetImageInfo(image, item, index, ImageType.Screenshot); - index++; + if (info != null) + { + list.Add(info); + } + + index++; + } } var video = item as Video; @@ -667,7 +671,7 @@ namespace MediaBrowser.Api.Images Task.WaitAll(task); } - + /// <summary> /// Deletes the specified request. /// </summary> @@ -702,7 +706,7 @@ namespace MediaBrowser.Api.Images Task.WaitAll(task); } - + /// <summary> /// Deletes the specified request. /// </summary> @@ -764,8 +768,9 @@ namespace MediaBrowser.Api.Images if (type == ImageType.Screenshot) { - file1 = item.ScreenshotImagePaths[currentIndex]; - file2 = item.ScreenshotImagePaths[newIndex]; + var hasScreenshots = (IHasScreenshots)item; + file1 = hasScreenshots.ScreenshotImagePaths[currentIndex]; + file2 = hasScreenshots.ScreenshotImagePaths[newIndex]; } else if (type == ImageType.Backdrop) { diff --git a/MediaBrowser.Api/ItemUpdateService.cs b/MediaBrowser.Api/ItemUpdateService.cs index 90fe111292..4483b74f94 100644 --- a/MediaBrowser.Api/ItemUpdateService.cs +++ b/MediaBrowser.Api/ItemUpdateService.cs @@ -270,7 +270,12 @@ namespace MediaBrowser.Api item.ParentIndexNumber = request.ParentIndexNumber; item.Overview = request.Overview; item.Genres = request.Genres; - item.Tags = request.Tags; + + var hasTags = item as IHasTags; + if (hasTags != null) + { + hasTags.Tags = request.Tags; + } if (request.Studios != null) { @@ -290,11 +295,17 @@ namespace MediaBrowser.Api item.EndDate = request.EndDate.HasValue ? request.EndDate.Value.ToUniversalTime() : (DateTime?)null; item.PremiereDate = request.PremiereDate.HasValue ? request.PremiereDate.Value.ToUniversalTime() : (DateTime?)null; item.ProductionYear = request.ProductionYear; - item.ProductionLocations = request.ProductionLocations; - item.Language = request.Language; item.OfficialRating = request.OfficialRating; item.CustomRating = request.CustomRating; + SetProductionLocations(item, request); + + var hasLanguage = item as IHasLanguage; + if (hasLanguage != null) + { + hasLanguage.Language = request.Language; + } + var hasAspectRatio = item as IHasAspectRatio; if (hasAspectRatio != null) { @@ -366,5 +377,22 @@ namespace MediaBrowser.Api } } + private void SetProductionLocations(BaseItem item, BaseItemDto request) + { + var hasProductionLocations = item as IHasProductionLocations; + + if (hasProductionLocations != null) + { + hasProductionLocations.ProductionLocations = request.ProductionLocations; + } + + var person = item as Person; + if (person != null) + { + person.PlaceOfBirth = request.ProductionLocations == null + ? null + : request.ProductionLocations.FirstOrDefault(); + } + } } } diff --git a/MediaBrowser.Api/Library/LibraryHelpers.cs b/MediaBrowser.Api/Library/LibraryHelpers.cs index d16250ce91..fb986605c0 100644 --- a/MediaBrowser.Api/Library/LibraryHelpers.cs +++ b/MediaBrowser.Api/Library/LibraryHelpers.cs @@ -60,11 +60,6 @@ namespace MediaBrowser.Api.Library /// <exception cref="System.IO.DirectoryNotFoundException">The path does not exist.</exception> public static void AddMediaPath(IFileSystem fileSystem, string virtualFolderName, string path, User user, IServerApplicationPaths appPaths) { - if (!Path.IsPathRooted(path)) - { - throw new ArgumentException("The path is not valid."); - } - if (!Directory.Exists(path)) { throw new DirectoryNotFoundException("The path does not exist."); diff --git a/MediaBrowser.Api/LibraryService.cs b/MediaBrowser.Api/LibraryService.cs index cf62e42ba7..51eef225ed 100644 --- a/MediaBrowser.Api/LibraryService.cs +++ b/MediaBrowser.Api/LibraryService.cs @@ -588,7 +588,7 @@ namespace MediaBrowser.Api var originalItem = item; - while (item.ThemeSongIds.Count == 0 && request.InheritFromParent && item.Parent != null) + while (GetThemeSongIds(item).Count == 0 && request.InheritFromParent && item.Parent != null) { item = item.Parent; } @@ -598,7 +598,7 @@ namespace MediaBrowser.Api .Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)) .ToList(); - var themeSongIds = item.ThemeSongIds; + var themeSongIds = GetThemeSongIds(item); if (themeSongIds.Count == 0 && request.InheritFromParent) { @@ -608,11 +608,11 @@ namespace MediaBrowser.Api { var linkedItemWithThemes = album.SoundtrackIds .Select(i => _libraryManager.GetItemById(i)) - .FirstOrDefault(i => i.ThemeSongIds.Count > 0); + .FirstOrDefault(i => GetThemeSongIds(i).Count > 0); if (linkedItemWithThemes != null) { - themeSongIds = linkedItemWithThemes.ThemeSongIds; + themeSongIds = GetThemeSongIds(linkedItemWithThemes); item = linkedItemWithThemes; } } @@ -656,7 +656,7 @@ namespace MediaBrowser.Api var originalItem = item; - while (item.ThemeVideoIds.Count == 0 && request.InheritFromParent && item.Parent != null) + while (GetThemeVideoIds(item).Count == 0 && request.InheritFromParent && item.Parent != null) { item = item.Parent; } @@ -666,7 +666,7 @@ namespace MediaBrowser.Api .Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)) .ToList(); - var themeVideoIds = item.ThemeVideoIds; + var themeVideoIds = GetThemeVideoIds(item); if (themeVideoIds.Count == 0 && request.InheritFromParent) { @@ -681,11 +681,11 @@ namespace MediaBrowser.Api { var linkedItemWithThemes = album.SoundtrackIds .Select(i => _libraryManager.GetItemById(i)) - .FirstOrDefault(i => i.ThemeVideoIds.Count > 0); + .FirstOrDefault(i => GetThemeVideoIds(i).Count > 0); if (linkedItemWithThemes != null) { - themeVideoIds = linkedItemWithThemes.ThemeVideoIds; + themeVideoIds = GetThemeVideoIds(linkedItemWithThemes); item = linkedItemWithThemes; } } @@ -705,6 +705,30 @@ namespace MediaBrowser.Api }; } + private List<Guid> GetThemeVideoIds(BaseItem item) + { + var i = item as IHasThemeMedia; + + if (i != null) + { + return i.ThemeVideoIds; + } + + return new List<Guid>(); + } + + private List<Guid> GetThemeSongIds(BaseItem item) + { + var i = item as IHasThemeMedia; + + if (i != null) + { + return i.ThemeSongIds; + } + + return new List<Guid>(); + } + private readonly CultureInfo _usCulture = new CultureInfo("en-US"); public object Get(GetYearIndex request) diff --git a/MediaBrowser.Api/MediaBrowser.Api.csproj b/MediaBrowser.Api/MediaBrowser.Api.csproj index 706117fc26..ffcc4b8383 100644 --- a/MediaBrowser.Api/MediaBrowser.Api.csproj +++ b/MediaBrowser.Api/MediaBrowser.Api.csproj @@ -38,18 +38,6 @@ <RunPostBuildEvent>Always</RunPostBuildEvent> </PropertyGroup> <ItemGroup> - <Reference Include="ServiceStack.Common, Version=3.9.70.0, Culture=neutral, processorArchitecture=MSIL"> - <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\ServiceStack.Common.3.9.70\lib\net35\ServiceStack.Common.dll</HintPath> - </Reference> - <Reference Include="ServiceStack.Interfaces, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> - <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\ServiceStack.Common.3.9.70\lib\net35\ServiceStack.Interfaces.dll</HintPath> - </Reference> - <Reference Include="ServiceStack.Text, Version=3.9.70.0, Culture=neutral, processorArchitecture=MSIL"> - <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\ServiceStack.Text.3.9.70\lib\net35\ServiceStack.Text.dll</HintPath> - </Reference> <Reference Include="System" /> <Reference Include="System.Core" /> <Reference Include="Microsoft.CSharp" /> @@ -60,6 +48,15 @@ <HintPath>..\packages\morelinq.1.0.16006\lib\net35\MoreLinq.dll</HintPath> </Reference> <Reference Include="System.Xml" /> + <Reference Include="ServiceStack.Common"> + <HintPath>..\packages\ServiceStack.Common.3.9.70\lib\net35\ServiceStack.Common.dll</HintPath> + </Reference> + <Reference Include="ServiceStack.Interfaces"> + <HintPath>..\packages\ServiceStack.Common.3.9.70\lib\net35\ServiceStack.Interfaces.dll</HintPath> + </Reference> + <Reference Include="ServiceStack.Text"> + <HintPath>..\packages\ServiceStack.Text.3.9.70\lib\net35\ServiceStack.Text.dll</HintPath> + </Reference> </ItemGroup> <ItemGroup> <Compile Include="..\SharedVersion.cs"> diff --git a/MediaBrowser.Api/SimilarItemsHelper.cs b/MediaBrowser.Api/SimilarItemsHelper.cs index a160ce6665..b0de3cf731 100644 --- a/MediaBrowser.Api/SimilarItemsHelper.cs +++ b/MediaBrowser.Api/SimilarItemsHelper.cs @@ -119,6 +119,17 @@ namespace MediaBrowser.Api .Select(i => i.Item1); } + private static IEnumerable<string> GetTags(BaseItem item) + { + var hasTags = item as IHasTags; + if (hasTags != null) + { + return hasTags.Tags; + } + + return new List<string>(); + } + /// <summary> /// Gets the similiarity score. /// </summary> @@ -138,7 +149,7 @@ namespace MediaBrowser.Api points += item1.Genres.Where(i => item2.Genres.Contains(i, StringComparer.OrdinalIgnoreCase)).Sum(i => 10); // Find common tags - points += item1.Tags.Where(i => item2.Tags.Contains(i, StringComparer.OrdinalIgnoreCase)).Sum(i => 10); + points += GetTags(item1).Where(i => GetTags(item2).Contains(i, StringComparer.OrdinalIgnoreCase)).Sum(i => 10); // Find common studios points += item1.Studios.Where(i => item2.Studios.Contains(i, StringComparer.OrdinalIgnoreCase)).Sum(i => 3); diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs index 3a7ea5ddd6..7cb624af84 100644 --- a/MediaBrowser.Api/UserLibrary/ItemsService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs @@ -884,12 +884,36 @@ namespace MediaBrowser.Api.UserLibrary if (request.HasThemeSong.HasValue) { - items = items.Where(i => request.HasThemeSong.Value ? i.ThemeSongIds.Count > 0 : i.ThemeSongIds.Count == 0); + var filterValue = request.HasThemeSong.Value; + + items = items.Where(i => + { + var themeCount = 0; + var iHasThemeMedia = i as IHasThemeMedia; + + if (iHasThemeMedia != null) + { + themeCount = iHasThemeMedia.ThemeSongIds.Count; + } + return filterValue ? themeCount > 0 : themeCount == 0; + }); } if (request.HasThemeVideo.HasValue) { - items = items.Where(i => request.HasThemeVideo.Value ? i.ThemeVideoIds.Count > 0 : i.ThemeVideoIds.Count == 0); + var filterValue = request.HasThemeVideo.Value; + + items = items.Where(i => + { + var themeCount = 0; + var iHasThemeMedia = i as IHasThemeMedia; + + if (iHasThemeMedia != null) + { + themeCount = iHasThemeMedia.ThemeVideoIds.Count; + } + return filterValue ? themeCount > 0 : themeCount == 0; + }); } if (request.MinPlayers.HasValue) @@ -1166,7 +1190,12 @@ namespace MediaBrowser.Api.UserLibrary if (imageType == ImageType.Screenshot) { - return item.ScreenshotImagePaths.Count > 0; + var hasScreenshots = item as IHasScreenshots; + if (hasScreenshots == null) + { + return false; + } + return hasScreenshots.ScreenshotImagePaths.Count > 0; } return item.HasImage(imageType); |
