diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations')
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(); |
