Fixed unnecessary Task runs

This commit is contained in:
zone117x
2015-04-17 20:04:03 -06:00
parent f5329d2400
commit c13d59f6ad
6 changed files with 252 additions and 279 deletions

View File

@@ -67,71 +67,62 @@ namespace Jackett
public bool IsConfigured { get; private set; } public bool IsConfigured { get; private set; }
public Task<ConfigurationData> GetConfigurationForSetup() public async Task<ConfigurationData> GetConfigurationForSetup()
{ {
return Task.Run(async () => var loginPage = await client.GetAsync(LoginUrl);
{ var captchaImage = await client.GetByteArrayAsync(CaptchaUrl);
var loginPage = await client.GetAsync(LoginUrl); var config = new BmtvConfig();
var captchaImage = await client.GetByteArrayAsync(CaptchaUrl); config.CaptchaImage.Value = captchaImage;
var config = new BmtvConfig(); return (ConfigurationData)config;
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<string, string> var pairs = new Dictionary<string, string>
{ {
{ "username", config.Username.Value}, { "username", config.Username.Value},
{ "password", config.Password.Value}, { "password", config.Password.Value},
{ "secimage", config.CaptchaText.Value} { "secimage", config.CaptchaText.Value}
}; };
var content = new FormUrlEncodedContent(pairs); var content = new FormUrlEncodedContent(pairs);
var response = await client.PostAsync(LoginPost, content); var response = await client.PostAsync(LoginPost, content);
var responseContent = await response.Content.ReadAsStringAsync(); var responseContent = await response.Content.ReadAsStringAsync();
if (!responseContent.Contains("/logout.php")) if (!responseContent.Contains("/logout.php"))
{ {
CQ dom = responseContent; CQ dom = responseContent;
var messageEl = dom["table tr > td.embedded > h2"].Last(); var messageEl = dom["table tr > td.embedded > h2"].Last();
var errorMessage = messageEl.Text(); var errorMessage = messageEl.Text();
var captchaImage = await client.GetByteArrayAsync(CaptchaUrl); var captchaImage = await client.GetByteArrayAsync(CaptchaUrl);
config.CaptchaImage.Value = captchaImage; config.CaptchaImage.Value = captchaImage;
config.CaptchaText.Value = ""; config.CaptchaText.Value = "";
throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)config); throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)config);
} }
else else
{ {
var configSaveData = new JObject(); var configSaveData = new JObject();
configSaveData["cookies"] = new JArray(( configSaveData["cookies"] = new JArray((
from cookie in cookies.GetCookies(new Uri(BaseUrl)).Cast<Cookie>() from cookie in cookies.GetCookies(new Uri(BaseUrl)).Cast<Cookie>()
select cookie.Name + ":" + cookie.Value select cookie.Name + ":" + cookie.Value
).ToArray()); ).ToArray());
if (OnSaveConfigurationRequested != null) if (OnSaveConfigurationRequested != null)
OnSaveConfigurationRequested(this, configSaveData); 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("<h1>Not logged in!</h1>"))
var result = await client.GetStringAsync(new Uri(SearchUrl)); throw new Exception("Detected as not logged in");
if (result.Contains("<h1>Not logged in!</h1>"))
throw new Exception("Detected as not logged in");
});
} }
public void LoadFromSavedConfiguration(JToken jsonConfig) public void LoadFromSavedConfiguration(JToken jsonConfig)
@@ -140,60 +131,59 @@ namespace Jackett
IsConfigured = true; IsConfigured = true;
} }
public Task<ReleaseInfo[]> PerformQuery(TorznabQuery query) public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
{ {
return Task<ReleaseInfo[]>.Run(async () =>
List<ReleaseInfo> releases = new List<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;
var table = dom["tbody > tr > .latest"].Parent().Parent();
foreach (var row in table.Children().Skip(1))
{ {
List<ReleaseInfo> releases = new List<ReleaseInfo>(); var release = new ReleaseInfo();
var searchUrl = string.Format("{0}?search={1}&cat=0", SearchUrl, HttpUtility.UrlEncode("game of thrones s03e09")); CQ qRow = row.Cq();
var results = await client.GetStringAsync(searchUrl); CQ qDetailsCol = row.ChildElements.ElementAt(1).Cq();
CQ dom = results; 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<Group>().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(); case "GB": release.Size = ReleaseInfo.BytesFromGB(sizeVal); break;
case "MB": release.Size = ReleaseInfo.BytesFromMB(sizeVal); break;
CQ qRow = row.Cq(); case "KB": release.Size = ReleaseInfo.BytesFromKB(sizeVal); break;
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<Group>().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);
} }
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<byte[]> Download(Uri link) public Task<byte[]> Download(Uri link)

View File

@@ -51,74 +51,65 @@ namespace Jackett
public Task<ConfigurationData> GetConfigurationForSetup() public Task<ConfigurationData> GetConfigurationForSetup()
{ {
return Task.Run(() => var config = new ConfigurationDataBasicLogin();
{ return Task.FromResult<ConfigurationData>(config);
var config = new ConfigurationDataBasicLogin();
return (ConfigurationData)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<string, string> var pairs = new Dictionary<string, string>
{ {
{ "username", config.Username.Value}, { "username", config.Username.Value},
{ "password", config.Password.Value} { "password", config.Password.Value}
}; };
var content = new FormUrlEncodedContent(pairs); var content = new FormUrlEncodedContent(pairs);
var message = new HttpRequestMessage(); var message = new HttpRequestMessage();
message.Method = HttpMethod.Post; message.Method = HttpMethod.Post;
message.Content = content; message.Content = content;
message.RequestUri = new Uri(LoginPostUrl); message.RequestUri = new Uri(LoginPostUrl);
message.Headers.Referrer = new Uri(LoginUrl); message.Headers.Referrer = new Uri(LoginUrl);
message.Headers.UserAgent.ParseAdd(chromeUserAgent); message.Headers.UserAgent.ParseAdd(chromeUserAgent);
var response = await client.SendAsync(message); var response = await client.SendAsync(message);
var responseContent = await response.Content.ReadAsStringAsync(); var responseContent = await response.Content.ReadAsStringAsync();
if (!responseContent.Contains("/logout.php")) if (!responseContent.Contains("/logout.php"))
{ {
CQ dom = responseContent; CQ dom = responseContent;
var messageEl = dom[".error_text"]; var messageEl = dom[".error_text"];
var errorMessage = messageEl.Text().Trim(); var errorMessage = messageEl.Text().Trim();
throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)config); throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)config);
} }
else else
{ {
var configSaveData = new JObject(); var configSaveData = new JObject();
configSaveData["cookies"] = new JArray(( configSaveData["cookies"] = new JArray((
from cookie in cookies.GetCookies(new Uri(BaseUrl)).Cast<Cookie>() from cookie in cookies.GetCookies(new Uri(BaseUrl)).Cast<Cookie>()
select cookie.Name + ":" + cookie.Value select cookie.Name + ":" + cookie.Value
).ToArray()); ).ToArray());
if (OnSaveConfigurationRequested != null) if (OnSaveConfigurationRequested != null)
OnSaveConfigurationRequested(this, configSaveData); 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;
var message = new HttpRequestMessage(); message.RequestUri = new Uri(SearchUrl);
message.Method = HttpMethod.Get; message.Headers.UserAgent.ParseAdd(chromeUserAgent);
message.RequestUri = new Uri(SearchUrl);
message.Headers.UserAgent.ParseAdd(chromeUserAgent);
var response = await client.SendAsync(message); var response = await client.SendAsync(message);
var result = await response.Content.ReadAsStringAsync(); var result = await response.Content.ReadAsStringAsync();
if (!result.Contains("/logout.php")) if (!result.Contains("/logout.php"))
throw new Exception("Detected as not logged in"); throw new Exception("Detected as not logged in");
});
} }
public void LoadFromSavedConfiguration(JToken jsonConfig) public void LoadFromSavedConfiguration(JToken jsonConfig)
@@ -129,11 +120,8 @@ namespace Jackett
public Task<ReleaseInfo[]> PerformQuery(TorznabQuery query) public Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
{ {
return Task<ReleaseInfo[]>.Run(async () => List<ReleaseInfo> releases = new List<ReleaseInfo>();
{ return Task.FromResult<ReleaseInfo[]>(releases.ToArray());
List<ReleaseInfo> releases = new List<ReleaseInfo>();
return releases.ToArray();
});
} }
public Task<byte[]> Download(Uri link) public Task<byte[]> Download(Uri link)

View File

@@ -67,60 +67,47 @@ namespace Jackett.Indexers
public Task<ConfigurationData> GetConfigurationForSetup() public Task<ConfigurationData> GetConfigurationForSetup()
{ {
return Task.Run(() => var config = new ThePirateBayConfig();
{ return Task.FromResult<ConfigurationData>(config);
var config = new ThePirateBayConfig();
return (ConfigurationData)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(); Method = HttpMethod.Get,
config.LoadValuesFromJson(configJson); RequestUri = new Uri(BaseUrl + SwitchSingleViewUrl)
await TestBrowse(config.Url.Value); };
BaseUrl = new Uri(config.Url.Value).ToString(); message.Headers.Referrer = new Uri(BaseUrl + BrowserUrl);
var response = await client.SendAsync(message);
var message = new HttpRequestMessage var configSaveData = new JObject();
{ configSaveData["base_url"] = BaseUrl;
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(); if (OnSaveConfigurationRequested != null)
configSaveData["base_url"] = BaseUrl; OnSaveConfigurationRequested(this, configSaveData);
if (OnSaveConfigurationRequested != null) IsConfigured = true;
OnSaveConfigurationRequested(this, configSaveData);
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("<table id=\"searchResult\">"))
{ {
var result = await client.GetStringAsync(new Uri(url) + BrowserUrl); throw new Exception("Could not detect The Pirate Bay content");
if (!result.Contains("<table id=\"searchResult\">")) }
{
throw new Exception("Could not detect The Pirate Bay content");
}
});
} }
public void LoadFromSavedConfiguration(JToken jsonConfig) public void LoadFromSavedConfiguration(JToken jsonConfig)
@@ -129,80 +116,78 @@ namespace Jackett.Indexers
IsConfigured = true; IsConfigured = true;
} }
public Task<ReleaseInfo[]> PerformQuery(TorznabQuery query) public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
{ {
return Task<ReleaseInfo[]>.Run(async () => List<ReleaseInfo> releases = new List<ReleaseInfo>();
var searchUrl = BaseUrl + string.Format(SearchUrl, HttpUtility.UrlEncode("game of thrones s05e01"));
var message = new HttpRequestMessage
{ {
List<ReleaseInfo> releases = new List<ReleaseInfo>(); 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, var utc = DateTime.ParseExact(timeString, "MM-dd HH:mm", CultureInfo.InvariantCulture) - TimeSpan.FromHours(2);
RequestUri = new Uri(BaseUrl + SwitchSingleViewUrl) release.PublishDate = DateTime.SpecifyKind(utc, DateTimeKind.Utc).ToLocalTime();
}; }
message.Headers.Referrer = new Uri(searchUrl); else
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 release = new ReleaseInfo(); var utc = DateTime.ParseExact(timeString, "MM-dd yyyy", CultureInfo.InvariantCulture) - TimeSpan.FromHours(2);
CQ qRow = row.Cq(); release.PublishDate = DateTime.SpecifyKind(utc, DateTimeKind.Utc).ToLocalTime();
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);
} }
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();
} }

View File

@@ -91,6 +91,7 @@
<Compile Include="ResultPage.cs" /> <Compile Include="ResultPage.cs" />
<Compile Include="Server.cs" /> <Compile Include="Server.cs" />
<Compile Include="TorznabQuery.cs" /> <Compile Include="TorznabQuery.cs" />
<Compile Include="TVRage.cs" />
<Compile Include="WebApi.cs" /> <Compile Include="WebApi.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

12
src/Jackett/TVRage.cs Normal file
View File

@@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Jackett
{
class TVRage
{
}
}

View File

@@ -184,34 +184,31 @@ namespace Jackett
Task<JToken> HandleGetIndexers(HttpListenerContext context) Task<JToken> HandleGetIndexers(HttpListenerContext context)
{ {
return Task<JToken>.Run(() => JToken jsonReply = new JObject();
try
{ {
JToken jsonReply = new JObject(); jsonReply["result"] = "success";
try jsonReply["api_key"] = ApiKey.CurrentKey;
JArray items = new JArray();
foreach (var i in indexerManager.Indexers)
{ {
jsonReply["result"] = "success"; var indexer = i.Value;
jsonReply["api_key"] = ApiKey.CurrentKey; var item = new JObject();
JArray items = new JArray(); item["id"] = i.Key;
foreach (var i in indexerManager.Indexers) item["name"] = indexer.DisplayName;
{ item["description"] = indexer.DisplayDescription;
var indexer = i.Value; item["configured"] = indexer.IsConfigured;
var item = new JObject(); item["site_link"] = indexer.SiteLink;
item["id"] = i.Key; items.Add(item);
item["name"] = indexer.DisplayName;
item["description"] = indexer.DisplayDescription;
item["configured"] = indexer.IsConfigured;
item["site_link"] = indexer.SiteLink;
items.Add(item);
}
jsonReply["items"] = items;
} }
catch (Exception ex) jsonReply["items"] = items;
{ }
jsonReply["result"] = "error"; catch (Exception ex)
jsonReply["error"] = ex.Message; {
} jsonReply["result"] = "error";
return jsonReply; jsonReply["error"] = ex.Message;
}); }
return Task.FromResult<JToken>(jsonReply);
} }
async Task<JToken> HandleTestIndexer(HttpListenerContext context) async Task<JToken> HandleTestIndexer(HttpListenerContext context)