fix: address CodeRabbit review feedback
This commit is contained in:
@@ -512,6 +512,7 @@
|
||||
"paymentRequestPaying": "Bezahle...",
|
||||
"paymentRequestSuccess": "Zahlung erfolgreich gesendet",
|
||||
"paymentRequestNoTransport": "Diese Anfrage hat keine konfigurierte Zustellmethode",
|
||||
"paymentRequestTransport": "Transport",
|
||||
"paymentRequestMintNotAccepted": "Dein aktiver Mint ist nicht in der Liste der akzeptierten Mints",
|
||||
"paymentRequestUnitMismatch": "Inkompatible Einheit: Anfrage erfordert {unit}",
|
||||
"paymentRequestInsufficientBalance": "Unzureichendes Guthaben",
|
||||
|
||||
@@ -400,8 +400,14 @@
|
||||
"paymentRequestPaying": "Paying...",
|
||||
"paymentRequestSuccess": "Payment sent successfully",
|
||||
"paymentRequestNoTransport": "This request has no delivery method configured",
|
||||
"paymentRequestTransport": "Transport",
|
||||
"paymentRequestMintNotAccepted": "Your active mint is not in the list of accepted mints",
|
||||
"paymentRequestUnitMismatch": "Incompatible unit: request requires {unit}",
|
||||
"@paymentRequestUnitMismatch": {
|
||||
"placeholders": {
|
||||
"unit": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"paymentRequestInsufficientBalance": "Insufficient balance",
|
||||
"paymentRequestErrorParsing": "Error reading payment request",
|
||||
|
||||
|
||||
@@ -520,6 +520,7 @@
|
||||
"paymentRequestPaying": "Pagando...",
|
||||
"paymentRequestSuccess": "Pago enviado correctamente",
|
||||
"paymentRequestNoTransport": "Esta solicitud no tiene método de entrega configurado",
|
||||
"paymentRequestTransport": "Transporte",
|
||||
"paymentRequestMintNotAccepted": "Tu mint activo no está en la lista de mints aceptados",
|
||||
"paymentRequestUnitMismatch": "Unidad incompatible: la solicitud requiere {unit}",
|
||||
"@paymentRequestUnitMismatch": {
|
||||
|
||||
@@ -512,6 +512,7 @@
|
||||
"paymentRequestPaying": "Paiement en cours...",
|
||||
"paymentRequestSuccess": "Paiement envoyé avec succès",
|
||||
"paymentRequestNoTransport": "Cette demande n'a pas de méthode de livraison configurée",
|
||||
"paymentRequestTransport": "Transport",
|
||||
"paymentRequestMintNotAccepted": "Votre mint actif n'est pas dans la liste des mints acceptés",
|
||||
"paymentRequestUnitMismatch": "Unité incompatible : la demande nécessite {unit}",
|
||||
"paymentRequestInsufficientBalance": "Solde insuffisant",
|
||||
|
||||
@@ -512,6 +512,7 @@
|
||||
"paymentRequestPaying": "Pagamento in corso...",
|
||||
"paymentRequestSuccess": "Pagamento inviato con successo",
|
||||
"paymentRequestNoTransport": "Questa richiesta non ha un metodo di consegna configurato",
|
||||
"paymentRequestTransport": "Trasporto",
|
||||
"paymentRequestMintNotAccepted": "Il tuo mint attivo non è nella lista dei mint accettati",
|
||||
"paymentRequestUnitMismatch": "Unità incompatibile: la richiesta richiede {unit}",
|
||||
"paymentRequestInsufficientBalance": "Saldo insufficiente",
|
||||
|
||||
@@ -512,6 +512,7 @@
|
||||
"paymentRequestPaying": "支払い中...",
|
||||
"paymentRequestSuccess": "支払いが正常に送信されました",
|
||||
"paymentRequestNoTransport": "このリクエストには配信方法が設定されていません",
|
||||
"paymentRequestTransport": "トランスポート",
|
||||
"paymentRequestMintNotAccepted": "アクティブなミントは対応ミントリストにありません",
|
||||
"paymentRequestUnitMismatch": "単位が互換性がありません:リクエストには{unit}が必要です",
|
||||
"paymentRequestInsufficientBalance": "残高不足",
|
||||
|
||||
@@ -512,6 +512,7 @@
|
||||
"paymentRequestPaying": "결제 중...",
|
||||
"paymentRequestSuccess": "결제가 성공적으로 전송되었습니다",
|
||||
"paymentRequestNoTransport": "이 요청에는 전달 방법이 설정되지 않았습니다",
|
||||
"paymentRequestTransport": "전송 방식",
|
||||
"paymentRequestMintNotAccepted": "활성 민트가 허용된 민트 목록에 없습니다",
|
||||
"paymentRequestUnitMismatch": "호환되지 않는 단위: 요청에 {unit}이(가) 필요합니다",
|
||||
"paymentRequestInsufficientBalance": "잔액 부족",
|
||||
|
||||
@@ -2077,6 +2077,12 @@ abstract class L10n {
|
||||
/// **'Esta solicitud no tiene método de entrega configurado'**
|
||||
String get paymentRequestNoTransport;
|
||||
|
||||
/// No description provided for @paymentRequestTransport.
|
||||
///
|
||||
/// In es, this message translates to:
|
||||
/// **'Transporte'**
|
||||
String get paymentRequestTransport;
|
||||
|
||||
/// No description provided for @paymentRequestMintNotAccepted.
|
||||
///
|
||||
/// In es, this message translates to:
|
||||
|
||||
@@ -1093,6 +1093,9 @@ class L10nDe extends L10n {
|
||||
String get paymentRequestNoTransport =>
|
||||
'Diese Anfrage hat keine konfigurierte Zustellmethode';
|
||||
|
||||
@override
|
||||
String get paymentRequestTransport => 'Transport';
|
||||
|
||||
@override
|
||||
String get paymentRequestMintNotAccepted =>
|
||||
'Dein aktiver Mint ist nicht in der Liste der akzeptierten Mints';
|
||||
|
||||
@@ -1080,6 +1080,9 @@ class L10nEn extends L10n {
|
||||
String get paymentRequestNoTransport =>
|
||||
'This request has no delivery method configured';
|
||||
|
||||
@override
|
||||
String get paymentRequestTransport => 'Transport';
|
||||
|
||||
@override
|
||||
String get paymentRequestMintNotAccepted =>
|
||||
'Your active mint is not in the list of accepted mints';
|
||||
|
||||
@@ -1085,6 +1085,9 @@ class L10nEs extends L10n {
|
||||
String get paymentRequestNoTransport =>
|
||||
'Esta solicitud no tiene método de entrega configurado';
|
||||
|
||||
@override
|
||||
String get paymentRequestTransport => 'Transporte';
|
||||
|
||||
@override
|
||||
String get paymentRequestMintNotAccepted =>
|
||||
'Tu mint activo no está en la lista de mints aceptados';
|
||||
|
||||
@@ -1098,6 +1098,9 @@ class L10nFr extends L10n {
|
||||
String get paymentRequestNoTransport =>
|
||||
'Cette demande n\'a pas de méthode de livraison configurée';
|
||||
|
||||
@override
|
||||
String get paymentRequestTransport => 'Transport';
|
||||
|
||||
@override
|
||||
String get paymentRequestMintNotAccepted =>
|
||||
'Votre mint actif n\'est pas dans la liste des mints acceptés';
|
||||
|
||||
@@ -1088,6 +1088,9 @@ class L10nIt extends L10n {
|
||||
String get paymentRequestNoTransport =>
|
||||
'Questa richiesta non ha un metodo di consegna configurato';
|
||||
|
||||
@override
|
||||
String get paymentRequestTransport => 'Trasporto';
|
||||
|
||||
@override
|
||||
String get paymentRequestMintNotAccepted =>
|
||||
'Il tuo mint attivo non è nella lista dei mint accettati';
|
||||
|
||||
@@ -1067,6 +1067,9 @@ class L10nJa extends L10n {
|
||||
@override
|
||||
String get paymentRequestNoTransport => 'このリクエストには配信方法が設定されていません';
|
||||
|
||||
@override
|
||||
String get paymentRequestTransport => 'トランスポート';
|
||||
|
||||
@override
|
||||
String get paymentRequestMintNotAccepted => 'アクティブなミントは対応ミントリストにありません';
|
||||
|
||||
|
||||
@@ -1069,6 +1069,9 @@ class L10nKo extends L10n {
|
||||
@override
|
||||
String get paymentRequestNoTransport => '이 요청에는 전달 방법이 설정되지 않았습니다';
|
||||
|
||||
@override
|
||||
String get paymentRequestTransport => '전송 방식';
|
||||
|
||||
@override
|
||||
String get paymentRequestMintNotAccepted => '활성 민트가 허용된 민트 목록에 없습니다';
|
||||
|
||||
|
||||
@@ -1087,6 +1087,9 @@ class L10nPt extends L10n {
|
||||
String get paymentRequestNoTransport =>
|
||||
'Esta solicitação não tem método de entrega configurado';
|
||||
|
||||
@override
|
||||
String get paymentRequestTransport => 'Transporte';
|
||||
|
||||
@override
|
||||
String get paymentRequestMintNotAccepted =>
|
||||
'Seu mint ativo não está na lista de mints aceitos';
|
||||
|
||||
@@ -1084,6 +1084,9 @@ class L10nRu extends L10n {
|
||||
String get paymentRequestNoTransport =>
|
||||
'В этом запросе не настроен метод доставки';
|
||||
|
||||
@override
|
||||
String get paymentRequestTransport => 'Транспорт';
|
||||
|
||||
@override
|
||||
String get paymentRequestMintNotAccepted =>
|
||||
'Ваш активный минт не в списке принимаемых';
|
||||
|
||||
@@ -1087,6 +1087,9 @@ class L10nSw extends L10n {
|
||||
String get paymentRequestNoTransport =>
|
||||
'Ombi hili halina njia ya uwasilishaji iliyosanidiwa';
|
||||
|
||||
@override
|
||||
String get paymentRequestTransport => 'Njia ya usafirishaji';
|
||||
|
||||
@override
|
||||
String get paymentRequestMintNotAccepted =>
|
||||
'Mint yako hai haiko kwenye orodha ya mint zinazokubaliwa';
|
||||
|
||||
@@ -1046,10 +1046,10 @@ class L10nZh extends L10n {
|
||||
String get paymentRequestDescription => '描述';
|
||||
|
||||
@override
|
||||
String get paymentRequestMints => '接受的铸币厂';
|
||||
String get paymentRequestMints => '接受的铸造厂';
|
||||
|
||||
@override
|
||||
String get paymentRequestAnyMint => '任何铸币厂';
|
||||
String get paymentRequestAnyMint => '任何铸造厂';
|
||||
|
||||
@override
|
||||
String get paymentRequestPay => '支付';
|
||||
@@ -1064,7 +1064,10 @@ class L10nZh extends L10n {
|
||||
String get paymentRequestNoTransport => '此请求未配置交付方式';
|
||||
|
||||
@override
|
||||
String get paymentRequestMintNotAccepted => '您的活跃铸币厂不在接受的铸币厂列表中';
|
||||
String get paymentRequestTransport => '传输方式';
|
||||
|
||||
@override
|
||||
String get paymentRequestMintNotAccepted => '您的活跃铸造厂不在接受的铸造厂列表中';
|
||||
|
||||
@override
|
||||
String paymentRequestUnitMismatch(String unit) {
|
||||
|
||||
@@ -512,6 +512,7 @@
|
||||
"paymentRequestPaying": "Pagando...",
|
||||
"paymentRequestSuccess": "Pagamento enviado com sucesso",
|
||||
"paymentRequestNoTransport": "Esta solicitação não tem método de entrega configurado",
|
||||
"paymentRequestTransport": "Transporte",
|
||||
"paymentRequestMintNotAccepted": "Seu mint ativo não está na lista de mints aceitos",
|
||||
"paymentRequestUnitMismatch": "Unidade incompatível: a solicitação requer {unit}",
|
||||
"paymentRequestInsufficientBalance": "Saldo insuficiente",
|
||||
|
||||
@@ -512,6 +512,7 @@
|
||||
"paymentRequestPaying": "Оплата...",
|
||||
"paymentRequestSuccess": "Платёж успешно отправлен",
|
||||
"paymentRequestNoTransport": "В этом запросе не настроен метод доставки",
|
||||
"paymentRequestTransport": "Транспорт",
|
||||
"paymentRequestMintNotAccepted": "Ваш активный минт не в списке принимаемых",
|
||||
"paymentRequestUnitMismatch": "Несовместимая единица: запрос требует {unit}",
|
||||
"paymentRequestInsufficientBalance": "Недостаточный баланс",
|
||||
|
||||
@@ -512,6 +512,7 @@
|
||||
"paymentRequestPaying": "Inalipa...",
|
||||
"paymentRequestSuccess": "Malipo yametumwa kwa mafanikio",
|
||||
"paymentRequestNoTransport": "Ombi hili halina njia ya uwasilishaji iliyosanidiwa",
|
||||
"paymentRequestTransport": "Njia ya usafirishaji",
|
||||
"paymentRequestMintNotAccepted": "Mint yako hai haiko kwenye orodha ya mint zinazokubaliwa",
|
||||
"paymentRequestUnitMismatch": "Kitengo kisichooana: ombi linahitaji {unit}",
|
||||
"paymentRequestInsufficientBalance": "Salio haitoshi",
|
||||
|
||||
+4
-3
@@ -506,13 +506,14 @@
|
||||
"paymentRequestFrom": "来自",
|
||||
"paymentRequestAmount": "请求金额",
|
||||
"paymentRequestDescription": "描述",
|
||||
"paymentRequestMints": "接受的铸币厂",
|
||||
"paymentRequestAnyMint": "任何铸币厂",
|
||||
"paymentRequestMints": "接受的铸造厂",
|
||||
"paymentRequestAnyMint": "任何铸造厂",
|
||||
"paymentRequestPay": "支付",
|
||||
"paymentRequestPaying": "支付中...",
|
||||
"paymentRequestSuccess": "付款发送成功",
|
||||
"paymentRequestNoTransport": "此请求未配置交付方式",
|
||||
"paymentRequestMintNotAccepted": "您的活跃铸币厂不在接受的铸币厂列表中",
|
||||
"paymentRequestTransport": "传输方式",
|
||||
"paymentRequestMintNotAccepted": "您的活跃铸造厂不在接受的铸造厂列表中",
|
||||
"paymentRequestUnitMismatch": "单位不兼容:请求需要 {unit}",
|
||||
"paymentRequestInsufficientBalance": "余额不足",
|
||||
"paymentRequestErrorParsing": "读取付款请求时出错",
|
||||
|
||||
@@ -158,18 +158,17 @@ class _PaymentRequestScreenState extends State<PaymentRequestScreen> {
|
||||
: info.mints.map((m) => Uri.parse(m).host).join(', '),
|
||||
),
|
||||
|
||||
const SizedBox(height: 12),
|
||||
|
||||
// Transporte
|
||||
_buildDetailRow(
|
||||
LucideIcons.send,
|
||||
'Transport',
|
||||
info.transports.isEmpty
|
||||
? 'In-band'
|
||||
: info.transports
|
||||
.map((t) => t.transportType == 'nostr' ? 'Nostr (NIP-17)' : 'HTTP POST')
|
||||
.join(', '),
|
||||
),
|
||||
// Transporte (solo mostrar si hay transporte configurado)
|
||||
if (info.transports.isNotEmpty) ...[
|
||||
const SizedBox(height: 12),
|
||||
_buildDetailRow(
|
||||
LucideIcons.send,
|
||||
l10n.paymentRequestTransport,
|
||||
info.transports
|
||||
.map((t) => t.transportType == 'nostr' ? 'Nostr (NIP-17)' : 'HTTP POST')
|
||||
.join(', '),
|
||||
),
|
||||
],
|
||||
],
|
||||
),
|
||||
),
|
||||
@@ -205,7 +204,7 @@ class _PaymentRequestScreenState extends State<PaymentRequestScreen> {
|
||||
text: _isPaying ? l10n.paymentRequestPaying : l10n.paymentRequestPay,
|
||||
icon: LucideIcons.zap,
|
||||
isLoading: _isPaying,
|
||||
onPressed: (unitMismatch || mintNotAccepted || !hasTransport || _isPaying)
|
||||
onPressed: (!hasTransport || _isPaying)
|
||||
? null
|
||||
: _pay,
|
||||
),
|
||||
|
||||
@@ -1000,6 +1000,7 @@ class _ReceiveScreenState extends State<ReceiveScreen> {
|
||||
_isValidToken = false;
|
||||
_tokenInfo = null;
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
if (!mounted) return;
|
||||
Navigator.pushReplacement(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
|
||||
@@ -98,20 +98,46 @@ fn parse_payment_request_inner(encoded: String) -> Result<PaymentRequestInfo, Er
|
||||
|
||||
/// Extract creq parameter from a BIP-321 bitcoin: URI.
|
||||
/// e.g. "bitcoin:?creq=CREQB1...&lightning=lnbc..." → "CREQB1..."
|
||||
/// Handles percent-encoding and case-insensitive key matching.
|
||||
fn extract_creq_from_uri(input: &str) -> Option<String> {
|
||||
let lower = input.to_lowercase();
|
||||
if !lower.starts_with("bitcoin:") {
|
||||
if !input
|
||||
.get(..8)
|
||||
.is_some_and(|scheme| scheme.eq_ignore_ascii_case("bitcoin:"))
|
||||
{
|
||||
return None;
|
||||
}
|
||||
let query = input.splitn(2, '?').nth(1)?;
|
||||
let query = input.split_once('?')?.1;
|
||||
for param in query.split('&') {
|
||||
if param.len() > 5 && param[..5].eq_ignore_ascii_case("creq=") {
|
||||
return Some(param[5..].to_string());
|
||||
let (key, value) = param.split_once('=')?;
|
||||
if key.eq_ignore_ascii_case("creq") {
|
||||
return Some(percent_decode(value));
|
||||
}
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
/// Simple percent-decoding for URI query values.
|
||||
fn percent_decode(value: &str) -> String {
|
||||
let bytes = value.as_bytes();
|
||||
let mut out = Vec::with_capacity(bytes.len());
|
||||
let mut i = 0;
|
||||
while i < bytes.len() {
|
||||
if bytes[i] == b'%' && i + 2 < bytes.len() {
|
||||
if let Ok(byte) = u8::from_str_radix(
|
||||
std::str::from_utf8(&bytes[i + 1..i + 3]).unwrap_or(""),
|
||||
16,
|
||||
) {
|
||||
out.push(byte);
|
||||
i += 3;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
out.push(bytes[i]);
|
||||
i += 1;
|
||||
}
|
||||
String::from_utf8(out).unwrap_or_else(|_| value.to_string())
|
||||
}
|
||||
|
||||
// ========================================================================
|
||||
// Payment execution
|
||||
// ========================================================================
|
||||
|
||||
Reference in New Issue
Block a user