diff --git a/MediaBrowser.Common/UI/BaseApplication.cs b/MediaBrowser.Common/UI/BaseApplication.cs index 1b792144a6..9ad2a749b6 100644 --- a/MediaBrowser.Common/UI/BaseApplication.cs +++ b/MediaBrowser.Common/UI/BaseApplication.cs @@ -22,7 +22,7 @@ namespace MediaBrowser.Common.UI // Without this the app will shutdown after the splash screen closes this.ShutdownMode = ShutdownMode.OnExplicitShutdown; - await LoadKernel(); + await LoadKernel().ConfigureAwait(false); } private async Task LoadKernel() diff --git a/MediaBrowser.Controller/FFMpeg/FFProbe.cs b/MediaBrowser.Controller/FFMpeg/FFProbe.cs index ea6bda6224..f5364821ce 100644 --- a/MediaBrowser.Controller/FFMpeg/FFProbe.cs +++ b/MediaBrowser.Controller/FFMpeg/FFProbe.cs @@ -27,7 +27,7 @@ namespace MediaBrowser.Controller.FFMpeg { } - await Run(item.Path, outputCachePath); + await Run(item.Path, outputCachePath).ConfigureAwait(false); using (FileStream stream = File.OpenRead(outputCachePath)) { @@ -49,7 +49,7 @@ namespace MediaBrowser.Controller.FFMpeg { } - await Run(item.Path, outputCachePath); + await Run(item.Path, outputCachePath).ConfigureAwait(false); using (FileStream stream = File.OpenRead(outputCachePath)) { @@ -88,7 +88,7 @@ namespace MediaBrowser.Controller.FFMpeg // If we ever decide to disable the ffmpeg log then you must uncomment the below line. process.BeginErrorReadLine(); - await process.StandardOutput.BaseStream.CopyToAsync(stream); + await process.StandardOutput.BaseStream.CopyToAsync(stream).ConfigureAwait(false); process.WaitForExit(); diff --git a/MediaBrowser.Controller/Kernel.cs b/MediaBrowser.Controller/Kernel.cs index 5824354476..e07b436e30 100644 --- a/MediaBrowser.Controller/Kernel.cs +++ b/MediaBrowser.Controller/Kernel.cs @@ -42,13 +42,13 @@ namespace MediaBrowser.Controller /// Gets the list of currently registered metadata prvoiders /// [ImportMany(typeof(BaseMetadataProvider))] - public IEnumerable MetadataProviders { get; private set; } + public BaseMetadataProvider[] MetadataProviders { get; private set; } /// /// Gets the list of currently registered entity resolvers /// [ImportMany(typeof(IBaseItemResolver))] - public IEnumerable EntityResolvers { get; private set; } + public IBaseItemResolver[] EntityResolvers { get; private set; } /// /// Creates a kernel based on a Data path, which is akin to our current programdata path @@ -69,19 +69,19 @@ namespace MediaBrowser.Controller { await Task.Run(async () => { - await base.Init(progress); + await base.Init(progress).ConfigureAwait(false); progress.Report(new TaskProgress() { Description = "Loading Users", PercentComplete = 15 }); ReloadUsers(); progress.Report(new TaskProgress() { Description = "Extracting FFMpeg", PercentComplete = 20 }); - await ExtractFFMpeg(); + await ExtractFFMpeg().ConfigureAwait(false); progress.Report(new TaskProgress() { Description = "Loading Media Library", PercentComplete = 25 }); - await ReloadRoot(); + await ReloadRoot().ConfigureAwait(false); progress.Report(new TaskProgress() { Description = "Loading Complete", PercentComplete = 100 }); - }); + }).ConfigureAwait(false); } protected override void OnComposablePartsLoaded() @@ -149,7 +149,7 @@ namespace MediaBrowser.Controller DirectoryWatchers.Stop(); - RootFolder = await ItemController.GetItem(null, MediaRootFolderPath) as Folder; + RootFolder = await ItemController.GetItem(null, MediaRootFolderPath).ConfigureAwait(false) as Folder; DirectoryWatchers.Start(); } @@ -168,17 +168,17 @@ namespace MediaBrowser.Controller if (folder != null && folder.IsRoot) { - await ReloadRoot(); + await ReloadRoot().ConfigureAwait(false); } else { if (!Directory.Exists(item.Path) && !File.Exists(item.Path)) { - await ReloadItem(item.Parent); + await ReloadItem(item.Parent).ConfigureAwait(false); return; } - BaseItem newItem = await ItemController.GetItem(item.Parent, item.Path); + BaseItem newItem = await ItemController.GetItem(item.Parent, item.Path).ConfigureAwait(false); List children = item.Parent.Children.ToList(); @@ -238,7 +238,7 @@ namespace MediaBrowser.Controller { await Task.WhenAll( providers.Select(i => i.Fetch(item, args)) - ); + ).ConfigureAwait(false); } // Second priority providers @@ -248,7 +248,7 @@ namespace MediaBrowser.Controller { await Task.WhenAll( providers.Select(i => i.Fetch(item, args)) - ); + ).ConfigureAwait(false); } // Third priority providers @@ -258,7 +258,7 @@ namespace MediaBrowser.Controller { await Task.WhenAll( providers.Select(i => i.Fetch(item, args)) - ); + ).ConfigureAwait(false); } // Lowest priority providers @@ -268,7 +268,7 @@ namespace MediaBrowser.Controller { await Task.WhenAll( providers.Select(i => i.Fetch(item, args)) - ); + ).ConfigureAwait(false); } // Execute internet providers @@ -278,7 +278,7 @@ namespace MediaBrowser.Controller { await Task.WhenAll( providers.Select(i => i.Fetch(item, args)) - ); + ).ConfigureAwait(false); } } @@ -289,8 +289,8 @@ namespace MediaBrowser.Controller private async Task ExtractFFMpeg() { // FFMpeg.exe - await ExtractFFMpeg(ApplicationPaths.FFMpegPath); - await ExtractFFMpeg(ApplicationPaths.FFProbePath); + await ExtractFFMpeg(ApplicationPaths.FFMpegPath).ConfigureAwait(false); + await ExtractFFMpeg(ApplicationPaths.FFProbePath).ConfigureAwait(false); } private async Task ExtractFFMpeg(string exe) @@ -305,7 +305,7 @@ namespace MediaBrowser.Controller { using (FileStream fileStream = new FileStream(exe, FileMode.Create)) { - await stream.CopyToAsync(fileStream); + await stream.CopyToAsync(fileStream).ConfigureAwait(false); } } } diff --git a/MediaBrowser.Controller/Library/ItemController.cs b/MediaBrowser.Controller/Library/ItemController.cs index 0f9b859b6f..55deea8350 100644 --- a/MediaBrowser.Controller/Library/ItemController.cs +++ b/MediaBrowser.Controller/Library/ItemController.cs @@ -57,12 +57,12 @@ namespace MediaBrowser.Controller.Library } #endregion - private async Task ResolveItem(ItemResolveEventArgs args) + private BaseItem ResolveItem(ItemResolveEventArgs args) { // Try first priority resolvers foreach (IBaseItemResolver resolver in Kernel.Instance.EntityResolvers.Where(p => p.Priority == ResolverPriority.First)) { - var item = await resolver.ResolvePath(args); + var item = resolver.ResolvePath(args); if (item != null) { @@ -73,7 +73,7 @@ namespace MediaBrowser.Controller.Library // Try second priority resolvers foreach (IBaseItemResolver resolver in Kernel.Instance.EntityResolvers.Where(p => p.Priority == ResolverPriority.Second)) { - var item = await resolver.ResolvePath(args); + var item = resolver.ResolvePath(args); if (item != null) { @@ -84,7 +84,7 @@ namespace MediaBrowser.Controller.Library // Try third priority resolvers foreach (IBaseItemResolver resolver in Kernel.Instance.EntityResolvers.Where(p => p.Priority == ResolverPriority.Third)) { - var item = await resolver.ResolvePath(args); + var item = resolver.ResolvePath(args); if (item != null) { @@ -95,14 +95,14 @@ namespace MediaBrowser.Controller.Library // Try last priority resolvers foreach (IBaseItemResolver resolver in Kernel.Instance.EntityResolvers.Where(p => p.Priority == ResolverPriority.Last)) { - var item = await resolver.ResolvePath(args); + var item = resolver.ResolvePath(args); if (item != null) { return item; } } - + return null; } @@ -111,7 +111,7 @@ namespace MediaBrowser.Controller.Library /// public async Task GetItem(Folder parent, string path) { - return await GetItemInternal(parent, path, File.GetAttributes(path)); + return await GetItemInternal(parent, path, File.GetAttributes(path)).ConfigureAwait(false); } /// @@ -154,14 +154,19 @@ namespace MediaBrowser.Controller.Library return null; } - BaseItem item = await ResolveItem(args); + BaseItem item = ResolveItem(args); - var folder = item as Folder; - - if (folder != null) + if (item != null) { - // If it's a folder look for child entities - await AttachChildren(folder, fileSystemChildren); + await Kernel.Instance.ExecuteMetadataProviders(item, args); + + var folder = item as Folder; + + if (folder != null) + { + // If it's a folder look for child entities + await AttachChildren(folder, fileSystemChildren).ConfigureAwait(false); + } } return item; @@ -185,7 +190,7 @@ namespace MediaBrowser.Controller.Library tasks[i] = GetItemInternal(folder, child.Key, child.Value); } - BaseItem[] baseItemChildren = await Task.WhenAll(tasks); + BaseItem[] baseItemChildren = await Task.WhenAll(tasks).ConfigureAwait(false); // Sort them folder.Children = baseItemChildren.Where(i => i != null).OrderBy(f => @@ -255,7 +260,7 @@ namespace MediaBrowser.Controller.Library { string path = Path.Combine(Kernel.Instance.ApplicationPaths.PeoplePath, name); - return await GetImagesByNameItem(path, name); + return await GetImagesByNameItem(path, name).ConfigureAwait(false); } /// @@ -265,7 +270,7 @@ namespace MediaBrowser.Controller.Library { string path = Path.Combine(Kernel.Instance.ApplicationPaths.StudioPath, name); - return await GetImagesByNameItem(path, name); + return await GetImagesByNameItem(path, name).ConfigureAwait(false); } /// @@ -275,7 +280,7 @@ namespace MediaBrowser.Controller.Library { string path = Path.Combine(Kernel.Instance.ApplicationPaths.GenrePath, name); - return await GetImagesByNameItem(path, name); + return await GetImagesByNameItem(path, name).ConfigureAwait(false); } /// @@ -285,7 +290,7 @@ namespace MediaBrowser.Controller.Library { string path = Path.Combine(Kernel.Instance.ApplicationPaths.YearPath, value.ToString()); - return await GetImagesByNameItem(path, value.ToString()); + return await GetImagesByNameItem(path, value.ToString()).ConfigureAwait(false); } private ConcurrentDictionary ImagesByNameItemCache = new ConcurrentDictionary(); @@ -301,7 +306,7 @@ namespace MediaBrowser.Controller.Library // Look for it in the cache, if it's not there, create it if (!ImagesByNameItemCache.ContainsKey(key)) { - T obj = await CreateImagesByNameItem(path, name); + T obj = await CreateImagesByNameItem(path, name).ConfigureAwait(false); ImagesByNameItemCache[key] = obj; return obj; } @@ -333,7 +338,7 @@ namespace MediaBrowser.Controller.Library args.FileAttributes = File.GetAttributes(path); args.FileSystemChildren = Directory.GetFileSystemEntries(path, "*", SearchOption.TopDirectoryOnly).Select(f => new KeyValuePair(f, File.GetAttributes(f))); - await Kernel.Instance.ExecuteMetadataProviders(item, args); + await Kernel.Instance.ExecuteMetadataProviders(item, args).ConfigureAwait(false); return item; } diff --git a/MediaBrowser.Controller/Providers/AudioInfoProvider.cs b/MediaBrowser.Controller/Providers/AudioInfoProvider.cs index 0f513f3698..6f43bc1e08 100644 --- a/MediaBrowser.Controller/Providers/AudioInfoProvider.cs +++ b/MediaBrowser.Controller/Providers/AudioInfoProvider.cs @@ -31,7 +31,7 @@ namespace MediaBrowser.Controller.Providers string outputPath = Path.Combine(outputDirectory, item.Id + "-" + item.DateModified.Ticks + ".js"); - FFProbeResult data = await FFProbe.Run(audio, outputPath); + FFProbeResult data = await FFProbe.Run(audio, outputPath).ConfigureAwait(false); MediaStream stream = data.streams.First(s => s.codec_type.Equals("audio", StringComparison.OrdinalIgnoreCase)); diff --git a/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs b/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs index 9b1b424b18..8d7ab3dc72 100644 --- a/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs +++ b/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs @@ -25,7 +25,7 @@ namespace MediaBrowser.Controller.Providers if (metadataFile.HasValue) { - await new FolderXmlParser().Fetch(item as Folder, metadataFile.Value.Key); + await Task.Run(() => { new FolderXmlParser().Fetch(item as Folder, metadataFile.Value.Key); }).ConfigureAwait(false); } } } diff --git a/MediaBrowser.Controller/Providers/LocalTrailerProvider.cs b/MediaBrowser.Controller/Providers/LocalTrailerProvider.cs index d546f6043a..f0fe4a67e6 100644 --- a/MediaBrowser.Controller/Providers/LocalTrailerProvider.cs +++ b/MediaBrowser.Controller/Providers/LocalTrailerProvider.cs @@ -34,7 +34,7 @@ namespace MediaBrowser.Controller.Providers foreach (string file in allFiles) { - BaseItem child = await Kernel.Instance.ItemController.GetItem(null, file); + BaseItem child = await Kernel.Instance.ItemController.GetItem(null, file).ConfigureAwait(false); Video video = child as Video; diff --git a/MediaBrowser.Controller/Providers/VideoInfoProvider.cs b/MediaBrowser.Controller/Providers/VideoInfoProvider.cs index 8b140bfc06..dba459640c 100644 --- a/MediaBrowser.Controller/Providers/VideoInfoProvider.cs +++ b/MediaBrowser.Controller/Providers/VideoInfoProvider.cs @@ -43,7 +43,7 @@ namespace MediaBrowser.Controller.Providers string outputPath = Path.Combine(outputDirectory, item.Id + "-" + item.DateModified.Ticks + ".js"); - FFProbeResult data = await FFProbe.Run(video, outputPath); + FFProbeResult data = await FFProbe.Run(video, outputPath).ConfigureAwait(false); } /// diff --git a/MediaBrowser.Controller/Resolvers/BaseItemResolver.cs b/MediaBrowser.Controller/Resolvers/BaseItemResolver.cs index 2bb4f6191b..4f6cc90cfd 100644 --- a/MediaBrowser.Controller/Resolvers/BaseItemResolver.cs +++ b/MediaBrowser.Controller/Resolvers/BaseItemResolver.cs @@ -42,7 +42,7 @@ namespace MediaBrowser.Controller.Resolvers item.Id = Kernel.GetMD5(item.Path); } - public async Task ResolvePath(ItemResolveEventArgs args) + public BaseItem ResolvePath(ItemResolveEventArgs args) { T item = Resolve(args); @@ -56,8 +56,6 @@ namespace MediaBrowser.Controller.Resolvers // Make sure DateCreated and DateModified have values EnsureDates(item); - - await Kernel.Instance.ExecuteMetadataProviders(item, args); } return item; @@ -96,7 +94,7 @@ namespace MediaBrowser.Controller.Resolvers /// public interface IBaseItemResolver { - Task ResolvePath(ItemResolveEventArgs args); + BaseItem ResolvePath(ItemResolveEventArgs args); ResolverPriority Priority { get; } } diff --git a/MediaBrowser.Controller/Xml/BaseItemXmlParser.cs b/MediaBrowser.Controller/Xml/BaseItemXmlParser.cs index cf0c89cba3..e1327e0a3d 100644 --- a/MediaBrowser.Controller/Xml/BaseItemXmlParser.cs +++ b/MediaBrowser.Controller/Xml/BaseItemXmlParser.cs @@ -17,19 +17,19 @@ namespace MediaBrowser.Controller.Xml /// /// Fetches metadata for an item from one xml file /// - public async Task Fetch(T item, string metadataFile) + public void Fetch(T item, string metadataFile) { // Use XmlReader for best performance - using (XmlReader reader = XmlReader.Create(metadataFile, new XmlReaderSettings() { Async = true })) + using (XmlReader reader = XmlReader.Create(metadataFile, new XmlReaderSettings() { })) { - await reader.MoveToContentAsync(); + reader.MoveToContent(); // Loop through each element - while (await reader.ReadAsync()) + while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { - await FetchDataFromXmlNode(reader, item); + FetchDataFromXmlNode(reader, item); } } } @@ -49,14 +49,14 @@ namespace MediaBrowser.Controller.Xml /// /// Fetches metadata from one Xml Element /// - protected async virtual Task FetchDataFromXmlNode(XmlReader reader, T item) + protected virtual void FetchDataFromXmlNode(XmlReader reader, T item) { switch (reader.Name) { // DateCreated case "Added": DateTime added; - if (DateTime.TryParse(await reader.ReadElementContentAsStringAsync() ?? string.Empty, out added)) + if (DateTime.TryParse(reader.ReadElementContentAsString() ?? string.Empty, out added)) { item.DateCreated = added; } @@ -65,7 +65,7 @@ namespace MediaBrowser.Controller.Xml // DisplayMediaType case "Type": { - item.DisplayMediaType = await reader.ReadElementContentAsStringAsync(); + item.DisplayMediaType = reader.ReadElementContentAsString(); switch (item.DisplayMediaType.ToLower()) { @@ -85,26 +85,26 @@ namespace MediaBrowser.Controller.Xml // TODO: Do we still need this? case "banner": - item.BannerImagePath = await reader.ReadElementContentAsStringAsync(); + item.BannerImagePath = reader.ReadElementContentAsString(); break; case "LocalTitle": - item.Name = await reader.ReadElementContentAsStringAsync(); + item.Name = reader.ReadElementContentAsString(); break; case "SortTitle": - item.SortName = await reader.ReadElementContentAsStringAsync(); + item.SortName = reader.ReadElementContentAsString(); break; case "Overview": case "Description": - item.Overview = await reader.ReadElementContentAsStringAsync(); + item.Overview = reader.ReadElementContentAsString(); break; case "TagLine": { var list = (item.Taglines ?? new string[] { }).ToList(); - var tagline = await reader.ReadElementContentAsStringAsync(); + var tagline = reader.ReadElementContentAsString(); if (!list.Contains(tagline)) { @@ -117,23 +117,23 @@ namespace MediaBrowser.Controller.Xml case "TagLines": { - await FetchFromTaglinesNode(reader.ReadSubtree(), item); + FetchFromTaglinesNode(reader.ReadSubtree(), item); break; } case "ContentRating": case "MPAARating": - item.OfficialRating = await reader.ReadElementContentAsStringAsync(); + item.OfficialRating = reader.ReadElementContentAsString(); break; case "CustomRating": - item.CustomRating = await reader.ReadElementContentAsStringAsync(); + item.CustomRating = reader.ReadElementContentAsString(); break; case "Runtime": case "RunningTime": { - string text = await reader.ReadElementContentAsStringAsync(); + string text = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(text)) { @@ -149,20 +149,20 @@ namespace MediaBrowser.Controller.Xml case "Genre": { var genres = (item.Genres ?? new string[] { }).ToList(); - genres.AddRange(GetSplitValues(await reader.ReadElementContentAsStringAsync(), '|')); + genres.AddRange(GetSplitValues(reader.ReadElementContentAsString(), '|')); item.Genres = genres; break; } case "AspectRatio": - item.AspectRatio = await reader.ReadElementContentAsStringAsync(); + item.AspectRatio = reader.ReadElementContentAsString(); break; case "Network": { var studios = (item.Studios ?? new string[] { }).ToList(); - studios.AddRange(GetSplitValues(await reader.ReadElementContentAsStringAsync(), '|')); + studios.AddRange(GetSplitValues(reader.ReadElementContentAsString(), '|')); item.Studios = studios; break; @@ -171,7 +171,7 @@ namespace MediaBrowser.Controller.Xml case "Director": { var list = (item.People ?? new PersonInfo[] { }).ToList(); - list.AddRange(GetSplitValues(await reader.ReadElementContentAsStringAsync(), '|').Select(v => new PersonInfo() { Name = v, Type = "Director" })); + list.AddRange(GetSplitValues(reader.ReadElementContentAsString(), '|').Select(v => new PersonInfo() { Name = v, Type = "Director" })); item.People = list; break; @@ -179,7 +179,7 @@ namespace MediaBrowser.Controller.Xml case "Writer": { var list = (item.People ?? new PersonInfo[] { }).ToList(); - list.AddRange(GetSplitValues(await reader.ReadElementContentAsStringAsync(), '|').Select(v => new PersonInfo() { Name = v, Type = "Writer" })); + list.AddRange(GetSplitValues(reader.ReadElementContentAsString(), '|').Select(v => new PersonInfo() { Name = v, Type = "Writer" })); item.People = list; break; @@ -189,19 +189,19 @@ namespace MediaBrowser.Controller.Xml case "GuestStars": { var list = (item.People ?? new PersonInfo[] { }).ToList(); - list.AddRange(GetSplitValues(await reader.ReadElementContentAsStringAsync(), '|').Select(v => new PersonInfo() { Name = v, Type = "Actor" })); + list.AddRange(GetSplitValues(reader.ReadElementContentAsString(), '|').Select(v => new PersonInfo() { Name = v, Type = "Actor" })); item.People = list; break; } case "Trailer": - item.TrailerUrl = await reader.ReadElementContentAsStringAsync(); + item.TrailerUrl = reader.ReadElementContentAsString(); break; case "ProductionYear": { - string val = await reader.ReadElementContentAsStringAsync(); + string val = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(val)) { @@ -218,7 +218,7 @@ namespace MediaBrowser.Controller.Xml case "Rating": case "IMDBrating": - string rating = await reader.ReadElementContentAsStringAsync(); + string rating = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(rating)) { @@ -233,7 +233,7 @@ namespace MediaBrowser.Controller.Xml case "FirstAired": { - string firstAired = await reader.ReadElementContentAsStringAsync(); + string firstAired = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(firstAired)) { @@ -250,7 +250,7 @@ namespace MediaBrowser.Controller.Xml } case "TMDbId": - string tmdb = await reader.ReadElementContentAsStringAsync(); + string tmdb = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(tmdb)) { item.SetProviderId(MetadataProviders.Tmdb, tmdb); @@ -258,7 +258,7 @@ namespace MediaBrowser.Controller.Xml break; case "TVcomId": - string TVcomId = await reader.ReadElementContentAsStringAsync(); + string TVcomId = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(TVcomId)) { item.SetProviderId(MetadataProviders.Tvcom, TVcomId); @@ -268,7 +268,7 @@ namespace MediaBrowser.Controller.Xml case "IMDB_ID": case "IMDB": case "IMDbId": - string IMDbId = await reader.ReadElementContentAsStringAsync(); + string IMDbId = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(IMDbId)) { item.SetProviderId(MetadataProviders.Imdb, IMDbId); @@ -276,19 +276,19 @@ namespace MediaBrowser.Controller.Xml break; case "Genres": - await FetchFromGenresNode(reader.ReadSubtree(), item); + FetchFromGenresNode(reader.ReadSubtree(), item); break; case "Persons": - await FetchDataFromPersonsNode(reader.ReadSubtree(), item); + FetchDataFromPersonsNode(reader.ReadSubtree(), item); break; case "ParentalRating": - await FetchFromParentalRatingNode(reader.ReadSubtree(), item); + FetchFromParentalRatingNode(reader.ReadSubtree(), item); break; case "Studios": - await FetchFromStudiosNode(reader.ReadSubtree(), item); + FetchFromStudiosNode(reader.ReadSubtree(), item); break; case "MediaInfo": @@ -297,22 +297,22 @@ namespace MediaBrowser.Controller.Xml if (video != null) { - await FetchMediaInfo(reader.ReadSubtree(), video); + FetchMediaInfo(reader.ReadSubtree(), video); } break; } default: - await reader.SkipAsync(); + reader.Skip(); break; } } - private async Task FetchMediaInfo(XmlReader reader, Video item) + private void FetchMediaInfo(XmlReader reader, Video item) { - await reader.MoveToContentAsync(); + reader.MoveToContent(); - while (await reader.ReadAsync()) + while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { @@ -320,7 +320,7 @@ namespace MediaBrowser.Controller.Xml { case "Audio": { - AudioStream stream = await FetchMediaInfoAudio(reader.ReadSubtree()); + AudioStream stream = FetchMediaInfoAudio(reader.ReadSubtree()); List streams = (item.AudioStreams ?? new AudioStream[] { }).ToList(); streams.Add(stream); @@ -330,59 +330,59 @@ namespace MediaBrowser.Controller.Xml } case "Video": - await FetchMediaInfoVideo(reader.ReadSubtree(), item); + FetchMediaInfoVideo(reader.ReadSubtree(), item); break; case "Subtitle": - await FetchMediaInfoSubtitles(reader.ReadSubtree(), item); + FetchMediaInfoSubtitles(reader.ReadSubtree(), item); break; default: - await reader.SkipAsync(); + reader.Skip(); break; } } } } - private async Task FetchMediaInfoAudio(XmlReader reader) + private AudioStream FetchMediaInfoAudio(XmlReader reader) { AudioStream stream = new AudioStream(); - await reader.MoveToContentAsync(); + reader.MoveToContent(); - while (await reader.ReadAsync()) + while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { switch (reader.Name) { case "Default": - stream.IsDefault = await reader.ReadElementContentAsStringAsync() == "True"; + stream.IsDefault = reader.ReadElementContentAsString() == "True"; break; case "Forced": - stream.IsForced = await reader.ReadElementContentAsStringAsync() == "True"; + stream.IsForced = reader.ReadElementContentAsString() == "True"; break; case "BitRate": - stream.BitRate = await reader.ReadIntSafe(); + stream.BitRate = reader.ReadIntSafe(); break; case "Channels": - stream.Channels = await reader.ReadIntSafe(); + stream.Channels = reader.ReadIntSafe(); break; case "Language": - stream.Language = await reader.ReadElementContentAsStringAsync(); + stream.Language = reader.ReadElementContentAsString(); break; case "Codec": - stream.Codec = await reader.ReadElementContentAsStringAsync(); + stream.Codec = reader.ReadElementContentAsString(); break; default: - await reader.SkipAsync(); + reader.Skip(); break; } } @@ -391,42 +391,42 @@ namespace MediaBrowser.Controller.Xml return stream; } - private async Task FetchMediaInfoVideo(XmlReader reader, Video item) + private void FetchMediaInfoVideo(XmlReader reader, Video item) { - await reader.MoveToContentAsync(); + reader.MoveToContent(); - while (await reader.ReadAsync()) + while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { switch (reader.Name) { case "Width": - item.Width = await reader.ReadIntSafe(); + item.Width = reader.ReadIntSafe(); break; case "Height": - item.Height = await reader.ReadIntSafe(); + item.Height = reader.ReadIntSafe(); break; case "BitRate": - item.BitRate = await reader.ReadIntSafe(); + item.BitRate = reader.ReadIntSafe(); break; case "FrameRate": - item.FrameRate = await reader.ReadElementContentAsStringAsync(); + item.FrameRate = reader.ReadElementContentAsString(); break; case "ScanType": - item.ScanType = await reader.ReadElementContentAsStringAsync(); + item.ScanType = reader.ReadElementContentAsString(); break; case "Duration": - item.RunTimeTicks = TimeSpan.FromMinutes(await reader.ReadIntSafe()).Ticks; + item.RunTimeTicks = TimeSpan.FromMinutes(reader.ReadIntSafe()).Ticks; break; case "DurationSeconds": - int seconds = await reader.ReadIntSafe(); + int seconds = reader.ReadIntSafe(); if (seconds > 0) { item.RunTimeTicks = TimeSpan.FromSeconds(seconds).Ticks; @@ -435,7 +435,7 @@ namespace MediaBrowser.Controller.Xml case "Codec": { - string videoCodec = await reader.ReadElementContentAsStringAsync(); + string videoCodec = reader.ReadElementContentAsString(); switch (videoCodec.ToLower()) { @@ -457,20 +457,20 @@ namespace MediaBrowser.Controller.Xml } default: - await reader.SkipAsync(); + reader.Skip(); break; } } } } - private async Task FetchMediaInfoSubtitles(XmlReader reader, Video item) + private void FetchMediaInfoSubtitles(XmlReader reader, Video item) { List list = (item.Subtitles ?? new string[] { }).ToList(); - await reader.MoveToContentAsync(); + reader.MoveToContent(); - while (await reader.ReadAsync()) + while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { @@ -478,7 +478,7 @@ namespace MediaBrowser.Controller.Xml { case "Language": { - string genre = await reader.ReadElementContentAsStringAsync(); + string genre = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(genre)) { @@ -488,7 +488,7 @@ namespace MediaBrowser.Controller.Xml } default: - await reader.SkipAsync(); + reader.Skip(); break; } } @@ -497,13 +497,13 @@ namespace MediaBrowser.Controller.Xml item.Subtitles = list; } - private async Task FetchFromTaglinesNode(XmlReader reader, T item) + private void FetchFromTaglinesNode(XmlReader reader, T item) { List list = (item.Taglines ?? new string[] { }).ToList(); - await reader.MoveToContentAsync(); + reader.MoveToContent(); - while (await reader.ReadAsync()) + while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { @@ -511,7 +511,7 @@ namespace MediaBrowser.Controller.Xml { case "Tagline": { - string val = await reader.ReadElementContentAsStringAsync(); + string val = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(val)) { @@ -521,7 +521,7 @@ namespace MediaBrowser.Controller.Xml } default: - await reader.SkipAsync(); + reader.Skip(); break; } } @@ -530,13 +530,13 @@ namespace MediaBrowser.Controller.Xml item.Taglines = list; } - private async Task FetchFromGenresNode(XmlReader reader, T item) + private void FetchFromGenresNode(XmlReader reader, T item) { List list = (item.Genres ?? new string[] { }).ToList(); - await reader.MoveToContentAsync(); + reader.MoveToContent(); - while (await reader.ReadAsync()) + while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { @@ -544,7 +544,7 @@ namespace MediaBrowser.Controller.Xml { case "Genre": { - string genre = await reader.ReadElementContentAsStringAsync(); + string genre = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(genre)) { @@ -554,7 +554,7 @@ namespace MediaBrowser.Controller.Xml } default: - await reader.SkipAsync(); + reader.Skip(); break; } } @@ -563,13 +563,13 @@ namespace MediaBrowser.Controller.Xml item.Genres = list; } - private async Task FetchDataFromPersonsNode(XmlReader reader, T item) + private void FetchDataFromPersonsNode(XmlReader reader, T item) { List list = (item.People ?? new PersonInfo[] { }).ToList(); - await reader.MoveToContentAsync(); + reader.MoveToContent(); - while (await reader.ReadAsync()) + while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { @@ -577,12 +577,12 @@ namespace MediaBrowser.Controller.Xml { case "Person": { - list.Add(await GetPersonFromXmlNode(reader.ReadSubtree())); + list.Add(GetPersonFromXmlNode(reader.ReadSubtree())); break; } default: - await reader.SkipAsync(); + reader.Skip(); break; } } @@ -591,13 +591,13 @@ namespace MediaBrowser.Controller.Xml item.People = list; } - private async Task FetchFromStudiosNode(XmlReader reader, T item) + private void FetchFromStudiosNode(XmlReader reader, T item) { List list = (item.Studios ?? new string[] { }).ToList(); - await reader.MoveToContentAsync(); + reader.MoveToContent(); - while (await reader.ReadAsync()) + while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { @@ -605,7 +605,7 @@ namespace MediaBrowser.Controller.Xml { case "Studio": { - string studio = await reader.ReadElementContentAsStringAsync(); + string studio = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(studio)) { @@ -615,7 +615,7 @@ namespace MediaBrowser.Controller.Xml } default: - await reader.SkipAsync(); + reader.Skip(); break; } } @@ -624,11 +624,11 @@ namespace MediaBrowser.Controller.Xml item.Studios = list; } - private async Task FetchFromParentalRatingNode(XmlReader reader, T item) + private void FetchFromParentalRatingNode(XmlReader reader, T item) { - await reader.MoveToContentAsync(); + reader.MoveToContent(); - while (await reader.ReadAsync()) + while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { @@ -636,7 +636,7 @@ namespace MediaBrowser.Controller.Xml { case "Value": { - string ratingString = await reader.ReadElementContentAsStringAsync(); + string ratingString = reader.ReadElementContentAsString(); int rating = 7; @@ -675,39 +675,39 @@ namespace MediaBrowser.Controller.Xml } default: - await reader.SkipAsync(); + reader.Skip(); break; } } } } - private async Task GetPersonFromXmlNode(XmlReader reader) + private PersonInfo GetPersonFromXmlNode(XmlReader reader) { PersonInfo person = new PersonInfo(); - await reader.MoveToContentAsync(); + reader.MoveToContent(); - while (await reader.ReadAsync()) + while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { switch (reader.Name) { case "Name": - person.Name = await reader.ReadElementContentAsStringAsync(); + person.Name = reader.ReadElementContentAsString(); break; case "Type": - person.Type = await reader.ReadElementContentAsStringAsync(); + person.Type = reader.ReadElementContentAsString(); break; case "Role": - person.Overview = await reader.ReadElementContentAsStringAsync(); + person.Overview = reader.ReadElementContentAsString(); break; default: - await reader.SkipAsync(); + reader.Skip(); break; } } diff --git a/MediaBrowser.Controller/Xml/XmlExtensions.cs b/MediaBrowser.Controller/Xml/XmlExtensions.cs index 3e7ae7a173..77a0c2baa6 100644 --- a/MediaBrowser.Controller/Xml/XmlExtensions.cs +++ b/MediaBrowser.Controller/Xml/XmlExtensions.cs @@ -11,9 +11,9 @@ namespace MediaBrowser.Controller.Xml /// /// Reads a float from the current element of an XmlReader /// - public static async Task ReadFloatSafe(this XmlReader reader) + public static float ReadFloatSafe(this XmlReader reader) { - string valueString = await reader.ReadElementContentAsStringAsync(); + string valueString = reader.ReadElementContentAsString(); float value = 0; @@ -29,9 +29,9 @@ namespace MediaBrowser.Controller.Xml /// /// Reads an int from the current element of an XmlReader /// - public static async Task ReadIntSafe(this XmlReader reader) + public static int ReadIntSafe(this XmlReader reader) { - string valueString = await reader.ReadElementContentAsStringAsync(); + string valueString = reader.ReadElementContentAsString(); int value = 0; diff --git a/MediaBrowser.Movies/Providers/MovieProviderFromXml.cs b/MediaBrowser.Movies/Providers/MovieProviderFromXml.cs index e5cdf913c5..c5f8d0d742 100644 --- a/MediaBrowser.Movies/Providers/MovieProviderFromXml.cs +++ b/MediaBrowser.Movies/Providers/MovieProviderFromXml.cs @@ -27,7 +27,7 @@ namespace MediaBrowser.Movies.Providers if (metadataFile.HasValue) { - await new BaseItemXmlParser().Fetch(item as Movie, metadataFile.Value.Key); + await Task.Run(() => { new BaseItemXmlParser().Fetch(item as Movie, metadataFile.Value.Key); }).ConfigureAwait(false); } } } diff --git a/MediaBrowser.TV/Metadata/EpisodeXmlParser.cs b/MediaBrowser.TV/Metadata/EpisodeXmlParser.cs index 1ef9588561..4e87cad6e8 100644 --- a/MediaBrowser.TV/Metadata/EpisodeXmlParser.cs +++ b/MediaBrowser.TV/Metadata/EpisodeXmlParser.cs @@ -8,13 +8,13 @@ namespace MediaBrowser.TV.Metadata { public class EpisodeXmlParser : BaseItemXmlParser { - protected override async Task FetchDataFromXmlNode(XmlReader reader, Episode item) + protected override void FetchDataFromXmlNode(XmlReader reader, Episode item) { switch (reader.Name) { case "filename": { - string filename = await reader.ReadElementContentAsStringAsync(); + string filename = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(filename)) { @@ -25,7 +25,7 @@ namespace MediaBrowser.TV.Metadata } case "SeasonNumber": { - string number = await reader.ReadElementContentAsStringAsync(); + string number = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(number)) { @@ -36,7 +36,7 @@ namespace MediaBrowser.TV.Metadata case "EpisodeNumber": { - string number = await reader.ReadElementContentAsStringAsync(); + string number = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(number)) { @@ -46,11 +46,11 @@ namespace MediaBrowser.TV.Metadata } case "EpisodeName": - item.Name = await reader.ReadElementContentAsStringAsync(); + item.Name = reader.ReadElementContentAsString(); break; default: - await base.FetchDataFromXmlNode(reader, item); + base.FetchDataFromXmlNode(reader, item); break; } } diff --git a/MediaBrowser.TV/Metadata/SeriesXmlParser.cs b/MediaBrowser.TV/Metadata/SeriesXmlParser.cs index f3c0fa8ca6..d92f9710b5 100644 --- a/MediaBrowser.TV/Metadata/SeriesXmlParser.cs +++ b/MediaBrowser.TV/Metadata/SeriesXmlParser.cs @@ -9,12 +9,12 @@ namespace MediaBrowser.TV.Metadata { public class SeriesXmlParser : BaseItemXmlParser { - protected async override Task FetchDataFromXmlNode(XmlReader reader, Series item) + protected override void FetchDataFromXmlNode(XmlReader reader, Series item) { switch (reader.Name) { case "id": - string id = await reader.ReadElementContentAsStringAsync(); + string id = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(id)) { item.SetProviderId(MetadataProviders.Tvdb, id); @@ -23,7 +23,7 @@ namespace MediaBrowser.TV.Metadata case "Airs_DayOfWeek": { - string day = await reader.ReadElementContentAsStringAsync(); + string day = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(day)) { @@ -51,19 +51,19 @@ namespace MediaBrowser.TV.Metadata } case "Airs_Time": - item.AirTime = await reader.ReadElementContentAsStringAsync(); + item.AirTime = reader.ReadElementContentAsString(); break; case "SeriesName": - item.Name = await reader.ReadElementContentAsStringAsync(); + item.Name = reader.ReadElementContentAsString(); break; case "Status": - item.Status = await reader.ReadElementContentAsStringAsync(); + item.Status = reader.ReadElementContentAsString(); break; default: - await base.FetchDataFromXmlNode(reader, item); + base.FetchDataFromXmlNode(reader, item); break; } } diff --git a/MediaBrowser.TV/Providers/EpisodeProviderFromXml.cs b/MediaBrowser.TV/Providers/EpisodeProviderFromXml.cs index e287049a8c..c0c565f7da 100644 --- a/MediaBrowser.TV/Providers/EpisodeProviderFromXml.cs +++ b/MediaBrowser.TV/Providers/EpisodeProviderFromXml.cs @@ -34,7 +34,7 @@ namespace MediaBrowser.TV.Providers string metadataFile = Path.Combine(metadataFolder, Path.ChangeExtension(episodeFileName, ".xml")); - await FetchMetadata(episode, args.Parent as Season, metadataFile); + await FetchMetadata(episode, args.Parent as Season, metadataFile).ConfigureAwait(false); } private async Task FetchMetadata(Episode item, Season season, string metadataFile) @@ -56,7 +56,7 @@ namespace MediaBrowser.TV.Providers } } - await new EpisodeXmlParser().Fetch(item, metadataFile); + await Task.Run(() => { new EpisodeXmlParser().Fetch(item, metadataFile); }).ConfigureAwait(false); } } } diff --git a/MediaBrowser.TV/Providers/SeriesProviderFromXml.cs b/MediaBrowser.TV/Providers/SeriesProviderFromXml.cs index 72bd6f0dbe..a57bbe310f 100644 --- a/MediaBrowser.TV/Providers/SeriesProviderFromXml.cs +++ b/MediaBrowser.TV/Providers/SeriesProviderFromXml.cs @@ -27,7 +27,7 @@ namespace MediaBrowser.TV.Providers if (metadataFile.HasValue) { - await new SeriesXmlParser().Fetch(item as Series, metadataFile.Value.Key); + await Task.Run(() => { new SeriesXmlParser().Fetch(item as Series, metadataFile.Value.Key); }).ConfigureAwait(false); } } } diff --git a/MediaBrowser.sln b/MediaBrowser.sln index 0c659f473d..b376858127 100644 --- a/MediaBrowser.sln +++ b/MediaBrowser.sln @@ -76,4 +76,7 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(Performance) = preSolution + HasPerformanceSessions = true + EndGlobalSection EndGlobal