mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2025-07-20 23:48:21 +00:00
58 lines
1.6 KiB
Dart
58 lines
1.6 KiB
Dart
import 'dart:io';
|
|
|
|
import 'package:appflowy/generated/locale_keys.g.dart';
|
|
import 'package:appflowy/workspace/presentation/home/toast.dart';
|
|
import 'package:archive/archive_io.dart';
|
|
import 'package:easy_localization/easy_localization.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:path/path.dart' as p;
|
|
import 'package:path_provider/path_provider.dart';
|
|
import 'package:share_plus/share_plus.dart';
|
|
|
|
Future<void> shareLogFiles(BuildContext? context) async {
|
|
final dir = await getApplicationSupportDirectory();
|
|
final zipEncoder = ZipEncoder();
|
|
|
|
final archiveLogFiles = dir
|
|
.listSync(recursive: true)
|
|
.where((e) => p.basename(e.path).startsWith('log.'))
|
|
.map((e) {
|
|
final bytes = File(e.path).readAsBytesSync();
|
|
return ArchiveFile(p.basename(e.path), bytes.length, bytes);
|
|
});
|
|
|
|
if (archiveLogFiles.isEmpty) {
|
|
if (context != null && context.mounted) {
|
|
showSnackBarMessage(
|
|
context,
|
|
LocaleKeys.noLogFiles.tr(),
|
|
);
|
|
}
|
|
return;
|
|
}
|
|
|
|
final archive = Archive();
|
|
for (final file in archiveLogFiles) {
|
|
archive.addFile(file);
|
|
}
|
|
|
|
final zip = zipEncoder.encode(archive);
|
|
if (zip == null) {
|
|
return;
|
|
}
|
|
|
|
// create a zipped appflowy logs file
|
|
final path = Platform.isAndroid ? '/storage/emulated/0/Download' : dir.path;
|
|
final zipFile =
|
|
await File(p.join(path, 'appflowy_logs.zip')).writeAsBytes(zip);
|
|
|
|
if (Platform.isIOS) {
|
|
await Share.shareUri(zipFile.uri);
|
|
} else {
|
|
await Share.shareXFiles([XFile(zipFile.path)]);
|
|
}
|
|
|
|
// delete the zipped appflowy logs file
|
|
await zipFile.delete();
|
|
}
|