aboutsummaryrefslogtreecommitdiff
path: root/mastodon/lists.go
diff options
context:
space:
mode:
authorr <r@freesoftwareextremist.com>2019-12-13 18:08:26 +0000
committerr <r@freesoftwareextremist.com>2019-12-13 18:26:24 +0000
commit5e4da01c3ae3ae2e870faba9085d9d9213c01c29 (patch)
tree39d6f1e76b901549f194ddbac3c6cb82e0abd019 /mastodon/lists.go
downloadbloat-5e4da01c3ae3ae2e870faba9085d9d9213c01c29.tar.gz
bloat-5e4da01c3ae3ae2e870faba9085d9d9213c01c29.zip
Initial commit
Diffstat (limited to 'mastodon/lists.go')
-rw-r--r--mastodon/lists.go107
1 files changed, 107 insertions, 0 deletions
diff --git a/mastodon/lists.go b/mastodon/lists.go
new file mode 100644
index 0000000..d323b79
--- /dev/null
+++ b/mastodon/lists.go
@@ -0,0 +1,107 @@
+package mastodon
+
+import (
+ "context"
+ "fmt"
+ "net/http"
+ "net/url"
+)
+
+// List is metadata for a list of users.
+type List struct {
+ ID string `json:"id"`
+ Title string `json:"title"`
+}
+
+// GetLists returns all the lists on the current account.
+func (c *Client) GetLists(ctx context.Context) ([]*List, error) {
+ var lists []*List
+ err := c.doAPI(ctx, http.MethodGet, "/api/v1/lists", nil, &lists, nil)
+ if err != nil {
+ return nil, err
+ }
+ return lists, nil
+}
+
+// GetAccountLists returns the lists containing a given account.
+func (c *Client) GetAccountLists(ctx context.Context, id string) ([]*List, error) {
+ var lists []*List
+ err := c.doAPI(ctx, http.MethodGet, fmt.Sprintf("/api/v1/accounts/%s/lists", url.PathEscape(string(id))), nil, &lists, nil)
+ if err != nil {
+ return nil, err
+ }
+ return lists, nil
+}
+
+// GetListAccounts returns the accounts in a given list.
+func (c *Client) GetListAccounts(ctx context.Context, id string) ([]*Account, error) {
+ var accounts []*Account
+ err := c.doAPI(ctx, http.MethodGet, fmt.Sprintf("/api/v1/lists/%s/accounts", url.PathEscape(string(id))), url.Values{"limit": {"0"}}, &accounts, nil)
+ if err != nil {
+ return nil, err
+ }
+ return accounts, nil
+}
+
+// GetList retrieves a list by string.
+func (c *Client) GetList(ctx context.Context, id string) (*List, error) {
+ var list List
+ err := c.doAPI(ctx, http.MethodGet, fmt.Sprintf("/api/v1/lists/%s", url.PathEscape(string(id))), nil, &list, nil)
+ if err != nil {
+ return nil, err
+ }
+ return &list, nil
+}
+
+// CreateList creates a new list with a given title.
+func (c *Client) CreateList(ctx context.Context, title string) (*List, error) {
+ params := url.Values{}
+ params.Set("title", title)
+
+ var list List
+ err := c.doAPI(ctx, http.MethodPost, "/api/v1/lists", params, &list, nil)
+ if err != nil {
+ return nil, err
+ }
+ return &list, nil
+}
+
+// RenameList assigns a new title to a list.
+func (c *Client) RenameList(ctx context.Context, id string, title string) (*List, error) {
+ params := url.Values{}
+ params.Set("title", title)
+
+ var list List
+ err := c.doAPI(ctx, http.MethodPut, fmt.Sprintf("/api/v1/lists/%s", url.PathEscape(string(id))), params, &list, nil)
+ if err != nil {
+ return nil, err
+ }
+ return &list, nil
+}
+
+// DeleteList removes a list.
+func (c *Client) DeleteList(ctx context.Context, id string) error {
+ return c.doAPI(ctx, http.MethodDelete, fmt.Sprintf("/api/v1/lists/%s", url.PathEscape(string(id))), nil, nil, nil)
+}
+
+// AddToList adds accounts to a list.
+//
+// Only accounts already followed by the user can be added to a list.
+func (c *Client) AddToList(ctx context.Context, list string, accounts ...string) error {
+ params := url.Values{}
+ for _, acct := range accounts {
+ params.Add("account_ids", string(acct))
+ }
+
+ return c.doAPI(ctx, http.MethodPost, fmt.Sprintf("/api/v1/lists/%s/accounts", url.PathEscape(string(list))), params, nil, nil)
+}
+
+// RemoveFromList removes accounts from a list.
+func (c *Client) RemoveFromList(ctx context.Context, list string, accounts ...string) error {
+ params := url.Values{}
+ for _, acct := range accounts {
+ params.Add("account_ids", string(acct))
+ }
+
+ return c.doAPI(ctx, http.MethodDelete, fmt.Sprintf("/api/v1/lists/%s/accounts", url.PathEscape(string(list))), params, nil, nil)
+}