Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Temporary solutions to log large strings & certain SDK classes #856

Merged
merged 3 commits into from
Mar 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions lib/bloc/input/input_bloc.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,13 @@ class InputBloc extends Cubit<InputState> {
final BreezSDK _breezSDK;
final LightningLinksService _lightningLinks;
final Device _device;
final InputPrinter _printer;

final _decodeInvoiceController = StreamController<InputData>();

InputBloc(
this._breezSDK,
this._lightningLinks,
this._device,
this._printer,
) : super(const InputState.empty()) {
_initializeInputBloc();
}
Expand Down Expand Up @@ -97,7 +95,7 @@ class InputBloc extends Cubit<InputState> {
}

Future<InputState> _handleParsedInput(InputType parsedInput, InputSource source) async {
_log.info("handleParsedInput: $source => ${_printer.inputTypeToString(parsedInput)}");
_log.info("handleParsedInput: $source => ${inputTypeToString(parsedInput)}");
InputState result;
if (parsedInput is InputType_Bolt11) {
result = await handlePaymentRequest(parsedInput, source);
Expand Down
160 changes: 98 additions & 62 deletions lib/bloc/input/input_printer.dart
Original file line number Diff line number Diff line change
@@ -1,75 +1,111 @@
import 'package:breez_sdk/bridge_generated.dart';

class InputPrinter {
const InputPrinter();

String inputTypeToString(InputType inputType) {
if (inputType is InputType_BitcoinAddress) {
return _bitcoinAddressToString(inputType);
} else if (inputType is InputType_Bolt11) {
return _bolt11ToString(inputType);
} else if (inputType is InputType_NodeId) {
return _nodeIdToString(inputType);
} else if (inputType is InputType_Url) {
return _urlToString(inputType);
} else if (inputType is InputType_LnUrlPay) {
return _lnUrlPayToString(inputType);
} else if (inputType is InputType_LnUrlWithdraw) {
return _lnUrlWithdrawToString(inputType);
} else if (inputType is InputType_LnUrlAuth) {
return _lnUrlAuthToString(inputType);
} else if (inputType is InputType_LnUrlError) {
return _lnUrlErrorToString(inputType);
} else {
return "Unknown InputType";
}
String inputTypeToString(InputType inputType) {
if (inputType is InputType_BitcoinAddress) {
return _bitcoinAddressToString(inputType);
} else if (inputType is InputType_Bolt11) {
return _bolt11ToString(inputType);
} else if (inputType is InputType_NodeId) {
return _nodeIdToString(inputType);
} else if (inputType is InputType_Url) {
return _urlToString(inputType);
} else if (inputType is InputType_LnUrlPay) {
return _lnUrlPayToString(inputType);
} else if (inputType is InputType_LnUrlWithdraw) {
return _lnUrlWithdrawToString(inputType);
} else if (inputType is InputType_LnUrlAuth) {
return _lnUrlAuthToString(inputType);
} else if (inputType is InputType_LnUrlError) {
return _lnUrlErrorToString(inputType);
} else {
return "Unknown InputType";
}
}

String _bitcoinAddressToString(InputType_BitcoinAddress inputType) {
final data = inputType.address;
return "BitcoinAddress(address: ${data.address}, network: ${data.network}, amountSat: ${data.amountSat}, "
"label: ${data.label}, message: ${data.message})";
String inputDataToString(dynamic data) {
if (data is BitcoinAddressData) {
return _bitcoinAddressDataToString(data);
} else if (data is LNInvoice) {
return _lnInvoiceToString(data);
} else if (data is LnUrlPayRequestData) {
return _lnUrlPayRequestDataToString(data);
} else if (data is LnUrlWithdrawRequestData) {
return _lnUrlWithdrawRequestDataToString(data);
} else if (data is LnUrlAuthRequestData) {
return _lnUrlAuthRequestDataToString(data);
} else if (data is LnUrlErrorData) {
return _lnUrlErrorDataToString(data);
} else {
return "Unknown InputType";
}
}

String _bolt11ToString(InputType_Bolt11 inputType) {
final data = inputType.invoice;
return "Bolt11(invoice: ${data.bolt11}, paymentHash: ${data.paymentHash}, "
"description: ${data.description}, amountMsat: ${data.amountMsat}, expiry: ${data.expiry}, "
"payeePubkey: ${data.payeePubkey}, descriptionHash: ${data.descriptionHash}, "
"timestamp: ${data.timestamp}, routingHints: ${data.routingHints}, "
"paymentSecret: ${data.paymentSecret})";
}
String _bitcoinAddressToString(InputType_BitcoinAddress inputType) {
final data = inputType.address;
return _bitcoinAddressDataToString(data);
}

String _nodeIdToString(InputType_NodeId inputType) {
return "NodeId(nodeId: ${inputType.nodeId})";
}
String _bitcoinAddressDataToString(BitcoinAddressData data) {
return "BitcoinAddressData(address: ${data.address}, network: ${data.network}, amountSat: ${data.amountSat}, "
"label: ${data.label}, message: ${data.message})";
}

String _urlToString(InputType_Url inputType) {
return "Url(url: ${inputType.url})";
}
String _bolt11ToString(InputType_Bolt11 inputType) {
final data = inputType.invoice;
return _lnInvoiceToString(data);
}

String _lnUrlPayToString(InputType_LnUrlPay inputType) {
final data = inputType.data;
return "LnUrlPayRequestData(callback: ${data.callback}, minSendable: ${data.minSendable}, "
"maxSendable: ${data.maxSendable}, metadata: ${data.metadataStr}, "
"commentAllowed: ${data.commentAllowed}, domain: ${data.domain}, lnAddr: ${data.lnAddress})";
}
String _lnInvoiceToString(LNInvoice data) {
return "LNInvoice(invoice: ${data.bolt11}, paymentHash: ${data.paymentHash}, "
"description: ${data.description}, amountMsat: ${data.amountMsat}, expiry: ${data.expiry}, "
"payeePubkey: ${data.payeePubkey}, descriptionHash: ${data.descriptionHash}, "
"timestamp: ${data.timestamp}, routingHints: ${data.routingHints}, "
"paymentSecret: ${data.paymentSecret})";
}

String _lnUrlWithdrawToString(InputType_LnUrlWithdraw inputType) {
final data = inputType.data;
return "LnUrlWithdrawRequestData(callback: ${data.callback}, minWithdrawable: ${data.minWithdrawable}, "
"maxWithdrawable: ${data.maxWithdrawable}, defaultDescription: ${data.defaultDescription}, "
"k1: ${data.k1})";
}
String _nodeIdToString(InputType_NodeId inputType) {
return "NodeId(nodeId: ${inputType.nodeId})";
}

String _lnUrlAuthToString(InputType_LnUrlAuth inputType) {
final data = inputType.data;
return "LnUrlAuthRequestData(k1: ${data.k1}, action: ${data.action}, domain: ${data.domain}, "
"url: ${data.url})";
}
String _urlToString(InputType_Url inputType) {
return "Url(url: ${inputType.url})";
}

String _lnUrlErrorToString(InputType_LnUrlError inputType) {
final data = inputType.data;
return "LnUrlError(reason: ${data.reason})";
}
String _lnUrlPayToString(InputType_LnUrlPay inputType) {
final data = inputType.data;
return _lnUrlPayRequestDataToString(data);
}

String _lnUrlPayRequestDataToString(LnUrlPayRequestData data) {
return "LnUrlPayRequestData(callback: ${data.callback}, minSendable: ${data.minSendable}, "
"maxSendable: ${data.maxSendable}, metadata: ${data.metadataStr}, "
"commentAllowed: ${data.commentAllowed}, domain: ${data.domain}, lnAddr: ${data.lnAddress})";
}

String _lnUrlWithdrawToString(InputType_LnUrlWithdraw inputType) {
final data = inputType.data;
return _lnUrlWithdrawRequestDataToString(data);
}

String _lnUrlWithdrawRequestDataToString(LnUrlWithdrawRequestData data) {
return "LnUrlWithdrawRequestData(callback: ${data.callback}, minWithdrawable: ${data.minWithdrawable}, "
"maxWithdrawable: ${data.maxWithdrawable}, defaultDescription: ${data.defaultDescription}, "
"k1: ${data.k1})";
}

String _lnUrlAuthToString(InputType_LnUrlAuth inputType) {
final data = inputType.data;
return _lnUrlAuthRequestDataToString(data);
}

String _lnUrlAuthRequestDataToString(LnUrlAuthRequestData data) {
return "LnUrlAuthRequestData(k1: ${data.k1}, action: ${data.action}, domain: ${data.domain}, "
"url: ${data.url})";
}

String _lnUrlErrorToString(InputType_LnUrlError inputType) {
final data = inputType.data;
return _lnUrlErrorDataToString(data);
}

String _lnUrlErrorDataToString(LnUrlErrorData data) => "LnUrlErrorData(reason: ${data.reason})";
11 changes: 6 additions & 5 deletions lib/bloc/input/input_state.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import 'package:breez_sdk/bridge_generated.dart';
import 'package:c_breez/bloc/input/input_printer.dart';
import 'package:c_breez/bloc/input/input_source.dart';
import 'package:c_breez/models/invoice.dart';

Expand Down Expand Up @@ -119,7 +120,7 @@ class LnUrlPayInputState extends InputState {

@override
String toString() {
return 'LnUrlPayInputState{data: $data, source: $source}';
return 'LnUrlPayInputState{data: ${inputDataToString(data)}, source: $source}';
}

@override
Expand All @@ -145,7 +146,7 @@ class LnUrlWithdrawInputState extends InputState {

@override
String toString() {
return 'LnUrlWithdrawInputState{data: $data, source: $source}';
return 'LnUrlWithdrawInputState{data: ${inputDataToString(data)}, source: $source}';
}

@override
Expand All @@ -171,7 +172,7 @@ class LnUrlAuthInputState extends InputState {

@override
String toString() {
return 'LnUrlAuthInputState{data: $data, source: $source}';
return 'LnUrlAuthInputState{data: ${inputDataToString(data)}, source: $source}';
}

@override
Expand All @@ -197,7 +198,7 @@ class LnUrlErrorInputState extends InputState {

@override
String toString() {
return 'LnUrlErrorInputState{data: $data, source: $source}';
return 'LnUrlErrorInputState{data: ${inputDataToString(data)}, source: $source}';
}

@override
Expand Down Expand Up @@ -249,7 +250,7 @@ class BitcoinAddressInputState extends InputState {

@override
String toString() {
return 'BitcoinAddressInputState{data: $data, source: $source}';
return 'BitcoinAddressInputState{data: ${inputDataToString(data)}, source: $source}';
}

@override
Expand Down
5 changes: 5 additions & 0 deletions lib/logger.dart
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@ void shareLog() async {
Share.shareXFiles([zipFile]);
}

void printWrapped(Logger log, String text) {
final pattern = RegExp('.{1,800}'); // 800 is the size of each chunk
pattern.allMatches(text).forEach((match) => log.info(match.group(0)));
}

class BreezLogger {
BreezLogger() {
Logger.root.level = Level.INFO;
Expand Down
2 changes: 0 additions & 2 deletions lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import 'package:c_breez/bloc/currency/currency_bloc.dart';
import 'package:c_breez/bloc/error_report_bloc/error_report_bloc.dart';
import 'package:c_breez/bloc/health_check/health_check_bloc.dart';
import 'package:c_breez/bloc/input/input_bloc.dart';
import 'package:c_breez/bloc/input/input_printer.dart';
import 'package:c_breez/bloc/lsp/lsp_bloc.dart';
import 'package:c_breez/bloc/network/network_settings_bloc.dart';
import 'package:c_breez/bloc/payment_options/payment_options_bloc.dart';
Expand Down Expand Up @@ -88,7 +87,6 @@ void main() async {
breezSDK,
injector.lightningLinks,
injector.device,
const InputPrinter(),
),
),
BlocProvider<UserProfileBloc>(
Expand Down
4 changes: 2 additions & 2 deletions lib/routes/qr_scan/widgets/qr_scan.dart
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ class QRScanState extends State<QRScan> {
onDetect: (capture) {
final List<Barcode> barcodes = capture.barcodes;
for (final barcode in barcodes) {
_log.info("Barcode detected: $barcode");
_log.info("Barcode detected. ${barcode.displayValue}");
if (popped) {
_log.info("Skipping, already popped");
return;
Expand All @@ -59,7 +59,7 @@ class QRScanState extends State<QRScan> {
_log.warning("Failed to scan QR code.");
} else {
popped = true;
_log.info("Popping read QR code $code");
_log.info("Popping read QR code: $code");
Navigator.of(context).pop(code);
}
}
Expand Down
23 changes: 23 additions & 0 deletions lib/utils/sdk_fields/serializer_helper.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import 'package:breez_sdk/bridge_generated.dart';

/// Temporary toString implementations for SDK fields
String swapInfoToString(SwapInfo? swapInfo) {
return (swapInfo == null)
? ""
: "SwapInfo { bitcoinAddress: ${swapInfo.bitcoinAddress}, createdAt: ${swapInfo.createdAt}, lockHeight:"
" ${swapInfo.lockHeight}, paymentHash: ${swapInfo.paymentHash}, preimage: ${swapInfo.preimage}, "
"privateKey: ${swapInfo.privateKey}, publicKey: ${swapInfo.publicKey}, swapperPublicKey: ${swapInfo.swapperPublicKey}, "
"script: ${swapInfo.script}, bolt11: ${swapInfo.bolt11}, paidMsat: ${swapInfo.paidMsat}, totalIncomingTxs: ${swapInfo.totalIncomingTxs}, "
"confirmedSats: ${swapInfo.confirmedSats}, unconfirmedSats: ${swapInfo.unconfirmedSats}, status: ${swapInfo.status}, "
"refundTxIds: ${swapInfo.refundTxIds}, unconfirmedTxIds: ${swapInfo.unconfirmedTxIds}, minAllowedDeposit: ${swapInfo.minAllowedDeposit}, "
"maxAllowedDeposit: ${swapInfo.maxAllowedDeposit}, lastRedeemError: ${swapInfo.lastRedeemError}, channelOpeningFees: ${ofpToString(swapInfo.channelOpeningFees)}, "
"confirmedAt: ${swapInfo.confirmedAt} }";
}

String ofpToString(OpeningFeeParams? ofp) {
return (ofp == null)
? ""
: "OpeningFeeParams { minMsat: ${ofp.minMsat}, minMsat: ${ofp.minMsat}, "
"proportional: ${ofp.proportional}, validUntil: ${ofp.validUntil}, maxIdleTime: ${ofp.maxIdleTime}, "
"maxIdleTime: ${ofp.maxIdleTime}, maxClientToSelfDelay: ${ofp.maxClientToSelfDelay}, promise: ${ofp.promise} }";
}
3 changes: 1 addition & 2 deletions test/bloc/input/input_bloc_test.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import 'package:breez_sdk/bridge_generated.dart';
import 'package:c_breez/bloc/input/input_bloc.dart';
import 'package:c_breez/bloc/input/input_printer.dart';
import 'package:c_breez/bloc/input/input_source.dart';
import 'package:c_breez/bloc/input/input_state.dart';
import 'package:c_breez/services/injector.dart';
Expand Down Expand Up @@ -41,7 +40,7 @@ void main() {
"VCEKGEFCVG6KXDFJV9JRYFN5V9NN6MR0VA5KUZPFUCA";
final parsedInput = await breezSDK.parseInput(input: input) as InputType_LnUrlPay;

final bloc = InputBloc(breezSDK, injector.lightningLinks, injector.device, const InputPrinter());
final bloc = InputBloc(breezSDK, injector.lightningLinks, injector.device);
breezSDK.nodeInfo();

expectLater(
Expand Down
Loading