diff --git a/lib/utils/email_util.dart b/lib/utils/email_util.dart index 423f7148f..4f4f2aae1 100644 --- a/lib/utils/email_util.dart +++ b/lib/utils/email_util.dart @@ -2,10 +2,12 @@ import 'dart:io'; import 'package:archive/archive_io.dart'; import 'package:email_validator/email_validator.dart'; +import "package:file_saver/file_saver.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:intl/intl.dart"; import 'package:logging/logging.dart'; import 'package:open_mail_app/open_mail_app.dart'; import 'package:package_info_plus/package_info_plus.dart'; @@ -75,6 +77,15 @@ Future sendLogs( ); }, ), + ButtonWidget( + buttonType: ButtonType.secondary, + labelText: S.of(context).exportLogs, + buttonAction: ButtonAction.third, + onTap: () async { + final zipFilePath = await getZippedLogsFile(context); + await exportLogs(context, zipFilePath); + }, + ), ButtonWidget( isInAlert: true, buttonType: ButtonType.secondary, @@ -159,9 +170,26 @@ Future shareLogs( ], ); if (result?.action != null && result!.action == ButtonAction.second) { - final Size size = MediaQuery.of(context).size; - await Share.shareFiles( - [zipFilePath], + await exportLogs(context, zipFilePath); + } +} + +Future exportLogs(BuildContext context, String zipFilePath) async { + final Size size = MediaQuery.of(context).size; + if (Platform.isAndroid) { + final DateTime now = DateTime.now().toUtc(); + final String shortMonthName = DateFormat('MMM').format(now); // Short month + final String logFileName = + 'ente-logs-${now.year}-$shortMonthName-${now.day}-${now.hour}-${now.minute}'; + await FileSaver.instance.saveAs( + name: logFileName, + filePath: zipFilePath, + mimeType: MimeType.zip, + ext: 'zip', + ); + } else { + await Share.shareXFiles( + [XFile(zipFilePath, mimeType: 'application/zip')], sharePositionOrigin: Rect.fromLTWH(0, 0, size.width, size.height / 2), ); } diff --git a/pubspec.lock b/pubspec.lock index f0bda98fc..c36af1f65 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -492,6 +492,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" + file_saver: + dependency: "direct main" + description: + name: file_saver + sha256: "8ffd91ae9f543c5ebbfec71a814ee5aa9e21176d31335133308abf63f4c42e8a" + url: "https://pub.dev" + source: hosted + version: "0.2.9" firebase_core: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 2fe1caab7..663ed1056 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -53,6 +53,7 @@ dependencies: expansion_tile_card: ^3.0.0 extended_image: ^8.1.1 fast_base58: ^0.2.1 + file_saver: ^0.2.9 firebase_core: ^2.13.1 firebase_messaging: ^14.6.2 fk_user_agent: ^2.0.1