aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mastodon/mastodon.go81
-rw-r--r--mastodon/status.go39
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
}