From c13d59f6adc17d93d13bfd29ecf2e8f65f187bc3 Mon Sep 17 00:00:00 2001 From: zone117x Date: Fri, 17 Apr 2015 20:04:03 -0600 Subject: [PATCH] Fixed unnecessary Task runs --- src/Jackett/Indexers/BitMeTV.cs | 176 ++++++++++++------------ src/Jackett/Indexers/Freshon.cs | 100 ++++++-------- src/Jackett/Indexers/ThePirateBay.cs | 195 +++++++++++++-------------- src/Jackett/Jackett.csproj | 1 + src/Jackett/TVRage.cs | 12 ++ src/Jackett/WebApi.cs | 47 +++---- 6 files changed, 252 insertions(+), 279 deletions(-) create mode 100644 src/Jackett/TVRage.cs diff --git a/src/Jackett/Indexers/BitMeTV.cs b/src/Jackett/Indexers/BitMeTV.cs index b9d5cbbb1..9627fa997 100644 --- a/src/Jackett/Indexers/BitMeTV.cs +++ b/src/Jackett/Indexers/BitMeTV.cs @@ -67,71 +67,62 @@ namespace Jackett public bool IsConfigured { get; private set; } - public Task GetConfigurationForSetup() + public async Task GetConfigurationForSetup() { - return Task.Run(async () => - { - var loginPage = await client.GetAsync(LoginUrl); - var captchaImage = await client.GetByteArrayAsync(CaptchaUrl); - var config = new BmtvConfig(); - config.CaptchaImage.Value = captchaImage; - return (ConfigurationData)config; - }); + var loginPage = await client.GetAsync(LoginUrl); + var captchaImage = await client.GetByteArrayAsync(CaptchaUrl); + var config = new BmtvConfig(); + config.CaptchaImage.Value = captchaImage; + return (ConfigurationData)config; } - public Task ApplyConfiguration(JToken configJson) + public async Task ApplyConfiguration(JToken configJson) { - return Task.Run(async () => - { - var config = new BmtvConfig(); - config.LoadValuesFromJson(configJson); + var config = new BmtvConfig(); + config.LoadValuesFromJson(configJson); - var pairs = new Dictionary + var pairs = new Dictionary { { "username", config.Username.Value}, { "password", config.Password.Value}, { "secimage", config.CaptchaText.Value} }; - var content = new FormUrlEncodedContent(pairs); + var content = new FormUrlEncodedContent(pairs); - var response = await client.PostAsync(LoginPost, content); - var responseContent = await response.Content.ReadAsStringAsync(); + var response = await client.PostAsync(LoginPost, content); + var responseContent = await response.Content.ReadAsStringAsync(); - if (!responseContent.Contains("/logout.php")) - { - CQ dom = responseContent; - var messageEl = dom["table tr > td.embedded > h2"].Last(); - var errorMessage = messageEl.Text(); - var captchaImage = await client.GetByteArrayAsync(CaptchaUrl); - config.CaptchaImage.Value = captchaImage; - config.CaptchaText.Value = ""; - throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)config); - } - else - { - var configSaveData = new JObject(); - configSaveData["cookies"] = new JArray(( - from cookie in cookies.GetCookies(new Uri(BaseUrl)).Cast() - select cookie.Name + ":" + cookie.Value - ).ToArray()); + if (!responseContent.Contains("/logout.php")) + { + CQ dom = responseContent; + var messageEl = dom["table tr > td.embedded > h2"].Last(); + var errorMessage = messageEl.Text(); + var captchaImage = await client.GetByteArrayAsync(CaptchaUrl); + config.CaptchaImage.Value = captchaImage; + config.CaptchaText.Value = ""; + throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)config); + } + else + { + var configSaveData = new JObject(); + configSaveData["cookies"] = new JArray(( + from cookie in cookies.GetCookies(new Uri(BaseUrl)).Cast() + select cookie.Name + ":" + cookie.Value + ).ToArray()); - if (OnSaveConfigurationRequested != null) - OnSaveConfigurationRequested(this, configSaveData); + if (OnSaveConfigurationRequested != null) + OnSaveConfigurationRequested(this, configSaveData); - IsConfigured = true; - } - }); + IsConfigured = true; + } } - public Task VerifyConnection() + public async Task VerifyConnection() { - return Task.Run(async () => - { - var result = await client.GetStringAsync(new Uri(SearchUrl)); - if (result.Contains("

Not logged in!

")) - throw new Exception("Detected as not logged in"); - }); + var result = await client.GetStringAsync(new Uri(SearchUrl)); + if (result.Contains("

Not logged in!

")) + throw new Exception("Detected as not logged in"); } public void LoadFromSavedConfiguration(JToken jsonConfig) @@ -140,60 +131,59 @@ namespace Jackett IsConfigured = true; } - public Task PerformQuery(TorznabQuery query) + public async Task PerformQuery(TorznabQuery query) { - return Task.Run(async () => + + List releases = new List(); + + var searchUrl = string.Format("{0}?search={1}&cat=0", SearchUrl, HttpUtility.UrlEncode("game of thrones s03e09")); + var results = await client.GetStringAsync(searchUrl); + CQ dom = results; + + var table = dom["tbody > tr > .latest"].Parent().Parent(); + + foreach (var row in table.Children().Skip(1)) { - List releases = new List(); + var release = new ReleaseInfo(); - var searchUrl = string.Format("{0}?search={1}&cat=0", SearchUrl, HttpUtility.UrlEncode("game of thrones s03e09")); - var results = await client.GetStringAsync(searchUrl); - CQ dom = results; + CQ qRow = row.Cq(); + CQ qDetailsCol = row.ChildElements.ElementAt(1).Cq(); + CQ qLink = qDetailsCol.Children("a").First(); - var table = dom["tbody > tr > .latest"].Parent().Parent(); + release.MinimumRatio = 1; + release.MinimumSeedTime = 172800; + release.Comments = new Uri(BaseUrl + "/" + qLink.Attr("href")); + release.Guid = release.Comments; + release.Title = qLink.Attr("title"); + release.Description = release.Title; - foreach (var row in table.Children().Skip(1)) + //"Tuesday, June 11th 2013 at 03:52:53 AM" to... + //"Tuesday June 11 2013 03 52 53 AM" + var timestamp = qDetailsCol.Children("font").Text().Trim() + " "; + var groups = new Regex(@"(.*?), (.*?) (.*?)th (.*?) at (.*?):(.*?):(.*?) (.*?) ").Match(timestamp).Groups; + var str = string.Join(" ", groups.Cast().Skip(1).Select(g => g.Value)); + release.PublishDate = DateTime.ParseExact(str, "dddd MMMM d yyyy hh mm ss tt", CultureInfo.InvariantCulture); + + release.Link = new Uri(BaseUrl + "/" + row.ChildElements.ElementAt(2).Cq().Children("a.index").Attr("href")); + + var sizeCol = row.ChildElements.ElementAt(6); + var sizeVal = float.Parse(sizeCol.ChildNodes[0].NodeValue); + var sizeUnit = sizeCol.ChildNodes[2].NodeValue; + + switch (sizeUnit) { - var release = new ReleaseInfo(); - - CQ qRow = row.Cq(); - CQ qDetailsCol = row.ChildElements.ElementAt(1).Cq(); - CQ qLink = qDetailsCol.Children("a").First(); - - release.MinimumRatio = 1; - release.MinimumSeedTime = 172800; - release.Comments = new Uri(BaseUrl + "/" + qLink.Attr("href")); - release.Guid = release.Comments; - release.Title = qLink.Attr("title"); - release.Description = release.Title; - - //"Tuesday, June 11th 2013 at 03:52:53 AM" to... - //"Tuesday June 11 2013 03 52 53 AM" - var timestamp = qDetailsCol.Children("font").Text().Trim() + " "; - var groups = new Regex(@"(.*?), (.*?) (.*?)th (.*?) at (.*?):(.*?):(.*?) (.*?) ").Match(timestamp).Groups; - var str = string.Join(" ", groups.Cast().Skip(1).Select(g => g.Value)); - release.PublishDate = DateTime.ParseExact(str, "dddd MMMM d yyyy hh mm ss tt", CultureInfo.InvariantCulture); - - release.Link = new Uri(BaseUrl + "/" + row.ChildElements.ElementAt(2).Cq().Children("a.index").Attr("href")); - - var sizeCol = row.ChildElements.ElementAt(6); - var sizeVal = float.Parse(sizeCol.ChildNodes[0].NodeValue); - var sizeUnit = sizeCol.ChildNodes[2].NodeValue; - - switch (sizeUnit) - { - case "GB": release.Size = ReleaseInfo.BytesFromGB(sizeVal); break; - case "MB": release.Size = ReleaseInfo.BytesFromMB(sizeVal); break; - case "KB": release.Size = ReleaseInfo.BytesFromKB(sizeVal); break; - } - - release.Seeders = int.Parse(row.ChildElements.ElementAt(8).Cq().Text()); - release.Peers = int.Parse(row.ChildElements.ElementAt(9).Cq().Text()) + release.Seeders; - releases.Add(release); + case "GB": release.Size = ReleaseInfo.BytesFromGB(sizeVal); break; + case "MB": release.Size = ReleaseInfo.BytesFromMB(sizeVal); break; + case "KB": release.Size = ReleaseInfo.BytesFromKB(sizeVal); break; } - return releases.ToArray(); - }); + release.Seeders = int.Parse(row.ChildElements.ElementAt(8).Cq().Text()); + release.Peers = int.Parse(row.ChildElements.ElementAt(9).Cq().Text()) + release.Seeders; + releases.Add(release); + } + + return releases.ToArray(); + } public Task Download(Uri link) diff --git a/src/Jackett/Indexers/Freshon.cs b/src/Jackett/Indexers/Freshon.cs index 8f6f2e4df..6d3f14b29 100644 --- a/src/Jackett/Indexers/Freshon.cs +++ b/src/Jackett/Indexers/Freshon.cs @@ -51,74 +51,65 @@ namespace Jackett public Task GetConfigurationForSetup() { - return Task.Run(() => - { - var config = new ConfigurationDataBasicLogin(); - return (ConfigurationData)config; - }); + var config = new ConfigurationDataBasicLogin(); + return Task.FromResult(config); } - public Task ApplyConfiguration(JToken configJson) + public async Task ApplyConfiguration(JToken configJson) { - return Task.Run(async () => - { - var config = new ConfigurationDataBasicLogin(); - config.LoadValuesFromJson(configJson); + var config = new ConfigurationDataBasicLogin(); + config.LoadValuesFromJson(configJson); - var pairs = new Dictionary + var pairs = new Dictionary { { "username", config.Username.Value}, { "password", config.Password.Value} }; - var content = new FormUrlEncodedContent(pairs); - var message = new HttpRequestMessage(); - message.Method = HttpMethod.Post; - message.Content = content; - message.RequestUri = new Uri(LoginPostUrl); - message.Headers.Referrer = new Uri(LoginUrl); - message.Headers.UserAgent.ParseAdd(chromeUserAgent); + var content = new FormUrlEncodedContent(pairs); + var message = new HttpRequestMessage(); + message.Method = HttpMethod.Post; + message.Content = content; + message.RequestUri = new Uri(LoginPostUrl); + message.Headers.Referrer = new Uri(LoginUrl); + message.Headers.UserAgent.ParseAdd(chromeUserAgent); - var response = await client.SendAsync(message); - var responseContent = await response.Content.ReadAsStringAsync(); + var response = await client.SendAsync(message); + var responseContent = await response.Content.ReadAsStringAsync(); - if (!responseContent.Contains("/logout.php")) - { - CQ dom = responseContent; - var messageEl = dom[".error_text"]; - var errorMessage = messageEl.Text().Trim(); - throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)config); - } - else - { - var configSaveData = new JObject(); - configSaveData["cookies"] = new JArray(( - from cookie in cookies.GetCookies(new Uri(BaseUrl)).Cast() - select cookie.Name + ":" + cookie.Value - ).ToArray()); + if (!responseContent.Contains("/logout.php")) + { + CQ dom = responseContent; + var messageEl = dom[".error_text"]; + var errorMessage = messageEl.Text().Trim(); + throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)config); + } + else + { + var configSaveData = new JObject(); + configSaveData["cookies"] = new JArray(( + from cookie in cookies.GetCookies(new Uri(BaseUrl)).Cast() + select cookie.Name + ":" + cookie.Value + ).ToArray()); - if (OnSaveConfigurationRequested != null) - OnSaveConfigurationRequested(this, configSaveData); + if (OnSaveConfigurationRequested != null) + OnSaveConfigurationRequested(this, configSaveData); - IsConfigured = true; - } - }); + IsConfigured = true; + } } - public Task VerifyConnection() + public async Task VerifyConnection() { - return Task.Run(async () => - { - var message = new HttpRequestMessage(); - message.Method = HttpMethod.Get; - message.RequestUri = new Uri(SearchUrl); - message.Headers.UserAgent.ParseAdd(chromeUserAgent); + var message = new HttpRequestMessage(); + message.Method = HttpMethod.Get; + message.RequestUri = new Uri(SearchUrl); + message.Headers.UserAgent.ParseAdd(chromeUserAgent); - var response = await client.SendAsync(message); - var result = await response.Content.ReadAsStringAsync(); - if (!result.Contains("/logout.php")) - throw new Exception("Detected as not logged in"); - }); + var response = await client.SendAsync(message); + var result = await response.Content.ReadAsStringAsync(); + if (!result.Contains("/logout.php")) + throw new Exception("Detected as not logged in"); } public void LoadFromSavedConfiguration(JToken jsonConfig) @@ -129,11 +120,8 @@ namespace Jackett public Task PerformQuery(TorznabQuery query) { - return Task.Run(async () => - { - List releases = new List(); - return releases.ToArray(); - }); + List releases = new List(); + return Task.FromResult(releases.ToArray()); } public Task Download(Uri link) diff --git a/src/Jackett/Indexers/ThePirateBay.cs b/src/Jackett/Indexers/ThePirateBay.cs index bb57a8049..f707e69df 100644 --- a/src/Jackett/Indexers/ThePirateBay.cs +++ b/src/Jackett/Indexers/ThePirateBay.cs @@ -67,60 +67,47 @@ namespace Jackett.Indexers public Task GetConfigurationForSetup() { - return Task.Run(() => - { - var config = new ThePirateBayConfig(); - return (ConfigurationData)config; - }); + var config = new ThePirateBayConfig(); + return Task.FromResult(config); } - public Task ApplyConfiguration(Newtonsoft.Json.Linq.JToken configJson) + public async Task ApplyConfiguration(JToken configJson) { - return Task.Run(async () => + var config = new ThePirateBayConfig(); + config.LoadValuesFromJson(configJson); + await TestBrowse(config.Url.Value); + BaseUrl = new Uri(config.Url.Value).ToString(); + + var message = new HttpRequestMessage { - var config = new ThePirateBayConfig(); - config.LoadValuesFromJson(configJson); - await TestBrowse(config.Url.Value); - BaseUrl = new Uri(config.Url.Value).ToString(); + Method = HttpMethod.Get, + RequestUri = new Uri(BaseUrl + SwitchSingleViewUrl) + }; + message.Headers.Referrer = new Uri(BaseUrl + BrowserUrl); + var response = await client.SendAsync(message); - var message = new HttpRequestMessage - { - Method = HttpMethod.Get, - RequestUri = new Uri(BaseUrl + SwitchSingleViewUrl) - }; - message.Headers.Referrer = new Uri(BaseUrl + BrowserUrl); - var response = await client.SendAsync(message); + var configSaveData = new JObject(); + configSaveData["base_url"] = BaseUrl; - var configSaveData = new JObject(); - configSaveData["base_url"] = BaseUrl; + if (OnSaveConfigurationRequested != null) + OnSaveConfigurationRequested(this, configSaveData); - if (OnSaveConfigurationRequested != null) - OnSaveConfigurationRequested(this, configSaveData); - - IsConfigured = true; - - }); + IsConfigured = true; } - public Task VerifyConnection() + public async Task VerifyConnection() { - return Task.Run(async () => - { - await TestBrowse(BaseUrl); - }); + await TestBrowse(BaseUrl); } - Task TestBrowse(string url) + async Task TestBrowse(string url) { - return Task.Run(async () => + var result = await client.GetStringAsync(new Uri(url) + BrowserUrl); + if (!result.Contains("")) { - var result = await client.GetStringAsync(new Uri(url) + BrowserUrl); - if (!result.Contains("
")) - { - throw new Exception("Could not detect The Pirate Bay content"); - } - }); + throw new Exception("Could not detect The Pirate Bay content"); + } } public void LoadFromSavedConfiguration(JToken jsonConfig) @@ -129,80 +116,78 @@ namespace Jackett.Indexers IsConfigured = true; } - public Task PerformQuery(TorznabQuery query) + public async Task PerformQuery(TorznabQuery query) { - return Task.Run(async () => + List releases = new List(); + + var searchUrl = BaseUrl + string.Format(SearchUrl, HttpUtility.UrlEncode("game of thrones s05e01")); + + var message = new HttpRequestMessage { - List releases = new List(); + Method = HttpMethod.Get, + RequestUri = new Uri(BaseUrl + SwitchSingleViewUrl) + }; + message.Headers.Referrer = new Uri(searchUrl); - var searchUrl = BaseUrl + string.Format(SearchUrl, HttpUtility.UrlEncode("game of thrones s05e01")); + var response = await client.SendAsync(message); + var results = await response.Content.ReadAsStringAsync(); - var message = new HttpRequestMessage + CQ dom = results; + + var rows = dom["#searchResult > tbody > tr"]; + foreach (var row in rows) + { + var release = new ReleaseInfo(); + CQ qRow = row.Cq(); + CQ qLink = row.ChildElements.ElementAt(1).Cq().Children("a").First(); + + release.MinimumRatio = 1; + release.MinimumSeedTime = 172800; + release.Title = qLink.Text().Trim(); + release.Description = release.Title; + release.Comments = new Uri(BaseUrl + qLink.Attr("href").TrimStart('/')); + release.Guid = release.Comments; + + var timeString = row.ChildElements.ElementAt(2).Cq().Text(); + if (timeString.Contains("mins ago")) + release.PublishDate = (DateTime.Now - TimeSpan.FromMinutes(int.Parse(timeString.Split(' ')[0]))); + else if (timeString.Contains("Today")) + release.PublishDate = (DateTime.UtcNow - TimeSpan.FromHours(2) - TimeSpan.Parse(timeString.Split(' ')[1])).ToLocalTime(); + else if (timeString.Contains("Y-day")) + release.PublishDate = (DateTime.UtcNow - TimeSpan.FromHours(26) - TimeSpan.Parse(timeString.Split(' ')[1])).ToLocalTime(); + else if (timeString.Contains(':')) { - Method = HttpMethod.Get, - RequestUri = new Uri(BaseUrl + SwitchSingleViewUrl) - }; - message.Headers.Referrer = new Uri(searchUrl); - - var response = await client.SendAsync(message); - var results = await response.Content.ReadAsStringAsync(); - - CQ dom = results; - - var rows = dom["#searchResult > tbody > tr"]; - foreach (var row in rows) + var utc = DateTime.ParseExact(timeString, "MM-dd HH:mm", CultureInfo.InvariantCulture) - TimeSpan.FromHours(2); + release.PublishDate = DateTime.SpecifyKind(utc, DateTimeKind.Utc).ToLocalTime(); + } + else { - var release = new ReleaseInfo(); - CQ qRow = row.Cq(); - CQ qLink = row.ChildElements.ElementAt(1).Cq().Children("a").First(); - - release.MinimumRatio = 1; - release.MinimumSeedTime = 172800; - release.Title = qLink.Text().Trim(); - release.Description = release.Title; - release.Comments = new Uri(BaseUrl + qLink.Attr("href").TrimStart('/')); - release.Guid = release.Comments; - - var timeString = row.ChildElements.ElementAt(2).Cq().Text(); - if (timeString.Contains("mins ago")) - release.PublishDate = (DateTime.Now - TimeSpan.FromMinutes(int.Parse(timeString.Split(' ')[0]))); - else if (timeString.Contains("Today")) - release.PublishDate = (DateTime.UtcNow - TimeSpan.FromHours(2) - TimeSpan.Parse(timeString.Split(' ')[1])).ToLocalTime(); - else if (timeString.Contains("Y-day")) - release.PublishDate = (DateTime.UtcNow - TimeSpan.FromHours(26) - TimeSpan.Parse(timeString.Split(' ')[1])).ToLocalTime(); - else if (timeString.Contains(':')) - { - var utc = DateTime.ParseExact(timeString, "MM-dd HH:mm", CultureInfo.InvariantCulture) - TimeSpan.FromHours(2); - release.PublishDate = DateTime.SpecifyKind(utc, DateTimeKind.Utc).ToLocalTime(); - } - else - { - var utc = DateTime.ParseExact(timeString, "MM-dd yyyy", CultureInfo.InvariantCulture) - TimeSpan.FromHours(2); - release.PublishDate = DateTime.SpecifyKind(utc, DateTimeKind.Utc).ToLocalTime(); - } - - var downloadCol = row.ChildElements.ElementAt(3).Cq().Find("a"); - release.MagnetUrl = new Uri(downloadCol.Attr("href")); - release.InfoHash = release.MagnetUrl.ToString().Split(':')[3].Split('&')[0]; - - var sizeString = row.ChildElements.ElementAt(4).Cq().Text().Split(' '); - var sizeVal = float.Parse(sizeString[0]); - var sizeUnit = sizeString[1]; - switch (sizeUnit) - { - case "GiB": release.Size = ReleaseInfo.BytesFromGB(sizeVal); break; - case "MiB": release.Size = ReleaseInfo.BytesFromMB(sizeVal); break; - case "KiB": release.Size = ReleaseInfo.BytesFromKB(sizeVal); break; - } - - release.Seeders = int.Parse(row.ChildElements.ElementAt(5).Cq().Text()); - release.Peers = int.Parse(row.ChildElements.ElementAt(6).Cq().Text()) + release.Seeders; - - releases.Add(release); + var utc = DateTime.ParseExact(timeString, "MM-dd yyyy", CultureInfo.InvariantCulture) - TimeSpan.FromHours(2); + release.PublishDate = DateTime.SpecifyKind(utc, DateTimeKind.Utc).ToLocalTime(); } - return releases.ToArray(); - }); + var downloadCol = row.ChildElements.ElementAt(3).Cq().Find("a"); + release.MagnetUrl = new Uri(downloadCol.Attr("href")); + release.InfoHash = release.MagnetUrl.ToString().Split(':')[3].Split('&')[0]; + + var sizeString = row.ChildElements.ElementAt(4).Cq().Text().Split(' '); + var sizeVal = float.Parse(sizeString[0]); + var sizeUnit = sizeString[1]; + switch (sizeUnit) + { + case "GiB": release.Size = ReleaseInfo.BytesFromGB(sizeVal); break; + case "MiB": release.Size = ReleaseInfo.BytesFromMB(sizeVal); break; + case "KiB": release.Size = ReleaseInfo.BytesFromKB(sizeVal); break; + } + + release.Seeders = int.Parse(row.ChildElements.ElementAt(5).Cq().Text()); + release.Peers = int.Parse(row.ChildElements.ElementAt(6).Cq().Text()) + release.Seeders; + + releases.Add(release); + } + + return releases.ToArray(); + } diff --git a/src/Jackett/Jackett.csproj b/src/Jackett/Jackett.csproj index 973be6fea..908c55ad0 100644 --- a/src/Jackett/Jackett.csproj +++ b/src/Jackett/Jackett.csproj @@ -91,6 +91,7 @@ + diff --git a/src/Jackett/TVRage.cs b/src/Jackett/TVRage.cs new file mode 100644 index 000000000..ed871114e --- /dev/null +++ b/src/Jackett/TVRage.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Jackett +{ + class TVRage + { + } +} diff --git a/src/Jackett/WebApi.cs b/src/Jackett/WebApi.cs index 921dbc33c..5072b7ee4 100644 --- a/src/Jackett/WebApi.cs +++ b/src/Jackett/WebApi.cs @@ -184,34 +184,31 @@ namespace Jackett Task HandleGetIndexers(HttpListenerContext context) { - return Task.Run(() => + JToken jsonReply = new JObject(); + try { - JToken jsonReply = new JObject(); - try + jsonReply["result"] = "success"; + jsonReply["api_key"] = ApiKey.CurrentKey; + JArray items = new JArray(); + foreach (var i in indexerManager.Indexers) { - jsonReply["result"] = "success"; - jsonReply["api_key"] = ApiKey.CurrentKey; - JArray items = new JArray(); - foreach (var i in indexerManager.Indexers) - { - var indexer = i.Value; - var item = new JObject(); - item["id"] = i.Key; - item["name"] = indexer.DisplayName; - item["description"] = indexer.DisplayDescription; - item["configured"] = indexer.IsConfigured; - item["site_link"] = indexer.SiteLink; - items.Add(item); - } - jsonReply["items"] = items; + var indexer = i.Value; + var item = new JObject(); + item["id"] = i.Key; + item["name"] = indexer.DisplayName; + item["description"] = indexer.DisplayDescription; + item["configured"] = indexer.IsConfigured; + item["site_link"] = indexer.SiteLink; + items.Add(item); } - catch (Exception ex) - { - jsonReply["result"] = "error"; - jsonReply["error"] = ex.Message; - } - return jsonReply; - }); + jsonReply["items"] = items; + } + catch (Exception ex) + { + jsonReply["result"] = "error"; + jsonReply["error"] = ex.Message; + } + return Task.FromResult(jsonReply); } async Task HandleTestIndexer(HttpListenerContext context)