diff options
| author | r <r@freesoftwareextremist.com> | 2023-10-01 13:29:04 +0000 | 
|---|---|---|
| committer | r <r@freesoftwareextremist.com> | 2023-10-01 13:29:04 +0000 | 
| commit | df031d5eddc3dc581e228bfcd9a327b9f169cdd5 (patch) | |
| tree | ccc0fe85555066d3e69fd030ebf62e6ec8547bad /mastodon | |
| parent | 81bdc7c705d5d21f62927167d5b2c8e4932c9570 (diff) | |
| download | bloat-df031d5eddc3dc581e228bfcd9a327b9f169cdd5.tar.gz bloat-df031d5eddc3dc581e228bfcd9a327b9f169cdd5.zip | |
Cleanup file upload functions
Diffstat (limited to 'mastodon')
| -rw-r--r-- | mastodon/mastodon.go | 81 | ||||
| -rw-r--r-- | mastodon/status.go | 39 | 
2 files changed, 23 insertions, 97 deletions
| diff --git a/mastodon/mastodon.go b/mastodon/mastodon.go index 94e2cf5..a80269d 100644 --- a/mastodon/mastodon.go +++ b/mastodon/mastodon.go @@ -2,18 +2,14 @@  package mastodon  import ( -	"bytes"  	"context"  	"encoding/json"  	"errors"  	"fmt"  	"io" -	"mime/multipart"  	"net/http"  	"net/url" -	"os"  	"path" -	"path/filepath"  	"strings"  	"github.com/tomnomnom/linkheader" @@ -61,83 +57,6 @@ func (c *Client) doAPI(ctx context.Context, method string, uri string, params in  		if err != nil {  			return err  		} -	} else if file, ok := params.(string); ok { -		f, err := os.Open(file) -		if err != nil { -			return err -		} -		defer f.Close() - -		var buf bytes.Buffer -		mw := multipart.NewWriter(&buf) -		part, err := mw.CreateFormFile("file", filepath.Base(file)) -		if err != nil { -			return err -		} -		_, err = io.Copy(part, f) -		if err != nil { -			return err -		} -		err = mw.Close() -		if err != nil { -			return err -		} -		req, err = http.NewRequest(method, u.String(), &buf) -		if err != nil { -			return err -		} -		ct = mw.FormDataContentType() -	} else if file, ok := params.(*multipart.FileHeader); ok { -		f, err := file.Open() -		if err != nil { -			return err -		} -		defer f.Close() - -		var buf bytes.Buffer -		mw := multipart.NewWriter(&buf) -		fname := filepath.Base(file.Filename) -		err = mw.WriteField("description", fname) -		if err != nil { -			return err -		} -		part, err := mw.CreateFormFile("file", fname) -		if err != nil { -			return err -		} -		_, err = io.Copy(part, f) -		if err != nil { -			return err -		} -		err = mw.Close() -		if err != nil { -			return err -		} -		req, err = http.NewRequest(method, u.String(), &buf) -		if err != nil { -			return err -		} -		ct = mw.FormDataContentType() -	} else if reader, ok := params.(io.Reader); ok { -		var buf bytes.Buffer -		mw := multipart.NewWriter(&buf) -		part, err := mw.CreateFormFile("file", "upload") -		if err != nil { -			return err -		} -		_, err = io.Copy(part, reader) -		if err != nil { -			return err -		} -		err = mw.Close() -		if err != nil { -			return err -		} -		req, err = http.NewRequest(method, u.String(), &buf) -		if err != nil { -			return err -		} -		ct = mw.FormDataContentType()  	} else if mr, ok := params.(*multipartRequest); ok {  		req, err = http.NewRequest(method, u.String(), mr.Data)  		if err != nil { diff --git a/mastodon/status.go b/mastodon/status.go index f860c31..20f74a5 100644 --- a/mastodon/status.go +++ b/mastodon/status.go @@ -1,12 +1,14 @@  package mastodon  import ( +	"bytes"  	"context"  	"fmt"  	"io"  	"mime/multipart"  	"net/http"  	"net/url" +	"path/filepath"  	"time"  ) @@ -293,30 +295,35 @@ func (c *Client) Search(ctx context.Context, q string, qType string, limit int,  	return &results, nil  } -// UploadMedia upload a media attachment from a file. -func (c *Client) UploadMedia(ctx context.Context, file string) (*Attachment, error) { -	var attachment Attachment -	err := c.doAPI(ctx, http.MethodPost, "/api/v1/media", file, &attachment, nil) +func (c *Client) UploadMediaFromMultipartFileHeader(ctx context.Context, fh *multipart.FileHeader) (*Attachment, error) { +	f, err := fh.Open()  	if err != nil {  		return nil, err  	} -	return &attachment, nil -} +	defer f.Close() -// UploadMediaFromReader uploads a media attachment from a io.Reader. -func (c *Client) UploadMediaFromReader(ctx context.Context, reader io.Reader) (*Attachment, error) { -	var attachment Attachment -	err := c.doAPI(ctx, http.MethodPost, "/api/v1/media", reader, &attachment, nil) +	var buf bytes.Buffer +	mw := multipart.NewWriter(&buf) +	fname := filepath.Base(fh.Filename) +	err = mw.WriteField("description", fname)  	if err != nil {  		return nil, err  	} -	return &attachment, nil -} - -// UploadMediaFromReader uploads a media attachment from a io.Reader. -func (c *Client) UploadMediaFromMultipartFileHeader(ctx context.Context, fh *multipart.FileHeader) (*Attachment, error) { +	part, err := mw.CreateFormFile("file", fname) +	if err != nil { +		return nil, err +	} +	_, err = io.Copy(part, f) +	if err != nil { +		return nil, err +	} +	err = mw.Close() +	if err != nil { +		return nil, err +	} +	params := &multipartRequest{Data: &buf, ContentType: mw.FormDataContentType()}  	var attachment Attachment -	err := c.doAPI(ctx, http.MethodPost, "/api/v1/media", fh, &attachment, nil) +	err = c.doAPI(ctx, http.MethodPost, "/api/v1/media", params, &attachment, nil)  	if err != nil {  		return nil, err  	} | 
