[client]: close opened doc after close or delete the view

This commit is contained in:
appflowy 2021-10-19 13:04:09 +08:00
parent fc498fbc8e
commit 22cc76163b
44 changed files with 362 additions and 893 deletions

View file

@ -1,5 +1,4 @@
import 'package:dartz/dartz.dart'; import 'package:dartz/dartz.dart';
import 'package:flowy_log/flowy_log.dart';
import 'package:flowy_sdk/dispatch/dispatch.dart'; import 'package:flowy_sdk/dispatch/dispatch.dart';
import 'package:flowy_sdk/protobuf/flowy-document/doc.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-document/doc.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-workspace/errors.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-workspace/errors.pb.dart';
@ -12,7 +11,7 @@ class DocRepository {
}); });
Future<Either<DocDelta, WorkspaceError>> readDoc() { Future<Either<DocDelta, WorkspaceError>> readDoc() {
final request = OpenViewRequest.create()..viewId = docId; final request = QueryViewRequest(viewIds: [docId]);
return WorkspaceEventOpenView(request).send(); return WorkspaceEventOpenView(request).send();
} }
@ -23,11 +22,8 @@ class DocRepository {
return WorkspaceEventApplyDocDelta(request).send(); return WorkspaceEventApplyDocDelta(request).send();
} }
Future<Either<Unit, WorkspaceError>> closeDoc({String? name, String? desc, String? text}) { Future<Either<Unit, WorkspaceError>> closeDoc() {
Log.error('Close the doc'); final request = QueryViewRequest(viewIds: [docId]);
return WorkspaceEventCloseView(request).send();
return Future(() {
return left(unit);
});
} }
} }

View file

@ -6,7 +6,6 @@ import 'package:flowy_sdk/protobuf/flowy-dart-notify/subject.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-workspace/errors.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/observable.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-workspace/view_create.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-workspace/view_create.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-workspace/view_delete.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-workspace/view_query.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-workspace/view_query.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-workspace/view_update.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-workspace/view_update.pb.dart';
import 'package:flowy_sdk/rust_stream.dart'; import 'package:flowy_sdk/rust_stream.dart';
@ -22,7 +21,7 @@ class ViewRepository {
}); });
Future<Either<View, WorkspaceError>> readView() { Future<Either<View, WorkspaceError>> readView() {
final request = QueryViewRequest.create()..viewId = view.id; final request = QueryViewRequest(viewIds: [view.id]);
return WorkspaceEventReadView(request).send(); return WorkspaceEventReadView(request).send();
} }
@ -41,7 +40,7 @@ class ViewRepository {
} }
Future<Either<Unit, WorkspaceError>> delete() { Future<Either<Unit, WorkspaceError>> delete() {
final request = DeleteViewRequest.create()..viewIds.add(view.id); final request = QueryViewRequest.create()..viewIds.add(view.id);
return WorkspaceEventDeleteView(request).send(); return WorkspaceEventDeleteView(request).send();
} }
} }

View file

@ -221,7 +221,7 @@ class WorkspaceEventUpdateView {
} }
class WorkspaceEventDeleteView { class WorkspaceEventDeleteView {
DeleteViewRequest request; QueryViewRequest request;
WorkspaceEventDeleteView(this.request); WorkspaceEventDeleteView(this.request);
Future<Either<Unit, WorkspaceError>> send() { Future<Either<Unit, WorkspaceError>> send() {
@ -238,7 +238,7 @@ class WorkspaceEventDeleteView {
} }
class WorkspaceEventOpenView { class WorkspaceEventOpenView {
OpenViewRequest request; QueryViewRequest request;
WorkspaceEventOpenView(this.request); WorkspaceEventOpenView(this.request);
Future<Either<DocDelta, WorkspaceError>> send() { Future<Either<DocDelta, WorkspaceError>> send() {
@ -254,6 +254,23 @@ class WorkspaceEventOpenView {
} }
} }
class WorkspaceEventCloseView {
QueryViewRequest request;
WorkspaceEventCloseView(this.request);
Future<Either<Unit, WorkspaceError>> send() {
final request = FFIRequest.create()
..event = WorkspaceEvent.CloseView.toString()
..payload = requestToBytes(this.request);
return Dispatch.asyncRequest(request)
.then((bytesResult) => bytesResult.fold(
(bytes) => left(unit),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
}
class WorkspaceEventApplyDocDelta { class WorkspaceEventApplyDocDelta {
DocDelta request; DocDelta request;
WorkspaceEventApplyDocDelta(this.request); WorkspaceEventApplyDocDelta(this.request);

View file

@ -25,7 +25,8 @@ class WorkspaceEvent extends $pb.ProtobufEnum {
static const WorkspaceEvent UpdateView = WorkspaceEvent._(203, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'UpdateView'); static const WorkspaceEvent UpdateView = WorkspaceEvent._(203, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'UpdateView');
static const WorkspaceEvent DeleteView = WorkspaceEvent._(204, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'DeleteView'); static const WorkspaceEvent DeleteView = WorkspaceEvent._(204, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'DeleteView');
static const WorkspaceEvent OpenView = WorkspaceEvent._(205, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'OpenView'); static const WorkspaceEvent OpenView = WorkspaceEvent._(205, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'OpenView');
static const WorkspaceEvent ApplyDocDelta = WorkspaceEvent._(206, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'ApplyDocDelta'); static const WorkspaceEvent CloseView = WorkspaceEvent._(206, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'CloseView');
static const WorkspaceEvent ApplyDocDelta = WorkspaceEvent._(207, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'ApplyDocDelta');
static const WorkspaceEvent ReadTrash = WorkspaceEvent._(300, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'ReadTrash'); static const WorkspaceEvent ReadTrash = WorkspaceEvent._(300, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'ReadTrash');
static const WorkspaceEvent PutbackTrash = WorkspaceEvent._(301, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'PutbackTrash'); static const WorkspaceEvent PutbackTrash = WorkspaceEvent._(301, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'PutbackTrash');
static const WorkspaceEvent DeleteTrash = WorkspaceEvent._(302, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'DeleteTrash'); static const WorkspaceEvent DeleteTrash = WorkspaceEvent._(302, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'DeleteTrash');
@ -49,6 +50,7 @@ class WorkspaceEvent extends $pb.ProtobufEnum {
UpdateView, UpdateView,
DeleteView, DeleteView,
OpenView, OpenView,
CloseView,
ApplyDocDelta, ApplyDocDelta,
ReadTrash, ReadTrash,
PutbackTrash, PutbackTrash,

View file

@ -27,7 +27,8 @@ const WorkspaceEvent$json = const {
const {'1': 'UpdateView', '2': 203}, const {'1': 'UpdateView', '2': 203},
const {'1': 'DeleteView', '2': 204}, const {'1': 'DeleteView', '2': 204},
const {'1': 'OpenView', '2': 205}, const {'1': 'OpenView', '2': 205},
const {'1': 'ApplyDocDelta', '2': 206}, const {'1': 'CloseView', '2': 206},
const {'1': 'ApplyDocDelta', '2': 207},
const {'1': 'ReadTrash', '2': 300}, const {'1': 'ReadTrash', '2': 300},
const {'1': 'PutbackTrash', '2': 301}, const {'1': 'PutbackTrash', '2': 301},
const {'1': 'DeleteTrash', '2': 302}, const {'1': 'DeleteTrash', '2': 302},
@ -38,4 +39,4 @@ const WorkspaceEvent$json = const {
}; };
/// Descriptor for `WorkspaceEvent`. Decode as a `google.protobuf.EnumDescriptorProto`. /// Descriptor for `WorkspaceEvent`. Decode as a `google.protobuf.EnumDescriptorProto`.
final $typed_data.Uint8List workspaceEventDescriptor = $convert.base64Decode('Cg5Xb3Jrc3BhY2VFdmVudBITCg9DcmVhdGVXb3Jrc3BhY2UQABIUChBSZWFkQ3VyV29ya3NwYWNlEAESEgoOUmVhZFdvcmtzcGFjZXMQAhITCg9EZWxldGVXb3Jrc3BhY2UQAxIRCg1PcGVuV29ya3NwYWNlEAQSFQoRUmVhZFdvcmtzcGFjZUFwcHMQBRINCglDcmVhdGVBcHAQZRINCglEZWxldGVBcHAQZhILCgdSZWFkQXBwEGcSDQoJVXBkYXRlQXBwEGgSDwoKQ3JlYXRlVmlldxDJARINCghSZWFkVmlldxDKARIPCgpVcGRhdGVWaWV3EMsBEg8KCkRlbGV0ZVZpZXcQzAESDQoIT3BlblZpZXcQzQESEgoNQXBwbHlEb2NEZWx0YRDOARIOCglSZWFkVHJhc2gQrAISEQoMUHV0YmFja1RyYXNoEK0CEhAKC0RlbGV0ZVRyYXNoEK4CEg8KClJlc3RvcmVBbGwQrwISDgoJRGVsZXRlQWxsELACEhIKDUluaXRXb3Jrc3BhY2UQ6Ac='); final $typed_data.Uint8List workspaceEventDescriptor = $convert.base64Decode('Cg5Xb3Jrc3BhY2VFdmVudBITCg9DcmVhdGVXb3Jrc3BhY2UQABIUChBSZWFkQ3VyV29ya3NwYWNlEAESEgoOUmVhZFdvcmtzcGFjZXMQAhITCg9EZWxldGVXb3Jrc3BhY2UQAxIRCg1PcGVuV29ya3NwYWNlEAQSFQoRUmVhZFdvcmtzcGFjZUFwcHMQBRINCglDcmVhdGVBcHAQZRINCglEZWxldGVBcHAQZhILCgdSZWFkQXBwEGcSDQoJVXBkYXRlQXBwEGgSDwoKQ3JlYXRlVmlldxDJARINCghSZWFkVmlldxDKARIPCgpVcGRhdGVWaWV3EMsBEg8KCkRlbGV0ZVZpZXcQzAESDQoIT3BlblZpZXcQzQESDgoJQ2xvc2VWaWV3EM4BEhIKDUFwcGx5RG9jRGVsdGEQzwESDgoJUmVhZFRyYXNoEKwCEhEKDFB1dGJhY2tUcmFzaBCtAhIQCgtEZWxldGVUcmFzaBCuAhIPCgpSZXN0b3JlQWxsEK8CEg4KCURlbGV0ZUFsbBCwAhISCg1Jbml0V29ya3NwYWNlEOgH');

View file

@ -1,6 +1,5 @@
// Auto-generated, do not edit // Auto-generated, do not edit
export './view_update.pb.dart'; export './view_update.pb.dart';
export './view_delete.pb.dart';
export './app_query.pb.dart'; export './app_query.pb.dart';
export './workspace_delete.pb.dart'; export './workspace_delete.pb.dart';
export './observable.pb.dart'; export './observable.pb.dart';

View file

@ -1,93 +0,0 @@
///
// Generated code. Do not modify.
// source: view_delete.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
class DeleteViewRequest extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'DeleteViewRequest', createEmptyInstance: create)
..pPS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'viewIds')
..hasRequiredFields = false
;
DeleteViewRequest._() : super();
factory DeleteViewRequest({
$core.Iterable<$core.String>? viewIds,
}) {
final _result = create();
if (viewIds != null) {
_result.viewIds.addAll(viewIds);
}
return _result;
}
factory DeleteViewRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory DeleteViewRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
DeleteViewRequest clone() => DeleteViewRequest()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
DeleteViewRequest copyWith(void Function(DeleteViewRequest) updates) => super.copyWith((message) => updates(message as DeleteViewRequest)) as DeleteViewRequest; // ignore: deprecated_member_use
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static DeleteViewRequest create() => DeleteViewRequest._();
DeleteViewRequest createEmptyInstance() => create();
static $pb.PbList<DeleteViewRequest> createRepeated() => $pb.PbList<DeleteViewRequest>();
@$core.pragma('dart2js:noInline')
static DeleteViewRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<DeleteViewRequest>(create);
static DeleteViewRequest? _defaultInstance;
@$pb.TagNumber(1)
$core.List<$core.String> get viewIds => $_getList(0);
}
class DeleteViewParams extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'DeleteViewParams', createEmptyInstance: create)
..pPS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'viewIds')
..hasRequiredFields = false
;
DeleteViewParams._() : super();
factory DeleteViewParams({
$core.Iterable<$core.String>? viewIds,
}) {
final _result = create();
if (viewIds != null) {
_result.viewIds.addAll(viewIds);
}
return _result;
}
factory DeleteViewParams.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory DeleteViewParams.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
DeleteViewParams clone() => DeleteViewParams()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
DeleteViewParams copyWith(void Function(DeleteViewParams) updates) => super.copyWith((message) => updates(message as DeleteViewParams)) as DeleteViewParams; // ignore: deprecated_member_use
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static DeleteViewParams create() => DeleteViewParams._();
DeleteViewParams createEmptyInstance() => create();
static $pb.PbList<DeleteViewParams> createRepeated() => $pb.PbList<DeleteViewParams>();
@$core.pragma('dart2js:noInline')
static DeleteViewParams getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<DeleteViewParams>(create);
static DeleteViewParams? _defaultInstance;
@$pb.TagNumber(1)
$core.List<$core.String> get viewIds => $_getList(0);
}

View file

@ -1,7 +0,0 @@
///
// Generated code. Do not modify.
// source: view_delete.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields

View file

@ -1,30 +0,0 @@
///
// Generated code. Do not modify.
// source: view_delete.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields,deprecated_member_use_from_same_package
import 'dart:core' as $core;
import 'dart:convert' as $convert;
import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use deleteViewRequestDescriptor instead')
const DeleteViewRequest$json = const {
'1': 'DeleteViewRequest',
'2': const [
const {'1': 'view_ids', '3': 1, '4': 3, '5': 9, '10': 'viewIds'},
],
};
/// Descriptor for `DeleteViewRequest`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List deleteViewRequestDescriptor = $convert.base64Decode('ChFEZWxldGVWaWV3UmVxdWVzdBIZCgh2aWV3X2lkcxgBIAMoCVIHdmlld0lkcw==');
@$core.Deprecated('Use deleteViewParamsDescriptor instead')
const DeleteViewParams$json = const {
'1': 'DeleteViewParams',
'2': const [
const {'1': 'view_ids', '3': 1, '4': 3, '5': 9, '10': 'viewIds'},
],
};
/// Descriptor for `DeleteViewParams`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List deleteViewParamsDescriptor = $convert.base64Decode('ChBEZWxldGVWaWV3UGFyYW1zEhkKCHZpZXdfaWRzGAEgAygJUgd2aWV3SWRz');

View file

@ -1,9 +0,0 @@
///
// Generated code. Do not modify.
// source: view_delete.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields,deprecated_member_use_from_same_package
export 'view_delete.pb.dart';

View file

@ -11,17 +11,17 @@ import 'package:protobuf/protobuf.dart' as $pb;
class QueryViewRequest extends $pb.GeneratedMessage { class QueryViewRequest extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'QueryViewRequest', createEmptyInstance: create) static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'QueryViewRequest', createEmptyInstance: create)
..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'viewId') ..pPS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'viewIds')
..hasRequiredFields = false ..hasRequiredFields = false
; ;
QueryViewRequest._() : super(); QueryViewRequest._() : super();
factory QueryViewRequest({ factory QueryViewRequest({
$core.String? viewId, $core.Iterable<$core.String>? viewIds,
}) { }) {
final _result = create(); final _result = create();
if (viewId != null) { if (viewIds != null) {
_result.viewId = viewId; _result.viewIds.addAll(viewIds);
} }
return _result; return _result;
} }
@ -47,13 +47,7 @@ class QueryViewRequest extends $pb.GeneratedMessage {
static QueryViewRequest? _defaultInstance; static QueryViewRequest? _defaultInstance;
@$pb.TagNumber(1) @$pb.TagNumber(1)
$core.String get viewId => $_getSZ(0); $core.List<$core.String> get viewIds => $_getList(0);
@$pb.TagNumber(1)
set viewId($core.String v) { $_setString(0, v); }
@$pb.TagNumber(1)
$core.bool hasViewId() => $_has(0);
@$pb.TagNumber(1)
void clearViewId() => clearField(1);
} }
class ViewIdentifier extends $pb.GeneratedMessage { class ViewIdentifier extends $pb.GeneratedMessage {
@ -103,50 +97,44 @@ class ViewIdentifier extends $pb.GeneratedMessage {
void clearViewId() => clearField(1); void clearViewId() => clearField(1);
} }
class OpenViewRequest extends $pb.GeneratedMessage { class ViewIdentifiers extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'OpenViewRequest', createEmptyInstance: create) static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'ViewIdentifiers', createEmptyInstance: create)
..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'viewId') ..pPS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'viewIds')
..hasRequiredFields = false ..hasRequiredFields = false
; ;
OpenViewRequest._() : super(); ViewIdentifiers._() : super();
factory OpenViewRequest({ factory ViewIdentifiers({
$core.String? viewId, $core.Iterable<$core.String>? viewIds,
}) { }) {
final _result = create(); final _result = create();
if (viewId != null) { if (viewIds != null) {
_result.viewId = viewId; _result.viewIds.addAll(viewIds);
} }
return _result; return _result;
} }
factory OpenViewRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); factory ViewIdentifiers.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory OpenViewRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); factory ViewIdentifiers.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
@$core.Deprecated( @$core.Deprecated(
'Using this can add significant overhead to your binary. ' 'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version') 'Will be removed in next major version')
OpenViewRequest clone() => OpenViewRequest()..mergeFromMessage(this); ViewIdentifiers clone() => ViewIdentifiers()..mergeFromMessage(this);
@$core.Deprecated( @$core.Deprecated(
'Using this can add significant overhead to your binary. ' 'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' 'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version') 'Will be removed in next major version')
OpenViewRequest copyWith(void Function(OpenViewRequest) updates) => super.copyWith((message) => updates(message as OpenViewRequest)) as OpenViewRequest; // ignore: deprecated_member_use ViewIdentifiers copyWith(void Function(ViewIdentifiers) updates) => super.copyWith((message) => updates(message as ViewIdentifiers)) as ViewIdentifiers; // ignore: deprecated_member_use
$pb.BuilderInfo get info_ => _i; $pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline') @$core.pragma('dart2js:noInline')
static OpenViewRequest create() => OpenViewRequest._(); static ViewIdentifiers create() => ViewIdentifiers._();
OpenViewRequest createEmptyInstance() => create(); ViewIdentifiers createEmptyInstance() => create();
static $pb.PbList<OpenViewRequest> createRepeated() => $pb.PbList<OpenViewRequest>(); static $pb.PbList<ViewIdentifiers> createRepeated() => $pb.PbList<ViewIdentifiers>();
@$core.pragma('dart2js:noInline') @$core.pragma('dart2js:noInline')
static OpenViewRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<OpenViewRequest>(create); static ViewIdentifiers getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ViewIdentifiers>(create);
static OpenViewRequest? _defaultInstance; static ViewIdentifiers? _defaultInstance;
@$pb.TagNumber(1) @$pb.TagNumber(1)
$core.String get viewId => $_getSZ(0); $core.List<$core.String> get viewIds => $_getList(0);
@$pb.TagNumber(1)
set viewId($core.String v) { $_setString(0, v); }
@$pb.TagNumber(1)
$core.bool hasViewId() => $_has(0);
@$pb.TagNumber(1)
void clearViewId() => clearField(1);
} }

View file

@ -12,12 +12,12 @@ import 'dart:typed_data' as $typed_data;
const QueryViewRequest$json = const { const QueryViewRequest$json = const {
'1': 'QueryViewRequest', '1': 'QueryViewRequest',
'2': const [ '2': const [
const {'1': 'view_id', '3': 1, '4': 1, '5': 9, '10': 'viewId'}, const {'1': 'view_ids', '3': 1, '4': 3, '5': 9, '10': 'viewIds'},
], ],
}; };
/// Descriptor for `QueryViewRequest`. Decode as a `google.protobuf.DescriptorProto`. /// Descriptor for `QueryViewRequest`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List queryViewRequestDescriptor = $convert.base64Decode('ChBRdWVyeVZpZXdSZXF1ZXN0EhcKB3ZpZXdfaWQYASABKAlSBnZpZXdJZA=='); final $typed_data.Uint8List queryViewRequestDescriptor = $convert.base64Decode('ChBRdWVyeVZpZXdSZXF1ZXN0EhkKCHZpZXdfaWRzGAEgAygJUgd2aWV3SWRz');
@$core.Deprecated('Use viewIdentifierDescriptor instead') @$core.Deprecated('Use viewIdentifierDescriptor instead')
const ViewIdentifier$json = const { const ViewIdentifier$json = const {
'1': 'ViewIdentifier', '1': 'ViewIdentifier',
@ -28,13 +28,13 @@ const ViewIdentifier$json = const {
/// Descriptor for `ViewIdentifier`. Decode as a `google.protobuf.DescriptorProto`. /// Descriptor for `ViewIdentifier`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List viewIdentifierDescriptor = $convert.base64Decode('Cg5WaWV3SWRlbnRpZmllchIXCgd2aWV3X2lkGAEgASgJUgZ2aWV3SWQ='); final $typed_data.Uint8List viewIdentifierDescriptor = $convert.base64Decode('Cg5WaWV3SWRlbnRpZmllchIXCgd2aWV3X2lkGAEgASgJUgZ2aWV3SWQ=');
@$core.Deprecated('Use openViewRequestDescriptor instead') @$core.Deprecated('Use viewIdentifiersDescriptor instead')
const OpenViewRequest$json = const { const ViewIdentifiers$json = const {
'1': 'OpenViewRequest', '1': 'ViewIdentifiers',
'2': const [ '2': const [
const {'1': 'view_id', '3': 1, '4': 1, '5': 9, '10': 'viewId'}, const {'1': 'view_ids', '3': 1, '4': 3, '5': 9, '10': 'viewIds'},
], ],
}; };
/// Descriptor for `OpenViewRequest`. Decode as a `google.protobuf.DescriptorProto`. /// Descriptor for `ViewIdentifiers`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List openViewRequestDescriptor = $convert.base64Decode('Cg9PcGVuVmlld1JlcXVlc3QSFwoHdmlld19pZBgBIAEoCVIGdmlld0lk'); final $typed_data.Uint8List viewIdentifiersDescriptor = $convert.base64Decode('Cg9WaWV3SWRlbnRpZmllcnMSGQoIdmlld19pZHMYASADKAlSB3ZpZXdJZHM=');

View file

@ -13,7 +13,6 @@ use flowy_workspace::{
}, },
protobuf::{App, CreateAppParams, RepeatedView}, protobuf::{App, CreateAppParams, RepeatedView},
}; };
use protobuf::Message;
use sqlx::{postgres::PgArguments, Postgres}; use sqlx::{postgres::PgArguments, Postgres};
use uuid::Uuid; use uuid::Uuid;

View file

@ -15,7 +15,7 @@ use flowy_net::{
}; };
use flowy_workspace::{ use flowy_workspace::{
entities::view::parser::{ViewDesc, ViewName, ViewThumbnail}, entities::view::parser::{ViewDesc, ViewName, ViewThumbnail},
protobuf::{CreateViewParams, DeleteViewParams, UpdateViewParams, ViewIdentifier}, protobuf::{CreateViewParams, QueryViewRequest, UpdateViewParams, ViewIdentifier},
}; };
use sqlx::PgPool; use sqlx::PgPool;
use std::sync::Arc; use std::sync::Arc;
@ -96,7 +96,7 @@ pub async fn update_handler(payload: Payload, pool: Data<PgPool>) -> Result<Http
} }
pub async fn delete_handler(payload: Payload, pool: Data<PgPool>) -> Result<HttpResponse, ServerError> { pub async fn delete_handler(payload: Payload, pool: Data<PgPool>) -> Result<HttpResponse, ServerError> {
let params: DeleteViewParams = parse_from_payload(payload).await?; let params: QueryViewRequest = parse_from_payload(payload).await?;
let view_ids = check_view_ids(params.view_ids.to_vec())?; let view_ids = check_view_ids(params.view_ids.to_vec())?;
let mut transaction = pool let mut transaction = pool
.begin() .begin()

View file

@ -1,6 +1,6 @@
use crate::helper::ViewTest; use crate::helper::ViewTest;
use flowy_document::entities::doc::DocIdentifier; use flowy_document::entities::doc::DocIdentifier;
use flowy_workspace::entities::view::DeleteViewParams; use flowy_workspace::entities::view::ViewIdentifiers;
#[actix_rt::test] #[actix_rt::test]
async fn doc_read() { async fn doc_read() {
@ -17,7 +17,7 @@ async fn doc_read() {
#[actix_rt::test] #[actix_rt::test]
async fn doc_delete() { async fn doc_delete() {
let test = ViewTest::new().await; let test = ViewTest::new().await;
let delete_params = DeleteViewParams { let delete_params = ViewIdentifiers {
view_ids: vec![test.view.id.clone()], view_ids: vec![test.view.id.clone()],
}; };
test.server.delete_view(delete_params).await; test.server.delete_view(delete_params).await;

View file

@ -147,7 +147,7 @@ async fn view_update() {
test.server.update_view(update_params).await; test.server.update_view(update_params).await;
// read // read
let read_params = ViewIdentifier::new(&test.view.id); let read_params: ViewIdentifier = test.view.id.clone().into();
let view = test.server.read_view(read_params).await.unwrap(); let view = test.server.read_view(read_params).await.unwrap();
assert_eq!(&view.name, new_name); assert_eq!(&view.name, new_name);
} }
@ -166,7 +166,7 @@ async fn view_delete() {
.map(|item| item.id) .map(|item| item.id)
.collect::<Vec<String>>(); .collect::<Vec<String>>();
// read // read
let read_params = ViewIdentifier::new(&test.view.id); let read_params: ViewIdentifier = test.view.id.clone().into();
// the view can't read from the server. it should be in the trash // the view can't read from the server. it should be in the trash
assert_eq!(test.server.read_view(read_params).await.is_none(), true); assert_eq!(test.server.read_view(read_params).await.is_none(), true);

View file

@ -117,7 +117,7 @@ impl TestUserServer {
update_view_request(self.user_token(), params, &url).await.unwrap(); update_view_request(self.user_token(), params, &url).await.unwrap();
} }
pub async fn delete_view(&self, params: DeleteViewParams) { pub async fn delete_view(&self, params: ViewIdentifiers) {
let url = format!("{}/api/view", self.http_addr()); let url = format!("{}/api/view", self.http_addr());
delete_view_request(self.user_token(), params, &url).await.unwrap(); delete_view_request(self.user_token(), params, &url).await.unwrap();
} }

View file

@ -44,11 +44,9 @@ pub fn category_from_str(type_str: &str) -> TypeCategory {
| "RepeatedTrash" | "RepeatedTrash"
| "UpdateViewRequest" | "UpdateViewRequest"
| "UpdateViewParams" | "UpdateViewParams"
| "DeleteViewRequest"
| "DeleteViewParams"
| "QueryViewRequest" | "QueryViewRequest"
| "ViewIdentifier" | "ViewIdentifier"
| "OpenViewRequest" | "ViewIdentifiers"
| "CreateViewRequest" | "CreateViewRequest"
| "CreateViewParams" | "CreateViewParams"
| "View" | "View"

View file

@ -84,3 +84,11 @@ pub struct DocIdentifier {
impl std::convert::From<String> for DocIdentifier { impl std::convert::From<String> for DocIdentifier {
fn from(doc_id: String) -> Self { DocIdentifier { doc_id } } fn from(doc_id: String) -> Self { DocIdentifier { doc_id } }
} }
impl std::convert::From<&String> for DocIdentifier {
fn from(doc_id: &String) -> Self {
DocIdentifier {
doc_id: doc_id.to_owned(),
}
}
}

View file

@ -1,5 +1,5 @@
use crate::{ use crate::{
entities::doc::{CreateDocParams, DocDelta, DocIdentifier}, entities::doc::{DocDelta, DocIdentifier},
errors::DocError, errors::DocError,
services::{ services::{
doc::{doc_controller::DocController, edit::ClientEditDoc}, doc::{doc_controller::DocController, edit::ClientEditDoc},
@ -47,6 +47,11 @@ impl FlowyDocument {
Ok(edit_context) Ok(edit_context)
} }
pub async fn close(&self, params: DocIdentifier) -> Result<(), DocError> {
let _ = self.doc_ctrl.close(&params.doc_id)?;
Ok(())
}
pub async fn apply_doc_delta(&self, params: DocDelta) -> Result<DocDelta, DocError> { pub async fn apply_doc_delta(&self, params: DocDelta) -> Result<DocDelta, DocError> {
// workaround: compare the rust's delta with flutter's delta. Will be removed // workaround: compare the rust's delta with flutter's delta. Will be removed
// very soon // very soon

View file

@ -3,7 +3,7 @@ use std::sync::Arc;
use bytes::Bytes; use bytes::Bytes;
use crate::{ use crate::{
entities::doc::{CreateDocParams, Doc, DocDelta, DocIdentifier}, entities::doc::{Doc, DocDelta, DocIdentifier},
errors::{DocError, DocResult}, errors::{DocError, DocResult},
module::DocumentUser, module::DocumentUser,
services::{ services::{

View file

@ -82,12 +82,15 @@ impl ViewTest {
} }
} }
pub async fn delete_view(&self, view_ids: Vec<String>) { pub async fn delete_views(&self, view_ids: Vec<String>) {
let request = DeleteViewRequest { view_ids }; let request = QueryViewRequest { view_ids };
delete_view(&self.sdk, request).await; delete_view(&self.sdk, request).await;
} }
pub async fn delete_all_view(&self) { pub async fn delete_views_permanent(&self, view_ids: Vec<String>) {
let request = QueryViewRequest { view_ids };
delete_view(&self.sdk, request).await;
FlowyWorkspaceTest::new(self.sdk.clone()) FlowyWorkspaceTest::new(self.sdk.clone())
.event(DeleteAll) .event(DeleteAll)
.async_send() .async_send()
@ -238,7 +241,7 @@ pub async fn read_view(sdk: &FlowyTestSDK, request: QueryViewRequest) -> View {
.parse::<View>() .parse::<View>()
} }
pub async fn delete_view(sdk: &FlowyTestSDK, request: DeleteViewRequest) { pub async fn delete_view(sdk: &FlowyTestSDK, request: QueryViewRequest) {
FlowyWorkspaceTest::new(sdk.clone()) FlowyWorkspaceTest::new(sdk.clone())
.event(DeleteView) .event(DeleteView)
.request(request) .request(request)
@ -262,7 +265,7 @@ pub async fn putback_trash(sdk: &FlowyTestSDK, id: TrashIdentifier) {
.await; .await;
} }
pub async fn open_view(sdk: &FlowyTestSDK, request: OpenViewRequest) -> Doc { pub async fn open_view(sdk: &FlowyTestSDK, request: QueryViewRequest) -> Doc {
FlowyWorkspaceTest::new(sdk.clone()) FlowyWorkspaceTest::new(sdk.clone())
.event(OpenView) .event(OpenView)
.request(request) .request(request)

View file

@ -1,7 +1,6 @@
use crate::helper::*; use crate::helper::*;
use flowy_test::{builder::UserTest, FlowyTest}; use flowy_test::{builder::UserTest, FlowyTest};
use flowy_user::{errors::ErrorCode, event::UserEvent::*, prelude::*}; use flowy_user::{errors::ErrorCode, event::UserEvent::*, prelude::*};
use serial_test::*;
#[tokio::test] #[tokio::test]
async fn sign_up_with_invalid_email() { async fn sign_up_with_invalid_email() {

View file

@ -1,10 +1,8 @@
pub mod parser; pub mod parser;
mod view_create; mod view_create;
mod view_delete;
mod view_query; mod view_query;
mod view_update; mod view_update;
pub use view_create::*; pub use view_create::*;
pub use view_delete::*;
pub use view_query::*; pub use view_query::*;
pub use view_update::*; pub use view_update::*;

View file

@ -1,33 +0,0 @@
use crate::{entities::view::parser::ViewId, errors::WorkspaceError};
use flowy_derive::ProtoBuf;
use std::convert::TryInto;
#[derive(Default, ProtoBuf)]
pub struct DeleteViewRequest {
#[pb(index = 1)]
pub view_ids: Vec<String>,
}
#[derive(Default, ProtoBuf)]
pub struct DeleteViewParams {
#[pb(index = 1)]
pub view_ids: Vec<String>,
}
impl TryInto<DeleteViewParams> for DeleteViewRequest {
type Error = WorkspaceError;
fn try_into(self) -> Result<DeleteViewParams, Self::Error> {
let mut view_ids = vec![];
for view_id in self.view_ids {
let view_id = ViewId::parse(view_id)
.map_err(|e| WorkspaceError::view_id().context(e))?
.0;
view_ids.push(view_id);
}
Ok(DeleteViewParams { view_ids })
}
}

View file

@ -6,15 +6,7 @@ use std::convert::TryInto;
#[derive(Default, ProtoBuf)] #[derive(Default, ProtoBuf)]
pub struct QueryViewRequest { pub struct QueryViewRequest {
#[pb(index = 1)] #[pb(index = 1)]
pub view_id: String, pub view_ids: Vec<String>,
}
impl QueryViewRequest {
pub fn new(view_id: &str) -> Self {
Self {
view_id: view_id.to_owned(),
}
}
} }
#[derive(Default, ProtoBuf, Clone, Debug)] #[derive(Default, ProtoBuf, Clone, Debug)]
@ -23,14 +15,6 @@ pub struct ViewIdentifier {
pub view_id: String, pub view_id: String,
} }
impl ViewIdentifier {
pub fn new(view_id: &str) -> Self {
Self {
view_id: view_id.to_owned(),
}
}
}
impl std::convert::From<String> for ViewIdentifier { impl std::convert::From<String> for ViewIdentifier {
fn from(view_id: String) -> Self { ViewIdentifier { view_id } } fn from(view_id: String) -> Self { ViewIdentifier { view_id } }
} }
@ -42,8 +26,14 @@ impl std::convert::Into<DocIdentifier> for ViewIdentifier {
impl TryInto<ViewIdentifier> for QueryViewRequest { impl TryInto<ViewIdentifier> for QueryViewRequest {
type Error = WorkspaceError; type Error = WorkspaceError;
fn try_into(self) -> Result<ViewIdentifier, Self::Error> { fn try_into(self) -> Result<ViewIdentifier, Self::Error> {
let view_id = ViewId::parse(self.view_id) debug_assert!(self.view_ids.len() == 1);
.map_err(|e| WorkspaceError::view_id().context(e))? if self.view_ids.len() != 1 {
return Err(WorkspaceError::invalid_view_id().context("The len of view_ids should be equal to 1"));
}
let view_id = self.view_ids.first().unwrap().clone();
let view_id = ViewId::parse(view_id)
.map_err(|e| WorkspaceError::invalid_view_id().context(e))?
.0; .0;
Ok(ViewIdentifier { view_id }) Ok(ViewIdentifier { view_id })
@ -51,18 +41,24 @@ impl TryInto<ViewIdentifier> for QueryViewRequest {
} }
#[derive(Default, ProtoBuf)] #[derive(Default, ProtoBuf)]
pub struct OpenViewRequest { pub struct ViewIdentifiers {
#[pb(index = 1)] #[pb(index = 1)]
pub view_id: String, pub view_ids: Vec<String>,
} }
impl std::convert::TryInto<DocIdentifier> for OpenViewRequest { impl TryInto<ViewIdentifiers> for QueryViewRequest {
type Error = WorkspaceError; type Error = WorkspaceError;
fn try_into(self) -> Result<DocIdentifier, Self::Error> { fn try_into(self) -> Result<ViewIdentifiers, Self::Error> {
let view_id = ViewId::parse(self.view_id) let mut view_ids = vec![];
.map_err(|e| WorkspaceError::view_id().context(e))? for view_id in self.view_ids {
let view_id = ViewId::parse(view_id)
.map_err(|e| WorkspaceError::invalid_view_id().context(e))?
.0; .0;
Ok(DocIdentifier { doc_id: view_id })
view_ids.push(view_id);
}
Ok(ViewIdentifiers { view_ids })
} }
} }

View file

@ -60,7 +60,7 @@ impl TryInto<UpdateViewParams> for UpdateViewRequest {
fn try_into(self) -> Result<UpdateViewParams, Self::Error> { fn try_into(self) -> Result<UpdateViewParams, Self::Error> {
let view_id = ViewId::parse(self.view_id) let view_id = ViewId::parse(self.view_id)
.map_err(|e| WorkspaceError::view_id().context(e))? .map_err(|e| WorkspaceError::invalid_view_id().context(e))?
.0; .0;
let name = match self.name { let name = match self.name {

View file

@ -45,7 +45,7 @@ impl WorkspaceError {
static_workspace_error!(app_id, ErrorCode::AppIdInvalid); static_workspace_error!(app_id, ErrorCode::AppIdInvalid);
static_workspace_error!(view_name, ErrorCode::ViewNameInvalid); static_workspace_error!(view_name, ErrorCode::ViewNameInvalid);
static_workspace_error!(view_thumbnail, ErrorCode::ViewThumbnailInvalid); static_workspace_error!(view_thumbnail, ErrorCode::ViewThumbnailInvalid);
static_workspace_error!(view_id, ErrorCode::ViewIdInvalid); static_workspace_error!(invalid_view_id, ErrorCode::ViewIdInvalid);
static_workspace_error!(view_desc, ErrorCode::ViewDescInvalid); static_workspace_error!(view_desc, ErrorCode::ViewDescInvalid);
static_workspace_error!(view_data, ErrorCode::ViewDataInvalid); static_workspace_error!(view_data, ErrorCode::ViewDataInvalid);
static_workspace_error!(unauthorized, ErrorCode::UserUnauthorized); static_workspace_error!(unauthorized, ErrorCode::UserUnauthorized);

View file

@ -43,14 +43,17 @@ pub enum WorkspaceEvent {
#[event(input = "UpdateViewRequest", output = "View")] #[event(input = "UpdateViewRequest", output = "View")]
UpdateView = 203, UpdateView = 203,
#[event(input = "DeleteViewRequest")] #[event(input = "QueryViewRequest")]
DeleteView = 204, DeleteView = 204,
#[event(input = "OpenViewRequest", output = "DocDelta")] #[event(input = "QueryViewRequest", output = "DocDelta")]
OpenView = 205, OpenView = 205,
#[event(input = "QueryViewRequest")]
CloseView = 206,
#[event(input = "DocDelta", output = "DocDelta")] #[event(input = "DocDelta", output = "DocDelta")]
ApplyDocDelta = 206, ApplyDocDelta = 207,
#[event(output = "RepeatedTrash")] #[event(output = "RepeatedTrash")]
ReadTrash = 300, ReadTrash = 300,

View file

@ -4,21 +4,19 @@ use crate::{
view::{ view::{
CreateViewParams, CreateViewParams,
CreateViewRequest, CreateViewRequest,
DeleteViewParams,
DeleteViewRequest,
OpenViewRequest,
QueryViewRequest, QueryViewRequest,
UpdateViewParams, UpdateViewParams,
UpdateViewRequest, UpdateViewRequest,
View, View,
ViewIdentifier, ViewIdentifier,
ViewIdentifiers,
}, },
}, },
errors::WorkspaceError, errors::WorkspaceError,
services::{TrashCan, ViewController}, services::{TrashCan, ViewController},
}; };
use flowy_dispatch::prelude::{data_result, Data, DataResult, Unit}; use flowy_dispatch::prelude::{data_result, Data, DataResult, Unit};
use flowy_document::entities::doc::{DocDelta, DocIdentifier}; use flowy_document::entities::doc::DocDelta;
use std::{convert::TryInto, sync::Arc}; use std::{convert::TryInto, sync::Arc};
#[tracing::instrument(skip(data, controller), err)] #[tracing::instrument(skip(data, controller), err)]
@ -66,11 +64,15 @@ pub(crate) async fn apply_doc_delta_handler(
#[tracing::instrument(skip(data, controller, trash_can), err)] #[tracing::instrument(skip(data, controller, trash_can), err)]
pub(crate) async fn delete_view_handler( pub(crate) async fn delete_view_handler(
data: Data<DeleteViewRequest>, data: Data<QueryViewRequest>,
controller: Unit<Arc<ViewController>>, controller: Unit<Arc<ViewController>>,
trash_can: Unit<Arc<TrashCan>>, trash_can: Unit<Arc<TrashCan>>,
) -> Result<(), WorkspaceError> { ) -> Result<(), WorkspaceError> {
let params: DeleteViewParams = data.into_inner().try_into()?; let params: ViewIdentifiers = data.into_inner().try_into()?;
for view_id in &params.view_ids {
let _ = controller.close_view(view_id.into()).await;
}
let trash = controller let trash = controller
.read_view_tables(params.view_ids)? .read_view_tables(params.view_ids)?
.into_iter() .into_iter()
@ -83,10 +85,20 @@ pub(crate) async fn delete_view_handler(
#[tracing::instrument(skip(data, controller), err)] #[tracing::instrument(skip(data, controller), err)]
pub(crate) async fn open_view_handler( pub(crate) async fn open_view_handler(
data: Data<OpenViewRequest>, data: Data<QueryViewRequest>,
controller: Unit<Arc<ViewController>>, controller: Unit<Arc<ViewController>>,
) -> DataResult<DocDelta, WorkspaceError> { ) -> DataResult<DocDelta, WorkspaceError> {
let params: DocIdentifier = data.into_inner().try_into()?; let params: ViewIdentifier = data.into_inner().try_into()?;
let doc = controller.open_view(params).await?; let doc = controller.open_view(params.into()).await?;
data_result(doc) data_result(doc)
} }
#[tracing::instrument(skip(data, controller), err)]
pub(crate) async fn close_view_handler(
data: Data<QueryViewRequest>,
controller: Unit<Arc<ViewController>>,
) -> Result<(), WorkspaceError> {
let params: ViewIdentifier = data.into_inner().try_into()?;
let _ = controller.close_view(params.into()).await?;
Ok(())
}

View file

@ -89,6 +89,7 @@ pub fn create(workspace: Arc<WorkspaceController>) -> Module {
.event(WorkspaceEvent::UpdateView, update_view_handler) .event(WorkspaceEvent::UpdateView, update_view_handler)
.event(WorkspaceEvent::DeleteView, delete_view_handler) .event(WorkspaceEvent::DeleteView, delete_view_handler)
.event(WorkspaceEvent::OpenView, open_view_handler) .event(WorkspaceEvent::OpenView, open_view_handler)
.event(WorkspaceEvent::CloseView, close_view_handler)
.event(WorkspaceEvent::ApplyDocDelta, apply_doc_delta_handler); .event(WorkspaceEvent::ApplyDocDelta, apply_doc_delta_handler);
module = module module = module

View file

@ -40,7 +40,8 @@ pub enum WorkspaceEvent {
UpdateView = 203, UpdateView = 203,
DeleteView = 204, DeleteView = 204,
OpenView = 205, OpenView = 205,
ApplyDocDelta = 206, CloseView = 206,
ApplyDocDelta = 207,
ReadTrash = 300, ReadTrash = 300,
PutbackTrash = 301, PutbackTrash = 301,
DeleteTrash = 302, DeleteTrash = 302,
@ -71,7 +72,8 @@ impl ::protobuf::ProtobufEnum for WorkspaceEvent {
203 => ::std::option::Option::Some(WorkspaceEvent::UpdateView), 203 => ::std::option::Option::Some(WorkspaceEvent::UpdateView),
204 => ::std::option::Option::Some(WorkspaceEvent::DeleteView), 204 => ::std::option::Option::Some(WorkspaceEvent::DeleteView),
205 => ::std::option::Option::Some(WorkspaceEvent::OpenView), 205 => ::std::option::Option::Some(WorkspaceEvent::OpenView),
206 => ::std::option::Option::Some(WorkspaceEvent::ApplyDocDelta), 206 => ::std::option::Option::Some(WorkspaceEvent::CloseView),
207 => ::std::option::Option::Some(WorkspaceEvent::ApplyDocDelta),
300 => ::std::option::Option::Some(WorkspaceEvent::ReadTrash), 300 => ::std::option::Option::Some(WorkspaceEvent::ReadTrash),
301 => ::std::option::Option::Some(WorkspaceEvent::PutbackTrash), 301 => ::std::option::Option::Some(WorkspaceEvent::PutbackTrash),
302 => ::std::option::Option::Some(WorkspaceEvent::DeleteTrash), 302 => ::std::option::Option::Some(WorkspaceEvent::DeleteTrash),
@ -99,6 +101,7 @@ impl ::protobuf::ProtobufEnum for WorkspaceEvent {
WorkspaceEvent::UpdateView, WorkspaceEvent::UpdateView,
WorkspaceEvent::DeleteView, WorkspaceEvent::DeleteView,
WorkspaceEvent::OpenView, WorkspaceEvent::OpenView,
WorkspaceEvent::CloseView,
WorkspaceEvent::ApplyDocDelta, WorkspaceEvent::ApplyDocDelta,
WorkspaceEvent::ReadTrash, WorkspaceEvent::ReadTrash,
WorkspaceEvent::PutbackTrash, WorkspaceEvent::PutbackTrash,
@ -134,64 +137,67 @@ impl ::protobuf::reflect::ProtobufValue for WorkspaceEvent {
} }
static file_descriptor_proto_data: &'static [u8] = b"\ static file_descriptor_proto_data: &'static [u8] = b"\
\n\x0bevent.proto*\x97\x03\n\x0eWorkspaceEvent\x12\x13\n\x0fCreateWorksp\ \n\x0bevent.proto*\xa7\x03\n\x0eWorkspaceEvent\x12\x13\n\x0fCreateWorksp\
ace\x10\0\x12\x14\n\x10ReadCurWorkspace\x10\x01\x12\x12\n\x0eReadWorkspa\ ace\x10\0\x12\x14\n\x10ReadCurWorkspace\x10\x01\x12\x12\n\x0eReadWorkspa\
ces\x10\x02\x12\x13\n\x0fDeleteWorkspace\x10\x03\x12\x11\n\rOpenWorkspac\ ces\x10\x02\x12\x13\n\x0fDeleteWorkspace\x10\x03\x12\x11\n\rOpenWorkspac\
e\x10\x04\x12\x15\n\x11ReadWorkspaceApps\x10\x05\x12\r\n\tCreateApp\x10e\ e\x10\x04\x12\x15\n\x11ReadWorkspaceApps\x10\x05\x12\r\n\tCreateApp\x10e\
\x12\r\n\tDeleteApp\x10f\x12\x0b\n\x07ReadApp\x10g\x12\r\n\tUpdateApp\ \x12\r\n\tDeleteApp\x10f\x12\x0b\n\x07ReadApp\x10g\x12\r\n\tUpdateApp\
\x10h\x12\x0f\n\nCreateView\x10\xc9\x01\x12\r\n\x08ReadView\x10\xca\x01\ \x10h\x12\x0f\n\nCreateView\x10\xc9\x01\x12\r\n\x08ReadView\x10\xca\x01\
\x12\x0f\n\nUpdateView\x10\xcb\x01\x12\x0f\n\nDeleteView\x10\xcc\x01\x12\ \x12\x0f\n\nUpdateView\x10\xcb\x01\x12\x0f\n\nDeleteView\x10\xcc\x01\x12\
\r\n\x08OpenView\x10\xcd\x01\x12\x12\n\rApplyDocDelta\x10\xce\x01\x12\ \r\n\x08OpenView\x10\xcd\x01\x12\x0e\n\tCloseView\x10\xce\x01\x12\x12\n\
\x0e\n\tReadTrash\x10\xac\x02\x12\x11\n\x0cPutbackTrash\x10\xad\x02\x12\ \rApplyDocDelta\x10\xcf\x01\x12\x0e\n\tReadTrash\x10\xac\x02\x12\x11\n\
\x10\n\x0bDeleteTrash\x10\xae\x02\x12\x0f\n\nRestoreAll\x10\xaf\x02\x12\ \x0cPutbackTrash\x10\xad\x02\x12\x10\n\x0bDeleteTrash\x10\xae\x02\x12\
\x0e\n\tDeleteAll\x10\xb0\x02\x12\x12\n\rInitWorkspace\x10\xe8\x07J\xb0\ \x0f\n\nRestoreAll\x10\xaf\x02\x12\x0e\n\tDeleteAll\x10\xb0\x02\x12\x12\
\x07\n\x06\x12\x04\0\0\x19\x01\n\x08\n\x01\x0c\x12\x03\0\0\x12\n\n\n\x02\ \n\rInitWorkspace\x10\xe8\x07J\xd9\x07\n\x06\x12\x04\0\0\x1a\x01\n\x08\n\
\x05\0\x12\x04\x02\0\x19\x01\n\n\n\x03\x05\0\x01\x12\x03\x02\x05\x13\n\ \x01\x0c\x12\x03\0\0\x12\n\n\n\x02\x05\0\x12\x04\x02\0\x1a\x01\n\n\n\x03\
\x0b\n\x04\x05\0\x02\0\x12\x03\x03\x04\x18\n\x0c\n\x05\x05\0\x02\0\x01\ \x05\0\x01\x12\x03\x02\x05\x13\n\x0b\n\x04\x05\0\x02\0\x12\x03\x03\x04\
\x12\x03\x03\x04\x13\n\x0c\n\x05\x05\0\x02\0\x02\x12\x03\x03\x16\x17\n\ \x18\n\x0c\n\x05\x05\0\x02\0\x01\x12\x03\x03\x04\x13\n\x0c\n\x05\x05\0\
\x0b\n\x04\x05\0\x02\x01\x12\x03\x04\x04\x19\n\x0c\n\x05\x05\0\x02\x01\ \x02\0\x02\x12\x03\x03\x16\x17\n\x0b\n\x04\x05\0\x02\x01\x12\x03\x04\x04\
\x01\x12\x03\x04\x04\x14\n\x0c\n\x05\x05\0\x02\x01\x02\x12\x03\x04\x17\ \x19\n\x0c\n\x05\x05\0\x02\x01\x01\x12\x03\x04\x04\x14\n\x0c\n\x05\x05\0\
\x18\n\x0b\n\x04\x05\0\x02\x02\x12\x03\x05\x04\x17\n\x0c\n\x05\x05\0\x02\ \x02\x01\x02\x12\x03\x04\x17\x18\n\x0b\n\x04\x05\0\x02\x02\x12\x03\x05\
\x02\x01\x12\x03\x05\x04\x12\n\x0c\n\x05\x05\0\x02\x02\x02\x12\x03\x05\ \x04\x17\n\x0c\n\x05\x05\0\x02\x02\x01\x12\x03\x05\x04\x12\n\x0c\n\x05\
\x15\x16\n\x0b\n\x04\x05\0\x02\x03\x12\x03\x06\x04\x18\n\x0c\n\x05\x05\0\ \x05\0\x02\x02\x02\x12\x03\x05\x15\x16\n\x0b\n\x04\x05\0\x02\x03\x12\x03\
\x02\x03\x01\x12\x03\x06\x04\x13\n\x0c\n\x05\x05\0\x02\x03\x02\x12\x03\ \x06\x04\x18\n\x0c\n\x05\x05\0\x02\x03\x01\x12\x03\x06\x04\x13\n\x0c\n\
\x06\x16\x17\n\x0b\n\x04\x05\0\x02\x04\x12\x03\x07\x04\x16\n\x0c\n\x05\ \x05\x05\0\x02\x03\x02\x12\x03\x06\x16\x17\n\x0b\n\x04\x05\0\x02\x04\x12\
\x05\0\x02\x04\x01\x12\x03\x07\x04\x11\n\x0c\n\x05\x05\0\x02\x04\x02\x12\ \x03\x07\x04\x16\n\x0c\n\x05\x05\0\x02\x04\x01\x12\x03\x07\x04\x11\n\x0c\
\x03\x07\x14\x15\n\x0b\n\x04\x05\0\x02\x05\x12\x03\x08\x04\x1a\n\x0c\n\ \n\x05\x05\0\x02\x04\x02\x12\x03\x07\x14\x15\n\x0b\n\x04\x05\0\x02\x05\
\x05\x05\0\x02\x05\x01\x12\x03\x08\x04\x15\n\x0c\n\x05\x05\0\x02\x05\x02\ \x12\x03\x08\x04\x1a\n\x0c\n\x05\x05\0\x02\x05\x01\x12\x03\x08\x04\x15\n\
\x12\x03\x08\x18\x19\n\x0b\n\x04\x05\0\x02\x06\x12\x03\t\x04\x14\n\x0c\n\ \x0c\n\x05\x05\0\x02\x05\x02\x12\x03\x08\x18\x19\n\x0b\n\x04\x05\0\x02\
\x05\x05\0\x02\x06\x01\x12\x03\t\x04\r\n\x0c\n\x05\x05\0\x02\x06\x02\x12\ \x06\x12\x03\t\x04\x14\n\x0c\n\x05\x05\0\x02\x06\x01\x12\x03\t\x04\r\n\
\x03\t\x10\x13\n\x0b\n\x04\x05\0\x02\x07\x12\x03\n\x04\x14\n\x0c\n\x05\ \x0c\n\x05\x05\0\x02\x06\x02\x12\x03\t\x10\x13\n\x0b\n\x04\x05\0\x02\x07\
\x05\0\x02\x07\x01\x12\x03\n\x04\r\n\x0c\n\x05\x05\0\x02\x07\x02\x12\x03\ \x12\x03\n\x04\x14\n\x0c\n\x05\x05\0\x02\x07\x01\x12\x03\n\x04\r\n\x0c\n\
\n\x10\x13\n\x0b\n\x04\x05\0\x02\x08\x12\x03\x0b\x04\x12\n\x0c\n\x05\x05\ \x05\x05\0\x02\x07\x02\x12\x03\n\x10\x13\n\x0b\n\x04\x05\0\x02\x08\x12\
\0\x02\x08\x01\x12\x03\x0b\x04\x0b\n\x0c\n\x05\x05\0\x02\x08\x02\x12\x03\ \x03\x0b\x04\x12\n\x0c\n\x05\x05\0\x02\x08\x01\x12\x03\x0b\x04\x0b\n\x0c\
\x0b\x0e\x11\n\x0b\n\x04\x05\0\x02\t\x12\x03\x0c\x04\x14\n\x0c\n\x05\x05\ \n\x05\x05\0\x02\x08\x02\x12\x03\x0b\x0e\x11\n\x0b\n\x04\x05\0\x02\t\x12\
\0\x02\t\x01\x12\x03\x0c\x04\r\n\x0c\n\x05\x05\0\x02\t\x02\x12\x03\x0c\ \x03\x0c\x04\x14\n\x0c\n\x05\x05\0\x02\t\x01\x12\x03\x0c\x04\r\n\x0c\n\
\x10\x13\n\x0b\n\x04\x05\0\x02\n\x12\x03\r\x04\x15\n\x0c\n\x05\x05\0\x02\ \x05\x05\0\x02\t\x02\x12\x03\x0c\x10\x13\n\x0b\n\x04\x05\0\x02\n\x12\x03\
\n\x01\x12\x03\r\x04\x0e\n\x0c\n\x05\x05\0\x02\n\x02\x12\x03\r\x11\x14\n\ \r\x04\x15\n\x0c\n\x05\x05\0\x02\n\x01\x12\x03\r\x04\x0e\n\x0c\n\x05\x05\
\x0b\n\x04\x05\0\x02\x0b\x12\x03\x0e\x04\x13\n\x0c\n\x05\x05\0\x02\x0b\ \0\x02\n\x02\x12\x03\r\x11\x14\n\x0b\n\x04\x05\0\x02\x0b\x12\x03\x0e\x04\
\x01\x12\x03\x0e\x04\x0c\n\x0c\n\x05\x05\0\x02\x0b\x02\x12\x03\x0e\x0f\ \x13\n\x0c\n\x05\x05\0\x02\x0b\x01\x12\x03\x0e\x04\x0c\n\x0c\n\x05\x05\0\
\x12\n\x0b\n\x04\x05\0\x02\x0c\x12\x03\x0f\x04\x15\n\x0c\n\x05\x05\0\x02\ \x02\x0b\x02\x12\x03\x0e\x0f\x12\n\x0b\n\x04\x05\0\x02\x0c\x12\x03\x0f\
\x0c\x01\x12\x03\x0f\x04\x0e\n\x0c\n\x05\x05\0\x02\x0c\x02\x12\x03\x0f\ \x04\x15\n\x0c\n\x05\x05\0\x02\x0c\x01\x12\x03\x0f\x04\x0e\n\x0c\n\x05\
\x11\x14\n\x0b\n\x04\x05\0\x02\r\x12\x03\x10\x04\x15\n\x0c\n\x05\x05\0\ \x05\0\x02\x0c\x02\x12\x03\x0f\x11\x14\n\x0b\n\x04\x05\0\x02\r\x12\x03\
\x02\r\x01\x12\x03\x10\x04\x0e\n\x0c\n\x05\x05\0\x02\r\x02\x12\x03\x10\ \x10\x04\x15\n\x0c\n\x05\x05\0\x02\r\x01\x12\x03\x10\x04\x0e\n\x0c\n\x05\
\x11\x14\n\x0b\n\x04\x05\0\x02\x0e\x12\x03\x11\x04\x13\n\x0c\n\x05\x05\0\ \x05\0\x02\r\x02\x12\x03\x10\x11\x14\n\x0b\n\x04\x05\0\x02\x0e\x12\x03\
\x02\x0e\x01\x12\x03\x11\x04\x0c\n\x0c\n\x05\x05\0\x02\x0e\x02\x12\x03\ \x11\x04\x13\n\x0c\n\x05\x05\0\x02\x0e\x01\x12\x03\x11\x04\x0c\n\x0c\n\
\x11\x0f\x12\n\x0b\n\x04\x05\0\x02\x0f\x12\x03\x12\x04\x18\n\x0c\n\x05\ \x05\x05\0\x02\x0e\x02\x12\x03\x11\x0f\x12\n\x0b\n\x04\x05\0\x02\x0f\x12\
\x05\0\x02\x0f\x01\x12\x03\x12\x04\x11\n\x0c\n\x05\x05\0\x02\x0f\x02\x12\ \x03\x12\x04\x14\n\x0c\n\x05\x05\0\x02\x0f\x01\x12\x03\x12\x04\r\n\x0c\n\
\x03\x12\x14\x17\n\x0b\n\x04\x05\0\x02\x10\x12\x03\x13\x04\x14\n\x0c\n\ \x05\x05\0\x02\x0f\x02\x12\x03\x12\x10\x13\n\x0b\n\x04\x05\0\x02\x10\x12\
\x05\x05\0\x02\x10\x01\x12\x03\x13\x04\r\n\x0c\n\x05\x05\0\x02\x10\x02\ \x03\x13\x04\x18\n\x0c\n\x05\x05\0\x02\x10\x01\x12\x03\x13\x04\x11\n\x0c\
\x12\x03\x13\x10\x13\n\x0b\n\x04\x05\0\x02\x11\x12\x03\x14\x04\x17\n\x0c\ \n\x05\x05\0\x02\x10\x02\x12\x03\x13\x14\x17\n\x0b\n\x04\x05\0\x02\x11\
\n\x05\x05\0\x02\x11\x01\x12\x03\x14\x04\x10\n\x0c\n\x05\x05\0\x02\x11\ \x12\x03\x14\x04\x14\n\x0c\n\x05\x05\0\x02\x11\x01\x12\x03\x14\x04\r\n\
\x02\x12\x03\x14\x13\x16\n\x0b\n\x04\x05\0\x02\x12\x12\x03\x15\x04\x16\n\ \x0c\n\x05\x05\0\x02\x11\x02\x12\x03\x14\x10\x13\n\x0b\n\x04\x05\0\x02\
\x0c\n\x05\x05\0\x02\x12\x01\x12\x03\x15\x04\x0f\n\x0c\n\x05\x05\0\x02\ \x12\x12\x03\x15\x04\x17\n\x0c\n\x05\x05\0\x02\x12\x01\x12\x03\x15\x04\
\x12\x02\x12\x03\x15\x12\x15\n\x0b\n\x04\x05\0\x02\x13\x12\x03\x16\x04\ \x10\n\x0c\n\x05\x05\0\x02\x12\x02\x12\x03\x15\x13\x16\n\x0b\n\x04\x05\0\
\x15\n\x0c\n\x05\x05\0\x02\x13\x01\x12\x03\x16\x04\x0e\n\x0c\n\x05\x05\0\ \x02\x13\x12\x03\x16\x04\x16\n\x0c\n\x05\x05\0\x02\x13\x01\x12\x03\x16\
\x02\x13\x02\x12\x03\x16\x11\x14\n\x0b\n\x04\x05\0\x02\x14\x12\x03\x17\ \x04\x0f\n\x0c\n\x05\x05\0\x02\x13\x02\x12\x03\x16\x12\x15\n\x0b\n\x04\
\x04\x14\n\x0c\n\x05\x05\0\x02\x14\x01\x12\x03\x17\x04\r\n\x0c\n\x05\x05\ \x05\0\x02\x14\x12\x03\x17\x04\x15\n\x0c\n\x05\x05\0\x02\x14\x01\x12\x03\
\0\x02\x14\x02\x12\x03\x17\x10\x13\n\x0b\n\x04\x05\0\x02\x15\x12\x03\x18\ \x17\x04\x0e\n\x0c\n\x05\x05\0\x02\x14\x02\x12\x03\x17\x11\x14\n\x0b\n\
\x04\x19\n\x0c\n\x05\x05\0\x02\x15\x01\x12\x03\x18\x04\x11\n\x0c\n\x05\ \x04\x05\0\x02\x15\x12\x03\x18\x04\x14\n\x0c\n\x05\x05\0\x02\x15\x01\x12\
\x05\0\x02\x15\x02\x12\x03\x18\x14\x18b\x06proto3\ \x03\x18\x04\r\n\x0c\n\x05\x05\0\x02\x15\x02\x12\x03\x18\x10\x13\n\x0b\n\
\x04\x05\0\x02\x16\x12\x03\x19\x04\x19\n\x0c\n\x05\x05\0\x02\x16\x01\x12\
\x03\x19\x04\x11\n\x0c\n\x05\x05\0\x02\x16\x02\x12\x03\x19\x14\x18b\x06p\
roto3\
"; ";
static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT; static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT;

View file

@ -3,9 +3,6 @@
mod view_update; mod view_update;
pub use view_update::*; pub use view_update::*;
mod view_delete;
pub use view_delete::*;
mod app_query; mod app_query;
pub use app_query::*; pub use app_query::*;

View file

@ -1,368 +0,0 @@
// This file is generated by rust-protobuf 2.22.1. Do not edit
// @generated
// https://github.com/rust-lang/rust-clippy/issues/702
#![allow(unknown_lints)]
#![allow(clippy::all)]
#![allow(unused_attributes)]
#![cfg_attr(rustfmt, rustfmt::skip)]
#![allow(box_pointers)]
#![allow(dead_code)]
#![allow(missing_docs)]
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
#![allow(non_upper_case_globals)]
#![allow(trivial_casts)]
#![allow(unused_imports)]
#![allow(unused_results)]
//! Generated file from `view_delete.proto`
/// Generated files are compatible only with the same version
/// of protobuf runtime.
// const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_2_22_1;
#[derive(PartialEq,Clone,Default)]
pub struct DeleteViewRequest {
// message fields
pub view_ids: ::protobuf::RepeatedField<::std::string::String>,
// special fields
pub unknown_fields: ::protobuf::UnknownFields,
pub cached_size: ::protobuf::CachedSize,
}
impl<'a> ::std::default::Default for &'a DeleteViewRequest {
fn default() -> &'a DeleteViewRequest {
<DeleteViewRequest as ::protobuf::Message>::default_instance()
}
}
impl DeleteViewRequest {
pub fn new() -> DeleteViewRequest {
::std::default::Default::default()
}
// repeated string view_ids = 1;
pub fn get_view_ids(&self) -> &[::std::string::String] {
&self.view_ids
}
pub fn clear_view_ids(&mut self) {
self.view_ids.clear();
}
// Param is passed by value, moved
pub fn set_view_ids(&mut self, v: ::protobuf::RepeatedField<::std::string::String>) {
self.view_ids = v;
}
// Mutable pointer to the field.
pub fn mut_view_ids(&mut self) -> &mut ::protobuf::RepeatedField<::std::string::String> {
&mut self.view_ids
}
// Take field
pub fn take_view_ids(&mut self) -> ::protobuf::RepeatedField<::std::string::String> {
::std::mem::replace(&mut self.view_ids, ::protobuf::RepeatedField::new())
}
}
impl ::protobuf::Message for DeleteViewRequest {
fn is_initialized(&self) -> bool {
true
}
fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> {
while !is.eof()? {
let (field_number, wire_type) = is.read_tag_unpack()?;
match field_number {
1 => {
::protobuf::rt::read_repeated_string_into(wire_type, is, &mut self.view_ids)?;
},
_ => {
::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?;
},
};
}
::std::result::Result::Ok(())
}
// Compute sizes of nested messages
#[allow(unused_variables)]
fn compute_size(&self) -> u32 {
let mut my_size = 0;
for value in &self.view_ids {
my_size += ::protobuf::rt::string_size(1, &value);
};
my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
self.cached_size.set(my_size);
my_size
}
fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> {
for v in &self.view_ids {
os.write_string(1, &v)?;
};
os.write_unknown_fields(self.get_unknown_fields())?;
::std::result::Result::Ok(())
}
fn get_cached_size(&self) -> u32 {
self.cached_size.get()
}
fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
&self.unknown_fields
}
fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
&mut self.unknown_fields
}
fn as_any(&self) -> &dyn (::std::any::Any) {
self as &dyn (::std::any::Any)
}
fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
self as &mut dyn (::std::any::Any)
}
fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
self
}
fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
Self::descriptor_static()
}
fn new() -> DeleteViewRequest {
DeleteViewRequest::new()
}
fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT;
descriptor.get(|| {
let mut fields = ::std::vec::Vec::new();
fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
"view_ids",
|m: &DeleteViewRequest| { &m.view_ids },
|m: &mut DeleteViewRequest| { &mut m.view_ids },
));
::protobuf::reflect::MessageDescriptor::new_pb_name::<DeleteViewRequest>(
"DeleteViewRequest",
fields,
file_descriptor_proto()
)
})
}
fn default_instance() -> &'static DeleteViewRequest {
static instance: ::protobuf::rt::LazyV2<DeleteViewRequest> = ::protobuf::rt::LazyV2::INIT;
instance.get(DeleteViewRequest::new)
}
}
impl ::protobuf::Clear for DeleteViewRequest {
fn clear(&mut self) {
self.view_ids.clear();
self.unknown_fields.clear();
}
}
impl ::std::fmt::Debug for DeleteViewRequest {
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
::protobuf::text_format::fmt(self, f)
}
}
impl ::protobuf::reflect::ProtobufValue for DeleteViewRequest {
fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
::protobuf::reflect::ReflectValueRef::Message(self)
}
}
#[derive(PartialEq,Clone,Default)]
pub struct DeleteViewParams {
// message fields
pub view_ids: ::protobuf::RepeatedField<::std::string::String>,
// special fields
pub unknown_fields: ::protobuf::UnknownFields,
pub cached_size: ::protobuf::CachedSize,
}
impl<'a> ::std::default::Default for &'a DeleteViewParams {
fn default() -> &'a DeleteViewParams {
<DeleteViewParams as ::protobuf::Message>::default_instance()
}
}
impl DeleteViewParams {
pub fn new() -> DeleteViewParams {
::std::default::Default::default()
}
// repeated string view_ids = 1;
pub fn get_view_ids(&self) -> &[::std::string::String] {
&self.view_ids
}
pub fn clear_view_ids(&mut self) {
self.view_ids.clear();
}
// Param is passed by value, moved
pub fn set_view_ids(&mut self, v: ::protobuf::RepeatedField<::std::string::String>) {
self.view_ids = v;
}
// Mutable pointer to the field.
pub fn mut_view_ids(&mut self) -> &mut ::protobuf::RepeatedField<::std::string::String> {
&mut self.view_ids
}
// Take field
pub fn take_view_ids(&mut self) -> ::protobuf::RepeatedField<::std::string::String> {
::std::mem::replace(&mut self.view_ids, ::protobuf::RepeatedField::new())
}
}
impl ::protobuf::Message for DeleteViewParams {
fn is_initialized(&self) -> bool {
true
}
fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> {
while !is.eof()? {
let (field_number, wire_type) = is.read_tag_unpack()?;
match field_number {
1 => {
::protobuf::rt::read_repeated_string_into(wire_type, is, &mut self.view_ids)?;
},
_ => {
::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?;
},
};
}
::std::result::Result::Ok(())
}
// Compute sizes of nested messages
#[allow(unused_variables)]
fn compute_size(&self) -> u32 {
let mut my_size = 0;
for value in &self.view_ids {
my_size += ::protobuf::rt::string_size(1, &value);
};
my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
self.cached_size.set(my_size);
my_size
}
fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> {
for v in &self.view_ids {
os.write_string(1, &v)?;
};
os.write_unknown_fields(self.get_unknown_fields())?;
::std::result::Result::Ok(())
}
fn get_cached_size(&self) -> u32 {
self.cached_size.get()
}
fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
&self.unknown_fields
}
fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
&mut self.unknown_fields
}
fn as_any(&self) -> &dyn (::std::any::Any) {
self as &dyn (::std::any::Any)
}
fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
self as &mut dyn (::std::any::Any)
}
fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
self
}
fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
Self::descriptor_static()
}
fn new() -> DeleteViewParams {
DeleteViewParams::new()
}
fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT;
descriptor.get(|| {
let mut fields = ::std::vec::Vec::new();
fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
"view_ids",
|m: &DeleteViewParams| { &m.view_ids },
|m: &mut DeleteViewParams| { &mut m.view_ids },
));
::protobuf::reflect::MessageDescriptor::new_pb_name::<DeleteViewParams>(
"DeleteViewParams",
fields,
file_descriptor_proto()
)
})
}
fn default_instance() -> &'static DeleteViewParams {
static instance: ::protobuf::rt::LazyV2<DeleteViewParams> = ::protobuf::rt::LazyV2::INIT;
instance.get(DeleteViewParams::new)
}
}
impl ::protobuf::Clear for DeleteViewParams {
fn clear(&mut self) {
self.view_ids.clear();
self.unknown_fields.clear();
}
}
impl ::std::fmt::Debug for DeleteViewParams {
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
::protobuf::text_format::fmt(self, f)
}
}
impl ::protobuf::reflect::ProtobufValue for DeleteViewParams {
fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
::protobuf::reflect::ReflectValueRef::Message(self)
}
}
static file_descriptor_proto_data: &'static [u8] = b"\
\n\x11view_delete.proto\".\n\x11DeleteViewRequest\x12\x19\n\x08view_ids\
\x18\x01\x20\x03(\tR\x07viewIds\"-\n\x10DeleteViewParams\x12\x19\n\x08vi\
ew_ids\x18\x01\x20\x03(\tR\x07viewIdsJ\xcc\x01\n\x06\x12\x04\0\0\x07\x01\
\n\x08\n\x01\x0c\x12\x03\0\0\x12\n\n\n\x02\x04\0\x12\x04\x02\0\x04\x01\n\
\n\n\x03\x04\0\x01\x12\x03\x02\x08\x19\n\x0b\n\x04\x04\0\x02\0\x12\x03\
\x03\x04!\n\x0c\n\x05\x04\0\x02\0\x04\x12\x03\x03\x04\x0c\n\x0c\n\x05\
\x04\0\x02\0\x05\x12\x03\x03\r\x13\n\x0c\n\x05\x04\0\x02\0\x01\x12\x03\
\x03\x14\x1c\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03\x03\x1f\x20\n\n\n\x02\
\x04\x01\x12\x04\x05\0\x07\x01\n\n\n\x03\x04\x01\x01\x12\x03\x05\x08\x18\
\n\x0b\n\x04\x04\x01\x02\0\x12\x03\x06\x04!\n\x0c\n\x05\x04\x01\x02\0\
\x04\x12\x03\x06\x04\x0c\n\x0c\n\x05\x04\x01\x02\0\x05\x12\x03\x06\r\x13\
\n\x0c\n\x05\x04\x01\x02\0\x01\x12\x03\x06\x14\x1c\n\x0c\n\x05\x04\x01\
\x02\0\x03\x12\x03\x06\x1f\x20b\x06proto3\
";
static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT;
fn parse_descriptor_proto() -> ::protobuf::descriptor::FileDescriptorProto {
::protobuf::Message::parse_from_bytes(file_descriptor_proto_data).unwrap()
}
pub fn file_descriptor_proto() -> &'static ::protobuf::descriptor::FileDescriptorProto {
file_descriptor_proto_lazy.get(|| {
parse_descriptor_proto()
})
}

View file

@ -26,7 +26,7 @@
#[derive(PartialEq,Clone,Default)] #[derive(PartialEq,Clone,Default)]
pub struct QueryViewRequest { pub struct QueryViewRequest {
// message fields // message fields
pub view_id: ::std::string::String, pub view_ids: ::protobuf::RepeatedField<::std::string::String>,
// special fields // special fields
pub unknown_fields: ::protobuf::UnknownFields, pub unknown_fields: ::protobuf::UnknownFields,
pub cached_size: ::protobuf::CachedSize, pub cached_size: ::protobuf::CachedSize,
@ -43,30 +43,29 @@ impl QueryViewRequest {
::std::default::Default::default() ::std::default::Default::default()
} }
// string view_id = 1; // repeated string view_ids = 1;
pub fn get_view_id(&self) -> &str { pub fn get_view_ids(&self) -> &[::std::string::String] {
&self.view_id &self.view_ids
} }
pub fn clear_view_id(&mut self) { pub fn clear_view_ids(&mut self) {
self.view_id.clear(); self.view_ids.clear();
} }
// Param is passed by value, moved // Param is passed by value, moved
pub fn set_view_id(&mut self, v: ::std::string::String) { pub fn set_view_ids(&mut self, v: ::protobuf::RepeatedField<::std::string::String>) {
self.view_id = v; self.view_ids = v;
} }
// Mutable pointer to the field. // Mutable pointer to the field.
// If field is not initialized, it is initialized with default value first. pub fn mut_view_ids(&mut self) -> &mut ::protobuf::RepeatedField<::std::string::String> {
pub fn mut_view_id(&mut self) -> &mut ::std::string::String { &mut self.view_ids
&mut self.view_id
} }
// Take field // Take field
pub fn take_view_id(&mut self) -> ::std::string::String { pub fn take_view_ids(&mut self) -> ::protobuf::RepeatedField<::std::string::String> {
::std::mem::replace(&mut self.view_id, ::std::string::String::new()) ::std::mem::replace(&mut self.view_ids, ::protobuf::RepeatedField::new())
} }
} }
@ -80,7 +79,7 @@ impl ::protobuf::Message for QueryViewRequest {
let (field_number, wire_type) = is.read_tag_unpack()?; let (field_number, wire_type) = is.read_tag_unpack()?;
match field_number { match field_number {
1 => { 1 => {
::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.view_id)?; ::protobuf::rt::read_repeated_string_into(wire_type, is, &mut self.view_ids)?;
}, },
_ => { _ => {
::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?;
@ -94,18 +93,18 @@ impl ::protobuf::Message for QueryViewRequest {
#[allow(unused_variables)] #[allow(unused_variables)]
fn compute_size(&self) -> u32 { fn compute_size(&self) -> u32 {
let mut my_size = 0; let mut my_size = 0;
if !self.view_id.is_empty() { for value in &self.view_ids {
my_size += ::protobuf::rt::string_size(1, &self.view_id); my_size += ::protobuf::rt::string_size(1, &value);
} };
my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
self.cached_size.set(my_size); self.cached_size.set(my_size);
my_size my_size
} }
fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> {
if !self.view_id.is_empty() { for v in &self.view_ids {
os.write_string(1, &self.view_id)?; os.write_string(1, &v)?;
} };
os.write_unknown_fields(self.get_unknown_fields())?; os.write_unknown_fields(self.get_unknown_fields())?;
::std::result::Result::Ok(()) ::std::result::Result::Ok(())
} }
@ -144,10 +143,10 @@ impl ::protobuf::Message for QueryViewRequest {
static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT; static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT;
descriptor.get(|| { descriptor.get(|| {
let mut fields = ::std::vec::Vec::new(); let mut fields = ::std::vec::Vec::new();
fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
"view_id", "view_ids",
|m: &QueryViewRequest| { &m.view_id }, |m: &QueryViewRequest| { &m.view_ids },
|m: &mut QueryViewRequest| { &mut m.view_id }, |m: &mut QueryViewRequest| { &mut m.view_ids },
)); ));
::protobuf::reflect::MessageDescriptor::new_pb_name::<QueryViewRequest>( ::protobuf::reflect::MessageDescriptor::new_pb_name::<QueryViewRequest>(
"QueryViewRequest", "QueryViewRequest",
@ -165,7 +164,7 @@ impl ::protobuf::Message for QueryViewRequest {
impl ::protobuf::Clear for QueryViewRequest { impl ::protobuf::Clear for QueryViewRequest {
fn clear(&mut self) { fn clear(&mut self) {
self.view_id.clear(); self.view_ids.clear();
self.unknown_fields.clear(); self.unknown_fields.clear();
} }
} }
@ -342,53 +341,52 @@ impl ::protobuf::reflect::ProtobufValue for ViewIdentifier {
} }
#[derive(PartialEq,Clone,Default)] #[derive(PartialEq,Clone,Default)]
pub struct OpenViewRequest { pub struct ViewIdentifiers {
// message fields // message fields
pub view_id: ::std::string::String, pub view_ids: ::protobuf::RepeatedField<::std::string::String>,
// special fields // special fields
pub unknown_fields: ::protobuf::UnknownFields, pub unknown_fields: ::protobuf::UnknownFields,
pub cached_size: ::protobuf::CachedSize, pub cached_size: ::protobuf::CachedSize,
} }
impl<'a> ::std::default::Default for &'a OpenViewRequest { impl<'a> ::std::default::Default for &'a ViewIdentifiers {
fn default() -> &'a OpenViewRequest { fn default() -> &'a ViewIdentifiers {
<OpenViewRequest as ::protobuf::Message>::default_instance() <ViewIdentifiers as ::protobuf::Message>::default_instance()
} }
} }
impl OpenViewRequest { impl ViewIdentifiers {
pub fn new() -> OpenViewRequest { pub fn new() -> ViewIdentifiers {
::std::default::Default::default() ::std::default::Default::default()
} }
// string view_id = 1; // repeated string view_ids = 1;
pub fn get_view_id(&self) -> &str { pub fn get_view_ids(&self) -> &[::std::string::String] {
&self.view_id &self.view_ids
} }
pub fn clear_view_id(&mut self) { pub fn clear_view_ids(&mut self) {
self.view_id.clear(); self.view_ids.clear();
} }
// Param is passed by value, moved // Param is passed by value, moved
pub fn set_view_id(&mut self, v: ::std::string::String) { pub fn set_view_ids(&mut self, v: ::protobuf::RepeatedField<::std::string::String>) {
self.view_id = v; self.view_ids = v;
} }
// Mutable pointer to the field. // Mutable pointer to the field.
// If field is not initialized, it is initialized with default value first. pub fn mut_view_ids(&mut self) -> &mut ::protobuf::RepeatedField<::std::string::String> {
pub fn mut_view_id(&mut self) -> &mut ::std::string::String { &mut self.view_ids
&mut self.view_id
} }
// Take field // Take field
pub fn take_view_id(&mut self) -> ::std::string::String { pub fn take_view_ids(&mut self) -> ::protobuf::RepeatedField<::std::string::String> {
::std::mem::replace(&mut self.view_id, ::std::string::String::new()) ::std::mem::replace(&mut self.view_ids, ::protobuf::RepeatedField::new())
} }
} }
impl ::protobuf::Message for OpenViewRequest { impl ::protobuf::Message for ViewIdentifiers {
fn is_initialized(&self) -> bool { fn is_initialized(&self) -> bool {
true true
} }
@ -398,7 +396,7 @@ impl ::protobuf::Message for OpenViewRequest {
let (field_number, wire_type) = is.read_tag_unpack()?; let (field_number, wire_type) = is.read_tag_unpack()?;
match field_number { match field_number {
1 => { 1 => {
::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.view_id)?; ::protobuf::rt::read_repeated_string_into(wire_type, is, &mut self.view_ids)?;
}, },
_ => { _ => {
::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?;
@ -412,18 +410,18 @@ impl ::protobuf::Message for OpenViewRequest {
#[allow(unused_variables)] #[allow(unused_variables)]
fn compute_size(&self) -> u32 { fn compute_size(&self) -> u32 {
let mut my_size = 0; let mut my_size = 0;
if !self.view_id.is_empty() { for value in &self.view_ids {
my_size += ::protobuf::rt::string_size(1, &self.view_id); my_size += ::protobuf::rt::string_size(1, &value);
} };
my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
self.cached_size.set(my_size); self.cached_size.set(my_size);
my_size my_size
} }
fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> {
if !self.view_id.is_empty() { for v in &self.view_ids {
os.write_string(1, &self.view_id)?; os.write_string(1, &v)?;
} };
os.write_unknown_fields(self.get_unknown_fields())?; os.write_unknown_fields(self.get_unknown_fields())?;
::std::result::Result::Ok(()) ::std::result::Result::Ok(())
} }
@ -454,69 +452,71 @@ impl ::protobuf::Message for OpenViewRequest {
Self::descriptor_static() Self::descriptor_static()
} }
fn new() -> OpenViewRequest { fn new() -> ViewIdentifiers {
OpenViewRequest::new() ViewIdentifiers::new()
} }
fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT; static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT;
descriptor.get(|| { descriptor.get(|| {
let mut fields = ::std::vec::Vec::new(); let mut fields = ::std::vec::Vec::new();
fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
"view_id", "view_ids",
|m: &OpenViewRequest| { &m.view_id }, |m: &ViewIdentifiers| { &m.view_ids },
|m: &mut OpenViewRequest| { &mut m.view_id }, |m: &mut ViewIdentifiers| { &mut m.view_ids },
)); ));
::protobuf::reflect::MessageDescriptor::new_pb_name::<OpenViewRequest>( ::protobuf::reflect::MessageDescriptor::new_pb_name::<ViewIdentifiers>(
"OpenViewRequest", "ViewIdentifiers",
fields, fields,
file_descriptor_proto() file_descriptor_proto()
) )
}) })
} }
fn default_instance() -> &'static OpenViewRequest { fn default_instance() -> &'static ViewIdentifiers {
static instance: ::protobuf::rt::LazyV2<OpenViewRequest> = ::protobuf::rt::LazyV2::INIT; static instance: ::protobuf::rt::LazyV2<ViewIdentifiers> = ::protobuf::rt::LazyV2::INIT;
instance.get(OpenViewRequest::new) instance.get(ViewIdentifiers::new)
} }
} }
impl ::protobuf::Clear for OpenViewRequest { impl ::protobuf::Clear for ViewIdentifiers {
fn clear(&mut self) { fn clear(&mut self) {
self.view_id.clear(); self.view_ids.clear();
self.unknown_fields.clear(); self.unknown_fields.clear();
} }
} }
impl ::std::fmt::Debug for OpenViewRequest { impl ::std::fmt::Debug for ViewIdentifiers {
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
::protobuf::text_format::fmt(self, f) ::protobuf::text_format::fmt(self, f)
} }
} }
impl ::protobuf::reflect::ProtobufValue for OpenViewRequest { impl ::protobuf::reflect::ProtobufValue for ViewIdentifiers {
fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
::protobuf::reflect::ReflectValueRef::Message(self) ::protobuf::reflect::ReflectValueRef::Message(self)
} }
} }
static file_descriptor_proto_data: &'static [u8] = b"\ static file_descriptor_proto_data: &'static [u8] = b"\
\n\x10view_query.proto\"+\n\x10QueryViewRequest\x12\x17\n\x07view_id\x18\ \n\x10view_query.proto\"-\n\x10QueryViewRequest\x12\x19\n\x08view_ids\
\x01\x20\x01(\tR\x06viewId\")\n\x0eViewIdentifier\x12\x17\n\x07view_id\ \x18\x01\x20\x03(\tR\x07viewIds\")\n\x0eViewIdentifier\x12\x17\n\x07view\
\x18\x01\x20\x01(\tR\x06viewId\"*\n\x0fOpenViewRequest\x12\x17\n\x07view\ _id\x18\x01\x20\x01(\tR\x06viewId\",\n\x0fViewIdentifiers\x12\x19\n\x08v\
_id\x18\x01\x20\x01(\tR\x06viewIdJ\xff\x01\n\x06\x12\x04\0\0\n\x01\n\x08\ iew_ids\x18\x01\x20\x03(\tR\x07viewIdsJ\x9b\x02\n\x06\x12\x04\0\0\n\x01\
\n\x01\x0c\x12\x03\0\0\x12\n\n\n\x02\x04\0\x12\x04\x02\0\x04\x01\n\n\n\ \n\x08\n\x01\x0c\x12\x03\0\0\x12\n\n\n\x02\x04\0\x12\x04\x02\0\x04\x01\n\
\x03\x04\0\x01\x12\x03\x02\x08\x18\n\x0b\n\x04\x04\0\x02\0\x12\x03\x03\ \n\n\x03\x04\0\x01\x12\x03\x02\x08\x18\n\x0b\n\x04\x04\0\x02\0\x12\x03\
\x04\x17\n\x0c\n\x05\x04\0\x02\0\x05\x12\x03\x03\x04\n\n\x0c\n\x05\x04\0\ \x03\x04!\n\x0c\n\x05\x04\0\x02\0\x04\x12\x03\x03\x04\x0c\n\x0c\n\x05\
\x02\0\x01\x12\x03\x03\x0b\x12\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03\x03\ \x04\0\x02\0\x05\x12\x03\x03\r\x13\n\x0c\n\x05\x04\0\x02\0\x01\x12\x03\
\x15\x16\n\n\n\x02\x04\x01\x12\x04\x05\0\x07\x01\n\n\n\x03\x04\x01\x01\ \x03\x14\x1c\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03\x03\x1f\x20\n\n\n\x02\
\x12\x03\x05\x08\x16\n\x0b\n\x04\x04\x01\x02\0\x12\x03\x06\x04\x17\n\x0c\ \x04\x01\x12\x04\x05\0\x07\x01\n\n\n\x03\x04\x01\x01\x12\x03\x05\x08\x16\
\n\x05\x04\x01\x02\0\x05\x12\x03\x06\x04\n\n\x0c\n\x05\x04\x01\x02\0\x01\ \n\x0b\n\x04\x04\x01\x02\0\x12\x03\x06\x04\x17\n\x0c\n\x05\x04\x01\x02\0\
\x12\x03\x06\x0b\x12\n\x0c\n\x05\x04\x01\x02\0\x03\x12\x03\x06\x15\x16\n\ \x05\x12\x03\x06\x04\n\n\x0c\n\x05\x04\x01\x02\0\x01\x12\x03\x06\x0b\x12\
\n\n\x02\x04\x02\x12\x04\x08\0\n\x01\n\n\n\x03\x04\x02\x01\x12\x03\x08\ \n\x0c\n\x05\x04\x01\x02\0\x03\x12\x03\x06\x15\x16\n\n\n\x02\x04\x02\x12\
\x08\x17\n\x0b\n\x04\x04\x02\x02\0\x12\x03\t\x04\x17\n\x0c\n\x05\x04\x02\ \x04\x08\0\n\x01\n\n\n\x03\x04\x02\x01\x12\x03\x08\x08\x17\n\x0b\n\x04\
\x02\0\x05\x12\x03\t\x04\n\n\x0c\n\x05\x04\x02\x02\0\x01\x12\x03\t\x0b\ \x04\x02\x02\0\x12\x03\t\x04!\n\x0c\n\x05\x04\x02\x02\0\x04\x12\x03\t\
\x12\n\x0c\n\x05\x04\x02\x02\0\x03\x12\x03\t\x15\x16b\x06proto3\ \x04\x0c\n\x0c\n\x05\x04\x02\x02\0\x05\x12\x03\t\r\x13\n\x0c\n\x05\x04\
\x02\x02\0\x01\x12\x03\t\x14\x1c\n\x0c\n\x05\x04\x02\x02\0\x03\x12\x03\t\
\x1f\x20b\x06proto3\
"; ";
static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT; static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT;

View file

@ -16,7 +16,8 @@ enum WorkspaceEvent {
UpdateView = 203; UpdateView = 203;
DeleteView = 204; DeleteView = 204;
OpenView = 205; OpenView = 205;
ApplyDocDelta = 206; CloseView = 206;
ApplyDocDelta = 207;
ReadTrash = 300; ReadTrash = 300;
PutbackTrash = 301; PutbackTrash = 301;
DeleteTrash = 302; DeleteTrash = 302;

View file

@ -1,8 +0,0 @@
syntax = "proto3";
message DeleteViewRequest {
repeated string view_ids = 1;
}
message DeleteViewParams {
repeated string view_ids = 1;
}

View file

@ -1,11 +1,11 @@
syntax = "proto3"; syntax = "proto3";
message QueryViewRequest { message QueryViewRequest {
string view_id = 1; repeated string view_ids = 1;
} }
message ViewIdentifier { message ViewIdentifier {
string view_id = 1; string view_id = 1;
} }
message OpenViewRequest { message ViewIdentifiers {
string view_id = 1; repeated string view_ids = 1;
} }

View file

@ -10,7 +10,7 @@ use crate::{
entities::{ entities::{
app::{App, AppIdentifier, CreateAppParams, DeleteAppParams, UpdateAppParams}, app::{App, AppIdentifier, CreateAppParams, DeleteAppParams, UpdateAppParams},
trash::{RepeatedTrash, TrashIdentifiers}, trash::{RepeatedTrash, TrashIdentifiers},
view::{CreateViewParams, DeleteViewParams, UpdateViewParams, View, ViewIdentifier}, view::{CreateViewParams, UpdateViewParams, View, ViewIdentifier, ViewIdentifiers},
workspace::{ workspace::{
CreateWorkspaceParams, CreateWorkspaceParams,
DeleteWorkspaceParams, DeleteWorkspaceParams,
@ -47,7 +47,7 @@ pub trait WorkspaceServerAPI {
fn read_view(&self, token: &str, params: ViewIdentifier) -> ResultFuture<Option<View>, WorkspaceError>; fn read_view(&self, token: &str, params: ViewIdentifier) -> ResultFuture<Option<View>, WorkspaceError>;
fn delete_view(&self, token: &str, params: DeleteViewParams) -> ResultFuture<(), WorkspaceError>; fn delete_view(&self, token: &str, params: ViewIdentifiers) -> ResultFuture<(), WorkspaceError>;
fn update_view(&self, token: &str, params: UpdateViewParams) -> ResultFuture<(), WorkspaceError>; fn update_view(&self, token: &str, params: UpdateViewParams) -> ResultFuture<(), WorkspaceError>;

View file

@ -2,7 +2,7 @@ use crate::{
entities::{ entities::{
app::{App, AppIdentifier, CreateAppParams, DeleteAppParams, UpdateAppParams}, app::{App, AppIdentifier, CreateAppParams, DeleteAppParams, UpdateAppParams},
trash::{RepeatedTrash, TrashIdentifiers}, trash::{RepeatedTrash, TrashIdentifiers},
view::{CreateViewParams, DeleteViewParams, UpdateViewParams, View, ViewIdentifier}, view::{CreateViewParams, UpdateViewParams, View, ViewIdentifier, ViewIdentifiers},
workspace::{ workspace::{
CreateWorkspaceParams, CreateWorkspaceParams,
DeleteWorkspaceParams, DeleteWorkspaceParams,
@ -67,7 +67,7 @@ impl WorkspaceServerAPI for WorkspaceServer {
ResultFuture::new(async move { read_view_request(&token, params, &url).await }) ResultFuture::new(async move { read_view_request(&token, params, &url).await })
} }
fn delete_view(&self, token: &str, params: DeleteViewParams) -> ResultFuture<(), WorkspaceError> { fn delete_view(&self, token: &str, params: ViewIdentifiers) -> ResultFuture<(), WorkspaceError> {
let token = token.to_owned(); let token = token.to_owned();
let url = self.config.view_url(); let url = self.config.view_url();
ResultFuture::new(async move { delete_view_request(&token, params, &url).await }) ResultFuture::new(async move { delete_view_request(&token, params, &url).await })
@ -256,7 +256,7 @@ pub async fn update_view_request(token: &str, params: UpdateViewParams, url: &st
Ok(()) Ok(())
} }
pub async fn delete_view_request(token: &str, params: DeleteViewParams, url: &str) -> Result<(), WorkspaceError> { pub async fn delete_view_request(token: &str, params: ViewIdentifiers, url: &str) -> Result<(), WorkspaceError> {
let _ = request_builder() let _ = request_builder()
.delete(&url.to_owned()) .delete(&url.to_owned())
.header(HEADER_TOKEN, token) .header(HEADER_TOKEN, token)

View file

@ -2,7 +2,7 @@ use crate::{
entities::{ entities::{
app::{App, AppIdentifier, CreateAppParams, DeleteAppParams, RepeatedApp, UpdateAppParams}, app::{App, AppIdentifier, CreateAppParams, DeleteAppParams, RepeatedApp, UpdateAppParams},
trash::{RepeatedTrash, TrashIdentifiers}, trash::{RepeatedTrash, TrashIdentifiers},
view::{CreateViewParams, DeleteViewParams, RepeatedView, UpdateViewParams, View, ViewIdentifier}, view::{CreateViewParams, RepeatedView, UpdateViewParams, View, ViewIdentifier, ViewIdentifiers},
workspace::{ workspace::{
CreateWorkspaceParams, CreateWorkspaceParams,
DeleteWorkspaceParams, DeleteWorkspaceParams,
@ -73,7 +73,7 @@ impl WorkspaceServerAPI for WorkspaceServerMock {
ResultFuture::new(async { Ok(None) }) ResultFuture::new(async { Ok(None) })
} }
fn delete_view(&self, _token: &str, _params: DeleteViewParams) -> ResultFuture<(), WorkspaceError> { fn delete_view(&self, _token: &str, _params: ViewIdentifiers) -> ResultFuture<(), WorkspaceError> {
ResultFuture::new(async { Ok(()) }) ResultFuture::new(async { Ok(()) })
} }

View file

@ -33,22 +33,6 @@ impl TrashCan {
pub(crate) fn init(&self) -> Result<(), WorkspaceError> { Ok(()) } pub(crate) fn init(&self) -> Result<(), WorkspaceError> { Ok(()) }
pub fn read_trash(&self, conn: &SqliteConnection) -> Result<RepeatedTrash, WorkspaceError> {
let repeated_trash = TrashTableSql::read_all(&*conn)?;
let _ = self.read_trash_on_server()?;
Ok(repeated_trash)
}
pub fn trash_ids(&self, conn: &SqliteConnection) -> Result<Vec<String>, WorkspaceError> {
let ids = TrashTableSql::read_all(&*conn)?
.into_inner()
.into_iter()
.map(|item| item.id)
.collect::<Vec<String>>();
Ok(ids)
}
#[tracing::instrument(level = "debug", skip(self), fields(putback) err)] #[tracing::instrument(level = "debug", skip(self), fields(putback) err)]
pub async fn putback(&self, trash_id: &str) -> WorkspaceResult<()> { pub async fn putback(&self, trash_id: &str) -> WorkspaceResult<()> {
let (tx, mut rx) = mpsc::channel::<WorkspaceResult<()>>(1); let (tx, mut rx) = mpsc::channel::<WorkspaceResult<()>>(1);
@ -98,6 +82,7 @@ impl TrashCan {
pub async fn delete_all(&self) -> WorkspaceResult<()> { pub async fn delete_all(&self) -> WorkspaceResult<()> {
let repeated_trash = self.delete_all_trash_on_local()?; let repeated_trash = self.delete_all_trash_on_local()?;
let identifiers: TrashIdentifiers = repeated_trash.items.clone().into(); let identifiers: TrashIdentifiers = repeated_trash.items.clone().into();
let (tx, mut rx) = mpsc::channel::<WorkspaceResult<()>>(1); let (tx, mut rx) = mpsc::channel::<WorkspaceResult<()>>(1);
let _ = self.notify.send(TrashEvent::Delete(identifiers, tx)); let _ = self.notify.send(TrashEvent::Delete(identifiers, tx));
let _ = rx.recv().await; let _ = rx.recv().await;
@ -170,6 +155,22 @@ impl TrashCan {
} }
pub fn subscribe(&self) -> broadcast::Receiver<TrashEvent> { self.notify.subscribe() } pub fn subscribe(&self) -> broadcast::Receiver<TrashEvent> { self.notify.subscribe() }
pub fn read_trash(&self, conn: &SqliteConnection) -> Result<RepeatedTrash, WorkspaceError> {
let repeated_trash = TrashTableSql::read_all(&*conn)?;
let _ = self.read_trash_on_server()?;
Ok(repeated_trash)
}
pub fn trash_ids(&self, conn: &SqliteConnection) -> Result<Vec<String>, WorkspaceError> {
let ids = TrashTableSql::read_all(&*conn)?
.into_inner()
.into_iter()
.map(|item| item.id)
.collect::<Vec<String>>();
Ok(ids)
}
} }
impl TrashCan { impl TrashCan {

View file

@ -16,7 +16,7 @@ use crate::{
}; };
use flowy_database::SqliteConnection; use flowy_database::SqliteConnection;
use flowy_document::{ use flowy_document::{
entities::doc::{CreateDocParams, DocDelta, DocIdentifier}, entities::doc::{DocDelta, DocIdentifier},
module::FlowyDocument, module::FlowyDocument,
}; };
@ -113,6 +113,12 @@ impl ViewController {
Ok(edit_context.delta().await.map_err(internal_error)?) Ok(edit_context.delta().await.map_err(internal_error)?)
} }
#[tracing::instrument(level = "debug", skip(self), err)]
pub(crate) async fn close_view(&self, params: DocIdentifier) -> Result<(), WorkspaceError> {
let _ = self.document.close(params).await?;
Ok(())
}
// belong_to_id will be the app_id or view_id. // belong_to_id will be the app_id or view_id.
#[tracing::instrument(level = "debug", skip(self), err)] #[tracing::instrument(level = "debug", skip(self), err)]
pub(crate) async fn read_views_belong_to(&self, belong_to_id: &str) -> Result<RepeatedView, WorkspaceError> { pub(crate) async fn read_views_belong_to(&self, belong_to_id: &str) -> Result<RepeatedView, WorkspaceError> {
@ -211,11 +217,10 @@ impl ViewController {
let mut stream = Box::pin(rx.recv().into_stream().filter_map(|result| async move { let mut stream = Box::pin(rx.recv().into_stream().filter_map(|result| async move {
match result { match result {
Ok(event) => event.select(TrashType::View), Ok(event) => event.select(TrashType::View),
Err(_) => None, Err(_e) => None,
} }
})); }));
let event: Option<TrashEvent> = stream.next().await; match stream.next().await {
match event {
Some(event) => { Some(event) => {
handle_trash_event(database.clone(), document.clone(), trash_can.clone(), event).await handle_trash_event(database.clone(), document.clone(), trash_can.clone(), event).await
}, },

View file

@ -4,7 +4,6 @@ use flowy_workspace::entities::{
trash::{TrashIdentifier, TrashType}, trash::{TrashIdentifier, TrashType},
view::*, view::*,
}; };
use tokio::time::{sleep, Duration};
#[tokio::test] #[tokio::test]
#[should_panic] #[should_panic]
@ -13,8 +12,10 @@ async fn view_delete() {
let _ = test.init_user(); let _ = test.init_user();
let test = ViewTest::new(&test).await; let test = ViewTest::new(&test).await;
test.delete_view(vec![test.view.id.clone()]).await; test.delete_views(vec![test.view.id.clone()]).await;
let query = QueryViewRequest::new(&test.view.id); let query = QueryViewRequest {
view_ids: vec![test.view.id.clone()],
};
let _ = read_view(&test.sdk, query).await; let _ = read_view(&test.sdk, query).await;
} }
@ -24,7 +25,7 @@ async fn view_delete_then_putback() {
let _ = test.init_user(); let _ = test.init_user();
let test = ViewTest::new(&test).await; let test = ViewTest::new(&test).await;
test.delete_view(vec![test.view.id.clone()]).await; test.delete_views(vec![test.view.id.clone()]).await;
putback_trash( putback_trash(
&test.sdk, &test.sdk,
TrashIdentifier { TrashIdentifier {
@ -34,7 +35,9 @@ async fn view_delete_then_putback() {
) )
.await; .await;
let query = QueryViewRequest::new(&test.view.id); let query = QueryViewRequest {
view_ids: vec![test.view.id.clone()],
};
let view = read_view(&test.sdk, query).await; let view = read_view(&test.sdk, query).await;
assert_eq!(&view, &test.view); assert_eq!(&view, &test.view);
} }
@ -45,15 +48,35 @@ async fn view_delete_all() {
let _ = test.init_user(); let _ = test.init_user();
let test = ViewTest::new(&test).await; let test = ViewTest::new(&test).await;
let _ = create_view(&test.sdk, &test.app.id).await; let view1 = test.view.clone();
let _ = create_view(&test.sdk, &test.app.id).await; let view2 = create_view(&test.sdk, &test.app.id).await;
let view3 = create_view(&test.sdk, &test.app.id).await;
let view_ids = vec![view1.id.clone(), view2.id.clone(), view3.id.clone()];
let query = QueryAppRequest::new(&test.app.id); let query = QueryAppRequest::new(&test.app.id);
let app = read_app(&test.sdk, query.clone()).await; let app = read_app(&test.sdk, query.clone()).await;
assert_eq!(app.belongings.len(), 3); assert_eq!(app.belongings.len(), view_ids.len());
test.delete_all_view().await; test.delete_views(view_ids.clone()).await;
sleep(Duration::from_secs(1)).await;
assert_eq!(read_app(&test.sdk, query).await.belongings.len(), 0); assert_eq!(read_app(&test.sdk, query).await.belongings.len(), 0);
assert_eq!(read_trash(&test.sdk).await.len(), view_ids.len());
}
#[tokio::test]
async fn view_delete_all_permanent() {
let test = FlowyTest::setup();
let _ = test.init_user();
let test = ViewTest::new(&test).await;
let view1 = test.view.clone();
let view2 = create_view(&test.sdk, &test.app.id).await;
let view_ids = vec![view1.id.clone(), view2.id.clone()];
test.delete_views_permanent(view_ids).await;
let query = QueryAppRequest::new(&test.app.id);
assert_eq!(read_app(&test.sdk, query).await.belongings.len(), 0);
assert_eq!(read_trash(&test.sdk).await.len(), 0);
} }
#[tokio::test] #[tokio::test]
@ -62,48 +85,8 @@ async fn view_open_doc() {
let _ = test.init_user().await; let _ = test.init_user().await;
let test = ViewTest::new(&test).await; let test = ViewTest::new(&test).await;
let request = OpenViewRequest { let request = QueryViewRequest {
view_id: test.view.id.clone(), view_ids: vec![test.view.id.clone()],
}; };
let _ = open_view(&test.sdk, request).await; let _ = open_view(&test.sdk, request).await;
} }
#[test]
fn view_update_doc() {
// let test = ViewTest::new();
// let new_data = DeltaBuilder::new().insert("flutter ❤️
// rust").build().into_bytes(); let request = SaveViewDataRequest {
// view_id: test.view.id.clone(),
// data: new_data.clone(),
// };
//
// update_view_data(&test.sdk, request);
//
// let request = OpenViewRequest {
// view_id: test.view.id.clone(),
// };
// let doc = open_view(&test.sdk, request);
// assert_eq!(doc.data, new_data);
}
#[test]
fn view_update_big_doc() {
// let test = ViewTest::new();
// let new_data = DeltaBuilder::new().insert(&"flutter ❤️
// rust".repeat(1000000)).build().into_bytes();
//
// let request = SaveViewDataRequest {
// view_id: test.view.id.clone(),
// data: new_data.clone(),
// };
//
// update_view_data(&test.sdk, request);
//
// let doc = open_view(
// &test.sdk,
// OpenViewRequest {
// view_id: test.view.id.clone(),
// },
// );
// assert_eq!(doc.data, new_data);
}