From a9f300179864c9ceaedb511056d51db2aaa7b599 Mon Sep 17 00:00:00 2001
From: Vishesh Handa <me@vhanda.in>
Date: Wed, 18 Nov 2020 12:53:12 +0100
Subject: [PATCH] Use StackTrace library to make the traces shorter

And hopefully add some more context to some async stack traces that
don't make any sense.
---
 lib/error_reporting.dart |  3 ++-
 lib/main.dart            |  5 ++++-
 lib/utils/logger.dart    | 11 +++++++++++
 pubspec.lock             |  2 +-
 pubspec.yaml             |  1 +
 5 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/lib/error_reporting.dart b/lib/error_reporting.dart
index 6f696ddd..d8d9d463 100644
--- a/lib/error_reporting.dart
+++ b/lib/error_reporting.dart
@@ -6,6 +6,7 @@ import 'package:flutter/foundation.dart';
 import 'package:device_info/device_info.dart';
 import 'package:package_info/package_info.dart';
 import 'package:sentry/sentry.dart';
+import 'package:stack_trace/stack_trace.dart';
 
 import 'package:gitjournal/.env.dart';
 import 'package:gitjournal/app.dart';
@@ -137,7 +138,7 @@ Future<void> captureSentryException(
     final sentry = await getSentryClient();
     final Event event = Event(
       exception: exception,
-      stackTrace: stackTrace,
+      stackTrace: Trace.from(stackTrace).terse,
       breadcrumbs: breadcrumbs,
       level: level,
     );
diff --git a/lib/main.dart b/lib/main.dart
index e6625c8a..bee2f71a 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -5,6 +5,7 @@ import 'package:flutter/foundation.dart' as foundation;
 import 'package:flutter/material.dart';
 
 import 'package:shared_preferences/shared_preferences.dart';
+import 'package:stack_trace/stack_trace.dart';
 
 import 'package:gitjournal/app.dart';
 import 'package:gitjournal/app_settings.dart';
@@ -29,6 +30,8 @@ void main() async {
   }).sendPort);
 
   runZonedGuarded(() async {
-    await JournalApp.main(pref);
+    await Chain.capture(() async {
+      await JournalApp.main(pref);
+    });
   }, reportError);
 }
diff --git a/lib/utils/logger.dart b/lib/utils/logger.dart
index 07a4af57..fd0f2828 100644
--- a/lib/utils/logger.dart
+++ b/lib/utils/logger.dart
@@ -7,6 +7,7 @@ import 'package:fimber/fimber.dart';
 import 'package:meta/meta.dart';
 import 'package:path/path.dart' as p;
 import 'package:path_provider/path_provider.dart';
+import 'package:stack_trace/stack_trace.dart';
 import 'package:time/time.dart';
 
 class Log {
@@ -31,6 +32,8 @@ class Log {
 
   static void v(String msg,
       {dynamic ex, StackTrace stacktrace, Map<String, dynamic> props}) {
+    stacktrace = Trace.from(stacktrace).terse;
+
     if (foundation.kDebugMode) {
       Fimber.log("V", msg,
           ex: ex, stacktrace: stacktrace, tag: LogTree.getTag(stackIndex: 2));
@@ -40,6 +43,8 @@ class Log {
 
   static void d(String msg,
       {dynamic ex, StackTrace stacktrace, Map<String, dynamic> props}) {
+    stacktrace = Trace.from(stacktrace).terse;
+
     if (foundation.kDebugMode) {
       Fimber.log("D", msg,
           ex: ex, stacktrace: stacktrace, tag: LogTree.getTag(stackIndex: 2));
@@ -49,6 +54,8 @@ class Log {
 
   static void i(String msg,
       {dynamic ex, StackTrace stacktrace, Map<String, dynamic> props}) {
+    stacktrace = Trace.from(stacktrace).terse;
+
     if (foundation.kDebugMode) {
       Fimber.log("I", msg,
           ex: ex, stacktrace: stacktrace, tag: LogTree.getTag(stackIndex: 2));
@@ -58,6 +65,8 @@ class Log {
 
   static void e(String msg,
       {dynamic ex, StackTrace stacktrace, Map<String, dynamic> props}) {
+    stacktrace = Trace.from(stacktrace).terse;
+
     if (foundation.kDebugMode) {
       Fimber.log("E", msg,
           ex: ex, stacktrace: stacktrace, tag: LogTree.getTag(stackIndex: 2));
@@ -67,6 +76,8 @@ class Log {
 
   static void w(String msg,
       {dynamic ex, StackTrace stacktrace, Map<String, dynamic> props}) {
+    stacktrace = Trace.from(stacktrace).terse;
+
     if (foundation.kDebugMode) {
       Fimber.log("W", msg,
           ex: ex, stacktrace: stacktrace, tag: LogTree.getTag(stackIndex: 2));
diff --git a/pubspec.lock b/pubspec.lock
index daf15e62..dbf6cac4 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -962,7 +962,7 @@ packages:
     source: hosted
     version: "0.6.0"
   stack_trace:
-    dependency: transitive
+    dependency: "direct main"
     description:
       name: stack_trace
       url: "https://pub.dartlang.org"
diff --git a/pubspec.yaml b/pubspec.yaml
index cd6d9730..3ed79252 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -16,6 +16,7 @@ dependencies:
   url_launcher: ^5.4.1
   dots_indicator: ^0.0.3
   package_info: ">=0.4.1 <2.0.0"
+  stack_trace: ^1.9.6
   http: ^0.12.0+1
   badges: ^1.1.1
   share: ^0.6.3+5