mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2025-03-09 16:04:43 +01:00
Pretty names of payment methods isn't provided by CheckoutExtensions
This commit is contained in:
parent
0bf75d52d7
commit
c43721d489
11 changed files with 26 additions and 22 deletions
|
@ -297,6 +297,10 @@ namespace BTCPayServer
|
|||
{
|
||||
return services.AddDefaultTransactions(keyValues.Select(k => KeyValuePair.Create<string, string?>(k, string.Empty)).ToArray());
|
||||
}
|
||||
public static IServiceCollection AddDefaultPrettyName(this IServiceCollection services, PaymentMethodId paymentMethodId, string defaultPrettyName)
|
||||
{
|
||||
return services.AddDefaultTransactions(KeyValuePair.Create<string, string?>(PrettyNameProvider.GetTranslationKey(paymentMethodId), defaultPrettyName));
|
||||
}
|
||||
public static IServiceCollection AddDefaultTransactions(this IServiceCollection services, params KeyValuePair<string, string?>[] keyValues)
|
||||
{
|
||||
services.AddSingleton<IDefaultTransactionProvider>(new InMemoryDefaultTransactionProvider(keyValues));
|
||||
|
|
|
@ -624,6 +624,7 @@ o.GetRequiredService<IEnumerable<IPaymentLinkExtension>>().ToDictionary(o => o.P
|
|||
// BTC
|
||||
{
|
||||
var pmi = PaymentTypes.CHAIN.GetPaymentMethodId(network.CryptoCode);
|
||||
services.AddDefaultPrettyName(pmi, network.DisplayName);
|
||||
services.AddSingleton<BTCPayNetworkBase>(network);
|
||||
services.AddSingleton<IPaymentMethodHandler>(provider =>
|
||||
(BitcoinLikePaymentHandler)ActivatorUtilities.CreateInstance(provider, typeof(BitcoinLikePaymentHandler), new object[] { network, pmi }));
|
||||
|
@ -631,7 +632,6 @@ o.GetRequiredService<IEnumerable<IPaymentLinkExtension>>().ToDictionary(o => o.P
|
|||
(IPaymentLinkExtension)ActivatorUtilities.CreateInstance(provider, typeof(BitcoinPaymentLinkExtension), new object[] { network, pmi }));
|
||||
services.AddSingleton<ICheckoutModelExtension>(provider =>
|
||||
(BitcoinCheckoutModelExtension)ActivatorUtilities.CreateInstance(provider, typeof(BitcoinCheckoutModelExtension), new object[] { network, pmi }));
|
||||
services.AddDefaultTransactions(network.DisplayName);
|
||||
services.AddSingleton<IPaymentMethodBitpayAPIExtension>(provider =>
|
||||
(IPaymentMethodBitpayAPIExtension)ActivatorUtilities.CreateInstance(provider, typeof(BitcoinPaymentMethodBitpayAPIExtension), new object[] { pmi }));
|
||||
|
||||
|
@ -647,6 +647,10 @@ o.GetRequiredService<IEnumerable<IPaymentLinkExtension>>().ToDictionary(o => o.P
|
|||
// LN
|
||||
{
|
||||
var pmi = PaymentTypes.LN.GetPaymentMethodId(network.CryptoCode);
|
||||
if (network.IsBTC)
|
||||
services.AddDefaultPrettyName(pmi, "Lightning");
|
||||
else
|
||||
services.AddDefaultPrettyName(pmi, $"Lightning ({network.DisplayName})");
|
||||
services.AddSingleton<IPaymentMethodHandler>(provider =>
|
||||
(LightningLikePaymentHandler)ActivatorUtilities.CreateInstance(provider, typeof(LightningLikePaymentHandler), new object[] { network, pmi }));
|
||||
services.AddSingleton<IPaymentLinkExtension>(provider =>
|
||||
|
@ -662,6 +666,10 @@ o.GetRequiredService<IEnumerable<IPaymentLinkExtension>>().ToDictionary(o => o.P
|
|||
// LNURL
|
||||
{
|
||||
var pmi = PaymentTypes.LNURL.GetPaymentMethodId(network.CryptoCode);
|
||||
if (network.IsBTC)
|
||||
services.AddDefaultPrettyName(pmi, "Lightning (via LNURL)");
|
||||
else
|
||||
services.AddDefaultPrettyName(pmi, $"Lightning ({network.DisplayName} via LNURL)");
|
||||
services.AddSingleton<IPaymentMethodHandler>(provider =>
|
||||
(LNURLPayPaymentHandler)ActivatorUtilities.CreateInstance(provider, typeof(LNURLPayPaymentHandler), new object[] { network, pmi }));
|
||||
services.AddSingleton<IPaymentLinkExtension>(provider =>
|
||||
|
|
|
@ -18,7 +18,6 @@ namespace BTCPayServer.Payments.Bitcoin
|
|||
public const string CheckoutBodyComponentName = "BitcoinCheckoutBody";
|
||||
private readonly PaymentMethodHandlerDictionary _handlers;
|
||||
private readonly BTCPayNetwork _Network;
|
||||
private readonly IStringLocalizer StringLocalizer;
|
||||
private readonly DisplayFormatter _displayFormatter;
|
||||
private readonly IPaymentLinkExtension paymentLinkExtension;
|
||||
private readonly IPaymentLinkExtension? lnPaymentLinkExtension;
|
||||
|
@ -28,7 +27,6 @@ namespace BTCPayServer.Payments.Bitcoin
|
|||
public BitcoinCheckoutModelExtension(
|
||||
PaymentMethodId paymentMethodId,
|
||||
BTCPayNetwork network,
|
||||
IStringLocalizer stringLocalizer,
|
||||
IEnumerable<IPaymentLinkExtension> paymentLinkExtensions,
|
||||
DisplayFormatter displayFormatter,
|
||||
PaymentMethodHandlerDictionary handlers)
|
||||
|
@ -36,7 +34,6 @@ namespace BTCPayServer.Payments.Bitcoin
|
|||
PaymentMethodId = paymentMethodId;
|
||||
_handlers = handlers;
|
||||
_Network = network;
|
||||
StringLocalizer = stringLocalizer;
|
||||
_displayFormatter = displayFormatter;
|
||||
paymentLinkExtension = paymentLinkExtensions.Single(p => p.PaymentMethodId == PaymentMethodId);
|
||||
var lnPmi = PaymentTypes.LN.GetPaymentMethodId(network.CryptoCode);
|
||||
|
@ -45,7 +42,6 @@ namespace BTCPayServer.Payments.Bitcoin
|
|||
lnurlPaymentLinkExtension = paymentLinkExtensions.SingleOrDefault(p => p.PaymentMethodId == lnurlPmi);
|
||||
_bech32Prefix = network.NBitcoinNetwork.GetBech32Encoder(Bech32Type.WITNESS_PUBKEY_ADDRESS, false) is { } enc ? Encoders.ASCII.EncodeData(enc.HumanReadablePart) : null;
|
||||
}
|
||||
public string DisplayName => StringLocalizer[_Network.DisplayName];
|
||||
public string Image => _Network.CryptoImagePath;
|
||||
public string Badge => "";
|
||||
public PaymentMethodId PaymentMethodId { get; }
|
||||
|
|
|
@ -15,7 +15,6 @@ namespace BTCPayServer.Payments
|
|||
public interface ICheckoutModelExtension
|
||||
{
|
||||
public PaymentMethodId PaymentMethodId { get; }
|
||||
string DisplayName { get; }
|
||||
string Image { get; }
|
||||
string Badge { get; }
|
||||
void ModifyCheckoutModel(CheckoutModelContext context);
|
||||
|
|
|
@ -23,7 +23,6 @@ namespace BTCPayServer.Payments.LNURLPay
|
|||
paymentLinkExtension = paymentLinkExtensions.Single(p => p.PaymentMethodId == PaymentMethodId);
|
||||
handler = (LNURLPayPaymentHandler)handlers[PaymentMethodId];
|
||||
var isBTC = PaymentTypes.LNURL.GetPaymentMethodId("BTC") == paymentMethodId;
|
||||
DisplayName = isBTC ? "Lightning (via LNURL)" : $"Lightning ({network.DisplayName} via LNURL)";
|
||||
}
|
||||
public PaymentMethodId PaymentMethodId { get; }
|
||||
|
||||
|
@ -32,7 +31,6 @@ namespace BTCPayServer.Payments.LNURLPay
|
|||
private readonly IPaymentLinkExtension paymentLinkExtension;
|
||||
private readonly LNURLPayPaymentHandler handler;
|
||||
|
||||
public string DisplayName { get; }
|
||||
public string Image => _network.LightningImagePath;
|
||||
public string Badge => "⚡";
|
||||
|
||||
|
|
|
@ -15,7 +15,6 @@ namespace BTCPayServer.Payments.Lightning
|
|||
public const string CheckoutBodyComponentName = "LightningCheckoutBody";
|
||||
private readonly DisplayFormatter _displayFormatter;
|
||||
IPaymentLinkExtension _PaymentLinkExtension;
|
||||
private readonly bool isBTC;
|
||||
|
||||
public LNCheckoutModelExtension(
|
||||
PaymentMethodId paymentMethodId,
|
||||
|
@ -31,7 +30,6 @@ namespace BTCPayServer.Payments.Lightning
|
|||
Handlers = handlers;
|
||||
PaymentMethodId = paymentMethodId;
|
||||
_PaymentLinkExtension = paymentLinkExtensions.Single(p => p.PaymentMethodId == PaymentMethodId);
|
||||
isBTC = PaymentTypes.LN.GetPaymentMethodId("BTC") == paymentMethodId;
|
||||
}
|
||||
|
||||
public BTCPayNetwork Network { get; }
|
||||
|
@ -39,8 +37,6 @@ namespace BTCPayServer.Payments.Lightning
|
|||
public PaymentMethodHandlerDictionary Handlers { get; }
|
||||
public PaymentMethodId PaymentMethodId { get; }
|
||||
|
||||
public string DisplayName => isBTC ? StringLocalizer["Lightning"] : StringLocalizer["Lightning ({0})", Network.DisplayName];
|
||||
|
||||
public string Image => Network.LightningImagePath;
|
||||
public string Badge => "⚡";
|
||||
public void ModifyCheckoutModel(CheckoutModelContext context)
|
||||
|
@ -55,7 +51,7 @@ namespace BTCPayServer.Payments.Lightning
|
|||
if (context.Model.InvoiceBitcoinUrl is not null)
|
||||
context.Model.InvoiceBitcoinUrlQR = $"lightning:{context.Model.InvoiceBitcoinUrl.ToUpperInvariant()?.Substring("LIGHTNING:".Length)}";
|
||||
context.Model.PeerInfo = handler.ParsePaymentPromptDetails(paymentPrompt.Details).NodeInfo;
|
||||
if (context.StoreBlob.LightningAmountInSatoshi && isBTC)
|
||||
if (context.StoreBlob.LightningAmountInSatoshi && Network.IsBTC)
|
||||
{
|
||||
BitcoinCheckoutModelExtension.PreparePaymentModelForAmountInSats(context.Model, paymentPrompt.Rate, _displayFormatter);
|
||||
}
|
||||
|
|
|
@ -40,6 +40,7 @@ public partial class AltcoinsPlugin
|
|||
? "https://www.exploremonero.com/transaction/{0}"
|
||||
: "https://testnet.xmrchain.net/tx/{0}";
|
||||
var pmi = PaymentTypes.CHAIN.GetPaymentMethodId("XMR");
|
||||
services.AddDefaultPrettyName(pmi, network.DisplayName);
|
||||
services.AddBTCPayNetwork(network)
|
||||
.AddTransactionLinkProvider(pmi, new SimpleTransactionLinkProvider(blockExplorerLink));
|
||||
|
||||
|
|
|
@ -41,6 +41,7 @@ public partial class AltcoinsPlugin
|
|||
? "https://www.exploreZcash.com/transaction/{0}"
|
||||
: "https://testnet.xmrchain.net/tx/{0}";
|
||||
var pmi = PaymentTypes.CHAIN.GetPaymentMethodId("ZEC");
|
||||
services.AddDefaultPrettyName(pmi, network.DisplayName);
|
||||
services.AddBTCPayNetwork(network)
|
||||
.AddTransactionLinkProvider(pmi, new SimpleTransactionLinkProvider(blockExplorerLink));
|
||||
|
||||
|
|
|
@ -27,8 +27,6 @@ namespace BTCPayServer.Services.Altcoins.Monero.Payments
|
|||
}
|
||||
public PaymentMethodId PaymentMethodId { get; }
|
||||
|
||||
public string DisplayName => _network.DisplayName;
|
||||
|
||||
public string Image => _network.CryptoImagePath;
|
||||
public string Badge => "";
|
||||
|
||||
|
|
|
@ -27,8 +27,6 @@ namespace BTCPayServer.Services.Altcoins.Zcash.Payments
|
|||
}
|
||||
public PaymentMethodId PaymentMethodId { get; }
|
||||
|
||||
public string DisplayName => _network.DisplayName;
|
||||
|
||||
public string Image => _network.CryptoImagePath;
|
||||
public string Badge => "";
|
||||
|
||||
|
|
|
@ -1,23 +1,28 @@
|
|||
#nullable enable
|
||||
using System.Collections.Generic;
|
||||
using BTCPayServer.Payments;
|
||||
using Microsoft.Extensions.Localization;
|
||||
|
||||
namespace BTCPayServer.Services
|
||||
{
|
||||
public class PrettyNameProvider
|
||||
{
|
||||
private readonly Dictionary<PaymentMethodId, ICheckoutModelExtension> _extensions;
|
||||
public static string GetTranslationKey(PaymentMethodId paymentMethodId) => $"PrettyName({paymentMethodId})";
|
||||
private readonly IStringLocalizer _stringLocalizer;
|
||||
|
||||
public PrettyNameProvider(Dictionary<PaymentMethodId, ICheckoutModelExtension> extensions)
|
||||
public PrettyNameProvider(IStringLocalizer stringLocalizer)
|
||||
{
|
||||
_extensions = extensions;
|
||||
_stringLocalizer = stringLocalizer;
|
||||
}
|
||||
public string PrettyName(PaymentMethodId paymentMethodId)
|
||||
{
|
||||
if (paymentMethodId is null)
|
||||
return "<NULL>";
|
||||
_extensions.TryGetValue(paymentMethodId, out var n);
|
||||
return n?.DisplayName ?? paymentMethodId.ToString();
|
||||
var key = GetTranslationKey(paymentMethodId);
|
||||
var result = _stringLocalizer[key]?.Value;
|
||||
if (string.IsNullOrEmpty(result) || result == key)
|
||||
return paymentMethodId.ToString();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue