util.dart 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import 'package:dartz/dartz.dart';
  2. import 'package:flowy_protobuf/remote.dart';
  3. // ignore: import_of_legacy_library_into_null_safe
  4. import 'package:protobuf/protobuf.dart';
  5. import 'package:flowy_sdk/ffi/adaptor.dart';
  6. import 'dart:typed_data';
  7. import 'package:flowy_logger/flowy_logger.dart';
  8. Either<Uint8List, String> protobufToBytes<T extends GeneratedMessage>(
  9. T? message) {
  10. try {
  11. if (message != null) {
  12. return left(message.writeToBuffer());
  13. } else {
  14. return left(Uint8List.fromList([]));
  15. }
  16. } catch (e, s) {
  17. return right(
  18. 'FlowyFFI syncRequest error: ${e.runtimeType}. Stack trace: $s');
  19. }
  20. }
  21. Future<ResponsePacket> asyncCommand(RequestPacket request) {
  22. try {
  23. return FFIAdaptor.asyncRequest(request).future.then((value) {
  24. try {
  25. final resp = ResponsePacket.fromBuffer(value);
  26. return Future.microtask(() => resp);
  27. } catch (e, s) {
  28. Log.error('FlowyFFI asyncRequest error: ${e.runtimeType}\n');
  29. Log.error('Stack trace \n $s');
  30. final resp = responseFromRequest(
  31. request, "FlowyFFI asyncRequest error: ${e.runtimeType}");
  32. return Future.microtask(() => resp);
  33. }
  34. });
  35. } catch (e, s) {
  36. Log.error('FlowyFFI asyncRequest error: ${e.runtimeType}\n');
  37. Log.error('Stack trace \n $s');
  38. final resp = responseFromRequest(
  39. request, "FlowyFFI asyncRequest error: ${e.runtimeType}");
  40. return Future.microtask(() => resp);
  41. }
  42. }
  43. Future<ResponsePacket> asyncQuery(RequestPacket request) {
  44. try {
  45. return FFIAdaptor.asyncQuery(request).future.then((value) {
  46. try {
  47. final resp = ResponsePacket.fromBuffer(value);
  48. return Future.microtask(() => resp);
  49. } catch (e, s) {
  50. Log.error('FlowyFFI asyncRequest error: ${e.runtimeType}\n');
  51. Log.error('Stack trace \n $s');
  52. final resp = responseFromRequest(
  53. request, "FlowyFFI asyncRequest error: ${e.runtimeType}");
  54. return Future.microtask(() => resp);
  55. }
  56. });
  57. } catch (e, s) {
  58. Log.error('FlowyFFI asyncRequest error: ${e.runtimeType}\n');
  59. Log.error('Stack trace \n $s');
  60. final resp = responseFromRequest(
  61. request, "FlowyFFI asyncRequest error: ${e.runtimeType}");
  62. return Future.microtask(() => resp);
  63. }
  64. }
  65. ResponsePacket responseFromRequest(RequestPacket request, String message) {
  66. var resp = ResponsePacket();
  67. resp.id = request.id;
  68. resp.statusCode = StatusCode.Fail;
  69. resp.command = request.command;
  70. resp.err = message;
  71. return resp;
  72. }