notification_helper.dart 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import 'dart:typed_data';
  2. import 'package:flowy_sdk/protobuf/dart-notify/protobuf.dart';
  3. import 'package:flowy_sdk/protobuf/flowy-user/protobuf.dart';
  4. import 'package:dartz/dartz.dart';
  5. import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';
  6. import 'package:flowy_sdk/protobuf/flowy-folder/dart_notification.pb.dart';
  7. import 'package:flowy_sdk/protobuf/flowy-grid/dart_notification.pb.dart';
  8. // User
  9. typedef UserNotificationCallback = void Function(UserNotification, Either<Uint8List, FlowyError>);
  10. class UserNotificationParser extends NotificationParser<UserNotification, FlowyError> {
  11. UserNotificationParser({required String id, required UserNotificationCallback callback})
  12. : super(
  13. id: id,
  14. callback: callback,
  15. tyParser: (ty) => UserNotification.valueOf(ty),
  16. errorParser: (bytes) => FlowyError.fromBuffer(bytes),
  17. );
  18. }
  19. // Folder
  20. typedef FolderNotificationCallback = void Function(FolderNotification, Either<Uint8List, FlowyError>);
  21. class FolderNotificationParser extends NotificationParser<FolderNotification, FlowyError> {
  22. FolderNotificationParser({String? id, required FolderNotificationCallback callback})
  23. : super(
  24. id: id,
  25. callback: callback,
  26. tyParser: (ty) => FolderNotification.valueOf(ty),
  27. errorParser: (bytes) => FlowyError.fromBuffer(bytes),
  28. );
  29. }
  30. // Grid
  31. typedef GridNotificationCallback = void Function(GridNotification, Either<Uint8List, FlowyError>);
  32. class GridNotificationParser extends NotificationParser<GridNotification, FlowyError> {
  33. GridNotificationParser({String? id, required GridNotificationCallback callback})
  34. : super(
  35. id: id,
  36. callback: callback,
  37. tyParser: (ty) => GridNotification.valueOf(ty),
  38. errorParser: (bytes) => FlowyError.fromBuffer(bytes),
  39. );
  40. }
  41. class NotificationParser<T, E> {
  42. String? id;
  43. void Function(T, Either<Uint8List, E>) callback;
  44. T? Function(int) tyParser;
  45. E Function(Uint8List) errorParser;
  46. NotificationParser({this.id, required this.callback, required this.errorParser, required this.tyParser});
  47. void parse(SubscribeObject subject) {
  48. if (id != null) {
  49. if (subject.id != id) {
  50. return;
  51. }
  52. }
  53. final ty = tyParser(subject.ty);
  54. if (ty == null) {
  55. return;
  56. }
  57. if (subject.hasError()) {
  58. final bytes = Uint8List.fromList(subject.error);
  59. final error = errorParser(bytes);
  60. callback(ty, right(error));
  61. } else {
  62. final bytes = Uint8List.fromList(subject.payload);
  63. callback(ty, left(bytes));
  64. }
  65. }
  66. }