summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/nlopes/slack/files.go
diff options
context:
space:
mode:
authorWim <wim@42.be>2017-07-16 14:29:46 +0200
committerWim <wim@42.be>2017-07-16 14:29:46 +0200
commitaec5e3d77b6e480d04dd8773723de62416a94919 (patch)
tree57ab269e6c46e62e61db04a9ca6fbb55e736519f /vendor/github.com/nlopes/slack/files.go
parent335ddf8db543bf64522196e6928c3d10af64694c (diff)
downloadmatterbridge-msglm-aec5e3d77b6e480d04dd8773723de62416a94919.tar.gz
matterbridge-msglm-aec5e3d77b6e480d04dd8773723de62416a94919.tar.bz2
matterbridge-msglm-aec5e3d77b6e480d04dd8773723de62416a94919.zip
Update vendor (nlopes/slack)
Diffstat (limited to 'vendor/github.com/nlopes/slack/files.go')
-rw-r--r--vendor/github.com/nlopes/slack/files.go63
1 files changed, 50 insertions, 13 deletions
diff --git a/vendor/github.com/nlopes/slack/files.go b/vendor/github.com/nlopes/slack/files.go
index 18fc9ba9..fc4b7e23 100644
--- a/vendor/github.com/nlopes/slack/files.go
+++ b/vendor/github.com/nlopes/slack/files.go
@@ -1,7 +1,9 @@
package slack
import (
+ "context"
"errors"
+ "io"
"net/url"
"strconv"
"strings"
@@ -86,10 +88,14 @@ type File struct {
IsStarred bool `json:"is_starred"`
}
-// FileUploadParameters contains all the parameters necessary (including the optional ones) for an UploadFile() request
+// FileUploadParameters contains all the parameters necessary (including the optional ones) for an UploadFile() request.
+//
+// There are three ways to upload a file. You can either set Content if file is small, set Reader if file is large,
+// or provide a local file path in File to upload it from your filesystem.
type FileUploadParameters struct {
File string
Content string
+ Reader io.Reader
Filetype string
Filename string
Title string
@@ -130,9 +136,9 @@ func NewGetFilesParameters() GetFilesParameters {
}
}
-func fileRequest(path string, values url.Values, debug bool) (*fileResponseFull, error) {
+func fileRequest(ctx context.Context, path string, values url.Values, debug bool) (*fileResponseFull, error) {
response := &fileResponseFull{}
- err := post(path, values, response, debug)
+ err := post(ctx, path, values, response, debug)
if err != nil {
return nil, err
}
@@ -144,13 +150,18 @@ func fileRequest(path string, values url.Values, debug bool) (*fileResponseFull,
// GetFileInfo retrieves a file and related comments
func (api *Client) GetFileInfo(fileID string, count, page int) (*File, []Comment, *Paging, error) {
+ return api.GetFileInfoContext(context.Background(), fileID, count, page)
+}
+
+// GetFileInfoContext retrieves a file and related comments with a custom context
+func (api *Client) GetFileInfoContext(ctx context.Context, fileID string, count, page int) (*File, []Comment, *Paging, error) {
values := url.Values{
"token": {api.config.token},
"file": {fileID},
"count": {strconv.Itoa(count)},
"page": {strconv.Itoa(page)},
}
- response, err := fileRequest("files.info", values, api.debug)
+ response, err := fileRequest(ctx, "files.info", values, api.debug)
if err != nil {
return nil, nil, nil, err
}
@@ -159,6 +170,11 @@ func (api *Client) GetFileInfo(fileID string, count, page int) (*File, []Comment
// GetFiles retrieves all files according to the parameters given
func (api *Client) GetFiles(params GetFilesParameters) ([]File, *Paging, error) {
+ return api.GetFilesContext(context.Background(), params)
+}
+
+// GetFilesContext retrieves all files according to the parameters given with a custom context
+func (api *Client) GetFilesContext(ctx context.Context, params GetFilesParameters) ([]File, *Paging, error) {
values := url.Values{
"token": {api.config.token},
}
@@ -168,12 +184,11 @@ func (api *Client) GetFiles(params GetFilesParameters) ([]File, *Paging, error)
if params.Channel != DEFAULT_FILES_CHANNEL {
values.Add("channel", params.Channel)
}
- // XXX: this is broken. fix it with a proper unix timestamp
if params.TimestampFrom != DEFAULT_FILES_TS_FROM {
- values.Add("ts_from", params.TimestampFrom.String())
+ values.Add("ts_from", strconv.FormatInt(int64(params.TimestampFrom), 10))
}
if params.TimestampTo != DEFAULT_FILES_TS_TO {
- values.Add("ts_to", params.TimestampTo.String())
+ values.Add("ts_to", strconv.FormatInt(int64(params.TimestampTo), 10))
}
if params.Types != DEFAULT_FILES_TYPES {
values.Add("types", params.Types)
@@ -184,7 +199,7 @@ func (api *Client) GetFiles(params GetFilesParameters) ([]File, *Paging, error)
if params.Page != DEFAULT_FILES_PAGE {
values.Add("page", strconv.Itoa(params.Page))
}
- response, err := fileRequest("files.list", values, api.debug)
+ response, err := fileRequest(ctx, "files.list", values, api.debug)
if err != nil {
return nil, nil, err
}
@@ -193,6 +208,11 @@ func (api *Client) GetFiles(params GetFilesParameters) ([]File, *Paging, error)
// UploadFile uploads a file
func (api *Client) UploadFile(params FileUploadParameters) (file *File, err error) {
+ return api.UploadFileContext(context.Background(), params)
+}
+
+// UploadFileContext uploads a file and setting a custom context
+func (api *Client) UploadFileContext(ctx context.Context, params FileUploadParameters) (file *File, err error) {
// Test if user token is valid. This helps because client.Do doesn't like this for some reason. XXX: More
// investigation needed, but for now this will do.
_, err = api.AuthTest()
@@ -220,9 +240,11 @@ func (api *Client) UploadFile(params FileUploadParameters) (file *File, err erro
}
if params.Content != "" {
values.Add("content", params.Content)
- err = post("files.upload", values, response, api.debug)
+ err = post(ctx, "files.upload", values, response, api.debug)
} else if params.File != "" {
- err = postWithMultipartResponse("files.upload", params.File, values, response, api.debug)
+ err = postLocalWithMultipartResponse(ctx, "files.upload", params.File, "file", values, response, api.debug)
+ } else if params.Reader != nil {
+ err = postWithMultipartResponse(ctx, "files.upload", params.Filename, "file", values, params.Reader, response, api.debug)
}
if err != nil {
return nil, err
@@ -235,11 +257,16 @@ func (api *Client) UploadFile(params FileUploadParameters) (file *File, err erro
// DeleteFile deletes a file
func (api *Client) DeleteFile(fileID string) error {
+ return api.DeleteFileContext(context.Background(), fileID)
+}
+
+// DeleteFileContext deletes a file with a custom context
+func (api *Client) DeleteFileContext(ctx context.Context, fileID string) error {
values := url.Values{
"token": {api.config.token},
"file": {fileID},
}
- _, err := fileRequest("files.delete", values, api.debug)
+ _, err := fileRequest(ctx, "files.delete", values, api.debug)
if err != nil {
return err
}
@@ -249,11 +276,16 @@ func (api *Client) DeleteFile(fileID string) error {
// RevokeFilePublicURL disables public/external sharing for a file
func (api *Client) RevokeFilePublicURL(fileID string) (*File, error) {
+ return api.RevokeFilePublicURLContext(context.Background(), fileID)
+}
+
+// RevokeFilePublicURLContext disables public/external sharing for a file with a custom context
+func (api *Client) RevokeFilePublicURLContext(ctx context.Context, fileID string) (*File, error) {
values := url.Values{
"token": {api.config.token},
"file": {fileID},
}
- response, err := fileRequest("files.revokePublicURL", values, api.debug)
+ response, err := fileRequest(ctx, "files.revokePublicURL", values, api.debug)
if err != nil {
return nil, err
}
@@ -262,11 +294,16 @@ func (api *Client) RevokeFilePublicURL(fileID string) (*File, error) {
// ShareFilePublicURL enabled public/external sharing for a file
func (api *Client) ShareFilePublicURL(fileID string) (*File, []Comment, *Paging, error) {
+ return api.ShareFilePublicURLContext(context.Background(), fileID)
+}
+
+// ShareFilePublicURLContext enabled public/external sharing for a file with a custom context
+func (api *Client) ShareFilePublicURLContext(ctx context.Context, fileID string) (*File, []Comment, *Paging, error) {
values := url.Values{
"token": {api.config.token},
"file": {fileID},
}
- response, err := fileRequest("files.sharedPublicURL", values, api.debug)
+ response, err := fileRequest(ctx, "files.sharedPublicURL", values, api.debug)
if err != nil {
return nil, nil, nil, err
}