72 lines
2.0 KiB
C#
72 lines
2.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Net.Http;
|
|
using System.Text.Json;
|
|
using System.Threading.Tasks;
|
|
using Props.Shop.Adafruit.Api;
|
|
using Props.Shop.Framework;
|
|
|
|
namespace Props.Shop.Adafruit
|
|
{
|
|
public class AdafruitShop : IShop
|
|
{
|
|
private SearchManager searchManager;
|
|
private Configuration configuration;
|
|
private HttpClient http;
|
|
private bool disposedValue;
|
|
|
|
public string ShopName => "Adafruit";
|
|
|
|
public string ShopDescription => "A electronic component online hardware company.";
|
|
|
|
public string ShopModuleAuthor => "Reslate";
|
|
|
|
public SupportedFeatures SupportedFeatures => new SupportedFeatures(
|
|
false,
|
|
false,
|
|
false,
|
|
false,
|
|
true
|
|
);
|
|
public void Initialize(string workspaceDir)
|
|
{
|
|
http = new HttpClient();
|
|
http.BaseAddress = new Uri("http://www.adafruit.com/api/");
|
|
configuration = new Configuration(); // TODO Implement config persistence.
|
|
}
|
|
|
|
public async Task InitializeAsync(string workspaceDir)
|
|
{
|
|
ProductListingManager productListingManager = new ProductListingManager(http);
|
|
this.searchManager = new SearchManager(productListingManager, configuration.Similarity);
|
|
await productListingManager.DownloadListings();
|
|
productListingManager.StartUpdateTimer();
|
|
}
|
|
|
|
public IEnumerable<ProductListing> Search(string query, Filters filters)
|
|
{
|
|
return searchManager.Search(query);
|
|
}
|
|
|
|
protected virtual void Dispose(bool disposing)
|
|
{
|
|
if (!disposedValue)
|
|
{
|
|
if (disposing)
|
|
{
|
|
http.Dispose();
|
|
searchManager.Dispose();
|
|
}
|
|
disposedValue = true;
|
|
}
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
Dispose(disposing: true);
|
|
GC.SuppressFinalize(this);
|
|
}
|
|
}
|
|
}
|