mirror of
				https://github.com/AppFlowy-IO/AppFlowy.git
				synced 2025-10-31 18:15:09 +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();
 | |
| }
 | 
