|
@@ -1,23 +1,46 @@
|
|
-import 'package:app_flowy/workspace/domain/i_view.dart';
|
|
|
|
-import 'package:flowy_sdk/protobuf/flowy-observable/subject.pb.dart';
|
|
|
|
-import 'package:dartz/dartz.dart';
|
|
|
|
import 'dart:async';
|
|
import 'dart:async';
|
|
|
|
|
|
|
|
+import 'package:dartz/dartz.dart';
|
|
|
|
+import 'package:flowy_infra/flowy_logger.dart';
|
|
|
|
+import 'package:flowy_sdk/dispatch/dispatch.dart';
|
|
|
|
+import 'package:flowy_sdk/protobuf/flowy-observable/subject.pb.dart';
|
|
|
|
+import 'package:flowy_sdk/protobuf/flowy-workspace/errors.pb.dart';
|
|
|
|
+import 'package:flowy_sdk/protobuf/flowy-workspace/observable.pb.dart';
|
|
|
|
+import 'package:flowy_sdk/protobuf/flowy-workspace/view_create.pb.dart';
|
|
|
|
+import 'package:flowy_sdk/protobuf/flowy-workspace/view_query.pb.dart';
|
|
|
|
+import 'package:flowy_sdk/rust_stream.dart';
|
|
|
|
+
|
|
|
|
+import 'package:app_flowy/workspace/domain/i_view.dart';
|
|
|
|
+
|
|
|
|
+class ViewRepository {
|
|
|
|
+ String viewId;
|
|
|
|
+ ViewRepository({
|
|
|
|
+ required this.viewId,
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ Future<Either<View, WorkspaceError>> getView() {
|
|
|
|
+ final request = QueryViewRequest.create()..viewId = viewId;
|
|
|
|
+ return WorkspaceEventReadView(request).send();
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
class ViewWatchRepository {
|
|
class ViewWatchRepository {
|
|
StreamSubscription<ObservableSubject>? _subscription;
|
|
StreamSubscription<ObservableSubject>? _subscription;
|
|
ViewUpdatedCallback? _updatedCallback;
|
|
ViewUpdatedCallback? _updatedCallback;
|
|
String viewId;
|
|
String viewId;
|
|
|
|
+ late ViewRepository _repo;
|
|
ViewWatchRepository({
|
|
ViewWatchRepository({
|
|
required this.viewId,
|
|
required this.viewId,
|
|
- });
|
|
|
|
|
|
+ }) {
|
|
|
|
+ _repo = ViewRepository(viewId: viewId);
|
|
|
|
+ }
|
|
|
|
|
|
void startWatching({
|
|
void startWatching({
|
|
ViewUpdatedCallback? updatedCallback,
|
|
ViewUpdatedCallback? updatedCallback,
|
|
}) {
|
|
}) {
|
|
- _addViewCallback = addViewCallback;
|
|
|
|
_updatedCallback = updatedCallback;
|
|
_updatedCallback = updatedCallback;
|
|
_subscription = RustStreamReceiver.listen((observable) {
|
|
_subscription = RustStreamReceiver.listen((observable) {
|
|
- if (observable.subjectId != appId) {
|
|
|
|
|
|
+ if (observable.subjectId != viewId) {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -27,4 +50,26 @@ class ViewWatchRepository {
|
|
}
|
|
}
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ void _handleObservableType(WorkspaceObservable ty) {
|
|
|
|
+ switch (ty) {
|
|
|
|
+ case WorkspaceObservable.ViewUpdateDesc:
|
|
|
|
+ if (_updatedCallback == null) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ _repo.getView().then((result) {
|
|
|
|
+ result.fold(
|
|
|
|
+ (view) => _updatedCallback!(view),
|
|
|
|
+ (error) => Log.error(error),
|
|
|
|
+ );
|
|
|
|
+ });
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ Future<void> close() async {
|
|
|
|
+ await _subscription?.cancel();
|
|
|
|
+ }
|
|
}
|
|
}
|