make IsAvailable async

This commit is contained in:
nicolas.dorier
2018-02-23 16:09:15 +09:00
parent 82d38da18e
commit 3d33ecf397
3 changed files with 24 additions and 13 deletions

View File

@@ -83,12 +83,23 @@ namespace BTCPayServer.Controllers
.Select(c =>
(Handler: (IPaymentMethodHandler)_ServiceProvider.GetService(typeof(IPaymentMethodHandler<>).MakeGenericType(c.GetType())),
SupportedPaymentMethod: c,
Network: _NetworkProvider.GetNetwork(c.PaymentId.CryptoCode)))
.Where(c =>
c.Network != null &&
c.Handler.IsAvailable(c.SupportedPaymentMethod, c.Network))
.ToArray();
if (supportedPaymentMethods.Length == 0)
Network: _NetworkProvider.GetNetwork(c.PaymentId.CryptoCode),
IsAvailable: Task.FromResult(false)))
.Where(c => c.Network != null)
.Select(c =>
{
c.IsAvailable = c.Handler.IsAvailable(c.SupportedPaymentMethod, c.Network);
return c;
})
.ToList();
foreach(var supportedPaymentMethod in supportedPaymentMethods.ToList())
{
if(!await supportedPaymentMethod.IsAvailable)
{
supportedPaymentMethods.Remove(supportedPaymentMethod);
}
}
if (supportedPaymentMethods.Count == 0)
throw new BitpayHttpException(400, "No derivation strategy are available now for this store");
var entity = new InvoiceEntity
{

View File

@@ -38,9 +38,9 @@ namespace BTCPayServer.Payments.Bitcoin
return onchainMethod;
}
public override bool IsAvailable(DerivationStrategy supportedPaymentMethod, BTCPayNetwork network)
public override Task<bool> IsAvailable(DerivationStrategy supportedPaymentMethod, BTCPayNetwork network)
{
return _ExplorerProvider.IsAvailable(network);
return Task.FromResult(_ExplorerProvider.IsAvailable(network));
}
}
}

View File

@@ -17,7 +17,7 @@ namespace BTCPayServer.Payments
/// <param name="supportedPaymentMethod"></param>
/// <param name="network"></param>
/// <returns>true if this payment method is available</returns>
bool IsAvailable(ISupportedPaymentMethod supportedPaymentMethod, BTCPayNetwork network);
Task<bool> IsAvailable(ISupportedPaymentMethod supportedPaymentMethod, BTCPayNetwork network);
/// <summary>
/// Create needed to track payments of this invoice
@@ -31,7 +31,7 @@ namespace BTCPayServer.Payments
public interface IPaymentMethodHandler<T> : IPaymentMethodHandler where T : ISupportedPaymentMethod
{
bool IsAvailable(T supportedPaymentMethod, BTCPayNetwork network);
Task<bool> IsAvailable(T supportedPaymentMethod, BTCPayNetwork network);
Task<IPaymentMethodDetails> CreatePaymentMethodDetails(T supportedPaymentMethod, PaymentMethod paymentMethod, BTCPayNetwork network);
}
@@ -48,15 +48,15 @@ namespace BTCPayServer.Payments
throw new NotSupportedException("Invalid supportedPaymentMethod");
}
public abstract bool IsAvailable(T supportedPaymentMethod, BTCPayNetwork network);
public abstract Task<bool> IsAvailable(T supportedPaymentMethod, BTCPayNetwork network);
bool IPaymentMethodHandler.IsAvailable(ISupportedPaymentMethod supportedPaymentMethod, BTCPayNetwork network)
Task<bool> IPaymentMethodHandler.IsAvailable(ISupportedPaymentMethod supportedPaymentMethod, BTCPayNetwork network)
{
if(supportedPaymentMethod is T method)
{
return IsAvailable(method, network);
}
return false;
return Task.FromResult(false);
}
}
}