소스 검색

Add util for emailing logs

Vishnu Mohandas 4 년 전
부모
커밋
f583d1f7b4
2개의 변경된 파일40개의 추가작업 그리고 25개의 파일을 삭제
  1. 2 25
      lib/ui/settings/support_section_widget.dart
  2. 38 0
      lib/utils/email_util.dart

+ 2 - 25
lib/ui/settings/support_section_widget.dart

@@ -1,10 +1,6 @@
-import 'dart:io';
-
-import 'package:archive/archive_io.dart';
 import 'package:crisp/crisp.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_email_sender/flutter_email_sender.dart';
-import 'package:path_provider/path_provider.dart';
 import 'package:photos/core/configuration.dart';
 import 'package:photos/core/constants.dart';
 import 'package:photos/ui/loading_widget.dart';
@@ -12,8 +8,8 @@ import 'package:photos/ui/settings/settings_section_title.dart';
 import 'package:photos/ui/settings/settings_text_item.dart';
 import 'package:photos/ui/web_page.dart';
 import 'package:photos/utils/dialog_util.dart';
+import 'package:photos/utils/email_util.dart';
 import 'package:photos/utils/toast_util.dart';
-import 'package:share/share.dart';
 import 'package:url_launcher/url_launcher.dart';
 
 class SupportSectionWidget extends StatelessWidget {
@@ -57,26 +53,7 @@ class SupportSectionWidget extends StatelessWidget {
         GestureDetector(
           behavior: HitTestBehavior.translucent,
           onTap: () async {
-            final dialog = createProgressDialog(context, "preparing logs...");
-            await dialog.show();
-            final tempPath = (await getTemporaryDirectory()).path;
-            final zipFilePath = tempPath + "/logs.zip";
-            final logsDirectory = Directory(tempPath + "/logs");
-            var encoder = ZipFileEncoder();
-            encoder.create(zipFilePath);
-            encoder.addDirectory(logsDirectory);
-            encoder.close();
-            await dialog.hide();
-            final Email email = Email(
-              recipients: ['bug@ente.io'],
-              attachmentPaths: [zipFilePath],
-              isHTML: false,
-            );
-            try {
-              await FlutterEmailSender.send(email);
-            } catch (e) {
-              await Share.shareFiles([zipFilePath]);
-            }
+            await sendLogs(context, "bug@ente.io");
             showToast("thanks for reporting a bug!");
           },
           child: SettingsTextItem(

+ 38 - 0
lib/utils/email_util.dart

@@ -1,5 +1,43 @@
+import 'dart:io';
+
+import 'package:archive/archive_io.dart';
 import 'package:email_validator/email_validator.dart';
+import 'package:flutter/widgets.dart';
+import 'package:flutter_email_sender/flutter_email_sender.dart';
+import 'package:path_provider/path_provider.dart';
+import 'package:photos/utils/dialog_util.dart';
+import 'package:share/share.dart';
 
 bool isValidEmail(String email) {
   return EmailValidator.validate(email);
 }
+
+Future<void> sendLogs(
+  BuildContext context,
+  String toEmail, [
+  String subject,
+  String body,
+]) async {
+  final dialog = createProgressDialog(context, "preparing logs...");
+  await dialog.show();
+  final tempPath = (await getTemporaryDirectory()).path;
+  final zipFilePath = tempPath + "/logs.zip";
+  final logsDirectory = Directory(tempPath + "/logs");
+  var encoder = ZipFileEncoder();
+  encoder.create(zipFilePath);
+  encoder.addDirectory(logsDirectory);
+  encoder.close();
+  await dialog.hide();
+  final Email email = Email(
+    recipients: [toEmail],
+    subject: subject,
+    body: body,
+    attachmentPaths: [zipFilePath],
+    isHTML: false,
+  );
+  try {
+    await FlutterEmailSender.send(email);
+  } catch (e) {
+    await Share.shareFiles([zipFilePath]);
+  }
+}