Skip to content

Commit

Permalink
Display and offer email report for startup errors
Browse files Browse the repository at this point in the history
  • Loading branch information
moffatman committed Jun 6, 2022
1 parent e0340f4 commit 9db3f92
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 9 deletions.
4 changes: 4 additions & 0 deletions android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -71,5 +71,9 @@
<action android:name="android.intent.action.VIEW" />
<data android:scheme="http" />
</intent>
<intent>
<action android:name="android.intent.action.SENDTO" />
<data android:scheme="mailto" />
</intent>
</queries>
</manifest>
57 changes: 49 additions & 8 deletions lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import 'package:extended_image/extended_image.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_email_sender/flutter_email_sender.dart';
import 'package:url_launcher/url_launcher.dart';
import 'sites/imageboard_site.dart';
import 'package:chan/pages/tab.dart';
Expand All @@ -39,14 +40,54 @@ bool _initialLinkConsumed = false;
bool _initialMediaConsumed = false;

void main() async {
WidgetsFlutterBinding.ensureInitialized();
final imageHttpClient = (ExtendedNetworkImageProvider.httpClient as HttpClient);
imageHttpClient.connectionTimeout = const Duration(seconds: 10);
imageHttpClient.idleTimeout = const Duration(seconds: 10);
imageHttpClient.maxConnectionsPerHost = 10;
await Persistence.initializeStatic();
await Notifications.initializeStatic();
runApp(const ChanApp());
try {
WidgetsFlutterBinding.ensureInitialized();
final imageHttpClient = (ExtendedNetworkImageProvider.httpClient as HttpClient);
imageHttpClient.connectionTimeout = const Duration(seconds: 10);
imageHttpClient.idleTimeout = const Duration(seconds: 10);
imageHttpClient.maxConnectionsPerHost = 10;
await Persistence.initializeStatic();
await Notifications.initializeStatic();
runApp(const ChanApp());
}
catch (e, st) {
runApp(ChanFailedApp(e, st));
}
}

class ChanFailedApp extends StatelessWidget {
final Object error;
final StackTrace stackTrace;
const ChanFailedApp(this.error, this.stackTrace, {Key? key}) : super(key: key);

@override
Widget build(BuildContext context) {
return CupertinoApp(
theme: const CupertinoThemeData(
primaryColor: Colors.white,
brightness: Brightness.dark
),
home: Center(
child: ErrorMessageCard(
'Sorry, an unrecoverable error has occured:\n${error.toStringDio()}\n$stackTrace',
remedies: {
'Report via Email': () {
FlutterEmailSender.send(Email(
subject: 'Unrecoverable Chance Error',
recipients: ['[email protected]'],
isHTML: true,
body: '''<p>Hi Callum,</p>
<p>Chance isn't starting and is giving the following error:</p>
<p>$error</p>
<p>$stackTrace</p>
<p>Thanks!</p>'''
));
}
}
)
)
);
}
}

class ChanApp extends StatefulWidget {
Expand Down
9 changes: 8 additions & 1 deletion lib/widgets/util.dart
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,14 @@ class ErrorMessageCard extends StatelessWidget {
children: [
Icon(CupertinoIcons.exclamationmark_triangle_fill, color: CupertinoTheme.of(context).scaffoldBackgroundColor),
const SizedBox(height: 8),
Text(message, maxLines: 20, style: TextStyle(color: CupertinoTheme.of(context).scaffoldBackgroundColor), textAlign: TextAlign.center),
Flexible(
child: Text(
message,
style: TextStyle(color: CupertinoTheme.of(context).scaffoldBackgroundColor),
textAlign: TextAlign.center,
overflow: TextOverflow.fade
)
),
for (final remedy in remedies.entries) ...[
const SizedBox(height: 8),
CupertinoButton(
Expand Down
7 changes: 7 additions & 0 deletions pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -393,6 +393,13 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
flutter_email_sender:
dependency: "direct main"
description:
name: flutter_email_sender
url: "https://pub.dartlang.org"
source: hosted
version: "5.1.0"
flutter_exif_rotation:
dependency: "direct main"
description:
Expand Down
1 change: 1 addition & 0 deletions pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ dependencies:
firebase_messaging: ^11.2.14
path_provider: ^2.0.10
async: ^2.9.0
flutter_email_sender: ^5.1.0
flutter:
sdk: flutter

Expand Down

0 comments on commit 9db3f92

Please sign in to comment.