diff options
author | dmitrysamuylovpharo <dsamuylov@pharo.com> | 2018-08-02 10:37:31 -0400 |
---|---|---|
committer | Harrison Healey <harrisonmhealey@gmail.com> | 2018-08-02 10:37:31 -0400 |
commit | 7a731d2bd162419086f3aeec98ec41dfcaa16696 (patch) | |
tree | fb2dcfd52b5ee074c2ce9e3fbacefc3156c5bc75 /plugin | |
parent | b728b16f9083bf5c71e9c27ad074823e8e454b04 (diff) | |
download | chat-7a731d2bd162419086f3aeec98ec41dfcaa16696.tar.gz chat-7a731d2bd162419086f3aeec98ec41dfcaa16696.tar.bz2 chat-7a731d2bd162419086f3aeec98ec41dfcaa16696.zip |
Feature/fileinfo create copy (#9198)
* Initial implementation of a CopyFileInfos function that creates new FileInfo objects copied from provided FileIds with the provided user as the creator and not linked to a post yet. This can subsequently be used to copy existing attachments from another post to attach to a new post without having to re-upload the actual files
* added a unit test for the CopyFileInfos function
* resolving pull request suggestions
Diffstat (limited to 'plugin')
-rw-r--r-- | plugin/api.go | 7 | ||||
-rw-r--r-- | plugin/client_rpc_generated.go | 30 | ||||
-rw-r--r-- | plugin/plugintest/api.go | 25 |
3 files changed, 62 insertions, 0 deletions
diff --git a/plugin/api.go b/plugin/api.go index d0ad178ca..927fd3c6a 100644 --- a/plugin/api.go +++ b/plugin/api.go @@ -155,6 +155,13 @@ type API interface { // UpdatePost updates a post. UpdatePost(post *model.Post) (*model.Post, *model.AppError) + // CopyFileInfos creates a copy of FileInfo objects provided in the list of FileIds + // these new FileInfo objects will not be linked to any post and will + // be ready to provide to a new CreatePost call + // this should be used when you want to create a copy of a post including + // file attachments without duplicating the file uploads + CopyFileInfos(userId string, fileIds []string) ([]string, *model.AppError) + // KVSet will store a key-value pair, unique per plugin. KVSet(key string, value []byte) *model.AppError diff --git a/plugin/client_rpc_generated.go b/plugin/client_rpc_generated.go index b43b93c5b..9106f2fad 100644 --- a/plugin/client_rpc_generated.go +++ b/plugin/client_rpc_generated.go @@ -1820,6 +1820,36 @@ func (s *apiRPCServer) UpdatePost(args *Z_UpdatePostArgs, returns *Z_UpdatePostR return nil } +type Z_CopyFileInfosArgs struct { + A string + B []string +} + +type Z_CopyFileInfosReturns struct { + A []string + B *model.AppError +} + +func (g *apiRPCClient) CopyFileInfos(userId string, fileIds []string) ([]string, *model.AppError) { + _args := &Z_CopyFileInfosArgs{userId, fileIds} + _returns := &Z_CopyFileInfosReturns{} + if err := g.client.Call("Plugin.CopyFileInfos", _args, _returns); err != nil { + log.Printf("RPC call to CopyFileInfos API failed: %s", err.Error()) + } + return _returns.A, _returns.B +} + +func (s *apiRPCServer) CopyFileInfos(args *Z_CopyFileInfosArgs, returns *Z_CopyFileInfosReturns) error { + if hook, ok := s.impl.(interface { + CopyFileInfos(userId string, fileIds []string) ([]string, *model.AppError) + }); ok { + returns.A, returns.B = hook.CopyFileInfos(args.A, args.B) + } else { + return fmt.Errorf("API CopyFileInfos called but not implemented.") + } + return nil +} + type Z_KVSetArgs struct { A string B []byte diff --git a/plugin/plugintest/api.go b/plugin/plugintest/api.go index 35a83ca9c..cf9ffa6a8 100644 --- a/plugin/plugintest/api.go +++ b/plugin/plugintest/api.go @@ -37,6 +37,31 @@ func (_m *API) AddChannelMember(channelId string, userId string) (*model.Channel return r0, r1 } +// CopyFileInfos provides a mock function with given fields: userId, fileIds +func (_m *API) CopyFileInfos(userId string, fileIds []string) ([]string, *model.AppError) { + ret := _m.Called(userId, fileIds) + + var r0 []string + if rf, ok := ret.Get(0).(func(string, []string) []string); ok { + r0 = rf(userId, fileIds) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]string) + } + } + + var r1 *model.AppError + if rf, ok := ret.Get(1).(func(string, []string) *model.AppError); ok { + r1 = rf(userId, fileIds) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(*model.AppError) + } + } + + return r0, r1 +} + // CreateChannel provides a mock function with given fields: channel func (_m *API) CreateChannel(channel *model.Channel) (*model.Channel, *model.AppError) { ret := _m.Called(channel) |