chore: better error logging if subscription info is null (#2171)

This commit is contained in:
ggurdin 2025-03-19 10:31:53 -04:00 committed by GitHub
parent 25b1c63df4
commit af295b2817
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 36 additions and 8 deletions

View file

@ -66,7 +66,7 @@ class ErrorHandler {
// Custom handling for PangeaWarningError
debugPrint("PangeaWarningError: ${e.message}");
} else {
if (m != null) debugPrint("error message: $m");
debugPrint("error message: ${m ?? e}");
}
Sentry.addBreadcrumb(Breadcrumb(data: data));

View file

@ -146,7 +146,9 @@ class SubscriptionController extends BaseController {
e: e,
s: s,
data: {
"availableSubscriptionInfo": availableSubscriptionInfo?.toJson(),
"availableSubscriptionInfo": availableSubscriptionInfo?.toJson(
validate: false,
),
},
);
}
@ -345,7 +347,9 @@ class SubscriptionController extends BaseController {
e: e,
s: s,
data: {
"availableSubscriptionInfo": availableSubscriptionInfo?.toJson(),
"availableSubscriptionInfo": availableSubscriptionInfo?.toJson(
validate: false,
),
},
);
}

View file

@ -115,10 +115,22 @@ class AvailableSubscriptionsInfo {
}
Future<void> _cacheSubscriptionInfo() async {
await subscriptionBox.write(
PLocalKey.availableSubscriptionInfo,
toJson(),
);
try {
final json = toJson();
await subscriptionBox.write(
PLocalKey.availableSubscriptionInfo,
json,
);
} catch (e, s) {
ErrorHandler.logError(
e: e,
s: s,
data: {
"appIds": appIds,
"allProducts": allProducts,
},
);
}
}
AvailableSubscriptionsInfo? _getCachedSubscriptionInfo() {
@ -144,6 +156,14 @@ class AvailableSubscriptionsInfo {
}
factory AvailableSubscriptionsInfo.fromJson(Map<String, dynamic> json) {
if (!json.containsKey('app_ids') || !json.containsKey('all_products')) {
throw "Cached subscription info is missing required fields";
}
if (json['all_products'] is! List<dynamic> || json['app_ids'] is! Map) {
throw "Cached subscription info contains incorrect data type(s)";
}
final appIds = SubscriptionAppIds.fromJson(json['app_ids']);
final allProducts = (json['all_products'] as List<dynamic>)
.map((product) => SubscriptionDetails.fromJson(product))
@ -155,7 +175,11 @@ class AvailableSubscriptionsInfo {
);
}
Map<String, dynamic> toJson() {
Map<String, dynamic> toJson({validate = true}) {
if (validate && (appIds == null || allProducts == null)) {
throw "appIds or allProducts is null in AvailableSubscriptionsInfo";
}
final data = <String, dynamic>{};
data['app_ids'] = appIds?.toJson();
data['all_products'] =