aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api')
-rw-r--r--MediaBrowser.Api/EnvironmentService.cs6
-rw-r--r--MediaBrowser.Api/Images/ImageService.cs37
-rw-r--r--MediaBrowser.Api/ItemUpdateService.cs34
-rw-r--r--MediaBrowser.Api/Library/LibraryHelpers.cs5
-rw-r--r--MediaBrowser.Api/LibraryService.cs40
-rw-r--r--MediaBrowser.Api/MediaBrowser.Api.csproj21
-rw-r--r--MediaBrowser.Api/SimilarItemsHelper.cs13
-rw-r--r--MediaBrowser.Api/UserLibrary/ItemsService.cs35
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);