share_bloc.dart 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import 'dart:io';
  2. import 'package:appflowy/workspace/application/settings/share/export_service.dart';
  3. import 'package:appflowy_backend/log.dart';
  4. import 'package:appflowy_backend/protobuf/flowy-document2/entities.pb.dart';
  5. import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
  6. import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
  7. import 'package:freezed_annotation/freezed_annotation.dart';
  8. import 'package:flutter_bloc/flutter_bloc.dart';
  9. import 'package:dartz/dartz.dart';
  10. part 'share_bloc.freezed.dart';
  11. class DatabaseShareBloc extends Bloc<DatabaseShareEvent, DatabaseShareState> {
  12. DatabaseShareBloc({
  13. required this.view,
  14. }) : super(const DatabaseShareState.initial()) {
  15. on<ShareCSV>(_onShareCSV);
  16. }
  17. final ViewPB view;
  18. Future<void> _onShareCSV(
  19. ShareCSV event,
  20. Emitter<DatabaseShareState> emit,
  21. ) async {
  22. emit(const DatabaseShareState.loading());
  23. final result = await BackendExportService.exportDatabaseAsCSV(view.id);
  24. result.fold(
  25. (l) => _saveCSVToPath(l.data, event.path),
  26. (r) => Log.error(r),
  27. );
  28. emit(
  29. DatabaseShareState.finish(
  30. result.fold(
  31. (l) {
  32. _saveCSVToPath(l.data, event.path);
  33. return left(unit);
  34. },
  35. (r) => right(r),
  36. ),
  37. ),
  38. );
  39. }
  40. ExportDataPB _saveCSVToPath(String markdown, String path) {
  41. File(path).writeAsStringSync(markdown);
  42. return ExportDataPB()
  43. ..data = markdown
  44. ..exportType = ExportType.Markdown;
  45. }
  46. }
  47. @freezed
  48. class DatabaseShareEvent with _$DatabaseShareEvent {
  49. const factory DatabaseShareEvent.shareCSV(String path) = ShareCSV;
  50. }
  51. @freezed
  52. class DatabaseShareState with _$DatabaseShareState {
  53. const factory DatabaseShareState.initial() = _Initial;
  54. const factory DatabaseShareState.loading() = _Loading;
  55. const factory DatabaseShareState.finish(
  56. Either<Unit, FlowyError> successOrFail,
  57. ) = _Finish;
  58. }