123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- 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)
- }
|