account.go
author Mikael Berthe <mikael@lilotux.net>
Sat, 15 Apr 2017 21:08:34 +0200
changeset 125 2bbb72b9ebf6
parent 120 579912e9d0ef
child 130 c450bb73f59a
permissions -rw-r--r--
Rework the API wrappers to handle arrays of parameters This make some API calls work better (reports with several statuses, statuses with several attachments, relationships for multiple accounts...).
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8
6d89be3dd966 Placeholders.
Ollivier Robert <roberto@keltia.net>
parents:
diff changeset
     1
package gondole
109
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
     2
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
     3
import (
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
     4
	"fmt"
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
     5
	"strconv"
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
     6
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
     7
	"github.com/sendgrid/rest"
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
     8
)
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
     9
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    10
// getAccountsOptions contains option fields for POST and DELETE API calls
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    11
type getAccountsOptions struct {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    12
	// The ID is used for most commands
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    13
	ID int
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    14
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    15
	// The following fields are used when searching for accounts
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    16
	Q     string
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    17
	Limit int
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    18
}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    19
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    20
// getSingleAccount returns an account entity
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
    21
// The operation 'op' can be "account", "verify_credentials", "follow",
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
    22
// "unfollow", "block", "unblock", "mute", "unmute",
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
    23
// "follow_requests/authorize" or // "follow_requests/reject".
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
    24
// The id is optional and depends on the operation.
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
    25
func (g *Client) getSingleAccount(op string, id int) (*Account, error) {
109
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    26
	var endPoint string
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    27
	method := rest.Get
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    28
	strID := strconv.Itoa(id)
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    29
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
    30
	switch op {
109
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    31
	case "account":
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    32
		endPoint = "accounts/" + strID
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    33
	case "verify_credentials":
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    34
		endPoint = "accounts/verify_credentials"
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    35
	case "follow", "unfollow", "block", "unblock", "mute", "unmute":
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
    36
		endPoint = "accounts/" + strID + "/" + op
109
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    37
		method = rest.Post
115
0684ac8b6634 Add FollowRequestAuthorize()
Mikael Berthe <mikael@lilotux.net>
parents: 114
diff changeset
    38
	case "follow_requests/authorize", "follow_requests/reject":
0684ac8b6634 Add FollowRequestAuthorize()
Mikael Berthe <mikael@lilotux.net>
parents: 114
diff changeset
    39
		// The documentation is incorrect, the endpoint actually
0684ac8b6634 Add FollowRequestAuthorize()
Mikael Berthe <mikael@lilotux.net>
parents: 114
diff changeset
    40
		// is "follow_requests/:id/{authorize|reject}"
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
    41
		endPoint = op[:16] + strID + "/" + op[16:]
115
0684ac8b6634 Add FollowRequestAuthorize()
Mikael Berthe <mikael@lilotux.net>
parents: 114
diff changeset
    42
		method = rest.Post
109
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    43
	default:
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    44
		return nil, ErrInvalidParameter
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    45
	}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    46
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    47
	var account Account
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
    48
	if err := g.apiCall(endPoint, method, nil, &account); err != nil {
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
    49
		return nil, err
109
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    50
	}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    51
	return &account, nil
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    52
}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    53
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    54
// getMultipleAccounts returns a list of account entities
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
    55
// The operation 'op' can be "followers", "following", "search", "blocks",
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
    56
// "mutes", "follow_requests".
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
    57
// The id is optional and depends on the operation.
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
    58
func (g *Client) getMultipleAccounts(op string, opts *getAccountsOptions) ([]Account, error) {
109
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    59
	var endPoint string
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
    60
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
    61
	switch op {
109
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    62
	case "followers", "following":
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    63
		if opts == nil || opts.ID < 1 {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    64
			return []Account{}, ErrInvalidID
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    65
		}
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
    66
		endPoint = "accounts/" + strconv.Itoa(opts.ID) + "/" + op
109
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    67
	case "follow_requests", "blocks", "mutes":
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
    68
		endPoint = op
109
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    69
	case "search":
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    70
		if opts == nil || opts.Q == "" {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    71
			return []Account{}, ErrInvalidParameter
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    72
		}
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
    73
		endPoint = "accounts/" + op
109
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    74
	default:
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    75
		return nil, ErrInvalidParameter
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    76
	}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    77
114
0a1f493588ee Add GetAccountStatuses()
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
    78
	// Handle target-specific query parameters
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
    79
	params := make(apiCallParams)
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
    80
	if op == "search" {
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
    81
		params["q"] = opts.Q
109
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    82
		if opts.Limit > 0 {
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
    83
			params["limit"] = strconv.Itoa(opts.Limit)
109
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    84
		}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    85
	}
114
0a1f493588ee Add GetAccountStatuses()
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
    86
109
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    87
	var accounts []Account
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
    88
	if err := g.apiCall(endPoint, rest.Get, params, &accounts); err != nil {
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
    89
		return nil, err
109
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    90
	}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    91
	return accounts, nil
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    92
}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    93
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    94
// GetAccount returns an account entity
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    95
// The returned value can be nil if there is an error or if the
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    96
// requested ID does not exist.
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    97
func (g *Client) GetAccount(id int) (*Account, error) {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    98
	account, err := g.getSingleAccount("account", id)
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    99
	if err != nil {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   100
		return nil, err
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   101
	}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   102
	if account != nil && account.ID == 0 {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   103
		return nil, ErrEntityNotFound
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   104
	}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   105
	return account, nil
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   106
}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   107
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   108
// GetCurrentAccount returns the current user account
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   109
func (g *Client) GetCurrentAccount() (*Account, error) {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   110
	account, err := g.getSingleAccount("verify_credentials", 0)
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   111
	if err != nil {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   112
		return nil, err
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   113
	}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   114
	if account != nil && account.ID == 0 {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   115
		return nil, ErrEntityNotFound
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   116
	}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   117
	return account, nil
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   118
}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   119
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   120
// GetAccountFollowers returns the list of accounts following a given account
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   121
func (g *Client) GetAccountFollowers(accountID int) ([]Account, error) {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   122
	o := &getAccountsOptions{ID: accountID}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   123
	return g.getMultipleAccounts("followers", o)
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   124
}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   125
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   126
// GetAccountFollowing returns the list of accounts a given account is following
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   127
func (g *Client) GetAccountFollowing(accountID int) ([]Account, error) {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   128
	o := &getAccountsOptions{ID: accountID}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   129
	return g.getMultipleAccounts("following", o)
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   130
}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   131
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   132
// FollowAccount follows an account
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   133
func (g *Client) FollowAccount(id int) error {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   134
	account, err := g.getSingleAccount("follow", id)
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   135
	if err != nil {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   136
		return err
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   137
	}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   138
	if account != nil && account.ID != id {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   139
		return ErrEntityNotFound
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   140
	}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   141
	return nil
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   142
}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   143
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   144
// UnfollowAccount unfollows an account
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   145
func (g *Client) UnfollowAccount(id int) error {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   146
	account, err := g.getSingleAccount("unfollow", id)
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   147
	if err != nil {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   148
		return err
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   149
	}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   150
	if account != nil && account.ID != id {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   151
		return ErrEntityNotFound
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   152
	}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   153
	return nil
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   154
}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   155
111
fc7cd6c90b2e Add FollowRemoteAccount() and GetAccountRelationships()
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   156
// FollowRemoteAccount follows a remote account
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
   157
// The parameter 'uri' is a URI (e.g. "username@domain").
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
   158
func (g *Client) FollowRemoteAccount(uri string) (*Account, error) {
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
   159
	if uri == "" {
111
fc7cd6c90b2e Add FollowRemoteAccount() and GetAccountRelationships()
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   160
		return nil, ErrInvalidID
fc7cd6c90b2e Add FollowRemoteAccount() and GetAccountRelationships()
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   161
	}
fc7cd6c90b2e Add FollowRemoteAccount() and GetAccountRelationships()
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   162
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
   163
	params := make(apiCallParams)
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
   164
	params["uri"] = uri
111
fc7cd6c90b2e Add FollowRemoteAccount() and GetAccountRelationships()
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   165
fc7cd6c90b2e Add FollowRemoteAccount() and GetAccountRelationships()
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   166
	var account Account
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
   167
	if err := g.apiCall("follows", rest.Post, params, &account); err != nil {
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
   168
		return nil, err
111
fc7cd6c90b2e Add FollowRemoteAccount() and GetAccountRelationships()
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   169
	}
fc7cd6c90b2e Add FollowRemoteAccount() and GetAccountRelationships()
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   170
	if account.ID == 0 {
fc7cd6c90b2e Add FollowRemoteAccount() and GetAccountRelationships()
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   171
		return nil, ErrEntityNotFound
fc7cd6c90b2e Add FollowRemoteAccount() and GetAccountRelationships()
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   172
	}
fc7cd6c90b2e Add FollowRemoteAccount() and GetAccountRelationships()
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   173
	return &account, nil
fc7cd6c90b2e Add FollowRemoteAccount() and GetAccountRelationships()
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   174
}
fc7cd6c90b2e Add FollowRemoteAccount() and GetAccountRelationships()
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   175
109
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   176
// BlockAccount blocks an account
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   177
func (g *Client) BlockAccount(id int) error {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   178
	account, err := g.getSingleAccount("block", id)
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   179
	if err != nil {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   180
		return err
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   181
	}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   182
	if account != nil && account.ID != id {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   183
		return ErrEntityNotFound
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   184
	}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   185
	return nil
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   186
}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   187
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   188
// UnblockAccount unblocks an account
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   189
func (g *Client) UnblockAccount(id int) error {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   190
	account, err := g.getSingleAccount("unblock", id)
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   191
	if err != nil {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   192
		return err
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   193
	}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   194
	if account != nil && account.ID != id {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   195
		return ErrEntityNotFound
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   196
	}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   197
	return nil
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   198
}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   199
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   200
// MuteAccount mutes an account
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   201
func (g *Client) MuteAccount(id int) error {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   202
	account, err := g.getSingleAccount("mute", id)
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   203
	if err != nil {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   204
		return err
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   205
	}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   206
	if account != nil && account.ID != id {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   207
		return ErrEntityNotFound
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   208
	}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   209
	return nil
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   210
}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   211
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   212
// UnmuteAccount unmutes an account
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   213
func (g *Client) UnmuteAccount(id int) error {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   214
	account, err := g.getSingleAccount("unmute", id)
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   215
	if err != nil {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   216
		return err
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   217
	}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   218
	if account != nil && account.ID != id {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   219
		return ErrEntityNotFound
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   220
	}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   221
	return nil
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   222
}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   223
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   224
// SearchAccounts returns a list of accounts matching the query string
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   225
// The limit parameter is optional (can be 0).
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   226
func (g *Client) SearchAccounts(query string, limit int) ([]Account, error) {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   227
	o := &getAccountsOptions{Q: query, Limit: limit}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   228
	return g.getMultipleAccounts("search", o)
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   229
}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   230
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   231
// GetBlockedAccounts returns the list of blocked accounts
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   232
func (g *Client) GetBlockedAccounts() ([]Account, error) {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   233
	return g.getMultipleAccounts("blocks", nil)
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   234
}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   235
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   236
// GetMutedAccounts returns the list of muted accounts
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   237
func (g *Client) GetMutedAccounts() ([]Account, error) {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   238
	return g.getMultipleAccounts("mutes", nil)
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   239
}
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   240
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   241
// GetAccountFollowRequests returns the list of follow requests accounts
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   242
func (g *Client) GetAccountFollowRequests() ([]Account, error) {
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   243
	return g.getMultipleAccounts("follow_requests", nil)
37de1a30f465 Add account-related API calls
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   244
}
111
fc7cd6c90b2e Add FollowRemoteAccount() and GetAccountRelationships()
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   245
fc7cd6c90b2e Add FollowRemoteAccount() and GetAccountRelationships()
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   246
// GetAccountRelationships returns a list of relationship entities for the given accounts
fc7cd6c90b2e Add FollowRemoteAccount() and GetAccountRelationships()
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   247
func (g *Client) GetAccountRelationships(accountIDs []int) ([]Relationship, error) {
fc7cd6c90b2e Add FollowRemoteAccount() and GetAccountRelationships()
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   248
	if len(accountIDs) < 1 {
114
0a1f493588ee Add GetAccountStatuses()
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
   249
		return nil, ErrInvalidID
111
fc7cd6c90b2e Add FollowRemoteAccount() and GetAccountRelationships()
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   250
	}
fc7cd6c90b2e Add FollowRemoteAccount() and GetAccountRelationships()
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   251
125
2bbb72b9ebf6 Rework the API wrappers to handle arrays of parameters
Mikael Berthe <mikael@lilotux.net>
parents: 120
diff changeset
   252
	params := make(apiCallParams)
2bbb72b9ebf6 Rework the API wrappers to handle arrays of parameters
Mikael Berthe <mikael@lilotux.net>
parents: 120
diff changeset
   253
	for i, id := range accountIDs {
2bbb72b9ebf6 Rework the API wrappers to handle arrays of parameters
Mikael Berthe <mikael@lilotux.net>
parents: 120
diff changeset
   254
		qID := fmt.Sprintf("id[%d]", i+1)
2bbb72b9ebf6 Rework the API wrappers to handle arrays of parameters
Mikael Berthe <mikael@lilotux.net>
parents: 120
diff changeset
   255
		params[qID] = strconv.Itoa(id)
111
fc7cd6c90b2e Add FollowRemoteAccount() and GetAccountRelationships()
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   256
	}
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
   257
114
0a1f493588ee Add GetAccountStatuses()
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
   258
	var rl []Relationship
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
   259
	if err := g.apiCall("accounts/relationships", rest.Get, params, &rl); err != nil {
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
   260
		return nil, err
111
fc7cd6c90b2e Add FollowRemoteAccount() and GetAccountRelationships()
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   261
	}
fc7cd6c90b2e Add FollowRemoteAccount() and GetAccountRelationships()
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   262
	return rl, nil
fc7cd6c90b2e Add FollowRemoteAccount() and GetAccountRelationships()
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   263
}
114
0a1f493588ee Add GetAccountStatuses()
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
   264
0a1f493588ee Add GetAccountStatuses()
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
   265
// GetAccountStatuses returns a list of status entities for the given account
0a1f493588ee Add GetAccountStatuses()
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
   266
// If onlyMedia is true, returns only statuses that have media attachments.
0a1f493588ee Add GetAccountStatuses()
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
   267
// If excludeReplies is true, skip statuses that reply to other statuses.
0a1f493588ee Add GetAccountStatuses()
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
   268
func (g *Client) GetAccountStatuses(accountID int, onlyMedia, excludeReplies bool) ([]Status, error) {
0a1f493588ee Add GetAccountStatuses()
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
   269
	if accountID < 1 {
0a1f493588ee Add GetAccountStatuses()
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
   270
		return nil, ErrInvalidID
0a1f493588ee Add GetAccountStatuses()
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
   271
	}
0a1f493588ee Add GetAccountStatuses()
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
   272
0a1f493588ee Add GetAccountStatuses()
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
   273
	endPoint := "accounts/" + strconv.Itoa(accountID) + "/" + "statuses"
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
   274
	params := make(apiCallParams)
114
0a1f493588ee Add GetAccountStatuses()
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
   275
	if onlyMedia {
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
   276
		params["only_media"] = "true"
114
0a1f493588ee Add GetAccountStatuses()
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
   277
	}
0a1f493588ee Add GetAccountStatuses()
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
   278
	if excludeReplies {
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
   279
		params["exclude_replies"] = "true"
114
0a1f493588ee Add GetAccountStatuses()
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
   280
	}
0a1f493588ee Add GetAccountStatuses()
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
   281
0a1f493588ee Add GetAccountStatuses()
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
   282
	var sl []Status
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
   283
	if err := g.apiCall(endPoint, rest.Get, params, &sl); err != nil {
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 115
diff changeset
   284
		return nil, err
114
0a1f493588ee Add GetAccountStatuses()
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
   285
	}
0a1f493588ee Add GetAccountStatuses()
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
   286
	return sl, nil
0a1f493588ee Add GetAccountStatuses()
Mikael Berthe <mikael@lilotux.net>
parents: 111
diff changeset
   287
}
115
0684ac8b6634 Add FollowRequestAuthorize()
Mikael Berthe <mikael@lilotux.net>
parents: 114
diff changeset
   288
0684ac8b6634 Add FollowRequestAuthorize()
Mikael Berthe <mikael@lilotux.net>
parents: 114
diff changeset
   289
// FollowRequestAuthorize authorizes or rejects an account follow-request
0684ac8b6634 Add FollowRequestAuthorize()
Mikael Berthe <mikael@lilotux.net>
parents: 114
diff changeset
   290
func (g *Client) FollowRequestAuthorize(accountID int, authorize bool) error {
0684ac8b6634 Add FollowRequestAuthorize()
Mikael Berthe <mikael@lilotux.net>
parents: 114
diff changeset
   291
	endPoint := "follow_requests/reject"
0684ac8b6634 Add FollowRequestAuthorize()
Mikael Berthe <mikael@lilotux.net>
parents: 114
diff changeset
   292
	if authorize {
0684ac8b6634 Add FollowRequestAuthorize()
Mikael Berthe <mikael@lilotux.net>
parents: 114
diff changeset
   293
		endPoint = "follow_requests/authorize"
0684ac8b6634 Add FollowRequestAuthorize()
Mikael Berthe <mikael@lilotux.net>
parents: 114
diff changeset
   294
	}
0684ac8b6634 Add FollowRequestAuthorize()
Mikael Berthe <mikael@lilotux.net>
parents: 114
diff changeset
   295
	_, err := g.getSingleAccount(endPoint, accountID)
0684ac8b6634 Add FollowRequestAuthorize()
Mikael Berthe <mikael@lilotux.net>
parents: 114
diff changeset
   296
	return err
0684ac8b6634 Add FollowRequestAuthorize()
Mikael Berthe <mikael@lilotux.net>
parents: 114
diff changeset
   297
}