aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Server.Implementations')
-rw-r--r--MediaBrowser.Server.Implementations/Dto/DtoService.cs64
-rw-r--r--MediaBrowser.Server.Implementations/HttpServer/SwaggerService.cs2
-rw-r--r--MediaBrowser.Server.Implementations/IO/DirectoryWatchers.cs1
-rw-r--r--MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs2
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs19
-rw-r--r--MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj70
-rw-r--r--MediaBrowser.Server.Implementations/Providers/ImageSaver.cs18
7 files changed, 112 insertions, 64 deletions
diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs
index f298c2d4d..bb9ee7e14 100644
--- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs
+++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs
@@ -392,7 +392,13 @@ namespace MediaBrowser.Server.Implementations.Dto
/// <returns>List{Guid}.</returns>
private List<Guid> GetScreenshotImageTags(BaseItem item)
{
- return item.ScreenshotImagePaths
+ var hasScreenshots = item as IHasScreenshots;
+ if (hasScreenshots == null)
+ {
+ return new List<Guid>();
+ }
+
+ return hasScreenshots.ScreenshotImagePaths
.Select(p => GetImageCacheTag(item, ImageType.Screenshot, p))
.Where(i => i.HasValue)
.Select(i => i.Value)
@@ -746,12 +752,21 @@ namespace MediaBrowser.Server.Implementations.Dto
if (fields.Contains(ItemFields.Tags))
{
- dto.Tags = item.Tags;
+ var hasTags = item as IHasTags;
+ if (hasTags != null)
+ {
+ dto.Tags = hasTags.Tags;
+ }
+
+ if (dto.Tags == null)
+ {
+ dto.Tags = new List<string>();
+ }
}
if (fields.Contains(ItemFields.ProductionLocations))
{
- dto.ProductionLocations = item.ProductionLocations;
+ SetProductionLocations(item, dto);
}
var hasAspectRatio = item as IHasAspectRatio;
@@ -789,10 +804,15 @@ namespace MediaBrowser.Server.Implementations.Dto
dto.Id = GetDtoId(item);
dto.IndexNumber = item.IndexNumber;
dto.IsFolder = item.IsFolder;
- dto.Language = item.Language;
dto.MediaType = item.MediaType;
dto.LocationType = item.LocationType;
+ var hasLanguage = item as IHasLanguage;
+ if (hasLanguage != null)
+ {
+ dto.Language = hasLanguage.Language;
+ }
+
var hasCriticRating = item as IHasCriticRating;
if (hasCriticRating != null)
{
@@ -924,7 +944,16 @@ namespace MediaBrowser.Server.Implementations.Dto
if (fields.Contains(ItemFields.Taglines))
{
- dto.Taglines = item.Taglines;
+ var hasTagline = item as IHasTaglines;
+ if (hasTagline != null)
+ {
+ dto.Taglines = hasTagline.Taglines;
+ }
+
+ if (dto.Taglines == null)
+ {
+ dto.Taglines = new List<string>();
+ }
}
dto.Type = item.GetClientTypeName();
@@ -1122,6 +1151,31 @@ namespace MediaBrowser.Server.Implementations.Dto
}
}
+ private void SetProductionLocations(BaseItem item, BaseItemDto dto)
+ {
+ var hasProductionLocations = item as IHasProductionLocations;
+
+ if (hasProductionLocations != null)
+ {
+ dto.ProductionLocations = hasProductionLocations.ProductionLocations;
+ }
+
+ var person = item as Person;
+ if (person != null)
+ {
+ dto.ProductionLocations = new List<string>();
+ if (!string.IsNullOrEmpty(person.PlaceOfBirth))
+ {
+ dto.ProductionLocations.Add(person.PlaceOfBirth);
+ }
+ }
+
+ if (dto.ProductionLocations == null)
+ {
+ dto.ProductionLocations = new List<string>();
+ }
+ }
+
/// <summary>
/// Since it can be slow to make all of these calculations independently, this method will provide a way to do them all at once
/// </summary>
diff --git a/MediaBrowser.Server.Implementations/HttpServer/SwaggerService.cs b/MediaBrowser.Server.Implementations/HttpServer/SwaggerService.cs
index 904b6799b..c7c6ad706 100644
--- a/MediaBrowser.Server.Implementations/HttpServer/SwaggerService.cs
+++ b/MediaBrowser.Server.Implementations/HttpServer/SwaggerService.cs
@@ -38,7 +38,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer
var swaggerDirectory = Path.Combine(runningDirectory, "swagger-ui");
- var requestedFile = Path.Combine(swaggerDirectory, request.ResourceName.Replace('/', '\\'));
+ var requestedFile = Path.Combine(swaggerDirectory, request.ResourceName.Replace('/', Path.DirectorySeparatorChar));
return ResultFactory.GetStaticFileResult(RequestContext, requestedFile);
}
diff --git a/MediaBrowser.Server.Implementations/IO/DirectoryWatchers.cs b/MediaBrowser.Server.Implementations/IO/DirectoryWatchers.cs
index 870a14bd8..a2240f52d 100644
--- a/MediaBrowser.Server.Implementations/IO/DirectoryWatchers.cs
+++ b/MediaBrowser.Server.Implementations/IO/DirectoryWatchers.cs
@@ -150,7 +150,6 @@ namespace MediaBrowser.Server.Implementations.IO
}
})
- .Where(Path.IsPathRooted)
.Distinct(StringComparer.OrdinalIgnoreCase)
.OrderBy(i => i)
.ToList();
diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs
index adf914766..121bf53d4 100644
--- a/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs
+++ b/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs
@@ -43,7 +43,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.TV
}
// Optimization to avoid running these tests against Seasons
- if (args.Parent is Series || args.Parent is MusicArtist || args.Parent is MusicAlbum)
+ if (args.Parent is Series || args.Parent is Season || args.Parent is MusicArtist || args.Parent is MusicAlbum)
{
return null;
}
diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
index 1ed973353..185a01663 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
@@ -308,29 +308,30 @@ namespace MediaBrowser.Server.Implementations.LiveTv
internal async Task RefreshChannels(IProgress<double> progress, CancellationToken cancellationToken)
{
// Avoid implicitly captured closure
- var currentCancellationToken = cancellationToken;
+ var service = ActiveService;
- var channelTasks = _services.Select(i => GetChannels(i, currentCancellationToken));
+ if (service == null)
+ {
+ progress.Report(100);
+ return;
+ }
progress.Report(10);
- var results = await Task.WhenAll(channelTasks).ConfigureAwait(false);
-
- var allChannels = results.SelectMany(i => i).ToList();
+ var allChannels = await GetChannels(service, cancellationToken).ConfigureAwait(false);
+ var allChannelsList = allChannels.ToList();
var list = new List<Channel>();
var programs = new List<ProgramInfoDto>();
var numComplete = 0;
- foreach (var channelInfo in allChannels)
+ foreach (var channelInfo in allChannelsList)
{
try
{
var item = await GetChannel(channelInfo.Item2, channelInfo.Item1, cancellationToken).ConfigureAwait(false);
- var service = _services.First(i => string.Equals(channelInfo.Item1, i.Name, StringComparison.OrdinalIgnoreCase));
-
var channelPrograms = await service.GetProgramsAsync(channelInfo.Item2.Id, cancellationToken).ConfigureAwait(false);
programs.AddRange(channelPrograms.Select(program => GetProgramInfoDto(program, item)));
@@ -348,7 +349,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
numComplete++;
double percent = numComplete;
- percent /= allChannels.Count;
+ percent /= allChannelsList.Count;
progress.Report(90 * percent + 10);
}
diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj
index 3bfbdea3e..54fbb502e 100644
--- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj
+++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj
@@ -37,54 +37,14 @@
<Reference Include="Alchemy">
<HintPath>..\packages\Alchemy.2.2.1\lib\net40\Alchemy.dll</HintPath>
</Reference>
- <Reference Include="BDInfo, Version=1.0.5037.22194, Culture=neutral, processorArchitecture=MSIL">
- <SpecificVersion>False</SpecificVersion>
- <HintPath>..\packages\MediaBrowser.BdInfo.1.0.0.5\lib\net20\BDInfo.dll</HintPath>
- </Reference>
<Reference Include="Mono.Data.Sqlite">
<HintPath>..\packages\ServiceStack.OrmLite.Sqlite.Mono.3.9.70\lib\net35\Mono.Data.Sqlite.dll</HintPath>
</Reference>
- <Reference Include="ServiceStack, Version=3.9.70.0, Culture=neutral, processorArchitecture=MSIL">
- <SpecificVersion>False</SpecificVersion>
- <HintPath>..\packages\ServiceStack.3.9.70\lib\net35\ServiceStack.dll</HintPath>
- </Reference>
- <Reference Include="ServiceStack.Api.Swagger, Version=3.9.70.0, Culture=neutral, processorArchitecture=MSIL">
- <SpecificVersion>False</SpecificVersion>
- <HintPath>..\packages\ServiceStack.Api.Swagger.3.9.70\lib\net35\ServiceStack.Api.Swagger.dll</HintPath>
- </Reference>
- <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.OrmLite, Version=3.9.70.0, Culture=neutral, processorArchitecture=MSIL">
- <SpecificVersion>False</SpecificVersion>
- <HintPath>..\packages\ServiceStack.OrmLite.Sqlite.Mono.3.9.70\lib\net35\ServiceStack.OrmLite.dll</HintPath>
- </Reference>
<Reference Include="ServiceStack.OrmLite.Sqlite">
<HintPath>..\packages\ServiceStack.OrmLite.Sqlite.Mono.3.9.70\lib\net35\ServiceStack.OrmLite.Sqlite.dll</HintPath>
</Reference>
- <Reference Include="ServiceStack.ServiceInterface, Version=3.9.70.0, Culture=neutral, processorArchitecture=MSIL">
- <SpecificVersion>False</SpecificVersion>
- <HintPath>..\packages\ServiceStack.3.9.70\lib\net35\ServiceStack.ServiceInterface.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="System.Data.SQLite, Version=1.0.89.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
- <SpecificVersion>False</SpecificVersion>
- <HintPath>..\packages\System.Data.SQLite.x86.1.0.89.0\lib\net45\System.Data.SQLite.dll</HintPath>
- </Reference>
- <Reference Include="System.Data.SQLite.Linq, Version=1.0.89.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
- <SpecificVersion>False</SpecificVersion>
- <HintPath>..\packages\System.Data.SQLite.x86.1.0.89.0\lib\net45\System.Data.SQLite.Linq.dll</HintPath>
- </Reference>
<Reference Include="System.Drawing" />
<Reference Include="System.Reactive.Core">
<HintPath>..\packages\Rx-Core.2.1.30214.0\lib\Net45\System.Reactive.Core.dll</HintPath>
@@ -109,6 +69,36 @@
<Reference Include="ServiceStack.Redis">
<HintPath>..\packages\ServiceStack.Redis.3.9.43\lib\net35\ServiceStack.Redis.dll</HintPath>
</Reference>
+ <Reference Include="BDInfo">
+ <HintPath>..\packages\MediaBrowser.BdInfo.1.0.0.5\lib\net20\BDInfo.dll</HintPath>
+ </Reference>
+ <Reference Include="ServiceStack">
+ <HintPath>..\packages\ServiceStack.3.9.70\lib\net35\ServiceStack.dll</HintPath>
+ </Reference>
+ <Reference Include="ServiceStack.Api.Swagger">
+ <HintPath>..\packages\ServiceStack.Api.Swagger.3.9.70\lib\net35\ServiceStack.Api.Swagger.dll</HintPath>
+ </Reference>
+ <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.OrmLite">
+ <HintPath>..\packages\ServiceStack.OrmLite.Sqlite.Mono.3.9.70\lib\net35\ServiceStack.OrmLite.dll</HintPath>
+ </Reference>
+ <Reference Include="ServiceStack.ServiceInterface">
+ <HintPath>..\packages\ServiceStack.3.9.70\lib\net35\ServiceStack.ServiceInterface.dll</HintPath>
+ </Reference>
+ <Reference Include="ServiceStack.Text">
+ <HintPath>..\packages\ServiceStack.Text.3.9.70\lib\net35\ServiceStack.Text.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Data.SQLite">
+ <HintPath>..\packages\System.Data.SQLite.x86.1.0.89.0\lib\net45\System.Data.SQLite.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Data.SQLite.Linq">
+ <HintPath>..\packages\System.Data.SQLite.x86.1.0.89.0\lib\net45\System.Data.SQLite.Linq.dll</HintPath>
+ </Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="..\SharedVersion.cs">
diff --git a/MediaBrowser.Server.Implementations/Providers/ImageSaver.cs b/MediaBrowser.Server.Implementations/Providers/ImageSaver.cs
index e2192535c..8d88b66a0 100644
--- a/MediaBrowser.Server.Implementations/Providers/ImageSaver.cs
+++ b/MediaBrowser.Server.Implementations/Providers/ImageSaver.cs
@@ -114,7 +114,8 @@ namespace MediaBrowser.Server.Implementations.Providers
}
else if (type == ImageType.Screenshot && imageIndex == null)
{
- imageIndex = item.ScreenshotImagePaths.Count;
+ var hasScreenshots = (IHasScreenshots)item;
+ imageIndex = hasScreenshots.ScreenshotImagePaths.Count;
}
var paths = GetSavePaths(item, type, imageIndex, mimeType, saveLocally);
@@ -262,11 +263,12 @@ namespace MediaBrowser.Server.Implementations.Providers
{
case ImageType.Screenshot:
+ var hasScreenshots = (IHasScreenshots)item;
if (!imageIndex.HasValue)
{
throw new ArgumentNullException("imageIndex");
}
- return item.ScreenshotImagePaths.Count > imageIndex.Value ? item.ScreenshotImagePaths[imageIndex.Value] : null;
+ return hasScreenshots.ScreenshotImagePaths.Count > imageIndex.Value ? hasScreenshots.ScreenshotImagePaths[imageIndex.Value] : null;
case ImageType.Backdrop:
if (!imageIndex.HasValue)
{
@@ -300,13 +302,14 @@ namespace MediaBrowser.Server.Implementations.Providers
throw new ArgumentNullException("imageIndex");
}
- if (item.ScreenshotImagePaths.Count > imageIndex.Value)
+ var hasScreenshots = (IHasScreenshots)item;
+ if (hasScreenshots.ScreenshotImagePaths.Count > imageIndex.Value)
{
- item.ScreenshotImagePaths[imageIndex.Value] = path;
+ hasScreenshots.ScreenshotImagePaths[imageIndex.Value] = path;
}
- else if (!item.ScreenshotImagePaths.Contains(path, StringComparer.OrdinalIgnoreCase))
+ else if (!hasScreenshots.ScreenshotImagePaths.Contains(path, StringComparer.OrdinalIgnoreCase))
{
- item.ScreenshotImagePaths.Add(path);
+ hasScreenshots.ScreenshotImagePaths.Add(path);
}
break;
case ImageType.Backdrop:
@@ -379,7 +382,8 @@ namespace MediaBrowser.Server.Implementations.Providers
{
throw new ArgumentNullException("imageIndex");
}
- filename = GetBackdropSaveFilename(item.ScreenshotImagePaths, "screenshot", "screenshot", imageIndex.Value);
+ var hasScreenshots = (IHasScreenshots)item;
+ filename = GetBackdropSaveFilename(hasScreenshots.ScreenshotImagePaths, "screenshot", "screenshot", imageIndex.Value);
break;
default:
filename = type.ToString().ToLower();