From fbf8cc833c441de8890998600be044296acfc783 Mon Sep 17 00:00:00 2001 From: LukePulverenti Luke Pulverenti luke pulverenti Date: Tue, 21 Aug 2012 22:50:59 -0400 Subject: a few more async optimizations --- .../Providers/AudioInfoProvider.cs | 14 ++++++++--- .../Providers/BaseMetadataProvider.cs | 2 +- .../Providers/FolderProviderFromXml.cs | 6 +++-- .../Providers/ImageFromMediaLocationProvider.cs | 29 +++++++++++----------- .../Providers/LocalTrailerProvider.cs | 10 +++----- .../Providers/VideoInfoProvider.cs | 11 +++++--- 6 files changed, 39 insertions(+), 33 deletions(-) (limited to 'MediaBrowser.Controller/Providers') diff --git a/MediaBrowser.Controller/Providers/AudioInfoProvider.cs b/MediaBrowser.Controller/Providers/AudioInfoProvider.cs index 85a030ddf5..64b397a697 100644 --- a/MediaBrowser.Controller/Providers/AudioInfoProvider.cs +++ b/MediaBrowser.Controller/Providers/AudioInfoProvider.cs @@ -23,16 +23,22 @@ namespace MediaBrowser.Controller.Providers get { return MetadataProviderPriority.First; } } - public async override Task Fetch(BaseEntity item, ItemResolveEventArgs args) + public async override Task FetchAsync(BaseEntity item, ItemResolveEventArgs args) { Audio audio = item as Audio; - string outputDirectory = Path.Combine(Kernel.Instance.ApplicationPaths.FFProbeAudioCacheDirectory, item.Id.ToString().Substring(0, 1)); + Fetch(audio, await FFProbe.Run(audio, GetFFProbeOutputPath(item)).ConfigureAwait(false)); + } - string outputPath = Path.Combine(outputDirectory, item.Id + "-" + item.DateModified.Ticks + ".js"); + private string GetFFProbeOutputPath(BaseEntity item) + { + string outputDirectory = Path.Combine(Kernel.Instance.ApplicationPaths.FFProbeAudioCacheDirectory, item.Id.ToString().Substring(0, 1)); - FFProbeResult data = await FFProbe.Run(audio, outputPath).ConfigureAwait(false); + return Path.Combine(outputDirectory, item.Id + "-" + item.DateModified.Ticks + ".js"); + } + private void Fetch(Audio audio, FFProbeResult data) + { MediaStream stream = data.streams.First(s => s.codec_type.Equals("audio", StringComparison.OrdinalIgnoreCase)); string bitrate = null; diff --git a/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs b/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs index 6222eec5f7..5c536913ec 100644 --- a/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs +++ b/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs @@ -31,7 +31,7 @@ namespace MediaBrowser.Controller.Providers } } - public abstract Task Fetch(BaseEntity item, ItemResolveEventArgs args); + public abstract Task FetchAsync(BaseEntity item, ItemResolveEventArgs args); public abstract MetadataProviderPriority Priority { get; } } diff --git a/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs b/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs index cba41f780a..2249fb6a50 100644 --- a/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs +++ b/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs @@ -19,14 +19,16 @@ namespace MediaBrowser.Controller.Providers get { return MetadataProviderPriority.First; } } - public async override Task Fetch(BaseEntity item, ItemResolveEventArgs args) + public override Task FetchAsync(BaseEntity item, ItemResolveEventArgs args) { var metadataFile = args.GetFileSystemEntryByName("folder.xml"); if (metadataFile.HasValue) { - await Task.Run(() => { new FolderXmlParser().Fetch(item as Folder, metadataFile.Value.Path); }).ConfigureAwait(false); + return Task.Run(() => { new FolderXmlParser().Fetch(item as Folder, metadataFile.Value.Path); }); } + + return Task.FromResult(null); } } } diff --git a/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs b/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs index 2a5e0394c4..59b58474fc 100644 --- a/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs +++ b/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs @@ -21,24 +21,23 @@ namespace MediaBrowser.Controller.Providers get { return MetadataProviderPriority.First; } } - public override Task Fetch(BaseEntity item, ItemResolveEventArgs args) + public override Task FetchAsync(BaseEntity item, ItemResolveEventArgs args) { - return Task.Run(() => + if (args.IsDirectory) { - if (args.IsDirectory) + var baseItem = item as BaseItem; + + if (baseItem != null) + { + return Task.Run(() => { PopulateImages(baseItem, args); }); + } + else { - var baseItem = item as BaseItem; - - if (baseItem != null) - { - PopulateImages(baseItem, args); - } - else - { - PopulateImages(item, args); - } + return Task.Run(() => { PopulateImages(item, args); }); } - }); + } + + return Task.FromResult(null); } /// @@ -49,7 +48,7 @@ namespace MediaBrowser.Controller.Providers for (int i = 0; i < args.FileSystemChildren.Length; i++) { var file = args.FileSystemChildren[i]; - + string filePath = file.Path; string ext = Path.GetExtension(filePath); diff --git a/MediaBrowser.Controller/Providers/LocalTrailerProvider.cs b/MediaBrowser.Controller/Providers/LocalTrailerProvider.cs index c023edb9af..18ca261dca 100644 --- a/MediaBrowser.Controller/Providers/LocalTrailerProvider.cs +++ b/MediaBrowser.Controller/Providers/LocalTrailerProvider.cs @@ -20,10 +20,8 @@ namespace MediaBrowser.Controller.Providers get { return MetadataProviderPriority.First; } } - public async override Task Fetch(BaseEntity item, ItemResolveEventArgs args) + public async override Task FetchAsync(BaseEntity item, ItemResolveEventArgs args) { - BaseItem baseItem = item as BaseItem; - var trailerPath = args.GetFileSystemEntryByName("trailers", true); if (trailerPath.HasValue) @@ -36,9 +34,7 @@ namespace MediaBrowser.Controller.Providers { string file = allFiles[i]; - BaseItem child = await Kernel.Instance.ItemController.GetItem(file).ConfigureAwait(false); - - Video video = child as Video; + Video video = await Kernel.Instance.ItemController.GetItem(file).ConfigureAwait(false) as Video; if (video != null) { @@ -46,7 +42,7 @@ namespace MediaBrowser.Controller.Providers } } - baseItem.LocalTrailers = localTrailers; + (item as BaseItem).LocalTrailers = localTrailers; } } } diff --git a/MediaBrowser.Controller/Providers/VideoInfoProvider.cs b/MediaBrowser.Controller/Providers/VideoInfoProvider.cs index 5f88aa1cbb..96ca8ed358 100644 --- a/MediaBrowser.Controller/Providers/VideoInfoProvider.cs +++ b/MediaBrowser.Controller/Providers/VideoInfoProvider.cs @@ -24,7 +24,7 @@ namespace MediaBrowser.Controller.Providers get { return MetadataProviderPriority.Second; } } - public override async Task Fetch(BaseEntity item, ItemResolveEventArgs args) + public override async Task FetchAsync(BaseEntity item, ItemResolveEventArgs args) { Video video = item as Video; @@ -39,11 +39,14 @@ namespace MediaBrowser.Controller.Providers return; } - string outputDirectory = Path.Combine(Kernel.Instance.ApplicationPaths.FFProbeVideoCacheDirectory, item.Id.ToString().Substring(0, 1)); + Fetch(video, await FFProbe.Run(video, GetFFProbeOutputPath(video)).ConfigureAwait(false)); + } - string outputPath = Path.Combine(outputDirectory, item.Id + "-" + item.DateModified.Ticks + ".js"); + private string GetFFProbeOutputPath(Video item) + { + string outputDirectory = Path.Combine(Kernel.Instance.ApplicationPaths.FFProbeVideoCacheDirectory, item.Id.ToString().Substring(0, 1)); - FFProbeResult data = await FFProbe.Run(video, outputPath).ConfigureAwait(false); + return Path.Combine(outputDirectory, item.Id + "-" + item.DateModified.Ticks + ".js"); } private void Fetch(Video video, FFProbeResult data) -- cgit v1.2.3