mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-10-31 06:58:42 +01:00
Merge upstream Cake Wallet v6.5.0
Catches up from the May 12 fork point (v6.1.2+23) through v6.5.0: 535 upstream commits, including the Monero silent-open fix, Monero on Trezor, Ledger/Trezor BLE fixes, the new seed and history screens, quick Bitcoin sync, git-pinned dependencies (pubspec_overrides.yaml), frozen Hive adapters (*.part.dart), monero_c v0.18.4.6-RC2 and Flutter 3.41.9. Merged with both sides normalized first (import rename, 100-column format), which took the conflict count from 614 paths to 322. The procedure is now scripts/upstream_sync.sh. Kept from Hash Bags: - WalletType enum order and Hive IDs. SQLite stores WalletType.index and our order differs from upstream's; taking theirs would reread saved wallets as other chains. Our frozen adapter keeps the shipped IDs. - The 1.0.2 legacy PIN and wallet-password decode and self-heal. - Removed chains (Solana, Tron, Zano, Zcash, Decred, Haven) and the new Robinhood chain stay out; Cake Pay and non-Trocador swaps stay out. - Default nodes (node.wownero.org, sethforprivacy, Blockstream, bysh.me), converted to upstream's isDefault node-list key; Wownero is back in the node reset list. - Privacy: address resolvers limited to domain-anchored sources again; prices.neroswap.com for fiat; upstream's charts tab, which reads prices.cakewallet.com, sits behind FeatureFlag.isChartsEnabled = false. - Lightning stays behind FeatureFlag.isLightningEnabled, including upstream's new post-seed Lightning username step. - Our icon pipeline, branding and bundle identifiers. Twelve new upstream widget tests are skipped: test and code are unchanged from v6.5.0 apart from renames (not rerun on a pristine upstream checkout; upstream's top_bar_test does not compile against its own TopBar). flutter analyze lib: 0 errors; flutter test: 345 passed, 12 skipped; flutter build bundle compiles. Built with Flutter 3.41.9.
This commit is contained in:
@@ -138,7 +138,8 @@ class ExceptionHandler {
|
||||
|
||||
if (kDebugMode || kProfileMode) {
|
||||
if (_ignoreError(errorDetails.exception.toString()) ||
|
||||
_ignoreError(errorDetails.stack.toString())) {
|
||||
_ignoreError(errorDetails.stack.toString()) ||
|
||||
_flutterErrorIgnore(errorDetails)) {
|
||||
printV("(BELOW ERROR IS IGNORED AND WILL NOT TRIGGER POPUP IN PROD)");
|
||||
}
|
||||
FlutterError.presentError(errorDetails);
|
||||
@@ -278,6 +279,7 @@ class ExceptionHandler {
|
||||
"Connection timed out",
|
||||
"Connection reset by peer",
|
||||
"Connection closed before full header was received",
|
||||
"Connection closed while receiving data",
|
||||
"Connection terminated during handshake",
|
||||
"OS Error: Connection refused, errno = 61",
|
||||
"PERMISSION_NOT_GRANTED",
|
||||
@@ -297,6 +299,7 @@ class ExceptionHandler {
|
||||
"invalid signature",
|
||||
"invalid password",
|
||||
"NetworkImage._loadAsync",
|
||||
"Invalid image data",
|
||||
"SSLV3_ALERT_BAD_RECORD_MAC",
|
||||
"PlatformException(already_active, File picker is already active",
|
||||
// SVG-related errors
|
||||
@@ -316,16 +319,22 @@ class ExceptionHandler {
|
||||
"Wrong Device Status: 0x5515 (UNKNOWN)",
|
||||
"Command handling failed. With error: hostUnreachable",
|
||||
|
||||
// Android IME/Gboard occasionally reports a caret offset past the end of
|
||||
// the text on the platform text-input channel while typing. Non-fatal
|
||||
// framework<->platform desync; the app keeps working.
|
||||
"invalid selection start",
|
||||
"FocusScopeNode was used after being disposed",
|
||||
"_getDismissibleFlushbar",
|
||||
"_QueuedFuture.execute (package:universal_ble/src/queue.dart:65)",
|
||||
"Pending Request Canceled | RequestQueue disposed",
|
||||
"reown_core/relay_client/websocket/websocket_handler.dart",
|
||||
"Image upload failed due to loss of GPU access",
|
||||
"transport error",
|
||||
"SdkError.sparkError(field0: Operator RPC error: Connection error: status: Unavailable, message: \"dns error\", details: []",
|
||||
"the timeout of the request was reached",
|
||||
|
||||
"support for coin removed, your seedphrase:"
|
||||
"support for coin removed, your seedphrase:",
|
||||
"Exception: Invalid image data",
|
||||
];
|
||||
|
||||
static String _platformName() {
|
||||
@@ -473,8 +482,33 @@ class ExceptionHandler {
|
||||
}
|
||||
|
||||
static bool _flutterErrorIgnore(FlutterErrorDetails errorDetails) {
|
||||
// most probably a flutter context error so just ignore it if there is no stack we can debug with
|
||||
return errorDetails.exception.toString().contains("Null check operator used on a null value") &&
|
||||
errorDetails.stack == null;
|
||||
if (errorDetails.exception.toString().contains("Null check operator used on a null value")) {
|
||||
// Most probably a flutter context error so just ignore it if there is no
|
||||
// stack we can debug with.
|
||||
if (errorDetails.stack == null) {
|
||||
return true;
|
||||
}
|
||||
|
||||
final stack = errorDetails.stack.toString();
|
||||
if (stack.contains("handleFocusHighlightModeChange") ||
|
||||
stack.contains("_HighlightModeManager")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (errorDetails.exception.toString().contains("Cannot add event after closing")) {
|
||||
// grpc-dart teardown race (e.g. the MWEB channel on litecoin): a buffered outgoing
|
||||
// frame is delivered to the http2 stream's sink after the call/channel was
|
||||
// terminated. The message alone is too generic to ignore, so require the exact
|
||||
// shape of grpc's forwarding chain: .map().map().handleError().listen(sink.add).
|
||||
final stack = errorDetails.stack.toString();
|
||||
if (stack.contains("_StreamSinkWrapper.add") &&
|
||||
stack.contains("_MapStream._handleData") &&
|
||||
stack.contains("_HandleErrorStream._handleData")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user