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 => .Select(c =>
(Handler: (IPaymentMethodHandler)_ServiceProvider.GetService(typeof(IPaymentMethodHandler<>).MakeGenericType(c.GetType())), (Handler: (IPaymentMethodHandler)_ServiceProvider.GetService(typeof(IPaymentMethodHandler<>).MakeGenericType(c.GetType())),
SupportedPaymentMethod: c, SupportedPaymentMethod: c,
Network: _NetworkProvider.GetNetwork(c.PaymentId.CryptoCode))) Network: _NetworkProvider.GetNetwork(c.PaymentId.CryptoCode),
.Where(c => IsAvailable: Task.FromResult(false)))
c.Network != null && .Where(c => c.Network != null)
c.Handler.IsAvailable(c.SupportedPaymentMethod, c.Network)) .Select(c =>
.ToArray(); {
if (supportedPaymentMethods.Length == 0) 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"); throw new BitpayHttpException(400, "No derivation strategy are available now for this store");
var entity = new InvoiceEntity var entity = new InvoiceEntity
{ {

View File

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