| 
									
										
										
										
											2023-08-28 23:20:56 +08:00
										 |  |  | import 'dart:io'; | 
					
						
							| 
									
										
										
										
											2024-02-24 20:54:10 +07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-28 23:20:56 +08:00
										 |  |  | import 'package:appflowy/workspace/application/settings/share/export_service.dart'; | 
					
						
							|  |  |  | import 'package:appflowy_backend/log.dart'; | 
					
						
							| 
									
										
										
										
											2023-12-31 07:29:40 +08:00
										 |  |  | import 'package:appflowy_backend/protobuf/flowy-document/entities.pb.dart'; | 
					
						
							| 
									
										
										
										
											2023-08-28 23:20:56 +08:00
										 |  |  | import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; | 
					
						
							| 
									
										
										
										
											2024-02-24 20:54:10 +07:00
										 |  |  | import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart'; | 
					
						
							|  |  |  | import 'package:appflowy_result/appflowy_result.dart'; | 
					
						
							| 
									
										
										
										
											2023-08-28 23:20:56 +08:00
										 |  |  | import 'package:flutter_bloc/flutter_bloc.dart'; | 
					
						
							| 
									
										
										
										
											2024-02-24 20:54:10 +07:00
										 |  |  | import 'package:freezed_annotation/freezed_annotation.dart'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-28 23:20:56 +08:00
										 |  |  | part 'share_bloc.freezed.dart'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class DatabaseShareBloc extends Bloc<DatabaseShareEvent, DatabaseShareState> { | 
					
						
							|  |  |  |   DatabaseShareBloc({ | 
					
						
							|  |  |  |     required this.view, | 
					
						
							|  |  |  |   }) : super(const DatabaseShareState.initial()) { | 
					
						
							|  |  |  |     on<ShareCSV>(_onShareCSV); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   final ViewPB view; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Future<void> _onShareCSV( | 
					
						
							|  |  |  |     ShareCSV event, | 
					
						
							|  |  |  |     Emitter<DatabaseShareState> emit, | 
					
						
							|  |  |  |   ) async { | 
					
						
							|  |  |  |     emit(const DatabaseShareState.loading()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     final result = await BackendExportService.exportDatabaseAsCSV(view.id); | 
					
						
							|  |  |  |     result.fold( | 
					
						
							|  |  |  |       (l) => _saveCSVToPath(l.data, event.path), | 
					
						
							|  |  |  |       (r) => Log.error(r), | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     emit( | 
					
						
							|  |  |  |       DatabaseShareState.finish( | 
					
						
							|  |  |  |         result.fold( | 
					
						
							|  |  |  |           (l) { | 
					
						
							|  |  |  |             _saveCSVToPath(l.data, event.path); | 
					
						
							| 
									
										
										
										
											2024-02-24 20:54:10 +07:00
										 |  |  |             return FlowyResult.success(null); | 
					
						
							| 
									
										
										
										
											2023-08-28 23:20:56 +08:00
										 |  |  |           }, | 
					
						
							| 
									
										
										
										
											2024-02-24 20:54:10 +07:00
										 |  |  |           (r) => FlowyResult.failure(r), | 
					
						
							| 
									
										
										
										
											2023-08-28 23:20:56 +08:00
										 |  |  |         ), | 
					
						
							|  |  |  |       ), | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   ExportDataPB _saveCSVToPath(String markdown, String path) { | 
					
						
							|  |  |  |     File(path).writeAsStringSync(markdown); | 
					
						
							|  |  |  |     return ExportDataPB() | 
					
						
							|  |  |  |       ..data = markdown | 
					
						
							|  |  |  |       ..exportType = ExportType.Markdown; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @freezed | 
					
						
							|  |  |  | class DatabaseShareEvent with _$DatabaseShareEvent { | 
					
						
							|  |  |  |   const factory DatabaseShareEvent.shareCSV(String path) = ShareCSV; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @freezed | 
					
						
							|  |  |  | class DatabaseShareState with _$DatabaseShareState { | 
					
						
							|  |  |  |   const factory DatabaseShareState.initial() = _Initial; | 
					
						
							|  |  |  |   const factory DatabaseShareState.loading() = _Loading; | 
					
						
							|  |  |  |   const factory DatabaseShareState.finish( | 
					
						
							| 
									
										
										
										
											2024-02-24 20:54:10 +07:00
										 |  |  |     FlowyResult<void, FlowyError> successOrFail, | 
					
						
							| 
									
										
										
										
											2023-08-28 23:20:56 +08:00
										 |  |  |   ) = _Finish; | 
					
						
							|  |  |  | } |