diff --git a/AddIn.cs b/AddIn.cs new file mode 100644 index 0000000..dd99667 --- /dev/null +++ b/AddIn.cs @@ -0,0 +1,24 @@ +using ExcelDna.Integration; +using ExcelDna.Registration; + +namespace Rehau.Sku.Assist +{ + public class AddIn : IExcelAddIn + { + public void AutoOpen() + { + RegisterFunctions(); + } + + public void AutoClose() + { + } + + void RegisterFunctions() + { + ExcelRegistration.GetExcelFunctions() + .ProcessAsyncRegistrations(nativeAsyncIfAvailable: false) + .RegisterFunctions(); + } + } +} diff --git a/Assistant/SkuAssist.cs b/Assistant/SkuAssist.cs index 9eb3328..9d90394 100644 --- a/Assistant/SkuAssist.cs +++ b/Assistant/SkuAssist.cs @@ -1,4 +1,5 @@ using AngleSharp; +using AngleSharp.Dom; using System.Linq; using System.Net; using System.Net.Http; @@ -8,22 +9,23 @@ namespace Rehau.Sku.Assist { static class SkuAssist { - public async static Task GetDocumentAsync(string request, HttpClient httpClient) + public async static Task GetContent(string request, HttpClient httpClient) { string uri = "https://shop-rehau.ru/catalogsearch/result/?q=" + request; - ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; - HttpResponseMessage response = await httpClient.GetAsync(uri); - response.EnsureSuccessStatusCode(); + return await httpClient.GetStringAsync(uri); + } + + public async static Task GetDocument(Task source) + { IConfiguration config = Configuration.Default; IBrowsingContext context = BrowsingContext.New(config); - string source = await response.Content.ReadAsStringAsync(); - return await context.OpenAsync(req => req.Content(source)); + return await context.OpenAsync(req => req.Content(source.Result)); } - public static IProduct GetProductFromDocument(AngleSharp.Dom.IDocument document) + public static IProduct GetProductFromDocument(IDocument document) { return document .All diff --git a/Functions.cs b/Functions.cs index 9d3eb28..9112822 100644 --- a/Functions.cs +++ b/Functions.cs @@ -1,53 +1,21 @@ -using ExcelDna.Integration; -using System.Runtime.Caching; +using AngleSharp.Dom; +using ExcelDna.Integration; using System.Net.Http; +using System.Threading.Tasks; namespace Rehau.Sku.Assist { - public class Functions : IExcelAddIn + public class Functions { - private static HttpClient _httpClient; - private static ObjectCache _resultCache = MemoryCache.Default; - - public void AutoClose() - { - } - public void AutoOpen() - { - _httpClient = new HttpClient(); - } + private static HttpClient httpClient = new HttpClient(); [ExcelFunction] - public static object RAUNAME(string request) + public static async Task RAUNAME(string request) { - string cachedResult = _resultCache[request] as string; - - if (cachedResult != null) - { - return cachedResult; - } - - else - { - object result = ExcelAsyncUtil.Run("RAUNAME", null, - delegate - { - var document = SkuAssist.GetDocumentAsync(request, _httpClient).Result; - var product = SkuAssist.GetProductFromDocument(document); - return product.ToString(); - }); - - if (result.Equals(ExcelError.ExcelErrorNA)) - { - return "Загрузка..."; - } - - else - { - _resultCache.Add(request, result, System.DateTime.Now.AddMinutes(20)); - return result.ToString(); - } - } + Task contentTask = Task.Run(() => SkuAssist.GetContent(request, httpClient)); + Task documentTask = await contentTask.ContinueWith(content => SkuAssist.GetDocument(content)); + IProduct product = await documentTask.ContinueWith(doc => SkuAssist.GetProductFromDocument(doc.Result)); + return product.ToString(); } } } \ No newline at end of file diff --git a/Rehau.Sku.Assist-AddIn.dna b/Rehau.Sku.Assist-AddIn.dna index b7322e9..bdf8847 100644 --- a/Rehau.Sku.Assist-AddIn.dna +++ b/Rehau.Sku.Assist-AddIn.dna @@ -1,6 +1,6 @@ - +