diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations')
7 files changed, 56 insertions, 39 deletions
diff --git a/MediaBrowser.Server.Implementations/IO/DirectoryWatchers.cs b/MediaBrowser.Server.Implementations/IO/DirectoryWatchers.cs index a2240f52d..1efc3bc70 100644 --- a/MediaBrowser.Server.Implementations/IO/DirectoryWatchers.cs +++ b/MediaBrowser.Server.Implementations/IO/DirectoryWatchers.cs @@ -529,27 +529,26 @@ namespace MediaBrowser.Server.Implementations.IO return; } - await Task.WhenAll(itemsToRefresh.Select(i => Task.Run(async () => + foreach (var item in itemsToRefresh) { - Logger.Info(i.Name + " (" + i.Path + ") will be refreshed."); + Logger.Info(item.Name + " (" + item.Path + ") will be refreshed."); try { - await i.ChangedExternally().ConfigureAwait(false); + await item.ChangedExternally().ConfigureAwait(false); } catch (IOException ex) { // For now swallow and log. // Research item: If an IOException occurs, the item may be in a disconnected state (media unavailable) // Should we remove it from it's parent? - Logger.ErrorException("Error refreshing {0}", ex, i.Name); + Logger.ErrorException("Error refreshing {0}", ex, item.Name); } catch (Exception ex) { - Logger.ErrorException("Error refreshing {0}", ex, i.Name); + Logger.ErrorException("Error refreshing {0}", ex, item.Name); } - - }))).ConfigureAwait(false); + } } /// <summary> diff --git a/MediaBrowser.Server.Implementations/Library/CoreResolutionIgnoreRule.cs b/MediaBrowser.Server.Implementations/Library/CoreResolutionIgnoreRule.cs index 95ec416b6..5268faa4f 100644 --- a/MediaBrowser.Server.Implementations/Library/CoreResolutionIgnoreRule.cs +++ b/MediaBrowser.Server.Implementations/Library/CoreResolutionIgnoreRule.cs @@ -114,6 +114,12 @@ namespace MediaBrowser.Server.Implementations.Library { return true; } + + // Don't misidentify xbmc trailers as a movie + if (filename.IndexOf(BaseItem.XbmcTrailerFileSuffix, StringComparison.OrdinalIgnoreCase) != -1) + { + return true; + } } } diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs index 9b095a156..3d6f7e66a 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs @@ -91,31 +91,31 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies if (args.Path.IndexOf("[trailers]", StringComparison.OrdinalIgnoreCase) != -1 || string.Equals(collectionType, CollectionType.Trailers, StringComparison.OrdinalIgnoreCase)) { - return FindMovie<Trailer>(args.Path, args.FileSystemChildren); + return FindMovie<Trailer>(args.Path, args.Parent, args.FileSystemChildren); } if (args.Path.IndexOf("[musicvideos]", StringComparison.OrdinalIgnoreCase) != -1 || string.Equals(collectionType, CollectionType.MusicVideos, StringComparison.OrdinalIgnoreCase)) { - return FindMovie<MusicVideo>(args.Path, args.FileSystemChildren); + return FindMovie<MusicVideo>(args.Path, args.Parent, args.FileSystemChildren); } if (args.Path.IndexOf("[adultvideos]", StringComparison.OrdinalIgnoreCase) != -1 || string.Equals(collectionType, CollectionType.AdultVideos, StringComparison.OrdinalIgnoreCase)) { - return FindMovie<AdultVideo>(args.Path, args.FileSystemChildren); + return FindMovie<AdultVideo>(args.Path, args.Parent, args.FileSystemChildren); } if (string.Equals(collectionType, CollectionType.HomeVideos, StringComparison.OrdinalIgnoreCase)) { - return FindMovie<Video>(args.Path, args.FileSystemChildren); + return FindMovie<Video>(args.Path, args.Parent, args.FileSystemChildren); } if (string.IsNullOrEmpty(collectionType) || string.Equals(collectionType, CollectionType.Movies, StringComparison.OrdinalIgnoreCase) || string.Equals(collectionType, CollectionType.BoxSets, StringComparison.OrdinalIgnoreCase)) { - return FindMovie<Movie>(args.Path, args.FileSystemChildren); + return FindMovie<Movie>(args.Path, args.Parent, args.FileSystemChildren); } return null; @@ -199,9 +199,10 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies /// </summary> /// <typeparam name="T"></typeparam> /// <param name="path">The path.</param> + /// <param name="parent">The parent.</param> /// <param name="fileSystemEntries">The file system entries.</param> /// <returns>Movie.</returns> - private T FindMovie<T>(string path, IEnumerable<FileSystemInfo> fileSystemEntries) + private T FindMovie<T>(string path, Folder parent, IEnumerable<FileSystemInfo> fileSystemEntries) where T : Video, new() { var movies = new List<T>(); @@ -249,7 +250,8 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies var childArgs = new ItemResolveArgs(_applicationPaths, _libraryManager) { FileInfo = child, - Path = child.FullName + Path = child.FullName, + Parent = parent }; var item = ResolveVideo<T>(childArgs); diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs index a3790b097..218c930df 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs @@ -172,7 +172,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv var channel = GetInternalChannel(id); - return await service.GetRecordingStream(channel.ChannelInfo.Id, cancellationToken).ConfigureAwait(false); + return await service.GetChannelStream(channel.ChannelInfo.Id, cancellationToken).ConfigureAwait(false); } private async Task<LiveTvChannel> GetChannel(ChannelInfo channelInfo, string serviceName, CancellationToken cancellationToken) diff --git a/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs b/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs index e9c672151..cbfd7d74d 100644 --- a/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs +++ b/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs @@ -380,33 +380,43 @@ namespace MediaBrowser.Server.Implementations.Providers var preferredLanguage = item.GetPreferredMetadataLanguage(); - var tasks = providers.Select(i => Task.Run(async () => + var tasks = providers.Select(i => GetImages(item, cancellationToken, i, preferredLanguage, type)); + + var results = await Task.WhenAll(tasks).ConfigureAwait(false); + + return results.SelectMany(i => i); + } + + /// <summary> + /// Gets the images. + /// </summary> + /// <param name="item">The item.</param> + /// <param name="cancellationToken">The cancellation token.</param> + /// <param name="i">The i.</param> + /// <param name="preferredLanguage">The preferred language.</param> + /// <param name="type">The type.</param> + /// <returns>Task{IEnumerable{RemoteImageInfo}}.</returns> + private async Task<IEnumerable<RemoteImageInfo>> GetImages(BaseItem item, CancellationToken cancellationToken, IImageProvider i, string preferredLanguage, ImageType? type = null) + { + try { - try + if (type.HasValue) { - if (type.HasValue) - { - var result = await i.GetImages(item, type.Value, cancellationToken).ConfigureAwait(false); + var result = await i.GetImages(item, type.Value, cancellationToken).ConfigureAwait(false); - return FilterImages(result, preferredLanguage); - } - else - { - var result = await i.GetAllImages(item, cancellationToken).ConfigureAwait(false); - return FilterImages(result, preferredLanguage); - } + return FilterImages(result, preferredLanguage); } - catch (Exception ex) + else { - _logger.ErrorException("{0} failed in GetImages for type {1}", ex, i.GetType().Name, item.GetType().Name); - return new List<RemoteImageInfo>(); + var result = await i.GetAllImages(item, cancellationToken).ConfigureAwait(false); + return FilterImages(result, preferredLanguage); } - - }, cancellationToken)); - - var results = await Task.WhenAll(tasks).ConfigureAwait(false); - - return results.SelectMany(i => i); + } + catch (Exception ex) + { + _logger.ErrorException("{0} failed in GetImages for type {1}", ex, i.GetType().Name, item.GetType().Name); + return new List<RemoteImageInfo>(); + } } private IEnumerable<RemoteImageInfo> FilterImages(IEnumerable<RemoteImageInfo> images, string preferredLanguage) diff --git a/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs b/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs index 553aae285..a2dfb51d2 100644 --- a/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs +++ b/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs @@ -243,7 +243,7 @@ namespace MediaBrowser.Server.Implementations.ServerManager /// <param name="dataFunction">The function that generates the data to send, if there are any connected clients</param> public void SendWebSocketMessage<T>(string messageType, Func<T> dataFunction) { - Task.Run(async () => await SendWebSocketMessageAsync(messageType, dataFunction, CancellationToken.None).ConfigureAwait(false)); + SendWebSocketMessageAsync(messageType, dataFunction, CancellationToken.None); } /// <summary> diff --git a/MediaBrowser.Server.Implementations/Session/SessionManager.cs b/MediaBrowser.Server.Implementations/Session/SessionManager.cs index 1a94b9c79..c42f33ec3 100644 --- a/MediaBrowser.Server.Implementations/Session/SessionManager.cs +++ b/MediaBrowser.Server.Implementations/Session/SessionManager.cs @@ -608,7 +608,7 @@ namespace MediaBrowser.Server.Implementations.Session _logger.ErrorException("Error in SendServerShutdownNotification.", ex); } - })); + }, cancellationToken)); return Task.WhenAll(tasks); } @@ -633,7 +633,7 @@ namespace MediaBrowser.Server.Implementations.Session _logger.ErrorException("Error in SendServerRestartNotification.", ex); } - })); + }, cancellationToken)); return Task.WhenAll(tasks); } |
