diff --git a/api/files/files.pb.go b/api/files/files.pb.go new file mode 100644 index 0000000..44a00cf --- /dev/null +++ b/api/files/files.pb.go @@ -0,0 +1,2377 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.29.1 +// protoc v3.20.3 +// source: files.proto + +package files + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type FileListReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` // 目标文件夹路径 + UserSpacePath string `protobuf:"bytes,2,opt,name=userSpacePath,proto3" json:"userSpacePath,omitempty"` // 用户空间的路径 + Sorting *Sorting `protobuf:"bytes,3,opt,name=sorting,proto3" json:"sorting,omitempty"` +} + +func (x *FileListReq) Reset() { + *x = FileListReq{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FileListReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FileListReq) ProtoMessage() {} + +func (x *FileListReq) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FileListReq.ProtoReflect.Descriptor instead. +func (*FileListReq) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{0} +} + +func (x *FileListReq) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *FileListReq) GetUserSpacePath() string { + if x != nil { + return x.UserSpacePath + } + return "" +} + +func (x *FileListReq) GetSorting() *Sorting { + if x != nil { + return x.Sorting + } + return nil +} + +type Items struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Size int64 `protobuf:"varint,3,opt,name=size,proto3" json:"size,omitempty"` + Extension string `protobuf:"bytes,4,opt,name=extension,proto3" json:"extension,omitempty"` + Modified string `protobuf:"bytes,5,opt,name=modified,proto3" json:"modified,omitempty"` + Mode string `protobuf:"bytes,6,opt,name=mode,proto3" json:"mode,omitempty"` + IsDir bool `protobuf:"varint,7,opt,name=isDir,proto3" json:"isDir,omitempty"` + IsSymlink bool `protobuf:"varint,8,opt,name=isSymlink,proto3" json:"isSymlink,omitempty"` + Type string `protobuf:"bytes,9,opt,name=type,proto3" json:"type,omitempty"` +} + +func (x *Items) Reset() { + *x = Items{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Items) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Items) ProtoMessage() {} + +func (x *Items) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Items.ProtoReflect.Descriptor instead. +func (*Items) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{1} +} + +func (x *Items) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *Items) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Items) GetSize() int64 { + if x != nil { + return x.Size + } + return 0 +} + +func (x *Items) GetExtension() string { + if x != nil { + return x.Extension + } + return "" +} + +func (x *Items) GetModified() string { + if x != nil { + return x.Modified + } + return "" +} + +func (x *Items) GetMode() string { + if x != nil { + return x.Mode + } + return "" +} + +func (x *Items) GetIsDir() bool { + if x != nil { + return x.IsDir + } + return false +} + +func (x *Items) GetIsSymlink() bool { + if x != nil { + return x.IsSymlink + } + return false +} + +func (x *Items) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +type Sorting struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + By string `protobuf:"bytes,1,opt,name=by,proto3" json:"by,omitempty"` + Asc bool `protobuf:"varint,2,opt,name=asc,proto3" json:"asc,omitempty"` +} + +func (x *Sorting) Reset() { + *x = Sorting{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Sorting) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Sorting) ProtoMessage() {} + +func (x *Sorting) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Sorting.ProtoReflect.Descriptor instead. +func (*Sorting) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{2} +} + +func (x *Sorting) GetBy() string { + if x != nil { + return x.By + } + return "" +} + +func (x *Sorting) GetAsc() bool { + if x != nil { + return x.Asc + } + return false +} + +type FileListResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*Items `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + NumDirs int32 `protobuf:"varint,2,opt,name=numDirs,proto3" json:"numDirs,omitempty"` + NumFiles int32 `protobuf:"varint,3,opt,name=numFiles,proto3" json:"numFiles,omitempty"` + Sorting *Sorting `protobuf:"bytes,4,opt,name=sorting,proto3" json:"sorting,omitempty"` + Path string `protobuf:"bytes,5,opt,name=path,proto3" json:"path,omitempty"` + Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` + Size int64 `protobuf:"varint,7,opt,name=size,proto3" json:"size,omitempty"` + Extension string `protobuf:"bytes,8,opt,name=extension,proto3" json:"extension,omitempty"` + Modified string `protobuf:"bytes,9,opt,name=modified,proto3" json:"modified,omitempty"` + Mode string `protobuf:"bytes,10,opt,name=mode,proto3" json:"mode,omitempty"` + IsDir bool `protobuf:"varint,11,opt,name=isDir,proto3" json:"isDir,omitempty"` + IsSymlink bool `protobuf:"varint,12,opt,name=isSymlink,proto3" json:"isSymlink,omitempty"` + Type string `protobuf:"bytes,13,opt,name=type,proto3" json:"type,omitempty"` +} + +func (x *FileListResp) Reset() { + *x = FileListResp{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FileListResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FileListResp) ProtoMessage() {} + +func (x *FileListResp) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FileListResp.ProtoReflect.Descriptor instead. +func (*FileListResp) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{3} +} + +func (x *FileListResp) GetItems() []*Items { + if x != nil { + return x.Items + } + return nil +} + +func (x *FileListResp) GetNumDirs() int32 { + if x != nil { + return x.NumDirs + } + return 0 +} + +func (x *FileListResp) GetNumFiles() int32 { + if x != nil { + return x.NumFiles + } + return 0 +} + +func (x *FileListResp) GetSorting() *Sorting { + if x != nil { + return x.Sorting + } + return nil +} + +func (x *FileListResp) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *FileListResp) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *FileListResp) GetSize() int64 { + if x != nil { + return x.Size + } + return 0 +} + +func (x *FileListResp) GetExtension() string { + if x != nil { + return x.Extension + } + return "" +} + +func (x *FileListResp) GetModified() string { + if x != nil { + return x.Modified + } + return "" +} + +func (x *FileListResp) GetMode() string { + if x != nil { + return x.Mode + } + return "" +} + +func (x *FileListResp) GetIsDir() bool { + if x != nil { + return x.IsDir + } + return false +} + +func (x *FileListResp) GetIsSymlink() bool { + if x != nil { + return x.IsSymlink + } + return false +} + +func (x *FileListResp) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +type CreateReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + UserSpacePath string `protobuf:"bytes,2,opt,name=userSpacePath,proto3" json:"userSpacePath,omitempty"` +} + +func (x *CreateReq) Reset() { + *x = CreateReq{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateReq) ProtoMessage() {} + +func (x *CreateReq) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateReq.ProtoReflect.Descriptor instead. +func (*CreateReq) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{4} +} + +func (x *CreateReq) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *CreateReq) GetUserSpacePath() string { + if x != nil { + return x.UserSpacePath + } + return "" +} + +type CreateResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *CreateResp) Reset() { + *x = CreateResp{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateResp) ProtoMessage() {} + +func (x *CreateResp) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateResp.ProtoReflect.Descriptor instead. +func (*CreateResp) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{5} +} + +type DeleteReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + UserSpacePath string `protobuf:"bytes,2,opt,name=userSpacePath,proto3" json:"userSpacePath,omitempty"` +} + +func (x *DeleteReq) Reset() { + *x = DeleteReq{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteReq) ProtoMessage() {} + +func (x *DeleteReq) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteReq.ProtoReflect.Descriptor instead. +func (*DeleteReq) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{6} +} + +func (x *DeleteReq) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *DeleteReq) GetUserSpacePath() string { + if x != nil { + return x.UserSpacePath + } + return "" +} + +type DeleteResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *DeleteResp) Reset() { + *x = DeleteResp{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteResp) ProtoMessage() {} + +func (x *DeleteResp) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteResp.ProtoReflect.Descriptor instead. +func (*DeleteResp) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{7} +} + +type UploadReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + UserSpacePath string `protobuf:"bytes,2,opt,name=userSpacePath,proto3" json:"userSpacePath,omitempty"` + Content []byte `protobuf:"bytes,3,opt,name=content,proto3" json:"content,omitempty"` +} + +func (x *UploadReq) Reset() { + *x = UploadReq{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UploadReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UploadReq) ProtoMessage() {} + +func (x *UploadReq) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UploadReq.ProtoReflect.Descriptor instead. +func (*UploadReq) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{8} +} + +func (x *UploadReq) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *UploadReq) GetUserSpacePath() string { + if x != nil { + return x.UserSpacePath + } + return "" +} + +func (x *UploadReq) GetContent() []byte { + if x != nil { + return x.Content + } + return nil +} + +type UploadResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *UploadResp) Reset() { + *x = UploadResp{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UploadResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UploadResp) ProtoMessage() {} + +func (x *UploadResp) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UploadResp.ProtoReflect.Descriptor instead. +func (*UploadResp) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{9} +} + +type SearchReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + UserSpacePath string `protobuf:"bytes,2,opt,name=userSpacePath,proto3" json:"userSpacePath,omitempty"` + Query string `protobuf:"bytes,3,opt,name=query,proto3" json:"query,omitempty"` +} + +func (x *SearchReq) Reset() { + *x = SearchReq{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SearchReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SearchReq) ProtoMessage() {} + +func (x *SearchReq) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SearchReq.ProtoReflect.Descriptor instead. +func (*SearchReq) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{10} +} + +func (x *SearchReq) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *SearchReq) GetUserSpacePath() string { + if x != nil { + return x.UserSpacePath + } + return "" +} + +func (x *SearchReq) GetQuery() string { + if x != nil { + return x.Query + } + return "" +} + +type SearchResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*SearchResp_Nested `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *SearchResp) Reset() { + *x = SearchResp{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SearchResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SearchResp) ProtoMessage() {} + +func (x *SearchResp) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SearchResp.ProtoReflect.Descriptor instead. +func (*SearchResp) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{11} +} + +func (x *SearchResp) GetItems() []*SearchResp_Nested { + if x != nil { + return x.Items + } + return nil +} + +type TusCreateReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + UserSpacePath string `protobuf:"bytes,2,opt,name=userSpacePath,proto3" json:"userSpacePath,omitempty"` + Override bool `protobuf:"varint,3,opt,name=override,proto3" json:"override,omitempty"` +} + +func (x *TusCreateReq) Reset() { + *x = TusCreateReq{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TusCreateReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TusCreateReq) ProtoMessage() {} + +func (x *TusCreateReq) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TusCreateReq.ProtoReflect.Descriptor instead. +func (*TusCreateReq) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{12} +} + +func (x *TusCreateReq) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *TusCreateReq) GetUserSpacePath() string { + if x != nil { + return x.UserSpacePath + } + return "" +} + +func (x *TusCreateReq) GetOverride() bool { + if x != nil { + return x.Override + } + return false +} + +type TusCreateResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UploadLength int64 `protobuf:"varint,1,opt,name=uploadLength,proto3" json:"uploadLength,omitempty"` + UploadOffset int64 `protobuf:"varint,2,opt,name=uploadOffset,proto3" json:"uploadOffset,omitempty"` +} + +func (x *TusCreateResp) Reset() { + *x = TusCreateResp{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TusCreateResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TusCreateResp) ProtoMessage() {} + +func (x *TusCreateResp) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TusCreateResp.ProtoReflect.Descriptor instead. +func (*TusCreateResp) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{13} +} + +func (x *TusCreateResp) GetUploadLength() int64 { + if x != nil { + return x.UploadLength + } + return 0 +} + +func (x *TusCreateResp) GetUploadOffset() int64 { + if x != nil { + return x.UploadOffset + } + return 0 +} + +type TusUploadReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + UserSpacePath string `protobuf:"bytes,2,opt,name=userSpacePath,proto3" json:"userSpacePath,omitempty"` + UploadOffset int64 `protobuf:"varint,3,opt,name=uploadOffset,proto3" json:"uploadOffset,omitempty"` + Content []byte `protobuf:"bytes,4,opt,name=content,proto3" json:"content,omitempty"` +} + +func (x *TusUploadReq) Reset() { + *x = TusUploadReq{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TusUploadReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TusUploadReq) ProtoMessage() {} + +func (x *TusUploadReq) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TusUploadReq.ProtoReflect.Descriptor instead. +func (*TusUploadReq) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{14} +} + +func (x *TusUploadReq) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *TusUploadReq) GetUserSpacePath() string { + if x != nil { + return x.UserSpacePath + } + return "" +} + +func (x *TusUploadReq) GetUploadOffset() int64 { + if x != nil { + return x.UploadOffset + } + return 0 +} + +func (x *TusUploadReq) GetContent() []byte { + if x != nil { + return x.Content + } + return nil +} + +type TusUploadResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UploadOffset int64 `protobuf:"varint,1,opt,name=uploadOffset,proto3" json:"uploadOffset,omitempty"` +} + +func (x *TusUploadResp) Reset() { + *x = TusUploadResp{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TusUploadResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TusUploadResp) ProtoMessage() {} + +func (x *TusUploadResp) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TusUploadResp.ProtoReflect.Descriptor instead. +func (*TusUploadResp) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{15} +} + +func (x *TusUploadResp) GetUploadOffset() int64 { + if x != nil { + return x.UploadOffset + } + return 0 +} + +type ResumableTransferReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + UserSpacePath string `protobuf:"bytes,2,opt,name=userSpacePath,proto3" json:"userSpacePath,omitempty"` + Offset int64 `protobuf:"varint,3,opt,name=offset,proto3" json:"offset,omitempty"` + Length int64 `protobuf:"varint,4,opt,name=length,proto3" json:"length,omitempty"` +} + +func (x *ResumableTransferReq) Reset() { + *x = ResumableTransferReq{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResumableTransferReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResumableTransferReq) ProtoMessage() {} + +func (x *ResumableTransferReq) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResumableTransferReq.ProtoReflect.Descriptor instead. +func (*ResumableTransferReq) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{16} +} + +func (x *ResumableTransferReq) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *ResumableTransferReq) GetUserSpacePath() string { + if x != nil { + return x.UserSpacePath + } + return "" +} + +func (x *ResumableTransferReq) GetOffset() int64 { + if x != nil { + return x.Offset + } + return 0 +} + +func (x *ResumableTransferReq) GetLength() int64 { + if x != nil { + return x.Length + } + return 0 +} + +type ResumableTransferResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Content []byte `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"` +} + +func (x *ResumableTransferResp) Reset() { + *x = ResumableTransferResp{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResumableTransferResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResumableTransferResp) ProtoMessage() {} + +func (x *ResumableTransferResp) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResumableTransferResp.ProtoReflect.Descriptor instead. +func (*ResumableTransferResp) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{17} +} + +func (x *ResumableTransferResp) GetContent() []byte { + if x != nil { + return x.Content + } + return nil +} + +type FileInfoReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + UserSpacePath string `protobuf:"bytes,2,opt,name=userSpacePath,proto3" json:"userSpacePath,omitempty"` +} + +func (x *FileInfoReq) Reset() { + *x = FileInfoReq{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FileInfoReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FileInfoReq) ProtoMessage() {} + +func (x *FileInfoReq) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FileInfoReq.ProtoReflect.Descriptor instead. +func (*FileInfoReq) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{18} +} + +func (x *FileInfoReq) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *FileInfoReq) GetUserSpacePath() string { + if x != nil { + return x.UserSpacePath + } + return "" +} + +type FileInfoResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Size int64 `protobuf:"varint,3,opt,name=size,proto3" json:"size,omitempty"` + Extension string `protobuf:"bytes,4,opt,name=extension,proto3" json:"extension,omitempty"` + Modified string `protobuf:"bytes,5,opt,name=modified,proto3" json:"modified,omitempty"` + Mode string `protobuf:"bytes,6,opt,name=mode,proto3" json:"mode,omitempty"` + IsDir bool `protobuf:"varint,7,opt,name=isDir,proto3" json:"isDir,omitempty"` + IsSymlink bool `protobuf:"varint,8,opt,name=isSymlink,proto3" json:"isSymlink,omitempty"` + Type string `protobuf:"bytes,9,opt,name=type,proto3" json:"type,omitempty"` +} + +func (x *FileInfoResp) Reset() { + *x = FileInfoResp{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FileInfoResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FileInfoResp) ProtoMessage() {} + +func (x *FileInfoResp) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FileInfoResp.ProtoReflect.Descriptor instead. +func (*FileInfoResp) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{19} +} + +func (x *FileInfoResp) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *FileInfoResp) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *FileInfoResp) GetSize() int64 { + if x != nil { + return x.Size + } + return 0 +} + +func (x *FileInfoResp) GetExtension() string { + if x != nil { + return x.Extension + } + return "" +} + +func (x *FileInfoResp) GetModified() string { + if x != nil { + return x.Modified + } + return "" +} + +func (x *FileInfoResp) GetMode() string { + if x != nil { + return x.Mode + } + return "" +} + +func (x *FileInfoResp) GetIsDir() bool { + if x != nil { + return x.IsDir + } + return false +} + +func (x *FileInfoResp) GetIsSymlink() bool { + if x != nil { + return x.IsSymlink + } + return false +} + +func (x *FileInfoResp) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +type PreviewReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + UserSpacePath string `protobuf:"bytes,2,opt,name=userSpacePath,proto3" json:"userSpacePath,omitempty"` + Size uint32 `protobuf:"varint,3,opt,name=size,proto3" json:"size,omitempty"` // 预览大小 0:256x256, 1:1080x1080 +} + +func (x *PreviewReq) Reset() { + *x = PreviewReq{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PreviewReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PreviewReq) ProtoMessage() {} + +func (x *PreviewReq) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PreviewReq.ProtoReflect.Descriptor instead. +func (*PreviewReq) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{20} +} + +func (x *PreviewReq) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *PreviewReq) GetUserSpacePath() string { + if x != nil { + return x.UserSpacePath + } + return "" +} + +func (x *PreviewReq) GetSize() uint32 { + if x != nil { + return x.Size + } + return 0 +} + +type PreviewResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Content []byte `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"` + FileName string `protobuf:"bytes,2,opt,name=fileName,proto3" json:"fileName,omitempty"` + ModTime int64 `protobuf:"varint,3,opt,name=modTime,proto3" json:"modTime,omitempty"` +} + +func (x *PreviewResp) Reset() { + *x = PreviewResp{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PreviewResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PreviewResp) ProtoMessage() {} + +func (x *PreviewResp) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PreviewResp.ProtoReflect.Descriptor instead. +func (*PreviewResp) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{21} +} + +func (x *PreviewResp) GetContent() []byte { + if x != nil { + return x.Content + } + return nil +} + +func (x *PreviewResp) GetFileName() string { + if x != nil { + return x.FileName + } + return "" +} + +func (x *PreviewResp) GetModTime() int64 { + if x != nil { + return x.ModTime + } + return 0 +} + +type ActionReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + UserSpacePath string `protobuf:"bytes,2,opt,name=userSpacePath,proto3" json:"userSpacePath,omitempty"` + Action string `protobuf:"bytes,3,opt,name=action,proto3" json:"action,omitempty"` + Destination string `protobuf:"bytes,4,opt,name=destination,proto3" json:"destination,omitempty"` + Override bool `protobuf:"varint,5,opt,name=override,proto3" json:"override,omitempty"` + Rename bool `protobuf:"varint,6,opt,name=rename,proto3" json:"rename,omitempty"` +} + +func (x *ActionReq) Reset() { + *x = ActionReq{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ActionReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActionReq) ProtoMessage() {} + +func (x *ActionReq) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActionReq.ProtoReflect.Descriptor instead. +func (*ActionReq) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{22} +} + +func (x *ActionReq) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *ActionReq) GetUserSpacePath() string { + if x != nil { + return x.UserSpacePath + } + return "" +} + +func (x *ActionReq) GetAction() string { + if x != nil { + return x.Action + } + return "" +} + +func (x *ActionReq) GetDestination() string { + if x != nil { + return x.Destination + } + return "" +} + +func (x *ActionReq) GetOverride() bool { + if x != nil { + return x.Override + } + return false +} + +func (x *ActionReq) GetRename() bool { + if x != nil { + return x.Rename + } + return false +} + +type ActionResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ActionResp) Reset() { + *x = ActionResp{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ActionResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActionResp) ProtoMessage() {} + +func (x *ActionResp) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActionResp.ProtoReflect.Descriptor instead. +func (*ActionResp) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{23} +} + +type DirDownloadReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + UserSpacePath string `protobuf:"bytes,2,opt,name=userSpacePath,proto3" json:"userSpacePath,omitempty"` + Files []string `protobuf:"bytes,3,rep,name=files,proto3" json:"files,omitempty"` + Algo string `protobuf:"bytes,4,opt,name=algo,proto3" json:"algo,omitempty"` +} + +func (x *DirDownloadReq) Reset() { + *x = DirDownloadReq{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DirDownloadReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DirDownloadReq) ProtoMessage() {} + +func (x *DirDownloadReq) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DirDownloadReq.ProtoReflect.Descriptor instead. +func (*DirDownloadReq) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{24} +} + +func (x *DirDownloadReq) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *DirDownloadReq) GetUserSpacePath() string { + if x != nil { + return x.UserSpacePath + } + return "" +} + +func (x *DirDownloadReq) GetFiles() []string { + if x != nil { + return x.Files + } + return nil +} + +func (x *DirDownloadReq) GetAlgo() string { + if x != nil { + return x.Algo + } + return "" +} + +type DirDownloadResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Content []byte `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"` +} + +func (x *DirDownloadResp) Reset() { + *x = DirDownloadResp{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DirDownloadResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DirDownloadResp) ProtoMessage() {} + +func (x *DirDownloadResp) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DirDownloadResp.ProtoReflect.Descriptor instead. +func (*DirDownloadResp) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{25} +} + +func (x *DirDownloadResp) GetContent() []byte { + if x != nil { + return x.Content + } + return nil +} + +type SearchResp_Nested struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Dir bool `protobuf:"varint,1,opt,name=dir,proto3" json:"dir,omitempty"` + Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` +} + +func (x *SearchResp_Nested) Reset() { + *x = SearchResp_Nested{} + if protoimpl.UnsafeEnabled { + mi := &file_files_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SearchResp_Nested) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SearchResp_Nested) ProtoMessage() {} + +func (x *SearchResp_Nested) ProtoReflect() protoreflect.Message { + mi := &file_files_proto_msgTypes[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SearchResp_Nested.ProtoReflect.Descriptor instead. +func (*SearchResp_Nested) Descriptor() ([]byte, []int) { + return file_files_proto_rawDescGZIP(), []int{11, 0} +} + +func (x *SearchResp_Nested) GetDir() bool { + if x != nil { + return x.Dir + } + return false +} + +func (x *SearchResp_Nested) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +var File_files_proto protoreflect.FileDescriptor + +var file_files_proto_rawDesc = []byte{ + 0x0a, 0x0b, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x22, 0x71, 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x53, + 0x70, 0x61, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x75, 0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x28, 0x0a, + 0x07, 0x73, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, + 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x07, + 0x73, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x22, 0xd9, 0x01, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, + 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6d, + 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, + 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, + 0x73, 0x44, 0x69, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x44, 0x69, + 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x73, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x12, + 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x22, 0x2b, 0x0a, 0x07, 0x53, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x0e, + 0x0a, 0x02, 0x62, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x62, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x61, 0x73, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x73, 0x63, + 0x22, 0xe4, 0x02, 0x0a, 0x0c, 0x46, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x22, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0c, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x05, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x75, 0x6d, 0x44, 0x69, 0x72, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x44, 0x69, 0x72, 0x73, 0x12, + 0x1a, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x07, 0x73, + 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x73, 0x6f, + 0x72, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x1a, 0x0a, 0x08, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6d, + 0x6f, 0x64, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x69, 0x73, 0x44, 0x69, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, + 0x69, 0x73, 0x44, 0x69, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x73, 0x53, 0x79, 0x6d, 0x6c, 0x69, + 0x6e, 0x6b, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x53, 0x79, 0x6d, 0x6c, + 0x69, 0x6e, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x45, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, + 0x53, 0x70, 0x61, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x75, 0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x22, 0x0c, + 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x45, 0x0a, 0x09, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x24, 0x0a, + 0x0d, 0x75, 0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x50, + 0x61, 0x74, 0x68, 0x22, 0x0c, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x5f, 0x0a, 0x09, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x12, 0x12, + 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x50, + 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x53, + 0x70, 0x61, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x22, 0x0c, 0x0a, 0x0a, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x5b, 0x0a, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x50, 0x61, + 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x53, 0x70, + 0x61, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x6c, 0x0a, + 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2e, 0x0a, 0x05, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x66, 0x69, 0x6c, + 0x65, 0x73, 0x2e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x4e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x2e, 0x0a, 0x06, 0x4e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x69, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x03, 0x64, 0x69, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x64, 0x0a, 0x0c, 0x54, + 0x75, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x70, + 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, + 0x24, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, + 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, + 0x65, 0x22, 0x57, 0x0a, 0x0d, 0x54, 0x75, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x22, 0x0a, 0x0c, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x22, 0x0a, 0x0c, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, + 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x75, 0x70, + 0x6c, 0x6f, 0x61, 0x64, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x86, 0x01, 0x0a, 0x0c, 0x54, + 0x75, 0x73, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x70, + 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, + 0x24, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, + 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x22, 0x0a, 0x0c, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x75, 0x70, 0x6c, + 0x6f, 0x61, 0x64, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x22, 0x33, 0x0a, 0x0d, 0x54, 0x75, 0x73, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x22, 0x0a, 0x0c, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x75, 0x70, 0x6c, 0x6f, + 0x61, 0x64, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x80, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x73, + 0x75, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x53, 0x70, 0x61, + 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x75, 0x73, + 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x6f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x31, 0x0a, 0x15, 0x52, + 0x65, 0x73, 0x75, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x47, + 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x50, 0x61, + 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x53, 0x70, + 0x61, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x22, 0xe0, 0x01, 0x0a, 0x0c, 0x46, 0x69, 0x6c, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, + 0x73, 0x69, 0x7a, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x6f, + 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x44, 0x69, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x05, 0x69, 0x73, 0x44, 0x69, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x73, 0x53, 0x79, + 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x53, + 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x5a, 0x0a, 0x0a, 0x50, 0x72, + 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x24, 0x0a, 0x0d, + 0x75, 0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x50, 0x61, + 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x5d, 0x0a, 0x0b, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, + 0x77, 0x52, 0x65, 0x73, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, + 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, + 0x6f, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x6f, + 0x64, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xb3, 0x01, 0x0a, 0x09, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x53, + 0x70, 0x61, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x75, 0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, + 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x76, 0x65, 0x72, 0x72, + 0x69, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6f, 0x76, 0x65, 0x72, 0x72, + 0x69, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x0c, 0x0a, 0x0a, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x74, 0x0a, 0x0e, 0x44, 0x69, 0x72, + 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x70, + 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, + 0x24, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, + 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x61, + 0x6c, 0x67, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x6c, 0x67, 0x6f, 0x22, + 0x2b, 0x0a, 0x0f, 0x44, 0x69, 0x72, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x32, 0x9d, 0x05, 0x0a, + 0x04, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x2e, + 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x71, 0x1a, 0x13, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x12, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x46, 0x69, 0x6c, + 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x2f, 0x0a, 0x06, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x10, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x2f, 0x0a, 0x06, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x10, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x2f, 0x0a, + 0x06, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x10, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, + 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x66, 0x69, 0x6c, 0x65, + 0x73, 0x2e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x2f, + 0x0a, 0x06, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x10, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, + 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x66, 0x69, 0x6c, + 0x65, 0x73, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, + 0x38, 0x0a, 0x09, 0x54, 0x75, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x13, 0x2e, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x54, 0x75, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x1a, 0x14, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x54, 0x75, 0x73, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x38, 0x0a, 0x09, 0x54, 0x75, 0x73, + 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x13, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x54, + 0x75, 0x73, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x2e, 0x54, 0x75, 0x73, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x61, 0x62, 0x6c, 0x65, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x1b, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, + 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x52, 0x65, + 0x73, 0x75, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x32, 0x0a, 0x07, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, + 0x12, 0x11, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, + 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x65, 0x76, + 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x2f, 0x0a, 0x06, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0b, 0x44, 0x69, + 0x72, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x15, 0x2e, 0x66, 0x69, 0x6c, 0x65, + 0x73, 0x2e, 0x44, 0x69, 0x72, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, + 0x1a, 0x16, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x44, 0x69, 0x72, 0x44, 0x6f, 0x77, 0x6e, + 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x30, 0x01, 0x42, 0x0a, 0x5a, 0x08, + 0x2e, 0x2f, 0x3b, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_files_proto_rawDescOnce sync.Once + file_files_proto_rawDescData = file_files_proto_rawDesc +) + +func file_files_proto_rawDescGZIP() []byte { + file_files_proto_rawDescOnce.Do(func() { + file_files_proto_rawDescData = protoimpl.X.CompressGZIP(file_files_proto_rawDescData) + }) + return file_files_proto_rawDescData +} + +var file_files_proto_msgTypes = make([]protoimpl.MessageInfo, 27) +var file_files_proto_goTypes = []interface{}{ + (*FileListReq)(nil), // 0: files.FileListReq + (*Items)(nil), // 1: files.Items + (*Sorting)(nil), // 2: files.Sorting + (*FileListResp)(nil), // 3: files.FileListResp + (*CreateReq)(nil), // 4: files.CreateReq + (*CreateResp)(nil), // 5: files.CreateResp + (*DeleteReq)(nil), // 6: files.DeleteReq + (*DeleteResp)(nil), // 7: files.DeleteResp + (*UploadReq)(nil), // 8: files.UploadReq + (*UploadResp)(nil), // 9: files.UploadResp + (*SearchReq)(nil), // 10: files.searchReq + (*SearchResp)(nil), // 11: files.searchResp + (*TusCreateReq)(nil), // 12: files.TusCreateReq + (*TusCreateResp)(nil), // 13: files.TusCreateResp + (*TusUploadReq)(nil), // 14: files.TusUploadReq + (*TusUploadResp)(nil), // 15: files.TusUploadResp + (*ResumableTransferReq)(nil), // 16: files.ResumableTransferReq + (*ResumableTransferResp)(nil), // 17: files.ResumableTransferResp + (*FileInfoReq)(nil), // 18: files.FileInfoReq + (*FileInfoResp)(nil), // 19: files.FileInfoResp + (*PreviewReq)(nil), // 20: files.PreviewReq + (*PreviewResp)(nil), // 21: files.PreviewResp + (*ActionReq)(nil), // 22: files.ActionReq + (*ActionResp)(nil), // 23: files.ActionResp + (*DirDownloadReq)(nil), // 24: files.DirDownloadReq + (*DirDownloadResp)(nil), // 25: files.DirDownloadResp + (*SearchResp_Nested)(nil), // 26: files.searchResp.Nested +} +var file_files_proto_depIdxs = []int32{ + 2, // 0: files.FileListReq.sorting:type_name -> files.Sorting + 1, // 1: files.FileListResp.items:type_name -> files.Items + 2, // 2: files.FileListResp.sorting:type_name -> files.Sorting + 26, // 3: files.searchResp.items:type_name -> files.searchResp.Nested + 0, // 4: files.File.List:input_type -> files.FileListReq + 18, // 5: files.File.Info:input_type -> files.FileInfoReq + 4, // 6: files.File.Create:input_type -> files.CreateReq + 6, // 7: files.File.Delete:input_type -> files.DeleteReq + 10, // 8: files.File.Search:input_type -> files.searchReq + 8, // 9: files.File.Upload:input_type -> files.UploadReq + 12, // 10: files.File.TusCreate:input_type -> files.TusCreateReq + 14, // 11: files.File.TusUpload:input_type -> files.TusUploadReq + 16, // 12: files.File.ResumableTransfer:input_type -> files.ResumableTransferReq + 20, // 13: files.File.Preview:input_type -> files.PreviewReq + 22, // 14: files.File.Action:input_type -> files.ActionReq + 24, // 15: files.File.DirDownload:input_type -> files.DirDownloadReq + 3, // 16: files.File.List:output_type -> files.FileListResp + 19, // 17: files.File.Info:output_type -> files.FileInfoResp + 5, // 18: files.File.Create:output_type -> files.CreateResp + 7, // 19: files.File.Delete:output_type -> files.DeleteResp + 11, // 20: files.File.Search:output_type -> files.searchResp + 9, // 21: files.File.Upload:output_type -> files.UploadResp + 13, // 22: files.File.TusCreate:output_type -> files.TusCreateResp + 15, // 23: files.File.TusUpload:output_type -> files.TusUploadResp + 17, // 24: files.File.ResumableTransfer:output_type -> files.ResumableTransferResp + 21, // 25: files.File.Preview:output_type -> files.PreviewResp + 23, // 26: files.File.Action:output_type -> files.ActionResp + 25, // 27: files.File.DirDownload:output_type -> files.DirDownloadResp + 16, // [16:28] is the sub-list for method output_type + 4, // [4:16] is the sub-list for method input_type + 4, // [4:4] is the sub-list for extension type_name + 4, // [4:4] is the sub-list for extension extendee + 0, // [0:4] is the sub-list for field type_name +} + +func init() { file_files_proto_init() } +func file_files_proto_init() { + if File_files_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_files_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FileListReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_files_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Items); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_files_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Sorting); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_files_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FileListResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_files_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_files_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_files_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_files_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_files_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UploadReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_files_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UploadResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_files_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SearchReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_files_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SearchResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_files_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TusCreateReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_files_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TusCreateResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_files_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TusUploadReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_files_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TusUploadResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_files_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResumableTransferReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_files_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResumableTransferResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_files_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FileInfoReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_files_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FileInfoResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_files_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PreviewReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_files_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PreviewResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_files_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ActionReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_files_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ActionResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_files_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DirDownloadReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_files_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DirDownloadResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_files_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SearchResp_Nested); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_files_proto_rawDesc, + NumEnums: 0, + NumMessages: 27, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_files_proto_goTypes, + DependencyIndexes: file_files_proto_depIdxs, + MessageInfos: file_files_proto_msgTypes, + }.Build() + File_files_proto = out.File + file_files_proto_rawDesc = nil + file_files_proto_goTypes = nil + file_files_proto_depIdxs = nil +} diff --git a/api/files/files.proto b/api/files/files.proto new file mode 100644 index 0000000..b3d0157 --- /dev/null +++ b/api/files/files.proto @@ -0,0 +1,193 @@ +syntax = "proto3"; +package files; + +option go_package = "./;files"; + + +service File{ + rpc List(FileListReq) returns (FileListResp) {} // 获取当前路径下的文件列表 + rpc Info(FileInfoReq) returns (FileInfoResp) {} // 获取文件信息 + rpc Create(CreateReq) returns (CreateResp) {} // 创建文件夹 + rpc Delete(DeleteReq) returns (DeleteResp) {} // 删除文件或文件夹 + rpc Search(searchReq) returns (searchResp) {} // 搜索 + rpc Upload(UploadReq) returns (UploadResp) {} // 文件上传 + rpc TusCreate(TusCreateReq) returns (TusCreateResp) {} // 分块文件上传:创建文件 + rpc TusUpload(TusUploadReq) returns (TusUploadResp) {} // 分块文件上传:上传文件块 + rpc ResumableTransfer(ResumableTransferReq) returns (ResumableTransferResp) {} // 断点续传的grpc实现 + rpc Preview(PreviewReq) returns (PreviewResp) {} // 文件预览 + rpc Action(ActionReq) returns (ActionResp) {} // 移动文件或重命名文件 + rpc DirDownload(DirDownloadReq) returns (stream DirDownloadResp) {} // 文件夹压缩下载 +} + +message FileListReq{ + string path = 1; // 目标文件夹路径 + string userSpacePath = 2; // 用户空间的路径 + Sorting sorting = 3; +} + +message Items { + string path = 1; + string name = 2; + int64 size = 3; + string extension = 4; + string modified = 5; + string mode = 6; + bool isDir = 7; + bool isSymlink = 8; + string type = 9; +} + +message Sorting { + string by = 1; + bool asc = 2; +} + +message FileListResp { + repeated Items items = 1; + int32 numDirs = 2; + int32 numFiles = 3; + Sorting sorting = 4; + string path = 5; + string name = 6; + int64 size = 7; + string extension = 8; + string modified = 9; + string mode = 10; + bool isDir = 11; + bool isSymlink = 12; + string type = 13; +} + + +message CreateReq{ + string path = 1; + string userSpacePath = 2; +} + +message CreateResp{ + +} + + +message DeleteReq{ + string path = 1; + string userSpacePath = 2; +} + +message DeleteResp{ + +} + +message UploadReq{ + string path = 1; + string userSpacePath = 2; + bytes content =3; + +} + +message UploadResp{ + +} + +message searchReq{ + string path = 1; + string userSpacePath = 2; + string query = 3; +} + +message searchResp{ + message Nested { + bool dir = 1; + string path = 2; + } + + repeated Nested items = 1; +} + + +message TusCreateReq{ + string path = 1; + string userSpacePath = 2; + bool override =3 ; +} + +message TusCreateResp{ + int64 uploadLength = 1; + int64 uploadOffset = 2; +} + +message TusUploadReq{ + string path = 1; + string userSpacePath = 2; + int64 uploadOffset = 3; + bytes content = 4; +} + +message TusUploadResp{ + int64 uploadOffset = 1; +} + +message ResumableTransferReq{ + string path = 1; + string userSpacePath = 2; + int64 offset = 3; + int64 length = 4; +} + +message ResumableTransferResp{ + bytes content = 1; +} + +message FileInfoReq{ + string path = 1; + string userSpacePath = 2; +} + +message FileInfoResp{ + string path = 1; + string name = 2; + int64 size = 3; + string extension = 4; + string modified = 5; + string mode = 6; + bool isDir = 7; + bool isSymlink = 8; + string type = 9; +} + +message PreviewReq{ + string path = 1; + string userSpacePath = 2; + uint32 size = 3; // 预览大小 0:256x256, 1:1080x1080 +} + +message PreviewResp{ + bytes content = 1; + string fileName = 2; + int64 modTime = 3; +} + +message ActionReq{ + string path = 1; + string userSpacePath = 2; + string action = 3; + string destination = 4; + bool override = 5; + bool rename = 6; +} + +message ActionResp{ + +} + +message DirDownloadReq { + string path = 1; + string userSpacePath = 2; + repeated string files =3; + string algo = 4; + +} + +message DirDownloadResp { + bytes content = 1; +} diff --git a/api/files/files.validator.pb.go b/api/files/files.validator.pb.go new file mode 100644 index 0000000..7a70050 --- /dev/null +++ b/api/files/files.validator.pb.go @@ -0,0 +1,122 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: files.proto + +package files + +import ( + fmt "fmt" + math "math" + proto "github.com/golang/protobuf/proto" + github_com_mwitkow_go_proto_validators "github.com/mwitkow/go-proto-validators" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +func (this *FileListReq) Validate() error { + if this.Sorting != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.Sorting); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Sorting", err) + } + } + return nil +} +func (this *Items) Validate() error { + return nil +} +func (this *Sorting) Validate() error { + return nil +} +func (this *FileListResp) Validate() error { + for _, item := range this.Items { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Items", err) + } + } + } + if this.Sorting != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.Sorting); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Sorting", err) + } + } + return nil +} +func (this *CreateReq) Validate() error { + return nil +} +func (this *CreateResp) Validate() error { + return nil +} +func (this *DeleteReq) Validate() error { + return nil +} +func (this *DeleteResp) Validate() error { + return nil +} +func (this *UploadReq) Validate() error { + return nil +} +func (this *UploadResp) Validate() error { + return nil +} +func (this *SearchReq) Validate() error { + return nil +} +func (this *SearchResp) Validate() error { + for _, item := range this.Items { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Items", err) + } + } + } + return nil +} +func (this *SearchResp_Nested) Validate() error { + return nil +} +func (this *TusCreateReq) Validate() error { + return nil +} +func (this *TusCreateResp) Validate() error { + return nil +} +func (this *TusUploadReq) Validate() error { + return nil +} +func (this *TusUploadResp) Validate() error { + return nil +} +func (this *ResumableTransferReq) Validate() error { + return nil +} +func (this *ResumableTransferResp) Validate() error { + return nil +} +func (this *FileInfoReq) Validate() error { + return nil +} +func (this *FileInfoResp) Validate() error { + return nil +} +func (this *PreviewReq) Validate() error { + return nil +} +func (this *PreviewResp) Validate() error { + return nil +} +func (this *ActionReq) Validate() error { + return nil +} +func (this *ActionResp) Validate() error { + return nil +} +func (this *DirDownloadReq) Validate() error { + return nil +} +func (this *DirDownloadResp) Validate() error { + return nil +} diff --git a/api/files/files_triple.pb.go b/api/files/files_triple.pb.go new file mode 100644 index 0000000..665002e --- /dev/null +++ b/api/files/files_triple.pb.go @@ -0,0 +1,678 @@ +// Code generated by protoc-gen-go-triple. DO NOT EDIT. +// versions: +// - protoc-gen-go-triple v1.0.8 +// - protoc v3.20.3 +// source: files.proto + +package files + +import ( + context "context" + constant1 "dubbo.apache.org/dubbo-go/v3/common/constant" + protocol "dubbo.apache.org/dubbo-go/v3/protocol" + dubbo3 "dubbo.apache.org/dubbo-go/v3/protocol/dubbo3" + invocation "dubbo.apache.org/dubbo-go/v3/protocol/invocation" + fmt "fmt" + grpc_go "github.com/dubbogo/grpc-go" + codes "github.com/dubbogo/grpc-go/codes" + metadata "github.com/dubbogo/grpc-go/metadata" + status "github.com/dubbogo/grpc-go/status" + common "github.com/dubbogo/triple/pkg/common" + constant "github.com/dubbogo/triple/pkg/common/constant" + triple "github.com/dubbogo/triple/pkg/triple" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc_go.SupportPackageIsVersion7 + +// FileClient is the client API for File service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type FileClient interface { + List(ctx context.Context, in *FileListReq, opts ...grpc_go.CallOption) (*FileListResp, common.ErrorWithAttachment) + Info(ctx context.Context, in *FileInfoReq, opts ...grpc_go.CallOption) (*FileInfoResp, common.ErrorWithAttachment) + Create(ctx context.Context, in *CreateReq, opts ...grpc_go.CallOption) (*CreateResp, common.ErrorWithAttachment) + Delete(ctx context.Context, in *DeleteReq, opts ...grpc_go.CallOption) (*DeleteResp, common.ErrorWithAttachment) + Search(ctx context.Context, in *SearchReq, opts ...grpc_go.CallOption) (*SearchResp, common.ErrorWithAttachment) + Upload(ctx context.Context, in *UploadReq, opts ...grpc_go.CallOption) (*UploadResp, common.ErrorWithAttachment) + TusCreate(ctx context.Context, in *TusCreateReq, opts ...grpc_go.CallOption) (*TusCreateResp, common.ErrorWithAttachment) + TusUpload(ctx context.Context, in *TusUploadReq, opts ...grpc_go.CallOption) (*TusUploadResp, common.ErrorWithAttachment) + ResumableTransfer(ctx context.Context, in *ResumableTransferReq, opts ...grpc_go.CallOption) (*ResumableTransferResp, common.ErrorWithAttachment) + Preview(ctx context.Context, in *PreviewReq, opts ...grpc_go.CallOption) (*PreviewResp, common.ErrorWithAttachment) + Action(ctx context.Context, in *ActionReq, opts ...grpc_go.CallOption) (*ActionResp, common.ErrorWithAttachment) + DirDownload(ctx context.Context, in *DirDownloadReq, opts ...grpc_go.CallOption) (File_DirDownloadClient, error) +} + +type fileClient struct { + cc *triple.TripleConn +} + +type FileClientImpl struct { + List func(ctx context.Context, in *FileListReq) (*FileListResp, error) + Info func(ctx context.Context, in *FileInfoReq) (*FileInfoResp, error) + Create func(ctx context.Context, in *CreateReq) (*CreateResp, error) + Delete func(ctx context.Context, in *DeleteReq) (*DeleteResp, error) + Search func(ctx context.Context, in *SearchReq) (*SearchResp, error) + Upload func(ctx context.Context, in *UploadReq) (*UploadResp, error) + TusCreate func(ctx context.Context, in *TusCreateReq) (*TusCreateResp, error) + TusUpload func(ctx context.Context, in *TusUploadReq) (*TusUploadResp, error) + ResumableTransfer func(ctx context.Context, in *ResumableTransferReq) (*ResumableTransferResp, error) + Preview func(ctx context.Context, in *PreviewReq) (*PreviewResp, error) + Action func(ctx context.Context, in *ActionReq) (*ActionResp, error) + DirDownload func(ctx context.Context, in *DirDownloadReq) (File_DirDownloadClient, error) +} + +func (c *FileClientImpl) GetDubboStub(cc *triple.TripleConn) FileClient { + return NewFileClient(cc) +} + +func (c *FileClientImpl) XXX_InterfaceName() string { + return "files.File" +} + +func NewFileClient(cc *triple.TripleConn) FileClient { + return &fileClient{cc} +} + +func (c *fileClient) List(ctx context.Context, in *FileListReq, opts ...grpc_go.CallOption) (*FileListResp, common.ErrorWithAttachment) { + out := new(FileListResp) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/List", in, out) +} + +func (c *fileClient) Info(ctx context.Context, in *FileInfoReq, opts ...grpc_go.CallOption) (*FileInfoResp, common.ErrorWithAttachment) { + out := new(FileInfoResp) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/Info", in, out) +} + +func (c *fileClient) Create(ctx context.Context, in *CreateReq, opts ...grpc_go.CallOption) (*CreateResp, common.ErrorWithAttachment) { + out := new(CreateResp) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/Create", in, out) +} + +func (c *fileClient) Delete(ctx context.Context, in *DeleteReq, opts ...grpc_go.CallOption) (*DeleteResp, common.ErrorWithAttachment) { + out := new(DeleteResp) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/Delete", in, out) +} + +func (c *fileClient) Search(ctx context.Context, in *SearchReq, opts ...grpc_go.CallOption) (*SearchResp, common.ErrorWithAttachment) { + out := new(SearchResp) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/Search", in, out) +} + +func (c *fileClient) Upload(ctx context.Context, in *UploadReq, opts ...grpc_go.CallOption) (*UploadResp, common.ErrorWithAttachment) { + out := new(UploadResp) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/Upload", in, out) +} + +func (c *fileClient) TusCreate(ctx context.Context, in *TusCreateReq, opts ...grpc_go.CallOption) (*TusCreateResp, common.ErrorWithAttachment) { + out := new(TusCreateResp) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/TusCreate", in, out) +} + +func (c *fileClient) TusUpload(ctx context.Context, in *TusUploadReq, opts ...grpc_go.CallOption) (*TusUploadResp, common.ErrorWithAttachment) { + out := new(TusUploadResp) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/TusUpload", in, out) +} + +func (c *fileClient) ResumableTransfer(ctx context.Context, in *ResumableTransferReq, opts ...grpc_go.CallOption) (*ResumableTransferResp, common.ErrorWithAttachment) { + out := new(ResumableTransferResp) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/ResumableTransfer", in, out) +} + +func (c *fileClient) Preview(ctx context.Context, in *PreviewReq, opts ...grpc_go.CallOption) (*PreviewResp, common.ErrorWithAttachment) { + out := new(PreviewResp) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/Preview", in, out) +} + +func (c *fileClient) Action(ctx context.Context, in *ActionReq, opts ...grpc_go.CallOption) (*ActionResp, common.ErrorWithAttachment) { + out := new(ActionResp) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/Action", in, out) +} + +func (c *fileClient) DirDownload(ctx context.Context, in *DirDownloadReq, opts ...grpc_go.CallOption) (File_DirDownloadClient, error) { + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + stream, err := c.cc.NewStream(ctx, "/"+interfaceKey+"/DirDownload", opts...) + if err != nil { + return nil, err + } + x := &fileDirDownloadClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type File_DirDownloadClient interface { + Recv() (*DirDownloadResp, error) + grpc_go.ClientStream +} + +type fileDirDownloadClient struct { + grpc_go.ClientStream +} + +func (x *fileDirDownloadClient) Recv() (*DirDownloadResp, error) { + m := new(DirDownloadResp) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// FileServer is the server API for File service. +// All implementations must embed UnimplementedFileServer +// for forward compatibility +type FileServer interface { + List(context.Context, *FileListReq) (*FileListResp, error) + Info(context.Context, *FileInfoReq) (*FileInfoResp, error) + Create(context.Context, *CreateReq) (*CreateResp, error) + Delete(context.Context, *DeleteReq) (*DeleteResp, error) + Search(context.Context, *SearchReq) (*SearchResp, error) + Upload(context.Context, *UploadReq) (*UploadResp, error) + TusCreate(context.Context, *TusCreateReq) (*TusCreateResp, error) + TusUpload(context.Context, *TusUploadReq) (*TusUploadResp, error) + ResumableTransfer(context.Context, *ResumableTransferReq) (*ResumableTransferResp, error) + Preview(context.Context, *PreviewReq) (*PreviewResp, error) + Action(context.Context, *ActionReq) (*ActionResp, error) + DirDownload(*DirDownloadReq, File_DirDownloadServer) error + mustEmbedUnimplementedFileServer() +} + +// UnimplementedFileServer must be embedded to have forward compatible implementations. +type UnimplementedFileServer struct { + proxyImpl protocol.Invoker +} + +func (UnimplementedFileServer) List(context.Context, *FileListReq) (*FileListResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedFileServer) Info(context.Context, *FileInfoReq) (*FileInfoResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method Info not implemented") +} +func (UnimplementedFileServer) Create(context.Context, *CreateReq) (*CreateResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") +} +func (UnimplementedFileServer) Delete(context.Context, *DeleteReq) (*DeleteResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") +} +func (UnimplementedFileServer) Search(context.Context, *SearchReq) (*SearchResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method Search not implemented") +} +func (UnimplementedFileServer) Upload(context.Context, *UploadReq) (*UploadResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method Upload not implemented") +} +func (UnimplementedFileServer) TusCreate(context.Context, *TusCreateReq) (*TusCreateResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method TusCreate not implemented") +} +func (UnimplementedFileServer) TusUpload(context.Context, *TusUploadReq) (*TusUploadResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method TusUpload not implemented") +} +func (UnimplementedFileServer) ResumableTransfer(context.Context, *ResumableTransferReq) (*ResumableTransferResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method ResumableTransfer not implemented") +} +func (UnimplementedFileServer) Preview(context.Context, *PreviewReq) (*PreviewResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method Preview not implemented") +} +func (UnimplementedFileServer) Action(context.Context, *ActionReq) (*ActionResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method Action not implemented") +} +func (UnimplementedFileServer) DirDownload(*DirDownloadReq, File_DirDownloadServer) error { + return status.Errorf(codes.Unimplemented, "method DirDownload not implemented") +} +func (s *UnimplementedFileServer) XXX_SetProxyImpl(impl protocol.Invoker) { + s.proxyImpl = impl +} + +func (s *UnimplementedFileServer) XXX_GetProxyImpl() protocol.Invoker { + return s.proxyImpl +} + +func (s *UnimplementedFileServer) XXX_ServiceDesc() *grpc_go.ServiceDesc { + return &File_ServiceDesc +} +func (s *UnimplementedFileServer) XXX_InterfaceName() string { + return "files.File" +} + +func (UnimplementedFileServer) mustEmbedUnimplementedFileServer() {} + +// UnsafeFileServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to FileServer will +// result in compilation errors. +type UnsafeFileServer interface { + mustEmbedUnimplementedFileServer() +} + +func RegisterFileServer(s grpc_go.ServiceRegistrar, srv FileServer) { + s.RegisterService(&File_ServiceDesc, srv) +} + +func _File_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(FileListReq) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("List", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _File_Info_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(FileInfoReq) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("Info", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _File_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateReq) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("Create", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _File_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteReq) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("Delete", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _File_Search_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(SearchReq) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("Search", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _File_Upload_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(UploadReq) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("Upload", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _File_TusCreate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(TusCreateReq) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("TusCreate", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _File_TusUpload_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(TusUploadReq) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("TusUpload", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _File_ResumableTransfer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(ResumableTransferReq) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("ResumableTransfer", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _File_Preview_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(PreviewReq) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("Preview", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _File_Action_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(ActionReq) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("Action", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _File_DirDownload_Handler(srv interface{}, stream grpc_go.ServerStream) error { + _, ok := srv.(dubbo3.Dubbo3GrpcService) + ctx := stream.Context() + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + stream.(grpc_go.CtxSetterStream).SetContext(context.WithValue(ctx, constant1.AttachmentKey, invAttachment)) + invo := invocation.NewRPCInvocation("DirDownload", nil, nil) + if !ok { + fmt.Println(invo) + return nil + } + m := new(DirDownloadReq) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(FileServer).DirDownload(m, &fileDirDownloadServer{stream}) +} + +type File_DirDownloadServer interface { + Send(*DirDownloadResp) error + grpc_go.ServerStream +} + +type fileDirDownloadServer struct { + grpc_go.ServerStream +} + +func (x *fileDirDownloadServer) Send(m *DirDownloadResp) error { + return x.ServerStream.SendMsg(m) +} + +// File_ServiceDesc is the grpc_go.ServiceDesc for File service. +// It's only intended for direct use with grpc_go.RegisterService, +// and not to be introspected or modified (even as a copy) +var File_ServiceDesc = grpc_go.ServiceDesc{ + ServiceName: "files.File", + HandlerType: (*FileServer)(nil), + Methods: []grpc_go.MethodDesc{ + { + MethodName: "List", + Handler: _File_List_Handler, + }, + { + MethodName: "Info", + Handler: _File_Info_Handler, + }, + { + MethodName: "Create", + Handler: _File_Create_Handler, + }, + { + MethodName: "Delete", + Handler: _File_Delete_Handler, + }, + { + MethodName: "Search", + Handler: _File_Search_Handler, + }, + { + MethodName: "Upload", + Handler: _File_Upload_Handler, + }, + { + MethodName: "TusCreate", + Handler: _File_TusCreate_Handler, + }, + { + MethodName: "TusUpload", + Handler: _File_TusUpload_Handler, + }, + { + MethodName: "ResumableTransfer", + Handler: _File_ResumableTransfer_Handler, + }, + { + MethodName: "Preview", + Handler: _File_Preview_Handler, + }, + { + MethodName: "Action", + Handler: _File_Action_Handler, + }, + }, + Streams: []grpc_go.StreamDesc{ + { + StreamName: "DirDownload", + Handler: _File_DirDownload_Handler, + ServerStreams: true, + }, + }, + Metadata: "files.proto", +} diff --git a/pkg/router/router.go b/pkg/router/router.go index 6fb0709..ad443f8 100644 --- a/pkg/router/router.go +++ b/pkg/router/router.go @@ -5,6 +5,7 @@ import ( "fonchain-fiee/pkg/service" "fonchain-fiee/pkg/service/account" "fonchain-fiee/pkg/service/auth" + "fonchain-fiee/pkg/service/file" "fonchain-fiee/pkg/service/lang" "fonchain-fiee/pkg/service/qr" "fonchain-fiee/pkg/service/redirect" @@ -108,6 +109,23 @@ func NewRouter() *gin.Engine { redirectRoute.POST("sdk/down/v3", auth.DownImgV3) } + { + // 素材库 + resourceRoute := v1.Group("/resource") + + resourceRoute.GET("", file.Info) + resourceRoute.DELETE("", file.Delete) + resourceRoute.PUT("", file.Action) + resourceRoute.POST("", file.Create) + resourceRoute.GET("/search", file.Search) + resourceRoute.POST("/upload", file.Upload) + resourceRoute.POST("/tus/create", file.TusCreate) + resourceRoute.POST("/tus/upload", file.TusUpload) + resourceRoute.GET("/raw", file.Raw) + resourceRoute.GET("/raw/dir", file.DirDownload) + resourceRoute.GET("/preview", file.Preview) + resourceRoute.GET("/list", file.List) + } //静态文件 r.StaticFS("/api/static", http.Dir("./runtime")) r.NoRoute(func(c *gin.Context) { diff --git a/pkg/service/file/file.go b/pkg/service/file/file.go new file mode 100644 index 0000000..f7dd321 --- /dev/null +++ b/pkg/service/file/file.go @@ -0,0 +1,254 @@ +package file + +import ( + "bytes" + "errors" + "fmt" + "fonchain-fiee/api/files" + "fonchain-fiee/pkg/model/login" + "fonchain-fiee/pkg/service" + "io" + "net/http" + "net/url" + "strconv" + "strings" + "time" + + "github.com/gin-gonic/gin" +) + +func Raw(ctx *gin.Context) { + r := ctx.Request + w := ctx.Writer + + w.Header().Add("Content-Security-Policy", `script-src 'none';`) + w.Header().Set("Cache-Control", "private") + rs, err := newGrpcReaderSeeker(getUserSpacePath(ctx), ctx.Query("path")) + if err != nil { + service.Error(ctx, err) + return + } + if r.URL.Query().Get("inline") == "true" { + w.Header().Set("Content-Disposition", "inline") + } else { + // As per RFC6266 section 4.3 + w.Header().Set("Content-Disposition", "attachment; filename*=utf-8''"+rs.FileName) + } + http.ServeContent(ctx.Writer, r, rs.FileName, time.Now(), rs) +} + +func List(ctx *gin.Context) { + path := ctx.DefaultQuery("path", "/") + sortBy := ctx.DefaultQuery("sortBy", "name") + sortAsc, _ := strconv.ParseBool(ctx.DefaultQuery("sortAsc", "true")) + resp, err := service.FilesProvider.List(ctx, &files.FileListReq{ + Path: path, + UserSpacePath: getUserSpacePath(ctx), + Sorting: &files.Sorting{ + By: sortBy, + Asc: sortAsc, + }, + }) + if err != nil { + service.Error(ctx, err) + return + } + service.Success(ctx, resp) +} + +func Info(ctx *gin.Context) { + resp, err := service.FilesProvider.Info(ctx, &files.FileInfoReq{ + Path: ctx.DefaultQuery("path", "/"), + UserSpacePath: getUserSpacePath(ctx), + }) + if err != nil { + service.Error(ctx, err) + return + } + service.Success(ctx, resp) +} + +func Create(ctx *gin.Context) { + var req files.CreateReq + if err := ctx.ShouldBindJSON(&req); err != nil { + service.Error(ctx, err) + return + } + req.UserSpacePath = getUserSpacePath(ctx) + resp, err := service.FilesProvider.Create(ctx, &req) + if err != nil { + service.Error(ctx, err) + return + } + service.Success(ctx, resp) +} + +func Delete(ctx *gin.Context) { + resp, err := service.FilesProvider.Delete(ctx, &files.DeleteReq{ + Path: ctx.DefaultQuery("path", "/"), + UserSpacePath: getUserSpacePath(ctx), + }) + if err != nil { + service.Error(ctx, err) + return + } + service.Success(ctx, resp) +} + +func Search(ctx *gin.Context) { + resp, err := service.FilesProvider.Search(ctx, &files.SearchReq{ + UserSpacePath: getUserSpacePath(ctx), + Path: ctx.Query("path"), + Query: ctx.Query("query"), + }) + if err != nil { + service.Error(ctx, err) + return + } + service.Success(ctx, resp) +} + +func Upload(ctx *gin.Context) { + path, ok := ctx.GetQuery("path") + if !ok { + service.Error(ctx, errors.New("缺失参数路径")) + return + } + b, err := io.ReadAll(ctx.Request.Body) + if !ok { + service.Error(ctx, err) + return + } + resp, err := service.FilesProvider.Upload(ctx, &files.UploadReq{ + Path: path, + UserSpacePath: getUserSpacePath(ctx), + Content: b, + }) + if err != nil { + service.Error(ctx, err) + return + } + service.Success(ctx, resp) +} + +func TusCreate(ctx *gin.Context) { + var req files.TusCreateReq + if err := ctx.ShouldBindJSON(&req); err != nil { + service.Error(ctx, err) + return + } + req.UserSpacePath = getUserSpacePath(ctx) + resp, err := service.FilesProvider.TusCreate(ctx, &req) + if err != nil { + service.Error(ctx, err) + return + } + service.Success(ctx, resp) +} + +func TusUpload(ctx *gin.Context) { + path, ok := ctx.GetQuery("path") + if !ok { + service.Error(ctx, errors.New("文件路径缺失")) + return + } + uploadOffset, err := getUploadOffset(ctx.Request) + if err != nil { + service.Error(ctx, fmt.Errorf("invalid upload offset: %w", err)) + return + } + b, err := io.ReadAll(ctx.Request.Body) + if !ok { + service.Error(ctx, err) + return + } + resp, err := service.FilesProvider.TusUpload(ctx, &files.TusUploadReq{ + Path: path, + UploadOffset: uploadOffset, + Content: b, + UserSpacePath: getUserSpacePath(ctx), + }) + if err != nil { + service.Error(ctx, err) + return + } + ctx.Writer.Header().Set("Upload-Offset", strconv.FormatInt(resp.UploadOffset, 10)) + service.Success(ctx, nil) +} + +func Preview(ctx *gin.Context) { + var size int + size, err := strconv.Atoi(ctx.Query("size")) + if err != nil { + size = 1 + } + resp, err := service.FilesProvider.Preview(ctx, &files.PreviewReq{ + Path: ctx.Query("path"), + UserSpacePath: getUserSpacePath(ctx), + Size: uint32(size), + }) + if err != nil { + service.Error(ctx, err) + return + } + ctx.Writer.Header().Set("Cache-Control", "private") + http.ServeContent(ctx.Writer, ctx.Request, resp.FileName, time.UnixMilli(resp.ModTime), bytes.NewReader(resp.Content)) +} + +func Action(ctx *gin.Context) { + var req files.ActionReq + if err := ctx.ShouldBindJSON(&req); err != nil { + service.Error(ctx, err) + return + } + req.UserSpacePath = getUserSpacePath(ctx) + resp, err := service.FilesProvider.Action(ctx, &req) + if err != nil { + service.Error(ctx, err) + return + } + service.Success(ctx, resp) +} + +func DirDownload(ctx *gin.Context) { + path := ctx.Query("path") + fileList := strings.Split(ctx.Query("files"), ",") + algo := ctx.Query("algo") + stream, err := service.FilesProvider.DirDownload(ctx, &files.DirDownloadReq{ + Algo: algo, + Files: fileList, + Path: path, + UserSpacePath: getUserSpacePath(ctx), + }) + if err != nil { + service.Error(ctx, err) + return + } + header, err := stream.Header() + if err != nil { + service.Error(ctx, err) + return + } + + ctx.Writer.Header().Set("Content-Disposition", "attachment; filename*=utf-8''"+url.PathEscape(header.Get("filename")[0])) + for { + recvMsg, err := stream.Recv() + if err != nil { + break + } + ctx.Writer.Write(recvMsg.Content) + } +} + +func getUploadOffset(r *http.Request) (int64, error) { + uploadOffset, err := strconv.ParseInt(r.Header.Get("Upload-Offset"), 10, 64) + if err != nil { + return 0, fmt.Errorf("invalid upload offset: %w", err) + } + return uploadOffset, nil +} + +func getUserSpacePath(ctx *gin.Context) string { + user := login.GetUserInfoFromC(ctx) + return strconv.Itoa(int(user.ID)) +} diff --git a/pkg/service/file/grpc_reader_seeker.go b/pkg/service/file/grpc_reader_seeker.go new file mode 100644 index 0000000..c1c309e --- /dev/null +++ b/pkg/service/file/grpc_reader_seeker.go @@ -0,0 +1,91 @@ +package file + +import ( + "context" + "errors" + "fonchain-fiee/api/files" + "fonchain-fiee/pkg/service" + "io" +) + +type grpcReaderSeeker struct { + io.Reader + io.Seeker + path string + userSpacePath string + cursor int64 + length int64 + FileName string +} + +func (g *grpcReaderSeeker) Seek(offset int64, whence int) (int64, error) { + var abs int64 + switch whence { + case io.SeekStart: + abs = offset + case io.SeekCurrent: + abs = g.cursor + offset + case io.SeekEnd: + abs = g.length + offset + default: + return 0, errors.New("grpc.Reader.Seek: invalid whence") + } + if abs < 0 { + return 0, errors.New("grpc.Reader.Seek: negative position") + } + g.cursor = abs + return abs, nil +} + +func (g *grpcReaderSeeker) Read(b []byte) (n int, err error) { + if g.cursor >= g.length { + return 0, io.EOF + } + + data, err := g.getBytesData(len(b)) + if err != nil { + return 0, err + } + n = copy(b, data) + g.cursor += int64(n) + return +} + +// 通过grpc获取到bytes数据 +func (g *grpcReaderSeeker) getBytesData(len int) ([]byte, error) { + resp, err := service.FilesProvider.ResumableTransfer(context.TODO(), &files.ResumableTransferReq{ + UserSpacePath: g.userSpacePath, + Path: g.path, + Offset: g.cursor, + Length: int64(len), + }) + if err != nil { + return nil, err + } + return resp.Content, nil +} + +// grpc 获取到文件信息 +func (g *grpcReaderSeeker) initInfo() error { + resp, err := service.FilesProvider.Info(context.TODO(), &files.FileInfoReq{ + UserSpacePath: g.userSpacePath, + Path: g.path, + }) + if err != nil { + return nil + } + g.FileName = resp.Name + g.length = resp.Size + return err +} + +func newGrpcReaderSeeker(userSpacePath string, path string) (*grpcReaderSeeker, error) { + g := new(grpcReaderSeeker) + g.userSpacePath = userSpacePath + g.path = path + err := g.initInfo() + if err != nil { + return nil, err + } + return g, nil +} diff --git a/pkg/service/init.go b/pkg/service/init.go index d849aca..06c734b 100644 --- a/pkg/service/init.go +++ b/pkg/service/init.go @@ -1,17 +1,19 @@ package service import ( - "dubbo.apache.org/dubbo-go/v3/common/constant" - "dubbo.apache.org/dubbo-go/v3/config" - _ "dubbo.apache.org/dubbo-go/v3/imports" "fmt" "fonchain-fiee/api/account" "fonchain-fiee/api/accountFiee" "fonchain-fiee/api/bundle" + "fonchain-fiee/api/files" "fonchain-fiee/api/order" "fonchain-fiee/api/payment" pkConfig "fonchain-fiee/pkg/config" "os" + + "dubbo.apache.org/dubbo-go/v3/common/constant" + "dubbo.apache.org/dubbo-go/v3/config" + _ "dubbo.apache.org/dubbo-go/v3/imports" ) var AccountProvider = new(account.AccountClientImpl) @@ -19,6 +21,7 @@ var AccountFieeProvider = new(accountFiee.AccountFieeClientImpl) var BundleProvider = new(bundle.BundleClientImpl) var OrderProvider = new(order.OrderClientImpl) +var FilesProvider = new(files.FileClientImpl) var PaymentProvider = new(payment.PaymentCentClientImpl) func init() { @@ -27,6 +30,7 @@ func init() { config.SetConsumerService(AccountProvider) config.SetConsumerService(PaymentProvider) config.SetConsumerService(AccountFieeProvider) + config.SetConsumerService(FilesProvider) if err := config.Load(); err != nil { panic(err)